From 53c5b6ab9c931051aff8a008e08cbf95095f8aa1 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 30 Oct 2018 22:39:12 -0400 Subject: [PATCH] Fix some weird bugs caused by the main loop running once every opcode --- main.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/main.c b/main.c index c6b0f45..971b8ed 100644 --- a/main.c +++ b/main.c @@ -71,7 +71,6 @@ int main(int argc, char **argv) { int delay = 0; int sound = 0; - int frame = 0; int press = 0; int wait = 0; int store = 0; @@ -79,14 +78,10 @@ int main(int argc, char **argv) { while (1) { if (DEBUG) printf("0x%x ", state.program_counter); - if (frame == 10) - { - frame = 0; - if (delay > 0) --delay; - if (sound > 0) --sound; - memset(state.input, 0, 0x10); - press = 0; - } + if (delay > 0) --delay; + if (sound > 0) --sound; + memset(state.input, 0, 0x10); + press = 0; // opcodes are 16 bits @@ -117,6 +112,10 @@ int main(int argc, char **argv) { wait = 0; } + int ops = 0; + + loop:; + word opcode = (state.memory[state.program_counter++] << 8) | (state.memory[state.program_counter++]); switch (opcode & 0xF000) @@ -403,6 +402,12 @@ int main(int argc, char **argv) { } if (DEBUG) printf("\n"); + if (ops < 10) + { + ops++; + goto loop; + } + for (int x = 0; x < 64; ++x) { for (int y = 0; y < 32; ++y) { @@ -422,8 +427,7 @@ int main(int argc, char **argv) { SDL_RenderPresent(renderer); - SDL_Delay(1); - ++frame; + SDL_Delay(16); // SDL_DestroyWindow(window); // SDL_Quit(); }