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/rlease 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 lne, 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 keystokes are generated 450 ; after RX has elapsed 451 VY ; length (in tenths of seconds) of joystick closure 452 ; until vertical cursor keystokes 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