/* driver pour LCD OKI 6202 */
/* millenium gérald.festou@worldonline.fr */

/* prévoir la validation de CSIO1 dand crt11.s */

#define IRWRIN *(unsigned char volatile*)(_IO_BASE+0x60)
#define DR_WRITIN *(unsigned char volatile*)(_IO_BASE+0x61)
#define right 1
#define left 0

//#include <stdio.h>
//#include <hc11.h>


void lcdinit(void);
void rtn_home(void);
void lcd_on(void);
void lcd_off(void);
void lcd_shift(char nb_sh);
void lcdwait(int cnt);
void status(void);
void lcd_cls(void);
void curs_on(void);
void curs_off(void);
char getkey(void);
int cnt;

void
lcdinit(void)
	{
	IRWRIN=0x38; /* mode 8 bits */
	lcdwait(3);
	IRWRIN=0x06; /* mode */
	lcd_cls();	/* clear display */
	rtn_home();
	}


void
rtn_home(void)
	{
	status();
	IRWRIN=0x02; /* return home */
	}

void
lcd_on(void)
	{
	status();
	IRWRIN=0x0C; /* disp on */
	}

void
lcd_off(void)
	{
	status();
	IRWRIN=0xB; /* disp off */
	}

void
curs_on(void)
	{
	status();
	IRWRIN=0x0F; /* curseur on */
	}
void
curs_off(void)
	{
	status();
	IRWRIN=0x0C;
	}

void
lcd_shift(char nb_sh)
	{
	lcdwait(10);
	if (nb_sh)
	{
	status();
	IRWRIN=0x18;	/* shift à gauche */
	}
	else
	{
	status();
	IRWRIN=0x1F; 	/* shift à droite */
	}
	}
void
status(void)		/* attend que l'afficheur soit pret à recevoir une commande */
	{
	while ((IRWRIN & 0x80)==0x80); /* attente busy */
	return;
	}

void
lcd_cls(void)		/* effacement de l'afficheur */
	{
	status();
	IRWRIN=1;	/* c'est le code d'éffacement */
	}



void lcdwait(int cnt)
{
	int i;
	for(;cnt;cnt--)
	for(i=0;i<1000;i++);
}