/* From cmcclun: file `/home/cmcclun/cs355/pj9/mir.h' as assignment pjX-3 */
/*  THIS CODE IS MY OWN WORK, IT WAS WRITTEN WITHOUT CONSULTING A */
/*  TUTOR OR CODE WRITTEN BY OTHER STUDENTS - Chris McClung */

/* With adaptations of solution program MPC- Josh Walker, CS355, Fall 1999 */
/* Using MIC2 encoded by cs faculty from text... see below */ 


Define MIR-Comp Reset N Z Phase[1-4] | branch MIR[31-0] MPC[7..0];

Not aa Reset NReset;

/* Where is the next Instruction */
/* Either in the Address of the Instruction or MPC+1 */

MicroLogic aa N Z MIR[30] MIR[29] | branch;
Mux-mxn aa MIR[7..0] D[7..0] branch | next[7..0];


/* Select Next Instruction */
MIC2 aa MPC[7..0] | nextInst[31..0];

/* Here's the MIR */

Not aa Phase[1] np1;
Register aa  nextInst[31..0] np1 | MIR[31..0];

/* MPC is resetable gets loads address of next instruction */
/* On Phase[4] */

Dff aa ONE next[7] Phase[4] NReset MPC[7] NMPC[7];
Dff ab ONE next[6] Phase[4] NReset MPC[6] NMPC[6];
Dff ac ONE next[5] Phase[4] NReset MPC[5] NMPC[5];
Dff ad ONE next[4] Phase[4] NReset MPC[4] NMPC[4];
Dff ae ONE next[3] Phase[4] NReset MPC[3] NMPC[3];
Dff af ONE next[2] Phase[4] NReset MPC[2] NMPC[2];
Dff ag ONE next[1] Phase[4] NReset MPC[1] NMPC[1];
Dff ah ONE next[0] Phase[4] NReset MPC[0] NMPC[0];

HAdd1 ba ONE MPC[0] | C0 D[0];
HAdd1 bb C0 MPC[1] | C1 D[1];
HAdd1 bc C1 MPC[2] | C2 D[2];
HAdd1 bd C2 MPC[3] | C3 D[3];
HAdd1 be C3 MPC[4] | C4 D[4];
HAdd1 bf C4 MPC[5] | C5 D[5];
HAdd1 bg C5 MPC[6] | C6 D[6];
HAdd1 bh C6 MPC[7] | C7 D[7];

Endef;

Define HAdd1 A B | C Z;
Xor aa A B Z;
And ab A B C;
Endef;

/* Mmux = 1 if branch */
Define MicroLogic N Z Cond1 Cond0 | mmux;
And aa Cond0 N c1;
And aa Cond1 Z c2;
And aa Cond0 Cond1 c3;

Or aa c1 c2 c3 mmux;
Endef;


/* ----
   The following ROM contains the micro program from Tanenbaum Fig 4-20
   on page 200 - 201
   ---- */
Define MIC2 a[7..0] | d[31..0];
   Rom128x32 aa a[6..0] ZERO d[31..0]


16 192 0 0
1 80 96 0
176 19 0 31
36 20 51 22
52 20 4 13
48 0 4 9
16 192 48 0
17 64 0 0
240 17 0 0
8 19 131 0
17 160 49 0
112 32 0 0
48 0 4 17
8 19 131 0
16 192 48 0
17 64 0 0
224 17 16 0
8 19 131 0
16 192 48 0
0 81 97 0
152 26 0 0
96 17 161 0
52 20 4 25
48 0 4 23
48 0 1 27
104 16 131 0
80 0 1 22
112 0 0 0
48 0 4 27
104 16 131 0
104 17 131 0
36 20 51 40
52 20 4 35
48 0 4 33
0 26 35 0
112 192 160 7
0 26 35 0
113 160 161 10
48 0 4 38
0 26 35 0
112 192 160 13
0 26 35 0
112 192 160 16
52 20 4 46
48 0 4 44
48 0 1 22
112 0 0 0
80 0 1 0
104 16 131 0
52 20 4 50
0 18 114 0
17 160 32 0
104 48 131 0
52 20 4 65
52 20 4 59
48 0 4 56
16 192 16 0
0 82 114 0
112 160 32 10
0 210 98 0
16 64 0 0
112 160 16 10
48 0 4 62
0 18 114 0
113 160 33 10
1 210 98 0
16 64 0 0
240 17 0 0
52 20 4 73
48 0 4 70
0 210 98 0
17 64 0 0
240 16 0 0
16 26 1 0
16 17 2 0
112 18 10 0
48 0 4 76
8 26 147 0
96 18 162 0
8 26 147 0
24 26 10 0
96 26 106 75

0 0 0 0    0 0 0 0    0 0 0 0
0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0
0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0
0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0
0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0
0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0
0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0
0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0
0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0    0 0 0 0
0 0 0 0    0 0 0 0    0 0 0 0;
Endef;


