-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmask.h
149 lines (132 loc) · 7.09 KB
/
mask.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#define MAX 512
#define CACHE_SET 8
#define NUMREG 32
/*posicao dos bits nos sinais de controle da ULA
char C_ULA
0- controle ULA 0
1- controle ULA 1
2- controle ULA 2
3- controle ULA 3
4- nao e usado
5- nao e usado
6- nao e usado
7- nao e usado
posicao dos bits nos 16 sinais de controle determinados pela UC
int S_C
0- RegDst (RegDst)
1- EscReg (RegWrite)
2- UALFonteA (ALUSrcA)
3- UALFonteB0 (ALUSrcB0)
4- UALFonteB1 (ALUSrcB1)
5- UALOp0 (ALUOp0)
6- UALOp1 (ALUOp1)
7- FontePC0 (PCSource0)
8- FontePC1 (PCSource1)
9- PCEscCond (PCWriteCond)
10-PCEsc (PCWrite)
11-IouD (IorD)
12-LerMem (MemRead)
13-EscMem (MemWrite)
14-MemParaReg (MemtoReg)
15-IREsc (IRWrite)
*/
// mascaras
// usadas para ativar e desativar o bit zero. Atuam na variavel global zero (um char - 8bits)
#define ativa_bit_zero 0x01 // 00000001 usada com |
#define desativa_bit_zero 0xfe // 1111 1110 usada com &
// usada para separar o bit zero da variavel global zero (um char - 8bits) (posicao 0)
#define separa_bit_zero 0x01 // 0000 0001 usada com &
// usada para separar a operacao da ULA. Atua em SC_ULA 3-0
#define separa_controle_ula 0x0f // 0000 1111 usada com &
// usadas para ativar e zerar a operacao da ULA. Atuam em SC_ULA 3-0
#define ativa_soma 0x02 // 0000 0010 usada com |
#define ativa_subtracao 0x06 // 0000 0110 usada com |
#define ativa_and 0x00 // 0000 0000 usada com |
#define ativa_or 0x01 // 0000 0001 usada com |
#define ativa_slt 0x07 // 0000 0111 usada com |
#define ativa_nor 0x0c // 0000 1100 usada com |
#define zera_controle_ULA 0xf0 // 1111 0000 usada com &
// mascaras usadas para separar os campos dentro da instrucao
// 31 26 25 21 20 16 15 11 10 6 5 0
#define separa_cop 0xfc000000 // 111111 00000 00000 00000 00000 000000 usada com &
#define separa_rs 0x03e00000 // 000000 11111 00000 00000 00000 000000 usada com &
#define separa_rt 0x001f0000 // 000000 00000 11111 00000 00000 000000 usada com &
#define separa_rd 0x0000f800 // 000000 00000 00000 11111 00000 000000 usada com &
#define separa_cfuncao 0x0000003f // 000000 00000 00000 00000 00000 111111 usada com &
#define separa_imediato 0x0000ffff // 000000 00000 00000 1111111111111111 usada com &
#define separa_endereco_jump 0x03ffffff // 000000 11111111111111111111111111 usada com &
// usada para eliminar os 2 bits mais significativos do Campo Funcao.
// Atua na variavel local dentro de UC_ULA
#define zera_2bits_cfuncao 0x0f // 00 00 1111 usada com &
// usada para separar os 4 bits mais significativos de PC. Atua em PC.
#define separa_4bits_PC 0xf0000000 // 11110000000000000000000000000000 usada com &
// usadas para ativar os sinais de controle. Atuam em SC.
#define ativa_RegDst 0x0001 // 0000 0000 0000 0001 usada com |
#define ativa_RegWrite 0x0002 // 0000 0000 0000 0010 usada com |
#define ativa_ALUSrcA 0x0004 // 0000 0000 0000 0100 usada com |
#define ativa_ALUSrcB0 0x0008 // 0000 0000 0000 1000 usada com |
#define ativa_ALUSrcB1 0x0010 // 0000 0000 0001 0000 usada com |
#define ativa_ALUOp0 0x0020 // 0000 0000 0010 0000 usada com |
#define ativa_ALUOp1 0x0040 // 0000 0000 0100 0000 usada com |
#define ativa_PCSource0 0x0080 // 0000 0000 1000 0000 usada com |
#define ativa_PCSource1 0x0100 // 0000 0001 0000 0000 usada com |
#define ativa_PCWriteCond 0x0200 // 0000 0010 0000 0000 usada com |
#define ativa_PCWrite 0x0400 // 0000 0100 0000 0000 usada com |
#define ativa_IorD 0x0800 // 0000 1000 0000 0000 usada com |
#define ativa_MemRead 0x1000 // 0001 0000 0000 0000 usada com |
#define ativa_MemWrite 0x2000 // 0010 0000 0000 0000 usada com |
#define ativa_MemtoReg 0x4000 // 0100 0000 0000 0000 usada com |
#define ativa_IRWrite 0x8000 // 1000 0000 0000 0000 usada com |
// usadas para desativar os sinais de controle. Atuam em SC
#define desativa_RegDst 0xfffe // 1111 1111 1111 1110 usada com &
#define desativa_RegWrite 0xfffd // 1111 1111 1111 1101 usada com &
#define desativa_ALUSrcA 0xfffb // 1111 1111 1111 1011 usada com &
#define desativa_ALUSrcB0 0xfff7 // 1111 1111 1111 0111 usada com &
#define desativa_ALUSrcB1 0xffef // 1111 1111 1110 1111 usada com &
#define desativa_ALUOp0 0xffdf // 1111 1111 1101 1111 usada com &
#define desativa_ALUOp1 0xffbf // 1111 1111 1011 1111 usada com &
#define desativa_PCSource0 0xff7f // 1111 1111 0111 1111 usada com &
#define desativa_PCSource1 0xfeff // 1111 1110 1111 1111 usada com &
#define desativa_PCWriteCond 0xfdff // 1111 1101 1111 1111 usada com &
#define desativa_PCWrite 0xfbff // 1111 1011 1111 1111 usada com &
#define desativa_IorD 0xf7ff // 1111 0111 1111 1111 usada com &
#define desativa_MemRead 0xefff // 1110 1111 1111 1111 usada com &
#define desativa_MemWrite 0xdfff // 1101 1111 1111 1111 usada com &
#define desativa_MemtoReg 0xbfff // 1011 1111 1111 1111 usada com &
#define desativa_IRWrite 0x7fff // 0111 1111 1111 1111 usada com &
// usadas para separar os sinais de controle. Atuam em SC.
#define separa_RegDst 0x0001 // 0000 0000 0000 0001 usada com |
#define separa_RegWrite 0x0002 // 0000 0000 0000 0010 usada com |
#define separa_ALUSrcA 0x0004 // 0000 0000 0000 0100 usada com |
#define separa_ALUSrcB0 0x0008 // 0000 0000 0000 1000 usada com |
#define separa_ALUSrcB1 0x0010 // 0000 0000 0001 0000 usada com |
#define separa_ALUOp0 0x0020 // 0000 0000 0010 0000 usada com |
#define separa_ALUOp1 0x0040 // 0000 0000 0100 0000 usada com |
#define separa_PCSource0 0x0080 // 0000 0000 1000 0000 usada com |
#define separa_PCSource1 0x0100 // 0000 0001 0000 0000 usada com |
#define separa_PCWriteCond 0x0200 // 0000 0010 0000 0000 usada com |
#define separa_PCWrite 0x0400 // 0000 0100 0000 0000 usada com |
#define separa_IorD 0x0800 // 0000 1000 0000 0000 usada com |
#define separa_MemRead 0x1000 // 0001 0000 0000 0000 usada com |
#define separa_MemWrite 0x2000 // 0010 0000 0000 0000 usada com |
#define separa_MemtoReg 0x4000 // 0100 0000 0000 0000 usada com |
#define separa_IRWrite 0x8000 // 1000 0000 0000 0000 usada com |
// controle de sequenciamento explicito para controle microprogramado
#define sequencia 0x00030000
#define tab_desp1 0x00010000
#define tab_desp2 0x00020000
#define volta_busca 0x00000000
// separa o controle de sequenciamento
#define separa_AddrCtrl 0x00030000
// separa bits do estado
#define separa_S0 0x01
#define separa_S1 0x02
#define separa_S2 0x04
#define separa_S3 0x08
#define separa_COp0 0x01
#define separa_COp1 0x02
#define separa_COp2 0x04
#define separa_COp3 0x08
#define separa_COp4 0x10
#define separa_COp5 0x20
#define separa_bitmenos_sig 0x01