The IBM 1391406 Keyboard
Note: You need a browser capable of displaying SVG images to see the keyboard layouts.
The IBM 1391406 is the 102-key 'extended' keyboard originally shipped with PS/2 computers. If someone mentions an IBM Model M keyboard, this is usually the one they're talking about.
My particular model uses the UK layout and has a detachable 6-pin PS/2 plug.
Identity
When sent an identify command (0xF2), the keyboard returns the byte sequence 0xAB 0x83 (if translation is on, this comes out as 0xAB 0x41).
Scancodes
The keys on the 1391406 are laid out like this:
The keyboard supports all three IBM scancode sets. The scancodes it returns are:
Set 1
Notes:
- Smaller numbers shown in circles are holes in the keyboard with no springs, corresponding to unused positions covered by double-sized keys.
- The unused position under the spacebar does not return any scancode when poked with a screwdriver, whereas all the others do.
- If ALT is pressed, Print Screen / SysRQ (shaded green) returns scancode 54. If not, it returns E02A, E037 (ie: Press fake Shift, press PrintScreen) on press, and E0B7, E0AA on release.
- Pause (shaded yellow) generates the sequence E11D,45,E19D,C5 when pressed (ie, Press fake Ctrl, press NumLock, release fake Ctrl, release NumLock) and nothing on release. If real Ctrl is held, it sends scancodes E046, E0C6 on press and nothing on release.
- A number of keys send fake shift press and release codes under various circumstances. These are described in gory detail here.
Set 1 is not intended to be translated by the keyboard controller. If you do turn translation on, you get these codes:
Notes:
- These are 'make' codes. The 'break' codes, being in the 80-FF range, mostly avoid being translated; so (for example) A has the make code 03 but the break code 9E.
Set 2
Notes:
- PrintScreen and Pause have similar behaviour to set 1; PrintScreen sends E012 E07C and Pause sends E114 77 E1F014 F077.
These scancodes are expected to be translated by the keyboard controller, producing the same output that you'd get from (untranslated) Set 1:
Set 3
Set 3 uses the same position-based coding as the 122-key terminal keyboards and the 84-key AT keyboard. It is the only set to distinguish between the key position above Return (where Backslash is on a 101-key keyboard) and the one to the left of Return (where Hash is on a 102-key keyboard).
Notes:
- Only the keys highlighted in grey return break codes (F0 xx).
- The four key positions highlighted in blue are new in the
102-key layout. Their scancodes have been reassigned as follows:
- 08 (Esc) was F13
- 57 (PrintScreen) was F23
- 5F (Scroll Lock) was F24
- 62 (Pause) was the key between the cursor keys.
After translation by the keyboard controller, these codes become:
John Elliott 1 August 2009.