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