diff options
-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 */ |