The game begins with some registers (including the MAR and MDR) in an unknown state (XXX). To fetch the first instruction the value of the PCR must be copied to the MAR. To do this, select the PCR for access to the internal bus (click the option button circled below) then click the LATCH button in the MAR:
Next you need to load the program (op code) and data (operand from memory). Click the LATCH (EXT) button and the LOAD button (in the CIR):
The LDA instruction will fetch a number from memory, so the next step is to copy the MDR to the MAR (via the internal bus again) and then load the value from memory into the MDR, here the value from memory location 007 is loaded into the MDR:
To store a value in memory, the value must be in the MDR and the address in the MAR as above, but then the SEND WRITE SIGNAL TO RAM button must be clicked to write the value into memory.
To carry out an addition or subtraction make sure the value you want to add to or subtract from the accumulator is in the MDR. The accumulator is INPUT A and the internal bus is INPUT B for the ALU. When you click the add or subtract button, the answer is stored in the accumulator and the status register flags are set: Z/N = Zero or Non-zero and N/P = Negative or Positive (000 is treated as positive). Check the N/P flag when you come to the BRP instruction - branch if positive.
At the end of a machine cycle the PCR is normally incremented, but in the case of a branch instruction the new address can be copied from the MDR by selecting the MDR on the internal bus and clicking LOAD in the PCR.
Once the correct result is stored in address 009 and the program halts the game is over. You'll then be given a summary of your performance, you should be able to complete the program in 68 steps.