ref: 768c4c360ffdf84a2f6993703221579261f6938f
parent: bd06a22fb874dcc2a51255670656afec6f5e21ea
author: Bryan Bishop <[email protected]>
date: Fri Apr 6 10:22:35 EDT 2012
move rom_interval into RomStr.interval
--- a/extras/crystal.py
+++ b/extras/crystal.py
@@ -458,6 +458,18 @@
return len(self)
def __repr__(self):
return "RomStr(too long)"
+ def interval(self, offset, length, strings=True, debug=True):
+ """returns hex values for the rom starting at offset until offset+length"""
+ returnable = []
+ for byte in self[offset:offset+length]:
+ if strings:
+ returnable.append(hex(ord(byte)))
+ else:
+ returnable.append(ord(byte))
+ return returnable
+ def until(self, offset, byte, strings=True, debug=False):
+ """returns hex values from rom starting at offset until the given byte"""
+ return self.interval(offset, self.find(chr(byte), offset) - offset, strings=strings)
rom = RomStr(None)
def direct_load_rom(filename="../baserom.gbc"):
"""loads bytes into memory"""
@@ -508,18 +520,12 @@
def rom_interval(offset, length, strings=True, debug=True):
"""returns hex values for the rom starting at offset until offset+length"""
global rom
- returnable = []
- for byte in rom[offset:offset+length]:
- if strings:
- returnable.append(hex(ord(byte)))
- else:
- returnable.append(ord(byte))
- return returnable
+ return rom.interval(offset, length, strings=strings, debug=debug)
-def rom_until(offset, byte, strings=True):
+def rom_until(offset, byte, strings=True, debug=True):
"""returns hex values from rom starting at offset until the given byte"""
global rom
- return rom_interval(offset, rom.find(chr(byte), offset) - offset, strings=strings)
+ return rom.until(offset, byte, strings=strings, debug=debug)
def how_many_until(byte, starting):
index = rom.find(byte, starting)
@@ -6433,6 +6439,29 @@
self.assertEquals(len(self.sample_text), len(self.sample))
self.assertEquals(len(self.sample_text), self.sample.length())
self.assertEquals(len(self.sample), self.sample.length())
+ def test_rom_interval(self):
+ global rom
+ load_rom()
+ address = 0x100
+ interval = 10
+ correct_strings = ['0x0', '0xc3', '0x6e', '0x1', '0xce',
+ '0xed', '0x66', '0x66', '0xcc', '0xd']
+ byte_strings = rom.interval(address, interval, strings=True)
+ self.assertEqual(byte_strings, correct_strings)
+ correct_ints = [0, 195, 110, 1, 206, 237, 102, 102, 204, 13]
+ ints = rom.interval(address, interval, strings=False)
+ self.assertEqual(ints, correct_ints)
+ def test_rom_until(self):
+ global rom
+ load_rom()
+ address = 0x1337
+ byte = 0x13
+ bytes = rom.until(address, byte, strings=True)
+ self.failUnless(len(bytes) == 3)
+ self.failUnless(bytes[0] == '0xd5')
+ bytes = rom.until(address, byte, strings=False)
+ self.failUnless(len(bytes) == 3)
+ self.failUnless(bytes[0] == 0xd5)
class TestAsmList(unittest.TestCase):
"""AsmList is a class that should act exactly like list()
except that it never shows the contents of its list