From 208ea072375937c7258b4841a23185e82fb563b1 Mon Sep 17 00:00:00 2001 From: Rangi Date: Sun, 18 Sep 2022 23:25:22 -0400 Subject: Update and add more tool scripts --- tools/sym_comments.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100755 tools/sym_comments.py (limited to 'tools/sym_comments.py') diff --git a/tools/sym_comments.py b/tools/sym_comments.py new file mode 100755 index 00000000..0f060e5c --- /dev/null +++ b/tools/sym_comments.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +Usage: python sym_comments.py file.asm [pokered.sym] > file_commented.asm + +Comments each label in file.asm with its bank:address from the sym file. +""" + +import sys +import re + +def main(): + if len(sys.argv) not in {2, 3}: + print(f'Usage: {sys.argv[0]} file.asm [pokered.sym] > file_commented.asm', file=sys.stderr) + sys.exit(1) + + wram_name = sys.argv[1] + sym_name = sys.argv[2] if len(sys.argv) == 3 else 'pokered.sym' + + sym_def_rx = re.compile(r'(^{sym})(:.*)|(^\.{sym})(.*)'.format(sym=r'[A-Za-z_][A-Za-z0-9_#@]*')) + + sym_addrs = {} + with open(sym_name, 'r', encoding='utf-8') as file: + for line in file: + line = line.split(';', 1)[0].rstrip() + parts = line.split(' ', 1) + if len(parts) != 2: + continue + addr, sym = parts + sym_addrs[sym] = addr + + with open(wram_name, 'r', encoding='utf-8') as file: + cur_label = None + for line in file: + line = line.rstrip() + if (m = re.match(sym_def_rx, line)): + sym, rest = m.group(1), m.group(2) + if sym is None and rest is None: + sym, rest = m.group(3), m.group(4) + key = sym + if not sym.startswith('.'): + cur_label = sym + elif cur_label: + key = cur_label + sym + if key in sym_addrs: + addr = sym_addrs[key] + line = sym + rest + ' ; ' + addr + print(line) + +if __name__ == '__main__': + main() -- cgit v1.3.1-sl0p