diff options
author | Oxore <oxore@protonmail.com> | 2022-09-07 23:51:19 +0300 |
---|---|---|
committer | Oxore <oxore@protonmail.com> | 2022-09-07 23:51:19 +0300 |
commit | bb1cb9f755ef77126bdfe3258c0f859bb6d2bf1a (patch) | |
tree | 302c5d827650a794041ab75ec3938165c558610b | |
parent | d2b615061e008c4d13a6ce0f11efd8ec337f41c6 (diff) |
Hacky breakpoint before instruction executes
-rw-r--r-- | emulator.cpp | 10 | ||||
-rw-r--r-- | m68kconf.h | 4 |
2 files changed, 8 insertions, 6 deletions
diff --git a/emulator.cpp b/emulator.cpp index 5228231..051c6db 100644 --- a/emulator.cpp +++ b/emulator.cpp @@ -40,7 +40,8 @@ static int set_socket_reuseaddr(int socket_fd) return setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, (void*)&val, len); } -static inline struct sockaddr_in sockaddr_in_any_ip_with_port(uint16_t port) { +static inline struct sockaddr_in sockaddr_in_any_ip_with_port(uint16_t port) +{ struct sockaddr_in server{}; server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; @@ -207,7 +208,7 @@ static void make_hex(char* buff, unsigned int pc, unsigned int length) // TODO m68k_set_illg_instr_callback for true software breakpoint "4e4f" -void m68k_instr_callback(int pc) +int m68k_instr_callback(int pc) { const auto it = std::find_if( code_bkpts.begin(), @@ -217,8 +218,8 @@ void m68k_instr_callback(int pc) g_m68k_debug.SetRunning(false); g_m68k_debug.RaiseBreakpoint(); m68k_end_timeslice(); - printf("Breakpoint!\n"); - // TODO notify GDB somehow that breakpoint has been hit + printf("Breakpoint @ 0x%08x\n", pc); + return 1; } if (DEBUG_TRACE_INSTRUCTIONS) { char buff[100]; @@ -229,6 +230,7 @@ void m68k_instr_callback(int pc) printf(" %08X: %-20s: %s\n", pc, buff2, buff); fflush(stdout); } + return 0; } void ParseAndReact( @@ -160,7 +160,7 @@ extern "C" { * instruction. */ #define M68K_INSTRUCTION_HOOK OPT_SPECIFY_HANDLER -#define M68K_INSTRUCTION_CALLBACK(pc) m68k_instr_callback(pc) +#define M68K_INSTRUCTION_CALLBACK(pc) if (m68k_instr_callback(pc)) break /* If ON, the CPU will emulate the 4-byte prefetch queue of a real 68000 */ @@ -209,7 +209,7 @@ void m68k_write_memory_32(unsigned int address, unsigned int value); void m68k_reset_callback(void); int m68k_irq_ack(int level); -void m68k_instr_callback(int pc); +int m68k_instr_callback(int pc); #endif /* M68K_COMPILE_FOR_MAME */ |