 sttl 6840 Interval Timer Handler
 pag

*
* Clock structure
*-- Use timer #1
*
CLKSEL equ CLOCK+1 clock select and status register
CLKLAT equ CLOCK+2 clock timer latch
CLKCON equ %01000000 clock control
CLKMSK equ %10000000 clock interrupt mask
HZTIM_60 equ 120/10-1 interrupt rate (60hz)
HZTIM_50 equ 100/10-1 interrupt rate (50hz)
*
sphz fcb 0 --- TEMP ---

clock_on
 sei mask interrupts during set up
 ldx utask disassociate from any terminal
 lda #$FF
 sta tsdev,x
*-- Determine clock rate (50/60 Hz)
 lda #1
 sta CLKSEL
 clr CLOCK
 nop
 ldd CLKLAT
 ldd CLKLAT
 ldx #24988
10 leax -1,x
 bne 10b
 subd CLKLAT
 cmpb #11
 bhs 15f
 ldb #1 must be 50 Hz
 bra 20f
15 clrb
20 lda #1 reset the clock
 sta CLKSEL
 lda #%10000000 set reset bit
 sta CLOCK save in control
 clr CLKSEL reset control
 tstb 60 Hz or 50 Hz?
 bne 0f
 ldd #HZTIM_60 set clock rate = 60 Hz
 bra 1f
0 ldd #HZTIM_50 set clock rate = 50 Hz
1 std CLKLAT set latch count
 lda #1 select control register 1
 sta CLKSEL
 lda #CLKCON turn on timer 1
 sta CLOCK
* -- Wait for clock interrupt
10 ldy #clock_tick
 ldb #CLOCKPR
 jsr sleep
20 ldb #R_CLOCK interrupt the CPU
 jsr fio_response
 dec clock_tick all ticks out?
 bne 20b
 bra 10b

*
* Process clock interrupt
*
clkint ldy #clock_tick wake up clock process
 inc 0,y
 jmp wakeup
