123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710 |
- Intelligent Keyboard (ikbd) Protocol
- 1. Introduction
- The Atari Corp. Intelligent Keyboard (ikbd) is a general purpose keyboard
- controller that is flexible enough that it can be used in a variety of
- products without modification. The keyboard, with its microcontroller,
- provides a convenient connection point for a mouse and switch-type joysticks.
- The ikbd processor also maintains a time-of-day clock with one second
- resolution.
- The ikbd has been designed to be general enough that it can be used with a
- variety of new computer products. Product variations in a number of
- keyswitches, mouse resolution, etc. can be accommodated.
- The ikbd communicates with the main processor over a high speed bi-directional
- serial interface. It can function in a variety of modes to facilitate
- different applications of the keyboard, joysticks, or mouse. Limited use of
- the controller is possible in applications in which only a unidirectional
- communications medium is available by carefully designing the default modes.
- 3. Keyboard
- The keyboard always returns key make/break scan codes. The ikbd generates
- keyboard scan codes for each key press and release. The key scan make (key
- closure) codes start at 1, and are defined in Appendix A. For example, the
- ISO key position in the scan code table should exist even if no keyswitch
- exists in that position on a particular keyboard. The break code for each key
- is obtained by ORing 0x80 with the make code.
- The special codes 0xF6 through 0xFF are reserved for use as follows:
- 0xF6 status report
- 0xF7 absolute mouse position record
- 0xF8-0xFB relative mouse position records (lsbs determined by
- mouse button states)
- 0xFC time-of-day
- 0xFD joystick report (both sticks)
- 0xFE joystick 0 event
- 0xFF joystick 1 event
- The two shift keys return different scan codes in this mode. The ENTER key
- and the RETurn key are also distinct.
- 4. Mouse
- The mouse port should be capable of supporting a mouse with resolution of
- approximately 200 counts (phase changes or 'clicks') per inch of travel. The
- mouse should be scanned at a rate that will permit accurate tracking at
- velocities up to 10 inches per second.
- The ikbd can report mouse motion in three distinctly different ways. It can
- report relative motion, absolute motion in a coordinate system maintained
- within the ikbd, or by converting mouse motion into keyboard cursor control
- key equivalents.
- The mouse buttons can be treated as part of the mouse or as additional
- keyboard keys.
- 4.1 Relative Position Reporting
- In relative position mode, the ikbd will return relative mouse position
- records whenever a mouse event occurs. A mouse event consists of a mouse
- button being pressed or released, or motion in either axis exceeding a
- settable threshold of motion. Regardless of the threshold, all bits of
- resolution are returned to the host computer.
- Note that the ikbd may return mouse relative position reports with
- significantly more than the threshold delta x or y. This may happen since no
- relative mouse motion events will be generated: (a) while the keyboard has
- been 'paused' ( the event will be stored until keyboard communications is
- resumed) (b) while any event is being transmitted.
- The relative mouse position record is a three byte record of the form
- (regardless of keyboard mode):
- %111110xy ; mouse position record flag
- ; where y is the right button state
- ; and x is the left button state
- X ; delta x as twos complement integer
- Y ; delta y as twos complement integer
- Note that the value of the button state bits should be valid even if the
- MOUSE BUTTON ACTION has set the buttons to act like part of the keyboard.
- If the accumulated motion before the report packet is generated exceeds the
- +127...-128 range, the motion is broken into multiple packets.
- Note that the sign of the delta y reported is a function of the Y origin
- selected.
- 4.2 Absolute Position reporting
- The ikbd can also maintain absolute mouse position. Commands exist for
- resetting the mouse position, setting X/Y scaling, and interrogating the
- current mouse position.
- 4.3 Mouse Cursor Key Mode
- The ikbd can translate mouse motion into the equivalent cursor keystrokes.
- The number of mouse clicks per keystroke is independently programmable in
- each axis. The ikbd internally maintains mouse motion information to the
- highest resolution available, and merely generates a pair of cursor key events
- for each multiple of the scale factor.
- Mouse motion produces the cursor key make code immediately followed by the
- break code for the appropriate cursor key. The mouse buttons produce scan
- codes above those normally assigned for the largest envisioned keyboard (i.e.
- LEFT=0x74 & RIGHT=0x75).
- 5. Joystick
- 5.1 Joystick Event Reporting
- In this mode, the ikbd generates a record whenever the joystick position is
- changed (i.e. for each opening or closing of a joystick switch or trigger).
- The joystick event record is two bytes of the form:
- %1111111x ; Joystick event marker
- ; where x is Joystick 0 or 1
- %x000yyyy ; where yyyy is the stick position
- ; and x is the trigger
- 5.2 Joystick Interrogation
- The current state of the joystick ports may be interrogated at any time in
- this mode by sending an 'Interrogate Joystick' command to the ikbd.
- The ikbd response to joystick interrogation is a three byte report of the form
- 0xFD ; joystick report header
- %x000yyyy ; Joystick 0
- %x000yyyy ; Joystick 1
- ; where x is the trigger
- ; and yyy is the stick position
- 5.3 Joystick Monitoring
- A mode is available that devotes nearly all of the keyboard communications
- time to reporting the state of the joystick ports at a user specifiable rate.
- It remains in this mode until reset or commanded into another mode. The PAUSE
- command in this mode not only stop the output but also temporarily stops
- scanning the joysticks (samples are not queued).
- 5.4 Fire Button Monitoring
- A mode is provided to permit monitoring a single input bit at a high rate. In
- this mode the ikbd monitors the state of the Joystick 1 fire button at the
- maximum rate permitted by the serial communication channel. The data is packed
- 8 bits per byte for transmission to the host. The ikbd remains in this mode
- until reset or commanded into another mode. The PAUSE command in this mode not
- only stops the output but also temporarily stops scanning the button (samples
- are not queued).
- 5.5 Joystick Key Code Mode
- The ikbd may be commanded to translate the use of either joystick into the
- equivalent cursor control keystroke(s). The ikbd provides a single breakpoint
- velocity joystick cursor.
- Joystick events produce the make code, immediately followed by the break code
- for the appropriate cursor motion keys. The trigger or fire buttons of the
- joysticks produce pseudo key scan codes above those used by the largest key
- matrix envisioned (i.e. JOYSTICK0=0x74, JOYSTICK1=0x75).
- 6. Time-of-Day Clock
- The ikbd also maintains a time-of-day clock for the system. Commands are
- available to set and interrogate the timer-of-day clock. Time-keeping is
- maintained down to a resolution of one second.
- 7. Status Inquiries
- The current state of ikbd modes and parameters may be found by sending status
- inquiry commands that correspond to the ikbd set commands.
- 8. Power-Up Mode
- The keyboard controller will perform a simple self-test on power-up to detect
- major controller faults (ROM checksum and RAM test) and such things as stuck
- keys. Any keys down at power-up are presumed to be stuck, and their BREAK
- (sic) code is returned (which without the preceding MAKE code is a flag for a
- keyboard error). If the controller self-test completes without error, the code
- 0xF0 is returned. (This code will be used to indicate the version/release of
- the ikbd controller. The first release of the ikbd is version 0xF0, should
- there be a second release it will be 0xF1, and so on.)
- The ikbd defaults to a mouse position reporting with threshold of 1 unit in
- either axis and the Y=0 origin at the top of the screen, and joystick event
- reporting mode for joystick 1, with both buttons being logically assigned to
- the mouse. After any joystick command, the ikbd assumes that joysticks are
- connected to both Joystick0 and Joystick1. Any mouse command (except MOUSE
- DISABLE) then causes port 0 to again be scanned as if it were a mouse, and
- both buttons are logically connected to it. If a mouse disable command is
- received while port 0 is presumed to be a mouse, the button is logically
- assigned to Joystick1 (until the mouse is reenabled by another mouse command).
- 9. ikbd Command Set
- This section contains a list of commands that can be sent to the ikbd. Command
- codes (such as 0x00) which are not specified should perform no operation
- (NOPs).
- 9.1 RESET
- 0x80
- 0x01
- N.B. The RESET command is the only two byte command understood by the ikbd.
- Any byte following an 0x80 command byte other than 0x01 is ignored (and causes
- the 0x80 to be ignored).
- A reset may also be caused by sending a break lasting at least 200mS to the
- ikbd.
- Executing the RESET command returns the keyboard to its default (power-up)
- mode and parameter settings. It does not affect the time-of-day clock.
- The RESET command or function causes the ikbd to perform a simple self-test.
- If the test is successful, the ikbd will send the code of 0xF0 within 300mS
- of receipt of the RESET command (or the end of the break, or power-up). The
- ikbd will then scan the key matrix for any stuck (closed) keys. Any keys found
- closed will cause the break scan code to be generated (the break code arriving
- without being preceded by the make code is a flag for a key matrix error).
- 9.2. SET MOUSE BUTTON ACTION
- 0x07
- %00000mss ; mouse button action
- ; (m is presumed = 1 when in MOUSE KEYCODE mode)
- ; mss=0xy, mouse button press or release causes mouse
- ; position report
- ; where y=1, mouse key press causes absolute report
- ; and x=1, mouse key release causes absolute report
- ; mss=100, mouse buttons act like keys
- This command sets how the ikbd should treat the buttons on the mouse. The
- default mouse button action mode is %00000000, the buttons are treated as part
- of the mouse logically.
- When buttons act like keys, LEFT=0x74 & RIGHT=0x75.
- 9.3 SET RELATIVE MOUSE POSITION REPORTING
- 0x08
- Set relative mouse position reporting. (DEFAULT) Mouse position packets are
- generated asynchronously by the ikbd whenever motion exceeds the setable
- threshold in either axis (see SET MOUSE THRESHOLD). Depending upon the mouse
- key mode, mouse position reports may also be generated when either mouse
- button is pressed or released. Otherwise the mouse buttons behave as if they
- were keyboard keys.
- 9.4 SET ABSOLUTE MOUSE POSITIONING
- 0x09
- XMSB ; X maximum (in scaled mouse clicks)
- XLSB
- YMSB ; Y maximum (in scaled mouse clicks)
- YLSB
-
- Set absolute mouse position maintenance. Resets the ikbd maintained X and Y
- coordinates.
- In this mode, the value of the internally maintained coordinates does NOT wrap
- between 0 and large positive numbers. Excess motion below 0 is ignored. The
- command sets the maximum positive value that can be attained in the scaled
- coordinate system. Motion beyond that value is also ignored.
- 9.5 SET MOUSE KEYCODE MOSE
- 0x0A
- deltax ; distance in X clicks to return (LEFT) or (RIGHT)
- deltay ; distance in Y clicks to return (UP) or (DOWN)
- Set mouse monitoring routines to return cursor motion keycodes instead of
- either RELATIVE or ABSOLUTE motion records. The ikbd returns the appropriate
- cursor keycode after mouse travel exceeding the user specified deltas in
- either axis. When the keyboard is in key scan code mode, mouse motion will
- cause the make code immediately followed by the break code. Note that this
- command is not affected by the mouse motion origin.
- 9..6 SET MOUSE THRESHOLD
- 0x0B
- X ; x threshold in mouse ticks (positive integers)
- Y ; y threshold in mouse ticks (positive integers)
- This command sets the threshold before a mouse event is generated. Note that
- it does NOT affect the resolution of the data returned to the host. This
- command is valid only in RELATIVE MOUSE POSITIONING mode. The thresholds
- default to 1 at RESET (or power-up).
- 9.7 SET MOUSE SCALE
- 0x0C
- X ; horizontal mouse ticks per internal X
- Y ; vertical mouse ticks per internal Y
- This command sets the scale factor for the ABSOLUTE MOUSE POSITIONING mode.
- In this mode, the specified number of mouse phase changes ('clicks') must
- occur before the internally maintained coordinate is changed by one
- (independently scaled for each axis). Remember that the mouse position
- information is available only by interrogating the ikbd in the ABSOLUTE MOUSE
- POSITIONING mode unless the ikbd has been commanded to report on button press
- or release (see SET MOSE BUTTON ACTION).
- 9.8 INTERROGATE MOUSE POSITION
- 0x0D
- Returns:
- 0xF7 ; absolute mouse position header
- BUTTONS
- 0000dcba ; where a is right button down since last interrogation
- ; b is right button up since last
- ; c is left button down since last
- ; d is left button up since last
- XMSB ; X coordinate
- XLSB
- YMSB ; Y coordinate
- YLSB
- The INTERROGATE MOUSE POSITION command is valid when in the ABSOLUTE MOUSE
- POSITIONING mode, regardless of the setting of the MOUSE BUTTON ACTION.
- 9.9 LOAD MOUSE POSITION
- 0x0E
- 0x00 ; filler
- XMSB ; X coordinate
- XLSB ; (in scaled coordinate system)
- YMSB ; Y coordinate
- YLSB
- This command allows the user to preset the internally maintained absolute
- mouse position.
- 9.10 SET Y=0 AT BOTTOM
- 0x0F
- This command makes the origin of the Y axis to be at the bottom of the
- logical coordinate system internal to the ikbd for all relative or absolute
- mouse motion. This causes mouse motion toward the user to be negative in sign
- and away from the user to be positive.
- 9.11 SET Y=0 AT TOP
- 0x10
- Makes the origin of the Y axis to be at the top of the logical coordinate
- system within the ikbd for all relative or absolute mouse motion. (DEFAULT)
- This causes mouse motion toward the user to be positive in sign and away from
- the user to be negative.
- 9.12 RESUME
- 0x11
- Resume sending data to the host. Since any command received by the ikbd after
- its output has been paused also causes an implicit RESUME this command can be
- thought of as a NO OPERATION command. If this command is received by the ikbd
- and it is not PAUSED, it is simply ignored.
- 9.13 DISABLE MOUSE
- 0x12
- All mouse event reporting is disabled (and scanning may be internally
- disabled). Any valid mouse mode command resumes mouse motion monitoring. (The
- valid mouse mode commands are SET RELATIVE MOUSE POSITION REPORTING, SET
- ABSOLUTE MOUSE POSITIONING, and SET MOUSE KEYCODE MODE. )
- N.B. If the mouse buttons have been commanded to act like keyboard keys, this
- command DOES affect their actions.
- 9.14 PAUSE OUTPUT
- 0x13
- Stop sending data to the host until another valid command is received. Key
- matrix activity is still monitored and scan codes or ASCII characters enqueued
- (up to the maximum supported by the microcontroller) to be sent when the host
- allows the output to be resumed. If in the JOYSTICK EVENT REPORTING mode,
- joystick events are also queued.
- Mouse motion should be accumulated while the output is paused. If the ikbd is
- in RELATIVE MOUSE POSITIONING REPORTING mode, motion is accumulated beyond the
- normal threshold limits to produce the minimum number of packets necessary for
- transmission when output is resumed. Pressing or releasing either mouse button
- causes any accumulated motion to be immediately queued as packets, if the
- mouse is in RELATIVE MOUSE POSITION REPORTING mode.
- Because of the limitations of the microcontroller memory this command should
- be used sparingly, and the output should not be shut of for more than <tbd>
- milliseconds at a time.
- The output is stopped only at the end of the current 'even'. If the PAUSE
- OUTPUT command is received in the middle of a multiple byte report, the packet
- will still be transmitted to conclusion and then the PAUSE will take effect.
- When the ikbd is in either the JOYSTICK MONITORING mode or the FIRE BUTTON
- MONITORING mode, the PAUSE OUTPUT command also temporarily stops the
- monitoring process (i.e. the samples are not enqueued for transmission).
- 0.15 SET JOYSTICK EVENT REPORTING
- 0x14
- Enter JOYSTICK EVENT REPORTING mode (DEFAULT). Each opening or closure of a
- joystick switch or trigger causes a joystick event record to be generated.
- 9.16 SET JOYSTICK INTERROGATION MODE
- 0x15
- Disables JOYSTICK EVENT REPORTING. Host must send individual JOYSTICK
- INTERROGATE commands to sense joystick state.
- 9.17 JOYSTICK INTERROGATE
- 0x16
- Return a record indicating the current state of the joysticks. This command
- is valid in either the JOYSTICK EVENT REPORTING mode or the JOYSTICK
- INTERROGATION MODE.
- 9.18 SET JOYSTICK MONITORING
- 0x17
- rate ; time between samples in hundredths of a second
- Returns: (in packets of two as long as in mode)
- %000000xy ; where y is JOYSTICK1 Fire button
- ; and x is JOYSTICK0 Fire button
- %nnnnmmmm ; where m is JOYSTICK1 state
- ; and n is JOYSTICK0 state
- Sets the ikbd to do nothing but monitor the serial command line, maintain the
- time-of-day clock, and monitor the joystick. The rate sets the interval
- between joystick samples.
- N.B. The user should not set the rate higher than the serial communications
- channel will allow the 2 bytes packets to be transmitted.
- 9.19 SET FIRE BUTTON MONITORING
- 0x18
- Returns: (as long as in mode)
- %bbbbbbbb ; state of the JOYSTICK1 fire button packed
- ; 8 bits per byte, the first sample if the MSB
- Set the ikbd to do nothing but monitor the serial command line, maintain the
- time-of-day clock, and monitor the fire button on Joystick 1. The fire button
- is scanned at a rate that causes 8 samples to be made in the time it takes for
- the previous byte to be sent to the host (i.e. scan rate = 8/10 * baud rate).
- The sample interval should be as constant as possible.
- 9.20 SET JOYSTICK KEYCODE MODE
- 0x19
- RX ; length of time (in tenths of seconds) until
- ; horizontal velocity breakpoint is reached
- RY ; length of time (in tenths of seconds) until
- ; vertical velocity breakpoint is reached
- TX ; length (in tenths of seconds) of joystick closure
- ; until horizontal cursor key is generated before RX
- ; has elapsed
- TY ; length (in tenths of seconds) of joystick closure
- ; until vertical cursor key is generated before RY
- ; has elapsed
- VX ; length (in tenths of seconds) of joystick closure
- ; until horizontal cursor keystrokes are generated
- ; after RX has elapsed
- VY ; length (in tenths of seconds) of joystick closure
- ; until vertical cursor keystrokes are generated
- ; after RY has elapsed
- In this mode, joystick 0 is scanned in a way that simulates cursor keystrokes.
- On initial closure, a keystroke pair (make/break) is generated. Then up to Rn
- tenths of seconds later, keystroke pairs are generated every Tn tenths of
- seconds. After the Rn breakpoint is reached, keystroke pairs are generated
- every Vn tenths of seconds. This provides a velocity (auto-repeat) breakpoint
- feature.
- Note that by setting RX and/or Ry to zero, the velocity feature can be
- disabled. The values of TX and TY then become meaningless, and the generation
- of cursor 'keystrokes' is set by VX and VY.
- 9.21 DISABLE JOYSTICKS
- 0x1A
- Disable the generation of any joystick events (and scanning may be internally
- disabled). Any valid joystick mode command resumes joystick monitoring. (The
- joystick mode commands are SET JOYSTICK EVENT REPORTING, SET JOYSTICK
- INTERROGATION MODE, SET JOYSTICK MONITORING, SET FIRE BUTTON MONITORING, and
- SET JOYSTICK KEYCODE MODE.)
- 9.22 TIME-OF-DAY CLOCK SET
- 0x1B
- YY ; year (2 least significant digits)
- MM ; month
- DD ; day
- hh ; hour
- mm ; minute
- ss ; second
- All time-of-day data should be sent to the ikbd in packed BCD format.
- Any digit that is not a valid BCD digit should be treated as a 'don't care'
- and not alter that particular field of the date or time. This permits setting
- only some subfields of the time-of-day clock.
- 9.23 INTERROGATE TIME-OF-DAT CLOCK
- 0x1C
- Returns:
- 0xFC ; time-of-day event header
- YY ; year (2 least significant digits)
- MM ; month
- DD ; day
- hh ; hour
- mm ; minute
- ss ; second
- All time-of-day is sent in packed BCD format.
- 9.24 MEMORY LOAD
- 0x20
- ADRMSB ; address in controller
- ADRLSB ; memory to be loaded
- NUM ; number of bytes (0-128)
- { data }
- This command permits the host to load arbitrary values into the ikbd
- controller memory. The time between data bytes must be less than 20ms.
- 9.25 MEMORY READ
- 0x21
- ADRMSB ; address in controller
- ADRLSB ; memory to be read
- Returns:
- 0xF6 ; status header
- 0x20 ; memory access
- { data } ; 6 data bytes starting at ADR
- This command permits the host to read from the ikbd controller memory.
- 9.26 CONTROLLER EXECUTE
- 0x22
- ADRMSB ; address of subroutine in
- ADRLSB ; controller memory to be called
- This command allows the host to command the execution of a subroutine in the
- ikbd controller memory.
- 9.27 STATUS INQUIRIES
-
- Status commands are formed by inclusively ORing 0x80 with the
- relevant SET command.
- Example:
- 0x88 (or 0x89 or 0x8A) ; request mouse mode
- Returns:
- 0xF6 ; status response header
- mode ; 0x08 is RELATIVE
- ; 0x09 is ABSOLUTE
- ; 0x0A is KEYCODE
- param1 ; 0 is RELATIVE
- ; XMSB maximum if ABSOLUTE
- ; DELTA X is KEYCODE
- param2 ; 0 is RELATIVE
- ; YMSB maximum if ABSOLUTE
- ; DELTA Y is KEYCODE
- param3 ; 0 if RELATIVE
- ; or KEYCODE
- ; YMSB is ABSOLUTE
- param4 ; 0 if RELATIVE
- ; or KEYCODE
- ; YLSB is ABSOLUTE
- 0 ; pad
- 0
- The STATUS INQUIRY commands request the ikbd to return either the current mode
- or the parameters associated with a given command. All status reports are
- padded to form 8 byte long return packets. The responses to the status
- requests are designed so that the host may store them away (after stripping
- off the status report header byte) and later send them back as commands to
- ikbd to restore its state. The 0 pad bytes will be treated as NOPs by the
- ikbd.
- Valid STATUS INQUIRY commands are:
- 0x87 mouse button action
- 0x88 mouse mode
- 0x89
- 0x8A
- 0x8B mnouse threshold
- 0x8C mouse scale
- 0x8F mouse vertical coordinates
- 0x90 ( returns 0x0F Y=0 at bottom
- 0x10 Y=0 at top )
- 0x92 mouse enable/disable
- ( returns 0x00 enabled)
- 0x12 disabled )
- 0x94 joystick mode
- 0x95
- 0x96
- 0x9A joystick enable/disable
- ( returns 0x00 enabled
- 0x1A disabled )
- It is the (host) programmer's responsibility to have only one unanswered
- inquiry in process at a time.
- STATUS INQUIRY commands are not valid if the ikbd is in JOYSTICK MONITORING
- mode or FIRE BUTTON MONITORING mode.
- 10. SCAN CODES
- The key scan codes returned by the ikbd are chosen to simplify the
- implementation of GSX.
- GSX Standard Keyboard Mapping.
- Hex Keytop
- 01 Esc
- 02 1
- 03 2
- 04 3
- 05 4
- 06 5
- 07 6
- 08 7
- 09 8
- 0A 9
- 0B 0
- 0C -
- 0D ==
- 0E BS
- 0F TAB
- 10 Q
- 11 W
- 12 E
- 13 R
- 14 T
- 15 Y
- 16 U
- 17 I
- 18 O
- 19 P
- 1A [
- 1B ]
- 1C RET
- 1D CTRL
- 1E A
- 1F S
- 20 D
- 21 F
- 22 G
- 23 H
- 24 J
- 25 K
- 26 L
- 27 ;
- 28 '
- 29 `
- 2A (LEFT) SHIFT
- 2B \
- 2C Z
- 2D X
- 2E C
- 2F V
- 30 B
- 31 N
- 32 M
- 33 ,
- 34 .
- 35 /
- 36 (RIGHT) SHIFT
- 37 { NOT USED }
- 38 ALT
- 39 SPACE BAR
- 3A CAPS LOCK
- 3B F1
- 3C F2
- 3D F3
- 3E F4
- 3F F5
- 40 F6
- 41 F7
- 42 F8
- 43 F9
- 44 F10
- 45 { NOT USED }
- 46 { NOT USED }
- 47 HOME
- 48 UP ARROW
- 49 { NOT USED }
- 4A KEYPAD -
- 4B LEFT ARROW
- 4C { NOT USED }
- 4D RIGHT ARROW
- 4E KEYPAD +
- 4F { NOT USED }
- 50 DOWN ARROW
- 51 { NOT USED }
- 52 INSERT
- 53 DEL
- 54 { NOT USED }
- 5F { NOT USED }
- 60 ISO KEY
- 61 UNDO
- 62 HELP
- 63 KEYPAD (
- 64 KEYPAD /
- 65 KEYPAD *
- 66 KEYPAD *
- 67 KEYPAD 7
- 68 KEYPAD 8
- 69 KEYPAD 9
- 6A KEYPAD 4
- 6B KEYPAD 5
- 6C KEYPAD 6
- 6D KEYPAD 1
- 6E KEYPAD 2
- 6F KEYPAD 3
- 70 KEYPAD 0
- 71 KEYPAD .
- 72 KEYPAD ENTER
|