mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-09-09 09:51:34 -07:00
vba - call arbitrary functions from jython
This commit is contained in:
parent
b543827ee4
commit
caa1dc10dd
@ -73,6 +73,7 @@ import sys
|
|||||||
import re
|
import re
|
||||||
from array import array
|
from array import array
|
||||||
import string
|
import string
|
||||||
|
from copy import copy
|
||||||
|
|
||||||
# for converting bytes to readable text
|
# for converting bytes to readable text
|
||||||
from chars import chars
|
from chars import chars
|
||||||
@ -480,12 +481,12 @@ class Registers:
|
|||||||
return get_registers()
|
return get_registers()
|
||||||
|
|
||||||
def _get_register(id):
|
def _get_register(id):
|
||||||
def constructed_func(self):
|
def constructed_func(self, id=copy(id)):
|
||||||
return get_registers()[id]
|
return get_registers()[id]
|
||||||
return constructed_func
|
return constructed_func
|
||||||
|
|
||||||
def _set_register(id):
|
def _set_register(id):
|
||||||
def constructed_func(self, value):
|
def constructed_func(self, value, id=copy(id)):
|
||||||
current_registers = get_registers()
|
current_registers = get_registers()
|
||||||
current_registers[id] = value
|
current_registers[id] = value
|
||||||
set_registers(current_registers)
|
set_registers(current_registers)
|
||||||
@ -524,13 +525,54 @@ class Registers:
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
spacing = "\t"
|
spacing = "\t"
|
||||||
output = "Registers:\n"
|
output = "Registers:\n"
|
||||||
for each in self.order:
|
for (id, each) in enumerate(self.order):
|
||||||
output += spacing + each + " = " + hex(self[each])
|
output += spacing + each + " = " + hex(get_registers()[id])
|
||||||
|
#hex(self[each])
|
||||||
output += "\n"
|
output += "\n"
|
||||||
return output
|
return output
|
||||||
|
|
||||||
registers = Registers()
|
registers = Registers()
|
||||||
|
|
||||||
|
def call(bank, address):
|
||||||
|
"""
|
||||||
|
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
|
||||||
|
set_memory_at(registers.sp + 1, value >> 8)
|
||||||
|
set_memory_at(registers.sp, value & 0xFF)
|
||||||
|
if get_memory_range(registers.sp, 2) != [value & 0xFF, value >> 8]:
|
||||||
|
print "desired memory values: " + str([value & 0xFF, value >> 8] )
|
||||||
|
print "actual memory values: " + str(get_memory_range(registers.sp , 2))
|
||||||
|
print "wrong value at " + hex(registers.sp) + " expected " + hex(value) + " but got " + hex(get_memory_at(registers.sp))
|
||||||
|
|
||||||
|
#registers.af = (bank << 8) | (registers.af & 0xff)
|
||||||
|
#registers.hl = address
|
||||||
|
#registers.pc = 0x2d63 # FarJump
|
||||||
|
|
||||||
|
#registers2 = get_registers()
|
||||||
|
#registers2[5] = 0xc4a0
|
||||||
|
#registers2[4] = 0x1276
|
||||||
|
#registers2[0] = address
|
||||||
|
#set_registers(registers2)
|
||||||
|
|
||||||
|
registers["hl"] = 0xc4a0
|
||||||
|
registers["de"] = 0x1276
|
||||||
|
registers["pc"] = address
|
||||||
|
#print "registers.pc is: " + hex(registers.pc)
|
||||||
|
|
||||||
class crystal:
|
class crystal:
|
||||||
"""
|
"""
|
||||||
Just a simple namespace to store a bunch of functions for Pokémon Crystal.
|
Just a simple namespace to store a bunch of functions for Pokémon Crystal.
|
||||||
@ -570,7 +612,7 @@ class crystal:
|
|||||||
"""
|
"""
|
||||||
for step_counter in range(0, steplimit):
|
for step_counter in range(0, steplimit):
|
||||||
crystal.walk_through_walls()
|
crystal.walk_through_walls()
|
||||||
#crystal.set_enemy_level(1)
|
#call(0x1, 0x1078)
|
||||||
step()
|
step()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
Loading…
Reference in New Issue
Block a user