The IBM 6110344 Keyboard
Note: You need a browser capable of displaying SVG images to see the keyboard layouts.
The IBM 6110344 is a 122-key model F keyboard, originally intended for use with the IBM 3270 PC. It is possible to connect it to a standard AT-class PC.

The keyboard has a 5-pin DIN plug that uses the 240-degree spacing. Its pinout is the same as the 1390876:
A normal AT keyboard uses the 180-degree spacing and this pinout:
Therefore the keyboard can be connected to an AT or PS/2 connector, either by making a simple adaptor, or by swapping the lead with one from a real IBM AT keyboard. Both use the same 3×2 Berg connector at the keyboard end.
DIP switches / Identity
The keyboard has eight DIP switches. According to the guide to operations, they should be ignored. If you do change them, they change bits in the keyboard ID (returned by command 0xF2). If all switches are left open (or disconnected) the ID returned is 0xBF 0xBF. Closing a switch sets the corresponding bit to 0.
Switches 1-6 correspond to bits 5-0 of the first ID byte. Switches 7-8 correspond to bits 5-4 of the second ID byte. The header on the controller PCB, to which the DIP switches are connected, has 12 pairs of pins and is silkscreened "KBDID A" (on the first 6 pairs) and "KBDID B" (on the second six). That suggests that the other four pairs of pins correspond to bits 3-0 of the second ID byte, but I haven't tested this.
LEDs
There are no LEDs, and the keyboard rejects commands to set LEDs.
Scancodes
The 6110344 uses the AT keyboard protocol and Scancode set 3. Since the 3270 PC predates the AT, this is probably the earliest use of this protocol and scancode set on a PC, and suggests that both originate in the world of 3270 terminals.
The keys on the 6110344 are laid out like this:
Markings in blue apply when the PC is behaving as a PC, rather than as a terminal.
When in use, the keyboard always uses Scancode set 3. It rejects requests to change the scancode set. The scancodes it returns are identical to the 1390876:
Notes:
- Only shaded keys send key-up sequences (F0 xx)
- Smaller numbers shown in circles are holes in the keyboard with no springs, corresponding to unused positions covered by double-sized keys. The scancodes from these are assumed to match the 1390876; they have not been verified.
- Likewise, the unused position under the spacebar has not been tested, because taking the spacebar off a Model F keyboard takes you into a world of aggravation.
Scancode translation
On a true 3270 PC, the Set 3 scancodes from the keyboard are converted to Set 1 (XT) scancodes by the keyboard card. Unlike on an AT, where the mapping takes place within the controller, the conversion is done by the BIOS and can be changed. The default mapping gives these codes:
The default translation table is at 0CAA60h, but the address can be set using INT 52h, with AH=1 and DX=segment of new table. The table has three bytes per 3270 scancode:
- Scancode to use if shift key is up.
- Flags. Bottom 4 bits are used if shift key is down; else top 4.
- Scancode to use if shift key is down.
Flags are:
- 0
- Beep and ignore key
- 1
- Simulate Shift up, scancode, Shift down.
- 2
- Simulate Shift down, scancode, Shift up.
- 3
- Simulate scancode only.
- 4
- If scancode is 52h (Ins pressed), simulate a release immediately after the press. Otherwise behave as 3.
- 5
- If numlock is on, behave as 2. Otherwise behave as 4.
- 6
- If numlock is off, behave as 1. Otherwise behave as 4.
- 7
- If Shift up and Numlock on, or Shift down and Numlock off, then behave as 3. Otherwise behave as 0.
- 8
- If Ctrl and Alt are not both pressed, behave as 3. If key is F2 and the standard keymap is in use, then select custom keymap. If key is not F2 and a custom keymap is in use, select the standard keymap. Then behave as 3.
- 9
- If shift down and Numlock off, behave as 1. If shift up and Numlock on, behave as 2. Otherwise behave as 0.
- 10-15
- Do not use these - they will crash the PC.
The default scancode mapping table in the ROM is listed below. It only returns scancodes for keys that are present on a real XT; the others just beep.
| 3270 scancode | 3270 key | Unshifted XT scancode | Unshifted flags | Shifted XT scancode | Shifted flags | Comments |
|---|---|---|---|---|---|---|
| 00 | 00 | 0 | 00 | 0 | ||
| 01 | ▫ ↔ □ | 00 | 0 | 00 | 0 | |
| 02 | 00 | 0 | 00 | 0 | Keyboard never returns this scancode. | |
| 03 | ChgSc/Jump/CrSel | 00 | 0 | 00 | 0 | |
| 04 | WS/Ctrl/ExSel | 00 | 0 | 00 | 0 | |
| 05 | Help/SysRq | 00 | 0 | 00 | 0 | |
| 06 | Clear/Test | 00 | 0 | 00 | 0 | |
| 07 | PF1 | 3B (F1) | 8 | 3B (F1) | 8 | Ctrl+Alt+PF1 selects standard keymap |
| 08 | PF13 | 00 | 0 | 00 | 0 | |
| 09 | CTRL | 1D (Ctrl) | 4 | 1D (Ctrl) | 4 | |
| 0A | Copy/Auto/Pause | 00 | 0 | 00 | 0 | |
| 0B | Erase EOF/ErInp | 00 | 0 | 00 | 0 | |
| 0C | Finish/Attn | 00 | 0 | 00 | 0 | |
| 0D | Left TAB | 0F (Tab) | 3 | 0F (Tab) | 3 | |
| 0E | ~ ` | 29 (`) | 3 | 29 (`) | 3 | |
| 0F | PF2 | 3C (F2) | 8 | 3C (F2) | 8 | Ctrl+Alt+PF2 selects custom keymap |
| 10 | PF14 | 00 | 0 | 00 | 0 | |
| 11 | Reset/Quit | 00 | 0 | 00 | 0 | |
| 12 | Left SHIFT | 2A (Shift) | 4 | 2A (Shift) | 4 | |
| 13 | > < | 33 (,) | 2 | 34 (.) | 3 | |
| 14 | CAPS LOCK | 3A (Caps Lock) | 4 | 3A (Caps Lock) | 4 | |
| 15 | Q | 10 (Q) | 3 | 10 (Q) | 3 | |
| 16 | 1 | 2 (1) | 3 | 2 (1) | 3 | |
| 17 | PF3 | 3D (F3) | 3 | 3D (F3) | 3 | |
| 18 | PF15 | 00 | 0 | 00 | 0 | |
| 19 | Left ALT | 38 (Alt) | 4 | 38 (Alt) | 4 | |
| 1A | Z | 2C (Z) | 3 | 2C (Z) | 3 | |
| 1B | S | 1F (S) | 3 | 1F (S) | 3 | |
| 1C | A | 1E (A) | 3 | 1E (A) | 3 | |
| 1D | W | 11 (W) | 3 | 11 (W) | 3 | |
| 1E | 2 | 03 (2) | 3 | 03 (2) | 3 | |
| 1F | PF4 | 3E (F4) | 3 | 3E (F4) | 3 | |
| 20 | PF16 | 00 | 0 | 00 | 0 | |
| 21 | C | 2E (C) | 3 | 2E (C) | 3 | |
| 22 | X | 2D (X) | 3 | 2D (X) | 3 | |
| 23 | D | 20 (D) | 3 | 20 (D) | 3 | |
| 24 | E | 12 (E) | 3 | 12 (E) | 3 | |
| 25 | 4 | 05 (4) | 3 | 05 (4) | 3 | |
| 26 | 3 | 04 (3) | 3 | 04 (3) | 3 | |
| 27 | PF5 | 3F (F5) | 3 | 3F (F5) | 3 | |
| 28 | PF17 | 00 | 0 | 00 | 0 | |
| 29 | SPACE | 39 (Space) | 3 | 39 (Space) | 3 | |
| 2A | V | 2F (V) | 3 | 2F (V) | 3 | |
| 2B | F | 21 (F) | 3 | 21 (F) | 3 | |
| 2C | T | 14 (T) | 3 | 14 (T) | 3 | |
| 2D | R | 13 (R) | 3 | 13 (R) | 3 | |
| 2E | 5 | 06 (5) | 3 | 06 (5) | 3 | |
| 2F | PF6 | 40 (F6) | 3 | 40 (F6) | 3 | |
| 30 | PF18 | 00 | 0 | 00 | 0 | |
| 31 | N | 31 (N) | 3 | 31 (N) | 3 | |
| 32 | B | 30 (B) | 3 | 30 (B) | 3 | |
| 33 | H | 23 (H) | 3 | 23 (H) | 3 | |
| 34 | G | 22 (G) | 3 | 22 (G) | 3 | |
| 35 | Y | 15 (Y) | 3 | 15 (Y) | 3 | |
| 36 | 6 | 07 (6) | 3 | 07 (6) | 3 | |
| 37 | PF7 | 41 (F7) | 3 | 41 (F7) | 3 | |
| 38 | PF19 | 00 | 0 | 00 | 0 | |
| 39 | Right ALT | 38 (Alt) | 4 | 38 (Alt) | 4 | |
| 3A | M | 32 (M) | 3 | 32 (M) | 3 | |
| 3B | J | 24 (J) | 3 | 24 (J) | 3 | |
| 3C | U | 16 (U) | 3 | 16 (U) | 3 | |
| 3D | 7 | 08 (7) | 3 | 08 (7) | 3 | |
| 3E | 8 | 09 (8) | 3 | 09 (8) | 3 | |
| 3F | PF8 | 42 (F8) | 3 | 42 (F8) | 3 | |
| 40 | PF20 | 00 | 0 | 00 | 0 | |
| 41 | , , | 33 (,) | 3 | 33 (,) | 3 | |
| 42 | K | 25 (K) | 3 | 25 (K) | 3 | |
| 43 | I | 17 (I) | 3 | 17 (I) | 3 | |
| 44 | O | 18 (O) | 3 | 18 (O) | 3 | |
| 45 | 0 | 0B (0) | 3 | 0B (0) | 3 | |
| 46 | 9 | 0A (9) | 3 | 0A (9) | 3 | |
| 47 | PF9 | 43 (F9) | 3 | 43 (Tab) | 3 | |
| 48 | PF21 | 00 | 0 | 00 | 0 | |
| 49 | . . | 34 (.) | 3 | 34 (.) | 3 | |
| 4A | ? / | 35 (/) | 3 | 35 (/) | 3 | |
| 4B | L | 26 (L) | 3 | 26 (L) | 3 | |
| 4C | ; : | 27 (;) | 3 | 27 (;) | 3 | |
| 4D | P | 19 (P) | 3 | 19 (P) | 3 | |
| 4E | _ - | 0C (-) | 3 | 0C (-) | 3 | |
| 4F | PF10 | 44 (F10) | 3 | 44 (F10) | 3 | |
| 50 | PF22 | 00 | 0 | 00 | 0 | |
| 51 | 00 | 0 | 00 | 0 | Unused key position under right SHIFT | |
| 52 | " ' | 28 (') | 3 | 28 (') | 3 | |
| 53 | } { | 1B (]) | 3 | 1B (]) | 3 | |
| 54 | ! cent | 1A ([) | 3 | 1A ([) | 3 | |
| 55 | + = | 0D (=) | 3 | 0D (=) | 3 | |
| 56 | PF11 | 00 | 0 | 00 | 0 | |
| 57 | PF23 | 00 | 0 | 00 | 0 | |
| 58 | ENTER | 1C (Return) | 3 | 1C (Return) | 3 | |
| 59 | Right SHIFT | 36 (Right Shift) | 4 | 36 (Right Shift) | 4 | |
| 5A | CR | 1C (Return) | 3 | 1C (Return) | 3 | |
| 5B | | \ | 2B (\) | 3 | 2B (\) | 3 | |
| 5C | 00 | 0 | 00 | 0 | Unused key position under Return | |
| 5D | 00 | 0 | 00 | 0 | Unused key position under Backspace | |
| 5E | PF12 | 00 | 0 | 00 | 0 | |
| 5F | PF24 | 00 | 0 | 00 | 0 | |
| 60 | Down | 50 (Down) | 5 | 50 (Down) | 6 | |
| 61 | Left | 4B (Left) | 5 | 4B (Left) | 6 | |
| 62 | ↖ key between cursors | 00 | 0 | 00 | 0 | |
| 63 | Up | 48 (Up) | 5 | 48 (Up) | 6 | |
| 64 | Backtab | 00 | 0 | 00 | 0 | |
| 65 | Insert | 52 (Insert) | 5 | 52 (Insert) | 6 | |
| 66 | Backspace | 0E (Backspace) | 3 | 0E (Backspace) | 3 | |
| 67 | Dup / PA1 | 00 | 0 | 00 | 0 | |
| 68 | Unused key position under keypad 0 | 00 | 0 | 00 | 0 | |
| 69 | Keypad 1 | 4F (Keypad 1) | 3 | 4F (Keypad 1) | 3 | |
| 6A | Right | 4D (Right) | 5 | 4D (Right) | 6 | |
| 6B | Keypad 4 | 4B (Keypad 4) | 3 | 4B (Keypad 4) | 3 | |
| 6C | Keypad 7 | 47 (Keypad 7) | 3 | 47 (Keypad 7) | 3 | |
| 6D | Del | 53 (Del) | 3 | 53 (Del) | 3 | |
| 6E | Field Mark / PA2 | 00 | 0 | 00 | 0 | |
| 6F | PA3 | 00 | 0 | 00 | 0 | |
| 70 | Keypad 0 | 52 (Keypad 0) | 4 | 52 (Keypad 0) | 3 | |
| 71 | Keypad . | 53 (Keypad .) | 3 | 53 (Keypad .) | 3 | |
| 72 | Keypad 2 | 50 (Keypad 2) | 3 | 50 (Keypad 2) | 3 | |
| 73 | Keypad 5 | 4C (Keypad 5) | 3 | 4C (Keypad 5) | 3 | |
| 74 | Keypad 6 | 4D (Keypad 6) | 3 | 4D (Keypad 6) | 3 | |
| 75 | Keypad 8 | 48 (Keypad 8) | 3 | 48 (Keypad 8) | 3 | |
| 76 | ESC | 01 (Esc) | 3 | 01 (Esc) | 3 | |
| 77 | NumLk | 45 (Num Lock) | 3 | 45 (Num Lock) | 3 | |
| 78 | 00 | 0 | 00 | 0 | Unused key position under keypad Enter | |
| 79 | Enter/+ | 4E (Keypad +) | 3 | 4E (Keypad +) | 3 | |
| 7A | Keypad 3 | 51 (Keypad 3) | 3 | 51 (Keypad 3) | 3 | |
| 7B | Keypad - | 4A (Keypad -) | 3 | 4A (Keypad -) | 3 | |
| 7C | Right TAB | 0F (Tab) | 3 | 00 | 0 | |
| 7D | Keypad 9 | 49 (Keypad 9) | 3 | 49 (Keypad 9) | 3 | |
| 7E | ScrLk | 46 (Scroll Lock) | 4 | 46 (Scroll Lock) | 4 | |
| 7F | 00 | 0 | 00 | 0 | Keyboard never returns these scancodes. | |
| 80 | 00 | 0 | 00 | 0 | ||
| 81 | 00 | 0 | 00 | 0 | ||
| 82 | 00 | 0 | 00 | 0 | ||
| 83 | Print/*/Ident | 37 (Keypad *) | 4 | 37 (Keypad *) | 4 | |
| 84 | Space | 39 (Space) | 3 | 39 (Space) | 3 |
Commands
The keyboard accepts the following commands. Most of them behave as documented for the 102-key PS/2 keyboard, but there are a couple of exceptions:
| Command | Description |
|---|---|
| EE | Diagnostic echo. |
| F2 | Read keyboard ID (usually BF BF). |
| F3 xx | Set repeat rate and delay. |
| F4 | Enable keyboard (clear errors). |
| F5 | Disable keyboard. |
| F6 | Set defaults. |
| F7 | Set all keys to repeat. No keys will send break codes. |
| F8 | Set all keys to give make/break codes. No keys will repeat. |
| F9 | Set all keys to give make codes only. No keys will repeat or send break codes. |
| FA | Behaves as FB. On a 102-key PS/2 keyboard, would set all keys to repeat and to give make/break codes. |
| FB | Set specified key(s) to repeat. They will not send break codes. Followed by a list of scancodes, which should be terminated by F4. |
| FC | Set specified key(s) to give make/break codes. They will not repeat. Followed by a list of scancodes, which should be terminated by F4. |
| FD | Set specified key(s) to give make codes only. They will not repeat or send break codes. Followed by a list of scancodes, which should be terminated by F4. |
| FE | Resend last scancode. |
| FF | Reset. The keyboard will respond with AA (as for the 102-key keyboard) followed by the 2-byte keyboard ID. |
The F0 command (set / get scancode set) and ED command (set LEDs) are not supported.
John Elliott 18 August 2009.