summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorYunataSavior <58997725+YunataSavior@users.noreply.github.com>2025-07-18 00:53:45 -0700
committerGitHub <noreply@github.com>2025-07-18 10:53:45 +0300
commit6bc4faa5f7e6bc5b3f8c67e71bd4a42e58d5afc8 (patch)
treeaa241be67082ba503cf08b7e01400987a7de6f8d /tools
parent522f06458db212a86e2bfb752097c1c5c1d7d8b2 (diff)
d_a_obj_brg matching (#2539)
Diffstat (limited to 'tools')
-rw-r--r--tools/utilities/greg_calc.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/tools/utilities/greg_calc.py b/tools/utilities/greg_calc.py
new file mode 100644
index 0000000000..40e1004907
--- /dev/null
+++ b/tools/utilities/greg_calc.py
@@ -0,0 +1,104 @@
+import sys
+
+REG_F = {
+ "TREG_F": 0x00c,
+ "DREG_F": 0x09c,
+ "IREG_F": 0x12c,
+ "SREG_F": 0x1bc,
+ "UREG_F": 0x24c,
+ "OREG_F": 0x2dc,
+ "YREG_F": 0x36c,
+ "KREG_F": 0x3fc,
+ "BREG_F": 0x48c,
+ "MREG_F": 0x51c,
+ "AREG_F": 0x5ac,
+ "PREG_F": 0x63c,
+ "NREG_F": 0x6cc,
+ "WREG_F": 0x75c,
+ "JREG_F": 0x7ec,
+ "HREG_F": 0x87c,
+ "VREG_F": 0x90c,
+ "XREG_F": 0x99c,
+ "ZREG_F": 0xa2c,
+ "nREG_F": 0xabc,
+ "kREG_F": 0xb4c,
+ "oREG_F": 0xbdc,
+ "yREG_F": 0xc6c,
+ "aREG_F": 0xcfc,
+ "hREG_F": 0xd8c,
+ "tREG_F": 0xe1c
+}
+
+REG_S = {
+ "TREG_S": 0x084,
+ "DREG_S": 0x114,
+ "IREG_S": 0x1a4,
+ "SREG_S": 0x234,
+ "UREG_S": 0x2c4,
+ "OREG_S": 0x354,
+ "YREG_S": 0x3e4,
+ "KREG_S": 0x474,
+ "BREG_S": 0x504,
+ "MREG_S": 0x594,
+ "AREG_S": 0x624,
+ "PREG_S": 0x6b4,
+ "NREG_S": 0x744,
+ "WREG_S": 0x7d4,
+ "JREG_S": 0x864,
+ "HREG_S": 0x8f4,
+ "VREG_S": 0x984,
+ "XREG_S": 0xa14,
+ "ZREG_S": 0xaa4,
+ "nREG_S": 0xb34,
+ "kREG_S": 0xbc4,
+ "oREG_S": 0xc54,
+ "yREG_S": 0xce4,
+ "aREG_S": 0xd74,
+ "hREG_S": 0xe04,
+ "tREG_S": 0xe94
+}
+
+
+def find_register(hex_val, reg_map, step):
+ best_match = None
+ best_base = -1
+
+ for name, base in reg_map.items():
+ if base <= hex_val and base > best_base:
+ best_match = name
+ best_base = base
+
+ if best_match is not None:
+ index = (hex_val - best_base) // step
+ expected = best_base + index * step
+ if expected == hex_val:
+ return f"{best_match}({index})"
+
+ raise ValueError("No matching register found.")
+
+
+def main():
+ if len(sys.argv) != 3:
+ print("Usage: greg_calc.py [s|f] [hex_val]")
+ return
+
+ mode = sys.argv[1].lower()
+ try:
+ hex_val = int(sys.argv[2], 16)
+ except ValueError:
+ print("Invalid hex value. Use format like 0x75c")
+ return
+
+ if mode == 'f':
+ result = find_register(hex_val, REG_F, 4)
+ elif mode == 's':
+ result = find_register(hex_val, REG_S, 2)
+ else:
+ print("Invalid mode. Use 's' for short or 'f' for float.")
+ return
+
+ print(result)
+
+
+if __name__ == "__main__":
+ main()