summaryrefslogtreecommitdiff
path: root/gbz80disasm.py
diff options
context:
space:
mode:
authorBryan Bishop <kanzure@gmail.com>2013-02-27 21:41:03 -0600
committerBryan Bishop <kanzure@gmail.com>2013-02-27 21:41:03 -0600
commit2b2f00f08b9cf70ff0901fc1c4381e4de492caf3 (patch)
tree8560b86581c31d897e9fef45ad07fe4e9c8dcf2a /gbz80disasm.py
parenta1dce154d45909a83f0ec36216e4a821813c0884 (diff)
update gbz80disasm for handling known fall-throughs
When disassembling a group of functions, sometimes there are other functions known in advance. By passing in a list called stop_at to gbz80disasm, it is possible to prevent disassembled asm from running on for longer than necessary. original-commit-id: 01e10a11b27978c40e0f5fc3334dfd66c1a004a3
Diffstat (limited to 'gbz80disasm.py')
-rw-r--r--gbz80disasm.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/gbz80disasm.py b/gbz80disasm.py
index 6c03ad9..efb4689 100644
--- a/gbz80disasm.py
+++ b/gbz80disasm.py
@@ -592,7 +592,7 @@ def asm_label(address):
# why using a random value when you can use the address?
return ".ASM_" + hex(address)[2:]
-def output_bank_opcodes(original_offset, max_byte_count=0x4000, include_last_address=True, debug = False):
+def output_bank_opcodes(original_offset, max_byte_count=0x4000, include_last_address=True, stop_at=[], debug = False):
#fs = current_address
#b = bank_byte
#in = input_data -- rom
@@ -601,6 +601,10 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000, include_last_add
#ad = end_address
#a, oa = current_byte_number
+ # stop_at can be used to supply a list of addresses to not disassemble
+ # over. This is useful if you know in advance that there are a lot of
+ # fall-throughs.
+
load_labels()
load_rom()
@@ -622,6 +626,7 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000, include_last_add
byte_labels = {}
+ first_loop = True
output = ""
keep_reading = True
while offset <= end_address and keep_reading:
@@ -629,6 +634,11 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000, include_last_add
is_data = False
maybe_byte = current_byte
+ # stop at any address
+ if not first_loop and offset in stop_at:
+ keep_reading = False
+ break
+
#first check if this byte already has a label
#if it does, use the label
#if not, generate a new label
@@ -816,6 +826,8 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000, include_last_add
#offset += 1
#current_byte_number += 1
+ first_loop = False
+
#clean up unused labels
for label_line in byte_labels.keys():
address = label_line