Added IBM-J 5576 keyboard and scancode set 8Ah
This commit is contained in:
@@ -18,10 +18,13 @@
|
||||
* Copyright 2015-2019 Miran Grca.
|
||||
* Copyright 2017-2019 Fred N. van Kempen.
|
||||
*/
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <wchar.h>
|
||||
#define HAVE_STDARG_H
|
||||
#include <86box/86box.h>
|
||||
#include <86box/machine.h>
|
||||
#include <86box/keyboard.h>
|
||||
@@ -49,6 +52,24 @@ uint16_t key_uncapture_1 = 0x04f; /* Numpad End */
|
||||
uint16_t key_uncapture_2 = 0x14f; /* End */
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_KBC_AT_LOG
|
||||
int kbc_at_do_log = ENABLE_KBC_AT_LOG;
|
||||
|
||||
static void
|
||||
kbc_at_log(const char* fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (kbc_at_do_log) {
|
||||
va_start(ap, fmt);
|
||||
pclog_ex(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
}
|
||||
#else
|
||||
# define kbc_at_log(fmt, ...)
|
||||
#endif
|
||||
|
||||
void (*keyboard_send)(uint16_t val);
|
||||
|
||||
static int recv_key[512] = { 0 }; /* keyboard input buffer */
|
||||
@@ -64,6 +85,64 @@ static uint8_t num_lock = 0;
|
||||
static uint8_t scroll_lock = 0;
|
||||
static uint8_t shift = 0;
|
||||
|
||||
static int key5576mode = 0;
|
||||
|
||||
typedef struct {
|
||||
const uint16_t sc;
|
||||
const uint8_t mk[4];
|
||||
const uint8_t brk[4];
|
||||
} scconvtbl;
|
||||
|
||||
static scconvtbl scconv55_82[18 + 1] =
|
||||
{
|
||||
// clang-format off
|
||||
{.sc = 0x02 , .mk = { 0x5f, 0 }, .brk = { 0xf0, 0x5f, 0 } }, /* '1' -> 'Clear/ /SysRq' */
|
||||
{.sc = 0x03 , .mk = { 0x48, 0 }, .brk = { 0xf0, 0x48, 0 } }, /* '2' -> '終了 (Exit)' */
|
||||
{.sc = 0x04 , .mk = { 0x38, 0 }, .brk = { 0xf0, 0x38, 0 } }, /* '3' -> 'メッセージ (Message)/ /応答 (Respond)' */
|
||||
{.sc = 0x05 , .mk = { 0x30, 0 }, .brk = { 0xf0, 0x30, 0 } }, /* '4' -> 'サイズ変換 (Change Size)/ /横倍角 (2x Width)' */
|
||||
{.sc = 0x06 , .mk = { 0x20, 0 }, .brk = { 0xf0, 0x20, 0 } }, /* '5' -> '単語登録 (Register Word)/ /再交換 (Re-change)' */
|
||||
{.sc = 0x07 , .mk = { 0x28, 0 }, .brk = { 0xf0, 0x28, 0 } }, /* '6' -> '漢字 (Kanji)/ /番号 (Number)' */
|
||||
{.sc = 0x08 , .mk = { 0x60, 0 }, .brk = { 0xf0, 0x60, 0 } }, /* '7' -> '取消 (Cancel)' */
|
||||
{.sc = 0x09 , .mk = { 0x40, 0 }, .brk = { 0xf0, 0x40, 0 } }, /* '8' -> 'コピー (Copy)/ /移動 (Move)' */
|
||||
{.sc = 0x3d , .mk = { 0x1f, 0 }, .brk = { 0xf0, 0x1f, 0 } }, /* 'F3' -> 'Cr Bnk/領域呼出 (Call Range)/All Cr/登録 (Register)' */
|
||||
{.sc = 0x3e , .mk = { 0x27, 0 }, .brk = { 0xf0, 0x27, 0 } }, /* 'F4' -> '割込み (Interrupt)' */
|
||||
{.sc = 0x3f , .mk = { 0x2f, 0 }, .brk = { 0xf0, 0x2f, 0 } }, /* 'F5' -> 'UF1' */
|
||||
{.sc = 0x40 , .mk = { 0x5e, 0 }, .brk = { 0xf0, 0x5e, 0 } }, /* 'F6' -> 'UF2' */
|
||||
{.sc = 0x41 , .mk = { 0x08, 0 }, .brk = { 0xf0, 0x08, 0 } }, /* 'F7' -> 'UF3' */
|
||||
{.sc = 0x42 , .mk = { 0x10, 0 }, .brk = { 0xf0, 0x10, 0 } }, /* 'F8' -> 'UF4' */
|
||||
{.sc = 0x43 , .mk = { 0x50, 0 }, .brk = { 0xf0, 0x50, 0 } }, /* 'F9' -> 'EOF/Erase/ErInp' */
|
||||
{.sc = 0x44 , .mk = { 0x18, 0 }, .brk = { 0xf0, 0x18, 0 } }, /* 'F10' -> 'Attn/ /CrSel' */
|
||||
{.sc = 0x57 , .mk = { 0x17, 0 }, .brk = { 0xf0, 0x17, 0 } }, /* 'F11' -> 'PA1/ /DvCncl' */
|
||||
{.sc = 0x58 , .mk = { 0x37, 0 }, .brk = { 0xf0, 0x37, 0 } }, /* 'F12' -> 'PA2/ /PA3' */
|
||||
{.sc = 0 , .mk = { 0 }, .brk = { 0 } } /* end */
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
static scconvtbl scconv55_8a[18 + 1] =
|
||||
{
|
||||
// clang-format off
|
||||
{.sc = 0x02 , .mk = { 0x48 }, .brk = { 0 } }, /* '1' -> 'Clear/ /SysRq' */
|
||||
{.sc = 0x03 , .mk = { 0x49 }, .brk = { 0 } }, /* '2' -> '終了 (Exit)' */
|
||||
{.sc = 0x04 , .mk = { 0x46 }, .brk = { 0 } }, /* '3' -> 'メッセージ (Message)/ /応答 (Respond)' */
|
||||
{.sc = 0x05 , .mk = { 0x44 }, .brk = { 0 } }, /* '4' -> 'サイズ変換 (Change Size)/ /横倍角 (2x Width)' */
|
||||
{.sc = 0x06 , .mk = { 0x42 }, .brk = { 0 } }, /* '5' -> '単語登録 (Register Word)/ /再交換 (Re-change)' */
|
||||
{.sc = 0x07 , .mk = { 0x43 }, .brk = { 0 } }, /* '6' -> '漢字 (Kanji)/ /番号 (Number)' */
|
||||
{.sc = 0x08 , .mk = { 0x40 }, .brk = { 0 } }, /* '7' -> '取消 (Cancel)' */
|
||||
{.sc = 0x09 , .mk = { 0x51 }, .brk = { 0 } }, /* '8' -> 'コピー (Copy)/ /移動 (Move)' */
|
||||
{.sc = 0x3d , .mk = { 0x76 }, .brk = { 0 } }, /* 'F3' -> 'Cr Bnk/領域呼出 (Call Range)/All Cr/登録 (Register)' */
|
||||
{.sc = 0x3e , .mk = { 0x77 }, .brk = { 0 } }, /* 'F4' -> '割込み (Interrupt)' */
|
||||
{.sc = 0x3f , .mk = { 0x78 }, .brk = { 0 } }, /* 'F5' -> 'UF1' */
|
||||
{.sc = 0x40 , .mk = { 0x79 }, .brk = { 0 } }, /* 'F6' -> 'UF2' */
|
||||
{.sc = 0x41 , .mk = { 0x7a }, .brk = { 0 } }, /* 'F7' -> 'UF3' */
|
||||
{.sc = 0x42 , .mk = { 0x7b }, .brk = { 0 } }, /* 'F8' -> 'UF4' */
|
||||
{.sc = 0x43 , .mk = { 0x7c }, .brk = { 0 } }, /* 'F9' -> 'EOF/Erase/ErInp' */
|
||||
{.sc = 0x44 , .mk = { 0x7d }, .brk = { 0 } }, /* 'F10' -> 'Attn/ /CrSel' */
|
||||
{.sc = 0x57 , .mk = { 0x7e }, .brk = { 0 } }, /* 'F11' -> 'PA1/ /DvCncl' */
|
||||
{.sc = 0x58 , .mk = { 0x7f }, .brk = { 0 } }, /* 'F12' -> 'PA2/ /PA3' */
|
||||
{.sc = 0 , .mk = { 0 }, .brk = { 0 } } /* end */
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
void
|
||||
keyboard_init(void)
|
||||
{
|
||||
@@ -119,6 +198,36 @@ key_process(uint16_t scan, int down)
|
||||
|
||||
oldkey[scan] = down;
|
||||
|
||||
pclog("keyboard : %04X,%d in process\n", scan, down);
|
||||
|
||||
c = 0;
|
||||
/* According to Japanese DOS K3.3 manual (N:SC18-2194-1),
|
||||
IBM 5576-002, -003 keyboards have the one-time key conversion mode
|
||||
that emulates 18 out of 131 keys on IBM 5576-001 keyboard.
|
||||
It is triggered by pressing L-Shift (⇧) + L-Ctrl + R-Alt (前面キー)
|
||||
when the scancode set is 82h or 8ah.
|
||||
*/
|
||||
if (key5576mode) {
|
||||
int i = 0;
|
||||
if (!down) {
|
||||
/* Do and exit the 5576-001 emulation when a key is pressed other than trigger keys. */
|
||||
if (scan != 0x1d && scan != 0x2a && scan != 0x138)
|
||||
{
|
||||
key5576mode = 0;
|
||||
pclog("keyboard : 5576-001 key emulation disabled.\n");
|
||||
}
|
||||
}
|
||||
while (scconv55_8a[i].sc != 0)
|
||||
{
|
||||
if (scconv55_8a[i].sc == scan) {
|
||||
while (scconv55_8a[i].mk[c] != 0)
|
||||
keyboard_send(scconv55_8a[i].mk[c++]);
|
||||
return;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
if (down && (codes[scan].mk[0] == 0))
|
||||
return;
|
||||
|
||||
@@ -145,6 +254,13 @@ key_process(uint16_t scan, int down)
|
||||
if (fake_shift_needed(scan))
|
||||
keyboard_send(0x101);
|
||||
}
|
||||
|
||||
/* Enter the 5576-001 emulation mode. */
|
||||
if (keyboard_mode == 0x8a && down && ((keyboard_get_shift() & 0x43) == 0x43))
|
||||
{
|
||||
key5576mode = 1;
|
||||
pclog("keyboard : 5576-001 key emulation enabled.\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* Handle a keystroke event from the UI layer. */
|
||||
|
||||
@@ -53,10 +53,10 @@ const uint8_t id_bytes[16][4] = { { 0x00, 0x00, 0x00, 0x00 }, /* AT 84-key */
|
||||
{ 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00 },
|
||||
{ 0x00, 0x00, 0x00, 0x00 }, /* FLAG_PS2 = 0x08 */
|
||||
{ 0xab, 0x83, 0x00, 0x00 }, /* PS/2 101-key */
|
||||
{ 0xab, 0x83, 0x00, 0x00 }, /* PS/2 102-key */
|
||||
{ 0xab, 0x90, 0x00, 0x00 }, /* PS/2 106-key JIS */
|
||||
{ 0xab, 0x90, 0x00, 0x00 }, /* PS/55 106-key JIS (IBM-J 5576-002) */
|
||||
/* Japanese keyboard ID - TODO: Find the actual Korean one. */
|
||||
{ 0xab, 0x90, 0x00, 0x00 }, /* PS/2 Korean */
|
||||
{ 0x00, 0x00, 0x00, 0x00 },
|
||||
@@ -1630,6 +1630,548 @@ static const scancode scancode_set3[512] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
/* IBM Japan 5576-001, 002 and 003 keyboards have three extra scancode sets; 81h, 82h, 8ah.
|
||||
Scancode set 81h and 82h are not implemented yet.
|
||||
To implement them, we need take the following into consideration.
|
||||
* Add a UI to switch the type of keyboards and keyboard IDs.
|
||||
* Add modified scancode set 1 and 2 (in these modes, language input keys are used as an alternative key).
|
||||
* Japanese keyboards traditionally use a typewriter layout. Its key mapping doesn't match with foreign keyboards.
|
||||
|
||||
5576 keyboards kept 101-key compatible scancode sets because PS/55 had to support western (PS/2) versions of operating systems.
|
||||
The default scancode set is 2.
|
||||
In Japanese DOS, the keyboard driver confirms its keyboard ID, and sends a command to switch the scancode set to 8Ah.
|
||||
|
||||
The OADG standard and modern Japanese keyboards use the same keyboard ID and scancode set number as PS/2 keyboards use.
|
||||
Three extra scancode sets are no longer available. Instead, language input keys are available in scancode set 1 and 2.
|
||||
However, it has a different key mapping.
|
||||
Users have to choose the correct keyboard layout on setup, and the driver needs to remap keys.
|
||||
|
||||
[Japanese DOS and keyboard scancode set]
|
||||
| | K3.3 | J4.0 | J5.0 | J4.0/V | J5.0/V | OS/2 J1.3 | PC DOS 5 |
|
||||
|---------------------------|:----:|:----:|:----:|:------:|:------:|:---------:|:--------:|
|
||||
| IBM 101-key | n/a | n/a | n/a | n/a | 2 | n/a | 2 |
|
||||
| IBM-J 5576-00x (obsolete) | 8A | 8A | 8A | 82 | 82 | 82 | 2 |
|
||||
| OADG (modern JA standard) | n/a | n/a | n/a | 2 | 2 | 2 | 2 | */
|
||||
|
||||
/* Scancode set 8Ah : 5556 keyboard compatible scancode set used by J-DOS */
|
||||
static scancode scancode_set8a[512] =
|
||||
{
|
||||
// clang-format off
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 000 */
|
||||
{.mk = { 0x3d, 0 }, .brk = { 0 } }, /* 001 */
|
||||
{.mk = { 0x24, 0 }, .brk = { 0 } }, /* 002 */
|
||||
{.mk = { 0x25, 0 }, .brk = { 0 } }, /* 003 */
|
||||
{.mk = { 0x26, 0 }, .brk = { 0 } }, /* 004 */
|
||||
{.mk = { 0x27, 0 }, .brk = { 0 } }, /* 005 */
|
||||
{.mk = { 0x28, 0 }, .brk = { 0 } }, /* 006 */
|
||||
{.mk = { 0x29, 0 }, .brk = { 0 } }, /* 007 */
|
||||
{.mk = { 0x2a, 0 }, .brk = { 0 } }, /* 008 */
|
||||
{.mk = { 0x2b, 0 }, .brk = { 0 } }, /* 009 */
|
||||
{.mk = { 0x2c, 0 }, .brk = { 0 } }, /* 00a */
|
||||
{.mk = { 0x2d, 0 }, .brk = { 0 } }, /* 00b */
|
||||
{.mk = { 0x2e, 0 }, .brk = { 0 } }, /* 00c */
|
||||
{.mk = { 0x2f, 0 }, .brk = { 0 } }, /* 00d */
|
||||
{.mk = { 0x3e, 0 }, .brk = { 0 } }, /* 00e */
|
||||
{.mk = { 0x3c, 0 }, .brk = { 0 } }, /* 00f */
|
||||
{.mk = { 0x18, 0 }, .brk = { 0 } }, /* 010 */
|
||||
{.mk = { 0x19, 0 }, .brk = { 0 } }, /* 011 */
|
||||
{.mk = { 0x1a, 0 }, .brk = { 0 } }, /* 012 */
|
||||
{.mk = { 0x1b, 0 }, .brk = { 0 } }, /* 013 */
|
||||
{.mk = { 0x1c, 0 }, .brk = { 0 } }, /* 014 */
|
||||
{.mk = { 0x1d, 0 }, .brk = { 0 } }, /* 015 */
|
||||
{.mk = { 0x1e, 0 }, .brk = { 0 } }, /* 016 */
|
||||
{.mk = { 0x1f, 0 }, .brk = { 0 } }, /* 017 */
|
||||
{.mk = { 0x20, 0 }, .brk = { 0 } }, /* 018 */
|
||||
{.mk = { 0x21, 0 }, .brk = { 0 } }, /* 019 */
|
||||
{.mk = { 0x22, 0 }, .brk = { 0 } }, /* 01a */
|
||||
{.mk = { 0x23, 0 }, .brk = { 0 } }, /* 01b */
|
||||
{.mk = { 0x3b, 0 }, .brk = { 0 } }, /* 01c */
|
||||
{.mk = { 0x41, 0 }, .brk = { 0xc1, 0 } }, /* 01d LCTRL */
|
||||
{.mk = { 0x0c, 0 }, .brk = { 0 } }, /* 01e */
|
||||
{.mk = { 0x0d, 0 }, .brk = { 0 } }, /* 01f */
|
||||
{.mk = { 0x0e, 0 }, .brk = { 0 } }, /* 020 */
|
||||
{.mk = { 0x0f, 0 }, .brk = { 0 } }, /* 021 */
|
||||
{.mk = { 0x10, 0 }, .brk = { 0 } }, /* 022 */
|
||||
{.mk = { 0x11, 0 }, .brk = { 0 } }, /* 023 */
|
||||
{.mk = { 0x12, 0 }, .brk = { 0 } }, /* 024 */
|
||||
{.mk = { 0x13, 0 }, .brk = { 0 } }, /* 025 */
|
||||
{.mk = { 0x14, 0 }, .brk = { 0 } }, /* 026 */
|
||||
{.mk = { 0x15, 0 }, .brk = { 0 } }, /* 027 */
|
||||
{.mk = { 0x16, 0 }, .brk = { 0 } }, /* 028* */
|
||||
{.mk = { 0x45, 0 }, .brk = { 0 } }, /* 029 Hankaku, Zenkaku */
|
||||
{.mk = { 0x38, 0 }, .brk = { 0xb8, 0 } }, /* 02a LSHIFT */
|
||||
{.mk = { 0x17, 0 }, .brk = { 0 } }, /* 02b Mu */
|
||||
{.mk = { 0x01, 0 }, .brk = { 0 } }, /* 02c */
|
||||
{.mk = { 0x02, 0 }, .brk = { 0 } }, /* 02d */
|
||||
{.mk = { 0x03, 0 }, .brk = { 0 } }, /* 02e */
|
||||
{.mk = { 0x04, 0 }, .brk = { 0 } }, /* 02f */
|
||||
{.mk = { 0x05, 0 }, .brk = { 0 } }, /* 030 */
|
||||
{.mk = { 0x06, 0 }, .brk = { 0 } }, /* 031 */
|
||||
{.mk = { 0x07, 0 }, .brk = { 0 } }, /* 032 */
|
||||
{.mk = { 0x08, 0 }, .brk = { 0 } }, /* 033 */
|
||||
{.mk = { 0x09, 0 }, .brk = { 0 } }, /* 034 */
|
||||
{.mk = { 0x0a, 0 }, .brk = { 0 } }, /* 035 */
|
||||
{.mk = { 0x39, 0 }, .brk = { 0xb9, 0 } }, /* 036 RSHIFT */
|
||||
{.mk = { 0x64, 0 }, .brk = { 0 } }, /* 037 * (asterisk) */
|
||||
{.mk = { 0x3A, 0 }, .brk = { 0xba, 0 } }, /* 038 LALT = Kanji */
|
||||
{.mk = { 0x34, 0 }, .brk = { 0 } }, /* 039 */
|
||||
{.mk = { 0x32, 0 }, .brk = { 0xb2, 0 } }, /* 03a CAPSLOCK */
|
||||
{.mk = { 0x68, 0 }, .brk = { 0 } }, /* 03b F1 */
|
||||
{.mk = { 0x69, 0 }, .brk = { 0 } }, /* 03c */
|
||||
{.mk = { 0x6a, 0 }, .brk = { 0 } }, /* 03d */
|
||||
{.mk = { 0x6b, 0 }, .brk = { 0 } }, /* 03e */
|
||||
{.mk = { 0x6c, 0 }, .brk = { 0 } }, /* 03f */
|
||||
{.mk = { 0x6d, 0 }, .brk = { 0 } }, /* 040 */
|
||||
{.mk = { 0x6e, 0 }, .brk = { 0 } }, /* 041 */
|
||||
{.mk = { 0x6f, 0 }, .brk = { 0 } }, /* 042 */
|
||||
{.mk = { 0x70, 0 }, .brk = { 0 } }, /* 043 */
|
||||
{.mk = { 0x71, 0 }, .brk = { 0 } }, /* 044 F10 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 045 NUMLOCKCLEAR -> Shift + SCRLOCK :TODO */
|
||||
{.mk = { 0x75, 0 }, .brk = { 0 } }, /* 046 SCROLLLOCK */
|
||||
{.mk = { 0x5d, 0 }, .brk = { 0 } }, /* 047 KP7 */
|
||||
{.mk = { 0x5e, 0 }, .brk = { 0 } }, /* 048 */
|
||||
{.mk = { 0x5f, 0 }, .brk = { 0 } }, /* 049 */
|
||||
{.mk = { 0x67, 0 }, .brk = { 0 } }, /* 04a KP_MINUS */
|
||||
{.mk = { 0x5a, 0 }, .brk = { 0 } }, /* 04b */
|
||||
{.mk = { 0x5b, 0 }, .brk = { 0 } }, /* 04c */
|
||||
{.mk = { 0x5c, 0 }, .brk = { 0 } }, /* 04d */
|
||||
{.mk = { 0x63, 0 }, .brk = { 0 } }, /* 04e */
|
||||
{.mk = { 0x57, 0 }, .brk = { 0 } }, /* 04f */
|
||||
{.mk = { 0x58, 0 }, .brk = { 0 } }, /* 050 */
|
||||
{.mk = { 0x59, 0 }, .brk = { 0 } }, /* 051 */
|
||||
{.mk = { 0x55, 0 }, .brk = { 0 } }, /* 052 KP0 */
|
||||
{.mk = { 0x56, 0 }, .brk = { 0 } }, /* 053 KP_PERIOD */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 054 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 055 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 056 */
|
||||
{.mk = { 0x72, 0 }, .brk = { 0 } }, /* 057 F11 */
|
||||
{.mk = { 0x73, 0 }, .brk = { 0 } }, /* 058 F12 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 059 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 05a */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 05b */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 05c */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 05d */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 05e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 05f */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 060 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 061 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 062 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 063 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 064 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 065 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 066 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 067 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 068 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 069 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 06a */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 06b */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 06c */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 06d */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 06e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 06f */
|
||||
{.mk = { 0x36, 0 }, .brk = { 0xb6, 0 } }, /* 070 Kana */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 071 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 072 */
|
||||
{.mk = { 0x0b, 0 }, .brk = { 0 } }, /* 073 Ro, Underline */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 074 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 075 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 076 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 077 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 078 */
|
||||
{.mk = { 0x35, 0 }, .brk = { 0 } }, /* 079 Henkan */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 07a */
|
||||
{.mk = { 0x33, 0 }, .brk = { 0 } }, /* 07b Muhenkan */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 07c */
|
||||
{.mk = { 0x30, 0 }, .brk = { 0 } }, /* 07d Yen, Vertical line */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 07e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 07f */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 080 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 081 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 082 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 083 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 084 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 085 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 086 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 087 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 088 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 089 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 08a */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 08b */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 08c */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 08d */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 08e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 08f */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 090 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 091 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 092 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 093 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 094 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 095 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 096 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 097 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 098 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 099 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 09a */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 09b */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 09c */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 09d */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 09e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 09f */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0a0 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0a1 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0a2 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0a3 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0a4 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0a5 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0a6 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0a7 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0a8 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0a9 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0aa */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0ab */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0ac */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0ad */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0ae */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0af */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0b0 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0b1 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0b2 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0b3 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0b4 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0b5 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0b6 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0b7 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0b8 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0b9 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0ba */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0bb */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0bc */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0bd */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0be */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0bf */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0c0 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0c1 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0c2 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0c3 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0c4 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0c5 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0c6 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0c7 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0c8 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0c9 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0ca */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0cb */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0cc */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0cd */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0ce */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0cf */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0d0 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0d1 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0d2 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0d3 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0d4 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0d5 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0d6 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0d7 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0d8 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0d9 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0da */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0db */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0dc */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0dd */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0de */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0df */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0e0 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0e1 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0e2 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0e3 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0e4 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0e5 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0e6 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0e7 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0e8 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0e9 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0ea */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0eb */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0ec */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0ed */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0ee */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0ef */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0f0 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0f1 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0f2 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0f3 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0f4 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0f5 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0f6 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0f7 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0f8 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0f9 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0fa */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0fb */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0fc */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0fd */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0fe */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 0ff */
|
||||
{.mk = { 0x47, 0 }, .brk = { 0 } }, /* 100 Pause */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 101 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 102 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 103 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 104 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 105 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 106 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 107 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 108 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 109 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 10a */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 10b */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 10c */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 10d */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 10e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 10f */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 110 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 112 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 113 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 113 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 114 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 115 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 116 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 117 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 118 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 119 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 11a */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 11b */
|
||||
{.mk = { 0x60, 0 }, .brk = { 0 } }, /* 11c KP_Enter */
|
||||
{.mk = { 0x37, 0 }, .brk = { 0xb7, 0 } }, /* 11d R-Ctrl */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 11e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 11f */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 120 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 121 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 122 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 123 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 124 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 125 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 126 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 127 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 128 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 129 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 12a */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 12b */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 12c */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 12d */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 12e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 12f */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 130 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 131 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 132 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 133 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 134 */
|
||||
{.mk = { 0x65, 0 }, .brk = { 0 } }, /* 135 KP_DIVIDE */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 136 */
|
||||
{.mk = { 0x74, 0 }, .brk = { 0 } }, /* 137 PRINTSCREEN */
|
||||
{.mk = { 0x31, 0 }, .brk = { 0xb1, 0 } }, /* 138* R-Alt */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 139 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 13a */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 13b */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 13c */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 13d */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 13e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 13f */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 140 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 141 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 142 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 143 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 144 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 145 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 146 */
|
||||
{.mk = { 0x4c, 0 }, .brk = { 0 } }, /* 147 Home */
|
||||
{.mk = { 0x4e, 0 }, .brk = { 0 } }, /* 148 Up */
|
||||
{.mk = { 0x52, 0 }, .brk = { 0 } }, /* 149 PageUp */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 14a */
|
||||
{.mk = { 0x4b, 0 }, .brk = { 0 } }, /* 14b Left */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 14c */
|
||||
{.mk = { 0x4d, 0 }, .brk = { 0 } }, /* 14d Right */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 14e */
|
||||
{.mk = { 0x53, 0 }, .brk = { 0 } }, /* 14f End */
|
||||
{.mk = { 0x4a, 0 }, .brk = { 0 } }, /* 150 Down */
|
||||
{.mk = { 0x54, 0 }, .brk = { 0 } }, /* 151 PageDown */
|
||||
{.mk = { 0x4f, 0 }, .brk = { 0 } }, /* 152 Ins */
|
||||
{.mk = { 0x50, 0 }, .brk = { 0 } }, /* 153 Del */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 154 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 155 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 156 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 157 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 158 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 159 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 15a */
|
||||
{.mk = { 0x33, 0 }, .brk = { 0 } }, /* 15b LGUI->Muhenkan (in emulator only) */
|
||||
{.mk = { 0x35, 0 }, .brk = { 0 } }, /* 15c RGUI->Henkan (in emulator only) */
|
||||
{.mk = { 0x36, 0 }, .brk = { 0xb6, 0 } }, /* 15d APPLICATION->Kana (in emulator only) */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 15e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 15f */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 160 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 161 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 162 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 163 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 164 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 165 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 166 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 167 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 168 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 169 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 16a */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 16b */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 16c */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 16d */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 16e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 16f */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 170 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 171 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 172 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 173 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 174 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 175 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 176 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 177 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 178 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 179 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 17a */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 17b */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 17c */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 17d */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 17e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 17f */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 180 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 181 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 182 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 183 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 184 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 185 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 186 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 187 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 188 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 189 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 18a */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 18b */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 18c */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 18d */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 18e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 18f */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 190 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 191 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 192 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 193 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 194 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 195 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 196 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 197 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 198 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 199 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 19a */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 19b */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 19c */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 19d */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 19e */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 19f */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1a0 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1a1 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1a2 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1a3 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1a4 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1a5 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1a6 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1a7 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1a8 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1a9 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1aa */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1ab */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1ac */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1ad */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1ae */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1af */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1b0 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1b1 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1b2 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1b3 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1b4 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1b5 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1b6 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1b7 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1b8 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1b9 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1ba */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1bb */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1bc */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1bd */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1be */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1bf */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1c0 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1c1 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1c2 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1c3 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1c4 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1c5 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1c6 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1c7 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1c8 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1c9 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1ca */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1cb */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1cv */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1cd */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1ce */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1cf */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1d0 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1d1 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1d2 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1d3 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1d4 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1d5 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1d6 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1d7 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1d8 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1d9 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1da */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1db */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1dc */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1dd */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1de */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1df */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1e0 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1e1 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1e2 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1e3 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1e4 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1e5 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1e6 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1e7 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1e8 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1e9 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1ea */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1eb */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1ec */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1ed */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1ee */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1ef */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1f0 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1f1 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1f2 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1f3 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1f4 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1f5 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1f6 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1f7 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1f8 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1f9 */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1fa */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1fb */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1fc */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1fd */
|
||||
{.mk = { 0 }, .brk = { 0 } }, /* 1fe */
|
||||
{.mk = { 0 }, .brk = { 0 } } /* 1ff */
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
#ifdef ENABLE_KEYBOARD_AT_LOG
|
||||
int keyboard_at_do_log = ENABLE_KEYBOARD_AT_LOG;
|
||||
|
||||
@@ -1664,6 +2206,10 @@ keyboard_at_set_scancode_set(void)
|
||||
case 0x03:
|
||||
keyboard_set_table(scancode_set3);
|
||||
break;
|
||||
|
||||
case 0x8a:
|
||||
keyboard_set_table(scancode_set8a);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1922,19 +2468,22 @@ keyboard_at_write(void *priv)
|
||||
break;
|
||||
|
||||
case 0xf0: /* Get/set scancode set */
|
||||
kbc_at_dev_queue_add(dev, (val > 3) ? 0xfe : 0xfa, 0);
|
||||
switch (val) {
|
||||
case 0x00:
|
||||
kbc_at_dev_queue_add(dev, 0xfa, 0); /* ACK */
|
||||
keyboard_at_log("%s: Get scan code set [%02X]\n", dev->name, keyboard_mode);
|
||||
kbc_at_dev_queue_add(dev, keyboard_mode, 0);
|
||||
break;
|
||||
case 0x01 ... 0x03:
|
||||
case 0x8a:
|
||||
kbc_at_dev_queue_add(dev, 0xfa, 0); /* ACK */
|
||||
keyboard_mode = val;
|
||||
keyboard_at_log("%s: Set scan code set [%02X]\n", dev->name, keyboard_mode);
|
||||
keyboard_at_set_scancode_set();
|
||||
break;
|
||||
default:
|
||||
/* Fatal so any instance of anything attempting to set scan code > 3 can be reported to us. */
|
||||
kbc_at_dev_queue_add(dev, 0xfe, 0); /* Resend */
|
||||
fatal("%s: Scan code set [%02X] invalid, resend\n", dev->name, val);
|
||||
dev->flags |= FLAG_CTRLDAT;
|
||||
dev->state = DEV_STATE_MAIN_WANT_IN;
|
||||
|
||||
Reference in New Issue
Block a user