|  | #pragma once | 
|  |  | 
|  | // Special keycodes | 
|  | #define KEY_HOME	0xE0 | 
|  | #define KEY_END		0xE1 | 
|  | #define KEY_UP		0xE2 | 
|  | #define KEY_DN		0xE3 | 
|  | #define KEY_LF		0xE4 | 
|  | #define KEY_RT		0xE5 | 
|  | #define KEY_PGUP	0xE6 | 
|  | #define KEY_PGDN	0xE7 | 
|  | #define KEY_INS		0xE8 | 
|  | #define KEY_DEL		0xE9 | 
|  |  | 
|  |  | 
|  | /* This is i8042reg.h + kbdreg.h from NetBSD. */ | 
|  |  | 
|  | #define	KBSTATP		0x64	/* kbd controller status port(I) */ | 
|  | #define	 KBS_DIB	0x01	/* kbd data in buffer */ | 
|  | #define	 KBS_IBF	0x02	/* kbd input buffer low */ | 
|  | #define	 KBS_WARM	0x04	/* kbd input buffer low */ | 
|  | #define	 KBS_OCMD	0x08	/* kbd output buffer has command */ | 
|  | #define	 KBS_NOSEC	0x10	/* kbd security lock not engaged */ | 
|  | #define	 KBS_TERR	0x20	/* kbd transmission error */ | 
|  | #define	 KBS_RERR	0x40	/* kbd receive error */ | 
|  | #define	 KBS_PERR	0x80	/* kbd parity error */ | 
|  |  | 
|  | #define	KBCMDP		0x64	/* kbd controller port(O) */ | 
|  | #define	 KBC_RAMREAD	0x20	/* read from RAM */ | 
|  | #define	 KBC_RAMWRITE	0x60	/* write to RAM */ | 
|  | #define	 KBC_AUXDISABLE	0xa7	/* disable auxiliary port */ | 
|  | #define	 KBC_AUXENABLE	0xa8	/* enable auxiliary port */ | 
|  | #define	 KBC_AUXTEST	0xa9	/* test auxiliary port */ | 
|  | #define	 KBC_KBDECHO	0xd2	/* echo to keyboard port */ | 
|  | #define	 KBC_AUXECHO	0xd3	/* echo to auxiliary port */ | 
|  | #define	 KBC_AUXWRITE	0xd4	/* write to auxiliary port */ | 
|  | #define	 KBC_SELFTEST	0xaa	/* start self-test */ | 
|  | #define	 KBC_KBDTEST	0xab	/* test keyboard port */ | 
|  | #define	 KBC_KBDDISABLE	0xad	/* disable keyboard port */ | 
|  | #define	 KBC_KBDENABLE	0xae	/* enable keyboard port */ | 
|  | #define	 KBC_PULSE0	0xfe	/* pulse output bit 0 */ | 
|  | #define	 KBC_PULSE1	0xfd	/* pulse output bit 1 */ | 
|  | #define	 KBC_PULSE2	0xfb	/* pulse output bit 2 */ | 
|  | #define	 KBC_PULSE3	0xf7	/* pulse output bit 3 */ | 
|  |  | 
|  | #define	KBDATAP		0x60	/* kbd data port(I) */ | 
|  | #define	KBOUTP		0x60	/* kbd data port(O) */ | 
|  |  | 
|  | #define	K_RDCMDBYTE	0x20 | 
|  | #define	K_LDCMDBYTE	0x60 | 
|  |  | 
|  | #define	KC8_TRANS	0x40	/* convert to old scan codes */ | 
|  | #define	KC8_MDISABLE	0x20	/* disable mouse */ | 
|  | #define	KC8_KDISABLE	0x10	/* disable keyboard */ | 
|  | #define	KC8_IGNSEC	0x08	/* ignore security lock */ | 
|  | #define	KC8_CPU		0x04	/* exit from protected mode reset */ | 
|  | #define	KC8_MENABLE	0x02	/* enable mouse interrupt */ | 
|  | #define	KC8_KENABLE	0x01	/* enable keyboard interrupt */ | 
|  | #define	CMDBYTE		(KC8_TRANS|KC8_CPU|KC8_MENABLE|KC8_KENABLE) | 
|  |  | 
|  | /* keyboard commands */ | 
|  | #define	KBC_RESET	0xFF	/* reset the keyboard */ | 
|  | #define	KBC_RESEND	0xFE	/* request the keyboard resend the last byte */ | 
|  | #define	KBC_SETDEFAULT	0xF6	/* resets keyboard to its power-on defaults */ | 
|  | #define	KBC_DISABLE	0xF5	/* as per KBC_SETDEFAULT, but also disable key scanning */ | 
|  | #define	KBC_ENABLE	0xF4	/* enable key scanning */ | 
|  | #define	KBC_TYPEMATIC	0xF3	/* set typematic rate and delay */ | 
|  | #define	KBC_SETTABLE	0xF0	/* set scancode translation table */ | 
|  | #define	KBC_MODEIND	0xED	/* set mode indicators(i.e. LEDs) */ | 
|  | #define	KBC_ECHO	0xEE	/* request an echo from the keyboard */ | 
|  |  | 
|  | /* keyboard responses */ | 
|  | #define	KBR_EXTENDED	0xE0	/* extended key sequence */ | 
|  | #define	KBR_RESEND	0xFE	/* needs resend of command */ | 
|  | #define	KBR_ACK		0xFA	/* received a valid command */ | 
|  | #define	KBR_OVERRUN	0x00	/* flooded */ | 
|  | #define	KBR_FAILURE	0xFD	/* diagnosic failure */ | 
|  | #define	KBR_BREAK	0xF0	/* break code prefix - sent on key release */ | 
|  | #define	KBR_RSTDONE	0xAA	/* reset complete */ | 
|  | #define	KBR_ECHO	0xEE	/* echo response */ |