; 08 — Timer CTC con interrupt (IM2)
; Il timer (0x70 costante, 0x71 vettore/controllo) genera un interrupt
; periodico che scrive un messaggio sull'LCD.
; Il vettore va scritto come byte basso (< 0x80), poi 0x83 abilita run+IRQ.
; I = byte alto della tabella dei vettori.

LCD   = 0xD0
TIM   = 0x70
TIM_C = 0x71

        .seg CODE (abs)
        .org 0x0010
VTab:   .dw servizio          ; tabella dei vettori (indirizzo pari)

        .org 0x0100
inizio:
        ld  sp, 0xFFFF
        ld  a, 0x08
        out (TIM), a          ; costante del timer
        ld  a, VTab
        out (TIM_C), a        ; byte basso del vettore
        ld  a, 0x83
        out (TIM_C), a        ; abilita run + interrupt
        ld  a, 0
        ld  i, a              ; byte alto della tabella (0x0000 + VTab)
        im  2
        ei
ciclo:
        inc a
        out (0x20), a         ; intanto conta sui LED
        jp  ciclo

servizio:
        push af
        ld  hl, msg
        ld  b, finemsg - msg
        ld  c, LCD
        otir
        pop af
        ei
        reti
msg:
        .db 0x0A
        .ascii /Interrupt del timer!/
finemsg:
