-
Notifications
You must be signed in to change notification settings - Fork 1.7k
IBM PC Keyboard Converter
You can buy prebuilt conveter here and support this project.
-
Source Code: https://github.com/tmk/tmk_keyboard/tree/master/converter/ibmpc_usb
-
TMK IBM PC Converter discussion: https://geekhack.org/index.php?topic=103648.0
-
XT Protocol: https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-XT-Keyboard-Protocol
-
AT Protocol: https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-AT-Keyboard-Protocol
-
Scan Code: https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-AT-Keyboard-Protocol#scan-codes
-
PS/2 Mouse: https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-Mouse
This section explains how the converter determines proper protocol and scan code set for keyboard. The converter need to do that before starting to receive and translate scan codes from keyboard.
After startup the converter sends 0xF2 command to get keyboard ID and sees how the keyboard responds to the command.
Response from keyboard:
-
XT keyboard doesn’t support any command and returns no response.
-
AT keyboard should respond with 0xFA to the command but returns no keyboard ID.
-
PS/2 keyboard should respond with 0xFA to the command, followd by keyboard ID, such as 0xAB86.
-
Terminal keyboard should respond with 0xFA to the command, followed by keyboard ID, such as 0xBFBF.
-
PS/2 mouse should respond with 0xFA to the command, followd by single-byte ID 0x00.
Now we can dscriminate the keyboard and determine suitable protocol and scan code set as described below.
-
Signals from XT keyboard are recognized by XT protocol.
-
Signals from AT, PS/2 and Terminal keyboard are recognized by AT protocol.
-
Signals from PS/2 mouse are also recognized by AT protocol.
-
Scan codes from XT keyboard are handled as CodeSet1.
-
Scan codes from AT and PS/2 keyboard are handled as CodeSet2.
-
Scan codes from Terminal keyhboard are handled as CodeSet3.
,-------. ,--------------------------------------------------------------------------. | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck | |-------| |--------------------------------------------------------------------------| | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -| |-------| |------------------------------------------------------|Ent|---------------| | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| | |-------| |----------------------------------------------------------------------| | | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift| *| 1| 2| 3| +| |-------| |----------------------------------------------------------------------| | | F9|F10| | Alt | Space |CapsLck| 0 | . | | `-------' `--------------------------------------------------------------------------' ,-------. ,--------------------------------------------------------------------------. | 3B| 3C| | 01| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E | 45 | 46 | |-------| |--------------------------------------------------------------------------| | 3D| 3E| | 0F | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B | | 47| 48| 49| 4A| |-------| |------------------------------------------------------| 1C|---------------| | 3F| 40| | 1D | 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| | 4B| 4C| 4D| | |-------| |----------------------------------------------------------------------| | | 41| 42| | 2A | 2B| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 35| 36 | 37| 4F| 50| 51| 4E| |-------| |----------------------------------------------------------------------| | | 43| 44| | 38 | 39 | 3A | 52 | 53 | | `-------' `--------------------------------------------------------------------------'
,-----------------------------------------------. |F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24| ,---. |-----------------------------------------------| ,-----------. ,-----------. |Esc| |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut| `---' `-----------------------------------------------' `-----------' `-----------' ,-----------------------------------------------------------. ,-----------. ,---------------. | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -| |-----------------------------------------------------------| |-----------| |---------------| |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +| |-----------------------------------------------------------| `-----------' |---------------| |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #|Entr| | 4| 5| 6|KP,| |-----------------------------------------------------------| ,---. |---------------| |Shft| ^a| Z| X| C| V| B| N| M| ,| .| /| RO|Shift | |Up | | 1| 2| 3|Ent| |-----------------------------------------------------------| ,-----------. |---------------| |Ctl|Gui|Alt|MHEN| Space |HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|KP=| `-----------------------------------------------------------' `-----------' `---------------' ,-----------------------------------------------. | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E| 76| ,---. |-----------------------------------------------| ,-----------. ,-----------. | 01| | 3B| 3C| 3D| 3E| 3F| 40| 41| 42| 43| 44| 57| 58| |*37| 46|*46| |*2E|*30|*20| `---' `-----------------------------------------------' `-----------' `-----------' ,-----------------------------------------------------------. ,-----------. ,---------------. | 29| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 7D| 0E| |*52|*47|*49| | 45|*35| 37| 4A| |-----------------------------------------------------------| |-----------| |---------------| | 0F | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 2B | |*53|*4F|*51| | 47| 48| 49| 4E| |-----------------------------------------------------------| `-----------' |---------------| | 3A | 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 56| 1C | | 4B| 4C| 4D| 7E| |-----------------------------------------------------------| ,---. |---------------| | 2A | ^a| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 35| 73| 36 | |*48| | 4F| 50| 51|*1C| |-----------------------------------------------------------| ,-----------. |---------------| | 1D|*5B| 38| 7B | 39 | 79 | 70 |*38|*5C|*5D|*1D| |*4B|*50|*4D| | 52| 53| 59| `-----------------------------------------------------------' `-----------' `---------------' *: E0-prefixed codes. See cs1_e0code() for remapping to unimap array. PrintScreen: E0 37 or 54(with Alt) -> 54 Pause: E1 1D 45 or E0 46(with Ctrl) -> 55 ^a: ISO backslash and US backslash use identical code 2B. [3], [a] Unsupported codes or error -> 00. UNIMAP_NUBS is unused.
,-------. ,-----------------------------------------------------------. ,---------------. | F1| F2| | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |Esc|NmL|ScL|PrS| |-------| |-----------------------------------------------------------| |---------------| | F3| F4| |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| App| | 7| 8| 9| *| |-------| |-----------------------------------------------------------| |-----------|---| | F5| F6| |LCtrl | A| S| D| F| G| H| J| K| L| ;| '|Lef| Ret| | 4| 5| 6| -| |-------| |-----------------------------------------------------------| |---------------| | F7| F8| |Shif|KAN| Z| X| C| V| B| N| M| ,| ,| /| RO| Shift| | 1| 2| 3| +| |-------| |-----------------------------------------------------------| |-----------|---| | F9|F10| | Alt| | Gui| Space | Ins| |Caps| | #| 0| .|F11| `-------' `----' `---------------------------------------' `----' `---------------' ,-------. ,-----------------------------------------------------------. ,---------------. | 05| 06| | 0E| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55| 5D| 66| | 76| 77| 7E| 84| |-------| |-----------------------------------------------------------| |---------------| | 04| 0C| | 0D | 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D| 54| 5B| -5C | | 6C| 75| 7D| 7C| |-------| |-----------------------------------------------------------| |---------------| | 03| 0B| | 14 | 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52|-53| 5A | | 6B| 73| 74| 7B| |-------| |-----------------------------------------------------------| |---------------| |*83| 0A| | 12 |-13| 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A|-51| 59 | | 69| 72| 7A| 79| |-------| |-----------------------------------------------------------| |---------------| | 01| 09| | 11 | | -19| 29 | -39| | 58 | |-68| 70| 71|-78| `-------' `-----' `---------------------------------------' `-----' `---------------' -: Hidden keys
,-----------------------------------------------. |F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24| ,---. |-----------------------------------------------| ,-----------. ,-----------. |Esc| |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut| `---' `-----------------------------------------------' `-----------' `-----------' ,-----------------------------------------------------------. ,-----------. ,---------------. | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -| |-----------------------------------------------------------| |-----------| |---------------| |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +| |-----------------------------------------------------------| `-----------' |---------------| |CapsL | A| S| D| F| G| H| J| K| L| ;| '| ^a|Entr| | 4| 5| 6|KP,| |-----------------------------------------------------------| ,---. |---------------| |Shft| <| Z| X| C| V| B| N| M| ,| .| /| RO|Shift | |Up | | 1| 2| 3|Ent| |-----------------------------------------------------------| ,-----------. |---------------| |Ctl|Gui|Alt|MHEN| Space |HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | #| 0| .|KP=| `-----------------------------------------------------------' `-----------' `---------------' ,-----------------------------------------------. | 08| 10| 18| 20| 28| 30| 38| 40| 48| 50| 57| 5F| ,---. |-----------------------------------------------| ,-----------. ,-----------. | 76| | 05| 06| 04| 0C| 03| 0B| 83| 0A| 01| 09| 78| 07| |+7C| 7E|+77| |*21|*32|*23| `---' `-----------------------------------------------' `-----------' `-----------' ,-----------------------------------------------------------. ,-----------. ,---------------. | 0E| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55| 6A| 66| |*70|*6C|*7D| | 77|*4A| 7C| 7B| |-----------------------------------------------------------| |-----------| |---------------| | 0D | 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D| 54| 5B| 5D | |*71|*69|*7A| | 6C| 75| 7D| 79| |-----------------------------------------------------------| `-----------' |---------------| | 58 | 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52| ^a| 5A | | 6B| 73| 74| 6D| |-----------------------------------------------------------| ,---. |---------------| | 12 | 61| 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A| 51| 59 | |*75| | 69| 72| 7A|*5A| |-----------------------------------------------------------| ,-----------. |---------------| | 14|*1F| 11| 67 | 29 | 64 | 13 |*11|*27|*2F|*14| |*6B|*72|*74| | 68| 70| 71| 63| `-----------------------------------------------------------' `-----------' `---------------' *: E0-prefixed codes. See cs2_e0code() for remapping to unimap array. +: Special codes sequence ^a: ISO hash key and US backslash use identical code 5D. 51, 63, 68, 6A, 6D: Hidden keys in IBM model M [6]
Details
,---. ,---------------. ,---------------. ,---------------. ,-----------.
|App| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------. ,---------------.
|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
|-----------------------------------------------------------| |-----------| |---------------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | |Del|End|PgD| | 7| 8| 9| +|
|------------------------------------------------------` | `-----------' |-----------| |
|Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `|Retn| | 4| 5| 6| |
|-----------------------------------------------------------| ,---. |---------------|
|Shift | Z| X| C| V| B| N| M| ,| .| /| <|Shift | |Up | | 1| 2| 3|Ent|
|-----------------------------------------------------------| ,-----------. |-----------| |
|Caps | | Alt | LGui | SPC | RGui | Alt | |Ctrl | |Lef|Dow|Rig| | 0 | .| |
`-----' `---------------------------------------' `-----' `-----------' `---------------'
,---. ,---------------. ,---------------. ,---------------. ,-----------.
|^27| | 05| 06| 04| 0C| | 03| 0B| 83| 0A| | 01| 09| 78| 07| |+7C| 7E|+77|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------. ,---------------.
|^76| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55|^5D| 66| |*70|*6C|*7D| | 77|*4A| 7C| 7B|
|-----------------------------------------------------------| |-----------| |---------------|
| 0D | 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D| 54| 5B| | |*71|*69|*7A| | 6C| 75| 7D| 79|
|------------------------------------------------------` | `-----------' |-----------| |
|^14 | 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52|^0E| 5A | | 6B| 73| 74| |
|-----------------------------------------------------------| ,---. |---------------|
| 12 | 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A|^61| 59 | |*75| | 69| 72| 7A|*5A|
|-----------------------------------------------------------| ,-----------. |-----------| |
|^58 | | 11 | ^17 | 29 | ^1F | *11 | | *14 | |*6B|*72|*74| | 68| 70| 71| |
`-----' `---------------------------------------' `-----' `-----------' `---------------'
^: AX specific
*: E0-prefixed
Details
,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---------------.
|Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |F13|F14|F15|F16|
`---' `---------------' `---------------' `---------------' |-----------| |---------------|
|F17|F18|F19| |F20|F21|F22|F23|
,-------------------------------------------------------------. |-----------| |---------------|
| `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| |Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
|-------------------------------------------------------------| |-----------| |---------------|
|F24|Tab| Q| W| E| R| T| Y| U| I| O| P| [| ] | | |Del|End|PgD| | 7| 8| 9| +|
|--------------------------------------------------------| | |-----------| |-----------| |
|Gui|Caps| A| S| D| F| G| H| J| K| L| ;| '| \|Entr| |VDn|VUp|Mut| | 4| 5| 6| |
|-------------------------------------------------------------| |-----------| |---------------|
|Shift | <| Z| X| C| V| B| N| M| ,| .| /| Shift| RO| |Gui|Up |App| | 1| 2| 3|Ent|
|-------------------------------------------------------------| |-----------| |-----------| |
|Ctl| |Alt| | Space | |Alt| |Ctl| |Lef|Dow|Rig| | 0| .| |
`---' `---' `-------------------------------' `---' `---' `-----------' `---------------'
,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---------------.
| 76| | 05| 06| 04| 0C| | 03| 0B| 83| 0A| | 01| 09| 78| 07| |+7C| 7E|+77| |^2B|^34|^33|^42|
`---' `---------------' `---------------' `---------------' |-----------| |---------------|
|^2C|^3C|^43| |^4B|^2A|^32|^3A|
,-------------------------------------------------------------. |-----------| |---------------|
| 0E| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55|^61| 66| |*70|*6C|*7D| | 77|*4A| 7C| 7B|
|-------------------------------------------------------------| |-----------| |---------------|
|^1D| 0D| 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D| 54| 5B | | |*71|*69|*7A| | 6C| 75| 7D| 79|
|--------------------------------------------------------| | |-----------| |-----------| |
|^24| 58 | 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52| 5D| 5A | |^44|^4D|^1C| | 6B| 73| 74| |
|-------------------------------------------------------------| |-----------| |---------------|
| 12 | 61| 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A| 59 |^2D| |^1B|*75|^23| | 69| 72| 7A|*5A|
|-------------------------------------------------------------| |-----------| |-----------| |
| 14| | 11| | 29 | |*11| |*14| |*6B|*72|*74| | 70| 71| |
`---' `---' `-------------------------------' `---' `---' `-----------' `---------------'
*: E0-prefixed codes
+7C: E0 12 E0 7C
+77: E1 14 77 E1 F0 14 F0 77
^: 80-prefixed codes
,-----------------------------------------------.
|F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24|
|-----------------------------------------------|
|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|
`-----------------------------------------------'
,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.
|Mut|HEN| | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY| BS| | /|PgU|PgD| |Esc|NmL|ScL| *|
|-------| |-----------------------------------------------------------| |-----------| |---------------|
|VUp|Pau| |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |End|Ins|Del| | 7| 8| 9| +|
|-------| |-----------------------------------------------------------| |-----------| |-----------|---|
|VDn|MHE| |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #| Ret| |JPY| Up| #| | 4| 5| 6| -|
|-------| |-----------------------------------------------------------| |-----------| |---------------|
|PrS|App| |Shif| \| Z| X| C| V| B| N| M| ,| ,| /| RO| Shift| |Lef|Hom|Rig| | 1| 2| 3|Ent|
|-------| |-----------------------------------------------------------| |-----------| |-----------|---|
|Gui|Gui| |Ctrl| | Alt | P, | Space | P= | KANA| Alt | |Ctrl| | RO|Dow|KAN| | ,| 0| .| =|
`-------' `----' `---------------------------------------' `----' `---`---'---' `---------------'
,-----------------------------------------------.
| 08| 10| 18| 20| 28| 30| 38| 40| 48| 50| 57| 5F|
|-----------------------------------------------|
| 07| 0F| 17| 1F| 27| 2F| 37| 3F| 47| 4F| 56| 5E|
`-----------------------------------------------'
,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.
| 05| 06| | 0E| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55| 5D| 66| | 67| 6E| 6F| | 76| 77| 7E| 84|
|-------| |-----------------------------------------------------------| |-----------| |---------------|
| 04| 0C| | 0D | 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D| 54| 5B| 5C | | 64| 65| 6D| | 6C| 75| 7D| 7C|
|-------| |-----------------------------------------------------------| |-----------| |---------------|
| 03| 0B| | 14 | 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52| 53| 5A | |-26| 63|-25| | 6B| 73| 74| 7B|
|-------| |-----------------------------------------------------------| |-----------| |---------------|
| 83| 0A| | 12 | 13| 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A| 51| 59 | | 61| 62| 6A| | 69| 72| 7A| 79|
|-------| |-----------------------------------------------------------| |-----------| |---------------|
| 01| 09| | 11 | | 19 | ^85 | 29 | ^86 | 87 | 39 | | 58 | |-16| 60|-1E| | 68| 70| 71| 78|
`-------' `-----' `---------------------------------------' `-----' `-----------' `---------------'
-: G80-2551 specific 80-prefixed codes remapped: 26->5D, 25->53, 16->51, 1E->00
^: 5576-001 Japanese keys
51, 5C, 5D, 68, 78: Hidden keys in IBM 122-key terminal keyboard [7]
Details
,-----------------------------------------------. |F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24| ,---. |-----------------------------------------------| ,-----------. ,-----------. |Esc| |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut| `---' `-----------------------------------------------' `-----------' `-----------' ,-----------------------------------------------------------. ,-----------. ,---------------. | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -| |-----------------------------------------------------------| |-----------| |---------------| |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +| |-----------------------------------------------------------| `-----------' |---------------| |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #|Entr| | 4| 5| 6|KP,| |-----------------------------------------------------------| ,---. |---------------| |Shft| <| Z| X| C| V| B| N| M| ,| .| /| RO|Shift | |Up | | 1| 2| 3|Ent| |-----------------------------------------------------------| ,-----------. |---------------| |Ctl|Gui|Alt|MHEN| Space |HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|KP=| `-----------------------------------------------------------' `-----------' `---------------' ,-----------------------------------------------. | 08| 10| 18| 20| 28| 30| 38| 40| 48| 50| 57| 5F| ,---. |-----------------------------------------------| ,-----------. ,-----------. | 76| | 07| 0F| 17| 1F| 27| 2F| 37| 3F| 47| 4F| 56| 5E| | 83| 7E| 6C| | 03| 04| 05| `---' `-----------------------------------------------' `-----------' `-----------' ,-----------------------------------------------------------. ,-----------. ,---------------. | 0E| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55| 5D| 66| | 65| 62| 6E| | 77| 67| 84| 7B| |-----------------------------------------------------------| |-----------| |---------------| | 0D | 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D| 54| 5B| 5C | | 6D| 64| 6F| | 6C| 75| 7D| 7C| |-----------------------------------------------------------| `-----------' |---------------| | 14 | 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52| 53| 5A | | 6B| 73| 74| 68| |-----------------------------------------------------------| ,---. |---------------| | 12 | 13| 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A| 51| 59 | | 63| | 69| 72| 7A| 79| |-----------------------------------------------------------| ,-----------. |---------------| | 11|*8B| 19|*85 | 29 |*86 |*87 | 39|*8C|*8D| 58| | 61| 60| 6A| | 70| 71| 78| `-----------------------------------------------------------' `-----------' `---------------' *: Special codes remmaped
Details
,---------------. ,---------------. ,---------------.
|F13|F14|F15|F16| |F17|F18|F19|F20| |F21|F22|F23|F24|
|---------------- |---------------- |---------------|
| F1| F2| F3| F4| | F5| F6| F7| F8| | F9|F10|F11|F12|
`---------------' `---------------' `---------------'
,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.
|Mut|HEN| | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY| BS| | /|PgU|PgD| |Esc|NmL|ScL| *|
|-------| |-----------------------------------------------------------| |-----------| |---------------|
|VUp|Pau| |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | |End|Ins|Del| | 7| 8| 9| +|
|-------| |------------------------------------------------------` | `-----------' |-----------|---|
|VDn|MHE| |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #| Ret| |Up | | 4| 5| 6| |
|-------| |-----------------------------------------------------------| ,-----------. |-----------| |
|PrS|App| |Shift | Z| X| C| V| B| N| M| ,| ,| /| RO| Shift| |Lef|Hom|Rig| | 1| 2| 3|Ent|
|-------| |-----------------------------------------------------------| `-----------' |-----------| |
|Gui|Gui| |LCtrl| |LALt | P, | Spc | P= |RAlt | |RCtrl| |Dow| | ,| 0| .| |
`-------' `-----' `-----------------------------------' `-----' `---' `---------------'
,---------------. ,---------------. ,---------------.
| 08| 10| 18| 20| | 28| 30| 38| 40| | 48| 50| 57| 5F|
|---------------- |---------------- |---------------|
| 07| 0F| 17| 1F| | 27| 2F| 37| 3F| | 47| 4F| 56| 5E|
`---------------' `---------------' `---------------'
,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.
| 05| 06| | 0E| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55|+13| 66| | 67| 6E| 6F| |+7E| 77|+76| 84|
|-------| |-----------------------------------------------------------| |-----------| |---------------|
| 04| 0C| | 0D | 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D| 54| 5B| | | 64| 65| 6D| | 6C| 75| 7D| 7C|
|-------| |------------------------------------------------------` | `-----------' |---------------|
| 03| 0B| | 14 | 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52| 53| 5A | | 63| | 6B| 73| 74| |
|-------| |-----------------------------------------------------------| ,-----------. |-----------| |
| 83| 0A| | 12 | 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A|+5C| 59 | | 61| 62| 6A| | 69| 72| 7A| 79|
|-------| |-----------------------------------------------------------| `-----------' |-----------| |
| 01| 09| | 11 | | 19 | +85 | 29 | +86 | 39 | | 58 | | 60| | 70| 71| |
`-------' `-----' `-----------------------------------' `-----' `---' `---------------'
+: remmaped by converter 13->5D, 5C->51, 76->7E, 7E->76
Details
,---. ,---------------. ,---------------. ,---------------. ,-----------.
|F13| | F1| F2| F3| F4| | F5| F6| F7| F8| | F9|F10|F11|F12| |F23|F24|Hom|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------. ,---------------.
| `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| | /|PgU|PgD| |Esc|NmL|ScL| *|
|-----------------------------------------------------------| |-----------| |---------------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |End|Ins|Del| | 7| 8| 9| +|
|-----------------------------------------------------------| `-----------' |-----------|---|
|CapsL | A| S| D| F| G| H| J| K| L| ;| '| #|Entr| | 4| 5| 6| -|
|-----------------------------------------------------------| ,---. |---------------|
|Shft| <| Z| X| C| V| B| N| M| ,| .| /| RO|Shift | |Up | | 1| 2| 3|Ent|
|-----------------------------------------------------------| ,-----------. |-----------|---|
|Ctrl| |Alt | Space |Alt | |Ctrl| |Lef|Dow|Rig| | ,| 0| .| =|
`----' `---------------------------------------' `----' `-----------' `---------------'
,---. ,---------------. ,---------------. ,---------------. ,-----------.
| 08| | 07| 0F| 17| 1F| | 27| 2F| 37| 3F| | 47| 4F| 56| 5E| | 57| 5F| 62|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------. ,---------------.
| 0E| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55| 5D| 66| | 67| 6E| 6F| | 76| 77| 7E| 84|
|-----------------------------------------------------------| |-----------| |---------------|
| 0D | 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D| 54| 5B| 5C | | 64| 65| 6D| | 6C| 75| 7D| 7C|
|-----------------------------------------------------------| `-----------' |---------------|
| 14 | 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52| 53| 5A | | 6B| 73| 74| 7B|
|-----------------------------------------------------------| ,---. |---------------|
| 12 | 13| 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A| 51| 59 | | 63| | 69| 72| 7A| 79|
|-----------------------------------------------------------| ,-----------. |---------------|
| 11 | |19 | 29 |39 | | 58 | | 61| 60| 6A| | 68| 70| 71| 78|
`-----' `---------------------------------------' `-----' `-----------' `---------------'
Details
,-------------------. ,-------------------. ,---------------. ,-----------. ,---------------.
|F1 |F2 |F3 |F4 |F5 | |F6 |F7 |F8 |F9 |F10| |F11|F12|F13|F14| |PrS|ScrLock| |Pau|VDn|VUp|Mut|
`-------------------' `-------------------' `---------------' `-----------' `---------------'
,-----------------------------------------------------------------. ,-----------. ,---------------.
|Esc| `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp | \| |Ins|Hom|PgU| |NmL| /| *| -|
|-----------------------------------------------------------------| |-----------| |---------------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Entr| |Del|End|PgD| | 7| 8| 9| +|
|---------------------------------------------------------- | `-----------' |---------------|
|Ctl|CapsL| A| S| D| F| G| H| J| K| L| ;| '| #| | | Up| | 4| 5| 6|KP,|
|--------------------------------------------------------------|_ ,-----------. |---------------|
| Shft | <| Z| X| C| V| B| N| M| ,| .| /| Shift |RCtl| |Lef|Dow|Rig| | 1| 2| 3|Ent|
`----------------------------------------------------------------' `-----------' |-----------| |
|LGui|LAlt| Space |RAlt|RGui| | 0| .| |
`-----------------------------------------------' `---------------'
,-------------------. ,-------------------. ,---------------. ,-----------. ,---------------.
| 07| 0F| 17| 1F| 27| | 2F| 37| 3F| 47| 4F| | 56| 5E|*85|*86| |*87|*88 | |*89|*8A|*8B|*8C|
`-------------------' `-------------------' `---------------' `-----------' `---------------'
,-----------------------------------------------------------------. ,-----------. ,---------------.
|*08| 0E| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55| 66 |*57| |*6E|*67|*64| |*8D|*8E|*8F|*90|
|-----------------------------------------------------------------| |-----------| |---------------|
| 0D | 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D| 54| 5B| 5A | |*65|*6D| 6F| | 6C| 75| 7D|*84|
|---------------------------------------------------------- | `-----------' |---------------|
| 11| 14 | 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52|*5C| | | 63| | 6B| 73| 74|*7C|
|--------------------------------------------------------------|_ ,-----------. |---------------|
| 12 | 13| 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A| 59 |*77 | | 61| 60| 6A| | 69| 72| 7A| 79|
`----------------------------------------------------------------' `-----------' |-----------| |
|*91 | 19 | 29 | 39 |*92 | | 70| 71| |
`-----------------------------------------------' `---------------'
*: codes traslated by converter
Some keyboards place tricky signaling to send AA
(BAT OK) with prity error at startup to decide between AT and XT protocol.
MSB LSB Clock: A 9 8 7 6 5 4 3 2 1 0 Data: 1 0 1 0 1 0 1 0 1 0 0 AT: S p D D D D D D D D s XT: D D D D D D D D s i i (s:start bit, p:parity bit, S:stop bit, D:data bit, i:ignored)
TMK Converter displays it as ISR:AA90
on debug console.
-
AT host is expected to detetect its parity error and response with
FE
(Resend) orFF
(Reset) possibly. -
XT host is expected to ignore two preceding 0 before start bit and recognize it as
AA
.
TMK IBMPC converter supports this type of Auto-Switching and interprets the signaling as parity error in AT protocol.
This realizes protocol auto-switching by sending AA
with parity error on AT protocol first. If host/converter doesn’t detect and fails to recover the error with Resend command(FE
), the keyboard switches to XT protocol immediately and no longer receive AT command.
This keyboard can work with a few PS/2 converters at least including TMK IBMPC converter.
Sending Reset command(FF
) doesn’t work just after the parity error, the keyboard ingores it and switches to XT protocol.
Debug log
TMK:147575/LUFA:d6a7df
USB configured.
Loop start.
I558
620 PRT:10 ISR:AA90 rAA
624 PRT:22 ISR:AAC0 rAA A3559 wFF R R R R R R R R R R
3951 ERR:11 ISR:0000 X4452 rAA W4456 wF2 R R R R R R R R R R R5349
ID:FFFF(XT)
5349 ERR:11 ISR:AAC0 S5350 L5350 r1F r9F r20 rA0
No Keyboard ID(AT84) It emulates behaviour of AT 84-key by replying to F2
command with FA
but no ID.
Debug log
TMK:111e8c/LUFA:d6a7df
USB configured.
Loop start.
I776
777 ERR:02 ISR:AA90 P778 wFE rAA r00AA e00 iEA90 E781 I781 A3782 wFF rFA
3785 PRT:10 ISR:FE90 rAA W4168 wF2 rFA R5171
ID:0000(AT_AT84) S5171 wED rFA w00 rFA L5178 r84 rF0 r84 r0E rF0 r0E r0E rF0 r0E
BTC-5161 requires command(Reset or Resend) to start AT mode.
The keyboard sends sends the AA
reapeadly at very high rate until receiving a command from host and this can makes converter buffer full.
The keyboard speaks normal AT protocol after receiving FF
command.
It is not clear about how to turn it into XT protocol, XT reset is needed perhaps.
TMK converter communicates with the keyboard on AT protocol.
Keyboard ID: AB83
Debug log
ERR:40 ISR:AA90
ERR:40 ISR:AA90
...
ERR:40 ISR:AA90
ERR:40 ISR:AA90
ERR:40 ISR:AA90 A3230 wFF ISR:5520 rFA rAA W3299 wF2 b:FAAB rFA rAB r83 R3809
ID:AB83(AT) S3810 wED rFA w02 rFA L3821
TMK:8ad6bfa2/LUFA
USB configured.
Keyboard start.
ERR:40 ISR:AA90
PRT:10 ISR:0000 I223
PRT:10 ISR:0000 rAA A224 wFF rFA rAA W295 wF2 b:FAAB rFA rAB r83 R805
ID:AB83(AT) S805 wED rFA w00 rFA L822
Device disconnected.
Waiting for new device:..
Listening:
TMK:8ad6bfa2/LUFA
USB configured.
Keyboard start.
ERR:40 ISR:AA90
PRT:10 ISR:0000 I419
ERR:40 ISR:AA90
PRT:10 ISR:0000 !FULL! rFF A420 wFF rFA rAA W491 wF2 b:FAAB rFA rAB r83 R1001
ID:AB83(AT) S1002 wED rFA w00 rFA L1018
Some of Model M IBM Enhanced keyboards is known to be compatible to both AT and XT protocol.
Keyboard Mode Selection
The keyboard modes establish the line protocol needed for the keyboard to communicate with the host system. Based on the signals found on the keyboard 'clock' and 'data' lines immediately following POR, the keyboard selects either Mode 1 or Mode 2 for communication with the attached system unit.
The following describes the keyboard 'clock' and 'data' signal conditions necessary to establish each mode.
If the 'clock' line is active (high) immediately after POR, the keyboard sets up for Mode 1 operation. It then waits for the 'clock' line to become inactive (low), executes the basic assurance test (BAT), and returns the completion code. If the 'clock' line is inactive (low) immediately after POR, the keyboard executes the BAT, waits for the 'clock' line to become active (high), and sends the completion code in Mode 2 protocol. If the system has not made the 'data' line inactive within 40 microseconds, Mode 2 operation is established. If the 'data' line has become inactive within this time, Mode 1 is established.
Mode 1 uses scan code set 1 only. Mode 2 uses scan code set 2, but can be switched to scan code set 1 or scan code set 3 using the Select Alternate Scan Codes command. Note: After the mode is set, it can be changed only by another 'power-on-reset.'
P.4-4 IBM 7531/7532 Technical Reference
where Mode 1 indicates XT protocol and Mode 2 does AT.
Industrial version and some version of Model M are supposed to support both XT and AT.
Controller board: 1392993
Just tested briefly but this keyboard doesn’t seems to support the protocol switching. 2021-09-14
Commodore PC 30/40 III
In fact, I’ve got an 102-key IBM PS/2 keyboard (Model M, 1391409) from 1991, and it actually worked in my early-BIOS XT too! However, as expected, the LED’s doesn’t work.
The key was introduced as a dedicated key on AT(84-key) keyboard and assinged to scan code 0x84. The SysRq key dispappeared and remained as sub legend of PrintScreen key on Enhanced(101-key) keyboard later.
TMK converter translates the key into PrintScreen on USB HID.
The key exists on PC/XT(83-key) and AT(84-key) keyboard but not on Enhanced keyboard. Main role of the key is Keypad* and recognized as PrintScreen funtion by computer of those days when modified with Shift. This key should be recognized just as Keypad* on modern computer, and it doesn’t act as PrintScreen anyway.
TMK converter translates the key into Keypad* on USB HID.