| @@ -10,46 +10,18 @@ | |||||
| #define audio_freq (44100U) | #define audio_freq (44100U) | ||||
| /* | |||||
| void e6502_print_registers(const e6502_Registers* regs, | |||||
| FILE* file) { | |||||
| fprintf(file, "PC: $%04x\n", regs->PC); | |||||
| fprintf(file, " S: $%02x\n", regs->S); | |||||
| fprintf(file, " A: $%02x\n", regs->A); | |||||
| fprintf(file, " X: $%02x\n", regs->X); | |||||
| fprintf(file, " Y: $%02x\n", regs->Y); | |||||
| fprintf(file, " P: $%02x\n", regs->P); | |||||
| } | |||||
| void e6502_dump_mem(e6502_Core* core, uint16_t addr, | |||||
| int len, FILE* file) { | |||||
| for ( ; len > 0; --len, ++addr) { | |||||
| fprintf(file, "$%04x: %02x\n", | |||||
| addr, e6502_r8(core, addr)); | |||||
| } | |||||
| } | |||||
| void e6502_dump_stack(e6502_Core* core, FILE* file) { | |||||
| int len = 0x100U + 2U - core->registers.S; | |||||
| uint16_t addr = e6502_Memory_Stack + 0xFFU; | |||||
| for ( ; len > 0; --len, --addr) { | |||||
| fprintf(file, "$%03x: %02x\n", | |||||
| addr, e6502_r8(core, addr)); | |||||
| } | |||||
| } | |||||
| */ | |||||
| #define NS_PER_S (1000U * 1000U * 1000U) | #define NS_PER_S (1000U * 1000U * 1000U) | ||||
| /* | |||||
| static int t_diff_ns(const struct timespec* b, | |||||
| const struct timespec* a) { | |||||
| static inline int t_diff_ns(const struct timespec* b, | |||||
| const struct timespec* a) { | |||||
| int sec = (b->tv_sec - a->tv_sec); | int sec = (b->tv_sec - a->tv_sec); | ||||
| int nsec = (b->tv_nsec - a->tv_nsec); | int nsec = (b->tv_nsec - a->tv_nsec); | ||||
| return ((sec * NS_PER_S) + nsec); | return ((sec * NS_PER_S) + nsec); | ||||
| } | } | ||||
| */ | |||||
| static void t_add_ns(struct timespec* s, | |||||
| const struct timespec* a, | |||||
| static inline void t_add_ns(struct timespec* s, | |||||
| const struct timespec* a, | |||||
| int b) { | int b) { | ||||
| int nsec = a->tv_nsec + b; | int nsec = a->tv_nsec + b; | ||||
| s->tv_sec = a->tv_sec + (nsec / NS_PER_S); | s->tv_sec = a->tv_sec + (nsec / NS_PER_S); | ||||
| @@ -104,26 +76,16 @@ int main(int argc, char* argv[]) { | |||||
| uint64_t cycle_last_frame = 0; | uint64_t cycle_last_frame = 0; | ||||
| uint64_t total_cycles = 0; | uint64_t total_cycles = 0; | ||||
| // int last_frame_rendered = -1; | |||||
| for (int i = 0; i < n_loops && status == 0; ++i) { | for (int i = 0; i < n_loops && status == 0; ++i) { | ||||
| int run = 0; | int run = 0; | ||||
| nes_ppu_Result result = nes_step(&sys, &run); | nes_ppu_Result result = nes_step(&sys, &run); | ||||
| total_cycles += run; | total_cycles += run; | ||||
| /* | |||||
| float us_run = ( run * 1000. * 1000. * | |||||
| nes_clock_master_den) / | |||||
| nes_clock_master_num; | |||||
| fprintf(stdout, "Ran %f us, %d master cycles (%s)\n", | |||||
| us_run, run, | |||||
| status == 0 ? "OK" : "Halted"); | |||||
| */ | |||||
| if ( result == ppu_Result_Ready || | if ( result == ppu_Result_Ready || | ||||
| result == ppu_Result_VBlank_Off) { | result == ppu_Result_VBlank_Off) { | ||||
| status = nes_render(rend, &sys.ppu); | status = nes_render(rend, &sys.ppu); | ||||
| if (status > 0) { | if (status > 0) { | ||||
| // last_frame_rendered = sys.ppu.frame; | |||||
| // Sleep to catch up to master clock | // Sleep to catch up to master clock | ||||
| uint64_t elapsed_cycles = total_cycles - | uint64_t elapsed_cycles = total_cycles - | ||||
| cycle_last_frame; | cycle_last_frame; | ||||
| @@ -163,10 +125,6 @@ int main(int argc, char* argv[]) { | |||||
| fprintf(stdout, "Ran %f ms, %lu master cycles (%s)\n", | fprintf(stdout, "Ran %f ms, %lu master cycles (%s)\n", | ||||
| ms_run, total_cycles, | ms_run, total_cycles, | ||||
| status == 0 ? "OK" : "Halted"); | status == 0 ? "OK" : "Halted"); | ||||
| /* | |||||
| e6502_print_registers(&sys.cpu.registers, stdout); | |||||
| e6502_dump_stack(&sys.cpu, stdout); | |||||
| */ | |||||
| } | } | ||||
| return status; | return status; | ||||