diff --git a/pyboy/core/cpu.py b/pyboy/core/cpu.py index fb2c9c97a..185f40495 100644 --- a/pyboy/core/cpu.py +++ b/pyboy/core/cpu.py @@ -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" diff --git a/pyboy/core/opcodes.pxd b/pyboy/core/opcodes.pxd index f4bd9b087..0c595e1dc 100644 --- a/pyboy/core/opcodes.pxd +++ b/pyboy/core/opcodes.pxd @@ -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) diff --git a/pyboy/core/opcodes.py b/pyboy/core/opcodes.py index 69b3f2e4a..8ed43a2e9 100644 --- a/pyboy/core/opcodes.py +++ b/pyboy/core/opcodes.py @@ -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: diff --git a/pyboy/core/opcodes_gen.py b/pyboy/core/opcodes_gen.py index 69fbabb40..427b36009 100644 --- a/pyboy/core/opcodes_gen.py +++ b/pyboy/core/opcodes_gen.py @@ -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: