mirror of https://github.com/pret/pokecrystal.git
add symfile generation
This commit is contained in:
parent
314c4ff12b
commit
e59a7c8d6f
|
@ -0,0 +1,54 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
|
# from crystal import load_rom
|
||||||
|
# from gbz80disasm import load_labels
|
||||||
|
|
||||||
|
|
||||||
|
def make_sym_from_json(filename = '../pokecrystal.sym', j = 'labels.json'):
|
||||||
|
# todo: delete and remake labels.json at runtime
|
||||||
|
with open(filename, 'w') as sym:
|
||||||
|
for label in json.load(open(j)):
|
||||||
|
sym.write('{0:x}:{1:x} {2}\n'.format(label['bank'], label['address']&0x3fff, label['label']))
|
||||||
|
|
||||||
|
|
||||||
|
def make_sym_from_mapfile(filename = '../pokecrystal.sym', mapfile = '../mapfile.txt'):
|
||||||
|
# todo: sort label definitions by address
|
||||||
|
|
||||||
|
output = ''
|
||||||
|
# get label definitions
|
||||||
|
with open(mapfile,'r') as map:
|
||||||
|
lines = map.readlines()
|
||||||
|
for line in lines:
|
||||||
|
# bank #
|
||||||
|
if 'Bank #' in line:
|
||||||
|
cur_bank = int(line.lstrip('Bank #').strip(':\n').strip(' (HOME)'))
|
||||||
|
|
||||||
|
# label definition
|
||||||
|
elif '=' in line:
|
||||||
|
thing = line.split('=')
|
||||||
|
spacing = ' ' * 11 # arbitrary
|
||||||
|
addr = int(thing[0].lstrip(spacing)[1:5],16)
|
||||||
|
|
||||||
|
# rgbds doesn't support wram banks yet,
|
||||||
|
# so this hack is applied instead
|
||||||
|
if addr > 0xbfff: # 0xc000+ (wram only)
|
||||||
|
cur_bank = 0
|
||||||
|
if addr > 0xcfff: # 0xd000+ (wram only)
|
||||||
|
cur_bank = 1
|
||||||
|
|
||||||
|
# convert to sym format (bank:addr label)
|
||||||
|
label = thing[1].strip('\n')
|
||||||
|
output += hex(cur_bank)[2:] + ':' + hex(addr)[2:] + ' ' + label + '\n'
|
||||||
|
|
||||||
|
# dump contents to symfile
|
||||||
|
with open(filename, 'w') as sym:
|
||||||
|
sym.write(output)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# default behavior: generate sym file from rgbds mapfile
|
||||||
|
try: make_sym_from_mapfile()
|
||||||
|
# if no mapfile exists, generate from labels.json
|
||||||
|
except: make_sym_from_json()
|
Loading…
Reference in New Issue