linux/Documentation/input/atarikbd.txt
<<
>>
Prefs
   1Intelligent Keyboard (ikbd) Protocol
   2
   3
   41. Introduction
   5
   6The Atari Corp. Intelligent Keyboard (ikbd) is a general purpose keyboard
   7controller that is flexible enough that it can be used in a variety of
   8products without modification. The keyboard, with its microcontroller,
   9provides a convenient connection point for a mouse and switch-type joysticks.
  10The ikbd processor also maintains a time-of-day clock with one second
  11resolution.
  12The ikbd has been designed to be general enough that it can be used with a
  13variety of new computer products. Product variations in a number of
  14keyswitches, mouse resolution, etc. can be accommodated.
  15The ikbd communicates with the main processor over a high speed bi-directional
  16serial interface. It can function in a variety of modes to facilitate
  17different applications of the keyboard,  joysticks, or mouse. Limited use of
  18the controller is possible in applications in which only a unidirectional
  19communications medium is available by carefully designing the default modes.
  20
  213. Keyboard
  22
  23The keyboard always returns key make/break scan codes. The ikbd generates
  24keyboard scan codes for each key press and release. The key scan make (key
  25closure) codes start at 1, and are defined in Appendix A. For example, the
  26ISO key position in the scan code table should exist even if no keyswitch
  27exists in that position on a particular keyboard. The break code for each key
  28is obtained by ORing 0x80 with the make code.
  29
  30The special codes 0xF6 through 0xFF are reserved for use as follows:
  31    0xF6            status report
  32    0xF7            absolute mouse position record
  33    0xF8-0xFB       relative mouse position records (lsbs determined by
  34                     mouse button states)
  35    0xFC            time-of-day
  36    0xFD            joystick report (both sticks)
  37    0xFE            joystick 0 event
  38    0xFF            joystick 1 event
  39
  40The two shift keys return different scan codes in this mode. The ENTER key
  41and the RETurn key are also distinct.
  42
  434. Mouse
  44
  45The mouse port should be capable of supporting a mouse with resolution of
  46approximately 200 counts (phase changes or 'clicks') per inch of travel. The
  47mouse should be scanned at a rate that will permit accurate tracking at
  48velocities up to 10 inches per second.
  49The ikbd can report mouse motion in three distinctly different ways. It can
  50report relative motion, absolute motion in a coordinate system maintained
  51within the ikbd, or by converting mouse motion into keyboard cursor control
  52key equivalents.
  53The mouse buttons can be treated as part of the mouse or as additional
  54keyboard keys.
  55
  564.1 Relative Position Reporting
  57
  58In relative position mode, the ikbd will return relative mouse position
  59records whenever a mouse event occurs. A mouse event consists of a mouse
  60button being pressed or released, or motion in either axis exceeding a
  61settable threshold of motion. Regardless of the threshold, all bits of
  62resolution are returned to the host computer.
  63Note that the ikbd may return mouse relative position reports with
  64significantly more than the threshold delta x or y. This may happen since no
  65relative mouse motion events will be generated: (a) while the keyboard has
  66been 'paused' ( the event will be stored until keyboard communications is
  67resumed) (b) while any event is being transmitted.
  68
  69The relative mouse position record is a three byte record of the form
  70(regardless of keyboard mode):
  71    %111110xy           ; mouse position record flag
  72                        ; where y is the right button state
  73                        ; and x is the left button state
  74    X                   ; delta x as twos complement integer
  75    Y                   ; delta y as twos complement integer
  76
  77Note that the value of the button state bits should be valid even if the
  78MOUSE BUTTON ACTION has set the buttons to act like part of the keyboard.
  79If the accumulated motion before the report packet is generated exceeds the
  80+127...-128 range, the motion is broken into multiple packets.
  81Note that the sign of the delta y reported is a function of the Y origin
  82selected.
  83
  844.2 Absolute Position reporting
  85
  86The ikbd can also maintain absolute mouse position. Commands exist for
  87resetting the mouse position, setting X/Y scaling, and interrogating the
  88current mouse position.
  89
  904.3 Mouse Cursor Key Mode
  91
  92The ikbd can translate mouse motion into the equivalent cursor keystrokes.
  93The number of mouse clicks per keystroke is independently programmable in
  94each axis. The ikbd internally maintains mouse motion information to the
  95highest resolution available, and merely generates a pair of cursor key events
  96for each multiple of the scale factor.
  97Mouse motion produces the cursor key make code immediately followed by the
  98break code for the appropriate cursor key. The mouse buttons produce scan
  99codes above those normally assigned for the largest envisioned keyboard (i.e.
 100LEFT=0x74 & RIGHT=0x75).
 101
 1025. Joystick
 103
 1045.1 Joystick Event Reporting
 105
 106In this mode, the ikbd generates a record whenever the joystick position is
 107changed (i.e. for each opening or closing of a joystick switch or trigger).
 108
 109The joystick event record is two bytes of the form:
 110    %1111111x           ; Joystick event marker
 111                        ; where x is Joystick 0 or 1
 112    %x000yyyy           ; where yyyy is the stick position
 113                        ; and x is the trigger
 114
 1155.2 Joystick Interrogation
 116
 117The current state of the joystick ports may be interrogated at any time in
 118this mode by sending an 'Interrogate Joystick' command to the ikbd.
 119
 120The ikbd response to joystick interrogation is a three byte report of the form
 121    0xFD                ; joystick report header
 122    %x000yyyy           ; Joystick 0
 123    %x000yyyy           ; Joystick 1
 124                        ; where x is the trigger
 125                        ; and yyy is the stick position
 126
 1275.3 Joystick Monitoring
 128
 129A mode is available that devotes nearly all of the keyboard communications
 130time to reporting the state of the joystick ports at a user specifiable rate.
 131It remains in this mode until reset or commanded into another mode. The PAUSE
 132command in this mode not only stop the output but also temporarily stops
 133scanning the joysticks (samples are not queued).
 134
 1355.4 Fire Button Monitoring
 136
 137A mode is provided to permit monitoring a single input bit at a high rate. In
 138this mode the ikbd monitors the state of the Joystick 1 fire button at the
 139maximum rate permitted by the serial communication channel. The data is packed
 1408 bits per byte for transmission to the host. The ikbd remains in this mode
 141until reset or commanded into another mode. The PAUSE command in this mode not
 142only stops the output but also temporarily stops scanning the button (samples
 143are not queued).
 144
 1455.5 Joystick Key Code Mode
 146
 147The ikbd may be commanded to translate the use of either joystick into the
 148equivalent cursor control keystroke(s). The ikbd provides a single breakpoint
 149velocity joystick cursor.
 150Joystick events produce the make code, immediately followed by the break code
 151for the appropriate cursor motion keys. The trigger or fire buttons of the
 152joysticks produce pseudo key scan codes above those used by the largest key
 153matrix envisioned (i.e. JOYSTICK0=0x74, JOYSTICK1=0x75).
 154
 1556. Time-of-Day Clock
 156
 157The ikbd also maintains a time-of-day clock for the system. Commands are
 158available to set and interrogate the timer-of-day clock. Time-keeping is
 159maintained down to a resolution of one second.
 160
 1617. Status Inquiries
 162
 163The current state of ikbd modes and parameters may be found by sending status
 164inquiry commands that correspond to the ikbd set commands.
 165
 1668. Power-Up Mode
 167
 168The keyboard controller will perform a simple self-test on power-up to detect
 169major controller faults (ROM checksum and RAM test) and such things as stuck
 170keys. Any keys down at power-up are presumed to be stuck, and their BREAK
 171(sic) code is returned (which without the preceding MAKE code is a flag for a
 172keyboard error). If the controller self-test completes without error, the code
 1730xF0 is returned. (This code will be used to indicate the version/release of
 174the ikbd controller. The first release of the ikbd is version 0xF0, should
 175there be a second release it will be 0xF1, and so on.)
 176The ikbd defaults to a mouse position reporting with threshold of 1 unit in
 177either axis and the Y=0 origin at the top of the screen, and joystick event
 178reporting mode for joystick 1, with both buttons being logically assigned to
 179the mouse. After any joystick command, the ikbd assumes that joysticks are
 180connected to both Joystick0 and Joystick1. Any mouse command (except MOUSE
 181DISABLE) then causes port 0 to again be scanned as if it were a mouse, and
 182both buttons are logically connected to it. If a mouse disable command is
 183received while port 0 is presumed to be a mouse, the button is logically
 184assigned to Joystick1 (until the mouse is reenabled by another mouse command).
 185
 1869. ikbd Command Set
 187
 188This section contains a list of commands that can be sent to the ikbd. Command
 189codes (such as 0x00) which are not specified should perform no operation
 190(NOPs).
 191
 1929.1 RESET
 193
 194    0x80
 195    0x01
 196
 197N.B. The RESET command is the only two byte command understood by the ikbd.
 198Any byte following an 0x80 command byte other than 0x01 is ignored (and causes
 199the 0x80 to be ignored).
 200A reset may also be caused by sending a break lasting at least 200mS to the
 201ikbd.
 202Executing the RESET command returns the keyboard to its default (power-up)
 203mode and parameter settings. It does not affect the time-of-day clock.
 204The RESET command or function causes the ikbd to perform a simple self-test.
 205If the test is successful, the ikbd will send the code of 0xF0 within 300mS
 206of receipt of the RESET command (or the end of the break, or power-up). The
 207ikbd will then scan the key matrix for any stuck (closed) keys. Any keys found
 208closed will cause the break scan code to be generated (the break code arriving
 209without being preceded by the make code is a flag for a key matrix error).
 210
 2119.2. SET MOUSE BUTTON ACTION
 212
 213    0x07
 214    %00000mss           ; mouse button action
 215                        ;       (m is presumed = 1 when in MOUSE KEYCODE mode)
 216                        ; mss=0xy, mouse button press or release causes mouse
 217                        ;  position report
 218                        ;  where y=1, mouse key press causes absolute report
 219                        ;  and x=1, mouse key release causes absolute report
 220                        ; mss=100, mouse buttons act like keys 
 221
 222This command sets how the ikbd should treat the buttons on the mouse. The
 223default mouse button action mode is %00000000, the buttons are treated as part
 224of the mouse logically.
 225When buttons act like keys, LEFT=0x74 & RIGHT=0x75.
 226
 2279.3 SET RELATIVE MOUSE POSITION REPORTING
 228
 229    0x08
 230
 231Set relative mouse position reporting. (DEFAULT) Mouse position packets are
 232generated asynchronously by the ikbd whenever motion exceeds the setable
 233threshold in either axis (see SET MOUSE THRESHOLD). Depending upon the mouse
 234key mode, mouse position reports may also be generated when either mouse
 235button is pressed or released. Otherwise the mouse buttons behave as if they
 236were keyboard keys.
 237
 2389.4 SET ABSOLUTE MOUSE POSITIONING
 239
 240    0x09
 241    XMSB                ; X maximum (in scaled mouse clicks)
 242    XLSB
 243    YMSB                ; Y maximum (in scaled mouse clicks)
 244    YLSB
 245        
 246Set absolute mouse position maintenance. Resets the ikbd maintained X and Y
 247coordinates.
 248In this mode, the value of the internally maintained coordinates does NOT wrap
 249between 0 and large positive numbers. Excess motion below 0 is ignored. The
 250command sets the maximum positive value that can be attained in the scaled
 251coordinate system. Motion beyond that value is also ignored.
 252
 2539.5 SET MOUSE KEYCODE MOSE
 254
 255    0x0A
 256    deltax              ; distance in X clicks to return (LEFT) or (RIGHT)
 257    deltay              ; distance in Y clicks to return (UP) or (DOWN)
 258
 259Set mouse monitoring routines to return cursor motion keycodes instead of
 260either RELATIVE or ABSOLUTE motion records. The ikbd returns the appropriate
 261cursor keycode after mouse travel exceeding the user specified deltas in
 262either axis. When the keyboard is in key scan code mode, mouse motion will
 263cause the make code immediately followed by the break code. Note that this
 264command is not affected by the mouse motion origin.
 265
 2669..6 SET MOUSE THRESHOLD
 267
 268    0x0B
 269    X                   ; x threshold in mouse ticks (positive integers)
 270    Y                   ; y threshold in mouse ticks (positive integers)
 271
 272This command sets the threshold before a mouse event is generated. Note that
 273it does NOT affect the resolution of the data returned to the host. This
 274command is valid only in RELATIVE MOUSE POSITIONING mode. The thresholds
 275default to 1 at RESET (or power-up).
 276
 2779.7 SET MOUSE SCALE
 278
 279    0x0C
 280    X                   ; horizontal mouse ticks per internal X
 281    Y                   ; vertical mouse ticks per internal Y
 282
 283This command sets the scale factor for the ABSOLUTE MOUSE POSITIONING mode.
 284In this mode, the specified number of mouse phase changes ('clicks') must
 285occur before the internally maintained coordinate is changed by one
 286(independently scaled for each axis). Remember that the mouse position
 287information is available only by interrogating the ikbd in the ABSOLUTE MOUSE
 288POSITIONING mode unless the ikbd has been commanded to report on button press
 289or release (see SET MOSE BUTTON ACTION).
 290
 2919.8 INTERROGATE MOUSE POSITION
 292
 293    0x0D
 294    Returns:
 295            0xF7       ; absolute mouse position header
 296    BUTTONS
 297            0000dcba   ; where a is right button down since last interrogation
 298                       ; b is right button up since last
 299                       ; c is left button down since last
 300                       ; d is left button up since last
 301            XMSB       ; X coordinate
 302            XLSB
 303            YMSB       ; Y coordinate
 304            YLSB
 305
 306The INTERROGATE MOUSE POSITION command is valid when in the ABSOLUTE MOUSE
 307POSITIONING mode, regardless of the setting of the MOUSE BUTTON ACTION.
 308
 3099.9 LOAD MOUSE POSITION
 310
 311    0x0E
 312    0x00                ; filler
 313    XMSB                ; X coordinate
 314    XLSB                ; (in scaled coordinate system)
 315    YMSB                ; Y coordinate
 316    YLSB
 317
 318This command allows the user to preset the internally maintained absolute
 319mouse position.
 320
 3219.10 SET Y=0 AT BOTTOM
 322
 323    0x0F
 324
 325This command makes the origin of the Y axis to be at the bottom of the
 326logical coordinate system internal to the ikbd for all relative or absolute
 327mouse motion. This causes mouse motion toward the user to be negative in sign
 328and away from the user to be positive.
 329
 3309.11 SET Y=0 AT TOP
 331
 332    0x10
 333
 334Makes the origin of the Y axis to be at the top of the logical coordinate
 335system within the ikbd for all relative or absolute mouse motion. (DEFAULT)
 336This causes mouse motion toward the user to be positive in sign and away from
 337the user to be negative.
 338
 3399.12 RESUME
 340
 341    0x11
 342
 343Resume sending data to the host. Since any command received by the ikbd after
 344its output has been paused also causes an implicit RESUME this command can be
 345thought of as a NO OPERATION command. If this command is received by the ikbd
 346and it is not PAUSED, it is simply ignored.
 347
 3489.13 DISABLE MOUSE
 349
 350    0x12
 351
 352All mouse event reporting is disabled (and scanning may be internally
 353disabled). Any valid mouse mode command resumes mouse motion monitoring. (The
 354valid mouse mode commands are SET RELATIVE MOUSE POSITION REPORTING, SET
 355ABSOLUTE MOUSE POSITIONING, and SET MOUSE KEYCODE MODE. )
 356N.B. If the mouse buttons have been commanded to act like keyboard keys, this
 357command DOES affect their actions.
 358
 3599.14 PAUSE OUTPUT
 360
 361    0x13
 362
 363Stop sending data to the host until another valid command is received. Key
 364matrix activity is still monitored and scan codes or ASCII characters enqueued
 365(up to the maximum supported by the microcontroller) to be sent when the host
 366allows the output to be resumed. If in the JOYSTICK EVENT REPORTING mode,
 367joystick events are also queued.
 368Mouse motion should be accumulated while the output is paused. If the ikbd is
 369in RELATIVE MOUSE POSITIONING REPORTING mode, motion is accumulated beyond the
 370normal threshold limits to produce the minimum number of packets necessary for
 371transmission when output is resumed. Pressing or releasing either mouse button
 372causes any accumulated motion to be immediately queued as packets, if the
 373mouse is in RELATIVE MOUSE POSITION REPORTING mode.
 374Because of the limitations of the microcontroller memory this command should
 375be used sparingly, and the output should not be shut of for more than <tbd>
 376milliseconds at a time.
 377The output is stopped only at the end of the current 'even'. If the PAUSE
 378OUTPUT command is received in the middle of a multiple byte report, the packet
 379will still be transmitted to conclusion and then the PAUSE will take effect.
 380When the ikbd is in either the JOYSTICK MONITORING mode or the FIRE BUTTON
 381MONITORING mode, the PAUSE OUTPUT command also temporarily stops the
 382monitoring process (i.e. the samples are not enqueued for transmission).
 383
 3840.15 SET JOYSTICK EVENT REPORTING
 385
 386    0x14
 387
 388Enter JOYSTICK EVENT REPORTING mode (DEFAULT). Each opening or closure of a
 389joystick switch or trigger causes a joystick event record to be generated.
 390
 3919.16 SET JOYSTICK INTERROGATION MODE
 392
 393    0x15
 394
 395Disables JOYSTICK EVENT REPORTING. Host must send individual JOYSTICK
 396INTERROGATE commands to sense joystick state.
 397
 3989.17 JOYSTICK INTERROGATE
 399
 400    0x16
 401
 402Return a record indicating the current state of the joysticks. This command
 403is valid in either the JOYSTICK EVENT REPORTING mode or the JOYSTICK
 404INTERROGATION MODE.
 405
 4069.18 SET JOYSTICK MONITORING
 407
 408    0x17
 409    rate                ; time between samples in hundredths of a second
 410    Returns: (in packets of two as long as in mode)
 411            %000000xy   ; where y is JOYSTICK1 Fire button
 412                        ; and x is JOYSTICK0 Fire button
 413            %nnnnmmmm   ; where m is JOYSTICK1 state
 414                        ; and n is JOYSTICK0 state
 415
 416Sets the ikbd to do nothing but monitor the serial command line, maintain the
 417time-of-day clock, and monitor the joystick. The rate sets the interval
 418between joystick samples.
 419N.B. The user should not set the rate higher than the serial communications
 420channel will allow the 2 bytes packets to be transmitted.
 421
 4229.19 SET FIRE BUTTON MONITORING
 423
 424    0x18
 425    Returns: (as long as in mode)
 426            %bbbbbbbb   ; state of the JOYSTICK1 fire button packed
 427                        ; 8 bits per byte, the first sample if the MSB
 428
 429Set the ikbd to do nothing but monitor the serial command line, maintain the
 430time-of-day clock, and monitor the fire button on Joystick 1. The fire button
 431is scanned at a rate that causes 8 samples to be made in the time it takes for
 432the previous byte to be sent to the host (i.e. scan rate = 8/10 * baud rate).
 433The sample interval should be as constant as possible.
 434
 4359.20 SET JOYSTICK KEYCODE MODE
 436
 437    0x19
 438    RX                  ; length of time (in tenths of seconds) until
 439                        ; horizontal velocity breakpoint is reached
 440    RY                  ; length of time (in tenths of seconds) until
 441                        ; vertical velocity breakpoint is reached
 442    TX                  ; length (in tenths of seconds) of joystick closure
 443                        ; until horizontal cursor key is generated before RX
 444                        ; has elapsed
 445    TY                  ; length (in tenths of seconds) of joystick closure
 446                        ; until vertical cursor key is generated before RY
 447                        ; has elapsed
 448    VX                  ; length (in tenths of seconds) of joystick closure
 449                        ; until horizontal cursor keystrokes are generated
 450                        ; after RX has elapsed
 451    VY                  ; length (in tenths of seconds) of joystick closure
 452                        ; until vertical cursor keystrokes are generated
 453                        ; after RY has elapsed
 454
 455In this mode, joystick 0 is scanned in a way that simulates cursor keystrokes.
 456On initial closure, a keystroke pair (make/break) is generated. Then up to Rn
 457tenths of seconds later, keystroke pairs are generated every Tn tenths of
 458seconds. After the Rn breakpoint is reached, keystroke pairs are generated
 459every Vn tenths of seconds. This provides a velocity (auto-repeat) breakpoint
 460feature.
 461Note that by setting RX and/or Ry to zero, the velocity feature can be
 462disabled. The values of TX and TY then become meaningless, and the generation
 463of cursor 'keystrokes' is set by VX and VY.
 464
 4659.21 DISABLE JOYSTICKS
 466
 467    0x1A
 468
 469Disable the generation of any joystick events (and scanning may be internally
 470disabled). Any valid joystick mode command resumes joystick monitoring. (The
 471joystick mode commands are SET JOYSTICK EVENT REPORTING, SET JOYSTICK
 472INTERROGATION MODE, SET JOYSTICK MONITORING, SET FIRE BUTTON MONITORING, and
 473SET JOYSTICK KEYCODE MODE.)
 474
 4759.22 TIME-OF-DAY CLOCK SET
 476
 477    0x1B
 478    YY                  ; year (2 least significant digits)
 479    MM                  ; month
 480    DD                  ; day
 481    hh                  ; hour
 482    mm                  ; minute
 483    ss                  ; second
 484
 485All time-of-day data should be sent to the ikbd in packed BCD format.
 486Any digit that is not a valid BCD digit should be treated as a 'don't care'
 487and not alter that particular field of the date or time. This permits setting
 488only some subfields of the time-of-day clock.
 489
 4909.23 INTERROGATE TIME-OF-DAT CLOCK
 491
 492    0x1C
 493    Returns:
 494            0xFC        ; time-of-day event header
 495            YY          ; year (2 least significant digits)
 496            MM          ; month
 497            DD          ; day
 498            hh          ; hour
 499            mm          ; minute
 500            ss          ; second
 501
 502    All time-of-day is sent in packed BCD format.
 503
 5049.24 MEMORY LOAD
 505
 506    0x20
 507    ADRMSB              ; address in controller
 508    ADRLSB              ; memory to be loaded
 509    NUM                 ; number of bytes (0-128)
 510    { data }
 511
 512This command permits the host to load arbitrary values into the ikbd
 513controller memory. The time between data bytes must be less than 20ms.
 514
 5159.25 MEMORY READ
 516
 517    0x21
 518    ADRMSB              ; address in controller
 519    ADRLSB              ; memory to be read
 520    Returns:
 521            0xF6        ; status header
 522            0x20        ; memory access
 523            { data }    ; 6 data bytes starting at ADR
 524
 525This command permits the host to read from the ikbd controller memory.
 526
 5279.26 CONTROLLER EXECUTE
 528
 529    0x22
 530    ADRMSB              ; address of subroutine in
 531    ADRLSB              ; controller memory to be called
 532
 533This command allows the host to command the execution of a subroutine in the
 534ikbd controller memory.
 535
 5369.27 STATUS INQUIRIES
 537        
 538    Status commands are formed by inclusively ORing 0x80 with the
 539    relevant SET command.
 540
 541    Example:
 542    0x88 (or 0x89 or 0x8A)  ; request mouse mode
 543    Returns:
 544            0xF6        ; status response header
 545            mode        ; 0x08 is RELATIVE
 546                        ; 0x09 is ABSOLUTE
 547                        ; 0x0A is KEYCODE
 548            param1      ; 0 is RELATIVE
 549                        ; XMSB maximum if ABSOLUTE
 550                        ; DELTA X is KEYCODE
 551            param2      ; 0 is RELATIVE
 552                        ; YMSB maximum if ABSOLUTE
 553                        ; DELTA Y is KEYCODE
 554            param3      ; 0 if RELATIVE
 555                        ; or KEYCODE
 556                        ; YMSB is ABSOLUTE
 557            param4      ; 0 if RELATIVE
 558                        ; or KEYCODE
 559                        ; YLSB is ABSOLUTE
 560            0           ; pad
 561            0
 562
 563The STATUS INQUIRY commands request the ikbd to return either the current mode
 564or the parameters associated with a given command. All status reports are
 565padded to form 8 byte long return packets. The responses to the status
 566requests are designed so that the host may store them away (after stripping
 567off the status report header byte) and later send them back as commands to
 568ikbd to restore its state. The 0 pad bytes will be treated as NOPs by the
 569ikbd.
 570
 571    Valid STATUS INQUIRY commands are:
 572
 573            0x87    mouse button action
 574            0x88    mouse mode
 575            0x89
 576            0x8A
 577            0x8B    mnouse threshold
 578            0x8C    mouse scale
 579            0x8F    mouse vertical coordinates
 580            0x90    ( returns       0x0F Y=0 at bottom
 581                            0x10 Y=0 at top )
 582            0x92    mouse enable/disable
 583                    ( returns       0x00 enabled)
 584                            0x12 disabled )
 585            0x94    joystick mode
 586            0x95
 587            0x96
 588            0x9A    joystick enable/disable
 589                    ( returns       0x00 enabled
 590                            0x1A disabled )
 591
 592It is the (host) programmer's responsibility to have only one unanswered
 593inquiry in process at a time.
 594STATUS INQUIRY commands are not valid if the ikbd is in JOYSTICK MONITORING
 595mode or FIRE BUTTON MONITORING mode.
 596
 597
 59810. SCAN CODES
 599
 600The key scan codes returned by the ikbd are chosen to simplify the
 601implementation of GSX.
 602
 603GSX Standard Keyboard Mapping.
 604
 605Hex     Keytop
 60601      Esc
 60702      1
 60803      2
 60904      3
 61005      4
 61106      5
 61207      6
 61308      7
 61409      8
 6150A      9
 6160B      0
 6170C      -
 6180D      ==
 6190E      BS
 6200F      TAB
 62110      Q
 62211      W
 62312      E
 62413      R
 62514      T
 62615      Y
 62716      U
 62817      I
 62918      O
 63019      P
 6311A      [
 6321B      ]
 6331C      RET
 6341D      CTRL
 6351E      A
 6361F      S
 63720      D
 63821      F
 63922      G
 64023      H
 64124      J
 64225      K
 64326      L
 64427      ;
 64528      '
 64629      `
 6472A      (LEFT) SHIFT
 6482B      \
 6492C      Z
 6502D      X
 6512E      C
 6522F      V
 65330      B
 65431      N
 65532      M
 65633      ,
 65734      .
 65835      /
 65936      (RIGHT) SHIFT
 66037      { NOT USED }
 66138      ALT
 66239      SPACE BAR
 6633A      CAPS LOCK
 6643B      F1
 6653C      F2
 6663D      F3
 6673E      F4
 6683F      F5
 66940      F6
 67041      F7
 67142      F8
 67243      F9
 67344      F10
 67445      { NOT USED }
 67546      { NOT USED }
 67647      HOME
 67748      UP ARROW
 67849      { NOT USED }
 6794A      KEYPAD -
 6804B      LEFT ARROW
 6814C      { NOT USED }
 6824D      RIGHT ARROW
 6834E      KEYPAD +
 6844F      { NOT USED }
 68550      DOWN ARROW
 68651      { NOT USED }
 68752      INSERT
 68853      DEL
 68954      { NOT USED }
 6905F      { NOT USED }
 69160      ISO KEY
 69261      UNDO
 69362      HELP
 69463      KEYPAD (
 69564      KEYPAD /
 69665      KEYPAD *
 69766      KEYPAD *
 69867      KEYPAD 7
 69968      KEYPAD 8
 70069      KEYPAD 9
 7016A      KEYPAD 4
 7026B      KEYPAD 5
 7036C      KEYPAD 6
 7046D      KEYPAD 1
 7056E      KEYPAD 2
 7066F      KEYPAD 3
 70770      KEYPAD 0
 70871      KEYPAD .
 70972      KEYPAD ENTER
 710
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.