/********************************************************************************/
/*                                                                              */
/*    Titre :   Fonctions du clavier					                    			  */
/*                                                                              */
/*    Auteur :  Yvan BOURNE                                                     */
/*                                                                              */
/*    Date :    26/06/1998                                                      */
/*                                                                              */
/********************************************************************************/
/* 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() ;
}
