;
; 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 |