/* A modifier selon la disposition des touches du clavier */ #define ZERO 0x07 #define UN 0x00 #define DEUX 0x04 #define TROIS 0x08 #define QUATRE 0x01 #define CINQ 0x05 #define SIX 0x09 #define SEPT 0x02 #define HUIT 0x06 #define NEUF 0x0a #define A 0x03 #define B 0x0b #define C 0x0e #define D 0x0d #define E 0x0c #define F 0x0f #define CLAVIER *(unsigned char *)0x1600 unsigned char FlagIT ; /********************************************************************************/ /* getch() */ /********************************************************************************/ unsigned char getch(void) { FlagIT = 0 ; while (FlagIT != 1) ; /* Clavier est "l'adresse" du CS CLAVIER */ switch(CLAVIER & 0x0f) { case ZERO : { return 0 ; } case UN : { return 1 ; } case DEUX : { return 2 ; } case TROIS : { return 3 ; } case QUATRE : { return 4 ; } case CINQ : { return 5 ; } case SIX : { return 6 ; } case SEPT : { return 7 ; } case HUIT : { return 8 ; } case NEUF : { return 9 ; } case A : { return 0x0a ; } case B : { return 0x0b ; } case C : { return 0x0c ; } case D : { return 0x0d ; } case E : { return 0x0e ; } case F : { return 0x0f ; } } } /********************************************************************************/ /* getche() */ /********************************************************************************/ unsigned char getche(void) { FlagIT = 0 ; while (FlagIT != 1) ; switch(CLAVIER & 0x0f) { case ZERO : { AFFICHED('0') ; return 0 ; } case UN : { AFFICHED('1') ; return 1 ; } case DEUX : { AFFICHED('2') ; return 2 ; } case TROIS : { AFFICHED('3') ; return 3 ; } case QUATRE : { AFFICHED('4') ; return 4 ; } case CINQ : { AFFICHED('5') ; return 5 ; } case SIX : { AFFICHED('6') ; return 6 ; } case SEPT : { AFFICHED('7') ; return 7 ; } case HUIT : { AFFICHED('8') ; return 8 ; } case NEUF : { AFFICHED('9') ; return 9 ; } case A : { AFFICHED('A') ; return 0x0a ; } case B : { AFFICHED('B') ; return 0x0b ; } case C : { AFFICHED('C') ; return 0x0c ; } case D : { AFFICHED('D') ; return 0x0d ; } case E : { AFFICHED('E') ; return 0x0e ; } case F : { AFFICHED('F') ; return 0x0f ; } } } /********************************************************************************/ /* IRQ clavier */ /********************************************************************************/ interrupt [INTVEC_START + 28] void IRQ_interrupt(void) { disable_interrupt() ; FlagIT = 1 ; enable_interrupt() ; }