diff options
author | Bryan Bishop <kanzure@gmail.com> | 2013-02-27 21:41:03 -0600 |
---|---|---|
committer | Bryan Bishop <kanzure@gmail.com> | 2013-02-27 21:41:03 -0600 |
commit | 2b2f00f08b9cf70ff0901fc1c4381e4de492caf3 (patch) | |
tree | 8560b86581c31d897e9fef45ad07fe4e9c8dcf2a | |
parent | a1dce154d45909a83f0ec36216e4a821813c0884 (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
-rw-r--r-- | gbz80disasm.py | 14 |
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 |