; Klein voorbeeldje van de basis van een line-interrupt-routine
; Wisselt pages op screen 5

        LD    A,5
        CALL  5FH
        CALL  INIINT
        CALL  9FH
        JP    RESINT

;======================================
; Initialiseer line-interrupt
INIINT: DI
        LD    HL,0F3DFH       ;Line-interrupt enable
        LD    A,(HL)
        OR    16
        LD    (HL),A
        OUT   (99H),A
        LD    A,128
        OUT   (99H),A
        LD    A,193           ;Y-coord. line-interrupt
        OUT   (99H),A
        LD    A,19+128
        OUT   (99H),A
        LD    HL,0FD9AH       ;Buig hooks om
        LD    DE,OLDLIN
        CALL  ZETINT
        EX    DE,HL           ;hl = &Hfd9f
        LD    DE,OLDINT
        CALL  ZETINT
        EI
        RET

ZETINT: PUSH  HL
        LD    BC,5
        LDIR
        EX    DE,HL
        POP   DE
        LD    C,5
        LDIR
        RET

;======================================================
; Naderhand: disable line-interrupt en zet hooks terug
RESINT: DI
        LD    HL,0F3DFH       ;VDP-reg 0
        LD    A,(HL)
        AND   239
        LD    (HL),A
        OUT   (99H),A
        LD    A,128
        OUT   (99H),A
        LD    HL,OLDLIN
        LD    DE,0FD9AH
        LD    BC,5
        LDIR
        LD    HL,OLDINT
        LD    C,5
        LDIR
        EI
        RET

;=================================================
;Line-interruptroutine
LINE_I:
        LD    D,1             ;lees statusregister 1, bit 0
        LD    BC,8F99H
        OUT   (C),D
        OUT   (C),B
        IN    A,(C)
        DEC   D
        OUT   (C),D           ;Altijd statusregister weer op 0 zetten!
        OUT   (C),B           ; (Hoewel het niet meteen hoeft..)
        RRA
        JR    NC,OLDLIN       ;geen line-interrupt

        LD    A,63            ;zet page 1 (scherm 5)
        OUT   (99H),A
        LD    A,130
        OUT   (99H),A

OLDLIN: DS    5               ;oude interrupt hierheen gekopieerd
        JP    LINE_I          ;nieuwe interrupt

;===========================================
NORM_I:
        LD    A,31            ;zet page 0
        OUT   (99H),A
        LD    A,130
        OUT   (99H),A
OLDINT: DS    5
        JP    NORM_I
        ;zet page 0
        OUT   (99H),A
        LD    A,130
        OUT   (99H),A
OLDINT: DS    5
        JP    NORM
