Z80 5seconds Timer for 10 MHz
Point: Use 3 Loopsnote: If your system has CTC, it's better to use CTC timer interrupt. Z80 Mode 2 interrupt reduces CPU's load.ORG 0000H
LD SP,0FFFFH
MAIN: CALL TIMER5
TIMER5:LD E,35H
J60: LD B,0FFH
J61: LD D,0FFH
J62: DEC D
JP NZ,J62
DEC B
JP NZ,J61
DEC E
JP NZ,J60
RET
END
Point: Use Loop "output 00H and FFH at 1 second interval".ORG 0000H
LD SP,0FFFFH
PPI1 EQU 37H
PORTB1 EQU 35H
LD A,90H
OUT (PPI1),A
LOOP: LD A,0
OUT (PORTB1),A
CALL TIMER1
LD A,0FFH
OUT (PORTB1),A
CALL TIMER1
JP LOOP
TIMER1:LD E,0AH
J50: LD B,0FFH
J51: LD D,0FFH
J52: DEC D
JP NZ,J52
DEC B
JP NZ,J51
DEC E
JP NZ,J50
RET
END
Z-80's ADD
When you write Z80 source code, remember...
You can't write this.
Example code
.............................
note:BC, DE and HL are 16bits pair registers.
This example is very short program...
ORG 0000H
LD SP,0FFFFH
LD BC,0FFFFH
LOOP: PUSH BC
JP LOOP
END
STARTING MEMORY STATUS
0000 31 50 00 LD
SP,FFFF
0003 01 FF FF LD
BC,FFFF
0006 C5
PUSH BC
0007 C3 06 00 JP LOOP
000A 00
NOP
000B 00
NOP
-------------------
-------------------
-------------------
FFFF 00
NOP
MEMORY STATUS AFTER EXECUTION
0000 31 50 00 LD
SP,FFFF
0003 01 FF FF LD
BC,FFFF
0006 C5
PUSH BC
0007 C3 FF FF JP
FFFF ; Changed!
000A FF
RST 38
000B FF
RST 38
------------------------
------------------------
------------------------
FFFF FF
RST 38
note:
"LD BC,FFFF";Register BC is set FFFF.
By "PUSH BC"top stack becomes FFFF.
Stack area moves to smaller memory address.
After all, the endless PUSH destroyed even program area.
This program is meaningless.
But you will learn how to work "PUSH" of Z-80's CPU.
(Sat,3/7/1998)
Section A ( 40 marks)
Answer all questions.
1. Comment on the Z80 instruction LD HL, SP. [1]
2. What is the effect of LD HL, 0 followed immediately by ADD HL, SP? [2]
3. What does the instruction EX DE, HL do? [1]
4. What arithmetic gtrickh is associated with the instruction ADD A, A? [2]
5. Is LD BC, HL a valid Z80 instruction? [1]
6. What instruction(s) would be needed to copy HL into BC? [2]
7. Comment on the instruction LD A, (DE) and LD B, (DE)? [2]
8. What happens when JP (HL) is executed? [3]
9. Briefly explain the actions taken by the Z80 on executing a CALL instruction. [4]
10. What does RET instruction do?
11. How will the instruction OR L affect the Z80 flags? [3]
12. With the aid of a diagram, show how RCLA works. [2] *
13. What condition is required for XOR B to make the sign flag 1 after it is ran? [2]
14. If IX = 2000h what does the instruction LD (IX ? 7), A do? [3]
15. Briefly explain the operation of LDDR. [3]
16. Explain the effects of the NOP instruction. [1]
17. Comment on the instruction CPL A. [2]
18. Is SUB A, B a valid Z80 instruction? [1]
19. Explain the operation of LD A, (HL). [2]
20. What does LD IX, IY do? [1]
* RCLA is RLCA?
Z-80's Registers
Z-80 Primary registers
A(8bits);
Accumulator |
PSW(8bits);
Flag register |
B(8bits) | C(8bits) |
D(8bits) | E(8bits) |
H(8bits) | L(8bits) |
A'(8bits) | PSW'(8bits) |
B'(8bits) | C'(8bits) |
D'(8bits) | E'(8bits) |
H'(8bits) | L'(8bits) |
|
|
I(8bits);Interrupt register | R(8bits);Refresh register |
S(1bit) "sign flag" ;+ - of data with sign
Z(1bit) "zero flag"
H(1bit) "half carry";used at BCD calculation
P(1bit) "parity flag" ;even or odd
V (1bit)"overflow flag"
N(1bit) "negative flag" add or dec
C(1bit) "carry flag"
Pseudo instructions
ORG "origin"
DEFB or DB "define byte"
DW "define word"
EQU "equal to"
END "end of program"
IBM-PC Parallel Port Assignment
|
|
|
Strobe (Data Set Signal from PC) |
|
Data bit 0 |
|
Data bit 1 |
|
Data bit 2 |
|
Data bit 3 |
|
Data bit 4 |
|
Data bit 5 |
|
Data bit 6 |
|
Data bit 7 |
|
Acknowledge(Printer to PC) |
|
Busy |
|
Paper end |
|
Select |
|
Auto feed |
|
Error |
|
Initialize-Input |
|
Select-Input |
|
Ground |