]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blame - Documentation/input/devices/atarikbd.rst
Merge tag 'drm-misc-next-2019-03-28-1' of git://anongit.freedesktop.org/drm/drm-misc...
[mirror_ubuntu-hirsute-kernel.git] / Documentation / input / devices / atarikbd.rst
CommitLineData
3f89482e 1====================================
1da177e4 2Intelligent Keyboard (ikbd) Protocol
3f89482e 3====================================
1da177e4
LT
4
5
3f89482e
MCC
6Introduction
7============
1da177e4
LT
8
9The Atari Corp. Intelligent Keyboard (ikbd) is a general purpose keyboard
10controller that is flexible enough that it can be used in a variety of
11products without modification. The keyboard, with its microcontroller,
12provides a convenient connection point for a mouse and switch-type joysticks.
13The ikbd processor also maintains a time-of-day clock with one second
14resolution.
15The ikbd has been designed to be general enough that it can be used with a
3f6dee9b 16variety of new computer products. Product variations in a number of
1da177e4
LT
17keyswitches, mouse resolution, etc. can be accommodated.
18The ikbd communicates with the main processor over a high speed bi-directional
19serial interface. It can function in a variety of modes to facilitate
20different applications of the keyboard, joysticks, or mouse. Limited use of
21the controller is possible in applications in which only a unidirectional
22communications medium is available by carefully designing the default modes.
23
3f89482e
MCC
24Keyboard
25========
1da177e4
LT
26
27The keyboard always returns key make/break scan codes. The ikbd generates
28keyboard scan codes for each key press and release. The key scan make (key
29closure) codes start at 1, and are defined in Appendix A. For example, the
30ISO key position in the scan code table should exist even if no keyswitch
31exists in that position on a particular keyboard. The break code for each key
32is obtained by ORing 0x80 with the make code.
33
34The special codes 0xF6 through 0xFF are reserved for use as follows:
3f89482e
MCC
35
36=================== ====================================================
37 Code Command
38=================== ====================================================
1da177e4
LT
39 0xF6 status report
40 0xF7 absolute mouse position record
fff9289b 41 0xF8-0xFB relative mouse position records (lsbs determined by
3f89482e 42 mouse button states)
1da177e4
LT
43 0xFC time-of-day
44 0xFD joystick report (both sticks)
45 0xFE joystick 0 event
46 0xFF joystick 1 event
3f89482e 47=================== ====================================================
1da177e4
LT
48
49The two shift keys return different scan codes in this mode. The ENTER key
50and the RETurn key are also distinct.
51
3f89482e
MCC
52Mouse
53=====
1da177e4
LT
54
55The mouse port should be capable of supporting a mouse with resolution of
56approximately 200 counts (phase changes or 'clicks') per inch of travel. The
57mouse should be scanned at a rate that will permit accurate tracking at
58velocities up to 10 inches per second.
59The ikbd can report mouse motion in three distinctly different ways. It can
60report relative motion, absolute motion in a coordinate system maintained
61within the ikbd, or by converting mouse motion into keyboard cursor control
62key equivalents.
63The mouse buttons can be treated as part of the mouse or as additional
64keyboard keys.
65
3f89482e
MCC
66Relative Position Reporting
67---------------------------
1da177e4
LT
68
69In relative position mode, the ikbd will return relative mouse position
70records whenever a mouse event occurs. A mouse event consists of a mouse
71button being pressed or released, or motion in either axis exceeding a
72settable threshold of motion. Regardless of the threshold, all bits of
73resolution are returned to the host computer.
74Note that the ikbd may return mouse relative position reports with
75significantly more than the threshold delta x or y. This may happen since no
76relative mouse motion events will be generated: (a) while the keyboard has
77been 'paused' ( the event will be stored until keyboard communications is
78resumed) (b) while any event is being transmitted.
79
80The relative mouse position record is a three byte record of the form
3f89482e
MCC
81(regardless of keyboard mode)::
82
1da177e4
LT
83 %111110xy ; mouse position record flag
84 ; where y is the right button state
85 ; and x is the left button state
86 X ; delta x as twos complement integer
87 Y ; delta y as twos complement integer
88
89Note that the value of the button state bits should be valid even if the
90MOUSE BUTTON ACTION has set the buttons to act like part of the keyboard.
91If the accumulated motion before the report packet is generated exceeds the
92+127...-128 range, the motion is broken into multiple packets.
93Note that the sign of the delta y reported is a function of the Y origin
94selected.
95
3f89482e
MCC
96Absolute Position reporting
97---------------------------
1da177e4
LT
98
99The ikbd can also maintain absolute mouse position. Commands exist for
d6bc8ac9 100resetting the mouse position, setting X/Y scaling, and interrogating the
1da177e4
LT
101current mouse position.
102
3f89482e
MCC
103Mouse Cursor Key Mode
104---------------------
1da177e4
LT
105
106The ikbd can translate mouse motion into the equivalent cursor keystrokes.
107The number of mouse clicks per keystroke is independently programmable in
108each axis. The ikbd internally maintains mouse motion information to the
109highest resolution available, and merely generates a pair of cursor key events
110for each multiple of the scale factor.
111Mouse motion produces the cursor key make code immediately followed by the
112break code for the appropriate cursor key. The mouse buttons produce scan
113codes above those normally assigned for the largest envisioned keyboard (i.e.
114LEFT=0x74 & RIGHT=0x75).
115
3f89482e
MCC
116Joystick
117========
1da177e4 118
3f89482e
MCC
119Joystick Event Reporting
120------------------------
1da177e4 121
4ae0edc2 122In this mode, the ikbd generates a record whenever the joystick position is
1da177e4
LT
123changed (i.e. for each opening or closing of a joystick switch or trigger).
124
3f89482e
MCC
125The joystick event record is two bytes of the form::
126
1da177e4
LT
127 %1111111x ; Joystick event marker
128 ; where x is Joystick 0 or 1
129 %x000yyyy ; where yyyy is the stick position
130 ; and x is the trigger
131
3f89482e
MCC
132Joystick Interrogation
133----------------------
1da177e4
LT
134
135The current state of the joystick ports may be interrogated at any time in
136this mode by sending an 'Interrogate Joystick' command to the ikbd.
137
3f89482e
MCC
138The ikbd response to joystick interrogation is a three byte report of the form::
139
1da177e4
LT
140 0xFD ; joystick report header
141 %x000yyyy ; Joystick 0
142 %x000yyyy ; Joystick 1
143 ; where x is the trigger
144 ; and yyy is the stick position
145
3f89482e
MCC
146Joystick Monitoring
147-------------------
1da177e4
LT
148
149A mode is available that devotes nearly all of the keyboard communications
150time to reporting the state of the joystick ports at a user specifiable rate.
151It remains in this mode until reset or commanded into another mode. The PAUSE
152command in this mode not only stop the output but also temporarily stops
153scanning the joysticks (samples are not queued).
154
3f89482e
MCC
155Fire Button Monitoring
156----------------------
1da177e4
LT
157
158A mode is provided to permit monitoring a single input bit at a high rate. In
159this mode the ikbd monitors the state of the Joystick 1 fire button at the
160maximum rate permitted by the serial communication channel. The data is packed
1618 bits per byte for transmission to the host. The ikbd remains in this mode
162until reset or commanded into another mode. The PAUSE command in this mode not
163only stops the output but also temporarily stops scanning the button (samples
164are not queued).
165
3f89482e
MCC
166Joystick Key Code Mode
167----------------------
1da177e4
LT
168
169The ikbd may be commanded to translate the use of either joystick into the
170equivalent cursor control keystroke(s). The ikbd provides a single breakpoint
171velocity joystick cursor.
172Joystick events produce the make code, immediately followed by the break code
173for the appropriate cursor motion keys. The trigger or fire buttons of the
174joysticks produce pseudo key scan codes above those used by the largest key
175matrix envisioned (i.e. JOYSTICK0=0x74, JOYSTICK1=0x75).
176
3f89482e
MCC
177Time-of-Day Clock
178=================
1da177e4
LT
179
180The ikbd also maintains a time-of-day clock for the system. Commands are
181available to set and interrogate the timer-of-day clock. Time-keeping is
182maintained down to a resolution of one second.
183
3f89482e
MCC
184Status Inquiries
185================
1da177e4
LT
186
187The current state of ikbd modes and parameters may be found by sending status
188inquiry commands that correspond to the ikbd set commands.
189
3f89482e
MCC
190Power-Up Mode
191=============
1da177e4
LT
192
193The keyboard controller will perform a simple self-test on power-up to detect
194major controller faults (ROM checksum and RAM test) and such things as stuck
195keys. Any keys down at power-up are presumed to be stuck, and their BREAK
196(sic) code is returned (which without the preceding MAKE code is a flag for a
197keyboard error). If the controller self-test completes without error, the code
01dd2fbf 1980xF0 is returned. (This code will be used to indicate the version/release of
1da177e4
LT
199the ikbd controller. The first release of the ikbd is version 0xF0, should
200there be a second release it will be 0xF1, and so on.)
201The ikbd defaults to a mouse position reporting with threshold of 1 unit in
202either axis and the Y=0 origin at the top of the screen, and joystick event
203reporting mode for joystick 1, with both buttons being logically assigned to
204the mouse. After any joystick command, the ikbd assumes that joysticks are
205connected to both Joystick0 and Joystick1. Any mouse command (except MOUSE
206DISABLE) then causes port 0 to again be scanned as if it were a mouse, and
a982ac06 207both buttons are logically connected to it. If a mouse disable command is
1da177e4 208received while port 0 is presumed to be a mouse, the button is logically
a982ac06 209assigned to Joystick1 (until the mouse is reenabled by another mouse command).
1da177e4 210
3f89482e
MCC
211ikbd Command Set
212================
1da177e4
LT
213
214This section contains a list of commands that can be sent to the ikbd. Command
215codes (such as 0x00) which are not specified should perform no operation
216(NOPs).
217
3f89482e
MCC
218RESET
219-----
220
221::
1da177e4
LT
222
223 0x80
224 0x01
225
226N.B. The RESET command is the only two byte command understood by the ikbd.
227Any byte following an 0x80 command byte other than 0x01 is ignored (and causes
228the 0x80 to be ignored).
229A reset may also be caused by sending a break lasting at least 200mS to the
230ikbd.
231Executing the RESET command returns the keyboard to its default (power-up)
232mode and parameter settings. It does not affect the time-of-day clock.
233The RESET command or function causes the ikbd to perform a simple self-test.
234If the test is successful, the ikbd will send the code of 0xF0 within 300mS
235of receipt of the RESET command (or the end of the break, or power-up). The
236ikbd will then scan the key matrix for any stuck (closed) keys. Any keys found
237closed will cause the break scan code to be generated (the break code arriving
238without being preceded by the make code is a flag for a key matrix error).
239
3f89482e
MCC
240SET MOUSE BUTTON ACTION
241-----------------------
242
243::
1da177e4
LT
244
245 0x07
246 %00000mss ; mouse button action
247 ; (m is presumed = 1 when in MOUSE KEYCODE mode)
248 ; mss=0xy, mouse button press or release causes mouse
249 ; position report
250 ; where y=1, mouse key press causes absolute report
251 ; and x=1, mouse key release causes absolute report
3f89482e 252 ; mss=100, mouse buttons act like keys
1da177e4
LT
253
254This command sets how the ikbd should treat the buttons on the mouse. The
255default mouse button action mode is %00000000, the buttons are treated as part
256of the mouse logically.
257When buttons act like keys, LEFT=0x74 & RIGHT=0x75.
258
3f89482e
MCC
259SET RELATIVE MOUSE POSITION REPORTING
260-------------------------------------
261
262::
1da177e4
LT
263
264 0x08
265
266Set relative mouse position reporting. (DEFAULT) Mouse position packets are
267generated asynchronously by the ikbd whenever motion exceeds the setable
268threshold in either axis (see SET MOUSE THRESHOLD). Depending upon the mouse
269key mode, mouse position reports may also be generated when either mouse
270button is pressed or released. Otherwise the mouse buttons behave as if they
271were keyboard keys.
272
3f89482e
MCC
273SET ABSOLUTE MOUSE POSITIONING
274------------------------------
275
276::
1da177e4
LT
277
278 0x09
279 XMSB ; X maximum (in scaled mouse clicks)
280 XLSB
281 YMSB ; Y maximum (in scaled mouse clicks)
282 YLSB
3f89482e 283
1da177e4
LT
284Set absolute mouse position maintenance. Resets the ikbd maintained X and Y
285coordinates.
286In this mode, the value of the internally maintained coordinates does NOT wrap
287between 0 and large positive numbers. Excess motion below 0 is ignored. The
288command sets the maximum positive value that can be attained in the scaled
289coordinate system. Motion beyond that value is also ignored.
290
3f89482e
MCC
291SET MOUSE KEYCODE MOSE
292----------------------
293
294::
1da177e4
LT
295
296 0x0A
297 deltax ; distance in X clicks to return (LEFT) or (RIGHT)
298 deltay ; distance in Y clicks to return (UP) or (DOWN)
299
300Set mouse monitoring routines to return cursor motion keycodes instead of
301either RELATIVE or ABSOLUTE motion records. The ikbd returns the appropriate
302cursor keycode after mouse travel exceeding the user specified deltas in
303either axis. When the keyboard is in key scan code mode, mouse motion will
304cause the make code immediately followed by the break code. Note that this
305command is not affected by the mouse motion origin.
306
3f89482e
MCC
307SET MOUSE THRESHOLD
308-------------------
309
310::
1da177e4
LT
311
312 0x0B
313 X ; x threshold in mouse ticks (positive integers)
314 Y ; y threshold in mouse ticks (positive integers)
315
316This command sets the threshold before a mouse event is generated. Note that
317it does NOT affect the resolution of the data returned to the host. This
318command is valid only in RELATIVE MOUSE POSITIONING mode. The thresholds
319default to 1 at RESET (or power-up).
320
3f89482e
MCC
321SET MOUSE SCALE
322---------------
323
324::
1da177e4
LT
325
326 0x0C
5d3f083d
ML
327 X ; horizontal mouse ticks per internal X
328 Y ; vertical mouse ticks per internal Y
1da177e4
LT
329
330This command sets the scale factor for the ABSOLUTE MOUSE POSITIONING mode.
331In this mode, the specified number of mouse phase changes ('clicks') must
332occur before the internally maintained coordinate is changed by one
333(independently scaled for each axis). Remember that the mouse position
334information is available only by interrogating the ikbd in the ABSOLUTE MOUSE
335POSITIONING mode unless the ikbd has been commanded to report on button press
336or release (see SET MOSE BUTTON ACTION).
337
3f89482e
MCC
338INTERROGATE MOUSE POSITION
339--------------------------
340
341::
1da177e4
LT
342
343 0x0D
344 Returns:
345 0xF7 ; absolute mouse position header
346 BUTTONS
347 0000dcba ; where a is right button down since last interrogation
348 ; b is right button up since last
349 ; c is left button down since last
350 ; d is left button up since last
351 XMSB ; X coordinate
352 XLSB
353 YMSB ; Y coordinate
354 YLSB
355
356The INTERROGATE MOUSE POSITION command is valid when in the ABSOLUTE MOUSE
357POSITIONING mode, regardless of the setting of the MOUSE BUTTON ACTION.
358
3f89482e
MCC
359LOAD MOUSE POSITION
360-------------------
361
362::
1da177e4
LT
363
364 0x0E
365 0x00 ; filler
366 XMSB ; X coordinate
367 XLSB ; (in scaled coordinate system)
368 YMSB ; Y coordinate
369 YLSB
370
371This command allows the user to preset the internally maintained absolute
372mouse position.
373
3f89482e
MCC
374SET Y=0 AT BOTTOM
375-----------------
376
377::
1da177e4
LT
378
379 0x0F
380
381This command makes the origin of the Y axis to be at the bottom of the
5d3f083d 382logical coordinate system internal to the ikbd for all relative or absolute
1da177e4
LT
383mouse motion. This causes mouse motion toward the user to be negative in sign
384and away from the user to be positive.
385
3f89482e
MCC
386SET Y=0 AT TOP
387--------------
388
389::
1da177e4
LT
390
391 0x10
392
393Makes the origin of the Y axis to be at the top of the logical coordinate
394system within the ikbd for all relative or absolute mouse motion. (DEFAULT)
395This causes mouse motion toward the user to be positive in sign and away from
396the user to be negative.
397
3f89482e
MCC
398RESUME
399------
400
401::
1da177e4
LT
402
403 0x11
404
405Resume sending data to the host. Since any command received by the ikbd after
406its output has been paused also causes an implicit RESUME this command can be
407thought of as a NO OPERATION command. If this command is received by the ikbd
408and it is not PAUSED, it is simply ignored.
409
3f89482e
MCC
410DISABLE MOUSE
411-------------
412
413::
1da177e4
LT
414
415 0x12
416
417All mouse event reporting is disabled (and scanning may be internally
418disabled). Any valid mouse mode command resumes mouse motion monitoring. (The
419valid mouse mode commands are SET RELATIVE MOUSE POSITION REPORTING, SET
420ABSOLUTE MOUSE POSITIONING, and SET MOUSE KEYCODE MODE. )
421N.B. If the mouse buttons have been commanded to act like keyboard keys, this
422command DOES affect their actions.
423
3f89482e
MCC
424PAUSE OUTPUT
425------------
426
427::
1da177e4
LT
428
429 0x13
430
431Stop sending data to the host until another valid command is received. Key
432matrix activity is still monitored and scan codes or ASCII characters enqueued
433(up to the maximum supported by the microcontroller) to be sent when the host
434allows the output to be resumed. If in the JOYSTICK EVENT REPORTING mode,
435joystick events are also queued.
436Mouse motion should be accumulated while the output is paused. If the ikbd is
437in RELATIVE MOUSE POSITIONING REPORTING mode, motion is accumulated beyond the
438normal threshold limits to produce the minimum number of packets necessary for
439transmission when output is resumed. Pressing or releasing either mouse button
440causes any accumulated motion to be immediately queued as packets, if the
441mouse is in RELATIVE MOUSE POSITION REPORTING mode.
442Because of the limitations of the microcontroller memory this command should
443be used sparingly, and the output should not be shut of for more than <tbd>
444milliseconds at a time.
445The output is stopped only at the end of the current 'even'. If the PAUSE
446OUTPUT command is received in the middle of a multiple byte report, the packet
447will still be transmitted to conclusion and then the PAUSE will take effect.
448When the ikbd is in either the JOYSTICK MONITORING mode or the FIRE BUTTON
449MONITORING mode, the PAUSE OUTPUT command also temporarily stops the
450monitoring process (i.e. the samples are not enqueued for transmission).
451
3f89482e
MCC
452SET JOYSTICK EVENT REPORTING
453----------------------------
454
455::
1da177e4
LT
456
457 0x14
458
459Enter JOYSTICK EVENT REPORTING mode (DEFAULT). Each opening or closure of a
460joystick switch or trigger causes a joystick event record to be generated.
461
3f89482e
MCC
462SET JOYSTICK INTERROGATION MODE
463-------------------------------
464
465::
1da177e4
LT
466
467 0x15
468
469Disables JOYSTICK EVENT REPORTING. Host must send individual JOYSTICK
470INTERROGATE commands to sense joystick state.
471
3f89482e
MCC
472JOYSTICK INTERROGATE
473--------------------
474
475::
1da177e4
LT
476
477 0x16
478
479Return a record indicating the current state of the joysticks. This command
480is valid in either the JOYSTICK EVENT REPORTING mode or the JOYSTICK
481INTERROGATION MODE.
482
3f89482e
MCC
483SET JOYSTICK MONITORING
484-----------------------
485
486::
1da177e4
LT
487
488 0x17
2fe0ae78 489 rate ; time between samples in hundredths of a second
1da177e4
LT
490 Returns: (in packets of two as long as in mode)
491 %000000xy ; where y is JOYSTICK1 Fire button
492 ; and x is JOYSTICK0 Fire button
493 %nnnnmmmm ; where m is JOYSTICK1 state
494 ; and n is JOYSTICK0 state
495
01dd2fbf 496Sets the ikbd to do nothing but monitor the serial command line, maintain the
1da177e4
LT
497time-of-day clock, and monitor the joystick. The rate sets the interval
498between joystick samples.
499N.B. The user should not set the rate higher than the serial communications
500channel will allow the 2 bytes packets to be transmitted.
501
3f89482e
MCC
502SET FIRE BUTTON MONITORING
503--------------------------
504
505::
1da177e4
LT
506
507 0x18
508 Returns: (as long as in mode)
509 %bbbbbbbb ; state of the JOYSTICK1 fire button packed
510 ; 8 bits per byte, the first sample if the MSB
511
512Set the ikbd to do nothing but monitor the serial command line, maintain the
513time-of-day clock, and monitor the fire button on Joystick 1. The fire button
514is scanned at a rate that causes 8 samples to be made in the time it takes for
515the previous byte to be sent to the host (i.e. scan rate = 8/10 * baud rate).
516The sample interval should be as constant as possible.
517
3f89482e
MCC
518SET JOYSTICK KEYCODE MODE
519-------------------------
520
521::
1da177e4
LT
522
523 0x19
524 RX ; length of time (in tenths of seconds) until
525 ; horizontal velocity breakpoint is reached
526 RY ; length of time (in tenths of seconds) until
527 ; vertical velocity breakpoint is reached
528 TX ; length (in tenths of seconds) of joystick closure
529 ; until horizontal cursor key is generated before RX
530 ; has elapsed
531 TY ; length (in tenths of seconds) of joystick closure
532 ; until vertical cursor key is generated before RY
533 ; has elapsed
534 VX ; length (in tenths of seconds) of joystick closure
01dd2fbf 535 ; until horizontal cursor keystrokes are generated
1da177e4
LT
536 ; after RX has elapsed
537 VY ; length (in tenths of seconds) of joystick closure
01dd2fbf 538 ; until vertical cursor keystrokes are generated
1da177e4
LT
539 ; after RY has elapsed
540
541In this mode, joystick 0 is scanned in a way that simulates cursor keystrokes.
542On initial closure, a keystroke pair (make/break) is generated. Then up to Rn
543tenths of seconds later, keystroke pairs are generated every Tn tenths of
544seconds. After the Rn breakpoint is reached, keystroke pairs are generated
545every Vn tenths of seconds. This provides a velocity (auto-repeat) breakpoint
546feature.
547Note that by setting RX and/or Ry to zero, the velocity feature can be
548disabled. The values of TX and TY then become meaningless, and the generation
549of cursor 'keystrokes' is set by VX and VY.
550
3f89482e
MCC
551DISABLE JOYSTICKS
552-----------------
553
554::
1da177e4
LT
555
556 0x1A
557
558Disable the generation of any joystick events (and scanning may be internally
559disabled). Any valid joystick mode command resumes joystick monitoring. (The
560joystick mode commands are SET JOYSTICK EVENT REPORTING, SET JOYSTICK
561INTERROGATION MODE, SET JOYSTICK MONITORING, SET FIRE BUTTON MONITORING, and
562SET JOYSTICK KEYCODE MODE.)
563
3f89482e
MCC
564TIME-OF-DAY CLOCK SET
565---------------------
566
567::
1da177e4
LT
568
569 0x1B
570 YY ; year (2 least significant digits)
571 MM ; month
572 DD ; day
573 hh ; hour
574 mm ; minute
575 ss ; second
576
577All time-of-day data should be sent to the ikbd in packed BCD format.
578Any digit that is not a valid BCD digit should be treated as a 'don't care'
579and not alter that particular field of the date or time. This permits setting
580only some subfields of the time-of-day clock.
581
3f89482e
MCC
582INTERROGATE TIME-OF-DAT CLOCK
583-----------------------------
584
585::
1da177e4
LT
586
587 0x1C
588 Returns:
589 0xFC ; time-of-day event header
590 YY ; year (2 least significant digits)
591 MM ; month
592 DD ; day
593 hh ; hour
594 mm ; minute
595 ss ; second
596
597 All time-of-day is sent in packed BCD format.
598
3f89482e
MCC
599MEMORY LOAD
600-----------
601
602::
1da177e4
LT
603
604 0x20
605 ADRMSB ; address in controller
606 ADRLSB ; memory to be loaded
607 NUM ; number of bytes (0-128)
608 { data }
609
610This command permits the host to load arbitrary values into the ikbd
611controller memory. The time between data bytes must be less than 20ms.
612
3f89482e
MCC
613MEMORY READ
614-----------
615
616::
1da177e4
LT
617
618 0x21
619 ADRMSB ; address in controller
620 ADRLSB ; memory to be read
621 Returns:
622 0xF6 ; status header
623 0x20 ; memory access
624 { data } ; 6 data bytes starting at ADR
625
6c28f2c0 626This command permits the host to read from the ikbd controller memory.
1da177e4 627
3f89482e
MCC
628CONTROLLER EXECUTE
629------------------
630
631::
1da177e4
LT
632
633 0x22
634 ADRMSB ; address of subroutine in
635 ADRLSB ; controller memory to be called
636
637This command allows the host to command the execution of a subroutine in the
638ikbd controller memory.
639
3f89482e
MCC
640STATUS INQUIRIES
641----------------
642
643::
644
1da177e4
LT
645 Status commands are formed by inclusively ORing 0x80 with the
646 relevant SET command.
647
648 Example:
649 0x88 (or 0x89 or 0x8A) ; request mouse mode
650 Returns:
651 0xF6 ; status response header
652 mode ; 0x08 is RELATIVE
653 ; 0x09 is ABSOLUTE
654 ; 0x0A is KEYCODE
655 param1 ; 0 is RELATIVE
656 ; XMSB maximum if ABSOLUTE
657 ; DELTA X is KEYCODE
658 param2 ; 0 is RELATIVE
659 ; YMSB maximum if ABSOLUTE
660 ; DELTA Y is KEYCODE
661 param3 ; 0 if RELATIVE
662 ; or KEYCODE
663 ; YMSB is ABSOLUTE
664 param4 ; 0 if RELATIVE
665 ; or KEYCODE
666 ; YLSB is ABSOLUTE
667 0 ; pad
668 0
669
670The STATUS INQUIRY commands request the ikbd to return either the current mode
671or the parameters associated with a given command. All status reports are
672padded to form 8 byte long return packets. The responses to the status
673requests are designed so that the host may store them away (after stripping
674off the status report header byte) and later send them back as commands to
675ikbd to restore its state. The 0 pad bytes will be treated as NOPs by the
676ikbd.
677
3f89482e 678 Valid STATUS INQUIRY commands are::
1da177e4
LT
679
680 0x87 mouse button action
681 0x88 mouse mode
682 0x89
683 0x8A
684 0x8B mnouse threshold
685 0x8C mouse scale
686 0x8F mouse vertical coordinates
687 0x90 ( returns 0x0F Y=0 at bottom
688 0x10 Y=0 at top )
689 0x92 mouse enable/disable
690 ( returns 0x00 enabled)
691 0x12 disabled )
692 0x94 joystick mode
693 0x95
694 0x96
695 0x9A joystick enable/disable
696 ( returns 0x00 enabled
697 0x1A disabled )
698
699It is the (host) programmer's responsibility to have only one unanswered
700inquiry in process at a time.
701STATUS INQUIRY commands are not valid if the ikbd is in JOYSTICK MONITORING
702mode or FIRE BUTTON MONITORING mode.
703
704
3f89482e
MCC
705SCAN CODES
706==========
1da177e4 707
5d3f083d
ML
708The key scan codes returned by the ikbd are chosen to simplify the
709implementation of GSX.
1da177e4 710
3f89482e 711GSX Standard Keyboard Mapping
1da177e4 712
3f89482e 713======= ============
1da177e4 714Hex Keytop
3f89482e 715======= ============
1da177e4
LT
71601 Esc
71702 1
71803 2
71904 3
72005 4
72106 5
72207 6
72308 7
72409 8
7250A 9
7260B 0
3f89482e
MCC
7270C \-
7280D \=
1da177e4
LT
7290E BS
7300F TAB
73110 Q
73211 W
73312 E
73413 R
73514 T
73615 Y
73716 U
73817 I
73918 O
74019 P
7411A [
7421B ]
7431C RET
7441D CTRL
7451E A
7461F S
74720 D
74821 F
74922 G
75023 H
75124 J
75225 K
75326 L
75427 ;
75528 '
3f89482e 75629 \`
1da177e4 7572A (LEFT) SHIFT
3f89482e 7582B \\
1da177e4
LT
7592C Z
7602D X
7612E C
7622F V
76330 B
76431 N
76532 M
76633 ,
76734 .
76835 /
76936 (RIGHT) SHIFT
77037 { NOT USED }
77138 ALT
77239 SPACE BAR
7733A CAPS LOCK
7743B F1
7753C F2
7763D F3
7773E F4
7783F F5
77940 F6
78041 F7
78142 F8
78243 F9
78344 F10
78445 { NOT USED }
78546 { NOT USED }
78647 HOME
78748 UP ARROW
78849 { NOT USED }
7894A KEYPAD -
7904B LEFT ARROW
7914C { NOT USED }
7924D RIGHT ARROW
7934E KEYPAD +
7944F { NOT USED }
79550 DOWN ARROW
79651 { NOT USED }
79752 INSERT
79853 DEL
79954 { NOT USED }
8005F { NOT USED }
80160 ISO KEY
80261 UNDO
80362 HELP
80463 KEYPAD (
80564 KEYPAD /
80665 KEYPAD *
80766 KEYPAD *
80867 KEYPAD 7
80968 KEYPAD 8
81069 KEYPAD 9
8116A KEYPAD 4
8126B KEYPAD 5
8136C KEYPAD 6
8146D KEYPAD 1
8156E KEYPAD 2
8166F KEYPAD 3
81770 KEYPAD 0
81871 KEYPAD .
81972 KEYPAD ENTER
3f89482e 820======= ============