shithub: pokecrystal

Download patch

ref: 2b159a5ebd6840da53392dc6c6bf619ceb75d0f9
parent: 69450ad8b33af1a40ea7ddc6d94c54cb4755c440
author: Bryan Bishop <[email protected]>
date: Wed Apr 25 17:53:20 EDT 2012

fix MapHeader size and TextScript asm output

--- a/extras/crystal.py
+++ b/extras/crystal.py
@@ -730,6 +730,7 @@
         had_text_end_byte = False
         had_text_end_byte_57_58 = False
         had_db_last = False
+        xspacing = ""
         #reset this pretty fast..
         first_line = True
         #for each command..
@@ -741,54 +742,37 @@
                     continue #dunno what to do here?
 
                 if   command["type"] == 0x1: #TX_RAM
-                    if first_line:
-                        output = "\n"
-                        output += label + ": ; " + hex(start_address)
-                        first_line = False
                     p1 = command["pointer"][0]
                     p2 = command["pointer"][1]
 
                     #remember to account for big endian -> little endian
-                    output += "\n" + spacing + "TX_RAM $%.2x%.2x" %(p2, p1)
+                    output += "\n" + xspacing + "TX_RAM $%.2x%.2x" %(p2, p1)
                     byte_count += 3
                     had_db_last = False
                 elif command["type"] == 0x17: #TX_FAR
-                    if first_line:
-                        output = "\n"
-                        output += label + ": ; " + hex(start_address)
-                        first_line = False
                     #p1 = command["pointer"][0]
                     #p2 = command["pointer"][1]
-                    output += "\n" + spacing + "TX_FAR _" + label + " ; " + hex(command["pointer"])
+                    output += "\n" + xspacing + "TX_FAR _" + label + " ; " + hex(command["pointer"])
                     byte_count += 4 #$17, bank, address word
                     had_db_last = False
                 elif command["type"] == 0x9: #TX_RAM_HEX2DEC
-                    if first_line:
-                        output = "\n" + label + ": ; " + hex(start_address)
-                        first_line = False
                     #address, read_byte
-                    output += "\n" + spacing + "TX_NUM $%.2x%.2x, $%.2x" % (command["address"][1], command["address"][0], command["read_byte"])
+                    output += "\n" + xspacing + "TX_NUM $%.2x%.2x, $%.2x" % (command["address"][1], command["address"][0], command["read_byte"])
                     had_db_last = False
                     byte_count += 4
                 elif command["type"] == 0x50 and not had_text_end_byte:
                     #had_text_end_byte helps us avoid repeating $50s
-                    if first_line:
-                        output = "\n" + label + ": ; " + hex(start_address)
-                        first_line = False
                     if had_db_last:
                         output += ", $50"
                     else:
-                        output += "\n" + spacing + "db $50"
+                        output += "\n" + xspacing + "db $50"
                     byte_count += 1
                     had_db_last = True
                 elif command["type"] in [0x57, 0x58] and not had_text_end_byte_57_58:
-                    if first_line: #shouldn't happen, really
-                        output = "\n" + label + ": ; " + hex(start_address)
-                        first_line = False
                     if had_db_last:
                         output += ", $%.2x" % (command["type"])
                     else:
-                        output += "\n" + spacing + "db $%.2x" % (command["type"])
+                        output += "\n" + xspacing + "db $%.2x" % (command["type"])
                     byte_count += 1
                     had_db_last = True
                 elif command["type"] in [0x57, 0x58] and had_text_end_byte_57_58:
@@ -796,33 +780,24 @@
                 elif command["type"] == 0x50 and had_text_end_byte:
                     pass #this is also ok
                 elif command["type"] == 0x0b:
-                    if first_line:
-                        output = "\n" + label + ": ; " + hex(start_address)
-                        first_line = False
                     if had_db_last:
                         output += ", $0b"
                     else:
-                        output += "\n" + spacing + "db $0B"
+                        output += "\n" + xspacing + "db $0B"
                     byte_count += 1
                     had_db_last = True
                 elif command["type"] == 0x11:
-                    if first_line:
-                        output = "\n" + label + ": ; " + hex(start_address)
-                        first_line = False
                     if had_db_last:
                         output += ", $11"
                     else:
-                        output += "\n" + spacing + "db $11"
+                        output += "\n" + xspacing + "db $11"
                     byte_count += 1
                     had_db_last = True
                 elif command["type"] == 0x6: #wait for keypress
-                    if first_line:
-                        output = "\n" + label + ": ; " + hex(start_address)
-                        first_line = False
                     if had_db_last:
                         output += ", $6"
                     else:
-                        output += "\n" + spacing + "db $6"
+                        output += "\n" + xspacing + "db $6"
                     byte_count += 1
                     had_db_last = True
                 else:
@@ -840,19 +815,10 @@
             #this should already be in there, but it's not because of a bug in the text parser
             lines[len(lines.keys())-1].append(commands[len(commands.keys())-1]["type"])
 
-            #XXX to_asm should probably not include label output
-            #so this will need to be removed eventually
-            if first_line:
-                output  = "\n"
-                output += label + ": ; " + hex(start_address) + "\n"
-                first_line = False
-            else:
-                output += "\n"
-
             first = True #first byte
             for line_id in lines:
                 line = lines[line_id]
-                output += spacing + "db "
+                output += xspacing + "db "
                 if first and needs_to_begin_with_0:
                     output += "$0, "
                     first = False
@@ -908,10 +874,12 @@
                     quotes_open = False
 
                 output += "\n"
-        include_newline = "\n"
-        if len(output)!=0 and output[-1] == "\n":
-            include_newline = ""
-        output += include_newline + "; " + hex(start_address) + " + " + str(byte_count) + " bytes = " + hex(start_address + byte_count)
+        #include_newline = "\n"
+        #if len(output)!=0 and output[-1] == "\n":
+        #    include_newline = ""
+        #output += include_newline + "; " + hex(start_address) + " + " + str(byte_count) + " bytes = " + hex(start_address + byte_count)
+        if output[-1] == "\n":
+            output = output[:-1]
         self.size = self.byte_count = byte_count
         return output
 
@@ -2910,7 +2878,7 @@
             self.label = self.base_label + hex(address)
         else:
             self.label = label
-        self.last_address = address + 8
+        self.last_address = address + 9
         script_parse_table[address : self.last_address] = self
         self.parse()
 
@@ -4602,9 +4570,9 @@
                 thing = AsmLine(line, bank=bank)
             self.parts.append(thing)
     def insert(self, new_object):
-        if isinstance(new_object, TextScript):
-            print "ignoring TextScript object-- these seem very broken?"
-            return
+        #if isinstance(new_object, TextScript):
+        #    print "ignoring TextScript object-- these seem very broken?"
+        #    return
         if not hasattr(new_object, "address"):
             print "object needs to have an address property: " + str(new_object)
             return