From ba5cd8bbb8b96a080e9a6fe1b1525cd5381fdb24 Mon Sep 17 00:00:00 2001 From: yenatch Date: Tue, 2 Jul 2013 12:19:14 -0400 Subject: use wram from outside extras --- extras/wram.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'extras/wram.py') diff --git a/extras/wram.py b/extras/wram.py index bad0b9fa9..961964403 100644 --- a/extras/wram.py +++ b/extras/wram.py @@ -2,6 +2,10 @@ # RGBDS BSS section and constant parsing. +import os +path = os.path.dirname(os.path.abspath(__file__)) + + def read_bss_sections(bss): sections = [] section = {} @@ -33,7 +37,7 @@ def read_bss_sections(bss): sections.append(section) return sections -wram_sections = read_bss_sections(open('../wram.asm', 'r').readlines()) +wram_sections = read_bss_sections(open(os.path.join(path, '../wram.asm'), 'r').readlines()) def make_wram_labels(): @@ -56,6 +60,6 @@ def scrape_constants(text): text = text.split('\n') return constants_to_dict([line for line in text if 'EQU' in line[:line.find(';')]]) -hram_constants = scrape_constants(open('../hram.asm','r').readlines()) -gbhw_constants = scrape_constants(open('../gbhw.asm','r').readlines()) +hram_constants = scrape_constants(open(os.path.join(path, '../hram.asm'),'r').readlines()) +gbhw_constants = scrape_constants(open(os.path.join(path, '../gbhw.asm'),'r').readlines()) -- cgit v1.2.3 From 6765083c1cb39a93f2b0fb60a7c203725360492d Mon Sep 17 00:00:00 2001 From: yenatch Date: Wed, 3 Jul 2013 21:55:46 -0400 Subject: wram.py: allow space definitions using constants --- extras/wram.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'extras/wram.py') diff --git a/extras/wram.py b/extras/wram.py index 961964403..85057bee4 100644 --- a/extras/wram.py +++ b/extras/wram.py @@ -23,17 +23,33 @@ def read_bss_sections(bss): 'start': address, 'labels': [], } + elif ':' in line: - # the only labels that don't use :s so far are enders, - # which we typically don't want to end up in the output + # rgbds allows labels without :, but prefer convention label = line[:line.find(':')] if ';' not in label: - section['labels'] += [{'label': label, 'address': address, 'length': 0}] + section['labels'] += [{ + 'label': label, + 'address': address, + 'length': 0, + }] + elif line[:3] == 'ds ': length = eval(line[3:line.find(';')].replace('$','0x')) address += length - if section['labels']: - section['labels'][-1]['length'] += length + # adjacent labels use the same space + for label in section['labels'][::-1]: + if label['length'] == 0: + label['length'] = length + else: + break + + elif 'EQU' in line: + # some space is defined using constants + name, value = line.split('EQU') + name, value = name.strip(), value.strip().replace('$','0x').replace('%','0b') + globals()[name] = eval(value) + sections.append(section) return sections -- cgit v1.2.3