mirror of
https://github.com/zeldaret/st
synced 2026-05-31 17:32:08 -04:00
69ef244371
* merge headers from nitro decomp * cleanup: use inlines from g2.h and gx.h when changing registers * cleanup: remove externs declarations in source files
40 lines
1.2 KiB
Python
Executable File
40 lines
1.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="unpack packed g2 values to use in inlines")
|
|
parser.add_argument('packed_value')
|
|
args = parser.parse_args()
|
|
|
|
if isinstance(args.packed_value, str):
|
|
value = int(args.packed_value, 0)
|
|
elif isinstance(args.packed_value, int):
|
|
value = args.packed_value
|
|
else:
|
|
raise NotImplementedError("ERROR: unknown arg type")
|
|
|
|
# masked are guessed based on shift values
|
|
mask_map = {
|
|
0xC000: 0x0E, # (<< 0x0E) - 1100 0000 0000 0000; mask = 0xC000
|
|
0x0080: 0x07, # (<< 0x07) - 0011 1111 0000 0000; mask = 0x3F00
|
|
0x3F00: 0x08, # (<< 0x08) - 0000 0000 1000 0000; mask = 0x0080
|
|
0x007C: 0x02, # (<< 0x02) - 0000 0000 0111 1100; mask = 0x007C
|
|
}
|
|
|
|
shift_map = {
|
|
0x0E: "scrSize ",
|
|
0x08: "scrBase ",
|
|
0x07: "colMode ",
|
|
0x02: "charBase",
|
|
}
|
|
|
|
print("Parameters:")
|
|
for mask, shift in mask_map.items():
|
|
if value & mask:
|
|
v = (value & mask) >> shift
|
|
print(f" - {shift_map[shift]} = {v:3} (0x{v:02X})")
|
|
else:
|
|
print(f" - {shift_map[shift]} = {0:3}")
|