summaryrefslogtreecommitdiff
path: root/tools/messages.py
blob: a8a14317aa5df5e284d8b9dbd139b15b9b0d2bc4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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))