; ESERCIZIO 6 — Interrupt del timer
; Il timer (0x70 costante, 0x71 vettore/controllo) deve generare un interrupt
; periodico (IM2) che scrive un messaggio sul LCD, mentre il programma
; principale continua a contare sui LED.
; Verifica: il messaggio compare ripetutamente e il conteggio LED prosegue.
;
; Suggerimento: nel servizio usa OTIR per inviare il messaggio, poi EI e RETI.

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
        im  2
        ei
ciclo:
        inc a
        out (0x20), a         ; conta sui LED
        jp  ciclo

; TODO: scrivi qui la subroutine "servizio":
;       - salva i registri usati
;       - manda un messaggio al LCD (OTIR)
;       - riabilita gli interrupt (EI) e ritorna (RETI)
;       (definisci anche i dati del messaggio, es. .db 0x0A e .ascii /.../)

servizio:
        ; TODO: implementa il servizio (per ora non fa nulla)
        reti
