From f1dc1972e6e3237ecb7bcacdb3466cf1e5f596ff Mon Sep 17 00:00:00 2001 From: Aaron Taylor Date: Sat, 10 Jul 2021 20:15:24 -0700 Subject: [PATCH] Fixed bug. The SC now correctly displays the currently executing syllable. --- hacks/NEDsim/simulator.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hacks/NEDsim/simulator.c b/hacks/NEDsim/simulator.c index 2e5916b..7f5f135 100644 --- a/hacks/NEDsim/simulator.c +++ b/hacks/NEDsim/simulator.c @@ -408,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. */ @@ -417,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. */ -- 2.20.1