diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/dump_string.py | 42 | ||||
-rwxr-xr-x | tools/messages.py | 61 |
2 files changed, 72 insertions, 31 deletions
diff --git a/tools/dump_string.py b/tools/dump_string.py index 1641944..caf361b 100755 --- a/tools/dump_string.py +++ b/tools/dump_string.py @@ -5,6 +5,11 @@ from charmap import parse_charmap file = open("DMGAKVJ0.1", "rb").read() +multistring = False +if argv[1] == "-m": + argv.pop(1) + multistring = True + bank = int(argv[1], 16) addr = int(argv[2], 16) count = 1 @@ -28,19 +33,32 @@ for x in range(count): if bank > 0: addr += 0x4000 - print("[message_%02x_%04x]" % (bank, addr)) + print("[string_%02x_%04x]" % (bank, addr)) while True: - value = file[offset] | (file[offset + 1] << 8) - offset += 2 + if multistring: + if file[offset] == 0: + offset += 1 + print("\n.db 0\n") + break + val = file[offset] | (file[offset + 1] << 8) + print(".dw %d" % val) + offset += 2 + + while True: + value = file[offset] | (file[offset + 1] << 8) + offset += 2 + + if value == 0xffff: + break + elif value == 0xfffe: + print() + continue + + if value in charmap: + print(charmap[value], end="") + else: + print("<%02x>" % value, end="") - if value == 0xffff: + if not multistring: print("\n") break - elif value == 0xfffe: - print() - continue - - if value in charmap: - print(charmap[value], end="") - else: - print("<%02x>" % value, end="") diff --git a/tools/messages.py b/tools/messages.py index 089bbdd..cb98d00 100755 --- a/tools/messages.py +++ b/tools/messages.py @@ -21,6 +21,9 @@ def convert_message(message): continue break + if not message: + return None + values = [] in_braces = False constant = "" @@ -31,12 +34,13 @@ def convert_message(message): continue if char == "}" and in_braces: in_braces = False - if constant in constants: - values.append(constants[constant]) - elif constant in charmap: - values.append(charmap[constant]) - else: - err("%s: Unrecognized constant %s" % (filename, constant)) + if constant: + if constant in constants: + values.append(constants[constant]) + elif constant in charmap: + values.append(charmap[constant]) + else: + err("%s: Unrecognized constant %s" % (filename, constant)) continue if in_braces: @@ -57,8 +61,16 @@ def convert_message(message): values.append(0xffff) return " dw " + ", ".join(["$%04x" % val for val in values]) -name = None message = None +def print_message(): + global message + if message is not None: + text = convert_message(message) + if text is not None: + print(text) + message = "" + +has_val = False for i, line in enumerate(open(filename)): if i == 0 and not line.startswith(".org"): print("SECTION \"%s\", ROMX" % filename) @@ -67,11 +79,22 @@ for i, line in enumerate(open(filename)): continue if line.startswith("[") and line.endswith("]\n"): - if name is not None or message is not None: - print("\n%s::" % name) - print(convert_message(message)) - name = line[1:-2] - message = "" + print_message() + if has_val: + print(" db $00") + has_val = False + print("\n%s::" % line[1:-2]) + continue + + if line.startswith(".val "): + split = line.split(" ", 1) + if len(split) < 2: + continue + value = int(split[1].strip(), 0) + + print_message() + print(" dw $%04x" % value) + has_val = True continue if line.startswith(".org "): @@ -84,10 +107,10 @@ for i, line in enumerate(open(filename)): bank = split[0] addr = split[1] - if name is not None or message is not None: - print("\n%s::" % name) - print(convert_message(message)) - name = None + print_message() + if has_val: + print(" db $00") + has_val = False message = None if i != 0: @@ -99,6 +122,6 @@ for i, line in enumerate(open(filename)): if message is not None: message += line -if name is not None and message is not None: - print("\n%s::" % name) - print(convert_message(message)) +print_message() +if has_val: + print(" db $00") |