plan 9 kernel history: overview | file list | diff list

1993/1003/carrera/kbd.c (diff list | history)

1993/1001/sys/src/9/carrera/kbd.c:19,241993/1003/sys/src/9/carrera/kbd.c:19,25 (short | long | prev | next)
1993/0907    
	Ktest=		0xAB,	/* keyboard test */ 
	Kdisable=	0xAD,	/* disable keyboard */ 
	Kenable=	0xAE,	/* enable keyboard */ 
1993/1003    
	Kmseena=	0xA8,	/* enable mouse */ 
1993/0907    
	Krdin=		0xC0,	/* read input port */ 
	Krdout=		0xD0,	/* read output port */ 
	Kwrout=		0xD1,	/* write output port */ 
1993/1001/sys/src/9/carrera/kbd.c:46,511993/1003/sys/src/9/carrera/kbd.c:47,53
1993/0907    
	 *  command register bits 
	 */ 
	Cintena=	1<<0,	/* enable output interrupt */ 
1993/1003    
	Cmseint=	1<<1,	/* enable mouse interrupt */ 
1993/0907    
	Csystem=	1<<2,	/* set system */ 
	Cinhibit=	1<<3,	/* inhibit override */ 
	Cdisable=	1<<4,	/* disable keyboard */ 
1993/1001/sys/src/9/carrera/kbd.c:187,1971993/1003/sys/src/9/carrera/kbd.c:189,222
1993/1001    
void 
mouseintr(void) 
{ 
	uchar code; 
1993/1003    
	uchar c; 
	static int nb; 
	int buttons, dx, dy; 
	static short msg[3]; 
	static uchar b[] = {0, 1, 4, 5, 2, 3, 6, 7, 0, 1, 2, 5, 2, 3, 6, 7 }; 
1993/1001    
 
	kbdwait(); 
	code = KBDDAT; 
	print("mouse intr %d\n", code); 
1993/1003    
	c = KBDDAT; 
 
	/*  
	 *  check byte 0 for consistency 
	 */ 
	if(nb==0 && (c&0xc8)!=0x08) 
		return; 
 
	msg[nb] = c; 
	if(++nb == 3){ 
		nb = 0; 
		if(msg[0] & 0x10) 
			msg[1] |= 0xFF00; 
		if(msg[0] & 0x20) 
			msg[2] |= 0xFF00; 
 
		buttons = b[msg[0]&7]; 
		dx = msg[1]; 
		dy = -msg[2]; 
		mousetrack(buttons, dx, dy); 
	} 
1993/0907    
} 
 
int 
1993/1001/sys/src/9/carrera/kbd.c:342,3471993/1003/sys/src/9/carrera/kbd.c:367,401
1993/0907    
	} 
} 
 
1993/1003    
/* 
 *  send a command to the mouse 
 */ 
static int 
mousecmd(int cmd) 
{ 
	int tries; 
	unsigned int c; 
 
	c = 0; 
	tries = 0; 
	do{ 
		if(tries++ > 2) 
			break; 
		OUTWAIT; 
		KBDCTL = 0xD4; 
		OUTWAIT; 
		KBDDAT = cmd; 
		OUTWAIT; 
		kbdwait(); 
		c = KBDDAT; 
	} while(c == 0xFE || c == 0); 
	if(c != 0xFA){ 
		print("mouse returns %2.2ux to the %2.2ux command\n", c, cmd); 
		return -1; 
	} 
	return 0; 
} 
 
1993/0907    
int 
kbdinit(void) 
{ 
1993/1001/sys/src/9/carrera/kbd.c:387,3961993/1003/sys/src/9/carrera/kbd.c:441,455
1993/0907    
	OUTWAIT; 
	KBDCTL = Kwrcmd; 
	OUTWAIT; 
	KBDDAT = Csystem | Cinhibit | Cintena; 
1993/1003    
	KBDDAT = Csystem | Cinhibit | Cintena | Cmseint; 
1993/0907    
	OUTWAIT; 
	KBDCTL = Kenable; 
1993/1003    
	OUTWAIT; 
	KBDCTL = Kmseena; 
1993/0907    
	empty(); 
1993/1003    
 
	mousecmd(0xEA); 
	mousecmd(0xF4); 
1993/0907    
 
	return 1; 
} 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)