# Z80との比較 ## 8080との比較 ゲームボーイのCPUは、より高性能なザイログのZ80よりも、古いIntel 8080に少し似ています。 8080命令のいくつかはサポートしていませんが、JR命令とほとんどすべてのCB接頭辞命令をサポートしています。 また、ゲームボーイのアセンブラでは、わかりにくい8080スタイルの構文ではなく、よりわかりやすいZ80スタイルの構文が使われています。 8080やZ80とは異なり、ゲームボーイには専用のI/OバスやIN/OUT演算子がありません。その代わり、I/Oポートには通常のLD命令、または新しい`LD (FF00+n)`オペコードで直接アクセスします。 符号とパリティ/オーバーフローのフラグが削除され、それを条件とした12個の`RET`,`CALL`,`JP`命令も削除されました。(同様に、`EX (SP)`, `HL (XTHL)`, `EX DE`, `HL (XCHG)`も削除されました) ## Z80との比較 削除された8080命令に加えて、他のEX命令も削除されています。 すべてのDD接頭辞命令とFD接頭辞命令が削除されています。つまりIX,IYレジスタが存在しないことを意味しています。 またED接頭辞命令もすべて削除されています。つまり、16bitのメモリアクセスがほとんどなくなり、16bitの演算機能が大幅に削減されたことになります。その他にもいくつかの命令がなくなっています。 `IN/OUT (C)`は新しい`LD ($FF00+C)`オペコードに置き換えられました。ブロック命令はなくなりましたが、オートインクリメントのHLアクセスが追加されました。 ゲームボーイは、4MHzのZ80(CGB倍速モードでは8MHz)とほぼ同じ速度で動作し、すべての命令の実行時間は4サイクルの倍数に切り上げられています。 **Z80命令との比較** Opcode | Z80 | GB CPU --------|----------------|------------- 08 | EX AF,AF | LD (nn),SP 10 | DJNZ PC+dd | 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) D3 | OUT (n),A | - D9 | EXX | RETI DB | IN A,(n) | - DD | \ prefix | - E0 | RET PO | LD (FF00+n),A E2 | JP PO,nn | LD (FF00+C),A E3 | EX (SP),HL | - E4 | CALL P0,nn | - E8 | RET PE | ADD SP,dd EA | JP PE,nn | LD (nn),A EB | EX DE,HL | - EC | CALL PE,nn | - ED | \ | - F0 | RET P | LD A,(FF00+n) F2 | JP P,nn | LD A,(FF00+C) F4 | CALL P,nn | - F8 | RET M | LD HL,SP+dd FA | JP M,nn | LD A,(nn) FC | CALL M,nn | - FD | \ prefix | - CB 3X | SLL r/(HL) | SWAP r/(HL) ゲームボーイでサポートされていないオペコード(`-`)を使うとCPUは停止します。