/* PS/2 - SHARP X1 キーコード変換テーブル X1 キーボードの実物を持っていないので、X1のキーコードは X1 エミュレータの Xmillennium v0.26 T-tune STEP 1.43 (http://www.x1center.org/emu.html) に含まれる Input.cpp 内のテーブルを使用しました。 2014年7月23日作成 佐藤恭一 http://kyoutan.jpn.org/ 無保証です。 佐藤恭一が作成した部分は用途に制限を設けません。商用・非商用にかかわらず自由に使用して頂いて構いません。 勝手に複製したり、改造したり、配布したり、売ったりしても良いということです。 連絡不要です。 */ typedef const unsigned char BYTE; #pragma section rom flash_data // 変換テーブルはデータフラッシュに配置 /* ~~~ ~~~~~~~~~~ | +-- 自分が好きに付けたセクションの名前。 | この名前に_NE _NO 等の配置属性を付けて、 | ビルド-リンカのセクションの設定で開始アドレスを指定する | (sect30.inc ファイルを編集する必要は無い) +--------- 既定セクション名(program、rom、data、bss のいずれか) 配置属性、既定セクション名については、 M16Cシリーズ,R8C ファミリ C/C++コンパイラユーザーズマニュアル 第 2 章 コンパイラの基本的な使い方 2.2.3 メモリ配置のカスタマイズ a. セクションの構成 に詳しく書いてある。 (マニュアルは「High-performancd Embedded Workshop (HEW)」と一緒にインストールされる 「Manual Navigator」で見ることができる) */ // PS/2 106 キーボードから内部コードへの変換テーブル // PS/2 のコードからX1のコードに直接変換すると、X1のテーブルが大きくなってしまうので // いったん内部コードに変換する BYTE KEY106[0x100] = { // 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F // 0x00 F9 F5 F3 F1 F2 F12 F10 F8 F6 F4 TAB 全角 0x00,0x43,0x00,0x3F,0x3D,0x3B,0x3C,0x58,0x00,0x44,0x42,0x40,0x3E,0x0F,0x29,0x00, // 0x10 ALT SH L ひら CTRL Q 1 Z S A W 2 WIN 0x00,0x38,0x2A,0x55,0x1D,0x10,0x02,0x00,0x00,0x00,0x2C,0x1F,0x1E,0x11,0x03,0x00, // 0x20 C X D E 4 3 WIN SP V F T R 5 APL 0x00,0x2E,0x2D,0x20,0x12,0x05,0x04,0x00,0x00,0x39,0x2F,0x21,0x14,0x13,0x06,0x00, // 0x30 N B H G Y 6 M J U 7 8 0x00,0x31,0x30,0x23,0x22,0x15,0x07,0x00,0x00,0x00,0x32,0x24,0x16,0x08,0x09,0x00, // 0x40 , K I O 0 9 . / L ; P - 0x00,0x33,0x25,0x17,0x18,0x0B,0x0A,0x00,0x00,0x34,0x35,0x26,0x27,0x19,0x0C,0x00, // 0x50 ろ : @ ^ CAPS SH R ENT [ ] 0x00,0x59,0x28,0x00,0x1A,0x0d,0x00,0x00,0x3A,0x36,0x1C,0x1B,0x00,0x2B,0x00,0x00, // 0x60 変換 BS 無変 1 \ 4 7 0x00,0x00,0x00,0x00,0x5E,0x00,0x0E,0x56,0x00,0x4F,0x5A,0x4B,0x47,0x00,0x00,0x00, // 0x70 0 . 2 5 6 8 ESC NUM F11 + 3 - * 9 ScLk 0x52,0x53,0x50,0x4C,0x4D,0x48,0x01,0x00,0x57,0x4E,0x51,0x4A,0x37,0x49,0x00,0x00, // 0x80 BRK F7 0x45,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 拡張キー // 0x60 END ← HOME 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5F,0x00,0xCB,0xC7,0x00,0x00,0x00, // 0x70 INS DEL ↓ → ↑ PgDn PgUp 0xD2,0xD3,0xD0,0x00,0xCD,0xC8,0x00,0x00,0x00,0x00,0x5C,0x00,0x00,0x5B,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 // PAUSE/BREAK E1 14 77 E1 F0 14 F0 77 → 0x80 // PRINT SCREEN E0 12 E0 7C → [SH L]+[*(TEN KEY)] }; /* リターンコード 早見表 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x00 ESC 1 2 3 4 5 6 7 8 9 0 - ^ BS TAB 0x10 Q W E R T Y U I O P @ [ ENT CTRL A S 0x20 D F G H J K L ; : 全 SH L ] Z X C V 0x30 B N M , . / SH R * ALT SP CAPS F1 F2 F3 F4 F5 0x40 F6 F7 F8 F9 F10 BRK 7 8 9 - 4 5 6 + 1 0x50 2 3 0 . かな 無変 F11 F12 ろ \ PgUp PgDn = 変換 END 0x60 0x70 0x80 0x90 0xA0 0xB0 0xC0 HOME ↑ ← → 0xD0 ↓ INS DEL */ #define GRAPH_CODE1 0x56 // 無変 #define GRAPH_CODE2 0x38 // ALT #define CAPS_CODE 0x3A // CAPS #define KANA_CODE 0x55 // カタカナ/ひらがな #define SHIFTL_CODE 0x2A // 左SHIFT #define SHIFTR_CODE 0x36 // 右SHIFT #define CTRL_CODE 0x1D // CTRL #define UP_CODE 0xC8 // ↑ #define DOWN_CODE 0xD0 // ↓ #define LEFT_CODE 0xCB // ← #define RIGHT_CODE 0xCD // → #define INS_CODE 0xD2 // INS #define DEL_CODE 0xD3 // DEL #define HOME_CODE 0xC7 // HOME BYTE BREAK_CODE[8]={0xE1,0x14,0x77,0xE1,0xF0,0x14,0xF0,0x77}; // BREAK キーのコード列 // 内部コードから X1 のキーコード (ASCII) への変換テーブル // Xmillennium v0.26 T-tune STEP 1.43 の Input.cpp からコピーしました // BASE BYTE CHR_TBL0[]={ /* -- , ESC, 1, 2, 3, 4, 5, 6, 0x00 */ 0x00,0x1b, '1', '2', '3', '4', '5', '6', /* 7, 8, 9, 0, −, ^, BS, TAB, 0x08 */ '7', '8', '9', '0', '-', '^',0x08,0x09, /* Q, W, E, R, T, Y, U, I, 0x10 */ 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', /* O, P, @, [, Ent,Ctrl, A, S, 0x18 */ 'o', 'p', '@', '[',0x0d,0x00, 'a', 's', /* D, F, G, H, J, K, L, ;, 0x20 */ 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', /* :, 全,SftL, ], Z, X, C, V, 0x28 */ ':',0x00,0x00, ']', 'z', 'x', 'c', 'v', /* B, N, M, ,, ., /,SftR, [*], 0x30 */ 'b', 'n', 'm', ',', '.', '/',0x00,0x2a, /* Alt, SPC, Cap, f.1, f.2, f.3, f.4, f.5, 0x38 */ 0x00, ' ',0x00, 'q', 'r', 's', 't', 'u', /* f.6, f.7, f.8, f.9,f.10,Paus,ScrL, [7], 0x40 */ 0xec,0xeb,0xe2,0xe1,0x00,0x13,0x00, '7', /* [8], [9], [-], [4], [5], [6], [+], [1], 0x48 */ '8', '9', '-', '4', '5', '6', '+', '1', /* [2], [3], [0], [.], ???, ???, ???,f.11, 0x50 */ '2', '3', '0', '.',0x00,0x00,0x00,0x00, /*f.12, _ , \ ,RLUP,RLDN,<=>,XFER, END, 0x58 */ 0x00,0x00,'\\',0x0e,0x0f, '=',0xfe,0x11, }; // SHIFT BYTE CHR_TBL1[]={ /* -- , ESC, 1, 2, 3, 4, 5, 6, 0x00 */ 0x00,0x1b, '!',0x22, '#', '$',0x25, '&', /* 7, 8, 9, 0, −, ^, BS, TAB, 0x08 */ 0x27, '(', ')', '0', '=',0x60,0x12,0x09, /* Q, W, E, R, T, Y, U, I, 0x10 */ 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', /* O, P, @, [, Ent,Ctrl, A, S, 0x18 */ 'O', 'P',0x7e, '{',0x0d,0x00, 'A', 'S', /* D, F, G, H, J, K, L, ;, 0x20 */ 'D', 'F', 'G', 'H', 'J', 'K', 'L', '+', /* :, 全,SftL, ], Z, X, C, V, 0x28 */ 0x2a,0x00,0x00, '}', 'Z', 'X', 'C', 'V', /* B, N, M, ,, ., /,SftR, [*], 0x30 */ 'B', 'N', 'M', '<', '>',0x3f,0x00,0x2a, /* Alt, SPC, Cap, f.1, f.2, f.3, f.4, f.5, 0x38 */ 0x00, ' ',0x00, 'v', 'w', 'x', 'y', 'z', /* f.6, f.7, f.8, f.9,f.10,Paus, ???, [7], 0x40 */ 0x00,0x00,0x00,0x00,0x00,0x03,0x00, '7', /* [8], [9], [-], [4], [5], [6], [+], [1], 0x48 */ '8', '9', '-', '4', '5', '6', '+', '1', /* [2], [3], [0], [.], ???, ???, ???,f.11, 0x50 */ '2', '3', '0', '.',0x00,0x00,0x00,0x00, /*f.12, _ , \ ,RLUP,RLDN,<=>,XFER, END, 0x58 */ 0x00, '_', '|',0x0e,0x0f, '=',0xfe,0x11, }; // GRPH (Alt) BYTE CHR_TBL2[]={ /* -- , ESC, 1, 2, 3, 4, 5, 6, 0x00 */ 0x00,0x00,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6, /* 7, 8, 9, 0, −, ^, BS, TAB, 0x08 */ 0xf7,0xf8,0xf9,0xfa,0x8c,0x8b,0x00,0x00, /* Q, W, E, R, T, Y, U, I, 0x10 */ 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7, /* O, P, @, [, Ent,Ctrl, A, S, 0x18 */ 0xf0,0x8d,0x8a,0xfc,0x00,0x00,0x7f,0xe9, /* D, F, G, H, J, K, L, ;, 0x20 */ 0xea,0xeb,0xec,0xed,0xee,0xef,0x8e,0x89, /* :, 全,SftL, ], Z, X, C, V, 0x28 */ 0xfd,0x00,0x00,0xe8,0x80,0x81,0x82,0x83, /* B, N, M, ,, ., /,SftR, [*], 0x30 */ 0x84,0x85,0x86,0x87,0x88,0xfe,0x00,0x9b, /* Alt, SPC, Cap, f.1, f.2, f.3, f.4, f.5, 0x38 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* f.6, f.7, f.8, f.9,f.10,Paus, ???, [7], 0x40 */ 0x00,0x00,0x00,0x00,0x00,0x13,0x00,0x9a, /* [8], [9], [-], [4], [5], [6], [+], [1], 0x48 */ 0x93,0x97,0x9c,0x95,0x96,0x94,0x9d,0x99, /* [2], [3], [0], [.], ???, ???, ???,f.11, 0x50 */ 0x92,0x98,0x8f,0x91,0x00,0x00,0x00,0x00, /*f.12, _ , \ ,RLUP,RLDN,<=>,XFER, END, 0x58 */ 0x00,0xff,0xfb,0x0e,0x0f,0x90,0xfe,0x11, }; // CTRL BYTE CHR_TBL3[]={ /* -- , ESC, 1, 2, 3, 4, 5, 6, 0x00 */ 0x00,0x1b, '1', '2', '3', '4', '5', '6', /* 7, 8, 9, 0, −, ^, BS, TAB, 0x08 */ '7', '8', '9', '0',0x00,0x1e,0x08,0x09, /* Q, W, E, R, T, Y, U, I, 0x10 */ 0x11,0x17,0x05,0x12,0x14,0x19,0x15,0x09, /* O, P, @, [, Ent,Ctrl, A, S, 0x18 */ 0x0f,0x10, '@',0x1b,0x0d,0x00,0x01,0x13, /* D, F, G, H, J, K, L, ;, 0x20 */ 0x04,0x06,0x07,0x08,0x0a,0x0b,0x0c, ';', /* :, 全,SftL, ], Z, X, C, V, 0x28 */ ':',0x00,0x1c,0x1d,0x1a,0x18,0x03,0x16, /* B, N, M, ,, ., /,SftR, [*], 0x30 */ 0x02,0x0e,0x0d,0x00,0x00,0x00,0x00,0x2a, /* Alt, SPC, Cap, f.1, f.2, f.3, f.4, f.5, 0x38 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* f.6, f.7, f.8, f.9,f.10,Paus, ???, [7], 0x40 */ 0xec,0xeb,0xe2,0xe1,0x00,0x03,0x00, '7', /* [8], [9], [-], [4], [5], [6], [+], [1], 0x48 */ '8', '9', '-', '4', '5', '6', '+', '1', /* [2], [3], [0], [.], ???, ???, ???,f.11, 0x50 */ '2', '3', '0', '.',0x00,0x00,0x00,0x00, /*f.12, _ , \ ,RLUP,RLDN,<=>,XFER, END, 0x58 */ 0x00,0x00,0x1c,0x0e,0x0f, '=',0xfe,0x11, }; // カナ BYTE CHR_TBL4[]={ /* -- , ESC, 1, 2, 3, 4, 5, 6, 0x00 */ 0x00,0x1b, 'ヌ', 'フ', 'ア', 'ウ', 'エ', 'オ', /* 7, 8, 9, 0, −, ^, BS, TAB, 0x08 */ 'ヤ', 'ユ', 'ヨ', 'ワ', 'ホ', 'ヘ',0x08,0x09, /* Q, W, E, R, T, Y, U, I, 0x10 */ 'タ', 'テ', 'イ', 'ス', 'カ', 'ン', 'ナ', 'ニ', /* O, P, @, [, Ent,Ctrl, A, S, 0x18 */ 'ラ', 'セ', '゙', '゚',0x0d,0x00, 'チ', 'ト', /* D, F, G, H, J, K, L, ;, 0x20 */ 'シ', 'ハ', 'キ', 'ク', 'マ', 'ノ', 'リ', 'レ', /* :, 全,SftL, ], Z, X, C, V, 0x28 */ 'ケ',0x00,0x00, 'ム', 'ツ', 'サ', 'ソ', 'ヒ', /* B, N, M, ,, ., /,SftR, [*], 0x30 */ 'コ', 'ミ', 'モ', 'ネ', 'ル', 'メ',0x00,0x2a, /* Alt, SPC, Cap, f.1, f.2, f.3, f.4, f.5, 0x38 */ 0x00,0x20,0x00, 'q', 'r', 's', 't', 'u', /* f.6, f.7, f.8, f.9,f.10,Paus, ???, [7], 0x40 */ 0xec,0xeb,0xe2,0xe1,0x00,0x13,0x00, '7', /* [8], [9], [-], [4], [5], [6], [+], [1], 0x48 */ '8', '9', '-', '4', '5', '6', '+', '1', /* [2], [3], [0], [.], ???, ???, ???,f.11, 0x50 */ '2', '3', '0', '.',0x00,0x00,0x00,0x00, /*f.12, _ , \ ,RLUP,RLDN,<=>,XFER, END, 0x58 */ 0x00, 'ロ', 'ー',0x0e,0x0f, '=',0xfe,0x11, }; // カナ+シフト BYTE CHR_TBL5[]={ /* -- , ESC, 1, 2, 3, 4, 5, 6, 0x00 */ 0x00,0x1b, 'ヌ', 'フ', 'ァ', 'ゥ', 'ェ', 'ォ', /* 7, 8, 9, 0, −, ^, BS, TAB, 0x08 */ 'ャ', 'ュ', 'ョ', 'ヲ', 'ホ', 'ヘ',0x12,0x09, /* Q, W, E, R, T, Y, U, I, 0x10 */ 'タ', 'テ', 'ィ', 'ス', 'カ', 'ン', 'ナ', 'ニ', /* O, P, @, [, Ent,Ctrl, A, S, 0x18 */ 'ラ', 'セ', '゙', '「',0x0d,0x00, 'チ', 'ト', /* D, F, G, H, J, K, L, ;, 0x20 */ 'シ', 'ハ', 'キ', 'ク', 'マ', 'ノ', 'リ', 'レ', /* :, 全,SftL, ], Z, X, C, V, 0x28 */ 'ケ',0x00,0x00, '」', 'ッ', 'サ', 'ソ', 'ヒ', /* B, N, M, ,, ., /,SftR, [*], 0x30 */ 'コ', 'ミ', 'モ', '、', '。', '・',0x00,0x2a, /* Alt, SPC, Cap, f.1, f.2, f.3, f.4, f.5, 0x38 */ 0x00, ' ',0x00, 'v', 'w', 'x', 'y', 'z', /* f.6, f.7, f.8, f.9,f.10,Paus, ???, [7], 0x40 */ 0x00,0x00,0x00,0x00,0x00,0x03,0x00, '7', /* [8], [9], [-], [4], [5], [6], [+], [1], 0x48 */ '8', '9', '-', '4', '5', '6', '+', '1', /* [2], [3], [0], [.], ???, ???, ???,f.11, 0x50 */ '2', '3', '0', '.',0x00,0x00,0x00,0x00, /*f.12, _ , \ ,RLUP,RLDN,<=>,XFER, END, 0x58 */ 0x00, 'ロ', 'ー',0x0e,0x0f, '=',0xfe,0x11, }; #pragma section rom rom // 定数セクションの配置を通常romに戻す