;
;       RUBI_DOUILLE (c) 1990
;
        ORG &9000
;        ENT $
EXEM1
;-----------------------------
; - Programmation de 5 touches
;-----------------------------

        LD IX ,TOUCHE
        LD B,5
EXEM1_A CALL SCAN
        DJNZ EXEM1_A
        RET
EXEM2:
;---------------------------
;-  testons la trappe de   -
;-      la touche 0        -
;---------------------------
EXEM2_A: LD A,0 ; ACCA = touche
         CALL KEY
         JR NZ,EXEM2_A  ; Si pas appuyee alora EXEN2_A
; si flag Zero=1 alors touche enfoncee
         RET


EXEM3:
;------------------------------
;- attendons la frappe d' une -
;-           touche           -
;------------------------------
        CALL KEY
        RET

;
;-      ROUTINES
;

SCAN:
;----------------------------------
;- Attendre la frappe d'une touche
;- puis sauvegarde ligne colonne
;- dans (IX+8) et (IX+l)
;-      puis    IX=IX+2
;-      BC Sauvegarde
;----------------------------------
        PUSH BC
        CALL KEYA
        CALL KEYD
        LD (IX+0) ,B
        LD (IX+1) ,C
SCAN_1: CALL KEYC       ; Relache la touche
        JR Z, SCAN_1
        INC IX
        INC IX
        LD BC,0000      ; Anti rebond
SCAN_2: DEC BC
        LD A,B
        OR C
        JR NZ,SCAN_2
        POP BC
        RET
KEYA:                   ;Attente d'une touche
        CALL MAPKEY
        LD A,&FF
        LD B,10
        LD HL,TKEY
KEYA_1: AND (HL)
        INC HL
        DJNZ KEYA_1
        CP &FF
        JR Z,KEYA
        RET

;
KEY
;----------------------
; - Test d'une touche -
;-   HL Sauvegarde    -
;----------------------

KEYB:
        PUSH HL
        ADD A,A
        LD B,A
        LD D,0
        LD HL,TOUCHE
        ADD HL,DE
        LD B,(HL)
        INC HL
        LD C,(HL)
        POP HL
KEYC                    ;TEST LIGNE COLONNE
        PUSH HL
        PUSH BC
        CALL MAPKEY
        POP BC
        LD E,B
        LD D,0
        LD HL,TKEY
        ADD HL,DE
        LD A,(HL)
        CPL
        OR C
        CP &FF
        POP HL
        RET
KEYD:                   ; PRENDRE LIGNE COLONNE
        LD HL, TKEY
        LD A,&FF
        LD B,A
KEYD_1: INC B
        CP (HL)
        LD C,(HL)
        INC HL
        JR Z,KEYD_1
        RET
;
MAPKEY:                 ; MAPPING CLAVIBR
         LD HL,TKEY     ; HL Pointe tampon key  (10 OCTETS)
         LD BC,&F40E
         OUT (C),C
         LD BC, &F6C0
         OUT (C),C
         LD BC,&F792
         OUT (C),C
         LD A,&40
         LD C,&4A
         LD DE,&F6F4
MAPKEY1: LD B,D
         OUT (C) ,A
         LD B,E
         INI
         INC A
         CP C
         JR NZ,MAPKEY1
         LD BC, &F782
         OUT (C) ,C
         LD BC,&F6E9
         OUT (C) ,C
         RET

TKEY:    DEFS 10,0
;
TOUCHE:

         DEFB &8, &EF   ;        touche 0 (ex: TAB)

         DEFB &8, &FB   ;       touche 1 (ex: ESPACE)

         DEFB &2, &FB   ;       touche 2 (ex: ENTBR)
         DEFS 128,0