; KEYBUF.ASM
; Zet een string in de toetsenbordbuffer; het maakt niet uit hoe lang die is.
; (Als de string te lang is zet de routine zichzelf onder interrupt.)
;
; Made 7-1992 by Roderik Muit / FCS


PUTPNT: EQU   0F3F8H
GETPNT: EQU   0F3FAH

        ORG   0D000H

KEYINI: LD    HL,(PUTPNT)     ; 1e vrije plaats: moet worden opgehoogd
        LD    A,(GETPNT)      ; plaats van 1e teken: PUTPNT moet lager blijven
        DEC   A
        CP    0EFH
        JR    NZ,KEY3
        LD    A,17H
KEY3:   LD    C,A             ; laatste vrije plaats in buffer
        LD    DE,(STR_P)
        LD    A,L

KEY0:   CP    C               ; Nog plaats in buffer?
        JR    Z,KEY1          ; Nee; weg
        LD    A,(DE)          ; Ja; zet volgende teken erin
        INC   DE
        OR    A
        JR    Z,KEY2          ;einde string
        LD    (HL),A
        INC   HL
        LD    A,L
        CP    18H
        JR    NZ,KEY0
        LD    HL,0FBF0H
        LD    A,L
        JR    KEY0

;Zet deze routine onder interrupt (voor de rest van de string)
KEY1:   LD    (PUTPNT),HL
        LD    (STR_P),DE
        LD    HL,KEYIN?
        LD    A,(HL)
        OR    A
        JR    NZ,KEYINT       ; Staat al onder int.
        CPL
        LD    (HL),A
        LD    DE,KEYINT
        LD    HL,0FD9FH
        LD    BC,5
        DI
        PUSH  HL
        LDIR                  ; Oude int.
        EX    DE,HL
        POP   DE
        LD    C,3
        LDIR                  ; Nieuwe int.
        EI
        RET

KEYIN?: DEFB  0

;Einde string: zet evt. interrupt weer terug
KEY2:   LD    (PUTPNT),HL
        LD    (STR_P),DE
        LD    A,(KEYIN?)
        OR    A
        RET   Z
        XOR   A
        LD    (KEYIN?),A
        LD    HL,KEYINT
        LD    DE,0FD9FH
        LD    BC,3
        DI
        LDIR
        EI
KEYINT: DS    5
        JP    KEYINI

STR_P:  DEFW  STRING
STRING: DEFB  "Dit is een onzinnige tekst DIT IS OOK EEN ONZINNIGE TEKST"
        DEFB  " Voorbeeld voorbeeld",0

  STRING
STRING: DEFB  "Dit is een onzinnige tekst DIT IS OOK EEN ONZINNIGE TEKST"
        DEFB