shithub: pokecrystal

Download patch

ref: 01e10a11b27978c40e0f5fc3334dfd66c1a004a3
parent: 0e2ab04353bf5fa3114aa87e77e5366af6aa942c
author: Bryan Bishop <[email protected]>
date: Wed Feb 27 16:41:03 EST 2013

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.

--- a/extras/gbz80disasm.py
+++ b/extras/gbz80disasm.py
@@ -592,7 +592,7 @@
     # 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 @@
     #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 @@
 
     byte_labels = {}
 
+    first_loop = True
     output = ""
     keep_reading = True
     while offset <= end_address and keep_reading:
@@ -629,6 +634,11 @@
         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
@@ -815,6 +825,8 @@
         #these two are done prior
         #offset += 1
         #current_byte_number += 1
+
+        first_loop = False
 
     #clean up unused labels
     for label_line in byte_labels.keys():