Z80 Programming
Z80 Programming
A F A’ F’
B C B’ C’
D E D’ E’
H L H’ L’
I R
IX Index register X
IY Index register Y
SP Stack Pointer
PC Program Counter (Instruction Pointer)
Z80 Registers
15 8 7 0
A F
B C
D E
H L
SP Stack Pointer
PC Program Counter (Instruction Pointer)
Z80 Flags
7 6 5 4 3 2 1 0
S Z - H - P/V N C
Carry
Add/Subtract**
Parity/Overflow*
ADD ADC SUB SBC CP RLC RLCA RL RLA RRC RRCA RR RRA
INC DEC AND OR XOR SLA SRA SRL RLD RRD
BIT SET RES CPL NEG CCF SCF DAA NOP HALT DI EI IM
• LD – Load
• PUSH – Load to stack
• POP – Load from stack
• ADD – Addition
• ADC – Addition with Carry flag
• SUB – Subtraction
• SBC – Subtraction with Carry flag
• AND – Logical AND
• OR – Logical OR
• XOR – Logical XOR
• CP – Compare
• INC – Increment by 1
• DEC – Decrement by 1
Jump
• EX – Exchange
• EXX – Exchange extended
CPU Control
• NOP – No Operation
• HALT – Executes NOPs internally until INT, NMI or RESET
• DI – Disable Interrupts
• EI – Enable Interrupts
• IM n – Interrupt Mode 0, 1, or 2
Z80 Assembly Code Example (ASM)
DISPLAY_FIELD:
LD HL,$5821
LD B,$16
LD C,$1E
.FILL_ROW:
LD (HL),%00100000
INC HL
DEC C
JR NZ,.FILL_ROW
INC HL
INC HL
LD C,$1E
DEC B
JR NZ,.FILL_ROW
RET
Z80 Machine Code Example (BIN)
21 21 58 06 16 0E 1E 36
20 23 0D 20 FA 23 23 0E
1E 05 20 F3 C9
Z80 Assembly Code Example
DISPLAY_FIELD:
LD HL,$5821
LD B,$16
LD C,$1E
.FILL_ROW:
LD (HL),%00100000
INC HL
DEC C
JR NZ,.FILL_ROW
INC HL
INC HL
LD C,$1E
DEC B
JR NZ,.FILL_ROW
RET
Z80 Assembly Code to Machine Code
DISPLAY_FIELD:
LD HL,$5821 → 21 21 58
LD B,$16 → 06 16
LD C,$1E → 0E 1E
.FILL_ROW:
LD (HL),%00100000 → 36 20
INC HL → 23
DEC C → 0D
JR NZ,.FILL_ROW → 20 FA
INC HL → 23
INC HL → 23
LD C,$1E → 0E 1E
DEC B → 05
JR NZ,.FILL_ROW → 20 F3
RET → C9
Pseudo Assembly Source to Machine Code
DISPLAY_FIELD:
LDHL $5821 → 21 21 58
LDB $16 → 06 16
LDC $1E → 0E 1E
.FILL_ROW:
LDHLI %00100000 → 36 20
INCHL → 23
DECC → 0D
JRNZ .FILL_ROW → 20 FA
INCHL → 23
INCHL → 23
LDC $1E → 0E 1E
DECB → 05
JRNZ .FILL_ROW → 20 F3
RET → C9
Pseudo Assembly Source to Machine Code
DISPLAY_FIELD:
LDHL $5821 → 21 21 58
LDB $16 → 06 16
LDC $1E → 0E 1E
.FILL_ROW:
LDHLI %00100000 → 36 20
INCHL → 23
DECC → 0D
JRNZ .FILL_ROW → 20 FA
INCHL → 23
INCHL → 23
LDC $1E → 0E 1E
DECB → 05
JRNZ .FILL_ROW → 20 F3
RET → C9
Zilog Z80 CPU
Time to switch to the Z80 User Manual…