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.