Interrupt 49h   Non-keyboard Scan Code Translation Table Address (PCjr) 

(0:0124h) This interrupt is used for operation of non-keyboard devices

on the PCjr, such as the Keystronic Numeric Keypad.

This interrupt has the address of a table used to translate

non-keyboard scancodes (greater than 85 excepting 255). This

interrupt can be revectored by a user application. IBM

recommends that the default table be stored at the beginning

of an application that required revectoring this interrupt,

and that the default table be restored when the application

terminates. (not initialized on PC or AT)

The PCjr BIOS can interpret scancodes other than those

generated by the keyboard to allow for expansion. The keyboard

generates scancodes from 01h to 055h, including 0FFh. Any

scancodes above 55h (56h through 7Eh for make codes and 0D6h

through 0FEh for break codes) are processed in the following

manner:

1) if the incoming make code falls within the range of the

translate table whose address is pointed to by int 49h, it

is translated into the corresponding scancode. Any incoming

break codes above 0D5h are ignored.

2) if the new translated scancode ius less and 56h, it is

processed by the BIOS as a keyboard scancode and the same

data is placed in the BIOS keyboard buffer.

3) if the translated scancode is higher than 55h or the

incoming scancode is outside the range of the translate

table, 40h is added creating a new extended scancode. The

extended scancode is placed in the BIOS keyboard buffer with

the character code of 00h (NUL). This utilitizes the range

of 96h through 0BEh for scancodes 56h through 7Eh.

The default translate-table maps scancodes 56h through 6Ah to

existing keyboard values. Codes 6Bh theough 0BEh are mapped (by

adding 40h) to extended codes 0ABh through 0FEh since they are

outside the range of the default translate table.

The format of the translate table is:

0 length - the number of nonkeyboard scancodes that are

mapped within the table (from 1 to n)

1 to n word high byte 00h (NUL) byte scancode with low order

byte representing the scancode mapped values relative

to their input values within the range of 56h through

7Eh

With this layout, all keyboard scancodes can be intercepted

through Int\09 and and nonkeyboard scancodes can be

intercepted through Int\48.