Difference between revisions of "GBZ80"
Line 1: | Line 1: | ||
− | The GBZ80 (Sharp SM83) that powers the original | + | The GBZ80 (Sharp SM83) is the CPU that powers the original Nintendo Gameboy and Gameboy Color handheld consoles. It is kind of an in-between the [[Intel 8080]] and [[Z80]]. [https://gbdev.io/resources.html Awesome Gameboy resources] [https://gbdev.gg8.se/wiki/ GBDev wiki] [https://emudev.de/ Emudev (q00.gb)] |
The GBZ80 lacks the alternate register set, the dedicated I/O bus, the R register, the index registers (thus no DD and FD prefixed opcodes), the ED prefixed opcodes (including block transfer), the sign and parity/overflow flags (and all conditional instructions that used them), the undocumented flags (thus no leaking of WZ and Q internal registers). [https://www.pastraiser.com/cpu/gameboy/gameboy_opcodes.html GBZ80 opcodes] | The GBZ80 lacks the alternate register set, the dedicated I/O bus, the R register, the index registers (thus no DD and FD prefixed opcodes), the ED prefixed opcodes (including block transfer), the sign and parity/overflow flags (and all conditional instructions that used them), the undocumented flags (thus no leaking of WZ and Q internal registers). [https://www.pastraiser.com/cpu/gameboy/gameboy_opcodes.html GBZ80 opcodes] | ||
Line 8: | Line 8: | ||
Fun fact: Way more GBZ80 cores were produced for Gameboy hardware (118 million Gameboys and 81 million GBA) than all the Z80 chips produced for home computers and game consoles. [https://www.chibiakumas.com/z80/Gameboy.php Learn GBZ80 Assembly Programming with ChibiAkumas] | Fun fact: Way more GBZ80 cores were produced for Gameboy hardware (118 million Gameboys and 81 million GBA) than all the Z80 chips produced for home computers and game consoles. [https://www.chibiakumas.com/z80/Gameboy.php Learn GBZ80 Assembly Programming with ChibiAkumas] | ||
+ | |||
+ | == Opcodes == | ||
+ | |||
+ | Opcode differences with Z80 are in bold. The unused ('''—''') opcodes will lock up the Game Boy CPU when used. | ||
+ | |||
+ | === Standard opcodes === | ||
+ | |||
+ | {| style="white-space: nowrap;" | ||
+ | |- | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 00 || NOP | ||
+ | |- | ||
+ | | 01 xx xx || LD BC,nn | ||
+ | |- | ||
+ | | 02 || LD (BC),A | ||
+ | |- | ||
+ | | 03 || INC BC | ||
+ | |- | ||
+ | | 04 || INC B | ||
+ | |- | ||
+ | | 05 || DEC B | ||
+ | |- | ||
+ | | 06 xx || LD B,n | ||
+ | |- | ||
+ | | 07 || RLCA | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 08 || EX AF,AF' | ||
+ | |- | ||
+ | | 09 || ADD HL,BC | ||
+ | |- | ||
+ | | 0A || LD A,(BC) | ||
+ | |- | ||
+ | | 0B || DEC BC | ||
+ | |- | ||
+ | | 0C || INC C | ||
+ | |- | ||
+ | | 0D || DEC C | ||
+ | |- | ||
+ | | 0E xx || LD C,n | ||
+ | |- | ||
+ | | 0F || RRCA | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 10 xx || DJNZ e | ||
+ | |- | ||
+ | | 11 xx xx || LD DE,nn | ||
+ | |- | ||
+ | | 12 || LD (DE),A | ||
+ | |- | ||
+ | | 13 || INC DE | ||
+ | |- | ||
+ | | 14 || INC D | ||
+ | |- | ||
+ | | 15 || DEC D | ||
+ | |- | ||
+ | | 16 xx || LD D,n | ||
+ | |- | ||
+ | | 17 || RLA | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 18 xx || JR e | ||
+ | |- | ||
+ | | 19 || ADD HL,DE | ||
+ | |- | ||
+ | | 1A || LD A,(DE) | ||
+ | |- | ||
+ | | 1B || DEC DE | ||
+ | |- | ||
+ | | 1C || INC E | ||
+ | |- | ||
+ | | 1D || DEC E | ||
+ | |- | ||
+ | | 1E xx || LD E,n | ||
+ | |- | ||
+ | | 1F || RRA | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 20 xx || JR NZ,e | ||
+ | |- | ||
+ | | 21 xx xx || LD HL,nn | ||
+ | |- | ||
+ | | 22 xx xx || LD (nn),HL | ||
+ | |- | ||
+ | | 23 || INC HL | ||
+ | |- | ||
+ | | 24 || INC H | ||
+ | |- | ||
+ | | 25 || DEC H | ||
+ | |- | ||
+ | | 26 xx || LD H,n | ||
+ | |- | ||
+ | | 27 || DAA | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 28 xx || JR Z,e | ||
+ | |- | ||
+ | | 29 || ADD HL,HL | ||
+ | |- | ||
+ | | 2A xx xx || LD HL,(nn) | ||
+ | |- | ||
+ | | 2B || DEC HL | ||
+ | |- | ||
+ | | 2C || INC L | ||
+ | |- | ||
+ | | 2D || DEC L | ||
+ | |- | ||
+ | | 2E xx || LD L,n | ||
+ | |- | ||
+ | | 2F || CPL | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 30 xx || JR NC,e | ||
+ | |- | ||
+ | | 31 xx xx || LD SP,nn | ||
+ | |- | ||
+ | | 32 xx xx || LD (nn),A | ||
+ | |- | ||
+ | | 33 || INC SP | ||
+ | |- | ||
+ | | 34 || INC (HL) | ||
+ | |- | ||
+ | | 35 || DEC (HL) | ||
+ | |- | ||
+ | | 36 xx || LD (HL),n | ||
+ | |- | ||
+ | | 37 || SCF | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 38 xx || JR C,e | ||
+ | |- | ||
+ | | 39 || ADD HL,SP | ||
+ | |- | ||
+ | | 3A xx xx || LD A,(nn) | ||
+ | |- | ||
+ | | 3B || DEC SP | ||
+ | |- | ||
+ | | 3C || INC A | ||
+ | |- | ||
+ | | 3D || DEC A | ||
+ | |- | ||
+ | | 3E xx || LD A,n | ||
+ | |- | ||
+ | | 3F || CCF | ||
+ | |} | ||
+ | |} | ||
+ | |||
+ | {| style="white-space: nowrap;" | ||
+ | |- | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 40 || LD B,B | ||
+ | |- | ||
+ | | 41 || LD B,C | ||
+ | |- | ||
+ | | 42 || LD B,D | ||
+ | |- | ||
+ | | 43 || LD B,E | ||
+ | |- | ||
+ | | 44 || LD B,H | ||
+ | |- | ||
+ | | 45 || LD B,L | ||
+ | |- | ||
+ | | 46 || LD B,(HL) | ||
+ | |- | ||
+ | | 47 || LD B,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 48 || LD C,B | ||
+ | |- | ||
+ | | 49 || LD C,C | ||
+ | |- | ||
+ | | 4A || LD C,D | ||
+ | |- | ||
+ | | 4B || LD C,E | ||
+ | |- | ||
+ | | 4C || LD C,H | ||
+ | |- | ||
+ | | 4D || LD C,L | ||
+ | |- | ||
+ | | 4E || LD C,(HL) | ||
+ | |- | ||
+ | | 4F || LD C,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 50 || LD D,B | ||
+ | |- | ||
+ | | 51 || LD D,C | ||
+ | |- | ||
+ | | 52 || LD D,D | ||
+ | |- | ||
+ | | 53 || LD D,E | ||
+ | |- | ||
+ | | 54 || LD D,H | ||
+ | |- | ||
+ | | 55 || LD D,L | ||
+ | |- | ||
+ | | 56 || LD D,(HL) | ||
+ | |- | ||
+ | | 57 || LD D,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 58 || LD E,B | ||
+ | |- | ||
+ | | 59 || LD E,C | ||
+ | |- | ||
+ | | 5A || LD E,D | ||
+ | |- | ||
+ | | 5B || LD E,E | ||
+ | |- | ||
+ | | 5C || LD E,H | ||
+ | |- | ||
+ | | 5D || LD E,L | ||
+ | |- | ||
+ | | 5E || LD E,(HL) | ||
+ | |- | ||
+ | | 5F || LD E,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 60 || LD H,B | ||
+ | |- | ||
+ | | 61 || LD H,C | ||
+ | |- | ||
+ | | 62 || LD H,D | ||
+ | |- | ||
+ | | 63 || LD H,E | ||
+ | |- | ||
+ | | 64 || LD H,H | ||
+ | |- | ||
+ | | 65 || LD H,L | ||
+ | |- | ||
+ | | 66 || LD H,(HL) | ||
+ | |- | ||
+ | | 67 || LD H,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 68 || LD L,B | ||
+ | |- | ||
+ | | 69 || LD L,C | ||
+ | |- | ||
+ | | 6A || LD L,D | ||
+ | |- | ||
+ | | 6B || LD L,E | ||
+ | |- | ||
+ | | 6C || LD L,H | ||
+ | |- | ||
+ | | 6D || LD L,L | ||
+ | |- | ||
+ | | 6E || LD L,(HL) | ||
+ | |- | ||
+ | | 6F || LD L,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 70 || LD (HL),B | ||
+ | |- | ||
+ | | 71 || LD (HL),C | ||
+ | |- | ||
+ | | 72 || LD (HL),D | ||
+ | |- | ||
+ | | 73 || LD (HL),E | ||
+ | |- | ||
+ | | 74 || LD (HL),H | ||
+ | |- | ||
+ | | 75 || LD (HL),L | ||
+ | |- | ||
+ | | 76 || HALT | ||
+ | |- | ||
+ | | 77 || LD (HL),A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 78 || LD A,B | ||
+ | |- | ||
+ | | 79 || LD A,C | ||
+ | |- | ||
+ | | 7A || LD A,D | ||
+ | |- | ||
+ | | 7B || LD A,E | ||
+ | |- | ||
+ | | 7C || LD A,H | ||
+ | |- | ||
+ | | 7D || LD A,L | ||
+ | |- | ||
+ | | 7E || LD A,(HL) | ||
+ | |- | ||
+ | | 7F || LD A,A | ||
+ | |} | ||
+ | |} | ||
+ | |||
+ | {| style="white-space: nowrap;" | ||
+ | |- | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 80 || ADD A,B | ||
+ | |- | ||
+ | | 81 || ADD A,C | ||
+ | |- | ||
+ | | 82 || ADD A,D | ||
+ | |- | ||
+ | | 83 || ADD A,E | ||
+ | |- | ||
+ | | 84 || ADD A,H | ||
+ | |- | ||
+ | | 85 || ADD A,L | ||
+ | |- | ||
+ | | 86 || ADD A,(HL) | ||
+ | |- | ||
+ | | 87 || ADD A,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 88 || ADC A,B | ||
+ | |- | ||
+ | | 89 || ADC A,C | ||
+ | |- | ||
+ | | 8A || ADC A,D | ||
+ | |- | ||
+ | | 8B || ADC A,E | ||
+ | |- | ||
+ | | 8C || ADC A,H | ||
+ | |- | ||
+ | | 8D || ADC A,L | ||
+ | |- | ||
+ | | 8E || ADC A,(HL) | ||
+ | |- | ||
+ | | 8F || ADC A,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 90 || SUB B | ||
+ | |- | ||
+ | | 91 || SUB C | ||
+ | |- | ||
+ | | 92 || SUB D | ||
+ | |- | ||
+ | | 93 || SUB E | ||
+ | |- | ||
+ | | 94 || SUB H | ||
+ | |- | ||
+ | | 95 || SUB L | ||
+ | |- | ||
+ | | 96 || SUB (HL) | ||
+ | |- | ||
+ | | 97 || SUB A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 98 || SBC A,B | ||
+ | |- | ||
+ | | 99 || SBC A,C | ||
+ | |- | ||
+ | | 9A || SBC A,D | ||
+ | |- | ||
+ | | 9B || SBC A,E | ||
+ | |- | ||
+ | | 9C || SBC A,H | ||
+ | |- | ||
+ | | 9D || SBC A,L | ||
+ | |- | ||
+ | | 9E || SBC A,(HL) | ||
+ | |- | ||
+ | | 9F || SBC A,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | A0 || AND B | ||
+ | |- | ||
+ | | A1 || AND C | ||
+ | |- | ||
+ | | A2 || AND D | ||
+ | |- | ||
+ | | A3 || AND E | ||
+ | |- | ||
+ | | A4 || AND H | ||
+ | |- | ||
+ | | A5 || AND L | ||
+ | |- | ||
+ | | A6 || AND (HL) | ||
+ | |- | ||
+ | | A7 || AND A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | A8 || XOR B | ||
+ | |- | ||
+ | | A9 || XOR C | ||
+ | |- | ||
+ | | AA || XOR D | ||
+ | |- | ||
+ | | AB || XOR E | ||
+ | |- | ||
+ | | AC || XOR H | ||
+ | |- | ||
+ | | AD || XOR L | ||
+ | |- | ||
+ | | AE || XOR (HL) | ||
+ | |- | ||
+ | | AF || XOR A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | B0 || OR B | ||
+ | |- | ||
+ | | B1 || OR C | ||
+ | |- | ||
+ | | B2 || OR D | ||
+ | |- | ||
+ | | B3 || OR E | ||
+ | |- | ||
+ | | B4 || OR H | ||
+ | |- | ||
+ | | B5 || OR L | ||
+ | |- | ||
+ | | B6 || OR (HL) | ||
+ | |- | ||
+ | | B7 || OR A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | B8 || CP B | ||
+ | |- | ||
+ | | B9 || CP C | ||
+ | |- | ||
+ | | BA || CP D | ||
+ | |- | ||
+ | | BB || CP E | ||
+ | |- | ||
+ | | BC || CP H | ||
+ | |- | ||
+ | | BD || CP L | ||
+ | |- | ||
+ | | BE || CP (HL) | ||
+ | |- | ||
+ | | BF || CP A | ||
+ | |} | ||
+ | |} | ||
+ | |||
+ | {| style="white-space: nowrap;" | ||
+ | |- | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | C0 || RET NZ | ||
+ | |- | ||
+ | | C1 || POP BC | ||
+ | |- | ||
+ | | C2 xx xx || JP NZ,nn | ||
+ | |- | ||
+ | | C3 xx xx || JP nn | ||
+ | |- | ||
+ | | C4 xx xx || CALL NZ,nn | ||
+ | |- | ||
+ | | C5 || PUSH BC | ||
+ | |- | ||
+ | | C6 xx || ADD A,n | ||
+ | |- | ||
+ | | C7 || RST #0 | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | C8 || RET Z | ||
+ | |- | ||
+ | | C9 || RET | ||
+ | |- | ||
+ | | CA xx xx || JP Z,nn | ||
+ | |- | ||
+ | | CB || ''Instruction prefix'' | ||
+ | |- | ||
+ | | CC xx xx || CALL Z,nn | ||
+ | |- | ||
+ | | CD xx xx || CALL nn | ||
+ | |- | ||
+ | | CE xx || ADC A,n | ||
+ | |- | ||
+ | | CF || RST #8 | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | D0 || RET NC | ||
+ | |- | ||
+ | | D1 || POP DE | ||
+ | |- | ||
+ | | D2 xx xx || JP NC,nn | ||
+ | |- | ||
+ | | D3 || '''—''' | ||
+ | |- | ||
+ | | D4 xx xx || CALL NC,nn | ||
+ | |- | ||
+ | | D5 || PUSH DE | ||
+ | |- | ||
+ | | D6 xx || SUB n | ||
+ | |- | ||
+ | | D7 || RST #10 | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | D8 || RET C | ||
+ | |- | ||
+ | | D9 || EXX | ||
+ | |- | ||
+ | | DA xx xx || JP C,nn | ||
+ | |- | ||
+ | | DB || '''—''' | ||
+ | |- | ||
+ | | DC xx xx || CALL C,nn | ||
+ | |- | ||
+ | | DD || '''—''' | ||
+ | |- | ||
+ | | DE xx || SBC A,n | ||
+ | |- | ||
+ | | DF || RST #18 | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | E0 || RET PO | ||
+ | |- | ||
+ | | E1 || POP HL | ||
+ | |- | ||
+ | | E2 xx xx || JP PO,nn | ||
+ | |- | ||
+ | | E3 || '''—''' | ||
+ | |- | ||
+ | | E4 || '''—''' | ||
+ | |- | ||
+ | | E5 || PUSH HL | ||
+ | |- | ||
+ | | E6 xx || AND n | ||
+ | |- | ||
+ | | E7 || RST #20 | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | E8 || RET PE | ||
+ | |- | ||
+ | | E9 || JP (HL) | ||
+ | |- | ||
+ | | EA xx xx || JP PE,nn | ||
+ | |- | ||
+ | | EB || '''—''' | ||
+ | |- | ||
+ | | EC || '''—''' | ||
+ | |- | ||
+ | | ED || '''—''' | ||
+ | |- | ||
+ | | EE xx || XOR n | ||
+ | |- | ||
+ | | EF || RST #28 | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | F0 || RET P | ||
+ | |- | ||
+ | | F1 || POP AF | ||
+ | |- | ||
+ | | F2 xx xx || JP P,nn | ||
+ | |- | ||
+ | | F3 || DI | ||
+ | |- | ||
+ | | F4 || '''—''' | ||
+ | |- | ||
+ | | F5 || PUSH AF | ||
+ | |- | ||
+ | | F6 xx || OR n | ||
+ | |- | ||
+ | | F7 || RST #30 | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | F8 || RET M | ||
+ | |- | ||
+ | | F9 || LD SP,HL | ||
+ | |- | ||
+ | | FA xx xx || JP M,nn | ||
+ | |- | ||
+ | | FB || EI | ||
+ | |- | ||
+ | | FC || '''—''' | ||
+ | |- | ||
+ | | FD || '''—''' | ||
+ | |- | ||
+ | | FE xx || CP n | ||
+ | |- | ||
+ | | FF || RST #38 | ||
+ | |} | ||
+ | |} | ||
+ | |||
+ | === CB-prefixed opcodes === | ||
+ | |||
+ | {| style="white-space: nowrap;" | ||
+ | |- | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 00 || RLC B | ||
+ | |- | ||
+ | | 01 || RLC C | ||
+ | |- | ||
+ | | 02 || RLC D | ||
+ | |- | ||
+ | | 03 || RLC E | ||
+ | |- | ||
+ | | 04 || RLC H | ||
+ | |- | ||
+ | | 05 || RLC L | ||
+ | |- | ||
+ | | 06 || RLC (HL) | ||
+ | |- | ||
+ | | 07 || RLC A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 08 || RRC B | ||
+ | |- | ||
+ | | 09 || RRC C | ||
+ | |- | ||
+ | | 0A || RRC D | ||
+ | |- | ||
+ | | 0B || RRC E | ||
+ | |- | ||
+ | | 0C || RRC H | ||
+ | |- | ||
+ | | 0D || RRC L | ||
+ | |- | ||
+ | | 0E || RRC (HL) | ||
+ | |- | ||
+ | | 0F || RRC A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 10 || RL B | ||
+ | |- | ||
+ | | 11 || RL C | ||
+ | |- | ||
+ | | 12 || RL D | ||
+ | |- | ||
+ | | 13 || RL E | ||
+ | |- | ||
+ | | 14 || RL H | ||
+ | |- | ||
+ | | 15 || RL L | ||
+ | |- | ||
+ | | 16 || RL (HL) | ||
+ | |- | ||
+ | | 17 || RL A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 18 || RR B | ||
+ | |- | ||
+ | | 19 || RR C | ||
+ | |- | ||
+ | | 1A || RR D | ||
+ | |- | ||
+ | | 1B || RR E | ||
+ | |- | ||
+ | | 1C || RR H | ||
+ | |- | ||
+ | | 1D || RR L | ||
+ | |- | ||
+ | | 1E || RR (HL) | ||
+ | |- | ||
+ | | 1F || RR A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 20 || SLA B | ||
+ | |- | ||
+ | | 21 || SLA C | ||
+ | |- | ||
+ | | 22 || SLA D | ||
+ | |- | ||
+ | | 23 || SLA E | ||
+ | |- | ||
+ | | 24 || SLA H | ||
+ | |- | ||
+ | | 25 || SLA L | ||
+ | |- | ||
+ | | 26 || SLA (HL) | ||
+ | |- | ||
+ | | 27 || SLA A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 28 || SRA B | ||
+ | |- | ||
+ | | 29 || SRA C | ||
+ | |- | ||
+ | | 2A || SRA D | ||
+ | |- | ||
+ | | 2B || SRA E | ||
+ | |- | ||
+ | | 2C || SRA H | ||
+ | |- | ||
+ | | 2D || SRA L | ||
+ | |- | ||
+ | | 2E || SRA (HL) | ||
+ | |- | ||
+ | | 2F || SRA A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 30 || '''SWAP B''' | ||
+ | |- | ||
+ | | 31 || '''SWAP C''' | ||
+ | |- | ||
+ | | 32 || '''SWAP D''' | ||
+ | |- | ||
+ | | 33 || '''SWAP E''' | ||
+ | |- | ||
+ | | 34 || '''SWAP H''' | ||
+ | |- | ||
+ | | 35 || '''SWAP L''' | ||
+ | |- | ||
+ | | 36 || '''SWAP (HL)''' | ||
+ | |- | ||
+ | | 37 || '''SWAP A''' | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 38 || SRL B | ||
+ | |- | ||
+ | | 39 || SRL C | ||
+ | |- | ||
+ | | 3A || SRL D | ||
+ | |- | ||
+ | | 3B || SRL E | ||
+ | |- | ||
+ | | 3C || SRL H | ||
+ | |- | ||
+ | | 3D || SRL L | ||
+ | |- | ||
+ | | 3E || SRL (HL) | ||
+ | |- | ||
+ | | 3F || SRL A | ||
+ | |} | ||
+ | |- | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 40 || BIT 0,B | ||
+ | |- | ||
+ | | 41 || BIT 0,C | ||
+ | |- | ||
+ | | 42 || BIT 0,D | ||
+ | |- | ||
+ | | 43 || BIT 0,E | ||
+ | |- | ||
+ | | 44 || BIT 0,H | ||
+ | |- | ||
+ | | 45 || BIT 0,L | ||
+ | |- | ||
+ | | 46 || BIT 0,(HL) | ||
+ | |- | ||
+ | | 47 || BIT 0,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 48 || BIT 1,B | ||
+ | |- | ||
+ | | 49 || BIT 1,C | ||
+ | |- | ||
+ | | 4A || BIT 1,D | ||
+ | |- | ||
+ | | 4B || BIT 1,E | ||
+ | |- | ||
+ | | 4C || BIT 1,H | ||
+ | |- | ||
+ | | 4D || BIT 1,L | ||
+ | |- | ||
+ | | 4E || BIT 1,(HL) | ||
+ | |- | ||
+ | | 4F || BIT 1,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 50 || BIT 2,B | ||
+ | |- | ||
+ | | 51 || BIT 2,C | ||
+ | |- | ||
+ | | 52 || BIT 2,D | ||
+ | |- | ||
+ | | 53 || BIT 2,E | ||
+ | |- | ||
+ | | 54 || BIT 2,H | ||
+ | |- | ||
+ | | 55 || BIT 2,L | ||
+ | |- | ||
+ | | 56 || BIT 2,(HL) | ||
+ | |- | ||
+ | | 57 || BIT 2,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 58 || BIT 3,B | ||
+ | |- | ||
+ | | 59 || BIT 3,C | ||
+ | |- | ||
+ | | 5A || BIT 3,D | ||
+ | |- | ||
+ | | 5B || BIT 3,E | ||
+ | |- | ||
+ | | 5C || BIT 3,H | ||
+ | |- | ||
+ | | 5D || BIT 3,L | ||
+ | |- | ||
+ | | 5E || BIT 3,(HL) | ||
+ | |- | ||
+ | | 5F || BIT 3,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 60 || BIT 4,B | ||
+ | |- | ||
+ | | 61 || BIT 4,C | ||
+ | |- | ||
+ | | 62 || BIT 4,D | ||
+ | |- | ||
+ | | 63 || BIT 4,E | ||
+ | |- | ||
+ | | 64 || BIT 4,H | ||
+ | |- | ||
+ | | 65 || BIT 4,L | ||
+ | |- | ||
+ | | 66 || BIT 4,(HL) | ||
+ | |- | ||
+ | | 67 || BIT 4,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 68 || BIT 5,B | ||
+ | |- | ||
+ | | 69 || BIT 5,C | ||
+ | |- | ||
+ | | 6A || BIT 5,D | ||
+ | |- | ||
+ | | 6B || BIT 5,E | ||
+ | |- | ||
+ | | 6C || BIT 5,H | ||
+ | |- | ||
+ | | 6D || BIT 5,L | ||
+ | |- | ||
+ | | 6E || BIT 5,(HL) | ||
+ | |- | ||
+ | | 6F || BIT 5,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 70 || BIT 6,B | ||
+ | |- | ||
+ | | 71 || BIT 6,C | ||
+ | |- | ||
+ | | 72 || BIT 6,D | ||
+ | |- | ||
+ | | 73 || BIT 6,E | ||
+ | |- | ||
+ | | 74 || BIT 6,H | ||
+ | |- | ||
+ | | 75 || BIT 6,L | ||
+ | |- | ||
+ | | 76 || BIT 6,(HL) | ||
+ | |- | ||
+ | | 77 || BIT 6,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 78 || BIT 7,B | ||
+ | |- | ||
+ | | 79 || BIT 7,C | ||
+ | |- | ||
+ | | 7A || BIT 7,D | ||
+ | |- | ||
+ | | 7B || BIT 7,E | ||
+ | |- | ||
+ | | 7C || BIT 7,H | ||
+ | |- | ||
+ | | 7D || BIT 7,L | ||
+ | |- | ||
+ | | 7E || BIT 7,(HL) | ||
+ | |- | ||
+ | | 7F || BIT 7,A | ||
+ | |} | ||
+ | |- | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 80 || RES 0,B | ||
+ | |- | ||
+ | | 81 || RES 0,C | ||
+ | |- | ||
+ | | 82 || RES 0,D | ||
+ | |- | ||
+ | | 83 || RES 0,E | ||
+ | |- | ||
+ | | 84 || RES 0,H | ||
+ | |- | ||
+ | | 85 || RES 0,L | ||
+ | |- | ||
+ | | 86 || RES 0,(HL) | ||
+ | |- | ||
+ | | 87 || RES 0,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 88 || RES 1,B | ||
+ | |- | ||
+ | | 89 || RES 1,C | ||
+ | |- | ||
+ | | 8A || RES 1,D | ||
+ | |- | ||
+ | | 8B || RES 1,E | ||
+ | |- | ||
+ | | 8C || RES 1,H | ||
+ | |- | ||
+ | | 8D || RES 1,L | ||
+ | |- | ||
+ | | 8E || RES 1,(HL) | ||
+ | |- | ||
+ | | 8F || RES 1,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 90 || RES 2,B | ||
+ | |- | ||
+ | | 91 || RES 2,C | ||
+ | |- | ||
+ | | 92 || RES 2,D | ||
+ | |- | ||
+ | | 93 || RES 2,E | ||
+ | |- | ||
+ | | 94 || RES 2,H | ||
+ | |- | ||
+ | | 95 || RES 2,L | ||
+ | |- | ||
+ | | 96 || RES 2,(HL) | ||
+ | |- | ||
+ | | 97 || RES 2,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | 98 || RES 3,B | ||
+ | |- | ||
+ | | 99 || RES 3,C | ||
+ | |- | ||
+ | | 9A || RES 3,D | ||
+ | |- | ||
+ | | 9B || RES 3,E | ||
+ | |- | ||
+ | | 9C || RES 3,H | ||
+ | |- | ||
+ | | 9D || RES 3,L | ||
+ | |- | ||
+ | | 9E || RES 3,(HL) | ||
+ | |- | ||
+ | | 9F || RES 3,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | A0 || RES 4,B | ||
+ | |- | ||
+ | | A1 || RES 4,C | ||
+ | |- | ||
+ | | A2 || RES 4,D | ||
+ | |- | ||
+ | | A3 || RES 4,E | ||
+ | |- | ||
+ | | A4 || RES 4,H | ||
+ | |- | ||
+ | | A5 || RES 4,L | ||
+ | |- | ||
+ | | A6 || RES 4,(HL) | ||
+ | |- | ||
+ | | A7 || RES 4,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | A8 || RES 5,B | ||
+ | |- | ||
+ | | A9 || RES 5,C | ||
+ | |- | ||
+ | | AA || RES 5,D | ||
+ | |- | ||
+ | | AB || RES 5,E | ||
+ | |- | ||
+ | | AC || RES 5,H | ||
+ | |- | ||
+ | | AD || RES 5,L | ||
+ | |- | ||
+ | | AE || RES 5,(HL) | ||
+ | |- | ||
+ | | AF || RES 5,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | B0 || RES 6,B | ||
+ | |- | ||
+ | | B1 || RES 6,C | ||
+ | |- | ||
+ | | B2 || RES 6,D | ||
+ | |- | ||
+ | | B3 || RES 6,E | ||
+ | |- | ||
+ | | B4 || RES 6,H | ||
+ | |- | ||
+ | | B5 || RES 6,L | ||
+ | |- | ||
+ | | B6 || RES 6,(HL) | ||
+ | |- | ||
+ | | B7 || RES 6,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | B8 || RES 7,B | ||
+ | |- | ||
+ | | B9 || RES 7,C | ||
+ | |- | ||
+ | | BA || RES 7,D | ||
+ | |- | ||
+ | | BB || RES 7,E | ||
+ | |- | ||
+ | | BC || RES 7,H | ||
+ | |- | ||
+ | | BD || RES 7,L | ||
+ | |- | ||
+ | | BE || RES 7,(HL) | ||
+ | |- | ||
+ | | BF || RES 7,A | ||
+ | |} | ||
+ | |- | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | C0 || SET 0,B | ||
+ | |- | ||
+ | | C1 || SET 0,C | ||
+ | |- | ||
+ | | C2 || SET 0,D | ||
+ | |- | ||
+ | | C3 || SET 0,E | ||
+ | |- | ||
+ | | C4 || SET 0,H | ||
+ | |- | ||
+ | | C5 || SET 0,L | ||
+ | |- | ||
+ | | C6 || SET 0,(HL) | ||
+ | |- | ||
+ | | C7 || SET 0,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | C8 || SET 1,B | ||
+ | |- | ||
+ | | C9 || SET 1,C | ||
+ | |- | ||
+ | | CA || SET 1,D | ||
+ | |- | ||
+ | | CB || SET 1,E | ||
+ | |- | ||
+ | | CC || SET 1,H | ||
+ | |- | ||
+ | | CD || SET 1,L | ||
+ | |- | ||
+ | | CE || SET 1,(HL) | ||
+ | |- | ||
+ | | CF || SET 1,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | D0 || SET 2,B | ||
+ | |- | ||
+ | | D1 || SET 2,C | ||
+ | |- | ||
+ | | D2 || SET 2,D | ||
+ | |- | ||
+ | | D3 || SET 2,E | ||
+ | |- | ||
+ | | D4 || SET 2,H | ||
+ | |- | ||
+ | | D5 || SET 2,L | ||
+ | |- | ||
+ | | D6 || SET 2,(HL) | ||
+ | |- | ||
+ | | D7 || SET 2,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | D8 || SET 3,B | ||
+ | |- | ||
+ | | D9 || SET 3,C | ||
+ | |- | ||
+ | | DA || SET 3,D | ||
+ | |- | ||
+ | | DB || SET 3,E | ||
+ | |- | ||
+ | | DC || SET 3,H | ||
+ | |- | ||
+ | | DD || SET 3,L | ||
+ | |- | ||
+ | | DE || SET 3,(HL) | ||
+ | |- | ||
+ | | DF || SET 3,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | E0 || SET 4,B | ||
+ | |- | ||
+ | | E1 || SET 4,C | ||
+ | |- | ||
+ | | E2 || SET 4,D | ||
+ | |- | ||
+ | | E3 || SET 4,E | ||
+ | |- | ||
+ | | E4 || SET 4,H | ||
+ | |- | ||
+ | | E5 || SET 4,L | ||
+ | |- | ||
+ | | E6 || SET 4,(HL) | ||
+ | |- | ||
+ | | E7 || SET 4,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | E8 || SET 5,B | ||
+ | |- | ||
+ | | E9 || SET 5,C | ||
+ | |- | ||
+ | | EA || SET 5,D | ||
+ | |- | ||
+ | | EB || SET 5,E | ||
+ | |- | ||
+ | | EC || SET 5,H | ||
+ | |- | ||
+ | | ED || SET 5,L | ||
+ | |- | ||
+ | | EE || SET 5,(HL) | ||
+ | |- | ||
+ | | EF || SET 5,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | F0 || SET 6,B | ||
+ | |- | ||
+ | | F1 || SET 6,C | ||
+ | |- | ||
+ | | F2 || SET 6,D | ||
+ | |- | ||
+ | | F3 || SET 6,E | ||
+ | |- | ||
+ | | F4 || SET 6,H | ||
+ | |- | ||
+ | | F5 || SET 6,L | ||
+ | |- | ||
+ | | F6 || SET 6,(HL) | ||
+ | |- | ||
+ | | F7 || SET 6,A | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" | ||
+ | ! Opcode !! Mnemonic | ||
+ | |- | ||
+ | | F8 || SET 7,B | ||
+ | |- | ||
+ | | F9 || SET 7,C | ||
+ | |- | ||
+ | | FA || SET 7,D | ||
+ | |- | ||
+ | | FB || SET 7,E | ||
+ | |- | ||
+ | | FC || SET 7,H | ||
+ | |- | ||
+ | | FD || SET 7,L | ||
+ | |- | ||
+ | | FE || SET 7,(HL) | ||
+ | |- | ||
+ | | FF || SET 7,A | ||
+ | |} | ||
+ | |} | ||
[[Category:Non CPC Computers]] | [[Category:Non CPC Computers]] | ||
[[Category:Electronic Component]] | [[Category:Electronic Component]] |
Revision as of 07:39, 23 April 2025
The GBZ80 (Sharp SM83) is the CPU that powers the original Nintendo Gameboy and Gameboy Color handheld consoles. It is kind of an in-between the Intel 8080 and Z80. Awesome Gameboy resources GBDev wiki Emudev (q00.gb)
The GBZ80 lacks the alternate register set, the dedicated I/O bus, the R register, the index registers (thus no DD and FD prefixed opcodes), the ED prefixed opcodes (including block transfer), the sign and parity/overflow flags (and all conditional instructions that used them), the undocumented flags (thus no leaking of WZ and Q internal registers). GBZ80 opcodes
The GBZ80 also lacks the NMI pin (thus no IFF2 and no RETN), the IM instructions and the I register. It has a different interrupt system than the Z80. Source
The Nintendo documentation does not mention M-cycles or T-states at all. They only mention CPU cycles, which are always equal to 4 T-states (like NOPs in the CPC world). Also, the GBZ80 has different timings than the Z80. For example, CALL nn takes 6 cycles on the GBZ80, but only 5 NOPs on the Z80. Gameboy programming manual
Fun fact: Way more GBZ80 cores were produced for Gameboy hardware (118 million Gameboys and 81 million GBA) than all the Z80 chips produced for home computers and game consoles. Learn GBZ80 Assembly Programming with ChibiAkumas
Opcodes
Opcode differences with Z80 are in bold. The unused (—) opcodes will lock up the Game Boy CPU when used.
Standard opcodes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CB-prefixed opcodes
|
|
|
|
|
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|