diff options
Diffstat (limited to 'utils/dump_names.py')
-rw-r--r-- | utils/dump_names.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/utils/dump_names.py b/utils/dump_names.py new file mode 100644 index 0000000..12eafb5 --- /dev/null +++ b/utils/dump_names.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- + +import sys, os, io +from read_charmap import read_charmap + +def calc_bank(p): + return p // 0x4000 + +def calc_address(p): + b = calc_bank(p) + o = b * 0x4000 + return 0x4000 + p - o + +def get_sym_loc(p): + b, a = calc_bank(p), calc_address(p) + return '%02x:%04x' % (b, a) + +def get_project_dir(): + script_path = os.path.realpath(__file__) + script_dir = os.path.dirname(script_path) + project_dir = os.path.join(script_dir, '..') + return os.path.normpath(project_dir) + +def get_baserom_path(): + project_dir = get_project_dir() + return os.path.join(project_dir, 'baserom.gb') + +def dump_strings(data): + charmap = read_charmap() + ss = [] + chars = [] + for v in data: + if v in charmap: + c = charmap[v] + chars.append(c) + else: + if chars: + ss.append('"%s"' % ''.join(chars)) + chars = [] + ss.append('$%02x' % v) + if v == 0x50: + if chars: + ss.append('"%s"' % ''.join(chars)) + chars = [] + print '\tdb %s' % ', '.join(ss) + ss = [] + if ss: + print '\tdb %s' % ', '.join(ss) + +def read_data(bank, address, n): + offset = bank * 0x4000 + address - 0x4000 + baserom_path = get_baserom_path() + with open(baserom_path, 'rb') as f: + f.seek(offset) + data = [] + i = 0 + while i < n: + c = f.read(1) + v = ord(c) + if v == 0x50: + i += 1 + data.append(v) + return data + +p = 0xfcaaf # Landmarks +print get_sym_loc(p) +data = read_data(calc_bank(p), calc_address(p), 45) +dump_strings(data) |