summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRangi <remy.oukaour+rangi42@gmail.com>2020-09-12 13:04:04 -0400
committerRangi <remy.oukaour+rangi42@gmail.com>2020-09-12 13:04:04 -0400
commit247b904a6bb10c7fdd5689c8380a4a0bdb30385c (patch)
treedaed0e33f78ca0fe18ba5a72f7c6016db0aad773
parent8d4e7f48f18e75a2f56ec91ed8bc9b5262cac276 (diff)
tools/makeshim.py validates bank+address values
-rwxr-xr-xtools/makeshim.py58
1 files changed, 30 insertions, 28 deletions
diff --git a/tools/makeshim.py b/tools/makeshim.py
index 2dbca01..fe620ec 100755
--- a/tools/makeshim.py
+++ b/tools/makeshim.py
@@ -1,47 +1,49 @@
#!/usr/bin/env python3
-from sys import argv
+from sys import argv, stderr
-for line in open(argv[1]):
- split = line.split(";")[0].split(" ")
- if len(split) < 2:
+def warn(s):
+ print("WARNING:", s.rstrip(), file=stderr)
+
+for i, line in enumerate(open(argv[1])):
+ content = line.split(";", 1)[0].strip()
+
+ bankaddr_name = content.split(" ", 1)
+ if len(bankaddr_name) != 2:
continue
- name = " ".join(split[1:]).strip()
+ name = bankaddr_name[1].strip()
- split = split[0].split(":")
- if len(split) != 2:
+ bank_addr = bankaddr_name[0].split(":")
+ if len(bank_addr) != 2:
+ warn("Can't shim line %d: %s" % (i+1, line))
continue
- bank = int(split[0], 16)
- addr = int(split[1], 16)
+ bank = int(bank_addr[0], 16)
+ addr = int(bank_addr[1], 16)
- section = None
- bankdec = None
- if bank == 0 and addr >= 0x0000 and addr < 0x4000:
+ if 0x0000 <= addr < 0x4000 and bank == 0:
section = "ROM0"
- elif addr >= 0x4000 and addr < 0x8000:
+ bank = None
+ elif 0x4000 <= addr < 0x8000 and 1 <= bank < 128:
section = "ROMX"
- bankdec = bank
- elif addr >= 0x8000 and addr < 0xA000:
+ elif 0x8000 <= addr < 0xA000 and 0 <= bank < 2:
section = "VRAM"
- bankdec = bank
- elif addr >= 0xA000 and addr < 0xC000:
+ elif 0xA000 <= addr < 0xC000 and 0 <= bank < 16:
section = "SRAM"
- bankdec = bank
- elif bank == 0 and addr >= 0xC000 and addr < 0xD000:
+ elif 0xC000 <= addr < 0xD000 and bank == 0:
section = "WRAM0"
- elif addr >= 0xD000 and addr < 0xE000:
+ bank = None
+ elif 0xD000 <= addr < 0xE000 and 0 <= bank < 16:
section = "WRAMX"
- bankdec = bank
- elif bank == 0 and addr >= 0xFE00 and addr < 0xFEA0:
+ elif 0xFE00 <= addr < 0xFEA0 and bank == 0:
section = "OAM"
- elif bank == 0 and addr >= 0xFF80 and addr < 0xFFFF:
+ bank = None
+ elif 0xFF80 <= addr < 0xFFFF and bank == 0:
section = "HRAM"
+ bank = None
else:
+ warn("Invalid bank/address on line %d: %s" % (i+1, line))
continue
- if bankdec is not None:
- bankdec = ", BANK[$%x]" % bankdec
- else:
- bankdec = ""
- print("SECTION \"Shim %s\",%s[$%x]%s" % (name, section, addr, bankdec))
+ bankdec = ", BANK[$%x]" % bank if bank is not None else ""
+ print('SECTION "Shim %s", %s[$%x]%s' % (name, section, addr, bankdec))
print("%s::" % name)