Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;Simple 1 second timer for my Z80 SBC using the Z80 CTC
- ;Written using ASM80.com
- ;Code copyright Jacob Hahn, 2019
- RAMCELL EQU 8000h
- INTTBL EQU 1
- .ORG $0000
- JP START
- .ORG $101
- DW TMRDONE
- .ORG $1000
- TMRDONE: PUSH AF
- LD A,(RAMCELL)
- CP $06
- JR Z,END
- INC A
- LD (RAMCELL),A
- EI
- POP AF
- RETI
- END: CALL GETCHAR1
- DI
- HALT
- START:
- LD SP,0xffff ;set the stack pointer to top of RAM
- ;.INCLUDE initdart.z80 ;initialize DART
- LD A,00H ; initialize DART
- OUT ($09),A ; request reg. 0
- LD A,18H ; Channel reset
- OUT ($09),A
- NOP
- LD A,04H ; request reg. 4
- OUT ($09),A
- LD A,084H ; x32 clock, 1 stop bit, no parity
- OUT ($09),A
- LD A,03H ; request reg. 3
- OUT ($09),A
- LD A,0C1H ; 8 bit receiver, RX enable
- OUT ($09),A
- LD A,01H
- OUT ($09),A
- LD A,08H
- OUT ($09),A
- LD A,05H ; request reg. 5
- OUT ($09),A
- LD A,068H ; Transmit 8 bits, TX enable
- OUT ($09),A ; end of DART init
- LD a,00000011b
- OUT $13,A ;CH2 doesn't run
- OUT $1B,A ;CH3 doesn't run
- LD A,7H ;init CTC ch. 0
- OUT $03,A
- LD A,0FAH ;start timer with time constant 0FAH
- OUT $03,A
- LD A,0C7H ;init CTC ch. 1
- OUT $0B,A
- LD A,0FAH ;load counter with time const. 0FAH
- OUT $0B,A
- LD A,00000000b ;int. vector
- OUT $0B,A
- CALL GETCHAR
- XOR A ;0 to A
- LD (RAMCELL),A
- LD A,INTTBL
- LD I,A
- IM 2 ;init interrupts
- EI ;enable them
- WAIT: LD A,A
- JR WAIT
- CHKOUT: PUSH AF
- TXA: LD A,$00
- OUT ($09),A
- IN A,($09)
- AND $04
- JR Z,TXA
- POP AF
- RET
- GETCHAR1: LD HL,MSG2
- JP WR
- GETCHAR: LD HL,MSG1
- WR: LD A,(HL)
- OR A
- JR Z,DONE
- CALL CHKOUT
- OUT ($01),A
- INC HL
- JR WR
- DONE: RET
- MSG1: DB "Timer start",$0D,$00
- MSG2: DB "Timer done",$0D,$00
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement