1 ==================================== 2 Intelligent Keyboard (ikbd) Protocol 3 ==================================== 4 5 6 Introduction 7 ============ 8 9 The Atari Corp. Intelligent Keyboard (ikbd) is a general purpose keyboard 10 controller that is flexible enough that it can be used in a variety of 11 products without modification. The keyboard, with its microcontroller, 12 provides a convenient connection point for a mouse and switch-type joysticks. 13 The ikbd processor also maintains a time-of-day clock with one second 14 resolution. 15 The ikbd has been designed to be general enough that it can be used with a 16 variety of new computer products. Product variations in a number of 17 keyswitches, mouse resolution, etc. can be accommodated. 18 The ikbd communicates with the main processor over a high speed bi-directional 19 serial interface. It can function in a variety of modes to facilitate 20 different applications of the keyboard, joysticks, or mouse. Limited use of 21 the controller is possible in applications in which only a unidirectional 22 communications medium is available by carefully designing the default modes. 23 24 Keyboard 25 ======== 26 27 The keyboard always returns key make/break scan codes. The ikbd generates 28 keyboard scan codes for each key press and release. The key scan make (key 29 closure) codes start at 1, and are defined in Appendix A. For example, the 30 ISO key position in the scan code table should exist even if no keyswitch 31 exists in that position on a particular keyboard. The break code for each key 32 is obtained by ORing 0x80 with the make code. 33 34 The special codes 0xF6 through 0xFF are reserved for use as follows: 35 36 =================== ==================================================== 37 Code Command 38 =================== ==================================================== 39 0xF6 status report 40 0xF7 absolute mouse position record 41 0xF8-0xFB relative mouse position records (lsbs determined by 42 mouse button states) 43 0xFC time-of-day 44 0xFD joystick report (both sticks) 45 0xFE joystick 0 event 46 0xFF joystick 1 event 47 =================== ==================================================== 48 49 The two shift keys return different scan codes in this mode. The ENTER key 50 and the RETurn key are also distinct. 51 52 Mouse 53 ===== 54 55 The mouse port should be capable of supporting a mouse with resolution of 56 approximately 200 counts (phase changes or 'clicks') per inch of travel. The 57 mouse should be scanned at a rate that will permit accurate tracking at 58 velocities up to 10 inches per second. 59 The ikbd can report mouse motion in three distinctly different ways. It can 60 report relative motion, absolute motion in a coordinate system maintained 61 within the ikbd, or by converting mouse motion into keyboard cursor control 62 key equivalents. 63 The mouse buttons can be treated as part of the mouse or as additional 64 keyboard keys. 65 66 Relative Position Reporting 67 --------------------------- 68 69 In relative position mode, the ikbd will return relative mouse position 70 records whenever a mouse event occurs. A mouse event consists of a mouse 71 button being pressed or released, or motion in either axis exceeding a 72 settable threshold of motion. Regardless of the threshold, all bits of 73 resolution are returned to the host computer. 74 Note that the ikbd may return mouse relative position reports with 75 significantly more than the threshold delta x or y. This may happen since no 76 relative mouse motion events will be generated: (a) while the keyboard has 77 been 'paused' ( the event will be stored until keyboard communications is 78 resumed) (b) while any event is being transmitted. 79 80 The relative mouse position record is a three byte record of the form 81 (regardless of keyboard mode):: 82 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 89 Note that the value of the button state bits should be valid even if the 90 MOUSE BUTTON ACTION has set the buttons to act like part of the keyboard. 91 If the accumulated motion before the report packet is generated exceeds the 92 +127...-128 range, the motion is broken into multiple packets. 93 Note that the sign of the delta y reported is a function of the Y origin 94 selected. 95 96 Absolute Position reporting 97 --------------------------- 98 99 The ikbd can also maintain absolute mouse position. Commands exist for 100 resetting the mouse position, setting X/Y scaling, and interrogating the 101 current mouse position. 102 103 Mouse Cursor Key Mode 104 --------------------- 105 106 The ikbd can translate mouse motion into the equivalent cursor keystrokes. 107 The number of mouse clicks per keystroke is independently programmable in 108 each axis. The ikbd internally maintains mouse motion information to the 109 highest resolution available, and merely generates a pair of cursor key events 110 for each multiple of the scale factor. 111 Mouse motion produces the cursor key make code immediately followed by the 112 break code for the appropriate cursor key. The mouse buttons produce scan 113 codes above those normally assigned for the largest envisioned keyboard (i.e. 114 LEFT=0x74 & RIGHT=0x75). 115 116 Joystick 117 ======== 118 119 Joystick Event Reporting 120 ------------------------ 121 122 In this mode, the ikbd generates a record whenever the joystick position is 123 changed (i.e. for each opening or closing of a joystick switch or trigger). 124 125 The joystick event record is two bytes of the form:: 126 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 132 Joystick Interrogation 133 ---------------------- 134 135 The current state of the joystick ports may be interrogated at any time in 136 this mode by sending an 'Interrogate Joystick' command to the ikbd. 137 138 The ikbd response to joystick interrogation is a three byte report of the form:: 139 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 146 Joystick Monitoring 147 ------------------- 148 149 A mode is available that devotes nearly all of the keyboard communications 150 time to reporting the state of the joystick ports at a user specifiable rate. 151 It remains in this mode until reset or commanded into another mode. The PAUSE 152 command in this mode not only stop the output but also temporarily stops 153 scanning the joysticks (samples are not queued). 154 155 Fire Button Monitoring 156 ---------------------- 157 158 A mode is provided to permit monitoring a single input bit at a high rate. In 159 this mode the ikbd monitors the state of the Joystick 1 fire button at the 160 maximum rate permitted by the serial communication channel. The data is packed 161 8 bits per byte for transmission to the host. The ikbd remains in this mode 162 until reset or commanded into another mode. The PAUSE command in this mode not 163 only stops the output but also temporarily stops scanning the button (samples 164 are not queued). 165 166 Joystick Key Code Mode 167 ---------------------- 168 169 The ikbd may be commanded to translate the use of either joystick into the 170 equivalent cursor control keystroke(s). The ikbd provides a single breakpoint 171 velocity joystick cursor. 172 Joystick events produce the make code, immediately followed by the break code 173 for the appropriate cursor motion keys. The trigger or fire buttons of the 174 joysticks produce pseudo key scan codes above those used by the largest key 175 matrix envisioned (i.e. JOYSTICK0=0x74, JOYSTICK1=0x75). 176 177 Time-of-Day Clock 178 ================= 179 180 The ikbd also maintains a time-of-day clock for the system. Commands are 181 available to set and interrogate the timer-of-day clock. Time-keeping is 182 maintained down to a resolution of one second. 183 184 Status Inquiries 185 ================ 186 187 The current state of ikbd modes and parameters may be found by sending status 188 inquiry commands that correspond to the ikbd set commands. 189 190 Power-Up Mode 191 ============= 192 193 The keyboard controller will perform a simple self-test on power-up to detect 194 major controller faults (ROM checksum and RAM test) and such things as stuck 195 keys. 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 197 keyboard error). If the controller self-test completes without error, the code 198 0xF0 is returned. (This code will be used to indicate the version/release of 199 the ikbd controller. The first release of the ikbd is version 0xF0, should 200 there be a second release it will be 0xF1, and so on.) 201 The ikbd defaults to a mouse position reporting with threshold of 1 unit in 202 either axis and the Y=0 origin at the top of the screen, and joystick event 203 reporting mode for joystick 1, with both buttons being logically assigned to 204 the mouse. After any joystick command, the ikbd assumes that joysticks are 205 connected to both Joystick0 and Joystick1. Any mouse command (except MOUSE 206 DISABLE) then causes port 0 to again be scanned as if it were a mouse, and 207 both buttons are logically connected to it. If a mouse disable command is 208 received while port 0 is presumed to be a mouse, the button is logically 209 assigned to Joystick1 (until the mouse is reenabled by another mouse command). 210 211 ikbd Command Set 212 ================ 213 214 This section contains a list of commands that can be sent to the ikbd. Command 215 codes (such as 0x00) which are not specified should perform no operation 216 (NOPs). 217 218 RESET 219 ----- 220 221 :: 222 223 0x80 224 0x01 225 226 N.B. The RESET command is the only two byte command understood by the ikbd. 227 Any byte following an 0x80 command byte other than 0x01 is ignored (and causes 228 the 0x80 to be ignored). 229 A reset may also be caused by sending a break lasting at least 200mS to the 230 ikbd. 231 Executing the RESET command returns the keyboard to its default (power-up) 232 mode and parameter settings. It does not affect the time-of-day clock. 233 The RESET command or function causes the ikbd to perform a simple self-test. 234 If the test is successful, the ikbd will send the code of 0xF0 within 300mS 235 of receipt of the RESET command (or the end of the break, or power-up). The 236 ikbd will then scan the key matrix for any stuck (closed) keys. Any keys found 237 closed will cause the break scan code to be generated (the break code arriving 238 without being preceded by the make code is a flag for a key matrix error). 239 240 SET MOUSE BUTTON ACTION 241 ----------------------- 242 243 :: 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 252 ; mss=100, mouse buttons act like keys 253 254 This command sets how the ikbd should treat the buttons on the mouse. The 255 default mouse button action mode is %00000000, the buttons are treated as part 256 of the mouse logically. 257 When buttons act like keys, LEFT=0x74 & RIGHT=0x75. 258 259 SET RELATIVE MOUSE POSITION REPORTING 260 ------------------------------------- 261 262 :: 263 264 0x08 265 266 Set relative mouse position reporting. (DEFAULT) Mouse position packets are 267 generated asynchronously by the ikbd whenever motion exceeds the setable 268 threshold in either axis (see SET MOUSE THRESHOLD). Depending upon the mouse 269 key mode, mouse position reports may also be generated when either mouse 270 button is pressed or released. Otherwise the mouse buttons behave as if they 271 were keyboard keys. 272 273 SET ABSOLUTE MOUSE POSITIONING 274 ------------------------------ 275 276 :: 277 278 0x09 279 XMSB ; X maximum (in scaled mouse clicks) 280 XLSB 281 YMSB ; Y maximum (in scaled mouse clicks) 282 YLSB 283 284 Set absolute mouse position maintenance. Resets the ikbd maintained X and Y 285 coordinates. 286 In this mode, the value of the internally maintained coordinates does NOT wrap 287 between 0 and large positive numbers. Excess motion below 0 is ignored. The 288 command sets the maximum positive value that can be attained in the scaled 289 coordinate system. Motion beyond that value is also ignored. 290 291 SET MOUSE KEYCODE MODE 292 ---------------------- 293 294 :: 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 300 Set mouse monitoring routines to return cursor motion keycodes instead of 301 either RELATIVE or ABSOLUTE motion records. The ikbd returns the appropriate 302 cursor keycode after mouse travel exceeding the user specified deltas in 303 either axis. When the keyboard is in key scan code mode, mouse motion will 304 cause the make code immediately followed by the break code. Note that this 305 command is not affected by the mouse motion origin. 306 307 SET MOUSE THRESHOLD 308 ------------------- 309 310 :: 311 312 0x0B 313 X ; x threshold in mouse ticks (positive integers) 314 Y ; y threshold in mouse ticks (positive integers) 315 316 This command sets the threshold before a mouse event is generated. Note that 317 it does NOT affect the resolution of the data returned to the host. This 318 command is valid only in RELATIVE MOUSE POSITIONING mode. The thresholds 319 default to 1 at RESET (or power-up). 320 321 SET MOUSE SCALE 322 --------------- 323 324 :: 325 326 0x0C 327 X ; horizontal mouse ticks per internal X 328 Y ; vertical mouse ticks per internal Y 329 330 This command sets the scale factor for the ABSOLUTE MOUSE POSITIONING mode. 331 In this mode, the specified number of mouse phase changes ('clicks') must 332 occur before the internally maintained coordinate is changed by one 333 (independently scaled for each axis). Remember that the mouse position 334 information is available only by interrogating the ikbd in the ABSOLUTE MOUSE 335 POSITIONING mode unless the ikbd has been commanded to report on button press 336 or release (see SET MOUSE BUTTON ACTION). 337 338 INTERROGATE MOUSE POSITION 339 -------------------------- 340 341 :: 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 356 The INTERROGATE MOUSE POSITION command is valid when in the ABSOLUTE MOUSE 357 POSITIONING mode, regardless of the setting of the MOUSE BUTTON ACTION. 358 359 LOAD MOUSE POSITION 360 ------------------- 361 362 :: 363 364 0x0E 365 0x00 ; filler 366 XMSB ; X coordinate 367 XLSB ; (in scaled coordinate system) 368 YMSB ; Y coordinate 369 YLSB 370 371 This command allows the user to preset the internally maintained absolute 372 mouse position. 373 374 SET Y=0 AT BOTTOM 375 ----------------- 376 377 :: 378 379 0x0F 380 381 This command makes the origin of the Y axis to be at the bottom of the 382 logical coordinate system internal to the ikbd for all relative or absolute 383 mouse motion. This causes mouse motion toward the user to be negative in sign 384 and away from the user to be positive. 385 386 SET Y=0 AT TOP 387 -------------- 388 389 :: 390 391 0x10 392 393 Makes the origin of the Y axis to be at the top of the logical coordinate 394 system within the ikbd for all relative or absolute mouse motion. (DEFAULT) 395 This causes mouse motion toward the user to be positive in sign and away from 396 the user to be negative. 397 398 RESUME 399 ------ 400 401 :: 402 403 0x11 404 405 Resume sending data to the host. Since any command received by the ikbd after 406 its output has been paused also causes an implicit RESUME this command can be 407 thought of as a NO OPERATION command. If this command is received by the ikbd 408 and it is not PAUSED, it is simply ignored. 409 410 DISABLE MOUSE 411 ------------- 412 413 :: 414 415 0x12 416 417 All mouse event reporting is disabled (and scanning may be internally 418 disabled). Any valid mouse mode command resumes mouse motion monitoring. (The 419 valid mouse mode commands are SET RELATIVE MOUSE POSITION REPORTING, SET 420 ABSOLUTE MOUSE POSITIONING, and SET MOUSE KEYCODE MODE. ) 421 N.B. If the mouse buttons have been commanded to act like keyboard keys, this 422 command DOES affect their actions. 423 424 PAUSE OUTPUT 425 ------------ 426 427 :: 428 429 0x13 430 431 Stop sending data to the host until another valid command is received. Key 432 matrix 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 434 allows the output to be resumed. If in the JOYSTICK EVENT REPORTING mode, 435 joystick events are also queued. 436 Mouse motion should be accumulated while the output is paused. If the ikbd is 437 in RELATIVE MOUSE POSITIONING REPORTING mode, motion is accumulated beyond the 438 normal threshold limits to produce the minimum number of packets necessary for 439 transmission when output is resumed. Pressing or releasing either mouse button 440 causes any accumulated motion to be immediately queued as packets, if the 441 mouse is in RELATIVE MOUSE POSITION REPORTING mode. 442 Because of the limitations of the microcontroller memory this command should 443 be used sparingly, and the output should not be shut of for more than <tbd> 444 milliseconds at a time. 445 The output is stopped only at the end of the current 'even'. If the PAUSE 446 OUTPUT command is received in the middle of a multiple byte report, the packet 447 will still be transmitted to conclusion and then the PAUSE will take effect. 448 When the ikbd is in either the JOYSTICK MONITORING mode or the FIRE BUTTON 449 MONITORING mode, the PAUSE OUTPUT command also temporarily stops the 450 monitoring process (i.e. the samples are not enqueued for transmission). 451 452 SET JOYSTICK EVENT REPORTING 453 ---------------------------- 454 455 :: 456 457 0x14 458 459 Enter JOYSTICK EVENT REPORTING mode (DEFAULT). Each opening or closure of a 460 joystick switch or trigger causes a joystick event record to be generated. 461 462 SET JOYSTICK INTERROGATION MODE 463 ------------------------------- 464 465 :: 466 467 0x15 468 469 Disables JOYSTICK EVENT REPORTING. Host must send individual JOYSTICK 470 INTERROGATE commands to sense joystick state. 471 472 JOYSTICK INTERROGATE 473 -------------------- 474 475 :: 476 477 0x16 478 479 Return a record indicating the current state of the joysticks. This command 480 is valid in either the JOYSTICK EVENT REPORTING mode or the JOYSTICK 481 INTERROGATION MODE. 482 483 SET JOYSTICK MONITORING 484 ----------------------- 485 486 :: 487 488 0x17 489 rate ; time between samples in hundredths of a second 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 496 Sets the ikbd to do nothing but monitor the serial command line, maintain the 497 time-of-day clock, and monitor the joystick. The rate sets the interval 498 between joystick samples. 499 N.B. The user should not set the rate higher than the serial communications 500 channel will allow the 2 bytes packets to be transmitted. 501 502 SET FIRE BUTTON MONITORING 503 -------------------------- 504 505 :: 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 512 Set the ikbd to do nothing but monitor the serial command line, maintain the 513 time-of-day clock, and monitor the fire button on Joystick 1. The fire button 514 is scanned at a rate that causes 8 samples to be made in the time it takes for 515 the previous byte to be sent to the host (i.e. scan rate = 8/10 * baud rate). 516 The sample interval should be as constant as possible. 517 518 SET JOYSTICK KEYCODE MODE 519 ------------------------- 520 521 :: 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 535 ; until horizontal cursor keystrokes are generated 536 ; after RX has elapsed 537 VY ; length (in tenths of seconds) of joystick closure 538 ; until vertical cursor keystrokes are generated 539 ; after RY has elapsed 540 541 In this mode, joystick 0 is scanned in a way that simulates cursor keystrokes. 542 On initial closure, a keystroke pair (make/break) is generated. Then up to Rn 543 tenths of seconds later, keystroke pairs are generated every Tn tenths of 544 seconds. After the Rn breakpoint is reached, keystroke pairs are generated 545 every Vn tenths of seconds. This provides a velocity (auto-repeat) breakpoint 546 feature. 547 Note that by setting RX and/or Ry to zero, the velocity feature can be 548 disabled. The values of TX and TY then become meaningless, and the generation 549 of cursor 'keystrokes' is set by VX and VY. 550 551 DISABLE JOYSTICKS 552 ----------------- 553 554 :: 555 556 0x1A 557 558 Disable the generation of any joystick events (and scanning may be internally 559 disabled). Any valid joystick mode command resumes joystick monitoring. (The 560 joystick mode commands are SET JOYSTICK EVENT REPORTING, SET JOYSTICK 561 INTERROGATION MODE, SET JOYSTICK MONITORING, SET FIRE BUTTON MONITORING, and 562 SET JOYSTICK KEYCODE MODE.) 563 564 TIME-OF-DAY CLOCK SET 565 --------------------- 566 567 :: 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 577 All time-of-day data should be sent to the ikbd in packed BCD format. 578 Any digit that is not a valid BCD digit should be treated as a 'don't care' 579 and not alter that particular field of the date or time. This permits setting 580 only some subfields of the time-of-day clock. 581 582 INTERROGATE TIME-OF-DAT CLOCK 583 ----------------------------- 584 585 :: 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 599 MEMORY LOAD 600 ----------- 601 602 :: 603 604 0x20 605 ADRMSB ; address in controller 606 ADRLSB ; memory to be loaded 607 NUM ; number of bytes (0-128) 608 { data } 609 610 This command permits the host to load arbitrary values into the ikbd 611 controller memory. The time between data bytes must be less than 20ms. 612 613 MEMORY READ 614 ----------- 615 616 :: 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 626 This command permits the host to read from the ikbd controller memory. 627 628 CONTROLLER EXECUTE 629 ------------------ 630 631 :: 632 633 0x22 634 ADRMSB ; address of subroutine in 635 ADRLSB ; controller memory to be called 636 637 This command allows the host to command the execution of a subroutine in the 638 ikbd controller memory. 639 640 STATUS INQUIRIES 641 ---------------- 642 643 :: 644 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 670 The STATUS INQUIRY commands request the ikbd to return either the current mode 671 or the parameters associated with a given command. All status reports are 672 padded to form 8 byte long return packets. The responses to the status 673 requests are designed so that the host may store them away (after stripping 674 off the status report header byte) and later send them back as commands to 675 ikbd to restore its state. The 0 pad bytes will be treated as NOPs by the 676 ikbd. 677 678 Valid STATUS INQUIRY commands are:: 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 699 It is the (host) programmer's responsibility to have only one unanswered 700 inquiry in process at a time. 701 STATUS INQUIRY commands are not valid if the ikbd is in JOYSTICK MONITORING 702 mode or FIRE BUTTON MONITORING mode. 703 704 705 SCAN CODES 706 ========== 707 708 The key scan codes returned by the ikbd are chosen to simplify the 709 implementation of GSX. 710 711 GSX Standard Keyboard Mapping 712 713 ======= ============ 714 Hex Keytop 715 ======= ============ 716 01 Esc 717 02 1 718 03 2 719 04 3 720 05 4 721 06 5 722 07 6 723 08 7 724 09 8 725 0A 9 726 0B 0 727 0C \- 728 0D \= 729 0E BS 730 0F TAB 731 10 Q 732 11 W 733 12 E 734 13 R 735 14 T 736 15 Y 737 16 U 738 17 I 739 18 O 740 19 P 741 1A [ 742 1B ] 743 1C RET 744 1D CTRL 745 1E A 746 1F S 747 20 D 748 21 F 749 22 G 750 23 H 751 24 J 752 25 K 753 26 L 754 27 ; 755 28 ' 756 29 \` 757 2A (LEFT) SHIFT 758 2B \\ 759 2C Z 760 2D X 761 2E C 762 2F V 763 30 B 764 31 N 765 32 M 766 33 , 767 34 . 768 35 / 769 36 (RIGHT) SHIFT 770 37 { NOT USED } 771 38 ALT 772 39 SPACE BAR 773 3A CAPS LOCK 774 3B F1 775 3C F2 776 3D F3 777 3E F4 778 3F F5 779 40 F6 780 41 F7 781 42 F8 782 43 F9 783 44 F10 784 45 { NOT USED } 785 46 { NOT USED } 786 47 HOME 787 48 UP ARROW 788 49 { NOT USED } 789 4A KEYPAD - 790 4B LEFT ARROW 791 4C { NOT USED } 792 4D RIGHT ARROW 793 4E KEYPAD + 794 4F { NOT USED } 795 50 DOWN ARROW 796 51 { NOT USED } 797 52 INSERT 798 53 DEL 799 54 { NOT USED } 800 5F { NOT USED } 801 60 ISO KEY 802 61 UNDO 803 62 HELP 804 63 KEYPAD ( 805 64 KEYPAD / 806 65 KEYPAD * 807 66 KEYPAD * 808 67 KEYPAD 7 809 68 KEYPAD 8 810 69 KEYPAD 9 811 6A KEYPAD 4 812 6B KEYPAD 5 813 6C KEYPAD 6 814 6D KEYPAD 1 815 6E KEYPAD 2 816 6F KEYPAD 3 817 70 KEYPAD 0 818 71 KEYPAD . 819 72 KEYPAD ENTER 820 ======= ============
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.