Initialize all registers to 0 ( set 6 and 7 to appropriate values ) Initialize MIR/MPC to 0 Initialize main memory to 0 registers = 16 * 16bit MIR/MPC = 32 bit each main memory = 256 * 16bit Loop: 1) Load instruction pointed to by MPC into MIR (MPC is in # of words) 2) MPC += 1, put values on A and B busses 3) ALU produces output, shifter does what it must. (amux passes correct value to A-input of ALU) if MAR is set, MAR loads value from the B bus 4) if MBR is set, MBR gets loaded from the C bus. if ENC is set, the appropriate register is set from the C bus. read or write as neccesary. alu has zero and negative output flags control word format: amux cond alu sh mbr mar rd wr enc c b a addr amux: 0 = A latch, 1 = MBR cond: 0 = no jump, 1 = jump if N, 2 = jump if Z, 3 = jump alu: 0 = A+B, 1 = A&B, 2 = A, 3 = !A sh: 0 = no shift, 1 = shift right 1, 2 = shift left 1 addr: absolute 8 bit value registers: 0=pc, 1=ac, 2=sp, 3=ir, 4=tir, 5=0, 6=1, 7=-1, 8=amask, 9=smask, 10=a, 11=b, 12=c, 13=d, 14=e, 15=f