636 lines
27 KiB
Plaintext
636 lines
27 KiB
Plaintext
================================================================
|
|
IBM PC KEYBOARD INFORMATION FOR SOFTWARE DEVELOPERS
|
|
================================================================
|
|
Your host: Chris Giese
|
|
http://www.execpc.com/~geezer/os
|
|
|
|
Distribute freely. Last revised on Jan 3, 2002
|
|
Sources:
|
|
PORTS.A of Ralf Brown's interrupt list collection
|
|
repairfaq.org keyboard FAQ(doesn't appear to exsist)
|
|
Linux source code
|
|
Test hardware:
|
|
New Samsung KB3T001SAXAA 104-key keyboard
|
|
Old Maxi 2186035-00-21 101-key keyboard
|
|
|
|
NO WARRANTY. NO GUARANTEE. I have tried to make this information
|
|
accurate. I don't know if I succeeded. Corrections or additional
|
|
information would be welcome.
|
|
|
|
This is a plain-text document. If you use a word-processor to view
|
|
it, use a fixed-pitch font (like Courier) so columnar data and
|
|
ASCII art lines up properly.
|
|
|
|
Lessons learned:
|
|
- Both the 8048 MCU in the keyboard and the 8042 controller
|
|
on the motherboard accept command bytes.
|
|
- There is a bit (KCC) in the poorly-named "Command Byte" which
|
|
seems to enable AT-to-XT scancode conversion (scancode set 2
|
|
to scancode set 1). After booting DOS, my keyboard uses
|
|
scancode set 2 with this conversion bit turned on. If I turn
|
|
the bit off and switch to scancode set 1, operation remains
|
|
the same.
|
|
- Scancode set 3 is probably the most elegant, in that it returns
|
|
a one-byte make code for _every_ key. Unfortunately, not all
|
|
keyboards support it.
|
|
- The scancodes of some keys depend on the internal num lock state
|
|
of the keyboard.
|
|
|
|
================================================================
|
|
KEYBOARD I/O REGISTERS ON THE PC
|
|
================================================================
|
|
60h data
|
|
64h command (write)
|
|
64h Status (read)
|
|
|
|
Bits in Status register (names from Linux source)
|
|
b7 PERR parity error in data received from keyboard
|
|
b6 GTO receive timeout
|
|
b5 transmit timeout (or PS/2 mouse?)
|
|
b4 keyboard is locked
|
|
b3 0=60h was the port last accessed, 1=61h was last (?)
|
|
b2 System Flag status: 0=power-up/reset, 1=selftest OK (?)
|
|
b1 IBF input buffer full (data from host to keyboard)
|
|
b0 OBF output buffer full (data from keyboard to host)
|
|
|
|
Bits in Output Port of 8042 chip (Table P0383 in PORTS.A)
|
|
The Output Port is written by controller command D1h,
|
|
and read by controller command D0h
|
|
b7 keyboard data output
|
|
b6 keyboard clock output
|
|
b5 input buffer NOT full
|
|
b4 output buffer NOT empty
|
|
b3 (varies)
|
|
b2 (varies)
|
|
b1 A20 gate
|
|
b0 system reset (THIS BIT SHOULD ALWAYS BE SET TO 1)
|
|
|
|
Bits in Input Port of 8042 chip
|
|
The Input Port is read by controller command C0h
|
|
b7 keyboard NOT locked
|
|
b6-b0 (varies)
|
|
|
|
Bits in "Command Byte" (confusing name; from Table P0404 in PORTS.A)
|
|
The "Command Byte" is written by controller command 60h
|
|
and read by controller command 20h
|
|
(names from Linux source)
|
|
b7 (reserved)
|
|
b6 KCC convert set 2 scancodes to set 1 ("IBM PC compatibility mode")
|
|
b5 DMS disables PS/2 mouse when set
|
|
b4 disables keyboard when set
|
|
b3 ignore keyboard lock switch when set
|
|
b2 SYS System Flag (same as b2 in Status register, it seems)
|
|
b1 enables IRQ12 from PS/2 mouse when set
|
|
b0 EKI enables IRQ1 on keyboard output buffer full
|
|
|
|
Result Byte for interface self-tests (Table P0406 in PORTS.A)
|
|
Returned by controller commands A9h or ABh
|
|
0 no error
|
|
1 clock line stuck low
|
|
2 clock line stuck high
|
|
3 data line stuck low
|
|
4 data line stuck high
|
|
|
|
================================================================
|
|
CONTROLLER COMMANDS (from Table P0401 of PORTS.A)
|
|
================================================================
|
|
Before writing each byte of these commands to port 64h,
|
|
poll the status register (port 60h) until bit b1=0.
|
|
|
|
20h-2Fh reads byte with address=lower 5 bits of command
|
|
The byte at address 0 is the "Command Byte".
|
|
60h-7Fh nn writes byte nn to address=lower 5 bits of command
|
|
The byte at address 0 is the "Command Byte".
|
|
A7h disables PS/2 mouse port (MCA only?)
|
|
A8h enables PS/2 mouse port (MCA only?)
|
|
A9h self-test mouse interface, returns Result Byte (see above)
|
|
AAh self-test controller; returns 55h if success, FCh if failure
|
|
ABh self-test keyboard interface, returns Result Byte (see above)
|
|
ADh disables keyboard (sets b4 of "Command Byte")
|
|
AEh enables keyboard (clears b4 of "Command Byte")
|
|
C0h reads Input Port
|
|
D0h reads Output Port
|
|
D1h nn writes Output Port
|
|
Important: bit 0 (system reset) should always be set here,
|
|
as the system may hang constantly. To reset the PC, pulse
|
|
b0 of the Output Port with command FEh instead.
|
|
DDh disable A20 (Not all systems support this byte)
|
|
DFh enable A20 (Not all systems support this byte)
|
|
E0h read test inputs. return value=
|
|
b1 kbd data
|
|
b0 kbd clock
|
|
EDh nn write LEDs. nn=
|
|
b2 Caps Lock
|
|
b1 Num Lock
|
|
b0 Scroll Lock
|
|
F0h-FFh pulse bit(s) of Output Port low for 6 microseconds.
|
|
If b0-b3 of the command is low, the corresponding bit
|
|
in the Output Port will be pulsed low. b0=system reset,
|
|
and should ALWAYS be PULSED low, never set low constantly.
|
|
|
|
================================================================
|
|
KEYBOARD COMMANDS (from Table P0386 of PORTS.A)
|
|
================================================================
|
|
Before writing each byte of these commands to port 60h,
|
|
poll the status register (port 60h) until bit b1=0.
|
|
Unless otherwise noted: each command responds with FAh (ACKnowledge)
|
|
or FEh (Resend) after receiving each byte of the command.
|
|
|
|
EDh nn write LEDs, as above
|
|
EEh echo, keyboard responds with EEh
|
|
EFh no-operation (reserved)
|
|
F0h nn selects scancode set nn=1-3 or 0 to return current set
|
|
F2h read ID. Keyboard responds with ACK (FAh) and two optional
|
|
ID bytes:
|
|
(none) AT keyboard
|
|
83h ABh (?)
|
|
ABh 41h MF2, translation mode
|
|
ABh 83h MF2, pass-through mode
|
|
F3h nn set typematic (auto-repeat) rate/delay. nn=
|
|
b7 unused
|
|
b6..5 Repeat delay (00=250 msec ... 11=1000msec)
|
|
b4..0 Repeat rate (00000=30 Hz ... 11111=2 Hz).
|
|
F4h clears output buffer, enables keyboard
|
|
F5h disables keyboard, resets to defaults
|
|
F6h sets keyboard defaults
|
|
|
|
F7h make all keys typematic (auto-repeat) [*]
|
|
F8h make all keys make-break [*]
|
|
F9h make all keys make-only [*]
|
|
FAh make all keys typematic and make-break [*]
|
|
FBh nn make one key typematic [*]
|
|
FCh nn make one key make-break [*]
|
|
FDh nn make one key make-only [*]
|
|
[*] these commands may work only for
|
|
scancode set 3; I'm not sure.
|
|
FEh resend previous scan code
|
|
FFh reset keyboard CPU, do power-on self-test, return
|
|
self-test result byte
|
|
|
|
non-key status bytes
|
|
--------------------
|
|
00h Key detection error or buffer full.
|
|
AAh Power-on/reset diagnostics successful.
|
|
E0h (scancode sets 1 and 2) Prefix byte for "gray" keys
|
|
(keys not on original 83-/84-key keyboard)
|
|
EEh Sent in response to ECHO command.
|
|
F0h (scancode sets 2 and 3) Prefix byte for break codes.
|
|
FAh ACKknowledge; response to most commands.
|
|
FCh Diagnostics failed (MF keyboard).
|
|
FDh Diagnostics failed (AT keyboard).
|
|
The keyboard stops scanning and waits for next command
|
|
after returning code FCh or FDh
|
|
FEh Last command was invalid or had parity error; resend it.
|
|
FFh Key detection error or buffer full.
|
|
|
|
====================================================================
|
|
SCANCODES FOR SCANCODE SET 1 (XT)
|
|
====================================================================
|
|
US 104-key keyboard, set 1 scancodes
|
|
|
|
|
|
"Make" code is generated when key is pressed.
|
|
"Break" code is generated when key is released.
|
|
Hex value of make code for each key is shown.
|
|
|
|
Most keys:
|
|
one-byte make code = nn
|
|
one-byte repeat code = nn
|
|
one-byte break code = 80h + nn
|
|
|
|
"Gray" keys (not on original 84-key keyboard):
|
|
two-byte make code = E0nn
|
|
two-byte repeat code = E0nn
|
|
two-byte break code = E0 followed by 80h + nn
|
|
|
|
"Gray" keys noted by [1] are NumLock-sensitive.
|
|
When the keyboard's internal NumLock is active:
|
|
four-byte make code = E02AE0nn
|
|
two-byte repeat code = E0nn
|
|
four-byte break code = E0 followed by 80h + nn followed by E0AA
|
|
|
|
____ ___________________ ___________________ ___________________
|
|
| | | | | | | | | | | | | | | | |
|
|
|Esc | |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10 |F11 |F12 |
|
|
| | | | | | | | | | | | | | | | |
|
|
| 01| | 3B| 3C| 3D| 3E| | 3F| 40| 41| 42| | 43| 44| 57| 58|
|
|
|____| |____|____|____|____| |____|____|____|____| |____|____|____|____|
|
|
|
|
__________________________________________________________________________
|
|
| | | | | | | | | | | | | | | |
|
|
|~ |! |@ |# |$ |% |^ |& |* |( |) |_ |+ || |bksp|
|
|
|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |\ | |
|
|
| 29| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 2B| 0E|
|
|
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
|
|
| | | | | | | | | | | | | | |
|
|
|Tab |Q |W |E |R |T |Y |U |I |O |P |{ |} | |
|
|
| | | | | | | | | | | |[ |] | |
|
|
| 0F| 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| |
|
|
|____|____|____|____|____|____|____|____|____|____|____|____|____| |
|
|
| | | | | | | | | | | | | |
|
|
|Caps|A |S |D |F |G |H |J |K |L |: |" | Enter |
|
|
| | | | | | | | | | |; |' | |
|
|
| 3A| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 1C|
|
|
|____|____|____|____|____|____|____|____|____|____|____|____|______________|
|
|
| | | | | | | | | | | | |
|
|
| L Shift |Z |X |C |V |B |N |M |< |> |? | R Shift |
|
|
| | | | | | | | |, |. |/ | |
|
|
| 2A| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 35| 36|
|
|
|_________|____|____|____|____|____|____|____|____|____|____|______________|
|
|
| | | | | | | | |
|
|
|L Ctrl | L win | L Alt | space | R Alt | R win | menu |R Ctrl |
|
|
| |[1] | | | |[1] |[1] | |
|
|
| 1D| E05B| 38| 39| E038| E05C| E05D| E01D|
|
|
|_______|_______|_______|__________________|_______|_______|_______|_______|
|
|
|
|
|
|
[2] For PrintScreen/SysRq key: make code = E02AE037,
|
|
repeat code = E037, break code = E0B7E0AA
|
|
|
|
[3] The Pause/Break key does not repeat, and it does not
|
|
generate a break code. Its make code is E11D45E19DC5
|
|
|
|
____ ____ ____
|
|
| | | |
|
|
|Prt |Scrl|Paus|
|
|
|Scrn|Lock|Brk |
|
|
| [2]| 46| [3]|
|
|
|____|____|____|
|
|
|
|
____ ____ ____ ____ ____ ____ ____
|
|
| | | | | | | | |
|
|
|Ins |Home|PgUp| |Num |/ |* |- |
|
|
|[1] |[1] |[1] | |Lock| | | |
|
|
|E052|E047|E049| | 45|E035| 37| 4A|
|
|
|____|____|____| |____|____|____|____|
|
|
| | | | | | | | |
|
|
|Del |End |PgDn| |7 |8 |9 | |
|
|
|[1] |[1] |[1] | |Home|(U) |PgUp| |
|
|
|E053|E04F|E051| | 47| 48| 49| |
|
|
|____|____|____| |____|____|____| |
|
|
| | | |+ |
|
|
|4 |5 |6 | |
|
|
|(L) | |(R) | |
|
|
| 4B| 4C| 4D| 4E|
|
|
____ |____|____|____|____|
|
|
| | | | | | |
|
|
|(U) | |1 |2 |3 | |
|
|
|[1] | |End |(D) |PgDn| |
|
|
|E048| | 4F| 50| 51|Ent |
|
|
____|____|____ |____|____|____| |
|
|
| | | | | | | |
|
|
|(L) |(D) |(R) | |0 |. | |
|
|
|[1] |[1] |[1] | |Ins |Del | |
|
|
|E04B|E050|E04D| | 52| 53|E01C|
|
|
|____|____|____| |_________|____|____|
|
|
|
|
|
|
code key code key code key code key
|
|
---- --- ---- --- ---- --- ---- ---
|
|
01 Esc 0F Tab 1D L Ctrl 2B \|
|
|
02 1! 10 Q 1E A 2C Z
|
|
03 2" 11 W 1F S 2D X
|
|
04 3# 12 E 20 D 2E C
|
|
05 4$ 13 R 21 F 2F V
|
|
06 5% 14 T 22 G 30 B
|
|
07 6^ 15 Y 23 H 31 N
|
|
08 7& 16 U 24 J 32 M
|
|
09 8* 17 I 25 K 33 ,<
|
|
0A 9( 18 O 26 L 34 .>
|
|
0B 0) 19 P 27 ;: 35 /?
|
|
0C -_ 1A [{ 28 '" 36 R Shift
|
|
0D =+ 1B ]} 29 `~ 37 *
|
|
0E BackSpace 1C Enter 2A L Shift 38 L Alt
|
|
|
|
code key code key code key code key
|
|
---- --- ---- --- ---- --- ---- ---
|
|
39 Space 41 F7 49 PageUp 9 51 PageDown 3
|
|
3A CapsLock 42 F8 4A - 52 Insert 0
|
|
3B F1 43 F9 4B (left) 4 53 Del .
|
|
3C F2 44 F10 4C 5
|
|
3D F3 45 NumLock 4D (right) 6 57 F11
|
|
3E F4 46 ScrollLock 4E + 58 F12
|
|
3F F5 47 Home 7 4F End 1
|
|
40 F6 48 (up) 8 50 (down) 2
|
|
|
|
|
|
|
|
code key
|
|
---- ---
|
|
E01C Enter (on numeric keypad)
|
|
E01D R Ctrl
|
|
E02A make code prefix for keyboard internal numlock
|
|
E02AE037 PrintScreen make code
|
|
E035 /
|
|
E037 PrintScreen repeat code
|
|
E038 R Alt
|
|
E047 Home
|
|
E048 (up)
|
|
E049 PageUp
|
|
E04B (left)
|
|
E04D (right)
|
|
E04F End
|
|
E050 (down)
|
|
E051 PageDown
|
|
E052 Insert
|
|
E053 Del
|
|
E05B L Win
|
|
E05C R Win
|
|
E05D Menu
|
|
E0AA break code suffix for keyboard internal numlock
|
|
E0B7E0AA PrintScreen break code
|
|
E11D45E19DC5 Pause
|
|
|
|
====================================================================
|
|
SCANCODES FOR SCANCODE SET 2 (AT)
|
|
====================================================================
|
|
US 104-key keyboard, set 2 scancodes,
|
|
8042 AT-to-XT scancode translation OFF
|
|
|
|
"Make" code is generated when key is pressed.
|
|
"Break" code is generated when key is released.
|
|
Hex value of make code for each key is shown.
|
|
|
|
Most keys:
|
|
one-byte make code = nn
|
|
one-byte repeat code = nn
|
|
two-byte break code = F0nn
|
|
|
|
"Gray" keys (not on original 84-key keyboard):
|
|
two-byte make code = E0nn
|
|
two-byte repeat code = E0nn
|
|
three-byte break code = E0F0nn
|
|
|
|
"Gray" keys noted by [1] are NumLock-sensitive.
|
|
When the keyboard's internal NumLock is active:
|
|
four-byte make code = E012E0nn
|
|
two-byte repeat code = E0nn
|
|
six-byte break code = E0F0nnE0F012
|
|
|
|
____ ___________________ ___________________ ___________________
|
|
| | | | | | | | | | | | | | | | |
|
|
|Esc | |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10 |F11 |F12 |
|
|
| | | | | | | | | | | | | | | | |
|
|
| 76| | 05| 06| 04| 0C| | 03| 0B| 83| 0A| | 01| 09| 78| 07|
|
|
|____| |____|____|____|____| |____|____|____|____| |____|____|____|____|
|
|
|
|
__________________________________________________________________________
|
|
| | | | | | | | | | | | | | | |
|
|
|~ |! |@ |# |$ |% |^ |& |* |( |) |_ |+ || |bksp|
|
|
|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |\ | |
|
|
| 0E| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55| 5D| 66|
|
|
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
|
|
| | | | | | | | | | | | | | |
|
|
|Tab |Q |W |E |R |T |Y |U |I |O |P |{ |} | |
|
|
| | | | | | | | | | | |[ |] | |
|
|
| 0D| 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D| 54| 5B| |
|
|
|____|____|____|____|____|____|____|____|____|____|____|____|____| |
|
|
| | | | | | | | | | | | | |
|
|
|Caps|A |S |D |F |G |H |J |K |L |: |" | Enter |
|
|
| | | | | | | | | | |; |' | |
|
|
| 58| 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52| 5A|
|
|
|____|____|____|____|____|____|____|____|____|____|____|____|______________|
|
|
| | | | | | | | | | | | |
|
|
| L Shift |Z |X |C |V |B |N |M |< |> |? | R Shift |
|
|
| | | | | | | | |, |. |/ | |
|
|
| 12| 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A| 59|
|
|
|_________|____|____|____|____|____|____|____|____|____|____|______________|
|
|
| | | | | | | | |
|
|
|L Ctrl | L win | L Alt | space | R Alt | R win | menu |R Ctrl |
|
|
| |[1] | | | |[1] |[1] | |
|
|
| 14| E01F| 11| 29| E011| E027| E02F| E014|
|
|
|_______|_______|_______|__________________|_______|_______|_______|_______|
|
|
|
|
|
|
[2] For PrintScreen/SysRq key: make code = E012E07C,
|
|
repeat code = E07C, break code = E0F07CE0F012
|
|
|
|
[3] The Pause/Break key does not repeat, and it does not
|
|
generate a break code. Its make code is E11477E1F014F077
|
|
|
|
____ ____ ____
|
|
| | | |
|
|
|Prt |Scrl|Paus|
|
|
|Scrn|Lock|Brk |
|
|
| [2]| 7E| [3]|
|
|
|____|____|____|
|
|
|
|
____ ____ ____ ____ ____ ____ ____
|
|
| | | | | | | | |
|
|
|Ins |Home|PgUp| |Num |/ |* |- |
|
|
|[1] |[1] |[1] | |Lock| | | |
|
|
|E070|E06C|E07D| | 77|E04A| 7C| 7B|
|
|
|____|____|____| |____|____|____|____|
|
|
| | | | | | | | |
|
|
|Del |End |PgDn| |7 |8 |9 | |
|
|
|[1] |[1] |[1] | |Home|(U) |PgUp| |
|
|
|E071|E069|E07A| | 6C| 75| 7D| |
|
|
|____|____|____| |____|____|____| |
|
|
| | | |+ |
|
|
|4 |5 |6 | |
|
|
|(L) | |(R) | |
|
|
| 6B| 73| 74| 79|
|
|
____ |____|____|____|____|
|
|
| | | | | | |
|
|
|(U) | |1 |2 |3 | |
|
|
|[1] | |End |(D) |PgDn| |
|
|
|E075| | 69| 72| 7A|Ent |
|
|
____|____|____ |____|____|____| |
|
|
| | | | | | | |
|
|
|(L) |(D) |(R) | |0 |. | |
|
|
|[1] |[1] |[1] | |Ins |Del | |
|
|
|E06B|E072|E074| | 70| 71|E05A|
|
|
|____|____|____| |_________|____|____|
|
|
|
|
|
|
code key code key code key code key
|
|
---- --- ---- --- ---- --- ---- ---
|
|
01 F9 66 BackSpace
|
|
21 C 41 ,<
|
|
03 F5 22 X 42 K 69 End 1
|
|
04 F3 23 D 43 I
|
|
05 F1 24 E 44 O 6B (left) 4
|
|
06 F2 25 4$ 45 0) 6C Home 7
|
|
07 F12 26 3# 46 9(
|
|
70 Ins 0
|
|
09 F10 29 Space 49 .> 71 Del .
|
|
0A F8 2A V 4A /? 72 (down) 2
|
|
0B F6 2B F 4B L 73 5
|
|
0C F4 2C T 4C ;: 74 (right) 6
|
|
0D Tab 2D R 4D P 75 (up) 8
|
|
0E `~ 2E 5% 4E -_ 76 Esc
|
|
77 NumLock
|
|
11 L Alt 31 N 52 '" 78 F11
|
|
12 L Shift 32 B 79 +
|
|
33 H 54 [{ 7A PageDown 3
|
|
14 L Ctrl 34 G 55 =+ 7B -
|
|
15 Q 35 Y 7C *
|
|
16 1! 36 6^ 58 CapsLock 7D PageUp 9
|
|
59 R Shift 7E ScrollLock
|
|
1A Z 3A M 5A Enter
|
|
1B S 3B J 5B ]} 83 F7
|
|
1C A 3C U
|
|
1D W 3D 7& 5D \|
|
|
1E 2@ 3E 8*
|
|
|
|
code key
|
|
---- ---
|
|
E011 R Alt
|
|
E012E07C PrintScreen make code
|
|
E014 R Ctrl
|
|
E01F L Win
|
|
E027 R Win
|
|
E02F Menu
|
|
E04A /
|
|
E05A Enter (on numeric keypad)
|
|
E069 End
|
|
E06B Left
|
|
E06C Home
|
|
E070 Ins
|
|
E071 Del
|
|
E072 (down)
|
|
E074 (right)
|
|
E075 (up)
|
|
E07A PageDown
|
|
E07C PrintScreen repeat code
|
|
E07D PageUp
|
|
E0F07CE0F012 PrintScreen break code
|
|
E11477E1F014F077 Pause
|
|
|
|
====================================================================
|
|
SCANCODES FOR SCANCODE SET 3
|
|
====================================================================
|
|
US 104-key keyboard, set 3 scancodes
|
|
|
|
|
|
"Make" code is generated when key is pressed.
|
|
"Break" code is generated when key is released.
|
|
Hex value of make code for each key is shown.
|
|
|
|
All keys:
|
|
one-byte make code = nn
|
|
one-byte repeat code = nn
|
|
two-byte break code = F0nn
|
|
|
|
When operating in scancode set 3, the keyboard
|
|
does not maintain an internal NumLock state.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
____ ___________________ ___________________ ___________________
|
|
| | | | | | | | | | | | | | | | |
|
|
|Esc | |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10 |F11 |F12 |
|
|
| | | | | | | | | | | | | | | | |
|
|
| 08| | 07| 0F| 17| 1F| | 27| 2F| 37| 3F| | 47| 4F| 56| 5E|
|
|
|____| |____|____|____|____| |____|____|____|____| |____|____|____|____|
|
|
|
|
__________________________________________________________________________
|
|
| | | | | | | | | | | | | | | |
|
|
|~ |! |@ |# |$ |% |^ |& |* |( |) |_ |+ || |bksp|
|
|
|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |\ | |
|
|
| 0E| 16| 1E| 26| 25| 2E| 36| 3D| 3E| 46| 45| 4E| 55| 5C| 66|
|
|
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
|
|
| | | | | | | | | | | | | | |
|
|
|Tab |Q |W |E |R |T |Y |U |I |O |P |{ |} | |
|
|
| | | | | | | | | | | |[ |] | |
|
|
| 0D| 15| 1D| 24| 2D| 2C| 35| 3C| 43| 44| 4D| 54| 5B| |
|
|
|____|____|____|____|____|____|____|____|____|____|____|____|____| |
|
|
| | | | | | | | | | | | | |
|
|
|Caps|A |S |D |F |G |H |J |K |L |: |" | Enter |
|
|
| | | | | | | | | | |; |' | |
|
|
| 14| 1C| 1B| 23| 2B| 34| 33| 3B| 42| 4B| 4C| 52| 5A|
|
|
|____|____|____|____|____|____|____|____|____|____|____|____|______________|
|
|
| | | | | | | | | | | | |
|
|
| L Shift |Z |X |C |V |B |N |M |< |> |? | R Shift |
|
|
| | | | | | | | |, |. |/ | |
|
|
| 12| 1A| 22| 21| 2A| 32| 31| 3A| 41| 49| 4A| 59|
|
|
|_________|____|____|____|____|____|____|____|____|____|____|______________|
|
|
| | | | | | | | |
|
|
|L Ctrl | L win | L Alt | space | R Alt | R win | menu |R Ctrl |
|
|
| | | | | | | | |
|
|
| 11| 8B| 19| 29| 39| 8C| 8D| 58|
|
|
|_______|_______|_______|__________________|_______|_______|_______|_______|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
____ ____ ____
|
|
| | | |
|
|
|Prt |Scrl|Paus|
|
|
|Scrn|Lock|Brk |
|
|
| 57| 5F| 62|
|
|
|____|____|____|
|
|
|
|
____ ____ ____ ____ ____ ____ ____
|
|
| | | | | | | | |
|
|
|Ins |Home|PgUp| |Num |/ |* |- |
|
|
| | | | |Lock| | | |
|
|
| 67| 6E| 6F| | 76| 77| 7E| 84|
|
|
|____|____|____| |____|____|____|____|
|
|
| | | | | | | | |
|
|
|Del |End |PgDn| |7 |8 |9 | |
|
|
| | | | |Home|(U) |PgUp| |
|
|
| 64| 65| 6D| | 6C| 75| 7D| |
|
|
|____|____|____| |____|____|____| |
|
|
| | | |+ |
|
|
|4 |5 |6 | |
|
|
|(L) | |(R) | |
|
|
| 6B| 73| 74| 7C|
|
|
____ |____|____|____|____|
|
|
| | | | | | |
|
|
|(U) | |1 |2 |3 | |
|
|
| | |End |(D) |PgDn| |
|
|
| 63| | 69| 72| 7A|Ent |
|
|
____|____|____ |____|____|____| |
|
|
| | | | | | | |
|
|
|(L) |(D) |(R) | |0 |. | |
|
|
| | | | |Ins |Del | |
|
|
| 61| 60| 6A| | 70| 71| 79|
|
|
|____|____|____| |_________|____|____|
|
|
|
|
|
|
code key code key code key code key
|
|
---- --- ---- --- ---- --- ---- ---
|
|
07 F1 2A V 4A /? 6B (left) 4
|
|
08 Esc 2B F 4B L 6C Home 7
|
|
2C T 4C ;: 6D PageDown
|
|
0D Tab 2D R 4D P 6E Home
|
|
0E `~ 2E 5% 4E -_ 6F PageUp
|
|
0F F2 2F F6 4F F10 70 Ins 0
|
|
71 Del .
|
|
11 L Ctrl 31 N 52 '" 72 (down) 2
|
|
12 L Shift 32 B 73 5
|
|
33 H 54 [{ 74 (right) 6
|
|
14 CapsLock 34 G 55 =+ 75 (up) 8
|
|
15 Q 35 Y 56 F11 76 NumLock
|
|
16 1! 36 6^ 57 PrintScr 77 /
|
|
17 F3 37 F7 58 R Ctrl
|
|
59 R Shift 79 Enter (on numeric keypad)
|
|
19 L Alt 39 R Alt 5A Enter 7A PageDown 3
|
|
1A Z 3A M 5B ]}
|
|
1B S 3B J 5C \| 7C +
|
|
1C A 3C U 7D PageUp 9
|
|
1D W 3D 7& 5E F12 7E *
|
|
1E 2@ 3E 8* 5F ScrollLock
|
|
1F F4 3F F8 60 (down) 84 -
|
|
61 (left)
|
|
21 C 41 ,< 62 Pause 8B L Win
|
|
22 X 42 K 63 (up) 8C R Win
|
|
23 D 43 I 64 Del 8D Menu
|
|
24 E 44 O 65 End
|
|
25 4$ 45 0) 66 BackSpace
|
|
26 3# 46 9( 67 Ins
|
|
27 F5 47 F9
|
|
69 End 1
|
|
29 Space 49 .> 6A (right)
|