| 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 |