finished debug menu, working on timing issues.

This commit is contained in:
2025-05-30 19:08:01 -06:00
parent 604a6d79f2
commit 5f957fac84
5 changed files with 16 additions and 9 deletions

View File

@ -76,6 +76,7 @@ void bus_write(u16 address, u8 value) {
return;
} else if (address < 0xFE00) {
//reserved echo ram...
wram_write((address & 0x1FFF) | 0xC000, value);
return;
} else if (address < 0xFEA0) {
//OAM

View File

@ -6,6 +6,7 @@
#include <dbg.h>
#include <timer.h>
#include <memory.h>
#include <debug.h>
static cpu_context ctx = {0};
#define CPU_DEBUG 1
@ -68,12 +69,17 @@ bool cpu_step() {
);
#endif
fetch_data(&ctx);
if(debug_get_context()->breakpoint && pc == debug_get_context()->breakpoint) {
emu_get_context()->paused = true;
emu_get_context()->debug = true;
debug_get_context()->state = DS_DISASSEMBLE;
}
while(emu_get_context()->paused && !emu_get_context()->step)
delay(10);
if(emu_get_context()->paused) {
emu_get_context()->step--;
if(emu_get_context()->step == 0) {
printf("debug!\n");
//printf("debug!\n");
emu_get_context()->debug = true;
}
}

View File

@ -51,16 +51,13 @@ void debug_update() {
} else if(!strcmp(cmd, "da")) {
scanf("%d", &ctx.dissasembly_target);
ctx.state = DS_DISASSEMBLE;
} else if(!strcmp(cmd, "du")) {
ctx.dissasembly_target--;
ctx.state = DS_DISASSEMBLE;
} else if(!strcmp(cmd, "dd")) {
scanf("%d", &ctx.dissasembly_target);
ctx.state = DS_DISASSEMBLE;
} else if(cmd[0] == 'b' && cmd[1] == 'p') {
scanf("%X", &ctx.breakpoint);
//printf("Set breakpoint to %04X\n", ctx.breakpoint);
} else if(cmd[0] == 's') {
int steps;
scanf("%d", &steps);
printf("adding %d steps\n", steps);
//printf("adding %d steps\n", steps);
emu_get_context()->step += steps;
emu_get_context()->debug = false;
}
@ -73,7 +70,7 @@ void debug_update() {
fetch_instruction(&cpu_ctx);
fetch_data(&cpu_ctx);
char inst[16];
inst_to_str(cpu_get_context(), inst);
inst_to_str(&cpu_ctx, inst);
sprintf(dissasembly[i], "%04X: %s", pc, inst);
if(pc == cpu_get_context()->inst_pc) {
ctx.dissasembly_scroll = i - 5;

View File

@ -132,6 +132,8 @@ int emu_run(int argc, char **argv) {
}
void emu_cycles(int cpu_cycles) {
if(emu_get_context()->paused && !emu_get_context()->step)
return;
for (int i = 0; i < cpu_cycles; i++){
for(int n = 0; n < 4; n++){
ctx.ticks++;