The hardware DFA for the CSC-1

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