このページは閉鎖された「お受験に出るゲームボーイ」さんの「プロセッサ」ページをサルベージして修正・改変したものです。
ほぼ無断転載なので、問題があるようでしたら削除します。

プロセッサ

  • Z80との違い
  • レジスタ・セット
  • 命令群

Z80との違い

ゲームボーイのプロセッサでは、次のように、Z80との違いがある

表.変更コード一覧表

コード Z80 ゲームボーイ
08 EX AX,AF' LD (nn), SP
10 DJNZ e STOP
22 LD (nn), HL LDI (HL), A
2A LD HL, (nn) LDI A, (HL)
32 LD (nn), A LDD (HL), A
3A LD A, (nn) LDD A, (HL)
CB xx - SWAP n
D3 OUT (n), A -
D9 EXX RETI
DB IN A, (n) -
DD xx (IX操作命令) -
E0 RET PO LDH (n), A
E2 JP PO, nn LD (C), A
E3 EX (SP), HL -
E4 CALL PO, nn -
E8 RET PE ADD SP, n
EA JP PE, nn LD (nn), A
EB EX DE, HL -
EC CALL PE, nn -
ED xx (ED xx コード) -
F0 RET P LDH A, (n)
F2 JP P, nn -
F4 CALL P, nn -
F8 RET M LDHL SP, n
FA JP M, nn LD A, (nn)
FC CALL M, nn -
FD xx (IY操作命令) -

レジスタ・セット

8ビットレジスタのA,F,B,C,D,H,Lと16ビットレジスタのSP, PCとをもつ
8ビットレジスタは、AF、BC、DE、HLの組み合わせで、16ビットのペア・レジスタとしても扱うことがある

表.レジスタセットと組み合わせ

15..8 7..0
A
(アキュームレータ)
F
(フラグ・レジスタ)
B C
D E
H L
SP
(スタック・ポインタ)
PC
(プログラム・カウンタ)
▼ アキュームレータ(A)
算術演算や論理演算などの演算は、このレジスタが使われ、結果がこれに保存される。
メモリとのやり取りにもこのレジスタが多く使用される。
▼ フラグ・レジスタ(F)
アキュームレータでは、演算を行うのに使われるが、その結果、どのようなことが起こったかを保存するレジスタ。

表.フラグ・レジスタ

7 6 5 4 3 2 1 0
Z
(ゼロ)
N
(サブトラクト)
H
(ハーフ)
C
(キャリー)
- - - -
ゼロ・フラグ(Z):
演算結果がセロであることを示すフラグ。
結果がゼロの時、1となり、そうでないときは、0となる。
サブトラクト・フラグ(N):
直前に実行された命令が、減算命令であったことを示すフラグ。
減算命令であったとき、1となり、加算命令であったときは、0となる。
ハーフ・キャリー・フラグ(H):
演算の結果、下位4ビットから上位4ビットに対して、キャリー(桁上がり)またはボロー(桁下がり)があったことを示すフラグ
下位4ビットからのキャリーまたはボローがあったとき、1となり、そうではなかったときは、0となる。
キャリー・フラグ(C):
加減算の結果、キャリーまたはボローがあったことを示すフラグ。
キャリーまたは、ボローがあったとき、1となり、そうでなかったときは、0となる。また、ビット・シフト/ローテート命令で、最上位または最下位ビットからあふれたビットをキャリーとして扱う。
▼ 汎用レジスタ(B,C,D,E,H,L)
一時的な記憶場所として、いろいろな目的で使用できるレジスタ。
2つずつペアとして、BC、DE、HLのペア・レジスタとして使用できる。
完全な汎用ではなく、各命令で、特殊な意味を持たせている。
▼ スタック・ポインタ(SP)
16ビットのレジスタで、メモリー上のスタックエリアのアドレスを記憶している。
レジスタの値を一時的に退避(PUSH命令)したり、復帰(POP命令)したりするために利用される。
▼ プログラム・カウンタ
16ビットのレジスタで、次に実行する命令のアドレスを保持している。
命令を1バイト読み込む毎に加算される。

命令群

ゲームボーイのプロセッサでは、次の命令を持つ

ニモニック 機能 備考 CPU クロック フラグ
Z N H C

▼ 8ビット・ロード命令

LD r,s r s s=r,n,(HL) r=4,n=8,(HL)=8 - - - -
LD d,r d r d=r,(HL) r=4, (HL)=8
LD d,n d n r=8, (HL)=12
LD A,(ss) A (ss) ss=BC,DE,HL,nn [BC,DE,HL]=8
nn=16
LD (dd),A (dd) A dd=BC,DE,HL,nn
LD A,(C) A ($FF00+C) - 8
LD (C),A ($FF00+C) A 8
LDD A,(HL) A (HL)
HL HL - 1
8
LDD (HL),A (HL) A
HL HL - 1
8
LDI A,(HL) A (HL)
HL HL + 1
8
LDI (HL),A (HL) A
HL HL + 1
8
LDH (n),A ($FF00+n) A 12
LDH A,(n) A ($FF00+n) 12

▼ 16ビット・ロード命令

LD dd,nn dd nn dd=BC,DE,HL,SP 12 - - - -
LD (nn),SP (nn) SP - 20
LD SP,HL SP HL 8
LD HL,(SP+e) HL (SP+e) 12 0 0 * *
PUSH ss (SP-1) ssh
(SP-2) ssl
SPSP-2
ss=BC,DE,HL,AF 16 - - - -
POP dd ddl (SP)
ddh (SP+1)
SPSP+2
dd=BC,DE,HL,AF 12

▼ 8ビット演算/論理演算命令

ADD A,s A A + s s=r,n,(HL) r=4, n=8, (HL)=8 * 0 * *
ADC A,s A A + s + CY
SUB s A A - s * 1 * *
SBC A,s A A - s - CY
AND s A A s * 0 1 0
OR s A A s * 0 0 0
XOR s A A s
CP s A - s * 1 * *
INC s s s + 1 s=r,(HL) r=4, (HL)=12 * 0 * -
DEC s s s - 1 * 1 * -

▼ 16ビット演算命令

ADD HL,ss HL HL + ss ss=BC,DE,HL,SP 8 - 0 * *
ADD SP,e SP SP + e 16 0 0 * *
INC ss ss ss + 1 8 - - - -
DEC ss ss ss - 1 8

▼ 汎用演算/CPU制御命令

SWAP s s=r,(HL) r=8, (HL)=16 * 0 0 0
DAA Converts A into packed BCD. - 4 * - 0 *
CPL A /A 4 - 1 1 -
CCF CY /CY - 4 - 0 0 *
SCF CY 1 4 - 0 0 1
NOP No operation. - 4 - - - -
HALT Halt CPU
until an interrupt occurs.
4
STOP Halt CPU. 4
DI Disable Interrupts. 4
EI Enable Interrupts. 4

▼ ローテイト/シフト命令

RLCA - 4 0 0 0 *
RLA
RRCA
RRA
RLC s s=A,r,(HL) r=8, (HL)=16 * 0 0 *
RL s
RRC s
RR s
SLA s s=r,(HL) r=8, (HL)=16
SRA s
SRL s

▼ ビット・セット/リセット/テスト命令

BIT b,s Z /sb s=r,(HL) r=8, (HL)=12 * 0 1 -
SET b,s sb 1 r=8, (HL)=16 - - - -
RES b,s sb 0

▼ ジャンプ命令

JP nn PC nn - 16 - - - -
JP cc,nn If cc is true, PC nn,
else continue.
If cc is true, 16
else 12.
JP (HL) PC HL 4
JR e PC PC + e 12
JR cc,e if cc is true, PC PC + e,
else continue.
If cc is true, 12
else 8.

▼ コール/リターン命令

CALL nn (SP-1) PCh
(SP-2) PCl
PC nn
SPSP-2
- 24 - - - -
CALL cc,nn If condition cc is false continue,
else same as CALL nn.
If cc is true, 24
else 12.
RST f (SP-1) PCh
(SP-2) PCl
PCh 0
PCl f
SPSP-2
- 16 - - - -
RET pcl (SP)
pch (SP+1)
SPSP+2
- 16 - - - -
RET cc If cc is true, RET
else continue.
If cc is true,
20 else 8.
RETI Return then enable interrupts. 16
凡例
- フラグは、変わらない
0 フラグは、リセットされる
1 フラグは、セットされる
* フラグは、結果によって変化する
C キャリー・フラグ
CY キャリー・フラグ
cc 判定条件:
C-キャリー・フラグがセットされている
NC-キャリー・フラグがリセットされている
Z-ゼロ・フラグがセットされている
NZ-ゼロ・フラグがリセットされている
H ハーフ・キャリー・フラグ
N サブトラクト・フラグ
Z ゼロ・フラグ