さて、CPUの命令コードができたので、デコードしたときの内部コードを考えてみます。
フェッチした命令コードは、こんな感じの62bitのコードにデコードします。
4bit |
1bit |
1bit |
1bit |
3bit |
16bit |
16bit |
4bit |
16bit |
操作 |
8/16bit |
出力有無 |
オペランド2バイト目有無 |
条件(フラグ) |
パラメータ1 |
パラメータ2 |
出力レジスタ |
PC |
|
操作 |
引数 |
元命令 |
0 |
store |
2 |
LD |
1 |
load |
1 |
LD |
2 |
in |
1 |
IN |
3 |
out |
1 |
OUT |
4 |
move |
2 |
LD, JP, JR, NOP, HALT, DI, EI |
5 |
cpl |
1 |
CPL |
6 |
ccf |
1 |
CCF |
7 |
scf |
1 |
SCF |
8 |
rlca |
2 |
RLCA |
9 |
rrca |
2 |
RRCA |
10 |
rla |
1 |
RLA |
11 |
rra |
1 |
RRA |
12 |
add |
3 |
ADD, ADC, INC, INCW |
13 |
sub |
3 |
SUB, SBC, DEC, DECW |
14 |
and |
2 |
AND |
15 |
xor |
2 |
XOR |
16 |
or |
2 |
OR |
17 |
cp |
2 |
CP |
18 |
mul |
2 |
MUL |
19 |
div |
2 |
DIV |
20 |
mod |
2 |
MOD |
|
条件 |
0 |
なし |
1 |
NZ |
2 |
Z |
3 |
NC |
4 |
C |
|
16bitレジスタ |
0 |
BC |
1 |
DE |
2 |
HL |
3 |
AF |
4 |
SP |
5 |
VW |
|
8bitレジスタ |
0 |
B |
1 |
C |
2 |
D |
3 |
E |
4 |
H |
5 |
L |
6 |
A |
7 |
F(b6がZ, b0がCY) |
8 |
SPh |
9 |
SPl |
10 |
V |
11 |
W |
12 |
I(割り込み許可) |
※割り込み許可がpush af/pop afで変わってはいけないので、フラグレジスタには含めない