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