summaryrefslogtreecommitdiff
path: root/gbz80disasm.py
diff options
context:
space:
mode:
authoryenatch <yenatch@gmail.com>2013-06-25 03:43:58 -0400
committeryenatch <yenatch@gmail.com>2013-06-25 03:43:58 -0400
commitb7978e23d2e7b2077d1093a05503c92fd804d03d (patch)
tree36181ceb4105023c97e0ef915f1443313765c77d /gbz80disasm.py
parent57cb48ee11a39b5ec9f184089815eeb7e3e1bd58 (diff)
gbz80disasm: detect data tables referenced in asm
original-commit-id: 7804dedce469cd40efbc140b80d84733ec853338
Diffstat (limited to 'gbz80disasm.py')
-rw-r--r--gbz80disasm.py16
1 files changed, 15 insertions, 1 deletions
diff --git a/gbz80disasm.py b/gbz80disasm.py
index 94df755..8da28ee 100644
--- a/gbz80disasm.py
+++ b/gbz80disasm.py
@@ -590,6 +590,8 @@ def find_label(local_address, bank_id=0):
def asm_label(address):
# why using a random value when you can use the address?
return '.ASM_%x' % address
+def data_label(address):
+ return '.DATA_%x' % address
def output_bank_opcodes(original_offset, max_byte_count=0x4000, include_last_address=True, stop_at=[], debug = False):
#fs = current_address
@@ -622,6 +624,7 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000, include_last_add
end_address = original_offset + max_byte_count
byte_labels = {}
+ data_tables = {}
first_loop = True
output = ""
@@ -772,6 +775,13 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000, include_last_add
number = byte1
number += byte2 << 8
+ pointer = bank_id * 0x4000 + (number & 0x3fff)
+ if pointer not in data_tables.keys():
+ data_tables[pointer] = {}
+ data_tables[pointer]['usage'] = 0
+ else:
+ data_tables[pointer]['usage'] += 1
+
insertion = "$%.4x" % (number)
result = find_label(insertion, bank_id)
if result != None:
@@ -824,7 +834,7 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000, include_last_add
keep_reading = False
is_data = False #cleanup
break
- elif offset not in byte_labels.keys():
+ elif offset not in byte_labels.keys() or offset in data_tables.keys():
is_data = True
keep_reading = True
else:
@@ -839,6 +849,10 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000, include_last_add
is_data = False
keep_reading = True
+ if offset in data_tables.keys():
+ output = output.replace('$%x' % ((offset & 0x3fff) + 0x4000 * bool(bank_id)), data_label(offset).lower())
+ output += data_label(offset).lower() + '\n'
+
first_loop = False
#clean up unused labels