diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/charmap.py | 31 | ||||
-rwxr-xr-x | tools/dump_string.py | 42 | ||||
-rwxr-xr-x | tools/messages.py | 104 |
3 files changed, 30 insertions, 147 deletions
diff --git a/tools/charmap.py b/tools/charmap.py deleted file mode 100755 index d318a61..0000000 --- a/tools/charmap.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python3 - -from sys import argv - -def parse_charmap(file): - charmap = {} - constants = {} - for line in open(file): - split = line.split("#")[0].split("=") - if len(split) != 2: - continue - - char = "=".join(split[0:-1]).strip() - value = int(split[-1].strip(), 0) & 0xFFFF - - if char.startswith("'") and char.endswith("'"): - charmap[char[1:-1]] = value - else: - constants[char] = value - return charmap, constants - -if __name__ == "__main__": - charmap, constants = parse_charmap(argv[1]) - - for char in charmap: - value = charmap[char] - print("charmap \"%s\", %d" % (char, value)) - - for constant in constants: - value = constants[constant] - print("%s EQU %d" % (constant, value)) 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 deleted file mode 100755 index 089bbdd..0000000 --- a/tools/messages.py +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env python3 - -from sys import argv, stderr, exit -from charmap import parse_charmap - -def err(s): - print("ERROR:", s.rstrip(), file=stderr) - exit(1) - -charmap, constants = parse_charmap(argv[1]) - -filename = argv[2] - -def convert_message(message): - while True: - if message.endswith("\r\n"): - message = message[:-2] - continue - if message.endswith("\n"): - message = message[:-1] - continue - break - - values = [] - in_braces = False - constant = "" - for char in message: - if char == "{" and not in_braces: - in_braces = True - constant = "" - 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)) - continue - - if in_braces: - constant += char - continue - - if char == "\r": - continue - if char == "\n": - values.append(0xfffe) - continue - - if char in charmap: - values.append(charmap[char]) - else: - err("%s: Unrecognized character '%s'" % (filename, char)) - - values.append(0xffff) - return " dw " + ", ".join(["$%04x" % val for val in values]) - -name = None -message = None -for i, line in enumerate(open(filename)): - if i == 0 and not line.startswith(".org"): - print("SECTION \"%s\", ROMX" % filename) - - if line.startswith("#"): - 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 = "" - continue - - if line.startswith(".org "): - split = line.split(" ", 1) - if len(split) < 2: - continue - split = split[1].strip().split(":") - if len(split) != 2: - continue - 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 - message = None - - if i != 0: - print() - print("SECTION \"%s %s:%s\", ROMX[$%s], BANK[$%s]" % - (filename, bank, addr, addr, bank)) - continue - - 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)) |