shithub: pokecrystal

Download patch

ref: 6765083c1cb39a93f2b0fb60a7c203725360492d
parent: 341e11cccb33a8ed459cd9a6c41cf1189c6a4550
author: yenatch <[email protected]>
date: Wed Jul 3 17:55:46 EDT 2013

wram.py: allow space definitions using constants

--- a/extras/wram.py
+++ b/extras/wram.py
@@ -23,17 +23,33 @@
 				'start': address,
 				'labels': [],
 			}
+
 		elif ':' in line:
-			# the only labels that don't use :s so far are enders,
-			# which we typically don't want to end up in the output
+			# rgbds allows labels without :, but prefer convention
 			label = line[:line.find(':')]
 			if ';' not in label:
-				section['labels'] += [{'label': label, 'address': address, 'length': 0}]
+				section['labels'] += [{
+					'label': label,
+					'address': address,
+					'length': 0,
+				}]
+
 		elif line[:3] == 'ds ':
 			length = eval(line[3:line.find(';')].replace('$','0x'))
 			address += length
-			if section['labels']:
-				section['labels'][-1]['length'] += length
+			# adjacent labels use the same space
+			for label in section['labels'][::-1]:
+				if label['length'] == 0:
+					label['length'] = length
+				else:
+					break
+
+		elif 'EQU' in line:
+			# some space is defined using constants
+			name, value = line.split('EQU')
+			name, value = name.strip(), value.strip().replace('$','0x').replace('%','0b')
+			globals()[name] = eval(value)
+
 	sections.append(section)
 	return sections