Skip to content

Commit

Permalink
Improved dump_state for opcodes
Browse files Browse the repository at this point in the history
  • Loading branch information
Baekalfen committed Feb 28, 2023
1 parent f843111 commit aeeda4d
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 13 deletions.
16 changes: 10 additions & 6 deletions pyboy/core/cpu.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,20 +100,24 @@ def load_state(self, f, state_version):
logger.debug("State loaded: " + self.dump_state(""))

def dump_state(self, sym_label):
opcode = self.mb.getitem(self.mb.cpu.PC)
opcode_1 = self.mb.getitem(self.mb.cpu.PC + 1)
opcode_2 = self.mb.getitem(self.mb.cpu.PC + 2)
opcode_data = [
self.mb.getitem(self.mb.cpu.PC + n) for n in range(3)
] # Max 3 length, then we don't need to backtrack

opcode = opcode_data[0]
opcode_length = opcodes.OPCODE_LENGTHS[opcode]
opcode_str = f"Opcode: [{opcodes.CPU_COMMANDS[opcode]}]"
if opcode == 0xCB:
opcode_str = f"Opcode: {opcode:02X}, {opcodes.CPU_COMMANDS[opcode_1+0x100]}\n"
opcode_str += f" {opcodes.CPU_COMMANDS[opcode_data[1]+0x100]}"
else:
opcode_str = f"Opcode: {opcode:02X} {opcode_1:02X}, {opcodes.CPU_COMMANDS[opcode]}\n"
opcode_str += " " + " ".join(f"{d:02X}" for d in opcode_data[1:opcode_length])

return (
"\n"
f"A: {self.mb.cpu.A:02X}, F: {self.mb.cpu.F:02X}, B: {self.mb.cpu.B:02X}, "
f"C: {self.mb.cpu.C:02X}, D: {self.mb.cpu.D:02X}, E: {self.mb.cpu.E:02X}, "
f"HL: {self.mb.cpu.HL:04X}, SP: {self.mb.cpu.SP:04X}, PC: {self.mb.cpu.PC:04X} ({sym_label})\n"
f"{opcode_str}"
f"{opcode_str} "
f"Interrupts - IME: {self.mb.cpu.interrupt_master_enable}, "
f"IE: {self.mb.cpu.interrupts_enabled_register:08b}, "
f"IF: {self.mb.cpu.interrupts_flag_register:08b}\n"
Expand Down
1 change: 0 additions & 1 deletion pyboy/core/opcodes.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ from libc.stdint cimport uint8_t, uint16_t, uint32_t

cdef uint16_t FLAGC, FLAGH, FLAGN, FLAGZ
cdef uint8_t[512] OPCODE_LENGTHS
cdef uint16_t opcode_length(uint16_t)
@cython.locals(v=cython.int, a=cython.int, b=cython.int, pc=cython.ushort)
cdef int execute_opcode(cpu.CPU, uint16_t)

Expand Down
5 changes: 1 addition & 4 deletions pyboy/core/opcodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -5229,12 +5229,9 @@ def no_opcode(cpu):
return 0


def opcode_length(opcode):
return OPCODE_LENGTHS[opcode]


def execute_opcode(cpu, opcode):
oplen = opcode_length(opcode)
oplen = OPCODE_LENGTHS[opcode]
v = 0
pc = cpu.PC
if oplen == 2:
Expand Down
3 changes: 1 addition & 2 deletions pyboy/core/opcodes_gen.py
Original file line number Diff line number Diff line change
Expand Up @@ -1197,11 +1197,10 @@ def update():

f.write("def no_opcode(cpu):\n return 0\n\n\n")

f.write("def opcode_length(opcode):\n return OPCODE_LENGTHS[opcode]\n\n")
f.write(
"""
def execute_opcode(cpu, opcode):
oplen = opcode_length(opcode)
oplen = OPCODE_LENGTHS[opcode]
v = 0
pc = cpu.PC
if oplen == 2:
Expand Down

0 comments on commit aeeda4d

Please sign in to comment.