Subject: Re: wscons mappings
To: None <tech-kern@netbsd.org>
From: David Laight <david@l8s.co.uk>
List: tech-kern
Date: 03/20/2002 16:16:09
On Wed, Mar 20, 2002 at 07:35:25AM -0800, Bill Studenmund wrote:
> On Thu, 21 Mar 2002, Bang Jun-Young wrote:
> 
> > On Sun, Mar 17, 2002 at 07:54:16PM +0100, Reinoud Zandijk wrote:
> > > Dear all,
> > >
> > > in my process of writing the Acorn32 keyboard mappings i was unpleasantly
> > > reminded that all the current wscons mappings are based on XT keycodes and
> > > not AT codes for the wscons code just assumes everyone has the AT->XT
> > > scancode converter chip as found in i386 PC's.
> 
> I'm not familiar with this chip. I assume it can it be turned off?

Yes - but the convertion isn't hard (since the chipset can do it).
Using the AT scancodes on the ps2 link has some advantages over
the XT ones.

(I hope I've got the the right way around...)

The main difference between the protocols is that the XT scancodes set the
top bit of a scancode to indicate 'key up', whereas the AT scancode shows
'key up' by preceding the scancode with a '0xf0' byte.

A keyboard can (usually) be set to return AT (set 2) or XT (set 1)
during its initialisation.  The default for modern keyboards is set 2,
some old keyboards had a switch...

(Japanese keyboards have other modes)

The big advantage of the AT codes is that there is no longer a collision
on code 0xaa - it can be either 'reset complete' or 'left shift released'
in the XT set.

IIRC the X code wants raw XT keycodes, changing that is probably hard!

FWIW to change AT to XT all you need to do is:
1) remove 0xf0 bytes from the datastream, and or 0x80 onto the following
   byte.
2) translate everything through a table, this one is about right:-)

/* map to convert set2 (AT) keycodes to set1 (XT) */
static uint8 keycode_map[256] = {
0xff,0x43,0x41,0x3f,0x3d,0x3b,0x3c,0x58,0x64,0x44,0x42,0x40,0x3e,0x0f,0x29,0x59,
0x65,0x38,0x2a,0x70,0x1d,0x10,0x02,0x5a,0x66,0x71,0x2c,0x1f,0x1e,0x11,0x03,0x5b,
0x67,0x2e,0x2d,0x20,0x12,0x05,0x04,0x5c,0x68,0x39,0x2f,0x21,0x14,0x13,0x06,0x5d,
0x69,0x31,0x30,0x23,0x22,0x15,0x07,0x5e,0x6a,0x72,0x32,0x24,0x16,0x08,0x09,0x5f,
0x6b,0x33,0x25,0x17,0x18,0x0b,0x0a,0x60,0x6c,0x34,0x35,0x26,0x27,0x19,0x0c,0x61,
0x6d,0x73,0x28,0x74,0x1a,0x0d,0x62,0x6e,0x3a,0x36,0x1c,0x1b,0x75,0x2b,0x63,0x76,
0x55,0x56,0x77,0x78,0x79,0x7a,0x0e,0x7b,0x7c,0x4f,0x7d,0x4b,0x47,0x7e,0x7f,0x6f,
0x52,0x53,0x50,0x4c,0x4d,0x48,0x01,0x45,0x57,0x4e,0x51,0x4a,0x37,0x49,0x46,0x54,
0x80,0x81,0x82,0x41,0x54,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,
0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff}
;

	David

-- 
David Laight: david@l8s.co.uk