Skip to content

IBM PC AT Keyboard Protocol

hasu@tmk edited this page Nov 21, 2024 · 279 revisions

Technical Reference

Pinouts

Mini-DIN-6P Female socket from the front:

      ,--_--.       1: Data
     / o6 5o \      2: (Data2)
    | o4   3o |     3: GND
     - 2o o1 -      4: 5V
      `-___-'       5: Clock
                    6: (Clock2)

DIN-5P(180-deg) Female socket from the front:

     .---. .---.
    /    |_|    \
   /             \    1: Clock
  | 3           1 |   2: Data
  | o  5     4  o |   3: Reset(XT Type-1)
   \  o   2   o  /    4: GND
    \     o     /     5: 5V
     `--.___,--'

Protocol

Host reads/sends data on falling edges of clock.

Signaling:
        ____            ____
    CLK H       L___    H
        ____    ____ 
    DAT H       H       L___
        Idle    inHibit Request-to-send

Keyboard to Host:
        ____ 1 _ 2 _ 3 _ 4 _ 5 _ 6 _ 7 _ 8 _ 9 _ A _ B _____
    CLK     \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
        ___     ___ ___ ___ ___ ___ ___ ___ ___ ___ ________
    DAT    \___/___X___X___X___X___X___X___X___X___/
             S   0   1   2   3   4   5   6   7   P   s

        ____ 1 _ 2 _ 3 _ 4 _ 5 _ 6 _ 7 _ 8 _ 9 _ A _ B
    CLK     \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_______ Inhibited by host
        ___     ___ ___ ___ ___ ___ ___ ___ ___ ___ ________
    DAT    \___/___X___X___X___X___X___X___X___X___/
             S   0   1   2   3   4   5   6   7   P   s

        
Host to Keyboard:
        __      _ 1 _ 2 _ 3 _ 4 _ 5 _ 6 _ 7 _ 8 _ 9 _ A __ B ____
    CLK   \____/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/  \_/
        ______     ___ ___ ___ ___ ___ ___ ___ ___ ______     ____
    DAT       \___/___X___X___X___X___X___X___X___X___/  \___/
           H    R   0   1   2   3   4   5   6   7   P   s ACK

Clock and Data Signals

p.212 http://bitsavers.org/pdf/ibm/pc/at/6183355_PC_AT_Technical_Reference_Mar86.pdf

p.4-27 http://bitsavers.trailing-edge.com/pdf/ibm/pc/industrial_computer/6522361_IBM_7531_7532_Industrial_Computer_Technical_Reference_System_Unit_Jul85.pdf

Open

The keyboard and system communicate over the 'clock' and 'data' lines. The source of each of these lines is an open-collector device on the keyboard that allows either the keyboard or the system to force a line to an inactive (low) level. When no communication is occurring, the 'clock' line is at an active (high) level. The state of the 'data' line is held active(high) by the keyboard. When the system sends data to the keyboard, it forces the 'data' line to an inactive level and allows the 'clock' line to go to an active level. An inactive signal will have a value of at least 0, but not greater than +0.7 volts. A signal at the inactive level is a logical O. An active signal will have a value of at least +2.4, but not greater than +5.5 volts. A signal at the active level is a logical 1. Voltages are measured between a signal source and the dc network ground. The keyboard 'clock' line provides the clocking signals used to clock serial data to and from the keyboard. If the host system forces the 'clock' line to an inactive level, keyboard transmission is inhibited. When the keyboard sends data to, or receives data from the system, it generates the 'clock' signal to time the data. The system can prevent the keyboard from sending data by forcing the 'clock' line to an inactive level; the 'data' line may be active or inactive during this time. During the BAT, the keyboard allows the 'clock' and 'data' lines to go to an active level.

Data Stream

Data transmissions to and from the keyboard consist of an 11-bit data stream (Mode 2) sent serially over the 'data' line. A logical 1 is sent at an active (high) level. The following table shows the functions of the bits.

Bit Function
1 Start bit (always 0)
2 Data bit 0 (least-significant)
3 Data bit 1
4 Data bit 2
5 Data bit 3
6 Data bit 4
7 Data bit 5
8 Data bit 6
9 Data bit 7 (most-significant)
10 Parity bit (odd parity)
11 Stop bit (always 1)

The parity bit is either 1 or 0, and the 8 data bits, plus the parity bit, always have an odd number of 1 's.

Note: Mode 1 is a 9-bit data stream that does not have a parity bit or stop bit and the start bit is always 1.

Keyboard Data Output

When the keyboard is ready to send data, it first checks for a keyboard-inhibit or system request-to-send status on the 'clock' and 'data' lines. If the 'clock' line is inactive (low), data is stored in the keyboard buffer. If the 'clock' line is active (high) and the 'data' line is inactive (request-to-send), data is stored in the keyboard buffer, and the keyboard receives system data. If the 'clock' and 'data' lines are both active, the keyboard sends the 0 start bit, 8 data bits, the parity bit, and the stop bit. Data will be valid before the trailing edge and beyond the leading edge of the clock pulse. During transmission, the keyboard checks the 'clock' line for an active level at least every 60 milliseconds. If the system lowers the 'clock' line from an active level after the keyboard starts sending data, a condition known as line contention occurs, and the keyboard stops sending data. If line contention occurs before the leading edge of the 10th clock signal (parity bit), the keyboard buffer returns the 'clock' and 'data' lines to an active level. If contention does not occur by the 10th clock signal, the keyboard completes the transmission. Following line contention, the system mayor may not request the keyboard to resend the data. Following a transmission, the system can inhibit the keyboard until the system processes the input, or until it requests that a response be sent.

Keyboard Data Input

When the system is ready to send data to the keyboard, it first checks to see if the keyboard is sending data. If the keyboard is sending, but has not reached the 10th 'clock' signal, the system can override the keyboard output by forcing the keyboard 'clock' line to an inactive (low) level. If the keyboard transmission is beyond the 10th 'clock' signal, the system must receive the transmission. If the keyboard is not sending, or if the system elects to override the keyboard's output, the system forces the keyboard 'clock' line to an inactive level for more than 60 microseconds while preparing to send data. When the system is ready to send the start bit (the 'data' line will be inactive), it allows the 'clock' line to go to an active (high) level. The keyboard checks the state of the' clock' line at intervals of no more than 10 milliseconds. If a system request-to-send (RTS) is detected, the keyboard counts 11 bits. After the 10th bit, the keyboard checks for an active level on the 'data' line, and if the line is active, forces it inactive, and counts one more bit. This action signals the system that the keyboard has received its data. Upon receipt of this signal, the system returns to a ready state, in which it can accept keyboard output, or goes to the inhibited state until it is ready.

If the keyboard 'data' line is found at an inactive level following the 10th bit, a framing error has occurred, and the keyboard continues to count until the 'data' line becomes active. The keyboard then makes the 'data' line inactive and sends a Resend. Each system command or data transmission to the keyboard requires a response from the keyboard before the system can send its next output. The keyboard will respond within 20 milliseconds unless the system prevents keyboard output. If the keyboard response is invalid or has a parity error, the system sends the command or data again. However, the two byte commands require special handling. If hex F3 (Set Typematic Rate/Delay), hex F0 (Select Alternate Scan Codes), or hex ED (Set/Reset Mode Indicators) have been sent and acknowledged, and the value byte has been sent but the response is invalid or has a parity error, the system will resend both the command and the value byte.

i8042 Keyboard Controller on Host

PC/AT: http://halicery.com/8042/8042_1503033.TXT

PS/2: http://www.halicery.com/Hardware/Intel%208042%20and%208048/8042_PS2_INTERN.TEXT

Stop bit of Data Output

IBM AT(and PS/2) keyboard controller checks data line only, not clock for Stop bit.(03C0:)

ACK of Data Input

IBM AT(and PS/2) keyboard controller checks data line only, not clock for ACK. (0274:) (026C:)

0268: F0      MOV A,@R0     ; send Stop bit..
0269: 62      MOV T,A
026A: 55      STRT T
026B: 26 6B   JNT0 $026B    ; wait for Clock Hi
026D: 44 6F   JMP $026F
026F: 36 6F   JT0 $026F     ; wait for Clock Lo
0271: 8A 80   ORL P2,#$80   ; P27: Data Hi
0273: 65      STOP TCNT

0274: F0      MOV A,@R0     ; Wait for |_| on DATA (ACK)..
0275: 62      MOV T,A
0276: 55      STRT T
0277: 56 77   JT1 $0277    ; wait for Data Lo
0279: 44 7B   JMP $027B
027B: 46 7B   JNT1 $027B   ; wiat for Data Hi
027D: 65      STOP TCNT

Waveform

IBM 1394100 Terminal

0x15(Q make):

0xF0:

https://geekhack.org/index.php?topic=62168.msg1469247#msg1469247

kbdbabel.org

http://www.kbdbabel.org/

TechRef

http://www.mcamafia.de/pdf/ibm_hitrc07.pdf

Zenith Z-150 beige

0xAA(BAT OK):

Note that stop bit is low and this is clearly violation of IBM AT protocol.

https://geekhack.org/index.php?topic=103648.msg2895701#msg2895701

But keyboard controller 8042 of IBM 5170 doesn't check stop bit state actually.(03C0 03C4) Its invalid stop bit won't be detected as an error there.

http://www.halicery.com/8042/8042_1503033.TXT

Receiving Data  
    IBM AT:
        ____ 1 _ 2 _ 3 _ 4 _ 5 _ 6 _ 7 _ 8 _ 9 _ A _ B _____
    CLK     \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
        ___     ___ ___ ___ ___ ___ ___ ___ ___ ___ ________
    DAT    \___/___X___X___X___X___X___X___X___X___/
             S   0   1   2   3   4   5   6   7   P   s

    Z-150 AT:
        ____ 1 _ 2 _ 3 _ 4 _ 5 _ 6 _ 7 _ 8 _ 9 _ A _ B _____  
    CLK     \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/  
        ___     ___ ___ ___ ___ ___ ___ ___ ___ ___     ___
    DAT    \___/___X___X___X___X___X___X___X___X___\___/
             S   0   1   2   3   4   5   6   7   P   s*
    * Stop bit is Lo(0) 
    
Sending Data
    IBM AT:   
        __      _ 1 _ 2 _ 3 _ 4 _ 5 _ 6 _ 7 _ 8 _ 9 _ A __ B ____
    CLK   \____/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/  \_/
        ______     ___ ___ ___ ___ ___ ___ ___ ___ ______     ____
    DAT       \___/___X___X___X___X___X___X___X___X___/  \___/
           H    R   0   1   2   3   4   5   6   7   P   s ACK

    Z-150 AT:
        __      _ 1 _ 2 _ 3 _ 4 _ 5 _ 6 _ 7 _ 8 _ 9 _ A ________
    CLK   \____/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ XXXXX
        ______     ___ ___ ___ ___ ___ ___ ___ ___ ______     ____
    DAT       \___/___X___X___X___X___X___X___X___X___/  \___/
           H    R   0   1   2   3   4   5   6   7   P   s ACK*

    * No or slow clock pulse for ACK(Not confirmed).

See this for error when sending command. https://github.com/tmk/tmk_keyboard/issues/661

Commands from the System

The commands may be sent to the keyboard at any time. The keyboard will respond within 20 milliseconds, except when performing the basic assurance test (BAT), or executing a Reset command.

p158(4-7), p.191(4-40) of http://bitsavers.org/pdf/ibm/pc/at/6183355_PC_AT_Technical_Reference_Mar86.pdf

Command Hex Value
Set/Reset Status Indicators* ED
Echo* EE
Select Alternate Scan Codes F0
Read ID F2
Set Typematic Reate/Delay* F3
Enable* F4
Default Disable* F5
Set Default* F6
Set All Keys - Typematic F7
Set All Keys - Make/Break F8
Set All Keys - Make F9
Set All Keys - Typematic/Make/Break FA
Set Key Type - Typematic FB
Set Key Type - Make/Break FC
Set Key Type - Make FD
Resend* FE
Reset* FF

*: 84-key supports only these commands

Set/Reset Status Indicators(ED)

Bit Indicator
0 Scroll Lock
1 Num Lock
2 Caps Lock

Select Alternate Scan Codes(F0)

Tested F0 command with some keyboards. IBM 122-key doesn't support F0 commad at all. Cherry supports Set 2 and 3 while SKIDATA supports all 3 sets.

keyboard F0 00 F0 01 F0 02 F0 03
IBM 122-key 6110345 FE FE FE FE FE FE FE FE
Cherry G80-3600 FA FA 02 FA FE FA FA FA FA
SKIDATA2-DE FA FA 02 FA FA FA FA FA FA
Cherry G80-2551 ? ? ? FA FA

It seems SKIDATA stores 'Code Set' setting in nonvoliatile memory beyond power cycles until 'FF' reset command is received. Reset command restores to default Code Set 2.

https://geekhack.org/index.php?topic=103648.msg2894921#msg2894921

Commands to the System

p.163(4-12) of http://bitsavers.org/pdf/ibm/pc/at/6183355_PC_AT_Technical_Reference_Mar86.pdf

Command Hex Value
ACK FA
BAT Completion AA
Break Code Prefix F0
BAT Failure FC
Echo Response EE
Resend FE
Keyboard ID 83AB
Key Detection Error 00(scan code set 2 and 3) FF(sacn code set 1)
Overrun 00(scan code set 2 and 3) FF(scan code set 1)

Error handling

When keyboard response to command and data from host has parity or other error, Resend(FE) should net be sent.

If the keyboard response is invalid or has a parity error, the system sends the command or data again.

When host receives data with prirty error, host sends Resend(FE) command.

http://halicery.com/8042/8042_1503033.TXT 0160:

Keyboard ID

AT keyboard can accept 'read keyboard ID' F2 command and replies with ACK FA and 2-byte ID then. XT keyboard doesn't support the command at all.

https://www.win.tue.nl/~aeb/linux/kbd/scancodes-10.html#keyboardid

IBM AT 84-key

When sent an identify command (0xF2), the keyboard responds only with 0xFA (acknowledge). https://www.seasip.info/VintagePC/ibm_6450225.html

But it doesn't response with ID atfter receiving the command.

Zenith Z-150 AT

It just ignore the command and reply nothing. The keyboard doesn't even reply with 0xFA.

https://deskthority.net/viewtopic.php?p=495196#p495196

AB83

Most of PS/2 Keyboards has this ID.

AB84

Many short keyboards without numeric keypad, like IBM ThinkPads, and Spacesaver keyboards(Tenkeyless)

OADG space saving 4-14

AB85

NCD N-97

It speaks in Code Set 3. https://www.win.tue.nl/~aeb/linux/kbd/scancodes-7.html#NCD97

IBM 122-key Model M 1393656

https://deskthority.net/viewtopic.php?p=308583#p308583

AB86

Cherry G80-2551 126-key terminal keyboard

It sends scan codes in Set 2 by default and can be switched to Set 3.

https://deskthority.net/wiki/Cherry_G80-2551

https://geekhack.org/index.php?topic=103648.msg2893404#msg2893404

IBM 1397000 Keyboard

http://www.seasip.info/VintagePC/ibm_1397000.html

The Affirmative 1227T Keyboard

http://www.seasip.info/Misc/1227T.html

Unicomp UB40856

https://geekhack.org/index.php?topic=17458.msg648235#msg648235

Other 122-key keyboards

Several 122-key keyboards are reported to send ab 86. Here translated and untranslated values coincide. (Reports mention "122-Key Enhanced Keyboard", "standard 122-key keyboard", "122 Key Mainframe Interactive (MFI) Keyboard", "122-Key Host Connected Keyboard".)

https://www.win.tue.nl/~aeb/linux/kbd/scancodes-10.html#keyboardid

AB90

IBM 5576-002 KEYBOARD-2, part number 94X1110

This Japanese keyboard can be switched to Code Set 3. https://www.win.tue.nl/~aeb/linux/kbd/scancodes-8.html#bradford

http://radioc.web.fc2.com/column/ps55/ps55kbd_scancode.htm

AB91

IBM 5576-003

http://radioc.web.fc2.com/column/ps55/ps55kbd_scancode.htm

Televideo 990/995 DEC Style

The keyboard has PS/2 connector and it supports 1, 2 and 3 code set. It starts up with Code Set 1, but some keys don't seem to be usable with Code Set 1 and 2.

Keyboard ID of other styles(AT and ASCII) is unknwon. ASCII style seems to use AT signal with Code Set 1: https://deskthority.net/viewtopic.php?p=427957#p427957

AB92

IBM 5576-001

Code Set 2 is only supported. Code Set 2 by default and Code Set 3 and 82h also are supported at least.

https://github.com/tmk/tmk_keyboard/issues/685#issuecomment-850741943

http://radioc.web.fc2.com/column/ps55/ps55kbd_scancode.htm

BFBF

IBM Terminal 122-key

Code Set 3. ID can be configured with DIP swithes or pins.

http://www.seasip.info/VintagePC/ibm_1390876.html

http://www.seasip.info/VintagePC/ibm_6110344.html

7F7F

IBM Terminal 101-key

Code Set 3: https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-Keyboard-Converter#ibm-terminal-101-key102-key-and-ibm-rt

1394204: https://github.com/tmk/tmk_keyboard/issues/687

It doesn't seem to be configurable of keyboard ID.

https://user-images.githubusercontent.com/7271421/120395902-0f766600-c336-11eb-9fc2-607a3a43a558.jpeg

It doesn't support F0 command and always uses Code Set 3.

https://github.com/tmk/tmk_keyboard/issues/687#issuecomment-852610160

BFB0

IBM RT Keyboard

Code Set 3: https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-Keyboard-Converter#ibm-terminal-101-key102-key-and-ibm-rt

https://deskthority.net/viewtopic.php?p=105422#p105422

It takes long to response commands and its num lock and caps lock LEDs are swapped.

https://deskthority.net/viewtopic.php?p=105161#p105161

IBM RT PC Hardwahre Technical Reference:

http://bitsavers.org/pdf/ibm/pc/rt/75X0232_RT_PC_Technical_Reference_Volume_1_Jun87.pdf

https://archive.org/details/bitsavers_ibmpcrt75XferenceVolume1Jun87_19098532/page/n481/mode/1up

Command F2 and ED(p.9-5):

Command Description
F2 Read ID: Respond with X'BFB0'.
ED Set LED indicator: The LED indicators are set according to bits 5, 6, 7 of the subsequent byte.
Bit LED
5 Num lock
6 Caps lock
7 Scroll lock

BFB1

IBM RT Keyboard(Code Set 3) ISO layout

https://github.com/tmk/tmk_keyboard/issues/723#issuecomment-1079764826

https://user-images.githubusercontent.com/48164352/160263774-c41bd622-53fb-4b70-8d9c-29e0e7bc5b81.jpeg

00

All PS/2 Mouses send AA 00 at startup and responds with one-byte 00 to F2 command.

Microsoft IntelliMouse and ExplorerMouse respods with id 03 and 04 respectively after proprietary intialization command sequence.

Keyboard ID configuration

IBM 1389160 122 Key Terminal Keyboard

DIP Switch: 0100 0000(~0xBF) pic

https://www.recycledgoods.com/ibm-1389160-122-key-terminal-keyboard-5-pin-din-model-m/

IBM 1389162

https://imgur.com/a/tIonH

DIP Switch: 0111 1110(~0x81?): https://i.imgur.com/hRaltjN.jpg

How DIP Switch wired to controller: https://i.imgur.com/15r5gav.jpg?1

IBM 1390413

https://deskthority.net/viewtopic.php?f=62&t=14734

DIP Switch: 1001 0000(~0x6F?): https://deskthority.net/download/file.php?id=33588

IBM 6110668 - Terminal Model F

DIP Switch: 0000 0000

https://www.flickr.com/photos/triplehaata/sets/72157662296508556/

IBM 1390876

When sent an identify command (0xF2), the keyboard returns the byte sequence 0xBF 0xBF. However, this can be changed. On the keyboard PCB is a 12-pin header, marked as 6 pairs of pins (B2-B7). These correspond to bits 5-0 of the second byte of the keyboard ID. Shorting a pair of pins sets that bit to zero. So placing a jumper on the B2 pair will change the keyboard ID to 0xBF 0x9F.

Adjacent to this header is a space on the circuit board for an identical header, marked as pins A2-A7. Presumably these would have the same effect on the first byte of the keyboard ID.

http://www.seasip.info/VintagePC/ibm_1390876.html#Identity

IBM 6110344

DIP Switch: 0000 0000

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). The other four pairs of pins correspond to bits 3-0 of the second ID byte; these would need to be set with jumpers.

http://www.seasip.info/VintagePC/ibm_6110344.html

Scan Codes

This lists scan codes supported by Windows.

https://web.archive.org/web/20090206085854/http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf

'Keyboard Scan Code Specification Appendix A' of Microsoft gives really details for Scan Code Set 1 and 2.

https://babbage.cs.qc.cuny.edu/courses/cs345/Manuals/ms_scancode.pdf

https://web.archive.org/web/20201112031338/download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc

0x00 and 0xFF should not be used as scan code. 0x00 indicates error in scan code set 2 and 3 while 0xFF does in scan code set 1. (P.199/4-48) The system defaults to scan set 2, but can be switched to set 1 or set 3. (p.200)

http://bitsavers.org/pdf/ibm/pc/at/6183355_PC_AT_Technical_Reference_Mar86.pdf

Scan Code Set 1

IBM XT 83-key

https://www.seasip.info/VintagePC/ibm_1501105.html

Open

Scan Code Set 2

The break code consists of 2 bytes, the first of which is the break code prefix, hex F0; the second byte is the same as the make scan code for that key.

Universal 128-key

This is colleciton of common scan codes form variaous available resources.

Scan Code Set 2:
        ,-----------------------------------------------.
        |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|   | 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|^5D| 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
+7C: E0 12 E0 7C
+77: E1 14 77 E1 F0 14 F0 77
^: ISO hash key uses identical scancode 5D to US backslash.
51, 63, 68, 6A, 6D: Hidden keys in IBM model M [6]

Exceptional Key Handling

Microsoft Keyboard Scan Code Specification

Open
/*******************************************************************************
 * AT, PS/2: Scan Code Set 2
 *
 * Exceptional Handling
 * --------------------
 * Some keys should be handled exceptionally. See [b].
 *
 * Scan codes are varied or prefix/postfix'd depending on modifier key state.
 *
 * 1) Insert, Delete, Home, End, PageUp, PageDown, Up, Down, Right, Left
 *     a) when Num Lock is off
 *     modifiers | make                      | break
 *     ----------+---------------------------+----------------------
 *     Ohter     |                    <make> | <break>
 *     LShift    | E0 F0 12           <make> | <break>  E0 12
 *     RShift    | E0 F0 59           <make> | <break>  E0 59
 *     L+RShift  | E0 F0 12  E0 F0 59 <make> | <break>  E0 59 E0 12
 *
 *     b) when Num Lock is on
 *     modifiers | make                      | break
 *     ----------+---------------------------+----------------------
 *     Other     | E0 12              <make> | <break>  E0 F0 12
 *     Shift'd   |                    <make> | <break>
 *
 *     Handling: These prefix/postfix codes are ignored.
 *
 *
 * 2) Keypad /
 *     modifiers | make                      | break
 *     ----------+---------------------------+----------------------
 *     Ohter     |                    E0 4A  | E0 F0 4A
 *     LShift    | E0 F0 12           E0 4A  | E0 F0 4A E0 12
 *     RShift    | E0 F0 59           E0 4A  | E0 F0 4A E0 59
 *     L+RShift  | E0 F0 12  E0 F0 59 E0 4A  | E0 F0 4A E0 59 E0 12
 *
 *     Handling: These prefix/postfix codes are ignored.
 *
 *
 * 3) PrintScreen
 *     modifiers | make         | break
 *     ----------+--------------+-----------------------------------
 *     Other     | E0 12  E0 7C | E0 F0 7C  E0 F0 12
 *     Shift'd   |        E0 7C | E0 F0 7C
 *     Control'd |        E0 7C | E0 F0 7C
 *     Alt'd     |           84 | F0 84
 *
 *     Handling: These prefix/postfix codes are ignored, and both scan codes
 *               'E0 7C' and 84 are seen as PrintScreen.
 *
 * 4) Pause
 *     modifiers | make(no break code)
 *     ----------+--------------------------------------------------
 *     Other     | E1 14 77 E1 F0 14 F0 77
 *     Control'd | E0 7E E0 F0 7E
 *
 *     Handling: Both code sequences are treated as a whole.
 *               And we need a ad hoc 'pseudo break code' hack to get the key off
 *               because it has no break code.
 *
 * Notes:
 * 'Hangul/English'(F1) and 'Hanja'(F2) have no break code. See [a].
 * These two Korean keys need exceptional handling and are not supported for now.
 *
 */

https://github.com/tmk/tmk_keyboard/blob/c6a6049bc85609b05a6502dbbed524d669b2b7a5/converter/ibmpc_usb/ibmpc_usb.c#L605-L668

System Request and Print Screen

The 'System Request' key(0x84) was introduced on IBM PC/AT 84-key and integrated into 'Print Screen' key later on Enhanced 101-key. Alt + 'Print Screen' generates scan code 0x84 on Enhanced keyboard.

https://en.wikipedia.org/wiki/System_request

Media keys

Key                     Scan Code   HID
----------------------------------------------
Scan Next Track         E0 4D       0C 00B5
Scan Previous Track     E0 15       0C 00B6
Stop                    E0 3B       0C 00B7
Play/ Pause             E0 34       0C 00CD
Mute                    E0 23       0C 00E2
Volume Up               E0 32       0C 00E9
Volume Down             E0 21       0C 00EA
Media Select            E0 50       0C 0183
Mail                    E0 48       0C 018A
Calculator              E0 2B       0C 0192
My Computer             E0 40       0C 0194
WWW Search              E0 10       0C 0221
WWW Home                E0 3A       0C 0223
WWW Back                E0 38       0C 0224
WWW Forward             E0 30       0C 0225
WWW Stop                E0 28       0C 0226
WWW Refresh             E0 20       0C 0227
WWW Favorites           E0 18       0C 022A
System Power            E0 37       01 81
System Sleep            E0 3F       01 82
System Wake             E0 5E       01 83

IBM AT 84-key

As the page below refers, this is completely subset of Code Set 3 in terms of key positions including hidden keys. It is correspond to Code Set 2 in terms of key ledgends.

https://www.seasip.info/VintagePC/ibm_6450225.html

Open

IBM 102-key

https://www.seasip.info/VintagePC/ibm_1391406.html

Open

Tandberg TDV 5020

TANDBERG DATA keyboard TDV 5020 made in Norway

Note that usual PS/2 cable in the market doesn't work with this keyboard. Original Tandberg cable is needed, otherwise you have to make cable.

TDV 5020 has Mini-DIN 6P female connector on back side and the connector pinouts are diffrent from PS/2 standard.

Mini-DIN 6P connector Pinouts:
        PS/2    TDV 5020
Data    1   -   4
Gnd     3   -   5
Vcc     4   -   1
Clock   5   -   3
Open
,---.   ,---------------.  ,---------------.  ,---------------. ,-----------. ,---------------.
|Esc|   |F1 |F2 |F3 |F4 |  |F5 |F6 |F7 |F8 |  |F9 |F10|F11|F12| |PrS|ScL|Pau| |MRK|ANG|SKR|SLU|
`---'   `---------------'  `---------------'  `---------------' |-----------| |---------------|
                                                                |STR|KPI|FLT| |FLT|AVS|STN|ORD|
,-------------------------------------------------------------. |-----------| |---------------|
|    §|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0| + |  \|  ⮎|Bsp| |Ins|Hom|PgU| |NmL|  /|  *|  -|
|-------------------------------------------------------------| |-----------| |---------------|
|Hlp|Tab|  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  Å|  ~ |    | |Del|End|PgD| |  7|  8|  9|   |
|--------------------------------------------------------|    | |-----------| |-----------|  +|
|^^^|Caps|  A|  S|  D|  F|  G|  H|  J|  K|  L|  Ø|  Æ| ' |Entr| | >>|JST| <>| |  4|  5|  6|   |
|-------------------------------------------------------------| |-----------| |---------------|
| Shift|  <|  Z|  X|  C|  V|  B|  N|  M|  ,|  .| - | Shift| ⇟ | | ⭰ | 🠕 | ⇥ | |  1|  2|  3|Ent|
|-------------------------------------------------------------| |-----------| |-----------|   |
|Ctl|      |Alt|    |        Space         |   |Agr|      |Ctl| | ← | ↓ | → | |      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
^: 80-prefixed codes

MERK  (mark)
ANGRE (undo)
SKRIV (print)
SLUTT (end)
STRYK (cut)
KOPI  (copy)
FLYTT (move)
FELT  (cell)
AVSN  (paragraph)
SETN  (sentence)
ORD   (word)
⮎     (?)
HJELP (help)
^^^   (?)
>>/<< (left/right adjust)
JUST  (adjust)
>< <> (center/block)
⇟     (three lines down)
⇤     (start of line)
⇥     (end of line)

SKIDATA2-DE(KCX50BK02-DE) by TIPRO

https://gist.github.com/tmk/22b381c13f9a87b2e314d4caf578ac8d

Cherry G80-2551 in Code Set 2

The keyobard stars up with Code Set 2 and can be switched to Code Set 3. Code Set 2 mapping doesn't seeem to be useful.

Siemens F500

https://github.com/tmk/tmk_keyboard/pull/760#issuecomment-1585421234

  • Keyboard ID: AB83

'TERM FUNC' key sneds special scan code sequence: rE0 r12 rE0 r00 rE0 rF0 r00 rE0 rF0 r12

Open
TMK:b604da/LUFA:d6a7df

USB configured.

Loop start.
I2500 I2500 
2501 PRT:10 ISR:EA90 rAA A5501 wFF rFA A5504 wFF R R R R R R R R R R rAA W6213 
6213 ERR:11 ISR:8000 wF2 rFA rAB r83 R6719 
ID:AB83(AT) S6719 wED rFA w02 rFA L6726 X6726 

rE0 r12 rE0 r00 rE0 rF0 r00 rE0 rF0 r12

https://deskthority.net/viewtopic.php?t=22062

Siemens S26381-K257-L120

https://geekhack.org/index.php?topic=103648.msg3033910#msg3033910

  • Keyboard ID: AB83
Open

Should be confirmed and fixed.

,-------. ,-------------------------------------------------------------------------------------------.
| x | - | |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|
`-------' `-------------------------------------------------------------------------------------------'
| - | - | |Esc|F13|Alt|F15|F14|Mhn|Ins|PrS| RO|nHS|Mut|F22|Hnk|JPY|KP=|End|F17|PrS|ScL|Pau|F16|NmL|Gui|
`-------' `-------------------------------------------------------------------------------------------'
,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.
| F1| F2| |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|JPY|Bsp| |Ins|Hom|PgU| |NmL|  /|  *|  -|
|-------| |-----------------------------------------------------------| |-----------| |---------------|
| F3| F4| |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]  |   | |Del|End|PgD| |  7|  8|  9|  +|
|-------| |-------------------------------------------------------|   | |-----------| |---------------|
| F5| F6| |CapsL |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  # |Ent| |   |   |   | |  4|  5|  6|  ,|
|-------| |-----------------------------------------------------------| `---,---.---' |---------------|
| F7| F8| |Shft|  <|  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /| 59   |   |     |Up |     |  1|  2|  3|Ent|
|-------| |-------------------------------------------------------|   | ,-----------. |-----------|   |
| F9|F10| | Ctrl|App| Alt |      Space                | Alt | Ctrl|F21| |Lef|Dow|Rig| |      0|  .|   |
`-------' `-----------------------------------------------------------' `-----------' `---------------'
                    
,-------. ,-------------------------------------------------------------------------------------------.
| x | - | | 05| 06| 04| 0C| 03| 0B| 83| 0A| 01| 09| 78| 07| 08| 10| 18| 20| 28| 30| 38| 40| 48| 50| 57|
`-------' `-------------------------------------------------------------------------------------------'
| - | - | | 76| 08| 0F| 18| 10| 67|*70| 84| 51| 68| 6F| 50| 64| 6A| 63| 5C| 28|+7C| 7E|+77| 20| 77| 17|
`-------' `-------------------------------------------------------------------------------------------'
,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.
| 05| 06| | 0E| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55| 6A| 66| |*70|*6C|*7D| | 77|*4A| 7C| 7B|
|-------| |-----------------------------------------------------------| |-----------| |---------------|
| 04| 0C| | 0D  | 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D| 54| 5B  |   | |*71|*69|*7A| | 6C| 75| 7D| 79|
|-------| |-------------------------------------------------------|   | |-----------| |---------------|
| 03| 0B| | 58   | 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52| 5D | 5A| |   |   |   | | 6B| 73| 74| 6D|
|-------| |-----------------------------------------------------------| `---,---.---' |---------------|
|*83| 0A| | 12 | 61| 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A| 59   |   |     |*75|     | 69| 72| 7A|*5A|
|-------| |-------------------------------------------------------|   | ,-----------. |-----------|   |
| 01| 09| | 14  | 27| 11  |      29                   | *11 | *14 | 48| |*6B|*72|*74| |     70| 71|   |
`-------' `-----------------------------------------------------------' `-----------' `---------------'

Scan codes for the second row from the top:

Key: ESC markier/CH.CODE Blind druck 1/MODE druck 2/DRUCK Blind Zeichen WORT Zeile Blind Zeichen Daten/WORT Zeile Blind >/HELP </START ^/END DRUCK K1/ROLL K2/PAUSE skip/K3 lö.Bild/rs.Anz./NumL Blind
Scan Code: r76 r08 r0F r18 r10 r67 rE0+r70 r84 r51 r68 r6F r50 r64 r6A r63 r5C r28 rE0+r12+rE0+r7C r7E rE1+r14+r77 r20 r77 r17
TMK unimap: Esc F13 RALT F15 F14 MHEN Insert PrintScreen RO NUHS MUTE F22 HENK JYEN KP= END F17 PrintScreen ScrollLock Pause F16 Num Lock LGUI

Scan codes for bottom row:

Keys: CTRL Blind ALT Spacebar Compose/AltGr </CTRL Send/Menu
Scan code: r14 r27 r11 r29 rE0+r11 rE0+r14 r48
TMK unimap: LCTL APP LALT Alt SPACE RALT RCTL F21

https://geekhack.org/index.php?topic=103648.msg3033527#msg3033527

AX keyboard

OADG B-3

  • Keyboard ID: AB83
Open
,---.   ,---------------. ,---------------. ,---------------. ,-----------.
|AX |   |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|  -|  =|JPY|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|  ,|  .|  /| RO|Shift |     |Up |     |  1|  2|  3|Ent|
|-----------------------------------------------------------| ,-----------. |-----------|   |
|Caps |   | Alt | MHEN |  SPC  |   HENK    | KANJI|   |KANA | |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
AX Scan Code TMK converter
AX 27 App
無変換 17 LGui
変換 1F RGui
漢字 E0 11 RAlt
カナ E0 14 RCtl
61 NUBS
JPY 5D Backslash
`~ ム 0E Grave

AX keyboard doesn't comform to standard code set 2 and uses ID:AB83 as other normal keyboards.

https://i.imgur.com/dhCaTfN.jpg?1

Scan Code Set 3

The break code consists of 2 bytes, the first of which is the break-code prefix, hex F0; the second byte is the same as the make scan code for that key.

http://www.mcamafia.de/pdf/ibm_hitrc11.pdf

IBM Terminal 122-key

https://www.seasip.info/VintagePC/ibm_6110344.html https://www.seasip.info/VintagePC/ibm_1390876.html

IBM Terminal 101-key/102-key

Open
,---.   ,---------------. ,---------------. ,---------------. ,-----------. 
|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|
`-----'   `---------------------------------------'   `-----' `-----------' `---------------'

G80-2551 in Code Set 3

The keyboard can be switch to Scan Code Set 3 with 'Select Alternate Scan Codes'command (F0 03). Its scan codes are identical to IBM 122-key terminal keyboard except for four extra key around cursors.

Open
              ,-----------------------------------------------.
              | 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|     66| | 67| 6E| 6F| | 76| 77| 7E| 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 | |-26| 63|-25| | 6B| 73| 74| 7B|
|-------| |-----------------------------------------------------------| |-----------| |---------------|
| 83| 0A| | 12 | 13| 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A|      59  | | 61| 62| 6A| | 69| 72| 7A| 79|
|-------| |-----------------------------------------------------------| |-----------| |-----------|   |
| 01| 09| | 11  |   |19  |        29                   |39  |   | 58  | |-16| 60|-1E| |     70| 71|   |
`-------' `-----'   `---------------------------------------'   `-----' `-----------' `---------------'
-: 0x80 prefixed(G80-2551 specific)

Televideo 990/995 DEC Style in Code Set 3

Open
  ,-------------------.  ,-------------------.  ,---------------.   ,-----------. ,---------------.
  |F1 |F2 |F3 |F4 |F5 |  |F6 |F7 |F8 |F9 |F10|  |F11|F12|F13|F14|   |Hlp|Do     | |F17|F18|F19|F20|
  `-------------------'  `-------------------'  `---------------'   `-----------' `---------------'
,-----------------------------------------------------------------. ,-----------. ,---------------.
|Esc|  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Del  |Bsp| |   |   |   | |PF1|PF2|PF3|PF4|
|-----------------------------------------------------------------| |-----------| |---------------|
    |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]| Entr|   |   |   |   | |  7|  8|  9|  -|
 |----------------------------------------------------------    |   `-----------' |---------------|
 |Ctl|CapsL|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '| \ |    |       | Up|     |  4|  5|  6|  ,|
 |--------------------------------------------------------------|_  ,-----------. |---------------|
 | Shft |  <|  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|  Shift |LF  | |Lef|Dow|Rig| |  1|  2|  3|Ent|
 `----------------------------------------------------------------' `-----------' |-----------|   |
      |    | alt|      Space                | alt|    |                           |      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|   |
      `-----------------------------------------------'                           `---------------'

G80-3600 and SKIDATA2-DE in Code Set 3

Japanese specific keys and extra keys of modern PC keyboard

Key Code
無変換(Japanese Muhenkan) 85
変換(Japanese Henkan) 86
ひらがな 87
LGUI 8B
RGUI 8C
Application 8D

IBM 5576 Scan Codes Set

The 5576 keyboard series supports special code sets.

The 5576 keyboads starts up with Code Set 2 which doesn't enable Japanese specific keys and emulates US layout. Code Set 2 is not useuful in fact. TMK IBMPC converter uses Code Set 3 for 5576-001 and Code Set 82h for 5576-002 and 5576-003. Resouces says 5576-001 doesn't support Code Set 1, 3 and 81h, though, 5576-001 can work with Code Set 3 actually.

5576-A01 is completely compatible to standard Japanese PS/2 keyboard.

Code Set Description
1 without Japanese specific key support
2 without Japanese specific key support
3 All keys can be used
81h Code Set 1 with Japanese specific key support
82h Code Set 2 with Japanese specific key support
8Ah IBM 5550 compatible

https://diarywind.com/blog/e/ibm-5576002-keyboard-info.html

http://radioc.web.fc2.com/column/ps55/ps55kbd_scancode.htm

https://www.win.tue.nl/~aeb/linux/kbd/scancodes-8.html#ss8.3

IBM 5576 Keyboard Layout

5576-001:

Open

5576-002:

Open

5576-003:

Open

5576-A01:

Open

IBM 5576 Code Set 82h

5576-002/003

This should be confirmed.

Open
IBM 5576-002 Code Set 82h:
,---.   ,---------------. ,---------------. ,---------------. ,-----------.
|Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
`---'   `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------. ,---------------.
|  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =| ¥|Bsp| |Ins|Hom|PgU| |  *|  /|  ,|  -|
|-----------------------------------------------------------| |-----------| |---------------|
|Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  @|  [|     | |Del|End|PgD| |  7|  8|  9|  +|
|------------------------------------------------------`Entr| `-----------' |-----------|   |
|CapsL |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  :|  ]|    |               |  4|  5|  6|   |
|-----------------------------------------------------------|     ,---.     |---------------|
|Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /| RO|Shift |     |Up |     |  1|  2|  3|Ent|
|-----------------------------------------------------------| ,-----------. |-----------|   |
| Ctrl|   |漢字  | MHEN | Space | HENK | ひら | 前面|   | Ctrl| |Lef|Dow|Rig| |      0|  .|   |
`-----'   `---------------------------------------'   `-----' `-----------' `---------------'
,---.   ,-----------------------------------------------.     ,-----------.
| 76|   | 05| 06| 04| 0C| 03| 0B| 83| 0A| 01| 09| 78| 07|     |+7C| 7E|+77|
`---'   `-----------------------------------------------'     `-----------'
,-----------------------------------------------------------. ,-----------. ,---------------.
|-62| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55|-5D| 66| |*70|*6C|*7D| |-7C|*4A|*41| 7B|
|-----------------------------------------------------------| |-----------| |---------------|
| 0D  | 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D|-0E|-54|     | |*71|*69|*7A| | 6C| 75| 7D|   |
|------------------------------------------------------`    | `-----------' |-----------| 79|
| 58   | 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52|-5B| 5A |               | 6B| 73| 74|   |
|-----------------------------------------------------------|     ,---.     |---------------|
| 12     | 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A| 51|  59  |     |*75|     | 69| 72| 7A|   |
|-----------------------------------------------------------| ,-----------. |-----------|*5A|
| 14  |   | -13 |  67  |  29   |  64  | *11 |  11 |   | *14 | |*6B|*72|*74| |     70| 71|   |
`-----'   `---------------------------------------'   `-----' `-----------' `---------------'
*: E0 prefixed
+: Special scan code sequence
-: 5576 specific
Speculation from 5576-001 CS82h and Quckey! translation table.


Mapping after translation by TMK IBMPC converter:
,---.   ,---------------. ,---------------. ,---------------. ,-----------.
|Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
`---'   `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------. ,---------------.
|  `|  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|  +|
|------------------------------------------------------`Entr| `-----------' |-----------|   |
|CapsL |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  \|    |               |  4|  5|  6|   |
|-----------------------------------------------------------|     ,---.     |---------------|
|Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /| RO|Shift |     |Up |     |  1|  2|  3|Ent|
|-----------------------------------------------------------| ,-----------. |-----------|   |
| Ctrl|   | LAlt| MHEN | Space | HENK | KANA| RAlt|   | Ctrl| |Lef|Dow|Rig| |      0|  .|   |
`-----'   `---------------------------------------'   `-----' `-----------' `---------------'

Quckey! Converter sets 82h Code Set and translates some of 5576-002/003 codes to normal Code Set 2 codes.

5576 Code 5576 Key CS2 Code CS2 Key
0E @ 54 [
11 前面キー E0 11 RAlt
13 漢字 カタカナ 11 LAlt
54 [ 5B ]
5B ] 5D \
5C ??? 6A JPY
5D 6A JPY
62 半角/全角 0E `
7C Keypad* 77 NumLock
E0 11 ひらがな 13 KANA
E0 41 Keypad, 7C Keypad*

5576-001

Code Set 82h is not useful for 5576-001, which is a terminal keyboard and works better with Code Set 3.

Open
5576-001 124-key Code Set 82h:
             ,---------------.  ,---------------.  ,---------------.                                                   
             |^7C| 7E| 1F| 27|  | 2F| 5E| 08| 10|  | 50| 18| 17| 37|                                                   
             |----------------  |----------------  |---------------|
             | 05| 06| 04| 0C|  | 03| 0B| 83| 0A|  | 01| 09| 78| 07|
             `---------------'  `---------------'  `---------------'
,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.                
| 5F| 48| | 76| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55| 5D| 66| |*7D|*69|*7A| | 7C|*4A|*41| 7B|                
|-------| |-----------------------------------------------------------| |-----------| |---------------|                
| 38|^77| | 0D  | 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D| 0E| 54|     | |*70|*71|*40| | 6C| 75| 7D| 79|                
|-------| |------------------------------------------------------`    | `-----------' |---------------|                
| 30| 62| | 13   | 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52| 5B| 5A |     |*75|     | 6B| 73| 74|   |                
|-------| |-----------------------------------------------------------| ,-----------. |-----------|   |                
| 20| 28| | 12     | 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A| 51|  59  | |*6B|*6C|*74| | 69| 72| 7A|*5A|                
|-------| |-----------------------------------------------------------| `-----------' |-----------|   |                
| 60| 14| | 11  |  |  58  |  67   |  29   |  64   |*11 |        |*14  |     |*72|     |     70| 71|   |                
`-------' `-----'  `-----------------------------------'        `-----'     `---'     `---------------'                
*: E0 prefixed                                                                                                         
^7C: rE0 r12 rE0 r7C rE0 rF0 r7C rE0 rF0 r12
^77: rE1 r14 r77 rE1 rF0 r14 rF0 r77

https://github.com/tmk/tmk_keyboard/issues/685#issuecomment-850855323

IBM 5576 Code Set 3

5576-001

Open
IBM 5576-001 124-key Code Set 3:
             ,---------------.  ,---------------.  ,---------------.
             | 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|   |   
`-------' `-----'  `-----------------------------------'        `-----'     `---'     `---------------'
+: different from IBM 122-key Terminal [5D->13, 51->5C, 76->7E, 7E->76]

https://github.com/tmk/tmk_keyboard/issues/685#issuecomment-850761559

Translation to Set 1 of i8042

|SC|00|01|02|03|04|05|06|07|08|09|0a|0b|0c|0d|0e|0f|
|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|00|ff|43|41|3f|3d|3b|3c|58|64|44|42|40|3e|0f|29|59|
|10|65|38|2a|70|1d|10|02|5a|66|71|2c|1f|1e|11|03|5b|
|20|67|2e|2d|20|12|05|04|5c|68|39|2f|21|14|13|06|5d|
|30|69|31|30|23|22|15|07|5e|6a|72|32|24|16|08|09|5f|
|40|6b|33|25|17|18|0b|0a|60|6c|34|35|26|27|19|0c|61|
|50|6d|73|28|74|1a|0d|62|6e|3a|36|1c|1b|75|2b|63|76|
|60|55|56|77|78|79|7a|0e|7b|7c|4f|7d|4b|47|7e|7f|6f|
|70|52|53|50|4c|4d|48|01|45|57|4e|51|4a|37|49|46|54|
|80|--|--|--|41|54|--|--|--|--|--|--|--|--|--|--|--|
|90|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|a0|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|b0|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|c0|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|d0|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|e0|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|f0|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|

https://www.win.tue.nl/~aeb/linux/kbd/scancodes-10.html#ss10.3

Translation table is found at 0x0300 and 0x017F of keyboard controller 8042 ROM on IBM 5170(1983).

http://www.halicery.com/8042/8042_1503033.TXT

0x7F(SysRq on Zenith Z-150 AT) and 0x84(SysRq on 84-key, Alt+Print Screen on 101-key) of CS2 are translated into 0x54(Alt+PrtSc*) of CS1. 0x02(not used) and 0x83(F7) of CS2 are translated into 0x41(F7) of CS1.

https://geekhack.org/index.php?topic=103648.msg2897404#msg2897404

Open
CS2      CS2 Key                    CS1     CS1 Key
-----------------------------------------------------------------------
00       Pause(TMK)                 ff      ??
01       F9                         43
02       F7(TMK)                    41      F7
03       F5                         3f
04       F3                         3d
05       F1                         3b
06       F2                         3c
07       F12                        58
08       F13                        64
09       F10                        44
0a       F8                         42
0b       F6                         40
0c       F4                         3e
0d       Tab                        0f
0e       ` ~                        29
0f       Keypad =                   59
10       F14                        65
11       Left Alt                   38
12       Left Shift                 2a
13       Katakana/Hiragana          70      Kana(TMK)
14       Left Control               1d
15       q Q                        10
16       1 !                        02
17       LGui(TMK)                  5a      LGui(TMK)
18       F15                        66
19       RCtrl(TMK)                 71      Insert(TMK)
1a       z Z                        2c
1b       s S                        1f
1c       a A                        1e
1d       w W                        11
1e       2 @                        03
1f       RGui(TMK)                  5b      RGui(TMK)
20       F16                        67
21       c C                        2e
22       x X                        2d
23       d D                        20
24       e E                        12
25       4 $                        05
26       3 #                        04
27       (PC9800 Keypad , )         5c
28       F17                        68
29       Space                      39
2a       v V                        2f
2b       f F                        21
2c       t T                        14
2d       r R                        13
2e       5 %                        06
2f       Home(TMK)                  5d      Mute(TMK)
30       F18                        69
31       n N                        31
32       b B                        30
33       h H                        23
34       g G                        22
35       y Y                        15
36       6 ^                        07
37       Delete(TMK)                5e      VolDown(TMK)
38       F19                        6a
39       Insert(TMK)                72      Delete(TMK)
3a       m M                        32
3b       j J                        24
3c       u U                        16
3d       7 &                        08
3e       8 *                        09
3f       Down(TMK)                  5f      VolUp(TMK)
40       F20                        6b
41       , <                        33
42       k K                        25
43       i I                        17
44       o O                        18
45       0 )                        0b
46       9 (                        0a
47       Right(TMK)                 60      Up(TMK)
48       F21                        6c
49       . >                        34
4a       / ?                        35
4b       l L                        26
4c       ; :                        27
4d       p P                        19
4e       - _                        0c
4f       Up(TMK)                    61      Left(TMK)
50       F22                        6d
51       ろ (Ro)                    73
52       ' "                        28
53       Left(TMK)                  74      Home(TMK)
54       [ {                        1a
55       = +                        0d
56       PageDown(TMK)              62      Down(TMK)
57       F23                        6e      F23(TMK)
58       Caps Lock                  3a
59       Right Shift                36
5a       Return                     1c
5b       ] }                        1b
5c       End(TMK)                   75      End(TMK)
5d       \ | (or Europe 1)          2b
5e       PageUp(TMK)                63      Right(TMK)
5f       F24 (or 半角/全角)         76
60       Keypad /(TMK)              55      Pause(TMK)
61       Europe 2 (Note 2)          56
62       Keypad Enter(TMK)          77      PageUp(TMK)
63       Keypad =(TMK)              78      PageDown(TMK)
64       変換(Henkan)               79      Henkan(TMK)
65       VolDown(TMK)               7a      RCtrl(TMK)
66       Backspace                  0e
67       無変変(Muhenkan)           7b      Muhenkan(TMK)
68       Non-US #(TMK)              7c      RAlt(TMK)
69       Keypad 1 End               4f
6a       ¥ (Yen)                    7d      JYEN(TMK)
6b       Keypad 4 Left              4b
6c       Keypad 7 Home              47
6d       Keypad ,                   7e
6e       VolUp(TMK)                 7f      Keypad /(TMK)
6f       Mute(TMK)                  6f      Keypad Enter(TMK)
70       Keypad 0 Insert            52
71       Keypad . Delete            53
72       Keypad 2 Down              50
73       Keypad 5                   4c
74       Keypad 6 Right             4d
75       Keypad 8 Up                48
76       Escape                     01
77       Num Lock                   45
78       F11                        57
79       Keypad +                   4e
7a       Keypad 3 PageDn            51
7b       Keypad -                   4a
7c       Keypad *                   37
7d       Keypad 9 PageUp            49
7e       Scroll Lock                46
7f       PrintScreen(TMK)           54      PrintScreen(TMK)
80       ??                         --
81       ??                         --
82       ??                         --
83       F7                         41      F7(TMK), 83(CS1)
84       SysReq(AT 84-key)          54      PrintScreen(TMK)



CS1     CS1 Key                    CS2      CS2 Key                    
-----------------------------------------------------------------------
01                                 76       Escape                     
02                                 16       1 !                        
03                                 1e       2 @                        
04                                 26       3 #                        
05                                 25       4 $                        
06                                 2e       5 %                        
07                                 36       6 ^                        
08                                 3d       7 &                        
09                                 3e       8 *                        
0a                                 46       9 (                        
0b                                 45       0 )                        
0c                                 4e       - _                        
0d                                 55       = +                        
0e                                 66       Backspace                  
0f                                 0d       Tab                        
10                                 15       q Q                        
11                                 1d       w W                        
12                                 24       e E                        
13                                 2d       r R                        
14                                 2c       t T                        
15                                 35       y Y                        
16                                 3c       u U                        
17                                 43       i I                        
18                                 44       o O                        
19                                 4d       p P                        
1a                                 54       [ {                        
1b                                 5b       ] }                        
1c                                 5a       Return                     
1d                                 14       Left Control               
1e                                 1c       a A                        
1f                                 1b       s S                        
20                                 23       d D                        
21                                 2b       f F                        
22                                 34       g G                        
23                                 33       h H                        
24                                 3b       j J                        
25                                 42       k K                        
26                                 4b       l L                        
27                                 4c       ; :                        
28                                 52       ' "                        
29                                 0e       ` ~                        
2a                                 12       Left Shift                 
2b                                 5d       \ | (or Europe 1)          
2c                                 1a       z Z                        
2d                                 22       x X                        
2e                                 21       c C                        
2f                                 2a       v V                        
30                                 32       b B                        
31                                 31       n N                        
32                                 3a       m M                        
33                                 41       , <                        
34                                 49       . >                        
35                                 4a       / ?                        
36                                 59       Right Shift                
37      Keypad *                   7c       Keypad *                   
38                                 11       Left Alt                   
39                                 29       Space                      
3a                                 58       Caps Lock                  
3b      F1                         05       F1                         
3c      F2                         06       F2                         
3d      F3                         04       F3                         
3e      F4                         0c       F4                         
3f      F5                         03       F5                         
40      F6                         0b       F6                         
41      F7                         02       F7(TMK)                    
41      F7(TMK), 83(CS1)           83       F7                         
42                                 0a       F8                         
43                                 01       F9                         
44                                 09       F10                        
45                                 77       Num Lock                   
46                                 7e       Scroll Lock                
47                                 6c       Keypad 7 Home              
48                                 75       Keypad 8 Up                
49                                 7d       Keypad 9 PageUp            
4a                                 7b       Keypad -                   
4b                                 6b       Keypad 4 Left              
4c                                 73       Keypad 5                   
4d                                 74       Keypad 6 Right             
4e                                 79       Keypad +                   
4f                                 69       Keypad 1 End               
50                                 72       Keypad 2 Down              
51                                 7a       Keypad 3 PageDn            
52                                 70       Keypad 0 Insert            
53                                 71       Keypad . Delete            
54      PrintScreen(TMK)           7f       PrintScreen(TMK)           
54      PrintScreen(TMK)           84       SysReq(AT 84-key)          
55      Pause(TMK)                 60       Keypad /(TMK)              
56      NUBS(TMK)                  61       Europe 2 (Note 2) NUBS     
57      F11(TMK)                   78       F11                        
58      F12(TMK)                   07       F12                        
59      Keypad =(TMK)              0f       Keypad =                   
5a      LGui(TMK)                  17       LGui(TMK)                  
5b      RGui(TMK)                  1f       RGui(TMK)                  
5c      App(TMK)                   27       (PC9800 Keypad , )  App(TMK)
5d      Mute(TMK)                  2f       Home(TMK)                  
5e      VolDown(TMK)               37       Delete(TMK)                
5f      VolUp(TMK)                 3f       Down(TMK)                  
60      Up(TMK)                    47       Right(TMK)                 
61      Left(TMK)                  4f       Up(TMK)                    
62      Down(TMK)                  56       PageDown(TMK)              
63      Right(TMK)                 5e       PageUp(TMK)                
64      F13(TMK)                   08       F13                        
65      F14(TMK)                   10       F14                        
66      F15(TMK)                   18       F15                        
67      F16(TMK)                   20       F16                        
68      F17(TMK)                   28       F17                        
69      F18(TMK)                   30       F18                        
6a      F19(TMK)                   38       F19                        
6b      F20(TMK)                   40       F20                        
6c      F21(TMK)                   48       F21                        
6d      F22(TMK)                   50       F22                        
6e      F23(TMK)                   57       F23                        
6f      Keypad Enter(TMK)          6f       Mute(TMK)                  
70      Kana(TMK)                  13       Katakana/Hiragana          
71      Insert(TMK)                19       RCtrl(TMK)                 
72      Delete(TMK)                39       Insert(TMK)                
73      Ro(TK)                     51       ろ (Ro)                    
74      Home(TMK)                  53       Left(TMK)                  
75      End(TMK)                   5c       End(TMK)                   
76      F24(TMK)                   5f       F24 (or 半角/全角)         
77      PageUp(TMK)                62       Keypad Enter(TMK)          
78      PageDown(TMK)              63       Keypad =(TMK)              
79      Henkan(TMK)                64       変換(Henkan)               
7a      RCtrl(TMK)                 65       VolDown(TMK)               
7b      Muhenkan(TMK)              67       無変変(Muhenkan)           
7c      RAlt(TMK)                  68       Non-US #(TMK)              
7d      JYEN(TMK)                  6a       ¥ (Yen)                    
7e      Keypad ,(TMK)              6d       Keypad ,                   
7f      Keypad /(TMK)              6e       VolUp(TMK)                 
--                                 80       ??                         
--                                 81       ??                         
--                                 82       ??                         
ff      ??                         00       Pause(TMK)                 

Translation to HID usages of Microsoft

Scan code set 1 and 2 are also listed in Scan Code Translation Table of Microsoft.

Open
Key Name HID Usage Page HID Usage ID PS/2 Set 1 Make* PS/2 Set 1 Break* PS/2 Set 2 Make PS/2 Set 2 Break
System Power 01 81 E0 5E E0 DE E0 37 E0 F0 37
System Sleep 01 82 E0 5F E0 DF E0 3F E0 F0 3F
System Wake 01 83 E0 63 E0 E3 E0 5E E0 F0 5E
No Event 07 00 None None None None
Overrun Error 07 01 FF None 00 None
POST Fail 07 02 FC None FC None
ErrorUndefined 07 03 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
a A 07 04 1E 9E 1C F0 1C
b B 07 05 30 B0 32 F0 32
c C 07 06 2E AE 21 F0 21
d D 07 07 20 A0 23 F0 23
e E 07 08 12 92 24 F0 24
f F 07 09 21 A1 2B F0 2B
g G 07 0A 22 A2 34 F0 34
h H 07 0B 23 A3 33 F0 33
i I 07 0C 17 97 43 F0 43
j J 07 0D 24 A4 3B F0 3B
k K 07 0E 25 A5 42 F0 42
l L 07 0F 26 A6 4B F0 4B
m M 07 10 32 B2 3A F0 3A
n N 07 11 31 B1 31 F0 31
o O 07 12 18 98 44 F0 44
p P 07 13 19 99 4D F0 4D
q Q 07 14 10 90 15 F0 15
r R 07 15 13 93 2D F0 2D
s S 07 16 1F 9F 1B F0 1B
t T 07 17 14 94 2C F0 2C
u U 07 18 16 96 3C F0 3C
v V 07 19 2F AF 2A F0 2A
w W 07 1A 11 91 1D F0 1D
x X 07 1B 2D AD 22 F0 22
y Y 07 1C 15 95 35 F0 35
z Z 07 1D 2C AC 1A F0 1A
1 ! 07 1E 02 82 16 F0 16
2 @ 07 1F 03 83 1E F0 1E
3 # 07 20 04 84 26 F0 26
4 $ 07 21 05 85 25 F0 25
5 % 07 22 06 86 2E F0 2E
6 ^ 07 23 07 87 36 F0 36
7 & 07 24 08 88 3D F0 3D
8 * 07 25 09 89 3E F0 3E
9 ( 07 26 0A 8A 46 F0 46
0 ) 07 27 0B 8B 45 F0 45
Return 07 28 1C 9C 5A F0 5A
Escape 07 29 01 81 76 F0 76
Backspace 07 2A 0E 8E 66 F0 66
Tab 07 2B 0F 8F 0D F0 0D
Space 07 2C 39 B9 29 F0 29
- _ 07 2D 0C 8C 4E F0 4E
= + 07 2E 0D 8D 55 F0 55
[ { 07 2F 1A 9A 54 F0 54
] } 07 30 1B 9B 5B F0 5B
\ 07 31 2B AB 5D
Europe 1 (Note 2) 07 32 2B AB 5D F0 5D
; : 07 33 27 A7 4C F0 4C
' " 07 34 28 A8 52 F0 52
` ~ 07 35 29 A9 0E F0 0E
, < 07 36 33 B3 41 F0 41
. > 07 37 34 B4 49 F0 49
/ ? 07 38 35 B5 4A F0 4A
Caps Lock 07 39 3A BA 58 F0 58
F1 07 3A 3B BB 05 F0 05
F2 07 3B 3C BC 06 F0 06
F3 07 3C 3D BD 04 F0 04
F4 07 3D 3E BE 0C F0 0C
F5 07 3E 3F BF 03 F0 03
F6 07 3F 40 C0 0B F0 0B
F7 07 40 41 C1 83 F0 83
F8 07 41 42 C2 0A F0 0A
F9 07 42 43 C3 01 F0 01
F10 07 43 44 C4 09 F0 09
F11 07 44 57 D7 78 F0 78
F12 07 45 58 D8 07 F0 07
Print Screen (Note 1) 07 46 E0 37 E0 B7 E0 7C E0 F0 7C
Scroll Lock 07 47 46 C6 7E F0 7E
Break (Ctrl-Pause) 07 48 E0 46 E0 C6 None E0 7E E0 F0 7E None
Pause 07 48 E1 1D 45 E1 9D C5 None E1 14 77 E1 F0 14 F0 77 None
Insert (Note 1) 07 49 E0 52 E0 D2 E0 70 E0 F0 70
Home (Note 1) 07 4A E0 47 E0 C7 E0 6C E0 F0 6C
Page Up (Note 1) 07 4B E0 49 E0 C9 E0 7D E0 F0 7D
Delete (Note 1) 07 4C E0 53 E0 D3 E0 71 E0 F0 71
End (Note 1) 07 4D E0 4F E0 CF E0 69 E0 F0 69
Page Down (Note 1) 07 4E E0 51 E0 D1 E0 7A E0 F0 7A
Right Arrow (Note 1) 07 4F E0 4D E0 CD E0 74 E0 F0 74
Left Arrow (Note 1) 07 50 E0 4B E0 CB E0 6B E0 F0 6B
Down Arrow (Note 1) 07 51 E0 50 E0 D0 E0 72 E0 F0 72
Up Arrow (Note 1) 07 52 E0 48 E0 C8 E0 75 E0 F0 75
Num Lock 07 53 45 C5 77 F0 77
Keypad / (Note 1) 07 54 E0 35 E0 B5 E0 4A E0 F0 4A
Keypad * 07 55 37 B7 7C F0 7C
Keypad - 07 56 4A CA 7B F0 7B
Keypad + 07 57 4E CE 79 F0 79
Keypad Enter 07 58 E0 1C E0 9C E0 5A E0 F0 5A
Keypad 1 End 07 59 4F CF 69 F0 69
Keypad 2 Down 07 5A 50 D0 72 F0 72
Keypad 3 PageDn 07 5B 51 D1 7A F0 7A
Keypad 4 Left 07 5C 4B CB 6B F0 6B
Keypad 5 07 5D 4C CC 73 F0 73
Keypad 6 Right 07 5E 4D CD 74 F0 74
Keypad 7 Home 07 5F 47 C7 6C F0 6C
Keypad 8 Up 07 60 48 C8 75 F0 75
Keypad 9 PageUp 07 61 49 C9 7D F0 7D
Keypad 0 Insert 07 62 52 D2 70 F0 70
Keypad . Delete 07 63 53 D3 71 F0 71
Europe 2 (Note 2) 07 64 56 D6 61 F0 61
App 07 65 E0 5D E0 DD E0 2F E0 F0 2F
Keyboard Power 07 66 E0 5E E0 DE E0 37 E0 F0 37
Keypad = 07 67 59 D9 0F F0 0F
F13 07 68 64 E4 08 F0 08
F14 07 69 65 E5 10 F0 10
F15 07 6A 66 E6 18 F0 18
F16 07 6B 67 E7 20 F0 20
F17 07 6C 68 E8 28 F0 28
F18 07 6D 69 E9 30 F0 30
F19 07 6E 6A EA 38 F0 38
F20 07 6F 6B EB 40 F0 40
F21 07 70 6C EC 48 F0 48
F22 07 71 6D ED 50 F0 50
F23 07 72 6E EE 57 F0 57
F24 07 73 76 F6 5F F0 5F
Keyboard Execute 07 74 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Help 07 75 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Menu 07 76 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Select 07 77 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Stop 07 78 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Again 07 79 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Undo 07 7A UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Cut 07 7B UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Copy 07 7C UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Paste 07 7D UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Find 07 7E UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Mute 07 7F UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Volume Up 07 80 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Volume Dn 07 81 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Caps Lock 07 82 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Num Lock 07 83 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Scroll Lock 07 84 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keypad , 07 85 7E FE 6D F0 6D
Keyboard Equal Sign 07 86 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
ろ (Ro) 07 87 73 F3 51 F0 51
Katakana/Hiragana 07 88 70 F0 13 F0 13
¥ (Yen) 07 89 7D FD 6A F0 6A
変換(Henkan) 07 8A 79 F9 64 F0 64
無変変(Muhenkan) 07 8B 7B FB 67 F0 67
(PC9800 Keypad , ) 07 8C 5C DC 27 F0 27
Keyboard Int'l 7 07 8D UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Int'l 8 07 8E UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Int'l 9 07 8F UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
한옝/ (Hangul/English) 07 90 F2 None F2 None
한한 (Hanja) 07 91 F1 None F1 None
かたかな (Katakana) 07 92 78 F8 63 F0 63
ひらがな (Hiragana) 07 93 77 F7 62 F0 62
半角/全角 (Zenkaku/Hankaku) 07 94 76 F6 5F F0 5F
Keyboard Lang 6 07 95 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Lang 7 07 96 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Lang 8 07 97 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Lang 9 07 98 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Alternate Erase 07 99 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard SysReq/Attention 07 9A UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Cancel 07 9B UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Clear 07 9C UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Prior 07 9D UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Return 07 9E UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Separator 07 9F UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Out 07 A0 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Oper 07 A1 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard Clear/Again 07 A2 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard CrSel/Props 07 A3 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Keyboard ExSel 07 A4 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
RESERVED 07 A5-DF RESERVED RESERVED RESERVED RESERVED
Left Control 07 E0 1D 9D 14 F0 14
Left Shift 07 E1 2A AA 12 F0 12
Left Alt 07 E2 38 B8 11 F0 11
Left GUI 07 E3 E0 5B E0 DB E0 1F E0 F0 1F
Right Control 07 E4 E0 1D E0 9D E0 14 E0 F0 14
Right Shift 07 E5 36 B6 59 F0 59
Right Alt 07 E6 E0 38 E0 B8 E0 11 E0 F0 11
Right GUI 07 E7 E0 5C E0 DC E0 27 E0 F0 27
RESERVED 07 E8-FFFF RESERVED RESERVED RESERVED RESERVED
Scan Next Track 0C 00B5 E0 19 E0 99 E0 4D E0 F0 4D
Scan Previous Track 0C 00B6 E0 10 E0 90 E0 15 E0 F0 15
Stop 0C 00B7 E0 24 E0 A4 E0 3B E0 F0 3B
Play/ Pause 0C 00CD E0 22 E0 A2 E0 34 E0 F0 34
Mute 0C 00E2 E0 20 E0 A0 E0 23 E0 F0 23
Bass Boost 0C 00E5 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Loudness 0C 00E7 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Volume Up 0C 00E9 E0 30 E0 B0 E0 32 E0 F0 32
Volume Down 0C 00EA E0 2E E0 AE E0 21 E0 F0 21
Bass Up 0C 0152 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Bass Down 0C 0153 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Treble Up 0C 0154 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Treble Down 0C 0155 UNASSIGNED UNASSIGNED UNASSIGNED UNASSIGNED
Media Select 0C 0183 E0 6D E0 ED E0 50 E0 F0 50
Mail 0C 018A E0 6C E0 EC E0 48 E0 F0 48
Calculator 0C 0192 E0 21 E0 A1 E0 2B E0 F0 2B
My Computer 0C 0194 E0 6B E0 EB E0 40 E0 F0 40
WWW Search 0C 0221 E0 65 E0 E5 E0 10 E0 F0 10
WWW Home 0C 0223 E0 32 E0 B2 E0 3A E0 F0 3A
WWW Back 0C 0224 E0 6A E0 EA E0 38 E0 F0 38
WWW Forward 0C 0225 E0 69 E0 E9 E0 30 E0 F0 30
WWW Stop 0C 0226 E0 68 E0 E8 E0 28 E0 F0 28
WWW Refresh 0C 0227 E0 67 E0 E7 E0 20 E0 F0 20
WWW Favorites 0C 022A E0 66 E0 E6 E0 18 E0 F0 18
DO NOT USE DO NOT USE DO NOT USE 00 80 DO NOT USE DO NOT USE
DO NOT USE DO NOT USE DO NOT USE 60 E0 47 F0 47
DO NOT USE DO NOT USE DO NOT USE 61 E1 4F F0 4F
DO NOT USE DO NOT USE DO NOT USE 7A FA 65 F0 65
DO NOT USE DO NOT USE DO NOT USE 7C FC 68 F0 68
DO NOT USE DO NOT USE DO NOT USE 7F FF 6E F0 6E
DO NOT USE DO NOT USE DO NOT USE E0 60 E0 E0 E0 47 E0 F0 47
DO NOT USE DO NOT USE DO NOT USE E0 61 E0 E1 E0 4F E0 F0 4F
DO NOT USE DO NOT USE DO NOT USE E0 7A E0 FA E0 65 E0 F0 65
DO NOT USE DO NOT USE DO NOT USE E0 7B E0 FB E0 67 E0 F0 67
DO NOT USE DO NOT USE DO NOT USE E0 7C E0 FC E0 68 E0 F0 68
DO NOT USE DO NOT USE DO NOT USE E0 7D E0 FD E0 6A E0 F0 6A
DO NOT USE DO NOT USE DO NOT USE E0 7E E0 FE E0 6D E0 F0 6D
DO NOT USE DO NOT USE DO NOT USE E0 7F E0 FF E0 6E E0 F0 6E
UNASSIGNED UNASSIGNED UNASSIGNED 54 D4 7F F0 7F
UNASSIGNED UNASSIGNED UNASSIGNED 54 D4 84 F0 84
UNASSIGNED UNASSIGNED UNASSIGNED 55 D5 60 F0 60
UNASSIGNED UNASSIGNED UNASSIGNED 5A DA 17 F0 17
UNASSIGNED UNASSIGNED UNASSIGNED 5B DB 1F F0 1F
UNASSIGNED UNASSIGNED UNASSIGNED 62 E2 56 F0 56
UNASSIGNED UNASSIGNED UNASSIGNED 63 E3 5E F0 5E
UNASSIGNED UNASSIGNED UNASSIGNED 64 E4 08 F0 08
UNASSIGNED UNASSIGNED UNASSIGNED 65 E5 10 F0 10
UNASSIGNED UNASSIGNED UNASSIGNED 66 E6 18 F0 18
UNASSIGNED UNASSIGNED UNASSIGNED 67 E7 20 F0 20
UNASSIGNED UNASSIGNED UNASSIGNED 68 E8 28 F0 28
UNASSIGNED UNASSIGNED UNASSIGNED 69 E9 30 F0 30
UNASSIGNED UNASSIGNED UNASSIGNED 6A EA 38 F0 38
UNASSIGNED UNASSIGNED UNASSIGNED 6B EB 40 F0 40
UNASSIGNED UNASSIGNED UNASSIGNED 6C EC 48 F0 48
UNASSIGNED UNASSIGNED UNASSIGNED 6D ED 50 F0 50
UNASSIGNED UNASSIGNED UNASSIGNED 6E EE 57 F0 57
UNASSIGNED UNASSIGNED UNASSIGNED 6F EF 6F F0 6F
UNASSIGNED UNASSIGNED UNASSIGNED 71 F1 19 F0 19
UNASSIGNED UNASSIGNED UNASSIGNED 72 F2 39 F0 39
UNASSIGNED UNASSIGNED UNASSIGNED 74 F4 53 F0 53
UNASSIGNED UNASSIGNED UNASSIGNED 75 F5 5C F0 5C
UNASSIGNED UNASSIGNED UNASSIGNED E0 01 E0 81 E0 76 E0 F0 76
UNASSIGNED UNASSIGNED UNASSIGNED E0 02 E0 82 E0 16 E0 F0 16
UNASSIGNED UNASSIGNED UNASSIGNED E0 03 E0 83 E0 1E E0 F0 1E
UNASSIGNED UNASSIGNED UNASSIGNED E0 04 E0 84 E0 26 E0 F0 26
UNASSIGNED UNASSIGNED UNASSIGNED E0 05 E0 85 E0 25 E0 F0 25
UNASSIGNED UNASSIGNED UNASSIGNED E0 06 E0 86 E0 2E E0 F0 2E
UNASSIGNED UNASSIGNED UNASSIGNED E0 07 E0 87 E0 36 E0 F0 36
UNASSIGNED UNASSIGNED UNASSIGNED E0 08 E0 88 E0 3D E0 F0 3D
UNASSIGNED UNASSIGNED UNASSIGNED E0 09 E0 89 E0 3E E0 F0 3E
UNASSIGNED UNASSIGNED UNASSIGNED E0 0A E0 0A E0 46 E0 F0 46
UNASSIGNED UNASSIGNED UNASSIGNED E0 0B E0 0B E0 45 E0 F0 45
UNASSIGNED UNASSIGNED UNASSIGNED E0 0C E0 0C E0 4E E0 F0 4E
UNASSIGNED UNASSIGNED UNASSIGNED E0 0D E0 0D E0 55 E0 F0 55
UNASSIGNED UNASSIGNED UNASSIGNED E0 0E E0 0E E0 66 E0 F0 66
UNASSIGNED UNASSIGNED UNASSIGNED E0 0F E0 0F E0 0D E0 F0 0D
UNASSIGNED UNASSIGNED UNASSIGNED E0 11 E0 91 E0 1D E0 F0 1D
UNASSIGNED UNASSIGNED UNASSIGNED E0 12 E0 92 E0 24 E0 F0 24
UNASSIGNED UNASSIGNED UNASSIGNED E0 13 E0 93 E0 2D E0 F0 2D
UNASSIGNED UNASSIGNED UNASSIGNED E0 14 E0 94 E0 2C E0 F0 2C
UNASSIGNED UNASSIGNED UNASSIGNED E0 15 E0 95 E0 35 E0 F0 35
UNASSIGNED UNASSIGNED UNASSIGNED E0 16 E0 96 E0 3C E0 F0 3C
UNASSIGNED UNASSIGNED UNASSIGNED E0 17 E0 97 E0 43 E0 F0 43
UNASSIGNED UNASSIGNED UNASSIGNED E0 18 E0 98 E0 44 E0 F0 44
UNASSIGNED UNASSIGNED UNASSIGNED E0 1A E0 9A E0 54 E0 F0 54
UNASSIGNED UNASSIGNED UNASSIGNED E0 1B E0 9B E0 5B E0 F0 5B
UNASSIGNED UNASSIGNED UNASSIGNED E0 1E E0 9E E0 1C E0 F0 1C
UNASSIGNED UNASSIGNED UNASSIGNED E0 1F E0 9F E0 1B E0 F0 1B
UNASSIGNED UNASSIGNED UNASSIGNED E0 23 E0 A3 E0 33 E0 F0 33
UNASSIGNED UNASSIGNED UNASSIGNED E0 25 E0 A5 E0 42 E0 F0 42
UNASSIGNED UNASSIGNED UNASSIGNED E0 26 E0 A6 E0 4B E0 F0 4B
UNASSIGNED UNASSIGNED UNASSIGNED E0 27 E0 A7 E0 4C E0 F0 4C
UNASSIGNED UNASSIGNED UNASSIGNED E0 28 E0 A8 E0 52 E0 F0 52
UNASSIGNED UNASSIGNED UNASSIGNED E0 29 E0 A9 E0 0E E0 F0 0E
UNASSIGNED UNASSIGNED UNASSIGNED E0 2A E0 AA E0 12 E0 F0 12
UNASSIGNED UNASSIGNED UNASSIGNED E0 2B E0 AB E0 5D E0 F0 5D
UNASSIGNED UNASSIGNED UNASSIGNED E0 2C E0 AC E0 1A E0 F0 1A
UNASSIGNED UNASSIGNED UNASSIGNED E0 2D E0 AD E0 22 E0 F0 22
UNASSIGNED UNASSIGNED UNASSIGNED E0 2F E0 AF E0 2A E0 F0 2A
UNASSIGNED UNASSIGNED UNASSIGNED E0 31 E0 B1 E0 31 E0 F0 31
UNASSIGNED UNASSIGNED UNASSIGNED E0 33 E0 B3 E0 41 E0 F0 41
UNASSIGNED UNASSIGNED UNASSIGNED E0 34 E0 B4 E0 49 E0 F0 49
UNASSIGNED UNASSIGNED UNASSIGNED E0 36 E0 B6 E0 59 E0 F0 59
UNASSIGNED UNASSIGNED UNASSIGNED E0 39 E0 B9 E0 29 E0 F0 29
UNASSIGNED UNASSIGNED UNASSIGNED E0 3A E0 BA E0 58 E0 F0 58
UNASSIGNED UNASSIGNED UNASSIGNED E0 3B E0 BB E0 05 E0 F0 05
UNASSIGNED UNASSIGNED UNASSIGNED E0 3C E0 BC E0 06 E0 F0 06
UNASSIGNED UNASSIGNED UNASSIGNED E0 3D E0 BD E0 04 E0 F0 04
UNASSIGNED UNASSIGNED UNASSIGNED E0 3E E0 BE E0 0C E0 F0 0C
UNASSIGNED UNASSIGNED UNASSIGNED E0 3F E0 BF E0 03 E0 F0 03
UNASSIGNED UNASSIGNED UNASSIGNED E0 40 E0 C0 E0 0B E0 F0 0B
UNASSIGNED UNASSIGNED UNASSIGNED E0 41 E0 C1 E0 02 E0 F0 02
UNASSIGNED UNASSIGNED UNASSIGNED E0 42 E0 C2 E0 83 E0 F0 83
UNASSIGNED UNASSIGNED UNASSIGNED E0 43 E0 C3 E0 0A E0 F0 0A
UNASSIGNED UNASSIGNED UNASSIGNED E0 44 E0 C4 E0 01 E0 F0 01
UNASSIGNED UNASSIGNED UNASSIGNED E0 45 E0 C5 E0 09 E0 F0 09
UNASSIGNED UNASSIGNED UNASSIGNED E0 4A E0 CA E0 7B E0 F0 7B
UNASSIGNED UNASSIGNED UNASSIGNED E0 4C E0 CC E0 73 E0 F0 73
UNASSIGNED UNASSIGNED UNASSIGNED E0 4E E0 CE E0 79 E0 F0 79
UNASSIGNED UNASSIGNED UNASSIGNED E0 54 E0 D4 E0 7F E0 F0 7F
UNASSIGNED UNASSIGNED UNASSIGNED E0 54 E0 D4 E0 84 E0 F0 84
UNASSIGNED UNASSIGNED UNASSIGNED E0 55 E0 D5 E0 60 E0 F0 60
UNASSIGNED UNASSIGNED UNASSIGNED E0 56 E0 D6 E0 61 E0 F0 61
UNASSIGNED UNASSIGNED UNASSIGNED E0 57 E0 D7 E0 78 E0 F0 78
UNASSIGNED UNASSIGNED UNASSIGNED E0 58 E0 D8 E0 07 E0 F0 07
UNASSIGNED UNASSIGNED UNASSIGNED E0 59 E0 D9 E0 0F E0 F0 0F
UNASSIGNED UNASSIGNED UNASSIGNED E0 5A E0 DA E0 17 E0 F0 17
UNASSIGNED UNASSIGNED UNASSIGNED E0 62 E0 E2 E0 56 E0 F0 56
UNASSIGNED UNASSIGNED UNASSIGNED E0 64 E0 E4 E0 08 E0 F0 08
UNASSIGNED UNASSIGNED UNASSIGNED E0 6E E0 EE E0 57 E0 F0 57
UNASSIGNED UNASSIGNED UNASSIGNED E0 6F E0 EF E0 6F E0 F0 6F
UNASSIGNED UNASSIGNED UNASSIGNED E0 70 E0 F0 E0 13 E0 F0 13
UNASSIGNED UNASSIGNED UNASSIGNED E0 71 E0 F1 E0 19 E0 F0 19
UNASSIGNED UNASSIGNED UNASSIGNED E0 72 E0 F2 E0 39 E0 F0 39
UNASSIGNED UNASSIGNED UNASSIGNED E0 73 E0 F3 E0 51 E0 F0 51
UNASSIGNED UNASSIGNED UNASSIGNED E0 74 E0 F4 E0 53 E0 F0 53
UNASSIGNED UNASSIGNED UNASSIGNED E0 75 E0 F5 E0 5C E0 F0 5C
UNASSIGNED UNASSIGNED UNASSIGNED E0 76 E0 F6 E0 5F E0 F0 5F
UNASSIGNED UNASSIGNED UNASSIGNED E0 77 E0 F7 E0 62 E0 F0 62
UNASSIGNED UNASSIGNED UNASSIGNED E0 78 E0 F8 E0 63 E0 F0 63
UNASSIGNED UNASSIGNED UNASSIGNED E0 79 E0 F9 E0 64 E0 F0 64

Code Set 2 to HID usage:

Open
PS/2 Set 2 Make HID Usage Page HID Usage ID Key Name
01 07 42 F9
03 07 3E F5
04 07 3C F3
05 07 3A F1
06 07 3B F2
07 07 45 F12
08 07 68 F13
09 07 43 F10
0A 07 41 F8
0B 07 3F F6
0C 07 3D F4
0D 07 2B Tab
0E 07 35 ` ~
0F 07 67 Keypad =
10 07 69 F14
11 07 E2 Left Alt
12 07 E1 Left Shift
13 07 88 Katakana/Hiragana
14 07 E0 Left Control
15 07 14 q Q
16 07 1E 1 !
18 07 6A F15
1A 07 1D z Z
1B 07 16 s S
1C 07 04 a A
1D 07 1A w W
1E 07 1F 2 @
20 07 6B F16
21 07 06 c C
22 07 1B x X
23 07 07 d D
24 07 08 e E
25 07 21 4 $
26 07 20 3 #
27 07 8C (PC9800 Keypad , )
28 07 6C F17
29 07 2C Space
2A 07 19 v V
2B 07 09 f F
2C 07 17 t T
2D 07 15 r R
2E 07 22 5 %
30 07 6D F18
31 07 11 n N
32 07 05 b B
33 07 0B h H
34 07 0A g G
35 07 1C y Y
36 07 23 6 ^
38 07 6E F19
3A 07 10 m M
3B 07 0D j J
3C 07 18 u U
3D 07 24 7 &
3E 07 25 8 *
40 07 6F F20
41 07 36 , <
42 07 0E k K
43 07 0C i I
44 07 12 o O
45 07 27 0 )
46 07 26 9 (
48 07 70 F21
49 07 37 . >
4A 07 38 / ?
4B 07 0F l L
4C 07 33 ; :
4D 07 13 p P
4E 07 2D - _
50 07 71 F22
51 07 87 ろ (Ro)
52 07 34 ' "
54 07 2F [ {
55 07 2E = +
57 07 72 F23
58 07 39 Caps Lock
59 07 E5 Right Shift
5A 07 28 Return
5B 07 30 ] }
5D 07 31 \
5D 07 32 Europe 1 (Note 2)
5F 07 73 F24
5F 07 94 半角/全角 (Zenkaku/Hankaku)
61 07 64 Europe 2 (Note 2)
62 07 93 ひらがな (Hiragana)
63 07 92 かたかな (Katakana)
64 07 8A 変換(Henkan)
66 07 2A Backspace
67 07 8B 無変変(Muhenkan)
69 07 59 Keypad 1 End
6A 07 89 ¥ (Yen)
6B 07 5C Keypad 4 Left
6C 07 5F Keypad 7 Home
6D 07 85 Keypad ,
70 07 62 Keypad 0 Insert
71 07 63 Keypad . Delete
72 07 5A Keypad 2 Down
73 07 5D Keypad 5
74 07 5E Keypad 6 Right
75 07 60 Keypad 8 Up
76 07 29 Escape
77 07 53 Num Lock
78 07 44 F11
79 07 57 Keypad +
7A 07 5B Keypad 3 PageDn
7B 07 56 Keypad -
7C 07 55 Keypad *
7D 07 61 Keypad 9 PageUp
7E 07 47 Scroll Lock
7F 07 46 SysRq on Zenith Z-150 AT
83 07 40 F7
84 07 46 Alt+Print Screen / SysRq
E0 10 0C 0221 WWW Search
E0 11 07 E6 Right Alt
E0 14 07 E4 Right Control
E0 15 0C 00B6 Scan Previous Track
E0 18 0C 022A WWW Favorites
E0 1F 07 E3 Left GUI
E0 20 0C 0227 WWW Refresh
E0 21 0C 00EA Volume Down
E0 23 0C 00E2 Mute
E0 27 07 E7 Right GUI
E0 28 0C 0226 WWW Stop
E0 2B 0C 0192 Calculator
E0 2F 07 65 App
E0 30 0C 0225 WWW Forward
E0 32 0C 00E9 Volume Up
E0 34 0C 00CD Play/ Pause
E0 37 01 81 System Power
E0 37 07 66 Keyboard Power
E0 38 0C 0224 WWW Back
E0 3A 0C 0223 WWW Home
E0 3B 0C 00B7 Stop
E0 3F 01 82 System Sleep
E0 40 0C 0194 My Computer
E0 48 0C 018A Mail
E0 4A 07 54 Keypad / (Note 1)
E0 4D 0C 00B5 Scan Next Track
E0 50 0C 0183 Media Select
E0 5A 07 58 Keypad Enter
E0 5E 01 83 System Wake
E0 69 07 4D End (Note 1)
E0 6B 07 50 Left Arrow (Note 1)
E0 6C 07 4A Home (Note 1)
E0 70 07 49 Insert (Note 1)
E0 71 07 4C Delete (Note 1)
E0 72 07 51 Down Arrow (Note 1)
E0 74 07 4F Right Arrow (Note 1)
E0 75 07 52 Up Arrow (Note 1)
E0 7A 07 4E Page Down (Note 1)
E0 7C 07 46 Print Screen (Note 1)
E0 7D 07 4B Page Up (Note 1)
E0 7E E0 F0 7E 07 48 Break (Ctrl-Pause)
E1 14 77 E1 F0 14 F0 77 07 48 Pause
F1 07 91 한한 (Hanja)
F2 07 90 한옝/ (Hangul/English)

Special Key Combo

These key combos are interpreted as special function on PC/AT and PC/XT computer(BIOS).

  • Ctrl+Alt+Delete -> System Reset
  • Ctrl+NumLock -> Pause
  • Ctrl+ScrollLock -> Break
  • Shift+PrtSc/* -> Print Screen
  • Alt+PrtSc/* -> System Request?

p.4-24 http://bitsavers.org/pdf/ibm/pc/at/6183355_PC_AT_Technical_Reference_Mar86.pdf p.5-19 http://bitsavers.org/pdf/ibm/pc/at/1502494_PC_AT_Technical_Reference_Mar84.pdf

TMK converter doesn't recognize the combos, interprets them just as normal key sequence.

Interface

Connector

AT - DIN 5P 180°, SDL

p.188 of http://bitsavers.org/pdf/ibm/pc/at/6183355_PC_AT_Technical_Reference_Mar86.pdf

PS/2 - Mini-DIN 6P

(Mini-DIN 6P Socket) http://www.mcamafia.de/pdf/ibm_hitrc07.pdf

Terminal - DIN 5P 240°, RJ45 8P5C

Host side schematics

p.111 of http://bitsavers.org/pdf/ibm/pc/at/6183355_PC_AT_Technical_Reference_Mar86.pdf

p.132 of http://bitsavers.org/pdf/ibm/pc/at/6183355_PC_AT_Technical_Reference_Mar86.pdf

p.95 of http://bitsavers.org/pdf/ibm/pc/at/1502494_PC_AT_Technical_Reference_Mar84.pdf

i8042

PC/AT 8042 seems to support XT keyboard when bit 5 of CMD(@$20) is on.(0115:) The bit can be written by host with 60 'Write Command Byte' command. Meanwhile, PS/2 8042 doesn't support XT keyboard, it doesn't check bit 5 of CMD byte.

http://halicery.com/8042/8042_1503033.TXT

Keyboard side schematics

101-key

p.233 of http://bitsavers.org/pdf/ibm/pc/at/6183355_PC_AT_Technical_Reference_Mar86.pdf

84-key

http://www.kbdbabel.org/schematic/kbdbabel_doc_ibmat_kbd.pdf

AT/XT Auto-Switch

https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-Keyboard-Converter#atxt-auto-switching

Weirdness

SIEMENS PCD 2 Keyboard

The keyboard requires "inhibit" time after data communications for some reason. Without the "inhibit" the keboard repeats to send the last code endlessly. https://github.com/tmk/tmk_keyboard/issues/747

Incompatibilities of Zenith Z-150 AT

It seems that the keybaord came with Zenith Z-240 AT compatible computer.

This keyboard is sometimes referred as 'white badge' or 'beige' due to its enclosure and it's compatibility with AT protocol seems to be very bad. It works somewhat with some converter or PS/2 port on PC while not at all with others.

See wafeform above. It is obviously violation of IBM AT protocol signal.

TMK IBMPC Converter can support the keyboard including Lock indicators as of 2021-10.

Open

TMK IBMPC Converter

The converter can read scan code from the keyboard without stop bit check but it fails to send commands when lock indicator is updated. and can control LED indicators now(2021-06). See below.

Send command

Z-150 AT has start bit error(ERR:11) sometimes and requires some retries. Root cause of the error is unclear.

https://github.com/tmk/tmk_keyboard/commit/67d37ef7b312ccd40e8e82c0cb1444b36b3fbcd9

https://geekhack.org/index.php?topic=103648.msg3055134#msg3055134

Lock Indicators

It seems to accept 'ED' command from some computer, LEDs can be controlled normally from host. But TMK converter and most of PS/2 ports fails to send 'Set Indicator' commands.

The lock keys of a separate keyboard do indeed turn on the corresponding indicator LED of the Zenith when connected to the HP.

https://geekhack.org/index.php?topic=103648.msg2896728#msg2896728

Over native ps/2 the lock lights will similarly fail to register with rapid presses and causes a reset. The only difference I see compared to with the converter is that the board does a "softer reset" such that the beeper on/off state is not changed.

https://geekhack.org/index.php?topic=103648.msg3050259#msg3050259

Monoprice PS/2 Converter

http://www.newegg.com/Product/Product.aspx?Item=9SIA8SV3807929

I have a beige-label, which is the AT model. It works fine with the linked PS/2 -> USB converter, after a DIN -> PS/2 converter as well of course. I can try to find the DIN -> PS/2 converter online if that matters, it looks very generic. The only issue I've run into is that the F7 key only works over PS/2, the USB converter seems to prevent that specific key from being sent (the internal buzzer still beeps when it is pressed, the PC just never recieves the code). I have tried a BlueCube and it doesn't work at all, strangely enough.

https://deskthority.net/viewtopic.php?p=293309#p293309

Another witness: Monprice converter works with the Z-150 but it doesn't control lock indicators and doesn't handle F7 key but others.

https://geekhack.org/index.php?topic=103648.msg2900928#msg2900928

Yet another: F7(0x83) issue https://geekhack.org/index.php?topic=79453.0

Belkin one

This works but has F7(0x83) issue as well.

https://geekhack.org/index.php?topic=79453.msg2048467#msg2048467

Soarer's doesn't work

Due to 'stop bit error' . https://geekhack.org/index.php?topic=103648.msg2898418#msg2898418

BlueCube doesn't work

https://deskthority.net/viewtopic.php?p=293309#p293309

TMK PS/2 INT doesn't work

https://deskthority.net/viewtopic.php?p=297627#p297627

Doesn't work even with PS/2 port on PC

I tried using a very generic at to ps2 adapter then a blue cube and didn't have any luck. The keyboard lights up the first time you plug it in. Edit: I was messing with the adapters and if I go from at to ps2 into my ps2 port the keyboard works during post. Edit 2: It only works for a few moments during post. Eventually it stops beeping.

https://deskthority.net/viewtopic.php?p=353558#p353558

Some computers work but others not

It had perfect function on my: HP 8200/8300 Compaq SR1920nx (yeah, that's an oldie, my first desktop computer) It had partial function by mashing the caps lock key many times on an old Dell XPS 630, in Linux Mint ... maybe 17 or so. The same trick didn't work in Windows 10. It didn't work at all on any other computer I tried.

https://geekhack.org/index.php?topic=103648.msg2896728#msg2896728

Break on Unicomp PS/2

Control + Pause doesn't seems to be handled correctly.

https://deskthority.net/viewtopic.php?f=2&t=25718

Resources

TrackPoint Engineering Specifications for version 3E

https://web.archive.org/web/20100613123840/http://wwwcssrv.almaden.ibm.com/trackpoint/files/ykt3eext.pdf

https://web.archive.org/web/20100526161812/http://wwwcssrv.almaden.ibm.com/trackpoint/download.html

MF2 Keyboard

The expression MF2 keyboard stands for multi-functional keyboard version 2. This type of keyboard was first developed and defined by IBM for use with all types of PC (XT, AT, PS/2). In the meantime it has become an industry standard and today nearly all PCs have an MF2 compatible keyboard.

The MF2 keyboard supports 3 different sets of make and break codes. Code set 1 is used for XT/PC and PS/2 –30 compatible computers. Code set 2 is used for AT and all other PS/2 models compatible computers and code set 3 is used for workstations and terminal emulations on the PC.

http://bitsavers.trailing-edge.com/components/national/_appNotes/AN-0734.pdf

IBM 84-key Model F (AT) keyboard ROM

Linux Keyboard Input

HID keyboard usage to Linux scan code mapping(linux/drivers/hid/hid-input.c)

Open
linux/drivers/hid/hid-input.c

static const unsigned char hid_keyboard[256] = {
      0,  0,  0,  0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,
     50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44,  2,  3,
      4,  5,  6,  7,  8,  9, 10, 11, 28,  1, 14, 15, 57, 12, 13, 26,
     27, 43, 43, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64,
     65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106,
    105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,
     72, 73, 82, 83, 86,127,116,117,183,184,185,186,187,188,189,190,
    191,192,193,194,134,138,130,132,128,129,131,137,133,135,136,113,

    115,114,unk,unk,unk,121,unk, 89, 93,124, 92, 94, 95,unk,unk,unk,
    122,123, 90, 91, 85,unk,unk,unk,unk,unk,unk,unk,111,unk,unk,unk,
    unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,
    unk,unk,unk,unk,unk,unk,179,180,unk,unk,unk,unk,unk,unk,unk,unk,
    unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,
    unk,unk,unk,unk,unk,unk,unk,unk,111,unk,unk,unk,unk,unk,unk,unk,
     29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,
    150,158,159,128,136,177,178,176,142,152,173,140,unk,unk,unk,unk

/*
    hid usage to scan codes mapping

    00 00 00 00 1E 30 2E 20 12 21 22 23 17 24 25 26 /* 00-0F */
    32 31 18 19 10 13 1F 14 16 2F 11 2D 15 2C 02 03 /* 10-1F */
    04 05 06 07 08 09 0A 0B 1C 01 0E 0F 39 0C 0D 1A /* 20-2F */
    1B 2B 2B 27 28 29 33 34 35 3A 3B 3C 3D 3E 3F 40 /* 30-3F */
    41 42 43 44 57 58 63 46 77 6E 66 68 6F 6B 6D 6A /* 40-4F */
    69 6C 67 45 62 37 4A 4E 60 4F 50 51 4B 4C 4D 47 /* 50-5F */
    48 49 52 53 56 7F 74 75 B7 B8 B9 BA BB BC BD BE /* 60-6F */
    BF C0 C1 C2 86 8A 82 84 80 81 83 89 85 87 88 71 /* 70-7F */
    
    73 72 F0 F0 F0 79 F0 59 5D 7C 5C 5E 5F F0 F0 F0 /* 80-8F */
    7A 7B 5A 5B 55 F0 F0 F0 F0 F0 F0 F0 6F F0 F0 F0 /* 90-9F */
    F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 /* A0-AF */
    F0 F0 F0 F0 F0 F0 B3 B4 F0 F0 F0 F0 F0 F0 F0 F0 /* B0-BF */
    F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 /* C0-CF */
    F0 F0 F0 F0 F0 F0 F0 F0 6F F0 F0 F0 F0 F0 F0 F0 /* D0-DF */
    1D 2A 38 7D 61 36 64 7E A4 A6 A5 A3 A1 73 72 71 /* E0-EF */
    96 9E 9F 80 88 B1 B2 B0 8E 98 AD 8C F0 F0 F0 F0 /* F0-FF */

    where F0(240) = KEY_UNKNOWN
*/
};

Scan Code Set 2 to Linux scan code mapping(linux/drivers/input/keyboard/atkbd.c)

Open
linux/drivers/input/keyboard/atkbd.c

#define ATKBD_KEYMAP_SIZE   512

static const unsigned short atkbd_set2_keycode[ATKBD_KEYMAP_SIZE] = {

      0, 67, 65, 63, 61, 59, 60, 88,  0, 68, 66, 64, 62, 15, 41,117,
      0, 56, 42, 93, 29, 16,  2,  0,  0,  0, 44, 31, 30, 17,  3,  0,
      0, 46, 45, 32, 18,  5,  4, 95,  0, 57, 47, 33, 20, 19,  6,183,
      0, 49, 48, 35, 34, 21,  7,184,  0,  0, 50, 36, 22,  8,  9,185,
      0, 51, 37, 23, 24, 11, 10,  0,  0, 52, 53, 38, 39, 25, 12,  0,
      0, 89, 40,  0, 26, 13,  0,  0, 58, 54, 28, 27,  0, 43,  0, 85,
      0, 86, 91, 90, 92,  0, 14, 94,  0, 79,124, 75, 71,121,  0,  0,
     82, 83, 80, 76, 77, 72,  1, 69, 87, 78, 81, 74, 55, 73, 70, 99,

      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    217,100,255,  0, 97,165,  0,  0,156,  0,  0,  0,  0,  0,  0,125,
    173,114,  0,113,  0,  0,  0,126,128,  0,  0,140,  0,  0,  0,127,
    159,  0,115,  0,164,  0,  0,116,158,  0,172,166,  0,  0,  0,142,
    157,  0,  0,  0,  0,  0,  0,  0,155,  0, 98,  0,  0,163,  0,  0,
    226,  0,  0,  0,  0,  0,  0,  0,  0,255, 96,  0,  0,  0,143,  0,
      0,  0,  0,  0,  0,  0,  0,  0,  0,107,  0,105,102,  0,  0,112,
    110,111,108,112,106,103,  0,119,  0,118,109,  0, 99,104,119,  0,

      0,  0,  0, 65, 99,
/*

    // 00-7F code:
   *00 43 41 3F 3D 3B 3C 58*00 44 42 40 3E 0F 29*75
   *00 38 2A*5D 1D 10 02*00*00*00 2C 1F 1E 11 03*00
   *00 2E 2D 20 12 05 04 5F*00 39 2F 21 14 13 06*B7
   *00 31 30 23 22 15 07*B8*00*00 32 24 16 08 09*B9
   *00 33 25 17 18 0B 0A*00*00 34 35 26 27 19 0C*00
   *00*59 28*00 1A 0D*00*00 3A 36 1C 1B*00 2B*00*55
   *00 56*5B*5A*5C*00 0E*5E*00 4F*7C 4B 47*79 00*00
    52 53 50 4C 4D 48 01 45 57 4E 51 4A 37 49 46*63
    
    // E0-prefixed code:
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    D9 64 FF 00 61 A5 00 00 9C 00 00 00 00 00 00 7D
    AD 72 00 71 00 00 00 7E 80 00 00 8C 00 00 00 7F
    9F 00 73 00 A4 00 00 74 9E 00 AC A6 00 00 00 8E
    9D 00 00 00 00 00 00 00 9B 00 62 00 00 A3 00 00
    E2 00 00 00 00 00 00 00 00 FF 60 00 00 00 8F 00
    00 00 00 00 00 00 00 00 00 6B 00 69 66 00 00 70
    6E 6F 6C 70 6A 67 00 77 00 76 6D 00 63 68 77 00
    
    // 80- code:
    00 00 00 41*63

    *: different from i8042 translation table
*/
};


static const unsigned short atkbd_set3_keycode[ATKBD_KEYMAP_SIZE] = {

      0,  0,  0,  0,  0,  0,  0, 59,  1,138,128,129,130, 15, 41, 60,
    131, 29, 42, 86, 58, 16,  2, 61,133, 56, 44, 31, 30, 17,  3, 62,
    134, 46, 45, 32, 18,  5,  4, 63,135, 57, 47, 33, 20, 19,  6, 64,
    136, 49, 48, 35, 34, 21,  7, 65,137,100, 50, 36, 22,  8,  9, 66,
    125, 51, 37, 23, 24, 11, 10, 67,126, 52, 53, 38, 39, 25, 12, 68,
    113,114, 40, 43, 26, 13, 87, 99, 97, 54, 28, 27, 43, 43, 88, 70,
    108,105,119,103,111,107, 14,110,  0, 79,106, 75, 71,109,102,104,
     82, 83, 80, 76, 77, 72, 69, 98,  0, 96, 81,  0, 78, 73, 55,183,

    184,185,186,187, 74, 94, 92, 93,  0,  0,  0,125,126,127,112,  0,
      0,139,172,163,165,115,152,172,166,140,160,154,113,114,167,168,
    148,149,147,140
};

static const unsigned short atkbd_unxlate_table[128] = {
          0,118, 22, 30, 38, 37, 46, 54, 61, 62, 70, 69, 78, 85,102, 13,
         21, 29, 36, 45, 44, 53, 60, 67, 68, 77, 84, 91, 90, 20, 28, 27,
         35, 43, 52, 51, 59, 66, 75, 76, 82, 14, 18, 93, 26, 34, 33, 42,
         50, 49, 58, 65, 73, 74, 89,124, 17, 41, 88,  5,  6,  4, 12,  3,
         11,  2, 10,  1,  9,119,126,108,117,125,123,107,115,116,121,105,
        114,122,112,113,127, 96, 97,120,  7, 15, 23, 31, 39, 47, 55, 63,
         71, 79, 86, 94,  8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 87,111,
         19, 25, 57, 81, 83, 92, 95, 98, 99,100,101,103,104,106,109,110
};
Clone this wiki locally