summaryrefslogtreecommitdiff
path: root/tools/messages.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/messages.py')
-rwxr-xr-xtools/messages.py97
1 files changed, 97 insertions, 0 deletions
diff --git a/tools/messages.py b/tools/messages.py
new file mode 100755
index 0000000..a8a1431
--- /dev/null
+++ b/tools/messages.py
@@ -0,0 +1,97 @@
+#!/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))
+ message = ""
+ name = line[1:-2]
+ 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 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))