From b1c34e88d51a0d1f45659c75920a58e997346e54 Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Sat, 21 Sep 2013 19:41:41 -0500 Subject: move call into vba.crystal --- pokemontools/vba/vba.py | 67 +++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 33 deletions(-) (limited to 'pokemontools/vba/vba.py') diff --git a/pokemontools/vba/vba.py b/pokemontools/vba/vba.py index a4c7e27..e206d8a 100644 --- a/pokemontools/vba/vba.py +++ b/pokemontools/vba/vba.py @@ -53,43 +53,44 @@ def translate_chars(charz): result += chars[each] return result -def call(bank, address, vba=vba, registers=registers): - """ - Jumps into a function at a certain address. - - Go into the start menu, pause the game and try call(1, 0x1078) to see a - string printed to the screen. - """ - push = [ - registers.pc, - registers.hl, - registers.de, - registers.bc, - registers.af, - 0x3bb7, - ] - - for value in push: - registers.sp -= 2 - vba.write_memory_at(registers.sp + 1, value >> 8) - vba.write_memory_at(registers.sp, value & 0xFF) - if get_memory_range(vba, registers.sp, 2) != [value & 0xFF, value >> 8]: - print "desired memory values: " + str([value & 0xFF, value >> 8] ) - print "actual memory values: " + str(get_memory_range(vba, registers.sp, 2)) - print "wrong value at " + hex(registers.sp) + " expected " + hex(value) + " but got " + hex(vba.read_memory_at(registers.sp)) - - if bank != 0: - registers["af"] = (bank << 8) | (registers["af"] & 0xFF) - registers["hl"] = address - registers["pc"] = 0x2d63 # FarJump - else: - registers["pc"] = address - class crystal: """ Just a simple namespace to store a bunch of functions for Pokémon Crystal. """ + @staticmethod + def call(bank, address, vba=vba, registers=registers): + """ + Jumps into a function at a certain address. + + Go into the start menu, pause the game and try call(1, 0x1078) to see a + string printed to the screen. + """ + push = [ + registers.pc, + registers.hl, + registers.de, + registers.bc, + registers.af, + 0x3bb7, + ] + + for value in push: + registers.sp -= 2 + vba.write_memory_at(registers.sp + 1, value >> 8) + vba.write_memory_at(registers.sp, value & 0xFF) + if get_memory_range(vba, registers.sp, 2) != [value & 0xFF, value >> 8]: + print "desired memory values: " + str([value & 0xFF, value >> 8] ) + print "actual memory values: " + str(get_memory_range(vba, registers.sp, 2)) + print "wrong value at " + hex(registers.sp) + " expected " + hex(value) + " but got " + hex(vba.read_memory_at(registers.sp)) + + if bank != 0: + registers["af"] = (bank << 8) | (registers["af"] & 0xFF) + registers["hl"] = address + registers["pc"] = 0x2d63 # FarJump + else: + registers["pc"] = address + @staticmethod def get_stack(vba=vba, registers=registers): """ @@ -492,7 +493,7 @@ class crystal: class TestEmulator(unittest.TestCase): def test_PlaceString(self): - call(vba, 0, 0x1078) + crystal.call(0, 0x1078) # where to draw the text registers["hl"] = 0xc4a0 -- cgit v1.2.3