-
Notifications
You must be signed in to change notification settings - Fork 1.7k
IBM PC AT Keyboard Protocol
- Technical Reference
- Pinouts
- Protocol
- Commands from the System
- Commands to the System
- Error handling
- Keyboard ID
- Scan Codes
- Interface
- AT/XT Auto-Switch
- Weirdness
- Resources
- http://bitsavers.org/pdf/ibm/pc/at/
- http://bitsavers.org/pdf/ibm/pc/at/6183355_PC_AT_Technical_Reference_Mar86.pdf
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
`--.___,--'
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
p.212 http://bitsavers.org/pdf/ibm/pc/at/6183355_PC_AT_Technical_Reference_Mar86.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 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.
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.
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.
PC/AT: http://halicery.com/8042/8042_1503033.TXT
PS/2: http://www.halicery.com/Hardware/Intel%208042%20and%208048/8042_PS2_INTERN.TEXT
IBM AT(and PS/2) keyboard controller checks data line only, not clock for Stop bit.(03C0:)
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
0x15(Q make):
0xF0:
https://geekhack.org/index.php?topic=62168.msg1469247#msg1469247
http://www.mcamafia.de/pdf/ibm_hitrc07.pdf
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
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
Bit | Indicator |
---|---|
0 | Scroll Lock |
1 | Num Lock |
2 | Caps Lock |
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
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) |
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:
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
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.
It just ignore the command and reply nothing. The keyboard doesn't even reply with 0xFA.
https://deskthority.net/viewtopic.php?p=495196#p495196
Most of PS/2 Keyboards has this ID.
- Cherry G80-3600
- Cherry G84-4100
- Topre Realforce 101 ML0100
- IBM 101 US English
- IBM 5576-A01(OADG 4-14)
- OADG 104/109(OADG 4-14)
- AX Keyboard
- Siemens S26381-K257-L120
- Tandberg TDV 5020 (with 0x80-prefix codes)
- Siemens F500
Many short keyboards without numeric keypad, like IBM ThinkPads, and Spacesaver keyboards(Tenkeyless)
It speaks in Code Set 3. https://www.win.tue.nl/~aeb/linux/kbd/scancodes-7.html#NCD97
https://deskthority.net/viewtopic.php?p=308583#p308583
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
http://www.seasip.info/VintagePC/ibm_1397000.html
http://www.seasip.info/Misc/1227T.html
https://geekhack.org/index.php?topic=17458.msg648235#msg648235
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
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
http://radioc.web.fc2.com/column/ps55/ps55kbd_scancode.htm
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.
- https://github.com/tmk/tmk_keyboard/pull/711
- http://www.bitsavers.org/pdf/televideo/990/
- Pics: https://i.imgur.com/H0fMvRu.png https://i.redd.it/7kba8rjnuoo21.jpg https://i.imgur.com/TFFTYHv.png
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
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
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
1394204: https://github.com/tmk/tmk_keyboard/issues/687
It doesn't seem to be configurable of keyboard ID.
It doesn't support F0 command and always uses Code Set 3.
https://github.com/tmk/tmk_keyboard/issues/687#issuecomment-852610160
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 |
https://github.com/tmk/tmk_keyboard/issues/723#issuecomment-1079764826
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.
DIP Switch: 0100 0000(~0xBF) pic
https://www.recycledgoods.com/ibm-1389160-122-key-terminal-keyboard-5-pin-din-model-m/
DIP Switch: 0111 1110(~0x81?): https://i.imgur.com/hRaltjN.jpg
How DIP Switch wired to controller: https://i.imgur.com/15r5gav.jpg?1
https://deskthority.net/viewtopic.php?f=62&t=14734
DIP Switch: 1001 0000(~0x6F?): https://deskthority.net/download/file.php?id=33588
DIP Switch: 0000 0000
https://www.flickr.com/photos/triplehaata/sets/72157662296508556/
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
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
This lists scan codes supported by Windows.
'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
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
https://www.seasip.info/VintagePC/ibm_1501105.html
Open
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.
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]
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.
*
*/
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
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
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
https://www.seasip.info/VintagePC/ibm_1391406.html
Open
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)
https://gist.github.com/tmk/22b381c13f9a87b2e314d4caf578ac8d
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.
- https://geekhack.org/index.php?topic=103648.msg2894275#msg2894275
- https://gist.github.com/tmk/22cb8680ca8ef854630ecd1953268c5b
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
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
- 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| +|
|------------------------------------------------------` | `-----------' |-----------| |
|CapsL | 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.
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
https://www.seasip.info/VintagePC/ibm_6110344.html https://www.seasip.info/VintagePC/ibm_1390876.html
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|
`-----' `---------------------------------------' `-----' `-----------' `---------------'
-
IBM 1391406 102-key PC Code Set 3: http://www.seasip.info/VintagePC/ibm_1391406.html
-
IBM 1394204 101-key Terminal Code Set 3: https://github.com/tmk/tmk_keyboard/issues/687#issuecomment-853539163
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)
- https://github.com/tmk/tmk_keyboard/pull/711#issuecomment-961490027
- http://www.bitsavers.org/pdf/televideo/990/
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| |
`-----------------------------------------------' `---------------'
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 |
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
5576-001:
Open
5576-002:
Open
5576-003:
Open
5576-A01:
Open
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* |
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
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
|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)
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 |
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 |
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 | |
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) |
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.
p.188 of http://bitsavers.org/pdf/ibm/pc/at/6183355_PC_AT_Technical_Reference_Mar86.pdf
(Mini-DIN 6P Socket) http://www.mcamafia.de/pdf/ibm_hitrc07.pdf
- http://www.seasip.info/VintagePC/ibm_1390876.html (DIN 5P Plug)
- http://www.kbdbabel.org/conn/kbd_connector_ibm3179_318x_319x.png (DIN 5P Socket)
- http://www.kbdbabel.org/conn/kbd_connector_ibmterm.png (RJ45 Socket)
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
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
p.233 of http://bitsavers.org/pdf/ibm/pc/at/6183355_PC_AT_Technical_Reference_Mar86.pdf
http://www.kbdbabel.org/schematic/kbdbabel_doc_ibmat_kbd.pdf
https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-Keyboard-Converter#atxt-auto-switching
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
It seems that the keybaord came with Zenith Z-240 AT compatible computer.
- https://deskthority.net/wiki/Zenith_Z-150
- https://www.1000bit.it/js/web/viewer.html?file=%2Fad%2Fbro%2Fzenith%2Fzenithpc-z248col%2Epdf
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
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.
- https://deskthority.net/viewtopic.php?f=2&t=25160
- https://geekhack.org/index.php?topic=103648.msg2896146#msg2896146
- https://geekhack.org/index.php?topic=103648.msg2896196#msg2896196
- IBMPC: Send Command - Zenith Z-150 AT beige: https://github.com/tmk/tmk_keyboard/issues/661
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
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
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
This works but has F7(0x83) issue as well.
https://geekhack.org/index.php?topic=79453.msg2048467#msg2048467
Due to 'stop bit error' . https://geekhack.org/index.php?topic=103648.msg2898418#msg2898418
https://deskthority.net/viewtopic.php?p=293309#p293309
https://deskthority.net/viewtopic.php?p=297627#p297627
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
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
Control + Pause doesn't seems to be handled correctly.
https://deskthority.net/viewtopic.php?f=2&t=25718
https://web.archive.org/web/20100526161812/http://wwwcssrv.almaden.ibm.com/trackpoint/download.html
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
- http://www.halicery.com/Hardware/Intel%208042%20and%208048/8048_AT_INTERN.TEXT
- http://www.halicery.com/Hardware/Intel%208042%20and%208048/8042%20and%208048%20ROM%20disassemblies.html
- Scancodes mapping: https://wiki.archlinux.org/title/Map_scancodes_to_keycodes
- Linux Scancodes(translated to Code Set 1 + E0-prefixed)
- Linux Keycodes: https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h
- atkbd.c Code Set 2 to Set 1 mapping: https://elixir.bootlin.com/linux/latest/source/drivers/input/keyboard/atkbd.c#L79
- atkbd.c#atkbd_interrupt: https://elixir.bootlin.com/linux/latest/source/drivers/input/keyboard/atkbd.c#L409
- console ioctl: https://man7.org/linux/man-pages/man4/console_ioctl.4.html
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
*/
};
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
};