287 lines
13 KiB
C
287 lines
13 KiB
C
/*
|
||
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に戻す
|