mirror of
https://github.com/dingusdev/dingusppc.git
synced 2024-12-23 06:29:38 +00:00
Prevent clobbering during debugging.
This commit is contained in:
parent
660d227ac7
commit
353035e9ca
@ -610,7 +610,7 @@ void ppc_exec_single()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Execute PPC code until goal_addr is reached. */
|
/** Execute PPC code until goal_addr is reached. */
|
||||||
void ppc_exec_until(uint32_t goal_addr)
|
void ppc_exec_until(volatile uint32_t goal_addr)
|
||||||
{
|
{
|
||||||
uint32_t bb_start_la, page_start, delta;
|
uint32_t bb_start_la, page_start, delta;
|
||||||
uint8_t* pc_real;
|
uint8_t* pc_real;
|
||||||
@ -670,7 +670,7 @@ again:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Execute PPC code until control is reached the specified region. */
|
/** Execute PPC code until control is reached the specified region. */
|
||||||
void ppc_exec_dbg(uint32_t start_addr, uint32_t size)
|
void ppc_exec_dbg(volatile uint32_t start_addr, volatile uint32_t size)
|
||||||
{
|
{
|
||||||
uint32_t bb_start_la, page_start, delta;
|
uint32_t bb_start_la, page_start, delta;
|
||||||
uint8_t* pc_real;
|
uint8_t* pc_real;
|
||||||
@ -692,6 +692,7 @@ void ppc_exec_dbg(uint32_t start_addr, uint32_t size)
|
|||||||
page_start = bb_start_la & 0xFFFFF000;
|
page_start = bb_start_la & 0xFFFFF000;
|
||||||
ppc_state.pc = bb_start_la;
|
ppc_state.pc = bb_start_la;
|
||||||
bb_kind = BB_end_kind::BB_NONE;
|
bb_kind = BB_end_kind::BB_NONE;
|
||||||
|
//printf("DBG Exec: got exception, continue at %X\n", ppc_state.pc);
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -721,6 +722,7 @@ again:
|
|||||||
}
|
}
|
||||||
ppc_state.pc = bb_start_la;
|
ppc_state.pc = bb_start_la;
|
||||||
bb_kind = BB_end_kind::BB_NONE;
|
bb_kind = BB_end_kind::BB_NONE;
|
||||||
|
//printf("DBG Exec: new basic block at %X, start_addr=%X\n", ppc_state.pc, start_addr);
|
||||||
} else {
|
} else {
|
||||||
ppc_state.pc += 4;
|
ppc_state.pc += 4;
|
||||||
pc_real += 4;
|
pc_real += 4;
|
||||||
|
@ -171,7 +171,7 @@ void exec_single_68k()
|
|||||||
/* Getting here means we're outside the emualtor opcode table.
|
/* Getting here means we're outside the emualtor opcode table.
|
||||||
Execute PPC code until we hit the opcode table again. */
|
Execute PPC code until we hit the opcode table again. */
|
||||||
LOG_F(9, "Tracing outside the emulator table, PC = %X\n", ppc_pc);
|
LOG_F(9, "Tracing outside the emulator table, PC = %X\n", ppc_pc);
|
||||||
ppc_exec_dbg(emu_table_virt, EMU_68K_TABLE_SIZE);
|
ppc_exec_dbg(emu_table_virt, EMU_68K_TABLE_SIZE - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Execute emulated 68k code until target_addr is reached. */
|
/** Execute emulated 68k code until target_addr is reached. */
|
||||||
@ -188,12 +188,12 @@ void exec_until_68k(uint32_t target_addr)
|
|||||||
reg = "PC";
|
reg = "PC";
|
||||||
ppc_pc = get_reg(reg);
|
ppc_pc = get_reg(reg);
|
||||||
|
|
||||||
if (ppc_pc >= emu_table_virt && ppc_pc < (emu_table_virt + EMU_68K_TABLE_SIZE)) {
|
if (ppc_pc >= emu_table_virt && ppc_pc < (emu_table_virt + EMU_68K_TABLE_SIZE - 1)) {
|
||||||
LOG_F(9, "Tracing within emulator table, PC = %X\n", ppc_pc);
|
LOG_F(9, "Tracing within emulator table, PC = %X\n", ppc_pc);
|
||||||
ppc_exec_single();
|
ppc_exec_single();
|
||||||
} else {
|
} else {
|
||||||
LOG_F(9, "Tracing outside the emulator table, PC = %X\n", ppc_pc);
|
LOG_F(9, "Tracing outside the emulator table, PC = %X\n", ppc_pc);
|
||||||
ppc_exec_dbg(emu_table_virt, EMU_68K_TABLE_SIZE);
|
ppc_exec_dbg(emu_table_virt, EMU_68K_TABLE_SIZE - 1);
|
||||||
}
|
}
|
||||||
reg = "R24";
|
reg = "R24";
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user