|
ゲームボーイのプロセッサでは、次のように、Z80との違いがある
- 裏レジスタ(BC',DE',HL',AF')の廃止
- サイン・フラグとパリティ/オーバーフロー・フラグの廃止
- インデックスレジスタ(IX,IY)の廃止
- I/O空間の廃止
- 交換命令の廃止
- サイン・フラグとパリティ/オーバーフロー・フラグの条件付ジャンプ/コール/リターン命令の廃止
- インデックスレジスタ操作命令の廃止
- IN/OUT命令の廃止
- 第1OPコードにEDを持つ命令を廃止(ただしRETIは、ED 4DからD9へ変更)
- 8ビット・ロード命令の追加
- 汎用演算/CPU制御命令の追加
表.変更コード一覧表
コード 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=16LD (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 - 18 LDD (HL),A (HL) A
HL HL - 18 LDI A,(HL) A (HL)
HL HL + 18 LDI (HL),A (HL) A
HL HL + 18 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-2ss=BC,DE,HL,AF 16 - - - - POP dd ddl (SP)
ddh (SP+1)
SPSP+2dd=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 ゼロ・フラグ