Fix some weird bugs caused by the main loop running once every opcode
This commit is contained in:
26
main.c
26
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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user