X-Git-Url: http://git.subgeniuskitty.com/screensavers/.git/blobdiff_plain/0e83e980b0dc355b642c069db82bb4aebfdf8228..f1dc1972e6e3237ecb7bcacdb3466cf1e5f596ff:/hacks/NEDsim/simulator.c diff --git a/hacks/NEDsim/simulator.c b/hacks/NEDsim/simulator.c index 73623dc..7f5f135 100644 --- a/hacks/NEDsim/simulator.c +++ b/hacks/NEDsim/simulator.c @@ -7,21 +7,10 @@ #include #include -#include #include #include -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include #include "a.out.h" #include "simulator.h" @@ -419,8 +408,10 @@ run_simulator(struct NEDstate * state) uint32_t iw; if (state->hack->resume_word) { iw = state->hack->iw; + state->active_thread->sc++; } else { iw = fetch_instruction_word(state); + state->active_thread->sc = 0; } /* Decode instruction word format and execute. */ @@ -428,18 +419,15 @@ run_simulator(struct NEDstate * state) stack_push(state->active_thread, (iw << 1)); } else if ((iw & (0b11 << 30)) == 0) { /* Instruction word is type C. */ uint8_t syllable = extract_syllable_from_word(iw, state->active_thread->sc); - state->active_thread->sc++; /* The following variable allows us to catch JMP/BRZ instructions that */ /* jump to a new PC and need the SC reset. */ uint32_t pre_execution_pc = state->active_thread->pc; execute_syllable(state, syllable); if (state->active_thread->pc != pre_execution_pc) { /* Jumped to a new address, so prepare to execute a new instruction word. */ - state->active_thread->sc = 0; state->hack->resume_word = false; - } else if (state->active_thread->sc >= SPW) { + } else if (state->active_thread->sc >= SPW-1) { /* Just executed the last syllable in this word, follow the PC to the next word. */ - state->active_thread->sc = 0; state->hack->resume_word = false; } else { /* More syllables remain to be executed in this instruction word. */