The chunk notations and instruction comments are left in for easy reference to microcontrol.html.
S0 stands for state 0. 1->S5 means always go to state 5 next. LDI->S24 means go to state 24 if the LDI wire is 1.
When the CSC-1 turns on, 0 goes into its DFA state register, so the machine always starts at state 0.
The actual DFA needs to define when the various non-state wires get turned on and off. These are wires such as F2, AMUX0, SH1, MA, MARLD, ALD, PCINCR, etc. These are defined in terms of the state wires and sometimes the other control wires. See the file invert.html for a definition of these wires' values.
// CHUNK "Load Instruction" S0: (do nothing) 1->S1 S1: MARMUX=01 1->S2 S2: MARLD=1 1->S3 S3: MARLD=0 MA=1 WR=0 MBRMUX=10 1->S4 S4: MBRLD=1 1->S5 S5: MBRLD=0 MA=0 PCINCR=1 IRLD=1 1->S6 S6: IRLD=0 PCLD=1 1->S7 S7: PCINCR=0 PCLD=0 NOP->S0 HLT->S71 LOD | ADD | SUB | AND | OR | NOT -> S8 LDI->S24 A2S->S46 S2A->S49 SHL->S52 SHR->S53 CAL->S67 RET->S70 JMP->S54 JC->S57 JN->S59 JP->S61 JV->S63 JZ->S65 // "Fetch operand" S8: MARMUX=00 1->S9 S9: MARLD=1 1->S10 S10: MARLD=0 MA=1 WR=0 MBRMUX=10 1->S11 S11: MBRLD=1 1->S12 S12: MBRLD=0 MA=0 1->S13 S13: TMPLD=1 1->S14 S14: TMPLD=0 ADD->S18 SUB->S19 AND->S20 OR->S21 NOT->S22 LOD->S23 // "Store back into A" S15: AMUX=00 1->S16 S16: ALD=1 1->S17 S17: ALD=0 1-S0 // INSTRUCTION: ADD S18: F=101 SH=00 1->S15 // INSTRUCTION: SUB S19: F=110 SH=00 1->S15 // INSTRUCTION: AND S20: F=010 SH=00 1->S15 // INSTRUCTION: OR S21: F=011 SH=00 1->S15 // INSTRUCTION: NOT S22: F=100 SH=00 1->S15 // INSTRUCTION: LOD S23: F=000 SH=00 1->S15 // INSTRUCTION: LDI S24: AMUX=11 1->S25 S25: ALD=1 1->S26 S26: ALD=0 1->S0 // INSTRUCTION: STD S27: MARMUX=00 1->S28 S28: MARLD=1 1->S29 S29: MARLD=0 MBRMUX=01 1->S30 S30: MBRLD=1 1->S31 S31: MBRLD=0 MA=1 WR=1 1->S32 S32: MA=0 WR=0 1->S0 // INSTRUCTION: STS S33: MARMUX=10 1->S34 S34: MARLD=1 1->S35 S35: MARLD=0 MBRMUX=01 1->S36 S36: MBRLD=1 1->S37 S37: MBRLD=0 MA=1 WR=1 1->S38 S38: MA=0 WR=0 1->S0 // INSTRUCTION: LDS S39: MARMUX=10 1->S40 S40: MARLD=1 1->S41 S41: MARLD=0 MA=1 WR=0 MBRMUX=10 1->S42 S42: MBRLD=1 1->S43 S43: MBRLD=0 MA=0 AMUX=01 1->S44 S44: ALD=1 1->S45 S45: ALD=0 1->S0 // INSTRUCTION: A2S S46: SMUX=1 1->S47 S47: SLD=1 1->S48 S48: SLD=0 1->S0 // INSTRUCTION: S2A S49: AMUX=10 1->S50 S50: ALD=1 1->S51 S51: ALD=0 1->S0 // INSTRUCTION: SHL S52: F=000 SH=10 1->S15 // Use Chunk "Store back into A" // INSTRUCTION: SHR S53: F=000 SH=01 1->S15 // Use Chunk "Store back into A" // INSTRUCTION: JMP S54: PCMUX=1 1->S55 S55: PCLD=1 1->S56 S56: PCLD=0 1->S0 // INSTRUCTION: JC S57: PCMUX=1 1->S58 S58: PCLD=C 1->S56 // INSTRUCTION: JN S59: PCMUX=1 1->S60 S60: PCLD=N 1->S56 // INSTRUCTION: JP S61: PCMUX=1 1->S62 S62: PCLD=~N & ~Z 1->S56 // INSTRUCTION: JV S63: PCMUX=1 1->S64 S64: PCLD=V 1->S56 // INSTRUCTION: JZ S65: PCMUX=1 1->S66 S66: PCLD=Z 1->S56 // INSTRUCTION: CAL S67: SMUX=0 PCMUX=1 1->S68 S68: SLD=1 PCLD=1 1->S69 S69: SLD=0 PCLD=0 1->S0 // INSTRUCTION: RET S70: PCMUX=0 1->S55 // Go to PCLD // INSTRUCTION: HLT S71: (do nothing) 1->S71 // Go into an infinite loop
Fixed Oct. 7, 2002