GameBoy Opcode Summary

The GameBoy has instructions & registers similiar to the 8080, 8085, & Z80 microprocessors. The internal 8-bit registers are A, B, C, D, E, F, H, & L. Theses registers may be used in pairs for 16-bit operations as AF, BC, DE, & HL. The two remaining 16-bit registers are the program counter (PC) and the stack pointer (SP).

The F register holds the cpu flags. The operation of these flags is identical to their Z80 relative. The lower four bits of this register always read zero even if written with a one.

Flag Register
7 6 5 4 3 2 1 0
Z N H C 0 0 0 0

The GameBoy CPU is based on a subset of the Z80 microprocessor. A summary of these commands is given below.

Mnemonic Symbolic Operation Comments CPU Clocks Flags - Z,N,H,C

8-Bit Loads

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-Bit Loads

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-Bit ALU

ADD A,s A A + s CY is the carry flag. 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-Bit Arithmetic

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

Miscellaneous

SWAP s Swap nibbles. 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 CY is the carry flag. 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

Rotates & Shifts

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 Opcodes

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

Jumps

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.

Calls

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.

Restarts

RST f (SP-1) PCh, (SP-2) PCl, PCh 0, PCl f, SPSP-2 - 16

Returns

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

Terminology

- Flag is not affected by this operation.
* Flag is affected according to result of operation.
b A bit number in any 8-bit register or memory location.
C Carry flag.
cc Flag condition code: C,NC,NZ,Z
d Any 8-bit destination register or memory location.
dd Any 16-bit destination register or memory location.
e 8-bit signed 2's complement displacement.
f 8 special call locations in page zero.
H Half-carry flag.
N Subtraction flag.
NC Not carry flag
NZ Not zero flag.
n Any 8-bit binary number.
nn Any 16-bit binary number.
r Any 8-bit register. (A,B,C,D,E,H, or L)
s Any 8-bit source register or memory location.
sb A bit in a specific 8-bit register or memory location.
ss Any 16-bit source register or memory location.
Z Zero Flag.