diff --git a/Makefile b/Makefile index d3b2ee8..840f356 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ CC = gcc LD = $(CC) -PFLAGS = -g -#PFLAGS = -O3 +#PFLAGS = -pg +PFLAGS += -O3 #PFLAGS += -DDEBUG_MAPPER #PFLAGS += -DDEBUG_RENDER #PFLAGS += -DDEBUG_PPU -DDEBUG_VRAM -DDEBUG_OAM diff --git a/src/nes.c b/src/nes.c index 47bd2ae..555717e 100644 --- a/src/nes.c +++ b/src/nes.c @@ -76,26 +76,23 @@ void nes_reset(nes* sys) { nes_apu_reset(&sys->apu); } -nes_ppu_Result nes_run(nes* sys, int master_cycles, int* run) { - int cpu_run = 0; - int cpu_cycles = (master_cycles + (nes_clock_cpu_div - 1)) / - nes_clock_cpu_div; - int status = e6502_run(&sys->cpu, cpu_cycles, &cpu_run, 0); - - master_cycles = cpu_run * nes_clock_cpu_div; - int ppu_cycles = master_cycles / nes_clock_ppu_div; - nes_ppu_Result result = nes_ppu_run(&sys->ppu, ppu_cycles); - - if (result == ppu_Result_VBlank_On) { - e6502_set_nmi(&sys->cpu, 1); - } else if (result == ppu_Result_VBlank_Off) { - e6502_set_nmi(&sys->cpu, 0); - } +nes_ppu_Result nes_step(nes* sys, int* run) { + nes_ppu_Result result = ppu_Result_Halt; + + int cpu_run = e6502_step(&sys->cpu); - if (run) *run = master_cycles; + if (cpu_run > 0) { + int master_cycles = cpu_run * nes_clock_cpu_div; + int ppu_cycles = master_cycles / nes_clock_ppu_div; + result = nes_ppu_run(&sys->ppu, ppu_cycles); + + if (result == ppu_Result_VBlank_On) { + e6502_set_nmi(&sys->cpu, 1); + } else if (result == ppu_Result_VBlank_Off) { + e6502_set_nmi(&sys->cpu, 0); + } - if (status < 0) { - result = ppu_Result_Halt; + if (run) *run = master_cycles; } return result; diff --git a/src/nes.h b/src/nes.h index c829ec2..5f13176 100644 --- a/src/nes.h +++ b/src/nes.h @@ -59,7 +59,7 @@ int nes_init(nes*); void nes_reset(nes*); -nes_ppu_Result nes_run(nes*, int cycles, int* run); +nes_ppu_Result nes_step(nes*, int* run); #endif // NES_H_ diff --git a/src/nese.c b/src/nese.c index b69ea5f..70f7b0d 100644 --- a/src/nese.c +++ b/src/nese.c @@ -97,7 +97,7 @@ int main(int argc, char* argv[]) { // int last_frame_rendered = -1; for (int i = 0; i < n_loops && status == 0; ++i) { int run = 0; - nes_ppu_Result result = nes_run(&sys, 1U, &run); + nes_ppu_Result result = nes_step(&sys, &run); total_cycles += run; /* float us_run = ( run * 1000. * 1000. *