Keyboard.java
     1: //========================================================================================
     2: //  Keyboard.java
     3: //    en:Keyboard
     4: //    ja:キーボード
     5: //  Copyright (C) 2003-2024 Makoto Kamada
     6: //
     7: //  This file is part of the XEiJ (X68000 Emulator in Java).
     8: //  You can use, modify and redistribute the XEiJ if the conditions are met.
     9: //  Read the XEiJ License for more details.
    10: //  https://stdkmd.net/xeij/
    11: //========================================================================================
    12: 
    13: //----------------------------------------------------------------------------------------
    14: //! SHIFTとCTRLは左ボタンで押されただけでロックするようになっているが、
    15: //  これをプレフィックスにして次に他のキーが離された後にSHIFTとCTRLも自動的に離されるモードが欲しい
    16: //  右ボタンで押されたときのロックは従来通り、ロックしたキーをクリックするまで押されっぱなしにする
    17: //----------------------------------------------------------------------------------------
    18: 
    19: package xeij;
    20: 
    21: import java.awt.*;
    22: import java.awt.event.*;
    23: import java.awt.image.*;
    24: import java.awt.im.*;  //InputContext
    25: import java.io.*;
    26: import java.util.*;
    27: import java.util.concurrent.*;  //ArrayBlockingQueue
    28: import javax.swing.*;
    29: 
    30: public class Keyboard {
    31: 
    32:   //デバッグ
    33:   public static final boolean KBD_DEBUG_LED = false;  //LEDキーが押されたらLEDを反転する
    34: 
    35:   //種類
    36:   public static final int KBD_STANDARD_TYPE =  0;  //Standard Keyboard
    37:   public static final int KBD_COMPACT_TYPE  =  1;  //Compact Keyboard
    38:   public static final int KBD_TYPES         =  2;  //キーボードの種類の数。Standard KeyboardとCompact Keyboardの2種類
    39: 
    40:   //サイズ
    41:   //  6+6*94+6=576,2+4*25+2=104  Standard Keyboard
    42:   //  6+6*76+6=468,2+4*25+2=104  Compact Keyboard
    43:   public static final int KBD_COL_WIDTH      =  6;  //列の幅(px)。可変キーの幅の1/4
    44:   public static final int KBD_ROW_HEIGHT     =  4;  //行の高さ(px)。可変キーの高さの1/4
    45:   public static final int KBD_LED_WIDTH      = 11;  //LEDの幅
    46:   public static final int KBD_LED_HEIGHT     =  4;  //LEDのキートップ側の高さ
    47:   public static final int KBD_PADDING_TOP    =  2;  //パディング(px)
    48:   public static final int KBD_PADDING_RIGHT  =  6;
    49:   public static final int KBD_PADDING_BOTTOM =  2;
    50:   public static final int KBD_PADDING_LEFT   =  6;
    51:   public static final int KBD_TOUCHABLE_AREA =  1;  //ポイントできる範囲。0=1段目から,1=2段目から,2=3段目から,3=キートップのみ
    52:   public static final int[] KBD_TYPE_COLS    = { 94, 76 };  //種類→キーボードの幅(列数)
    53:   public static final int[] KBD_TYPE_ROWS    = { 25, 25 };  //種類→キーボードの高さ(行数)
    54:   public static final int KBD_KEY_WIDTH      = KBD_COL_WIDTH * 4 - 1;  //可変キーとLEDキーの幅
    55:   public static final int KBD_KEY_HEIGHT     = KBD_ROW_HEIGHT * 4 - 1;  //可変キーとLEDキーの高さ
    56: 
    57:   //スタイル
    58:   public static final int KBD_NONE_STYLE     = 0;  //キーなし
    59:   public static final int KBD_NORMAL_STYLE   = 1;  //ノーマル
    60:   public static final int KBD_FUNCTION_STYLE = 2;  //キーの上端を1/2行削る。63~6C:F1~F10
    61:   public static final int KBD_NARROWER_STYLE = 3;  //キートップの左右を1/2列ずつ削る。55:XF1,56:XF2,57:XF3(Compact),58:XF4(Standard),59:XF5(Standard)
    62:   public static final int KBD_NARROW_STYLE   = 4;  //キートップの左右を1列ずつ削る。10:TAB,57:XF3(Standard),71:CTRL,72:OPT.1,73:OPT.2
    63:   public static final int KBD_SHORTER_STYLE  = 5;  //キートップの上下を1行ずつ削る。4E:ENTER(Standard)
    64:   public static final int KBD_SHORT_STYLE    = 6;  //キートップの上下を2行ずつ削る。3B:LEFT(Standard),3D:RIGHT(Standard)
    65:   public static final int KBD_RETURN_STYLE   = 7;  //レクタングルの左下を1列x4行削る。キートップの左右を1列ずつ削る。1D:RETURN
    66:   public static final int KBD_SHIFT_STYLE    = 8;  //レクタングルの左右を9列ずつ残して中央を削る。70:SHIFT
    67: 
    68:   //文字
    69:   public static final boolean KBD_USE_ROM_FONT = false;  //可変キーの文字をROMフォントにする。ROMフォントが生成済みでなければならない
    70: 
    71:   //色
    72:   public static final int KBD_LETTER_COLOR       = 14;  //文字
    73:   public static final int KBD_TOP_LEFT_COLOR     = 10;  //ボーダー左上
    74:   public static final int KBD_TOP_COLOR          =  8;  //ボーダー上
    75:   public static final int KBD_LEFT_COLOR         =  8;  //ボーダー左
    76:   public static final int KBD_POINTED_COLOR      =  8;  //キートップ(pointed)
    77:   public static final int KBD_TOP_RIGHT_COLOR    =  6;  //ボーダー右上
    78:   public static final int KBD_BOTTOM_LEFT_COLOR  =  6;  //ボーダー左下
    79:   public static final int KBD_KEYTOP_COLOR       =  6;  //キートップ
    80:   public static final int KBD_RIGHT_COLOR        =  4;  //ボーダー右
    81:   public static final int KBD_BOTTOM_COLOR       =  4;  //ボーダー下
    82:   public static final int KBD_BOTTOM_RIGHT_COLOR =  2;  //ボーダー右下
    83:   public static final int KBD_SHADOW_COLOR       =  2;  //文字の影
    84:   public static final int KBD_BACKGROUND_COLOR   =  0;  //背景
    85:   public static final int KBD_HOLE_COLOR         =  0;  //押し下げられたキーの周囲の隙間
    86:   //
    87:   public static int kbdLetterRGB;
    88:   public static int kbdTopLeftRGB;
    89:   public static int kbdTopRGB;
    90:   public static int kbdLeftRGB;
    91:   public static int kbdPointedRGB;
    92:   public static int kbdTopRightRGB;
    93:   public static int kbdBottomLeftRGB;
    94:   public static int kbdKeytopRGB;
    95:   public static int kbdRightRGB;
    96:   public static int kbdBottomRGB;
    97:   public static int kbdBottomRightRGB;
    98:   public static int kbdShadowRGB;
    99:   public static int kbdBackgroundRGB;
   100:   public static int kbdHoleRGB;
   101:   //
   102:   public static final int KBD_RED_OFF_KEYTOP_COLOR    = Color.HSBtoRGB (0.99F, 0.50F, 0.40F);  //赤色LED、消灯、キートップ側
   103:   public static final int KBD_RED_OFF_BORDER_COLOR    = Color.HSBtoRGB (0.99F, 0.50F, 0.20F);  //赤色LED、消灯、ボーダー側
   104:   public static final int KBD_RED_ON_KEYTOP_COLOR_0   = Color.HSBtoRGB (0.99F, 1.00F, 1.00F - 0.150F * 0);  //赤色LED、明るい、キートップ側
   105:   public static final int KBD_RED_ON_BORDER_COLOR_0   = Color.HSBtoRGB (0.99F, 1.00F, 0.50F - 0.075F * 0);  //赤色LED、明るい、ボーダー側
   106:   public static final int KBD_RED_ON_KEYTOP_COLOR_1   = Color.HSBtoRGB (0.99F, 1.00F, 1.00F - 0.150F * 1);  //赤色LED、やや明るい、キートップ側
   107:   public static final int KBD_RED_ON_BORDER_COLOR_1   = Color.HSBtoRGB (0.99F, 1.00F, 0.50F - 0.075F * 1);  //赤色LED、やや明るい、ボーダー側
   108:   public static final int KBD_RED_ON_KEYTOP_COLOR_2   = Color.HSBtoRGB (0.99F, 1.00F, 1.00F - 0.150F * 2);  //赤色LED、やや暗い、キートップ側
   109:   public static final int KBD_RED_ON_BORDER_COLOR_2   = Color.HSBtoRGB (0.99F, 1.00F, 0.50F - 0.075F * 2);  //赤色LED、やや暗い、ボーダー側
   110:   public static final int KBD_RED_ON_KEYTOP_COLOR_3   = Color.HSBtoRGB (0.99F, 1.00F, 1.00F - 0.150F * 3);  //赤色LED、暗い、キートップ側
   111:   public static final int KBD_RED_ON_BORDER_COLOR_3   = Color.HSBtoRGB (0.99F, 1.00F, 0.50F - 0.075F * 3);  //赤色LED、暗い、ボーダー側
   112:   public static final int KBD_GREEN_OFF_KEYTOP_COLOR  = Color.HSBtoRGB (0.24F, 0.50F, 0.40F);  //緑色LED、消灯、キートップ側
   113:   public static final int KBD_GREEN_OFF_BORDER_COLOR  = Color.HSBtoRGB (0.24F, 0.50F, 0.20F);  //緑色LED、消灯、ボーダー側
   114:   public static final int KBD_GREEN_ON_KEYTOP_COLOR_0 = Color.HSBtoRGB (0.24F, 1.00F, 1.00F - 0.150F * 0);  //緑色LED、明るい、キートップ側
   115:   public static final int KBD_GREEN_ON_BORDER_COLOR_0 = Color.HSBtoRGB (0.24F, 1.00F, 0.50F - 0.075F * 0);  //緑色LED、明るい、ボーダー側
   116:   public static final int KBD_GREEN_ON_KEYTOP_COLOR_1 = Color.HSBtoRGB (0.24F, 1.00F, 1.00F - 0.150F * 1);  //緑色LED、やや明るい、キートップ側
   117:   public static final int KBD_GREEN_ON_BORDER_COLOR_1 = Color.HSBtoRGB (0.24F, 1.00F, 0.50F - 0.075F * 1);  //緑色LED、やや明るい、ボーダー側
   118:   public static final int KBD_GREEN_ON_KEYTOP_COLOR_2 = Color.HSBtoRGB (0.24F, 1.00F, 1.00F - 0.150F * 2);  //緑色LED、やや暗い、キートップ側
   119:   public static final int KBD_GREEN_ON_BORDER_COLOR_2 = Color.HSBtoRGB (0.24F, 1.00F, 0.50F - 0.075F * 2);  //緑色LED、やや暗い、ボーダー側
   120:   public static final int KBD_GREEN_ON_KEYTOP_COLOR_3 = Color.HSBtoRGB (0.24F, 1.00F, 1.00F - 0.150F * 3);  //緑色LED、暗い、キートップ側
   121:   public static final int KBD_GREEN_ON_BORDER_COLOR_3 = Color.HSBtoRGB (0.24F, 1.00F, 0.50F - 0.075F * 3);  //緑色LED、暗い、ボーダー側
   122: 
   123:   //状態
   124:   //  stat = KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK | KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK
   125:   public static final int KBD_POINTED_BIT     =          0;  //bit0 1=ポイントされている。ポイントされているキーは1つしか存在しない
   126:   public static final int KBD_POINTED_MASK    = 0b00000001;
   127:   public static final int KBD_PRESSED_BIT     =         1;  //bit1 1=押されている。ロックされているか、キーで押されているか、マウスで押されている
   128:   public static final int KBD_PRESSED_MASK    = 0b00000010;
   129:   public static final int KBD_LIGHTED_BIT     =        2;  //bit2 (LEDキーのとき)1=LEDが点灯している
   130:   public static final int KBD_LIGHTED_MASK    = 0b00000100;
   131:   public static final int KBD_BRIGHTNESS_BIT  =       3;  //bit4-3 (LEDキーかつLEDが点灯しているとき)0=明るい,1=やや明るい,2=やや暗い,3=暗い
   132:   public static final int KBD_BRIGHTNESS_MASK = 0b00011000;
   133:   //  △ここまで描画に使う。ビット位置に依存していることに注意
   134:   //  ▽ここから描画に使わない
   135:   public static final int KBD_MOUSEDOWN_BIT   =     5;  //bit3 1=マウスで押されている
   136:   public static final int KBD_MOUSEDOWN_MASK  = 0b00100000;
   137:   public static final int KBD_KEYDOWN_BIT     =    6;  //bit4 1=キーで押されている
   138:   public static final int KBD_KEYDOWN_MASK    = 0b01000000;
   139:   public static final int KBD_LOCKED_BIT      =   7;  //bit5 1=ロックされている
   140:   public static final int KBD_LOCKED_MASK     = 0b10000000;
   141:   //  LEDキー
   142:   //    lighted||pointedかどうかで可変キーに表示する文字を変更する
   143:   //    KBD_LED_TEST << (stat & (kbdStat[KBD_NUM_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0
   144:   //  その他のモードキー
   145:   //    pressed||pointedかどうかで可変キーに表示する文字を変更する
   146:   //    KBD_MODE_TEST << (stat & (kbdStat[KBD_NUM_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0
   147:   public static final int KBD_LED_TEST  = 0b01011010_01011010_01011010_01011010;
   148:   public static final int KBD_MODE_TEST = 0b01100110_01100110_01100110_01100110;
   149: 
   150:   //数
   151:   public static final int KBD_VAR_KEYS = 48;  //可変キーの数
   152:   public static final int KBD_LED_KEYS =  8;  //LEDキーの数
   153:   public static final int KBD_FIX_KEYS = 57;  //固定キーの数
   154:   public static final int KBD_ALL_KEYS = KBD_VAR_KEYS + KBD_LED_KEYS + KBD_FIX_KEYS;  //キーの数
   155: 
   156:   //番号
   157:   //  可変キー,LEDキー,固定キーの順序でスキャンコード順に割り当てた番号
   158:   //  RETURNキーの上下とSHIFTキーの左右は形を特別扱いにすることで1個の番号で扱う
   159:   public static final int KBD_KANA_INDEX   =  48;  //かなキーの番号
   160:   public static final int KBD_ROMA_INDEX   =  49;  //ローマ字キーの番号
   161:   public static final int KBD_CODE_INDEX   =  50;  //コード入力キーの番号
   162:   public static final int KBD_CAPS_INDEX   =  51;  //CAPSキーの番号
   163:   public static final int KBD_HIRA_INDEX   =  53;  //ひらがなキーの番号
   164:   public static final int KBD_ZEN_INDEX    =  54;  //全角キーの番号
   165:   public static final int KBD_NUM_INDEX    =  55;  //NUMキーの番号
   166:   public static final int KBD_RETURN_INDEX =  59;  //RETURNキーの番号
   167:   public static final int KBD_SHIFT_INDEX  = 109;  //SHIFTキーの番号
   168:   public static final int KBD_CTRL_INDEX   = 110;  //CTRLキーの番号
   169:   public static final int KBD_OPT1_INDEX   = 111;  //OPT.1キーの番号
   170: 
   171:   //番号→スキャンコード(NUM OFF)
   172: /*
   173:   public static final byte[] KBD_NORMAL_CODE = {
   174:     //              |1| | | | | | | | | | | | |NUM
   175:     //              | |1| | | | | | | | | | | |CTRL
   176:     //              | | |1| | | | | | | | | | |コード入力
   177:     //              | | | |0|0|0|0|0|0| | | | |OPT.1
   178:     //              | | | |1|1|1|1| | | | | | |かな。ひらがな+全角→ひらがな
   179:     //              | | | | | | | |1|1| | | | |ローマ字
   180:     //              | | | |0|0|1|1| | | | | | |五十音
   181:     //              | | | | | | | | | |0|0|1|1|CAPS
   182:     //              | | | |0|1|0|1|0|1|0|1|0|1|SHIFT
   183:     0x02,  //  0  0 | | |1|ヌ|ヌ|ア|ァ|1|!|1|!|1|!|
   184:     0x03,  //  1  1 | | |2|フ|フ|イ|ィ|2|"|2|"|2|"|
   185:     0x04,  //  2  2 | | |3|ア|ァ|ウ|ゥ|3|#|3|#|3|#|
   186:     0x05,  //  3  3 | | |4|ウ|ゥ|エ|ェ|4|$|4|$|4|$|
   187:     0x06,  //  4  4 | | |5|エ|ェ|オ|ォ|5|%|5|%|5|%|
   188:     0x07,  //  5  5 | | |6|オ|ォ|ナ|ナ|6|&|6|&|6|&|
   189:     0x08,  //  6  6 |7| |7|ヤ|ャ|ニ|ニ|7|'|7|'|7|'|
   190:     0x09,  //  7  7 |8| |8|ユ|ュ|ヌ|ヌ|8|(|8|(|8|(|
   191:     0x0a,  //  8  8 |9| |9|ヨ|ョ|ネ|ネ|9|)|9|)|9|)|
   192:     0x0b,  //  9  9 |/| |0|ワ|ヲ|ノ|ヲ|0| |0| |0| |
   193:     0x0c,  // 10 10 |*| | |ホ|ホ|ラ|ラ|ー|=|-|=|-|=|
   194:     0x0d,  // 11 11 | |^| |ヘ|ヘ|リ|リ|^|~|^|~|^|~|
   195:     0x0e,  // 12 12 | |\| |ー|ー|ル|ル|\|||\|||\|||
   196:     0x11,  // 13 13 | |Q| |タ|タ|カ|カ|Q|Q|q|Q|Q|q|
   197:     0x12,  // 14 14 | |W| |テ|テ|キ|キ|W|W|w|W|W|w|
   198:     0x13,  // 15 15 | |E|e|イ|ィ|ク|ク|E|e|e|E|E|e|
   199:     0x14,  // 16 16 | |R| |ス|ス|ケ|ケ|R|R|r|R|R|r|
   200:     0x15,  // 17 17 | |T| |カ|カ|コ|コ|T|T|t|T|T|t|
   201:     0x16,  // 18 18 | |Y| |ン|ン|ハ|ハ|Y|Y|y|Y|Y|y|
   202:     0x17,  // 19 19 |4|U| |ナ|ナ|ヒ|ヒ|U|u|u|U|U|u|
   203:     0x18,  // 20 20 |5|I| |ニ|ニ|フ|フ|I|i|i|I|I|i|
   204:     0x19,  // 21 21 |6|O| |ラ|ラ|ヘ|ヘ|O|o|o|O|O|o|
   205:     0x1a,  // 22 22 |-|P| |セ|セ|ホ|ホ|P|P|p|P|P|p|
   206:     0x1b,  // 23 23 | | | |゙|゙|レ|レ|@|`|@|`|@|`|
   207:     0x1c,  // 24 24 | |[| |゚|「|ロ|「|「|{|[|{|[|{|
   208:     0x1e,  // 25 25 | |A|a|チ|チ|サ| |A|a|a|A|A|a| かな+五十音+SHIFT→0xa0
   209:     0x1f,  // 26 26 | |S| |ト|ト|シ|シ|S|S|s|S|S|s|
   210:     0x20,  // 27 27 | |D|d|シ|シ|ス|ス|D|D|d|D|D|d|
   211:     0x21,  // 28 28 | |F|f|ハ|ハ|セ|セ|F|F|f|F|F|f|
   212:     0x22,  // 29 29 | |G| |キ|キ|ソ|ソ|G|G|g|G|G|g|
   213:     0x23,  // 30 30 | |H| |ク|ク|マ|マ|H|H|h|H|H|h|
   214:     0x24,  // 31 31 |1|J| |マ|マ|ミ|ミ|J|J|j|J|J|j|
   215:     0x25,  // 32 32 |2|K| |ノ|ノ|ム|ム|K|K|k|K|K|k|
   216:     0x26,  // 33 33 |3|L| |リ|リ|メ|メ|L|L|l|L|L|l|
   217:     0x27,  // 34 34 |+| | |レ|レ|モ|モ|;|+|;|+|;|+|
   218:     0x28,  // 35 35 | | | |ケ|ケ|゙|ー|:|*|:|*|:|*|
   219:     0x29,  // 36 36 | |]| |ム|」|゚|」|」|}|]|}|]|}|
   220:     0x2a,  // 37 37 | |Z| |ツ|ッ|タ|タ|Z|z|z|Z|Z|z|
   221:     0x2b,  // 38 38 | |X| |サ|サ|チ|チ|X|X|x|X|X|x|
   222:     0x2c,  // 39 39 | |C|c|ソ|ソ|ツ|ッ|C|C|c|C|C|c|
   223:     0x2d,  // 40 40 | |V| |ヒ|ヒ|テ|テ|V|V|v|V|V|v|
   224:     0x2e,  // 41 41 | |B|b|コ|コ|ト|ト|B|B|b|B|B|b|
   225:     0x2f,  // 42 42 | |N| |ミ|ミ|ヤ|ャ|N|N|n|N|N|n|
   226:     0x30,  // 43 43 |0|M| |モ|モ|ユ|ュ|M|M|m|M|M|m|
   227:     0x31,  // 44 44 |,| | |ネ|、|ヨ|ョ|、|<|,|<|,|<|
   228:     0x32,  // 45 45 |.| | |ル|。|ワ|、|。|>|.|>|.|>|
   229:     0x33,  // 46 46 |=| | |メ|・|ヲ|。|・|?|/|?|/|?|
   230:     0x34,  // 47 47 |E|_| |ロ| |ン|・| |_| |_| |_| NUM→ENTER、かな+SHIFT→0xa0
   231:     0x5a,  // 48  0 かな
   232:     0x5b,  // 49  1 ローマ字
   233:     0x5c,  // 50  2 コード入力
   234:     0x5d,  // 51  3 CAPS
   235:     0x5e,  // 52  4 INS
   236:     0x5f,  // 53  5 ひらがな
   237:     0x60,  // 54  6 全角
   238:     0x74,  // 55  7 NUM
   239:     0x01,  // 56  0 ESC
   240:     0x0f,  // 57  1 BS
   241:     0x10,  // 58  2 TAB
   242:     0x1d,  // 59  3 RETURN
   243:     0x35,  // 60  4 Space
   244:     0x36,  // 61  5 HOME
   245:     0x37,  // 62  6 DEL
   246:     0x38,  // 63  7 ROLLUP
   247:     0x39,  // 64  8 ROLLDOWN
   248:     0x3a,  // 65  9 UNDO
   249:     0x3b,  // 66 10 ←
   250:     0x3c,  // 67 11 ↑
   251:     0x3d,  // 68 12 →
   252:     0x3e,  // 69 13 ↓
   253:     0x3f,  // 70 14 CLR
   254:     0x40,  // 71 15 /
   255:     0x41,  // 72 16 *
   256:     0x42,  // 73 17 -
   257:     0x43,  // 74 18 7
   258:     0x44,  // 75 19 8
   259:     0x45,  // 76 20 9
   260:     0x46,  // 77 21 +
   261:     0x47,  // 78 22 4
   262:     0x48,  // 79 23 5
   263:     0x49,  // 80 24 6
   264:     0x4a,  // 81 25 =
   265:     0x4b,  // 82 26 1
   266:     0x4c,  // 83 27 2
   267:     0x4d,  // 84 28 3
   268:     0x4e,  // 85 29 ENTER
   269:     0x4f,  // 86 30 0
   270:     0x50,  // 87 31 ,
   271:     0x51,  // 88 32 .
   272:     0x52,  // 89 33 記号入力
   273:     0x53,  // 90 34 登録
   274:     0x54,  // 91 35 HELP
   275:     0x55,  // 92 36 XF1
   276:     0x56,  // 93 37 XF2
   277:     0x57,  // 94 38 XF3
   278:     0x58,  // 95 39 XF4
   279:     0x59,  // 96 40 XF5
   280:     0x61,  // 97 41 BREAK
   281:     0x62,  // 98 42 COPY
   282:     0x63,  // 99 43 F1
   283:     0x64,  //100 44 F2
   284:     0x65,  //101 45 F3
   285:     0x66,  //102 46 F4
   286:     0x67,  //103 47 F5
   287:     0x68,  //104 48 F6
   288:     0x69,  //105 49 F7
   289:     0x6a,  //106 50 F8
   290:     0x6b,  //107 51 F9
   291:     0x6c,  //108 52 F10
   292:     0x70,  //109 53 SHIFT
   293:     0x71,  //110 54 CTRL
   294:     0x72,  //111 55 OPT.1
   295:     0x73,  //112 56 OPT.2
   296:   };
   297: */
   298:   //  perl misc/itob.pl xeij/Keyboard.java KBD_NORMAL_CODE
   299:   public static final byte[] KBD_NORMAL_CODE = "\2\3\4\5\6\7\b\t\n\13\f\r\16\21\22\23\24\25\26\27\30\31\32\33\34\36\37 !\"#$%&\'()*+,-./01234Z[\\]^_`t\1\17\20\03556789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklpqrs".getBytes (XEiJ.ISO_8859_1);
   300: 
   301:   //番号→スキャンコード(NUM ON)
   302: /*
   303:   public static final byte[] KBD_NUM_CODE = {
   304:     //              |1| | | | | | | | | | | | |NUM
   305:     //              | |1| | | | | | | | | | | |CTRL
   306:     //              | | |1| | | | | | | | | | |コード入力
   307:     //              | | | |0|0|0|0|0|0| | | | |OPT.1
   308:     //              | | | |1|1|1|1| | | | | | |かな。ひらがな+全角→ひらがな
   309:     //              | | | | | | | |1|1| | | | |ローマ字
   310:     //              | | | |0|0|1|1| | | | | | |五十音
   311:     //              | | | | | | | | | |0|0|1|1|CAPS
   312:     //              | | | |0|1|0|1|0|1|0|1|0|1|SHIFT
   313:     0x02,  //  0  0 | | |1|ヌ|ヌ|ア|ァ|1|!|1|!|1|!|
   314:     0x03,  //  1  1 | | |2|フ|フ|イ|ィ|2|"|2|"|2|"|
   315:     0x04,  //  2  2 | | |3|ア|ァ|ウ|ゥ|3|#|3|#|3|#|
   316:     0x05,  //  3  3 | | |4|ウ|ゥ|エ|ェ|4|$|4|$|4|$|
   317:     0x06,  //  4  4 | | |5|エ|ェ|オ|ォ|5|%|5|%|5|%|
   318:     0x07,  //  5  5 | | |6|オ|ォ|ナ|ナ|6|&|6|&|6|&|
   319:     0x43,  //  6  6 |7| |7|ヤ|ャ|ニ|ニ|7|'|7|'|7|'|
   320:     0x44,  //  7  7 |8| |8|ユ|ュ|ヌ|ヌ|8|(|8|(|8|(|
   321:     0x45,  //  8  8 |9| |9|ヨ|ョ|ネ|ネ|9|)|9|)|9|)|
   322:     0x40,  //  9  9 |/| |0|ワ|ヲ|ノ|ヲ|0| |0| |0| |
   323:     0x41,  // 10 10 |*| | |ホ|ホ|ラ|ラ|ー|=|-|=|-|=|
   324:     0x0d,  // 11 11 | |^| |ヘ|ヘ|リ|リ|^|~|^|~|^|~|
   325:     0x0e,  // 12 12 | |\| |ー|ー|ル|ル|\|||\|||\|||
   326:     0x11,  // 13 13 | |Q| |タ|タ|カ|カ|Q|Q|q|Q|Q|q|
   327:     0x12,  // 14 14 | |W| |テ|テ|キ|キ|W|W|w|W|W|w|
   328:     0x13,  // 15 15 | |E|e|イ|ィ|ク|ク|E|e|e|E|E|e|
   329:     0x14,  // 16 16 | |R| |ス|ス|ケ|ケ|R|R|r|R|R|r|
   330:     0x15,  // 17 17 | |T| |カ|カ|コ|コ|T|T|t|T|T|t|
   331:     0x16,  // 18 18 | |Y| |ン|ン|ハ|ハ|Y|Y|y|Y|Y|y|
   332:     0x47,  // 19 19 |4|U| |ナ|ナ|ヒ|ヒ|U|u|u|U|U|u|
   333:     0x48,  // 20 20 |5|I| |ニ|ニ|フ|フ|I|i|i|I|I|i|
   334:     0x49,  // 21 21 |6|O| |ラ|ラ|ヘ|ヘ|O|o|o|O|O|o|
   335:     0x42,  // 22 22 |-|P| |セ|セ|ホ|ホ|P|P|p|P|P|p|
   336:     0x1b,  // 23 23 | | | |゙|゙|レ|レ|@|`|@|`|@|`|
   337:     0x1c,  // 24 24 | |[| |゚|「|ロ|「|「|{|[|{|[|{|
   338:     0x1e,  // 25 25 | |A|a|チ|チ|サ| |A|a|a|A|A|a| かな+五十音+SHIFT→0xa0
   339:     0x1f,  // 26 26 | |S| |ト|ト|シ|シ|S|S|s|S|S|s|
   340:     0x20,  // 27 27 | |D|d|シ|シ|ス|ス|D|D|d|D|D|d|
   341:     0x21,  // 28 28 | |F|f|ハ|ハ|セ|セ|F|F|f|F|F|f|
   342:     0x22,  // 29 29 | |G| |キ|キ|ソ|ソ|G|G|g|G|G|g|
   343:     0x23,  // 30 30 | |H| |ク|ク|マ|マ|H|H|h|H|H|h|
   344:     0x4b,  // 31 31 |1|J| |マ|マ|ミ|ミ|J|J|j|J|J|j|
   345:     0x4c,  // 32 32 |2|K| |ノ|ノ|ム|ム|K|K|k|K|K|k|
   346:     0x4d,  // 33 33 |3|L| |リ|リ|メ|メ|L|L|l|L|L|l|
   347:     0x46,  // 34 34 |+| | |レ|レ|モ|モ|;|+|;|+|;|+|
   348:     0x28,  // 35 35 | | | |ケ|ケ|゙|ー|:|*|:|*|:|*|
   349:     0x29,  // 36 36 | |]| |ム|」|゚|」|」|}|]|}|]|}|
   350:     0x2a,  // 37 37 | |Z| |ツ|ッ|タ|タ|Z|z|z|Z|Z|z|
   351:     0x2b,  // 38 38 | |X| |サ|サ|チ|チ|X|X|x|X|X|x|
   352:     0x2c,  // 39 39 | |C|c|ソ|ソ|ツ|ッ|C|C|c|C|C|c|
   353:     0x2d,  // 40 40 | |V| |ヒ|ヒ|テ|テ|V|V|v|V|V|v|
   354:     0x2e,  // 41 41 | |B|b|コ|コ|ト|ト|B|B|b|B|B|b|
   355:     0x2f,  // 42 42 | |N| |ミ|ミ|ヤ|ャ|N|N|n|N|N|n|
   356:     0x4f,  // 43 43 |0|M| |モ|モ|ユ|ュ|M|M|m|M|M|m|
   357:     0x50,  // 44 44 |,| | |ネ|、|ヨ|ョ|、|<|,|<|,|<|
   358:     0x51,  // 45 45 |.| | |ル|。|ワ|、|。|>|.|>|.|>|
   359:     0x4a,  // 46 46 |=| | |メ|・|ヲ|。|・|?|/|?|/|?|
   360:     0x4e,  // 47 47 |E|_| |ロ| |ン|・| |_| |_| |_| NUM→ENTER、かな+SHIFT→0xa0
   361:     0x5a,  // 48  0 かな
   362:     0x5b,  // 49  1 ローマ字
   363:     0x5c,  // 50  2 コード入力
   364:     0x5d,  // 51  3 CAPS
   365:     0x5e,  // 52  4 INS
   366:     0x5f,  // 53  5 ひらがな
   367:     0x60,  // 54  6 全角
   368:     0x74,  // 55  7 NUM
   369:     0x01,  // 56  0 ESC
   370:     0x0f,  // 57  1 BS
   371:     0x10,  // 58  2 TAB
   372:     0x1d,  // 59  3 RETURN
   373:     0x35,  // 60  4 Space
   374:     0x36,  // 61  5 HOME
   375:     0x37,  // 62  6 DEL
   376:     0x38,  // 63  7 ROLLUP
   377:     0x39,  // 64  8 ROLLDOWN
   378:     0x3a,  // 65  9 UNDO
   379:     0x3b,  // 66 10 ←
   380:     0x3c,  // 67 11 ↑
   381:     0x3d,  // 68 12 →
   382:     0x3e,  // 69 13 ↓
   383:     0x3f,  // 70 14 CLR
   384:     0x40,  // 71 15 /
   385:     0x41,  // 72 16 *
   386:     0x42,  // 73 17 -
   387:     0x43,  // 74 18 7
   388:     0x44,  // 75 19 8
   389:     0x45,  // 76 20 9
   390:     0x46,  // 77 21 +
   391:     0x47,  // 78 22 4
   392:     0x48,  // 79 23 5
   393:     0x49,  // 80 24 6
   394:     0x4a,  // 81 25 =
   395:     0x4b,  // 82 26 1
   396:     0x4c,  // 83 27 2
   397:     0x4d,  // 84 28 3
   398:     0x4e,  // 85 29 ENTER
   399:     0x4f,  // 86 30 0
   400:     0x50,  // 87 31 ,
   401:     0x51,  // 88 32 .
   402:     0x52,  // 89 33 記号入力
   403:     0x53,  // 90 34 登録
   404:     0x54,  // 91 35 HELP
   405:     0x55,  // 92 36 XF1
   406:     0x56,  // 93 37 XF2
   407:     0x57,  // 94 38 XF3
   408:     0x58,  // 95 39 XF4
   409:     0x59,  // 96 40 XF5
   410:     0x61,  // 97 41 BREAK
   411:     0x62,  // 98 42 COPY
   412:     0x63,  // 99 43 F1
   413:     0x64,  //100 44 F2
   414:     0x65,  //101 45 F3
   415:     0x66,  //102 46 F4
   416:     0x67,  //103 47 F5
   417:     0x68,  //104 48 F6
   418:     0x69,  //105 49 F7
   419:     0x6a,  //106 50 F8
   420:     0x6b,  //107 51 F9
   421:     0x6c,  //108 52 F10
   422:     0x70,  //109 53 SHIFT
   423:     0x71,  //110 54 CTRL
   424:     0x72,  //111 55 OPT.1
   425:     0x73,  //112 56 OPT.2
   426:   };
   427: */
   428:   //  perl misc/itob.pl xeij/Keyboard.java KBD_NUM_CODE
   429:   public static final byte[] KBD_NUM_CODE = "\2\3\4\5\6\7CDE@A\r\16\21\22\23\24\25\26GHIB\33\34\36\37 !\"#KLMF()*+,-./OPQJNZ[\\]^_`t\1\17\20\03556789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklpqrs".getBytes (XEiJ.ISO_8859_1);
   430: 
   431:   //種類→固定キーの番号→固定キーのスタイル
   432:   //  Standard KeyboardとCompact KeyboardではXFnキーやOPT.nキーの形が異なるので種類毎にスタイルデータを用意する
   433:   public static final int[][] KBD_TYPE_FIX_STYLE = {
   434:     //Standard Keyboard
   435:     {
   436:       KBD_NORMAL_STYLE  ,  //0x01  0 ESC
   437:       KBD_NARROW_STYLE  ,  //0x0f  1 BS
   438:       KBD_NARROW_STYLE  ,  //0x10  2 TAB
   439:       KBD_RETURN_STYLE  ,  //0x1d  3 RETURN
   440:       KBD_NORMAL_STYLE  ,  //0x35  4 Space
   441:       KBD_NORMAL_STYLE  ,  //0x36  5 HOME
   442:       KBD_NORMAL_STYLE  ,  //0x37  6 DEL
   443:       KBD_NORMAL_STYLE  ,  //0x38  7 ROLLUP
   444:       KBD_NORMAL_STYLE  ,  //0x39  8 ROLLDOWN
   445:       KBD_NORMAL_STYLE  ,  //0x3a  9 UNDO
   446:       KBD_SHORT_STYLE   ,  //0x3b 10 ←
   447:       KBD_NORMAL_STYLE  ,  //0x3c 11 ↑
   448:       KBD_SHORT_STYLE   ,  //0x3d 12 →
   449:       KBD_NORMAL_STYLE  ,  //0x3e 13 ↓
   450:       KBD_NORMAL_STYLE  ,  //0x3f 14 CLR
   451:       KBD_NORMAL_STYLE  ,  //0x40 15 /
   452:       KBD_NORMAL_STYLE  ,  //0x41 16 *
   453:       KBD_NORMAL_STYLE  ,  //0x42 17 -
   454:       KBD_NORMAL_STYLE  ,  //0x43 18 7
   455:       KBD_NORMAL_STYLE  ,  //0x44 19 8
   456:       KBD_NORMAL_STYLE  ,  //0x45 20 9
   457:       KBD_NORMAL_STYLE  ,  //0x46 21 +
   458:       KBD_NORMAL_STYLE  ,  //0x47 22 4
   459:       KBD_NORMAL_STYLE  ,  //0x48 23 5
   460:       KBD_NORMAL_STYLE  ,  //0x49 24 6
   461:       KBD_NORMAL_STYLE  ,  //0x4a 25 =
   462:       KBD_NORMAL_STYLE  ,  //0x4b 26 1
   463:       KBD_NORMAL_STYLE  ,  //0x4c 27 2
   464:       KBD_NORMAL_STYLE  ,  //0x4d 28 3
   465:       KBD_SHORTER_STYLE ,  //0x4e 29 ENTER
   466:       KBD_NORMAL_STYLE  ,  //0x4f 30 0
   467:       KBD_NORMAL_STYLE  ,  //0x50 31 ,
   468:       KBD_NORMAL_STYLE  ,  //0x51 32 .
   469:       KBD_NORMAL_STYLE  ,  //0x52 33 記号入力
   470:       KBD_NORMAL_STYLE  ,  //0x53 34 登録
   471:       KBD_NORMAL_STYLE  ,  //0x54 35 HELP
   472:       KBD_NARROWER_STYLE,  //0x55 36 XF1
   473:       KBD_NARROWER_STYLE,  //0x56 37 XF2
   474:       KBD_NARROW_STYLE  ,  //0x57 38 XF3
   475:       KBD_NARROWER_STYLE,  //0x58 39 XF4
   476:       KBD_NARROWER_STYLE,  //0x59 40 XF5
   477:       KBD_NORMAL_STYLE  ,  //0x61 41 BREAK
   478:       KBD_NORMAL_STYLE  ,  //0x62 42 COPY
   479:       KBD_FUNCTION_STYLE,  //0x63 43 F1
   480:       KBD_FUNCTION_STYLE,  //0x64 44 F2
   481:       KBD_FUNCTION_STYLE,  //0x65 45 F3
   482:       KBD_FUNCTION_STYLE,  //0x66 46 F4
   483:       KBD_FUNCTION_STYLE,  //0x67 47 F5
   484:       KBD_FUNCTION_STYLE,  //0x68 48 F6
   485:       KBD_FUNCTION_STYLE,  //0x69 49 F7
   486:       KBD_FUNCTION_STYLE,  //0x6a 50 F8
   487:       KBD_FUNCTION_STYLE,  //0x6b 51 F9
   488:       KBD_FUNCTION_STYLE,  //0x6c 52 F10
   489:       KBD_SHIFT_STYLE   ,  //0x70 53 SHIFT
   490:       KBD_NARROW_STYLE  ,  //0x71 54 CTRL
   491:       KBD_NARROW_STYLE  ,  //0x72 55 OPT.1
   492:       KBD_NARROW_STYLE  ,  //0x73 56 OPT.2
   493:     },
   494:     //Compact Keyboard
   495:     {
   496:       KBD_NORMAL_STYLE  ,  //0x01  0 ESC
   497:       KBD_NARROW_STYLE  ,  //0x0f  1 BS
   498:       KBD_NARROW_STYLE  ,  //0x10  2 TAB
   499:       KBD_RETURN_STYLE  ,  //0x1d  3 RETURN
   500:       KBD_NORMAL_STYLE  ,  //0x35  4 Space
   501:       KBD_NORMAL_STYLE  ,  //0x36  5 HOME
   502:       KBD_NORMAL_STYLE  ,  //0x37  6 DEL
   503:       KBD_NORMAL_STYLE  ,  //0x38  7 ROLLUP
   504:       KBD_NORMAL_STYLE  ,  //0x39  8 ROLLDOWN
   505:       KBD_NORMAL_STYLE  ,  //0x3a  9 UNDO
   506:       KBD_NORMAL_STYLE  ,  //0x3b 10 ←
   507:       KBD_NORMAL_STYLE  ,  //0x3c 11 ↑
   508:       KBD_NORMAL_STYLE  ,  //0x3d 12 →
   509:       KBD_NORMAL_STYLE  ,  //0x3e 13 ↓
   510:       KBD_NORMAL_STYLE  ,  //0x3f 14 CLR
   511:       KBD_NONE_STYLE    ,  //0x40 15 /
   512:       KBD_NONE_STYLE    ,  //0x41 16 *
   513:       KBD_NONE_STYLE    ,  //0x42 17 -
   514:       KBD_NONE_STYLE    ,  //0x43 18 7
   515:       KBD_NONE_STYLE    ,  //0x44 19 8
   516:       KBD_NONE_STYLE    ,  //0x45 20 9
   517:       KBD_NONE_STYLE    ,  //0x46 21 +
   518:       KBD_NONE_STYLE    ,  //0x47 22 4
   519:       KBD_NONE_STYLE    ,  //0x48 23 5
   520:       KBD_NONE_STYLE    ,  //0x49 24 6
   521:       KBD_NONE_STYLE    ,  //0x4a 25 =
   522:       KBD_NONE_STYLE    ,  //0x4b 26 1
   523:       KBD_NONE_STYLE    ,  //0x4c 27 2
   524:       KBD_NONE_STYLE    ,  //0x4d 28 3
   525:       KBD_NONE_STYLE    ,  //0x4e 29 ENTER
   526:       KBD_NONE_STYLE    ,  //0x4f 30 0
   527:       KBD_NONE_STYLE    ,  //0x50 31 ,
   528:       KBD_NONE_STYLE    ,  //0x51 32 .
   529:       KBD_NORMAL_STYLE  ,  //0x52 33 記号入力
   530:       KBD_NORMAL_STYLE  ,  //0x53 34 登録
   531:       KBD_NORMAL_STYLE  ,  //0x54 35 HELP
   532:       KBD_NARROWER_STYLE,  //0x55 36 XF1
   533:       KBD_NARROWER_STYLE,  //0x56 37 XF2
   534:       KBD_NARROWER_STYLE,  //0x57 38 XF3
   535:       KBD_NORMAL_STYLE  ,  //0x58 39 XF4
   536:       KBD_NORMAL_STYLE  ,  //0x59 40 XF5
   537:       KBD_NORMAL_STYLE  ,  //0x61 41 BREAK
   538:       KBD_NORMAL_STYLE  ,  //0x62 42 COPY
   539:       KBD_FUNCTION_STYLE,  //0x63 43 F1
   540:       KBD_FUNCTION_STYLE,  //0x64 44 F2
   541:       KBD_FUNCTION_STYLE,  //0x65 45 F3
   542:       KBD_FUNCTION_STYLE,  //0x66 46 F4
   543:       KBD_FUNCTION_STYLE,  //0x67 47 F5
   544:       KBD_FUNCTION_STYLE,  //0x68 48 F6
   545:       KBD_FUNCTION_STYLE,  //0x69 49 F7
   546:       KBD_FUNCTION_STYLE,  //0x6a 50 F8
   547:       KBD_FUNCTION_STYLE,  //0x6b 51 F9
   548:       KBD_FUNCTION_STYLE,  //0x6c 52 F10
   549:       KBD_SHIFT_STYLE   ,  //0x70 53 SHIFT
   550:       KBD_NARROW_STYLE  ,  //0x71 54 CTRL
   551:       KBD_NORMAL_STYLE  ,  //0x72 55 OPT.1
   552:       KBD_NORMAL_STYLE  ,  //0x73 56 OPT.2
   553:     },
   554:   };  //KBD_TYPE_FIX_STYLE
   555: 
   556:   //赤色LEDの色
   557:   //  5A:かな,5B:ローマ字,5C:コード入力,5D:CAPS,5E:INS,74:NUM
   558:   public static final int[][] KBD_RED_LED_COLOR = {
   559:     { KBD_RED_OFF_KEYTOP_COLOR, KBD_RED_OFF_BORDER_COLOR },    //000xx 消灯
   560:     { KBD_RED_ON_KEYTOP_COLOR_0, KBD_RED_ON_BORDER_COLOR_0 },  //001xx 明るい
   561:     { KBD_RED_OFF_KEYTOP_COLOR, KBD_RED_OFF_BORDER_COLOR },    //010xx
   562:     { KBD_RED_ON_KEYTOP_COLOR_1, KBD_RED_ON_BORDER_COLOR_1 },  //011xx やや明るい
   563:     { KBD_RED_OFF_KEYTOP_COLOR, KBD_RED_OFF_BORDER_COLOR },    //100xx
   564:     { KBD_RED_ON_KEYTOP_COLOR_2, KBD_RED_ON_BORDER_COLOR_2 },  //101xx やや暗い
   565:     { KBD_RED_OFF_KEYTOP_COLOR, KBD_RED_OFF_BORDER_COLOR },    //110xx
   566:     { KBD_RED_ON_KEYTOP_COLOR_3, KBD_RED_ON_BORDER_COLOR_3 },  //111xx 暗い
   567:   };
   568: 
   569:   //緑色LEDの色
   570:   //  5F:ひらがな,60:全角
   571:   public static final int[][] KBD_GREEN_LED_COLOR = {
   572:     { KBD_GREEN_OFF_KEYTOP_COLOR, KBD_GREEN_OFF_BORDER_COLOR },    //000xx 消灯
   573:     { KBD_GREEN_ON_KEYTOP_COLOR_0, KBD_GREEN_ON_BORDER_COLOR_0 },  //001xx 明るい
   574:     { KBD_GREEN_OFF_KEYTOP_COLOR, KBD_GREEN_OFF_BORDER_COLOR },    //010xx
   575:     { KBD_GREEN_ON_KEYTOP_COLOR_1, KBD_GREEN_ON_BORDER_COLOR_1 },  //011xx やや明るい
   576:     { KBD_GREEN_OFF_KEYTOP_COLOR, KBD_GREEN_OFF_BORDER_COLOR },    //100xx
   577:     { KBD_GREEN_ON_KEYTOP_COLOR_2, KBD_GREEN_ON_BORDER_COLOR_2 },  //101xx やや暗い
   578:     { KBD_GREEN_OFF_KEYTOP_COLOR, KBD_GREEN_OFF_BORDER_COLOR },    //110xx
   579:     { KBD_GREEN_ON_KEYTOP_COLOR_3, KBD_GREEN_ON_BORDER_COLOR_3 },  //111xx 暗い
   580:   };
   581: 
   582:   //LEDキーの番号→LEDの色
   583:   public static final int[][][] KBD_LED_COLOR = {
   584:     KBD_RED_LED_COLOR  ,  //0x5a  0 かな
   585:     KBD_RED_LED_COLOR  ,  //0x5b  1 ローマ字
   586:     KBD_RED_LED_COLOR  ,  //0x5c  2 コード入力
   587:     KBD_RED_LED_COLOR  ,  //0x5d  3 CAPS
   588:     KBD_RED_LED_COLOR  ,  //0x5e  4 INS
   589:     KBD_GREEN_LED_COLOR,  //0x5f  5 ひらがな
   590:     KBD_GREEN_LED_COLOR,  //0x60  6 全角
   591:     KBD_RED_LED_COLOR  ,  //0x74  7 NUM
   592:   };
   593: 
   594:   //Standard Keyboard
   595:   //                       1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9
   596:   //   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
   597:   // 0 +-------+ +-------+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +-------+-------+-------+ . +-------+-------+-------+-------+  0
   598:   // 1 |61     | |62     | . +---------+---------+---------+---------+---------+ +---------+---------+---------+---------+---------+ . |5A     |5B     |5C     | . |5D     |52     |53     |54     |  1
   599:   // 2 | BREAK | |  COPY | . |63       |64       |65       |66       |67       | |68       |69       |6A       |6B       |6C       | . | KANA  | ROMA  | CODE  | . | CAPS  | KIGOU |TOUROKU| HELP  |  2
   600:   // 3 |       | |       | . |   F1    |   F2    |   F3    |   F4    |   F5    | |   F6    |   F7    |   F8    |   F9    |  F10    | . |  rrr  |  rrr  |  rrr  | . |  rrr  |       |       |       |  3
   601:   // 4 +-------+ +-------+ . +---------+---------+---------+---------+---------+ +---------+---------+---------+---------+---------+ . +--rrr--+--rrr--+--rrr--+ . +--rrr--+-------+-------+-------+  4
   602:   // 5 +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-----------+ . +-------+-------+-------+ . +-------+-------+-------+-------+  5
   603:   // 6 |01     |02     |03     |04     |05     |06     |07     |08     |09     |0A     |0B     |0C     |0D     |0E     | !0F     ! | . |36     |5E     |37     | . |3F     |40     |41     |42     |  6
   604:   // 7 |  ESC  |  1!   |  2"   |  3#   |  4$   |  5%   |  6&   |  7'   |  8(   |  9)   |   0   |  -=   |  ^~   |  \|   | !  BS   ! | . | HOME  |  INS  |  DEL  | . |  CLR  |   /   |   *   |   -   |  7
   605:   // 8 |       |       |       |       |       |       |       |       |       |       |       |       |       |       | !       ! | . |       |  rrr  |       | . |       | ~~~~~ | ~~~~~ | ~~~~~ |  8
   606:   // 9 +-------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-----------+ . +-------+--rrr--+-------+ . +-------+-------+-------+-------+  9
   607:   //10 | !10     ! |11     |12     |13     |14     |15     |16     |17     |18     |19     |1A     |1B     |1C     | !1D         ! | . |38     |39     |3A     | . |43     |44     |45     |46     | 10
   608:   //11 | !  TAB  ! |   Q   |   W   |   E   |   R   |   T   |   Y   |   U   |   I   |   O   |   P   |  @`   |  [{   | !           ! | . | R-UP  |R-DOWN | UNDO  | . |   7   |   8   |   9   |   +   | 11
   609:   //12 | !       ! |       |       |       |       |       |       |       |       |       |       |       |       | !           ! | . |       |       |       | . | ~~~~~ | ~~~~~ | ~~~~~ | ~~~~~ | 12
   610:   //13 +-----------+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+ ! RETURN  ! | . +-------+-------+-------+ . +-------+-------+-------+-------+ 13
   611:   //14 | !71       ! |1E     |1F     |20     |21     |22     |23     |24     |25     |26     |27     |28     |29     | !         ! | . |       |3C     |       | . |47     |48     |49     |4A     | 14
   612:   //15 | !  CTRL   ! |   A   |   S   |   D   |   F   |   G   |   H   |   J   |   K   |   L   |  ;+   |  :*   |  ]}   | !         ! | . | - - - |  UP   | - - - | . |   4   |   5   |   6   |   =   | 15
   613:   //16 | !         ! |       |       |       |       |       |       |       |       |       |       |       |       | !         ! | . | 3B    |       |3D     | . | ~~~~~ | ~~~~~ | ~~~~~ | ~~~~~ | 16
   614:   //17 +-------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------------+ . | LEFT  +-------+ RIGHT | . +-------+-------+-------+-------+ 17
   615:   //18 | !70           ! |2A     |2B     |2C     |2D     |2E     |2F     |30     |31     |32     |33     |34     | !70           ! | . |       |3E     |       | . |4B     |4C     |4D     | - - - | 18
   616:   //19 | !    SHIFT    ! |   Z   |   X   |   C   |   V   |   B   |   M   |   N   |  ,<   |  .>   |  /?   |   _   | !    SHIFT    ! | . | - - - | DOWN  | - - - | . |   1   |   2   |   3   |4E     | 19
   617:   //20 | !             ! |       |       |       |       |       |       |       |       |       |       |       | !             ! | . |       |       |       | . | ~~~~~ | ~~~~~ | ~~~~~ |       | 20
   618:   //21 +-------------+---+---+---+-----+-+-------+-------+-------+-------+---+---+-------+-------+-+-----+---+---+---+-------------+ . +-------+---+---+-------+ . +-------+-------+-------+ ENTER | 21
   619:   //22 . . . . . . . |5F     |!55     !|!56     !|35                         | !57     ! |!58     !|!59     !|60     | . . . . . . . . | !72     ! | !73     ! | . |4F     |50     |51     | ~~~~~ | 22
   620:   //23 . . . . . . . | HIRA  |!  XF1  !|!  XF2  !|           SPACE           | !  XF3  ! |!  XF4  !|!  XF5  !|ZENKAKU| . . . . . . . . | ! OPT.1 ! | ! OPT.2 ! | . |   0   |   ,   |   .   |       | 23
   621:   //24 . . . . . . . |  ggg  |!       !|!       !|                           | !       ! |!       !|!       !|  ggg  | . . . . . . . . | !       ! | !       ! | . | ~~~~~ | ~~~~~ | ~~~~~ | - - - | 24
   622:   //25 . . . . . . . +--ggg--+---------+---------+---------------------------+-----------+---------+---------+--ggg--+ . . . . . . . . +-----------+-----------+ . +-------+-------+-------+-------+ 25
   623:   //                       1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9
   624:   //   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
   625: 
   626:   //Compact Keyboard
   627:   //                       1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7
   628:   //   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
   629:   // 0 +-------+ +-------+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +-------+-------+-------+  0
   630:   // 1 |61     | |62     | . +---------+---------+---------+---------+---------+ +---------+---------+---------+---------+---------+ . |52     |53     |54     |  1
   631:   // 2 | BREAK | |  COPY | . |63       |64       |65       |66       |67       | |68       |69       |6A       |6B       |6C       | . | KIGOU |TOUROKU| HELP  |  2
   632:   // 3 |       | |       | . |   F1    |   F2    |   F3    |   F4    |   F5    | |   F6    |   F7    |   F8    |   F9    |  F10    | . |       |       |       |  3
   633:   // 4 +-------+ +-------+ . +---------+---------+---------+---------+---------+ +---------+---------+---------+---------+---------+ . +-------+-------+-------+  4
   634:   // 5 +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-----------+ . |60     |5F     |5C     |  5
   635:   // 6 |01     |02     |03     |04     |05     |06     |07     |08  /  |09  /  |0A  /  |0B  /  |0C  /  |0D     |0E     | !0F     ! | . |ZENKAKU| HIRA  | CODE  |  6
   636:   // 7 |  ESC  |  1!   |  2"   |  3#   |  4$   |  5%   |  6&   | 7'/ 7 | 8(/ 8 | 9)/ 9 | 0 / / | -=/ * |  ^~   |  \|   | !  BS   ! | . |  ggg  |  ggg  |  rrr  |  7
   637:   // 8 |       |       |       |       |       |       |       |  /  43|  /  44|  /  45|  /  40|  /  41|       |       | !       ! | . +--ggg--+--ggg--+--rrr--+  8
   638:   // 9 +-------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-----------+ . +-------+--rrr--+-------+  9
   639:   //10 | !10     ! |11     |12     |13     |14     |15     |16     |17  /  |18  /  |19  /  |1A  /  |1B     |1C     | !1D         ! | . |36     |3F     |37     | 10
   640:   //11 | !  TAB  ! |   Q   |   W   |   E   |   R   |   T   |   Y   | U / 4 | I / 5 | O / 6 | P / - |  @`   |  [{   | !           ! | . | HOME  |  CLR  |  DEL  | 11
   641:   //12 | !       ! |       |       |       |       |       |       |  /  47|  /  48|  /  49|  /  42|       |       | !           ! | . |       |       |       | 12
   642:   //13 +-----------+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+ ! RETURN  ! | . +-------+-------+-------+ 13
   643:   //14 | !71       ! |1E     |1F     |20     |21     |22     |23     |24  /  |25  /  |26  /  |27  /  |28     |29     | !         ! | . |74     |5E     |3A     | 14
   644:   //15 | !  CTRL   ! |   A   |   S   |   D   |   F   |   G   |   H   | J / 1 | K / 2 | L / 3 | ;+/ + |  :*   |  ]}   | !         ! | . |  NUM  |  INS  | UNDO  | 15
   645:   //16 | !         ! |       |       |       |       |       |       |  /  4B|  /  4C|  /  4D|  /  46|       |       | !         ! | . |  rrr  |  rrr  |       | 16
   646:   //17 +-------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------------+ . +--rrr--+--rrr--+-------+ 17
   647:   //18 | !70           ! |2A     |2B     |2C     |2D     |2E     |2F     |30  /  |31  /  |32  /  |33  /  |34  /  | !70           ! | . |38     |3C     |39     | 18
   648:   //19 | !    SHIFT    ! |   Z   |   X   |   C   |   V   |   B   |   M   | N / 0 | ,</ , | .>/ . | /?/ = | _ /ENT| !    SHIFT    ! | . | R-UP  |  UP   |R-DOWN | 19
   649:   //20 | !             ! |       |       |       |       |       |       |  /  4F|  /  50|  /  51|  /  4A|  /  4E| !             ! | . |       |       |       | 20
   650:   //21 +-----+-------+---+---+---+-----+-+-------+-------+-------+-------+---+---+-----+-+-----+-+-----+-+-----+-+-----+-------+---+ . +-------+-------+-------+ 21
   651:   //22 . . . |72     |5D     |!55     !|!56     !|35                         |! 57    !|58     |59     |5B     |5A     |73     | . . . |3B     |3E     |3D     | 22
   652:   //23 . . . | OPT.1 | CAPS  |!  XF1  !|!  XF2  !|           SPACE           |!  XF3  !|  XF4  |  XF5  | ROMA  | KANA  | OPT.2 | . . . | LEFT  | DOWN  | RIGHT | 23
   653:   //24 . . . |       |  rrr  |!       !|!       !|                           |!       !|       |       |  rrr  |  rrr  |       | . . . |       |       |       | 24
   654:   //25 . . . +-------+--rrr--+---------+---------+---------------------------+---------+-------+-------+--rrr--+--rrr--+-------+ . . . +-------+-------+-------+ 25
   655:   //                       1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7
   656:   //   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
   657: 
   658:   //可変キーの番号→ボックス
   659:   //  Standard KeyboardとCompact Keyboardで共通
   660:   //  欠番なし
   661:   public static final int[][] KBD_VAR_BOX = {
   662:     {  4,  5,  4, 4 },  //0x02  0 1
   663:     {  8,  5,  4, 4 },  //0x03  1 2
   664:     { 12,  5,  4, 4 },  //0x04  2 3
   665:     { 16,  5,  4, 4 },  //0x05  3 4
   666:     { 20,  5,  4, 4 },  //0x06  4 5
   667:     { 24,  5,  4, 4 },  //0x07  5 6
   668:     { 28,  5,  4, 4 },  //0x08  6 7
   669:     { 32,  5,  4, 4 },  //0x09  7 8
   670:     { 36,  5,  4, 4 },  //0x0a  8 9
   671:     { 40,  5,  4, 4 },  //0x0b  9 0
   672:     { 44,  5,  4, 4 },  //0x0c 10 -
   673:     { 48,  5,  4, 4 },  //0x0d 11 ^
   674:     { 52,  5,  4, 4 },  //0x0e 12 \
   675:     {  6,  9,  4, 4 },  //0x11 13 q
   676:     { 10,  9,  4, 4 },  //0x12 14 w
   677:     { 14,  9,  4, 4 },  //0x13 15 e
   678:     { 18,  9,  4, 4 },  //0x14 16 r
   679:     { 22,  9,  4, 4 },  //0x15 17 t
   680:     { 26,  9,  4, 4 },  //0x16 18 y
   681:     { 30,  9,  4, 4 },  //0x17 19 u
   682:     { 34,  9,  4, 4 },  //0x18 20 i
   683:     { 38,  9,  4, 4 },  //0x19 21 o
   684:     { 42,  9,  4, 4 },  //0x1a 22 p
   685:     { 46,  9,  4, 4 },  //0x1b 23 @
   686:     { 50,  9,  4, 4 },  //0x1c 24 [
   687:     {  7, 13,  4, 4 },  //0x1e 25 a
   688:     { 11, 13,  4, 4 },  //0x1f 26 s
   689:     { 15, 13,  4, 4 },  //0x20 27 d
   690:     { 19, 13,  4, 4 },  //0x21 28 f
   691:     { 23, 13,  4, 4 },  //0x22 29 g
   692:     { 27, 13,  4, 4 },  //0x23 30 h
   693:     { 31, 13,  4, 4 },  //0x24 31 j
   694:     { 35, 13,  4, 4 },  //0x25 32 k
   695:     { 39, 13,  4, 4 },  //0x26 33 l
   696:     { 43, 13,  4, 4 },  //0x27 34 ;
   697:     { 47, 13,  4, 4 },  //0x28 35 :
   698:     { 51, 13,  4, 4 },  //0x29 36 ]
   699:     {  9, 17,  4, 4 },  //0x2a 37 z
   700:     { 13, 17,  4, 4 },  //0x2b 38 x
   701:     { 17, 17,  4, 4 },  //0x2c 39 c
   702:     { 21, 17,  4, 4 },  //0x2d 40 v
   703:     { 25, 17,  4, 4 },  //0x2e 41 b
   704:     { 29, 17,  4, 4 },  //0x2f 42 n
   705:     { 33, 17,  4, 4 },  //0x30 43 m
   706:     { 37, 17,  4, 4 },  //0x31 44 ,
   707:     { 41, 17,  4, 4 },  //0x32 45 .
   708:     { 45, 17,  4, 4 },  //0x33 46 /
   709:     { 49, 17,  4, 4 },  //0x34 47
   710:   };  //KBD_VAR_BOX
   711: 
   712:   //種類→LEDキーの番号→ボックス
   713:   //  欠番あり
   714:   //    Standard KeyboardのNUMキー
   715:   public static final int[][][] KBD_TYPE_LED_BOX = {
   716:     //Standard Keyboard
   717:     {
   718:       { 64,  0,  4, 4 },  //0x5a  0 かな
   719:       { 68,  0,  4, 4 },  //0x5b  1 ローマ字
   720:       { 72,  0,  4, 4 },  //0x5c  2 コード入力
   721:       { 78,  0,  4, 4 },  //0x5d  3 CAPS
   722:       { 68,  5,  4, 4 },  //0x5e  4 INS
   723:       {  7, 21,  4, 4 },  //0x5f  5 ひらがな
   724:       { 51, 21,  4, 4 },  //0x60  6 全角
   725:       null             ,  //0x74  7 NUM
   726:     },
   727:     //Compact Keyboard
   728:     {
   729:       { 52, 21,  4, 4 },  //0x5a  0 かな
   730:       { 48, 21,  4, 4 },  //0x5b  1 ローマ字
   731:       { 72,  4,  4, 4 },  //0x5c  2 コード入力
   732:       {  7, 21,  4, 4 },  //0x5d  3 CAPS
   733:       { 68, 13,  4, 4 },  //0x5e  4 INS
   734:       { 68,  4,  4, 4 },  //0x5f  5 ひらがな
   735:       { 64,  4,  4, 4 },  //0x60  6 全角
   736:       { 64, 13,  4, 4 },  //0x74  7 NUM
   737:     },
   738:   };  //KBD_TYPE_LED_BOX
   739: 
   740:   //種類→固定キーのインデックス→ボックス
   741:   //  欠番あり
   742:   //    Compact Keyboardのテンキー
   743:   public static final int[][][] KBD_TYPE_FIX_BOX = {
   744:     //Standard Keyboard
   745:     {
   746:       {  0,  5,  4, 4 },  //0x01  0 ESC
   747:       { 56,  5,  6, 4 },  //0x0f  1 BS
   748:       {  0,  9,  6, 4 },  //0x10  2 TAB
   749:       { 54,  9,  8, 8 },  //0x1d  3 RETURN
   750:       { 21, 21, 14, 4 },  //0x35  4 Space
   751:       { 64,  5,  4, 4 },  //0x36  5 HOME
   752:       { 72,  5,  4, 4 },  //0x37  6 DEL
   753:       { 64,  9,  4, 4 },  //0x38  7 ROLLUP
   754:       { 68,  9,  4, 4 },  //0x39  8 ROLLDOWN
   755:       { 72,  9,  4, 4 },  //0x3a  9 UNDO
   756:       { 64, 13,  4, 8 },  //0x3b 10 ←
   757:       { 68, 13,  4, 4 },  //0x3c 11 ↑
   758:       { 72, 13,  4, 8 },  //0x3d 12 →
   759:       { 68, 17,  4, 4 },  //0x3e 13 ↓
   760:       { 78,  5,  4, 4 },  //0x3f 14 CLR
   761:       { 82,  5,  4, 4 },  //0x40 15 /
   762:       { 86,  5,  4, 4 },  //0x41 16 *
   763:       { 90,  5,  4, 4 },  //0x42 17 -
   764:       { 78,  9,  4, 4 },  //0x43 18 7
   765:       { 82,  9,  4, 4 },  //0x44 19 8
   766:       { 86,  9,  4, 4 },  //0x45 20 9
   767:       { 90,  9,  4, 4 },  //0x46 21 +
   768:       { 78, 13,  4, 4 },  //0x47 22 4
   769:       { 82, 13,  4, 4 },  //0x48 23 5
   770:       { 86, 13,  4, 4 },  //0x49 24 6
   771:       { 90, 13,  4, 4 },  //0x4a 25 =
   772:       { 78, 17,  4, 4 },  //0x4b 26 1
   773:       { 82, 17,  4, 4 },  //0x4c 27 2
   774:       { 86, 17,  4, 4 },  //0x4d 28 3
   775:       { 90, 17,  4, 8 },  //0x4e 29 ENTER
   776:       { 78, 21,  4, 4 },  //0x4f 30 0
   777:       { 82, 21,  4, 4 },  //0x50 31 ,
   778:       { 86, 21,  4, 4 },  //0x51 32 .
   779:       { 82,  0,  4, 4 },  //0x52 33 記号入力
   780:       { 86,  0,  4, 4 },  //0x53 34 登録
   781:       { 90,  0,  4, 4 },  //0x54 35 HELP
   782:       { 11, 21,  5, 4 },  //0x55 36 XF1
   783:       { 16, 21,  5, 4 },  //0x56 37 XF2
   784:       { 35, 21,  6, 4 },  //0x57 38 XF3
   785:       { 41, 21,  5, 4 },  //0x58 39 XF4
   786:       { 46, 21,  5, 4 },  //0x59 40 XF5
   787:       {  0,  0,  4, 4 },  //0x61 41 BREAK
   788:       {  5,  0,  4, 4 },  //0x62 42 COPY
   789:       { 11,  0,  5, 4 },  //0x63 43 F1
   790:       { 16,  0,  5, 4 },  //0x64 44 F2
   791:       { 21,  0,  5, 4 },  //0x65 45 F3
   792:       { 26,  0,  5, 4 },  //0x66 46 F4
   793:       { 31,  0,  5, 4 },  //0x67 47 F5
   794:       { 37,  0,  5, 4 },  //0x68 48 F6
   795:       { 42,  0,  5, 4 },  //0x69 49 F7
   796:       { 47,  0,  5, 4 },  //0x6a 50 F8
   797:       { 52,  0,  5, 4 },  //0x6b 51 F9
   798:       { 57,  0,  5, 4 },  //0x6c 52 F10
   799:       {  0, 17, 62, 4 },  //0x70 53 SHIFT
   800:       {  0, 13,  7, 4 },  //0x71 54 CTRL
   801:       { 64, 21,  6, 4 },  //0x72 55 OPT.1
   802:       { 70, 21,  6, 4 },  //0x73 56 OPT.2
   803:     },
   804:     //Compact Keyboard
   805:     {
   806:       {  0,  5,  4, 4 },  //0x01  0 ESC
   807:       { 56,  5,  6, 4 },  //0x0f  1 BS
   808:       {  0,  9,  6, 4 },  //0x10  2 TAB
   809:       { 54,  9,  8, 8 },  //0x1d  3 RETURN
   810:       { 21, 21, 14, 4 },  //0x35  4 Space
   811:       { 64,  9,  4, 4 },  //0x36  5 HOME
   812:       { 72,  9,  4, 4 },  //0x37  6 DEL
   813:       { 64, 17,  4, 4 },  //0x38  7 ROLLUP
   814:       { 72, 17,  4, 4 },  //0x39  8 ROLLDOWN
   815:       { 72, 13,  4, 4 },  //0x3a  9 UNDO
   816:       { 64, 21,  4, 4 },  //0x3b 10 ←
   817:       { 68, 17,  4, 4 },  //0x3c 11 ↑
   818:       { 72, 21,  4, 4 },  //0x3d 12 →
   819:       { 68, 21,  4, 4 },  //0x3e 13 ↓
   820:       { 68,  9,  4, 4 },  //0x3f 14 CLR
   821:       null             ,  //0x40 15 /
   822:       null             ,  //0x41 16 *
   823:       null             ,  //0x42 17 -
   824:       null             ,  //0x43 18 7
   825:       null             ,  //0x44 19 8
   826:       null             ,  //0x45 20 9
   827:       null             ,  //0x46 21 +
   828:       null             ,  //0x47 22 4
   829:       null             ,  //0x48 23 5
   830:       null             ,  //0x49 24 6
   831:       null             ,  //0x4a 25 =
   832:       null             ,  //0x4b 26 1
   833:       null             ,  //0x4c 27 2
   834:       null             ,  //0x4d 28 3
   835:       null             ,  //0x4e 29 ENTER
   836:       null             ,  //0x4f 30 0
   837:       null             ,  //0x50 31 ,
   838:       null             ,  //0x51 32 .
   839:       { 64,  0,  4, 4 },  //0x52 33 記号入力
   840:       { 68,  0,  4, 4 },  //0x53 34 登録
   841:       { 72,  0,  4, 4 },  //0x54 35 HELP
   842:       { 11, 21,  5, 4 },  //0x55 36 XF1
   843:       { 16, 21,  5, 4 },  //0x56 37 XF2
   844:       { 35, 21,  5, 4 },  //0x57 38 XF3
   845:       { 40, 21,  4, 4 },  //0x58 39 XF4
   846:       { 44, 21,  4, 4 },  //0x59 40 XF5
   847:       {  0,  0,  4, 4 },  //0x61 41 BREAK
   848:       {  5,  0,  4, 4 },  //0x62 42 COPY
   849:       { 11,  0,  5, 4 },  //0x63 43 F1
   850:       { 16,  0,  5, 4 },  //0x64 44 F2
   851:       { 21,  0,  5, 4 },  //0x65 45 F3
   852:       { 26,  0,  5, 4 },  //0x66 46 F4
   853:       { 31,  0,  5, 4 },  //0x67 47 F5
   854:       { 37,  0,  5, 4 },  //0x68 48 F6
   855:       { 42,  0,  5, 4 },  //0x69 49 F7
   856:       { 47,  0,  5, 4 },  //0x6a 50 F8
   857:       { 52,  0,  5, 4 },  //0x6b 51 F9
   858:       { 57,  0,  5, 4 },  //0x6c 52 F10
   859:       {  0, 17, 62, 4 },  //0x70 53 SHIFT
   860:       {  0, 13,  7, 4 },  //0x71 54 CTRL
   861:       {  3, 21,  4, 4 },  //0x72 55 OPT.1
   862:       { 56, 21,  4, 4 },  //0x73 56 OPT.2
   863:     },
   864:   };  //KBD_TYPE_FIX_BOX
   865: 
   866:   //可変キーの番号→可変キーに表示する文字の文字コード
   867:   //  可変キーに表示する文字はモードキーの状態によって変化する
   868:   //  かなの配列はSRAMの設定によって変化する
   869:   //    0x00ed002b  キーボードのかなの配列。0=旧JIS,0以外=五十音
   870:   //  文字コード0x5c,0x7e,0x7cの字体はSRAMの設定によって変化する
   871:   //    0x00ed0059  bit0  文字コード0x5cの字体。0=YEN SIGN(0x5c,U+00A5),1=REVERSE SOLIDUS(0x80,U+005C)
   872:   //                bit1  文字コード0x7eの字体。0=MACRON(0x7e,U+00AF),1=TILDE(0x81,U+007E)
   873:   //                bit2  文字コード0x7cの字体。0=VERTICAL LINE(0x7c,U+007C),1=BROKEN BAR(0x82,U+00A6)
   874:   //  文字の字体は半角と全角を区別しない
   875:   //  文字の字体はカタカナとひらがなを区別する。ひらがな+全角のときだけひらがなにする
   876:   //  テレビコントロール(SHIFT|OPT.2+←|↑|→|↓|CLR|/|*|-|7|8|9|+|4|5|6|=|1|2|3|0|,|.)は区別しない
   877:   public static final char[] KBD_CAPS_BASE           = "1234567890-^\\QWERTYUIOP@[ASDFGHJKL;:]ZXCVBNM,./\u0000".toCharArray ();
   878:   public static final char[] KBD_CAPS_SHIFT_BASE     = "!\"#$%&'()\u0000=~|qwertyuiop`{asdfghjkl+*}zxcvbnm<>?_".toCharArray ();
   879:   public static final char[] KBD_KANA_BASE           = "ヌフアウエオヤユヨワホヘータテイスカンナニラゼ゚チトシハキクマノリレケムツサソヒコミモネルメロ".toCharArray ();
   880:   public static final char[] KBD_KANA_SHIFT_BASE     = "ヌファゥェォャュョヲホヘータティスカンナニラゼ「チトシハキクマノリレケ」ッサソヒコミモ、。・\u00a0".toCharArray ();
   881:   public static final char[] KBD_KANA_AIU_BASE       = "アイウエオナニヌネノラリルカキクケコハヒフヘホレロサシスセソマミムメモ゙゚タチツテトヤユヨワヲン".toCharArray ();
   882:   public static final char[] KBD_KANA_AIU_SHIFT_BASE = "ァィゥェォナニヌネヲラリルカキクケコハヒフヘホレ「\u00a0シスセソマミムメモー」タチッテトャュョ、。・".toCharArray ();
   883:   public static final char[] KBD_ROMA_BASE           = "1234567890ー^\\QWERTYUIOP@「ASDFGHJKL;:」ZXCVBNM、。・\u0000".toCharArray ();
   884:   public static final char[] KBD_ROMA_SHIFT_BASE     = "!\"#$%&'()\u0000=~|QWeRTYuioP`{aSDFGHJKL+*}zXCVBNM<>?_".toCharArray ();
   885:   public static final char[] KBD_NUM_BASE            = ("      789/" + "*        456-        123+        0,.=\u0084").toCharArray ();
   886:   public static final byte[] KBD_CAPS_CHR = new byte[KBD_VAR_KEYS];
   887:   public static final byte[] KBD_NORMAL_CHR = new byte[KBD_VAR_KEYS];
   888:   public static final byte[] KBD_CODE_CHR = new byte[KBD_VAR_KEYS];
   889:   public static final byte[] KBD_CAPS_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   890:   public static final byte[] KBD_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   891:   public static final byte[] KBD_CTRL_CHR = new byte[KBD_VAR_KEYS];
   892:   public static final byte[] KBD_KANA_CHR = new byte[KBD_VAR_KEYS];
   893:   public static final byte[] KBD_KANA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   894:   public static final byte[] KBD_KANA_AIU_CHR = new byte[KBD_VAR_KEYS];
   895:   public static final byte[] KBD_KANA_AIU_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   896:   public static final byte[] KBD_ROMA_CHR = new byte[KBD_VAR_KEYS];
   897:   public static final byte[] KBD_ROMA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   898:   public static final byte[] KBD_NUM_CAPS_CHR = new byte[KBD_VAR_KEYS];
   899:   public static final byte[] KBD_NUM_CHR = new byte[KBD_VAR_KEYS];
   900:   public static final byte[] KBD_NUM_CODE_CHR = new byte[KBD_VAR_KEYS];
   901:   public static final byte[] KBD_NUM_CAPS_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   902:   public static final byte[] KBD_NUM_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   903:   public static final byte[] KBD_NUM_CTRL_CHR = new byte[KBD_VAR_KEYS];
   904:   public static final byte[] KBD_NUM_KANA_CHR = new byte[KBD_VAR_KEYS];
   905:   public static final byte[] KBD_NUM_KANA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   906:   public static final byte[] KBD_NUM_KANA_AIU_CHR = new byte[KBD_VAR_KEYS];
   907:   public static final byte[] KBD_NUM_KANA_AIU_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   908:   public static final byte[] KBD_NUM_ROMA_CHR = new byte[KBD_VAR_KEYS];
   909:   public static final byte[] KBD_NUM_ROMA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   910: 
   911:   //文字コード→可変キーに表示する文字のパターン
   912:   //
   913:   //       +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f
   914:   //  0x00   ^A ^B ^C ^D ^E ^F ^G ^H ^I ^J ^K ^L ^M ^N ^O
   915:   //  0x10 ^P ^Q ^R ^S ^T ^U ^V ^W ^X ^Y ^Z ^[ ^¥ ^] ^^ ^_
   916:   //  0x20   ! ” # $ % & ’ ( ) * + , - . /
   917:   //  0x30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
   918:   //  0x40 @ A B C D E F G H I J K L M N O
   919:   //  0x50 P Q R S T U V W X Y Z [ ¥ ] ^ _
   920:   //  0x60 ` a b c d e f g h i j k l m n o
   921:   //  0x70 p q r s t u v w x y z { | }  ̄ ^?
   922:   //  0x80 \ ~ ¦ ^\ EN   を ぁ ぃ ぅ ぇ ぉ ゃ ゅ ょ っ
   923:   //  0x90   あ い う え お か き く け こ さ し す せ そ
   924:   //  0xa0 □ 。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ
   925:   //  0xb0 ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ
   926:   //  0xc0 タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ
   927:   //  0xd0 ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン ゛ ゜
   928:   //  0xe0 た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま
   929:   //  0xf0 み む め も や ゆ よ ら り る れ ろ わ ん    
   930:   //
   931:   //    0x00         U+0020         SPACE。文字が割り当てられていないキーを表示するときに使うので^@ではなくて空白
   932:   //    0x1c  ^¥     U+005E,U+00A5  CIRCUMFLEX ACCENT,YEN SIGN
   933:   //    0x5c  ¥      U+00A5         YEN SIGN
   934:   //    0x7c  |      U+007C         VERTICAL LINE
   935:   //    0x7e  ¯      U+00AF         MACRON
   936:   //    0x7f  ^?     U+005E,U+003F  CIRCUMFLEX ACCENT,QUESTION MARK
   937:   //    0x80  \      U+005C         REVERSE SOLIDUS。0x5cの代わり
   938:   //    0x81  ~      U+007E         TILDE。0x7eの代わり
   939:   //    0x82  ¦      U+00A6         BROKEN BAR。0x7cの代わり
   940:   //    0x83  ^\     U+005E,U+005C  CIRCUMFLEX ACCENT,REVERSE SOLIDUS。0x1cの代わり
   941:   //    0x84  ENTER                 NUM ONのときに使う
   942:   //    0xa0  □     U+00A0         NO-BREAK SPACE。空白と見分けがつかないと困るのでキーボードには市松模様で表示する
   943:   //
   944:   public static final int[][] KBD_VAR_LETTER = {
   945:     {
   946:       0b000000000000000000000,
   947:       0b000000000000000000000,
   948:       0b000000000000000000000,
   949:       0b000000000000000000000,
   950:       0b000000000000000000000,
   951:       0b000000000000000000000,
   952:       0b000000000000000000000,
   953:       0b000000000000000000000,
   954:       0b000000000000000000000,
   955:       0b000000000000000000000,
   956:       0b000000000000000000000,
   957:       0b000000000000000000000,
   958:       0b000000000000000000000,
   959:     },  //0x00
   960:     {
   961:       0b000000000000000000000,
   962:       0b000000000000000000000,
   963:       0b000000100000001000000,
   964:       0b000001010000010100000,
   965:       0b000010001000010100000,
   966:       0b000100000100100010000,
   967:       0b000000000000100010000,
   968:       0b000000000001000001000,
   969:       0b000000000001111111000,
   970:       0b000000000001000001000,
   971:       0b000000000001000001000,
   972:       0b000000000000000000000,
   973:       0b000000000000000000000,
   974:     },  //0x01 ^A
   975:     {
   976:       0b000000000000000000000,
   977:       0b000000000000000000000,
   978:       0b000000100001111100000,
   979:       0b000001010001000010000,
   980:       0b000010001001000001000,
   981:       0b000100000101000010000,
   982:       0b000000000001111100000,
   983:       0b000000000001000010000,
   984:       0b000000000001000001000,
   985:       0b000000000001000010000,
   986:       0b000000000001111100000,
   987:       0b000000000000000000000,
   988:       0b000000000000000000000,
   989:     },  //0x02 ^B
   990:     {
   991:       0b000000000000000000000,
   992:       0b000000000000000000000,
   993:       0b000000100000011100000,
   994:       0b000001010000100010000,
   995:       0b000010001001000001000,
   996:       0b000100000101000000000,
   997:       0b000000000001000000000,
   998:       0b000000000001000000000,
   999:       0b000000000001000001000,
  1000:       0b000000000000100010000,
  1001:       0b000000000000011100000,
  1002:       0b000000000000000000000,
  1003:       0b000000000000000000000,
  1004:     },  //0x03 ^C
  1005:     {
  1006:       0b000000000000000000000,
  1007:       0b000000000000000000000,
  1008:       0b000000100001111100000,
  1009:       0b000001010001000010000,
  1010:       0b000010001001000001000,
  1011:       0b000100000101000001000,
  1012:       0b000000000001000001000,
  1013:       0b000000000001000001000,
  1014:       0b000000000001000001000,
  1015:       0b000000000001000010000,
  1016:       0b000000000001111100000,
  1017:       0b000000000000000000000,
  1018:       0b000000000000000000000,
  1019:     },  //0x04 ^D
  1020:     {
  1021:       0b000000000000000000000,
  1022:       0b000000000000000000000,
  1023:       0b000000100001111111000,
  1024:       0b000001010001000000000,
  1025:       0b000010001001000000000,
  1026:       0b000100000101000000000,
  1027:       0b000000000001111110000,
  1028:       0b000000000001000000000,
  1029:       0b000000000001000000000,
  1030:       0b000000000001000000000,
  1031:       0b000000000001111111000,
  1032:       0b000000000000000000000,
  1033:       0b000000000000000000000,
  1034:     },  //0x05 ^E
  1035:     {
  1036:       0b000000000000000000000,
  1037:       0b000000000000000000000,
  1038:       0b000000100001111111000,
  1039:       0b000001010001000000000,
  1040:       0b000010001001000000000,
  1041:       0b000100000101000000000,
  1042:       0b000000000001111110000,
  1043:       0b000000000001000000000,
  1044:       0b000000000001000000000,
  1045:       0b000000000001000000000,
  1046:       0b000000000001000000000,
  1047:       0b000000000000000000000,
  1048:       0b000000000000000000000,
  1049:     },  //0x06 ^F
  1050:     {
  1051:       0b000000000000000000000,
  1052:       0b000000000000000000000,
  1053:       0b000000100000011110000,
  1054:       0b000001010000100000000,
  1055:       0b000010001001000000000,
  1056:       0b000100000101000000000,
  1057:       0b000000000001001111000,
  1058:       0b000000000001000010000,
  1059:       0b000000000001000010000,
  1060:       0b000000000000100010000,
  1061:       0b000000000000011100000,
  1062:       0b000000000000000000000,
  1063:       0b000000000000000000000,
  1064:     },  //0x07 ^G
  1065:     {
  1066:       0b000000000000000000000,
  1067:       0b000000000000000000000,
  1068:       0b000000100001000001000,
  1069:       0b000001010001000001000,
  1070:       0b000010001001000001000,
  1071:       0b000100000101000001000,
  1072:       0b000000000001111111000,
  1073:       0b000000000001000001000,
  1074:       0b000000000001000001000,
  1075:       0b000000000001000001000,
  1076:       0b000000000001000001000,
  1077:       0b000000000000000000000,
  1078:       0b000000000000000000000,
  1079:     },  //0x08 ^H
  1080:     {
  1081:       0b000000000000000000000,
  1082:       0b000000000000000000000,
  1083:       0b000000100000011100000,
  1084:       0b000001010000001000000,
  1085:       0b000010001000001000000,
  1086:       0b000100000100001000000,
  1087:       0b000000000000001000000,
  1088:       0b000000000000001000000,
  1089:       0b000000000000001000000,
  1090:       0b000000000000001000000,
  1091:       0b000000000000011100000,
  1092:       0b000000000000000000000,
  1093:       0b000000000000000000000,
  1094:     },  //0x09 ^I
  1095:     {
  1096:       0b000000000000000000000,
  1097:       0b000000000000000000000,
  1098:       0b000000100000000001000,
  1099:       0b000001010000000001000,
  1100:       0b000010001000000001000,
  1101:       0b000100000100000001000,
  1102:       0b000000000000000001000,
  1103:       0b000000000000000001000,
  1104:       0b000000000001000001000,
  1105:       0b000000000000100010000,
  1106:       0b000000000000011100000,
  1107:       0b000000000000000000000,
  1108:       0b000000000000000000000,
  1109:     },  //0x0a ^J
  1110:     {
  1111:       0b000000000000000000000,
  1112:       0b000000000000000000000,
  1113:       0b000000100001000001000,
  1114:       0b000001010001000010000,
  1115:       0b000010001001000100000,
  1116:       0b000100000101001000000,
  1117:       0b000000000001010000000,
  1118:       0b000000000001101000000,
  1119:       0b000000000001000100000,
  1120:       0b000000000001000010000,
  1121:       0b000000000001000001000,
  1122:       0b000000000000000000000,
  1123:       0b000000000000000000000,
  1124:     },  //0x0b ^K
  1125:     {
  1126:       0b000000000000000000000,
  1127:       0b000000000000000000000,
  1128:       0b000000100001000000000,
  1129:       0b000001010001000000000,
  1130:       0b000010001001000000000,
  1131:       0b000100000101000000000,
  1132:       0b000000000001000000000,
  1133:       0b000000000001000000000,
  1134:       0b000000000001000000000,
  1135:       0b000000000001000000000,
  1136:       0b000000000001111111000,
  1137:       0b000000000000000000000,
  1138:       0b000000000000000000000,
  1139:     },  //0x0c ^L
  1140:     {
  1141:       0b000000000000000000000,
  1142:       0b000000000000000000000,
  1143:       0b000000100001000001000,
  1144:       0b000001010001100011000,
  1145:       0b000010001001010101000,
  1146:       0b000100000101010101000,
  1147:       0b000000000001001001000,
  1148:       0b000000000001001001000,
  1149:       0b000000000001000001000,
  1150:       0b000000000001000001000,
  1151:       0b000000000001000001000,
  1152:       0b000000000000000000000,
  1153:       0b000000000000000000000,
  1154:     },  //0x0d ^M
  1155:     {
  1156:       0b000000000000000000000,
  1157:       0b000000000000000000000,
  1158:       0b000000100001000001000,
  1159:       0b000001010001000001000,
  1160:       0b000010001001100001000,
  1161:       0b000100000101010001000,
  1162:       0b000000000001001001000,
  1163:       0b000000000001000101000,
  1164:       0b000000000001000011000,
  1165:       0b000000000001000001000,
  1166:       0b000000000001000001000,
  1167:       0b000000000000000000000,
  1168:       0b000000000000000000000,
  1169:     },  //0x0e ^N
  1170:     {
  1171:       0b000000000000000000000,
  1172:       0b000000000000000000000,
  1173:       0b000000100000011100000,
  1174:       0b000001010000100010000,
  1175:       0b000010001001000001000,
  1176:       0b000100000101000001000,
  1177:       0b000000000001000001000,
  1178:       0b000000000001000001000,
  1179:       0b000000000001000001000,
  1180:       0b000000000000100010000,
  1181:       0b000000000000011100000,
  1182:       0b000000000000000000000,
  1183:       0b000000000000000000000,
  1184:     },  //0x0f ^O
  1185:     {
  1186:       0b000000000000000000000,
  1187:       0b000000000000000000000,
  1188:       0b000000100001111100000,
  1189:       0b000001010001000010000,
  1190:       0b000010001001000001000,
  1191:       0b000100000101000001000,
  1192:       0b000000000001000010000,
  1193:       0b000000000001111100000,
  1194:       0b000000000001000000000,
  1195:       0b000000000001000000000,
  1196:       0b000000000001000000000,
  1197:       0b000000000000000000000,
  1198:       0b000000000000000000000,
  1199:     },  //0x10 ^P
  1200:     {
  1201:       0b000000000000000000000,
  1202:       0b000000000000000000000,
  1203:       0b000000100000011100000,
  1204:       0b000001010000100010000,
  1205:       0b000010001001000001000,
  1206:       0b000100000101000001000,
  1207:       0b000000000001000001000,
  1208:       0b000000000001001001000,
  1209:       0b000000000001000101000,
  1210:       0b000000000000100010000,
  1211:       0b000000000000011101000,
  1212:       0b000000000000000000000,
  1213:       0b000000000000000000000,
  1214:     },  //0x11 ^Q
  1215:     {
  1216:       0b000000000000000000000,
  1217:       0b000000000000000000000,
  1218:       0b000000100001111100000,
  1219:       0b000001010001000010000,
  1220:       0b000010001001000001000,
  1221:       0b000100000101000001000,
  1222:       0b000000000001000010000,
  1223:       0b000000000001111100000,
  1224:       0b000000000001000010000,
  1225:       0b000000000001000001000,
  1226:       0b000000000001000001000,
  1227:       0b000000000000000000000,
  1228:       0b000000000000000000000,
  1229:     },  //0x12 ^R
  1230:     {
  1231:       0b000000000000000000000,
  1232:       0b000000000000000000000,
  1233:       0b000000100000011110000,
  1234:       0b000001010000100000000,
  1235:       0b000010001001000000000,
  1236:       0b000100000100100000000,
  1237:       0b000000000000011100000,
  1238:       0b000000000000000010000,
  1239:       0b000000000000000001000,
  1240:       0b000000000000000010000,
  1241:       0b000000000000111100000,
  1242:       0b000000000000000000000,
  1243:       0b000000000000000000000,
  1244:     },  //0x13 ^S
  1245:     {
  1246:       0b000000000000000000000,
  1247:       0b000000000000000000000,
  1248:       0b000000100001111111000,
  1249:       0b000001010000001000000,
  1250:       0b000010001000001000000,
  1251:       0b000100000100001000000,
  1252:       0b000000000000001000000,
  1253:       0b000000000000001000000,
  1254:       0b000000000000001000000,
  1255:       0b000000000000001000000,
  1256:       0b000000000000001000000,
  1257:       0b000000000000000000000,
  1258:       0b000000000000000000000,
  1259:     },  //0x14 ^T
  1260:     {
  1261:       0b000000000000000000000,
  1262:       0b000000000000000000000,
  1263:       0b000000100001000001000,
  1264:       0b000001010001000001000,
  1265:       0b000010001001000001000,
  1266:       0b000100000101000001000,
  1267:       0b000000000001000001000,
  1268:       0b000000000001000001000,
  1269:       0b000000000001000001000,
  1270:       0b000000000000100010000,
  1271:       0b000000000000011100000,
  1272:       0b000000000000000000000,
  1273:       0b000000000000000000000,
  1274:     },  //0x15 ^U
  1275:     {
  1276:       0b000000000000000000000,
  1277:       0b000000000000000000000,
  1278:       0b000000100001000001000,
  1279:       0b000001010001000001000,
  1280:       0b000010001001000001000,
  1281:       0b000100000101000001000,
  1282:       0b000000000000100010000,
  1283:       0b000000000000100010000,
  1284:       0b000000000000010100000,
  1285:       0b000000000000010100000,
  1286:       0b000000000000001000000,
  1287:       0b000000000000000000000,
  1288:       0b000000000000000000000,
  1289:     },  //0x16 ^V
  1290:     {
  1291:       0b000000000000000000000,
  1292:       0b000000000000000000000,
  1293:       0b000000100010001000100,
  1294:       0b000001010010001000100,
  1295:       0b000010001010001000100,
  1296:       0b000100000101010101000,
  1297:       0b000000000001010101000,
  1298:       0b000000000001010101000,
  1299:       0b000000000000100010000,
  1300:       0b000000000000100010000,
  1301:       0b000000000000100010000,
  1302:       0b000000000000000000000,
  1303:       0b000000000000000000000,
  1304:     },  //0x17 ^W
  1305:     {
  1306:       0b000000000000000000000,
  1307:       0b000000000000000000000,
  1308:       0b000000100001000001000,
  1309:       0b000001010001000001000,
  1310:       0b000010001000100010000,
  1311:       0b000100000100010100000,
  1312:       0b000000000000001000000,
  1313:       0b000000000000010100000,
  1314:       0b000000000000100010000,
  1315:       0b000000000001000001000,
  1316:       0b000000000001000001000,
  1317:       0b000000000000000000000,
  1318:       0b000000000000000000000,
  1319:     },  //0x18 ^X
  1320:     {
  1321:       0b000000000000000000000,
  1322:       0b000000000000000000000,
  1323:       0b000000100001000001000,
  1324:       0b000001010001000001000,
  1325:       0b000010001001000001000,
  1326:       0b000100000100100010000,
  1327:       0b000000000000010100000,
  1328:       0b000000000000001000000,
  1329:       0b000000000000001000000,
  1330:       0b000000000000001000000,
  1331:       0b000000000000001000000,
  1332:       0b000000000000000000000,
  1333:       0b000000000000000000000,
  1334:     },  //0x19 ^Y
  1335:     {
  1336:       0b000000000000000000000,
  1337:       0b000000000000000000000,
  1338:       0b000000100001111111000,
  1339:       0b000001010000000001000,
  1340:       0b000010001000000010000,
  1341:       0b000100000100000100000,
  1342:       0b000000000000001000000,
  1343:       0b000000000000010000000,
  1344:       0b000000000000100000000,
  1345:       0b000000000001000000000,
  1346:       0b000000000001111111000,
  1347:       0b000000000000000000000,
  1348:       0b000000000000000000000,
  1349:     },  //0x1a ^Z
  1350:     {
  1351:       0b000000000000000000000,
  1352:       0b000000000000000000000,
  1353:       0b000000100000011100000,
  1354:       0b000001010000010000000,
  1355:       0b000010001000010000000,
  1356:       0b000100000100010000000,
  1357:       0b000000000000010000000,
  1358:       0b000000000000010000000,
  1359:       0b000000000000010000000,
  1360:       0b000000000000010000000,
  1361:       0b000000000000011100000,
  1362:       0b000000000000000000000,
  1363:       0b000000000000000000000,
  1364:     },  //0x1b ^[
  1365:     {
  1366:       0b000000000000000000000,
  1367:       0b000000000000000000000,
  1368:       0b000000100001000001000,
  1369:       0b000001010000100010000,
  1370:       0b000010001000010100000,
  1371:       0b000100000100001000000,
  1372:       0b000000000001111111000,
  1373:       0b000000000000001000000,
  1374:       0b000000000001111111000,
  1375:       0b000000000000001000000,
  1376:       0b000000000000001000000,
  1377:       0b000000000000000000000,
  1378:       0b000000000000000000000,
  1379:     },  //0x1c ^¥
  1380:     {
  1381:       0b000000000000000000000,
  1382:       0b000000000000000000000,
  1383:       0b000000100000011100000,
  1384:       0b000001010000000100000,
  1385:       0b000010001000000100000,
  1386:       0b000100000100000100000,
  1387:       0b000000000000000100000,
  1388:       0b000000000000000100000,
  1389:       0b000000000000000100000,
  1390:       0b000000000000000100000,
  1391:       0b000000000000011100000,
  1392:       0b000000000000000000000,
  1393:       0b000000000000000000000,
  1394:     },  //0x1d ^]
  1395:     {
  1396:       0b000000000000000000000,
  1397:       0b000000000000000000000,
  1398:       0b000000100000001000000,
  1399:       0b000001010000010100000,
  1400:       0b000010001000100010000,
  1401:       0b000100000101000001000,
  1402:       0b000000000000000000000,
  1403:       0b000000000000000000000,
  1404:       0b000000000000000000000,
  1405:       0b000000000000000000000,
  1406:       0b000000000000000000000,
  1407:       0b000000000000000000000,
  1408:       0b000000000000000000000,
  1409:     },  //0x1e ^^
  1410:     {
  1411:       0b000000000000000000000,
  1412:       0b000000000000000000000,
  1413:       0b000000100000000000000,
  1414:       0b000001010000000000000,
  1415:       0b000010001000000000000,
  1416:       0b000100000100000000000,
  1417:       0b000000000000000000000,
  1418:       0b000000000000000000000,
  1419:       0b000000000000000000000,
  1420:       0b000000000001111111000,
  1421:       0b000000000000000000000,
  1422:       0b000000000000000000000,
  1423:       0b000000000000000000000,
  1424:     },  //0x1f ^_
  1425:     null,  //0x20
  1426:     {
  1427:       0b000000000000000000000,
  1428:       0b000000000000000000000,
  1429:       0b000000000010000000000,
  1430:       0b000000000010000000000,
  1431:       0b000000000010000000000,
  1432:       0b000000000010000000000,
  1433:       0b000000000010000000000,
  1434:       0b000000000010000000000,
  1435:       0b000000000000000000000,
  1436:       0b000000000000000000000,
  1437:       0b000000000010000000000,
  1438:       0b000000000000000000000,
  1439:       0b000000000000000000000,
  1440:     },  //0x21 !
  1441:     {
  1442:       0b000000000000000000000,
  1443:       0b000000000000000000000,
  1444:       0b000000000101000000000,
  1445:       0b000000000101000000000,
  1446:       0b000000000101000000000,
  1447:       0b000000000000000000000,
  1448:       0b000000000000000000000,
  1449:       0b000000000000000000000,
  1450:       0b000000000000000000000,
  1451:       0b000000000000000000000,
  1452:       0b000000000000000000000,
  1453:       0b000000000000000000000,
  1454:       0b000000000000000000000,
  1455:     },  //0x22 "
  1456:     {
  1457:       0b000000000000000000000,
  1458:       0b000000000000000000000,
  1459:       0b000000000101000000000,
  1460:       0b000000000101000000000,
  1461:       0b000000011111110000000,
  1462:       0b000000000101000000000,
  1463:       0b000000000101000000000,
  1464:       0b000000000101000000000,
  1465:       0b000000011111110000000,
  1466:       0b000000000101000000000,
  1467:       0b000000000101000000000,
  1468:       0b000000000000000000000,
  1469:       0b000000000000000000000,
  1470:     },  //0x23 #
  1471:     {
  1472:       0b000000000000000000000,
  1473:       0b000000000000000000000,
  1474:       0b000000000010000000000,
  1475:       0b000000001111110000000,
  1476:       0b000000010010000000000,
  1477:       0b000000010010000000000,
  1478:       0b000000001111100000000,
  1479:       0b000000000010010000000,
  1480:       0b000000000010010000000,
  1481:       0b000000011111100000000,
  1482:       0b000000000010000000000,
  1483:       0b000000000000000000000,
  1484:       0b000000000000000000000,
  1485:     },  //0x24 $
  1486:     {
  1487:       0b000000000000000000000,
  1488:       0b000000000000000000000,
  1489:       0b000000011100000000000,
  1490:       0b000000010100010000000,
  1491:       0b000000011100100000000,
  1492:       0b000000000001000000000,
  1493:       0b000000000010000000000,
  1494:       0b000000000100000000000,
  1495:       0b000000001001110000000,
  1496:       0b000000010001010000000,
  1497:       0b000000000001110000000,
  1498:       0b000000000000000000000,
  1499:       0b000000000000000000000,
  1500:     },  //0x25 %
  1501:     {
  1502:       0b000000000000000000000,
  1503:       0b000000000000000000000,
  1504:       0b000000001110000000000,
  1505:       0b000000010001000000000,
  1506:       0b000000010001000000000,
  1507:       0b000000001010000000000,
  1508:       0b000000000100000000000,
  1509:       0b000000001010000000000,
  1510:       0b000000010001010000000,
  1511:       0b000000010000100000000,
  1512:       0b000000001111010000000,
  1513:       0b000000000000000000000,
  1514:       0b000000000000000000000,
  1515:     },  //0x26 &
  1516:     {
  1517:       0b000000000000000000000,
  1518:       0b000000000000000000000,
  1519:       0b000000000001000000000,
  1520:       0b000000000001000000000,
  1521:       0b000000000010000000000,
  1522:       0b000000000100000000000,
  1523:       0b000000000000000000000,
  1524:       0b000000000000000000000,
  1525:       0b000000000000000000000,
  1526:       0b000000000000000000000,
  1527:       0b000000000000000000000,
  1528:       0b000000000000000000000,
  1529:       0b000000000000000000000,
  1530:     },  //0x27 '
  1531:     {
  1532:       0b000000000000000000000,
  1533:       0b000000000000000000000,
  1534:       0b000000000001000000000,
  1535:       0b000000000010000000000,
  1536:       0b000000000100000000000,
  1537:       0b000000000100000000000,
  1538:       0b000000000100000000000,
  1539:       0b000000000100000000000,
  1540:       0b000000000100000000000,
  1541:       0b000000000010000000000,
  1542:       0b000000000001000000000,
  1543:       0b000000000000000000000,
  1544:       0b000000000000000000000,
  1545:     },  //0x28 (
  1546:     {
  1547:       0b000000000000000000000,
  1548:       0b000000000000000000000,
  1549:       0b000000000100000000000,
  1550:       0b000000000010000000000,
  1551:       0b000000000001000000000,
  1552:       0b000000000001000000000,
  1553:       0b000000000001000000000,
  1554:       0b000000000001000000000,
  1555:       0b000000000001000000000,
  1556:       0b000000000010000000000,
  1557:       0b000000000100000000000,
  1558:       0b000000000000000000000,
  1559:       0b000000000000000000000,
  1560:     },  //0x29 )
  1561:     {
  1562:       0b000000000000000000000,
  1563:       0b000000000000000000000,
  1564:       0b000000000000000000000,
  1565:       0b000000000010000000000,
  1566:       0b000000010010010000000,
  1567:       0b000000001010100000000,
  1568:       0b000000000111000000000,
  1569:       0b000000001010100000000,
  1570:       0b000000010010010000000,
  1571:       0b000000000010000000000,
  1572:       0b000000000000000000000,
  1573:       0b000000000000000000000,
  1574:       0b000000000000000000000,
  1575:     },  //0x2a *
  1576:     {
  1577:       0b000000000000000000000,
  1578:       0b000000000000000000000,
  1579:       0b000000000000000000000,
  1580:       0b000000000010000000000,
  1581:       0b000000000010000000000,
  1582:       0b000000000010000000000,
  1583:       0b000000011111110000000,
  1584:       0b000000000010000000000,
  1585:       0b000000000010000000000,
  1586:       0b000000000010000000000,
  1587:       0b000000000000000000000,
  1588:       0b000000000000000000000,
  1589:       0b000000000000000000000,
  1590:     },  //0x2b +
  1591:     {
  1592:       0b000000000000000000000,
  1593:       0b000000000000000000000,
  1594:       0b000000000000000000000,
  1595:       0b000000000000000000000,
  1596:       0b000000000000000000000,
  1597:       0b000000000000000000000,
  1598:       0b000000000000000000000,
  1599:       0b000000000110000000000,
  1600:       0b000000000110000000000,
  1601:       0b000000000010000000000,
  1602:       0b000000000100000000000,
  1603:       0b000000000000000000000,
  1604:       0b000000000000000000000,
  1605:     },  //0x2c ,
  1606:     {
  1607:       0b000000000000000000000,
  1608:       0b000000000000000000000,
  1609:       0b000000000000000000000,
  1610:       0b000000000000000000000,
  1611:       0b000000000000000000000,
  1612:       0b000000000000000000000,
  1613:       0b000000011111110000000,
  1614:       0b000000000000000000000,
  1615:       0b000000000000000000000,
  1616:       0b000000000000000000000,
  1617:       0b000000000000000000000,
  1618:       0b000000000000000000000,
  1619:       0b000000000000000000000,
  1620:     },  //0x2d -
  1621:     {
  1622:       0b000000000000000000000,
  1623:       0b000000000000000000000,
  1624:       0b000000000000000000000,
  1625:       0b000000000000000000000,
  1626:       0b000000000000000000000,
  1627:       0b000000000000000000000,
  1628:       0b000000000000000000000,
  1629:       0b000000000000000000000,
  1630:       0b000000000110000000000,
  1631:       0b000000000110000000000,
  1632:       0b000000000000000000000,
  1633:       0b000000000000000000000,
  1634:       0b000000000000000000000,
  1635:     },  //0x2e .
  1636:     {
  1637:       0b000000000000000000000,
  1638:       0b000000000000000000000,
  1639:       0b000000000000000000000,
  1640:       0b000000000000010000000,
  1641:       0b000000000000100000000,
  1642:       0b000000000001000000000,
  1643:       0b000000000010000000000,
  1644:       0b000000000100000000000,
  1645:       0b000000001000000000000,
  1646:       0b000000010000000000000,
  1647:       0b000000000000000000000,
  1648:       0b000000000000000000000,
  1649:       0b000000000000000000000,
  1650:     },  //0x2f /
  1651:     {
  1652:       0b000000000000000000000,
  1653:       0b000000000000000000000,
  1654:       0b000000001111100000000,
  1655:       0b000000010000010000000,
  1656:       0b000000010000010000000,
  1657:       0b000000010000010000000,
  1658:       0b000000010000010000000,
  1659:       0b000000010000010000000,
  1660:       0b000000010000010000000,
  1661:       0b000000010000010000000,
  1662:       0b000000001111100000000,
  1663:       0b000000000000000000000,
  1664:       0b000000000000000000000,
  1665:     },  //0x30 0
  1666:     {
  1667:       0b000000000000000000000,
  1668:       0b000000000000000000000,
  1669:       0b000000000001000000000,
  1670:       0b000000000011000000000,
  1671:       0b000000000101000000000,
  1672:       0b000000000001000000000,
  1673:       0b000000000001000000000,
  1674:       0b000000000001000000000,
  1675:       0b000000000001000000000,
  1676:       0b000000000001000000000,
  1677:       0b000000000001000000000,
  1678:       0b000000000000000000000,
  1679:       0b000000000000000000000,
  1680:     },  //0x31 1
  1681:     {
  1682:       0b000000000000000000000,
  1683:       0b000000000000000000000,
  1684:       0b000000001111100000000,
  1685:       0b000000010000010000000,
  1686:       0b000000000000010000000,
  1687:       0b000000000000010000000,
  1688:       0b000000000001100000000,
  1689:       0b000000000110000000000,
  1690:       0b000000001000000000000,
  1691:       0b000000010000000000000,
  1692:       0b000000011111110000000,
  1693:       0b000000000000000000000,
  1694:       0b000000000000000000000,
  1695:     },  //0x32 2
  1696:     {
  1697:       0b000000000000000000000,
  1698:       0b000000000000000000000,
  1699:       0b000000001111100000000,
  1700:       0b000000010000010000000,
  1701:       0b000000000000010000000,
  1702:       0b000000000000010000000,
  1703:       0b000000000011100000000,
  1704:       0b000000000000010000000,
  1705:       0b000000000000010000000,
  1706:       0b000000010000010000000,
  1707:       0b000000001111100000000,
  1708:       0b000000000000000000000,
  1709:       0b000000000000000000000,
  1710:     },  //0x33 3
  1711:     {
  1712:       0b000000000000000000000,
  1713:       0b000000000000000000000,
  1714:       0b000000000001100000000,
  1715:       0b000000000010100000000,
  1716:       0b000000000100100000000,
  1717:       0b000000001000100000000,
  1718:       0b000000010000100000000,
  1719:       0b000000010000100000000,
  1720:       0b000000011111110000000,
  1721:       0b000000000000100000000,
  1722:       0b000000000000100000000,
  1723:       0b000000000000000000000,
  1724:       0b000000000000000000000,
  1725:     },  //0x34 4
  1726:     {
  1727:       0b000000000000000000000,
  1728:       0b000000000000000000000,
  1729:       0b000000011111110000000,
  1730:       0b000000010000000000000,
  1731:       0b000000010000000000000,
  1732:       0b000000011111100000000,
  1733:       0b000000000000010000000,
  1734:       0b000000000000010000000,
  1735:       0b000000000000010000000,
  1736:       0b000000010000010000000,
  1737:       0b000000001111100000000,
  1738:       0b000000000000000000000,
  1739:       0b000000000000000000000,
  1740:     },  //0x35 5
  1741:     {
  1742:       0b000000000000000000000,
  1743:       0b000000000000000000000,
  1744:       0b000000000111100000000,
  1745:       0b000000001000000000000,
  1746:       0b000000010000000000000,
  1747:       0b000000010000000000000,
  1748:       0b000000011111100000000,
  1749:       0b000000010000010000000,
  1750:       0b000000010000010000000,
  1751:       0b000000010000010000000,
  1752:       0b000000001111100000000,
  1753:       0b000000000000000000000,
  1754:       0b000000000000000000000,
  1755:     },  //0x36 6
  1756:     {
  1757:       0b000000000000000000000,
  1758:       0b000000000000000000000,
  1759:       0b000000011111110000000,
  1760:       0b000000000000010000000,
  1761:       0b000000000000010000000,
  1762:       0b000000000000100000000,
  1763:       0b000000000001000000000,
  1764:       0b000000000001000000000,
  1765:       0b000000000010000000000,
  1766:       0b000000000010000000000,
  1767:       0b000000000010000000000,
  1768:       0b000000000000000000000,
  1769:       0b000000000000000000000,
  1770:     },  //0x37 7
  1771:     {
  1772:       0b000000000000000000000,
  1773:       0b000000000000000000000,
  1774:       0b000000001111100000000,
  1775:       0b000000010000010000000,
  1776:       0b000000010000010000000,
  1777:       0b000000010000010000000,
  1778:       0b000000001111100000000,
  1779:       0b000000010000010000000,
  1780:       0b000000010000010000000,
  1781:       0b000000010000010000000,
  1782:       0b000000001111100000000,
  1783:       0b000000000000000000000,
  1784:       0b000000000000000000000,
  1785:     },  //0x38 8
  1786:     {
  1787:       0b000000000000000000000,
  1788:       0b000000000000000000000,
  1789:       0b000000001111100000000,
  1790:       0b000000010000010000000,
  1791:       0b000000010000010000000,
  1792:       0b000000010000010000000,
  1793:       0b000000001111110000000,
  1794:       0b000000000000010000000,
  1795:       0b000000000000100000000,
  1796:       0b000000000001000000000,
  1797:       0b000000001110000000000,
  1798:       0b000000000000000000000,
  1799:       0b000000000000000000000,
  1800:     },  //0x39 9
  1801:     {
  1802:       0b000000000000000000000,
  1803:       0b000000000000000000000,
  1804:       0b000000000000000000000,
  1805:       0b000000000110000000000,
  1806:       0b000000000110000000000,
  1807:       0b000000000000000000000,
  1808:       0b000000000000000000000,
  1809:       0b000000000110000000000,
  1810:       0b000000000110000000000,
  1811:       0b000000000000000000000,
  1812:       0b000000000000000000000,
  1813:       0b000000000000000000000,
  1814:       0b000000000000000000000,
  1815:     },  //0x3a :
  1816:     {
  1817:       0b000000000000000000000,
  1818:       0b000000000000000000000,
  1819:       0b000000000000000000000,
  1820:       0b000000000110000000000,
  1821:       0b000000000110000000000,
  1822:       0b000000000000000000000,
  1823:       0b000000000000000000000,
  1824:       0b000000000110000000000,
  1825:       0b000000000110000000000,
  1826:       0b000000000010000000000,
  1827:       0b000000000100000000000,
  1828:       0b000000000000000000000,
  1829:       0b000000000000000000000,
  1830:     },  //0x3b ;
  1831:     {
  1832:       0b000000000000000000000,
  1833:       0b000000000000000000000,
  1834:       0b000000000000100000000,
  1835:       0b000000000001000000000,
  1836:       0b000000000010000000000,
  1837:       0b000000000100000000000,
  1838:       0b000000001000000000000,
  1839:       0b000000000100000000000,
  1840:       0b000000000010000000000,
  1841:       0b000000000001000000000,
  1842:       0b000000000000100000000,
  1843:       0b000000000000000000000,
  1844:       0b000000000000000000000,
  1845:     },  //0x3c <
  1846:     {
  1847:       0b000000000000000000000,
  1848:       0b000000000000000000000,
  1849:       0b000000000000000000000,
  1850:       0b000000000000000000000,
  1851:       0b000000000000000000000,
  1852:       0b000000011111110000000,
  1853:       0b000000000000000000000,
  1854:       0b000000011111110000000,
  1855:       0b000000000000000000000,
  1856:       0b000000000000000000000,
  1857:       0b000000000000000000000,
  1858:       0b000000000000000000000,
  1859:       0b000000000000000000000,
  1860:     },  //0x3d =
  1861:     {
  1862:       0b000000000000000000000,
  1863:       0b000000000000000000000,
  1864:       0b000000001000000000000,
  1865:       0b000000000100000000000,
  1866:       0b000000000010000000000,
  1867:       0b000000000001000000000,
  1868:       0b000000000000100000000,
  1869:       0b000000000001000000000,
  1870:       0b000000000010000000000,
  1871:       0b000000000100000000000,
  1872:       0b000000001000000000000,
  1873:       0b000000000000000000000,
  1874:       0b000000000000000000000,
  1875:     },  //0x3e >
  1876:     {
  1877:       0b000000000000000000000,
  1878:       0b000000000000000000000,
  1879:       0b000000000111000000000,
  1880:       0b000000001000100000000,
  1881:       0b000000010000010000000,
  1882:       0b000000000000010000000,
  1883:       0b000000000000100000000,
  1884:       0b000000000001000000000,
  1885:       0b000000000010000000000,
  1886:       0b000000000000000000000,
  1887:       0b000000000010000000000,
  1888:       0b000000000000000000000,
  1889:       0b000000000000000000000,
  1890:     },  //0x3f ?
  1891:     {
  1892:       0b000000000000000000000,
  1893:       0b000000000000000000000,
  1894:       0b000000000111000000000,
  1895:       0b000000001000100000000,
  1896:       0b000000010010010000000,
  1897:       0b000000010101010000000,
  1898:       0b000000010101010000000,
  1899:       0b000000010101010000000,
  1900:       0b000000010011110000000,
  1901:       0b000000001000000000000,
  1902:       0b000000000111100000000,
  1903:       0b000000000000000000000,
  1904:       0b000000000000000000000,
  1905:     },  //0x40 @
  1906:     {
  1907:       0b000000000000000000000,
  1908:       0b000000000000000000000,
  1909:       0b000000000010000000000,
  1910:       0b000000000101000000000,
  1911:       0b000000000101000000000,
  1912:       0b000000001000100000000,
  1913:       0b000000001000100000000,
  1914:       0b000000010000010000000,
  1915:       0b000000011111110000000,
  1916:       0b000000010000010000000,
  1917:       0b000000010000010000000,
  1918:       0b000000000000000000000,
  1919:       0b000000000000000000000,
  1920:     },  //0x41 A
  1921:     {
  1922:       0b000000000000000000000,
  1923:       0b000000000000000000000,
  1924:       0b000000011111000000000,
  1925:       0b000000010000100000000,
  1926:       0b000000010000010000000,
  1927:       0b000000010000100000000,
  1928:       0b000000011111000000000,
  1929:       0b000000010000100000000,
  1930:       0b000000010000010000000,
  1931:       0b000000010000100000000,
  1932:       0b000000011111000000000,
  1933:       0b000000000000000000000,
  1934:       0b000000000000000000000,
  1935:     },  //0x42 B
  1936:     {
  1937:       0b000000000000000000000,
  1938:       0b000000000000000000000,
  1939:       0b000000000111000000000,
  1940:       0b000000001000100000000,
  1941:       0b000000010000010000000,
  1942:       0b000000010000000000000,
  1943:       0b000000010000000000000,
  1944:       0b000000010000000000000,
  1945:       0b000000010000010000000,
  1946:       0b000000001000100000000,
  1947:       0b000000000111000000000,
  1948:       0b000000000000000000000,
  1949:       0b000000000000000000000,
  1950:     },  //0x43 C
  1951:     {
  1952:       0b000000000000000000000,
  1953:       0b000000000000000000000,
  1954:       0b000000011111000000000,
  1955:       0b000000010000100000000,
  1956:       0b000000010000010000000,
  1957:       0b000000010000010000000,
  1958:       0b000000010000010000000,
  1959:       0b000000010000010000000,
  1960:       0b000000010000010000000,
  1961:       0b000000010000100000000,
  1962:       0b000000011111000000000,
  1963:       0b000000000000000000000,
  1964:       0b000000000000000000000,
  1965:     },  //0x44 D
  1966:     {
  1967:       0b000000000000000000000,
  1968:       0b000000000000000000000,
  1969:       0b000000011111110000000,
  1970:       0b000000010000000000000,
  1971:       0b000000010000000000000,
  1972:       0b000000010000000000000,
  1973:       0b000000011111100000000,
  1974:       0b000000010000000000000,
  1975:       0b000000010000000000000,
  1976:       0b000000010000000000000,
  1977:       0b000000011111110000000,
  1978:       0b000000000000000000000,
  1979:       0b000000000000000000000,
  1980:     },  //0x45 E
  1981:     {
  1982:       0b000000000000000000000,
  1983:       0b000000000000000000000,
  1984:       0b000000011111110000000,
  1985:       0b000000010000000000000,
  1986:       0b000000010000000000000,
  1987:       0b000000010000000000000,
  1988:       0b000000011111100000000,
  1989:       0b000000010000000000000,
  1990:       0b000000010000000000000,
  1991:       0b000000010000000000000,
  1992:       0b000000010000000000000,
  1993:       0b000000000000000000000,
  1994:       0b000000000000000000000,
  1995:     },  //0x46 F
  1996:     {
  1997:       0b000000000000000000000,
  1998:       0b000000000000000000000,
  1999:       0b000000000111100000000,
  2000:       0b000000001000000000000,
  2001:       0b000000010000000000000,
  2002:       0b000000010000000000000,
  2003:       0b000000010011110000000,
  2004:       0b000000010000100000000,
  2005:       0b000000010000100000000,
  2006:       0b000000001000100000000,
  2007:       0b000000000111000000000,
  2008:       0b000000000000000000000,
  2009:       0b000000000000000000000,
  2010:     },  //0x47 G
  2011:     {
  2012:       0b000000000000000000000,
  2013:       0b000000000000000000000,
  2014:       0b000000010000010000000,
  2015:       0b000000010000010000000,
  2016:       0b000000010000010000000,
  2017:       0b000000010000010000000,
  2018:       0b000000011111110000000,
  2019:       0b000000010000010000000,
  2020:       0b000000010000010000000,
  2021:       0b000000010000010000000,
  2022:       0b000000010000010000000,
  2023:       0b000000000000000000000,
  2024:       0b000000000000000000000,
  2025:     },  //0x48 H
  2026:     {
  2027:       0b000000000000000000000,
  2028:       0b000000000000000000000,
  2029:       0b000000000111000000000,
  2030:       0b000000000010000000000,
  2031:       0b000000000010000000000,
  2032:       0b000000000010000000000,
  2033:       0b000000000010000000000,
  2034:       0b000000000010000000000,
  2035:       0b000000000010000000000,
  2036:       0b000000000010000000000,
  2037:       0b000000000111000000000,
  2038:       0b000000000000000000000,
  2039:       0b000000000000000000000,
  2040:     },  //0x49 I
  2041:     {
  2042:       0b000000000000000000000,
  2043:       0b000000000000000000000,
  2044:       0b000000000000010000000,
  2045:       0b000000000000010000000,
  2046:       0b000000000000010000000,
  2047:       0b000000000000010000000,
  2048:       0b000000000000010000000,
  2049:       0b000000000000010000000,
  2050:       0b000000010000010000000,
  2051:       0b000000001000100000000,
  2052:       0b000000000111000000000,
  2053:       0b000000000000000000000,
  2054:       0b000000000000000000000,
  2055:     },  //0x4a J
  2056:     {
  2057:       0b000000000000000000000,
  2058:       0b000000000000000000000,
  2059:       0b000000010000010000000,
  2060:       0b000000010000100000000,
  2061:       0b000000010001000000000,
  2062:       0b000000010010000000000,
  2063:       0b000000010100000000000,
  2064:       0b000000011010000000000,
  2065:       0b000000010001000000000,
  2066:       0b000000010000100000000,
  2067:       0b000000010000010000000,
  2068:       0b000000000000000000000,
  2069:       0b000000000000000000000,
  2070:     },  //0x4b K
  2071:     {
  2072:       0b000000000000000000000,
  2073:       0b000000000000000000000,
  2074:       0b000000010000000000000,
  2075:       0b000000010000000000000,
  2076:       0b000000010000000000000,
  2077:       0b000000010000000000000,
  2078:       0b000000010000000000000,
  2079:       0b000000010000000000000,
  2080:       0b000000010000000000000,
  2081:       0b000000010000000000000,
  2082:       0b000000011111110000000,
  2083:       0b000000000000000000000,
  2084:       0b000000000000000000000,
  2085:     },  //0x4c L
  2086:     {
  2087:       0b000000000000000000000,
  2088:       0b000000000000000000000,
  2089:       0b000000010000010000000,
  2090:       0b000000011000110000000,
  2091:       0b000000010101010000000,
  2092:       0b000000010101010000000,
  2093:       0b000000010010010000000,
  2094:       0b000000010010010000000,
  2095:       0b000000010000010000000,
  2096:       0b000000010000010000000,
  2097:       0b000000010000010000000,
  2098:       0b000000000000000000000,
  2099:       0b000000000000000000000,
  2100:     },  //0x4d M
  2101:     {
  2102:       0b000000000000000000000,
  2103:       0b000000000000000000000,
  2104:       0b000000010000010000000,
  2105:       0b000000010000010000000,
  2106:       0b000000011000010000000,
  2107:       0b000000010100010000000,
  2108:       0b000000010010010000000,
  2109:       0b000000010001010000000,
  2110:       0b000000010000110000000,
  2111:       0b000000010000010000000,
  2112:       0b000000010000010000000,
  2113:       0b000000000000000000000,
  2114:       0b000000000000000000000,
  2115:     },  //0x4e N
  2116:     {
  2117:       0b000000000000000000000,
  2118:       0b000000000000000000000,
  2119:       0b000000000111000000000,
  2120:       0b000000001000100000000,
  2121:       0b000000010000010000000,
  2122:       0b000000010000010000000,
  2123:       0b000000010000010000000,
  2124:       0b000000010000010000000,
  2125:       0b000000010000010000000,
  2126:       0b000000001000100000000,
  2127:       0b000000000111000000000,
  2128:       0b000000000000000000000,
  2129:       0b000000000000000000000,
  2130:     },  //0x4f O
  2131:     {
  2132:       0b000000000000000000000,
  2133:       0b000000000000000000000,
  2134:       0b000000011111000000000,
  2135:       0b000000010000100000000,
  2136:       0b000000010000010000000,
  2137:       0b000000010000010000000,
  2138:       0b000000010000100000000,
  2139:       0b000000011111000000000,
  2140:       0b000000010000000000000,
  2141:       0b000000010000000000000,
  2142:       0b000000010000000000000,
  2143:       0b000000000000000000000,
  2144:       0b000000000000000000000,
  2145:     },  //0x50 P
  2146:     {
  2147:       0b000000000000000000000,
  2148:       0b000000000000000000000,
  2149:       0b000000000111000000000,
  2150:       0b000000001000100000000,
  2151:       0b000000010000010000000,
  2152:       0b000000010000010000000,
  2153:       0b000000010000010000000,
  2154:       0b000000010010010000000,
  2155:       0b000000010001010000000,
  2156:       0b000000001000100000000,
  2157:       0b000000000111010000000,
  2158:       0b000000000000000000000,
  2159:       0b000000000000000000000,
  2160:     },  //0x51 Q
  2161:     {
  2162:       0b000000000000000000000,
  2163:       0b000000000000000000000,
  2164:       0b000000011111000000000,
  2165:       0b000000010000100000000,
  2166:       0b000000010000010000000,
  2167:       0b000000010000010000000,
  2168:       0b000000010000100000000,
  2169:       0b000000011111000000000,
  2170:       0b000000010000100000000,
  2171:       0b000000010000010000000,
  2172:       0b000000010000010000000,
  2173:       0b000000000000000000000,
  2174:       0b000000000000000000000,
  2175:     },  //0x52 R
  2176:     {
  2177:       0b000000000000000000000,
  2178:       0b000000000000000000000,
  2179:       0b000000000111100000000,
  2180:       0b000000001000000000000,
  2181:       0b000000010000000000000,
  2182:       0b000000001000000000000,
  2183:       0b000000000111000000000,
  2184:       0b000000000000100000000,
  2185:       0b000000000000010000000,
  2186:       0b000000000000100000000,
  2187:       0b000000001111000000000,
  2188:       0b000000000000000000000,
  2189:       0b000000000000000000000,
  2190:     },  //0x53 S
  2191:     {
  2192:       0b000000000000000000000,
  2193:       0b000000000000000000000,
  2194:       0b000000011111110000000,
  2195:       0b000000000010000000000,
  2196:       0b000000000010000000000,
  2197:       0b000000000010000000000,
  2198:       0b000000000010000000000,
  2199:       0b000000000010000000000,
  2200:       0b000000000010000000000,
  2201:       0b000000000010000000000,
  2202:       0b000000000010000000000,
  2203:       0b000000000000000000000,
  2204:       0b000000000000000000000,
  2205:     },  //0x54 T
  2206:     {
  2207:       0b000000000000000000000,
  2208:       0b000000000000000000000,
  2209:       0b000000010000010000000,
  2210:       0b000000010000010000000,
  2211:       0b000000010000010000000,
  2212:       0b000000010000010000000,
  2213:       0b000000010000010000000,
  2214:       0b000000010000010000000,
  2215:       0b000000010000010000000,
  2216:       0b000000001000100000000,
  2217:       0b000000000111000000000,
  2218:       0b000000000000000000000,
  2219:       0b000000000000000000000,
  2220:     },  //0x55 U
  2221:     {
  2222:       0b000000000000000000000,
  2223:       0b000000000000000000000,
  2224:       0b000000010000010000000,
  2225:       0b000000010000010000000,
  2226:       0b000000010000010000000,
  2227:       0b000000010000010000000,
  2228:       0b000000001000100000000,
  2229:       0b000000001000100000000,
  2230:       0b000000000101000000000,
  2231:       0b000000000101000000000,
  2232:       0b000000000010000000000,
  2233:       0b000000000000000000000,
  2234:       0b000000000000000000000,
  2235:     },  //0x56 V
  2236:     {
  2237:       0b000000000000000000000,
  2238:       0b000000000000000000000,
  2239:       0b000000100010001000000,
  2240:       0b000000100010001000000,
  2241:       0b000000100010001000000,
  2242:       0b000000010101010000000,
  2243:       0b000000010101010000000,
  2244:       0b000000010101010000000,
  2245:       0b000000001000100000000,
  2246:       0b000000001000100000000,
  2247:       0b000000001000100000000,
  2248:       0b000000000000000000000,
  2249:       0b000000000000000000000,
  2250:     },  //0x57 W
  2251:     {
  2252:       0b000000000000000000000,
  2253:       0b000000000000000000000,
  2254:       0b000000010000010000000,
  2255:       0b000000010000010000000,
  2256:       0b000000001000100000000,
  2257:       0b000000000101000000000,
  2258:       0b000000000010000000000,
  2259:       0b000000000101000000000,
  2260:       0b000000001000100000000,
  2261:       0b000000010000010000000,
  2262:       0b000000010000010000000,
  2263:       0b000000000000000000000,
  2264:       0b000000000000000000000,
  2265:     },  //0x58 X
  2266:     {
  2267:       0b000000000000000000000,
  2268:       0b000000000000000000000,
  2269:       0b000000010000010000000,
  2270:       0b000000010000010000000,
  2271:       0b000000010000010000000,
  2272:       0b000000001000100000000,
  2273:       0b000000000101000000000,
  2274:       0b000000000010000000000,
  2275:       0b000000000010000000000,
  2276:       0b000000000010000000000,
  2277:       0b000000000010000000000,
  2278:       0b000000000000000000000,
  2279:       0b000000000000000000000,
  2280:     },  //0x59 Y
  2281:     {
  2282:       0b000000000000000000000,
  2283:       0b000000000000000000000,
  2284:       0b000000011111110000000,
  2285:       0b000000000000010000000,
  2286:       0b000000000000100000000,
  2287:       0b000000000001000000000,
  2288:       0b000000000010000000000,
  2289:       0b000000000100000000000,
  2290:       0b000000001000000000000,
  2291:       0b000000010000000000000,
  2292:       0b000000011111110000000,
  2293:       0b000000000000000000000,
  2294:       0b000000000000000000000,
  2295:     },  //0x5a Z
  2296:     {
  2297:       0b000000000000000000000,
  2298:       0b000000000000000000000,
  2299:       0b000000000111000000000,
  2300:       0b000000000100000000000,
  2301:       0b000000000100000000000,
  2302:       0b000000000100000000000,
  2303:       0b000000000100000000000,
  2304:       0b000000000100000000000,
  2305:       0b000000000100000000000,
  2306:       0b000000000100000000000,
  2307:       0b000000000111000000000,
  2308:       0b000000000000000000000,
  2309:       0b000000000000000000000,
  2310:     },  //0x5b [
  2311:     {
  2312:       0b000000000000000000000,
  2313:       0b000000000000000000000,
  2314:       0b000000010000010000000,
  2315:       0b000000001000100000000,
  2316:       0b000000000101000000000,
  2317:       0b000000000010000000000,
  2318:       0b000000011111110000000,
  2319:       0b000000000010000000000,
  2320:       0b000000011111110000000,
  2321:       0b000000000010000000000,
  2322:       0b000000000010000000000,
  2323:       0b000000000000000000000,
  2324:       0b000000000000000000000,
  2325:     },  //0x5c ¥
  2326:     {
  2327:       0b000000000000000000000,
  2328:       0b000000000000000000000,
  2329:       0b000000000111000000000,
  2330:       0b000000000001000000000,
  2331:       0b000000000001000000000,
  2332:       0b000000000001000000000,
  2333:       0b000000000001000000000,
  2334:       0b000000000001000000000,
  2335:       0b000000000001000000000,
  2336:       0b000000000001000000000,
  2337:       0b000000000111000000000,
  2338:       0b000000000000000000000,
  2339:       0b000000000000000000000,
  2340:     },  //0x5d ]
  2341:     {
  2342:       0b000000000000000000000,
  2343:       0b000000000000000000000,
  2344:       0b000000000010000000000,
  2345:       0b000000000101000000000,
  2346:       0b000000001000100000000,
  2347:       0b000000010000010000000,
  2348:       0b000000000000000000000,
  2349:       0b000000000000000000000,
  2350:       0b000000000000000000000,
  2351:       0b000000000000000000000,
  2352:       0b000000000000000000000,
  2353:       0b000000000000000000000,
  2354:       0b000000000000000000000,
  2355:     },  //0x5e ^
  2356:     {
  2357:       0b000000000000000000000,
  2358:       0b000000000000000000000,
  2359:       0b000000000000000000000,
  2360:       0b000000000000000000000,
  2361:       0b000000000000000000000,
  2362:       0b000000000000000000000,
  2363:       0b000000000000000000000,
  2364:       0b000000000000000000000,
  2365:       0b000000000000000000000,
  2366:       0b000000011111110000000,
  2367:       0b000000000000000000000,
  2368:       0b000000000000000000000,
  2369:       0b000000000000000000000,
  2370:     },  //0x5f _
  2371:     {
  2372:       0b000000000000000000000,
  2373:       0b000000000000000000000,
  2374:       0b000000000100000000000,
  2375:       0b000000000100000000000,
  2376:       0b000000000010000000000,
  2377:       0b000000000001000000000,
  2378:       0b000000000000000000000,
  2379:       0b000000000000000000000,
  2380:       0b000000000000000000000,
  2381:       0b000000000000000000000,
  2382:       0b000000000000000000000,
  2383:       0b000000000000000000000,
  2384:       0b000000000000000000000,
  2385:     },  //0x60 `
  2386:     {
  2387:       0b000000000000000000000,
  2388:       0b000000000000000000000,
  2389:       0b000000000000000000000,
  2390:       0b000000000000000000000,
  2391:       0b000000000000000000000,
  2392:       0b000000000111100000000,
  2393:       0b000000001000100000000,
  2394:       0b000000001000100000000,
  2395:       0b000000001001100000000,
  2396:       0b000000000110100000000,
  2397:       0b000000000000000000000,
  2398:       0b000000000000000000000,
  2399:       0b000000000000000000000,
  2400:     },  //0x61 a
  2401:     {
  2402:       0b000000000000000000000,
  2403:       0b000000000000000000000,
  2404:       0b000000001000000000000,
  2405:       0b000000001000000000000,
  2406:       0b000000001000000000000,
  2407:       0b000000001011000000000,
  2408:       0b000000001100100000000,
  2409:       0b000000001000100000000,
  2410:       0b000000001000100000000,
  2411:       0b000000001111000000000,
  2412:       0b000000000000000000000,
  2413:       0b000000000000000000000,
  2414:       0b000000000000000000000,
  2415:     },  //0x62 b
  2416:     {
  2417:       0b000000000000000000000,
  2418:       0b000000000000000000000,
  2419:       0b000000000000000000000,
  2420:       0b000000000000000000000,
  2421:       0b000000000000000000000,
  2422:       0b000000000111000000000,
  2423:       0b000000001000000000000,
  2424:       0b000000001000000000000,
  2425:       0b000000001000100000000,
  2426:       0b000000000111000000000,
  2427:       0b000000000000000000000,
  2428:       0b000000000000000000000,
  2429:       0b000000000000000000000,
  2430:     },  //0x63 c
  2431:     {
  2432:       0b000000000000000000000,
  2433:       0b000000000000000000000,
  2434:       0b000000000000100000000,
  2435:       0b000000000000100000000,
  2436:       0b000000000000100000000,
  2437:       0b000000000111100000000,
  2438:       0b000000001000100000000,
  2439:       0b000000001000100000000,
  2440:       0b000000001001100000000,
  2441:       0b000000000110100000000,
  2442:       0b000000000000000000000,
  2443:       0b000000000000000000000,
  2444:       0b000000000000000000000,
  2445:     },  //0x64 d
  2446:     {
  2447:       0b000000000000000000000,
  2448:       0b000000000000000000000,
  2449:       0b000000000000000000000,
  2450:       0b000000000000000000000,
  2451:       0b000000000000000000000,
  2452:       0b000000000111000000000,
  2453:       0b000000001000100000000,
  2454:       0b000000001111100000000,
  2455:       0b000000001000000000000,
  2456:       0b000000000111000000000,
  2457:       0b000000000000000000000,
  2458:       0b000000000000000000000,
  2459:       0b000000000000000000000,
  2460:     },  //0x65 e
  2461:     {
  2462:       0b000000000000000000000,
  2463:       0b000000000000000000000,
  2464:       0b000000000001100000000,
  2465:       0b000000000010000000000,
  2466:       0b000000000010000000000,
  2467:       0b000000001111100000000,
  2468:       0b000000000010000000000,
  2469:       0b000000000010000000000,
  2470:       0b000000000010000000000,
  2471:       0b000000000010000000000,
  2472:       0b000000000000000000000,
  2473:       0b000000000000000000000,
  2474:       0b000000000000000000000,
  2475:     },  //0x66 f
  2476:     {
  2477:       0b000000000000000000000,
  2478:       0b000000000000000000000,
  2479:       0b000000000000000000000,
  2480:       0b000000000000000000000,
  2481:       0b000000000111100000000,
  2482:       0b000000001000100000000,
  2483:       0b000000001000100000000,
  2484:       0b000000001000100000000,
  2485:       0b000000000111100000000,
  2486:       0b000000000000100000000,
  2487:       0b000000000111000000000,
  2488:       0b000000000000000000000,
  2489:       0b000000000000000000000,
  2490:     },  //0x67 g
  2491:     {
  2492:       0b000000000000000000000,
  2493:       0b000000000000000000000,
  2494:       0b000000001000000000000,
  2495:       0b000000001000000000000,
  2496:       0b000000001000000000000,
  2497:       0b000000001111000000000,
  2498:       0b000000001000100000000,
  2499:       0b000000001000100000000,
  2500:       0b000000001000100000000,
  2501:       0b000000001000100000000,
  2502:       0b000000000000000000000,
  2503:       0b000000000000000000000,
  2504:       0b000000000000000000000,
  2505:     },  //0x68 h
  2506:     {
  2507:       0b000000000000000000000,
  2508:       0b000000000000000000000,
  2509:       0b000000000010000000000,
  2510:       0b000000000000000000000,
  2511:       0b000000000000000000000,
  2512:       0b000000000010000000000,
  2513:       0b000000000010000000000,
  2514:       0b000000000010000000000,
  2515:       0b000000000010000000000,
  2516:       0b000000000010000000000,
  2517:       0b000000000000000000000,
  2518:       0b000000000000000000000,
  2519:       0b000000000000000000000,
  2520:     },  //0x69 i
  2521:     {
  2522:       0b000000000000000000000,
  2523:       0b000000000000000000000,
  2524:       0b000000000000100000000,
  2525:       0b000000000000000000000,
  2526:       0b000000000000000000000,
  2527:       0b000000000000100000000,
  2528:       0b000000000000100000000,
  2529:       0b000000000000100000000,
  2530:       0b000000000000100000000,
  2531:       0b000000001000100000000,
  2532:       0b000000000111000000000,
  2533:       0b000000000000000000000,
  2534:       0b000000000000000000000,
  2535:     },  //0x6a j
  2536:     {
  2537:       0b000000000000000000000,
  2538:       0b000000000000000000000,
  2539:       0b000000001000000000000,
  2540:       0b000000001000000000000,
  2541:       0b000000001000000000000,
  2542:       0b000000001001100000000,
  2543:       0b000000001010000000000,
  2544:       0b000000001110000000000,
  2545:       0b000000001001000000000,
  2546:       0b000000001000100000000,
  2547:       0b000000000000000000000,
  2548:       0b000000000000000000000,
  2549:       0b000000000000000000000,
  2550:     },  //0x6b k
  2551:     {
  2552:       0b000000000000000000000,
  2553:       0b000000000000000000000,
  2554:       0b000000000010000000000,
  2555:       0b000000000010000000000,
  2556:       0b000000000010000000000,
  2557:       0b000000000010000000000,
  2558:       0b000000000010000000000,
  2559:       0b000000000010000000000,
  2560:       0b000000000010000000000,
  2561:       0b000000000010000000000,
  2562:       0b000000000000000000000,
  2563:       0b000000000000000000000,
  2564:       0b000000000000000000000,
  2565:     },  //0x6c l
  2566:     {
  2567:       0b000000000000000000000,
  2568:       0b000000000000000000000,
  2569:       0b000000000000000000000,
  2570:       0b000000000000000000000,
  2571:       0b000000000000000000000,
  2572:       0b000000011101100000000,
  2573:       0b000000010010010000000,
  2574:       0b000000010010010000000,
  2575:       0b000000010010010000000,
  2576:       0b000000010010010000000,
  2577:       0b000000000000000000000,
  2578:       0b000000000000000000000,
  2579:       0b000000000000000000000,
  2580:     },  //0x6d m
  2581:     {
  2582:       0b000000000000000000000,
  2583:       0b000000000000000000000,
  2584:       0b000000000000000000000,
  2585:       0b000000000000000000000,
  2586:       0b000000000000000000000,
  2587:       0b000000001011000000000,
  2588:       0b000000001100100000000,
  2589:       0b000000001000100000000,
  2590:       0b000000001000100000000,
  2591:       0b000000001000100000000,
  2592:       0b000000000000000000000,
  2593:       0b000000000000000000000,
  2594:       0b000000000000000000000,
  2595:     },  //0x6e n
  2596:     {
  2597:       0b000000000000000000000,
  2598:       0b000000000000000000000,
  2599:       0b000000000000000000000,
  2600:       0b000000000000000000000,
  2601:       0b000000000000000000000,
  2602:       0b000000000111000000000,
  2603:       0b000000001000100000000,
  2604:       0b000000001000100000000,
  2605:       0b000000001000100000000,
  2606:       0b000000000111000000000,
  2607:       0b000000000000000000000,
  2608:       0b000000000000000000000,
  2609:       0b000000000000000000000,
  2610:     },  //0x6f o
  2611:     {
  2612:       0b000000000000000000000,
  2613:       0b000000000000000000000,
  2614:       0b000000000000000000000,
  2615:       0b000000000000000000000,
  2616:       0b000000001011000000000,
  2617:       0b000000001100100000000,
  2618:       0b000000001000100000000,
  2619:       0b000000001000100000000,
  2620:       0b000000001111000000000,
  2621:       0b000000001000000000000,
  2622:       0b000000001000000000000,
  2623:       0b000000000000000000000,
  2624:       0b000000000000000000000,
  2625:     },  //0x70 p
  2626:     {
  2627:       0b000000000000000000000,
  2628:       0b000000000000000000000,
  2629:       0b000000000000000000000,
  2630:       0b000000000000000000000,
  2631:       0b000000000110100000000,
  2632:       0b000000001001100000000,
  2633:       0b000000001000100000000,
  2634:       0b000000001000100000000,
  2635:       0b000000000111100000000,
  2636:       0b000000000000100000000,
  2637:       0b000000000000100000000,
  2638:       0b000000000000000000000,
  2639:       0b000000000000000000000,
  2640:     },  //0x71 q
  2641:     {
  2642:       0b000000000000000000000,
  2643:       0b000000000000000000000,
  2644:       0b000000000000000000000,
  2645:       0b000000000000000000000,
  2646:       0b000000000000000000000,
  2647:       0b000000001011000000000,
  2648:       0b000000001100100000000,
  2649:       0b000000001000000000000,
  2650:       0b000000001000000000000,
  2651:       0b000000001000000000000,
  2652:       0b000000000000000000000,
  2653:       0b000000000000000000000,
  2654:       0b000000000000000000000,
  2655:     },  //0x72 r
  2656:     {
  2657:       0b000000000000000000000,
  2658:       0b000000000000000000000,
  2659:       0b000000000000000000000,
  2660:       0b000000000000000000000,
  2661:       0b000000000000000000000,
  2662:       0b000000000111100000000,
  2663:       0b000000001000000000000,
  2664:       0b000000000111000000000,
  2665:       0b000000000000100000000,
  2666:       0b000000001111000000000,
  2667:       0b000000000000000000000,
  2668:       0b000000000000000000000,
  2669:       0b000000000000000000000,
  2670:     },  //0x73 s
  2671:     {
  2672:       0b000000000000000000000,
  2673:       0b000000000000000000000,
  2674:       0b000000000010000000000,
  2675:       0b000000000010000000000,
  2676:       0b000000000010000000000,
  2677:       0b000000001111100000000,
  2678:       0b000000000010000000000,
  2679:       0b000000000010000000000,
  2680:       0b000000000010000000000,
  2681:       0b000000000001100000000,
  2682:       0b000000000000000000000,
  2683:       0b000000000000000000000,
  2684:       0b000000000000000000000,
  2685:     },  //0x74 t
  2686:     {
  2687:       0b000000000000000000000,
  2688:       0b000000000000000000000,
  2689:       0b000000000000000000000,
  2690:       0b000000000000000000000,
  2691:       0b000000000000000000000,
  2692:       0b000000001000100000000,
  2693:       0b000000001000100000000,
  2694:       0b000000001000100000000,
  2695:       0b000000001001100000000,
  2696:       0b000000000110100000000,
  2697:       0b000000000000000000000,
  2698:       0b000000000000000000000,
  2699:       0b000000000000000000000,
  2700:     },  //0x75 u
  2701:     {
  2702:       0b000000000000000000000,
  2703:       0b000000000000000000000,
  2704:       0b000000000000000000000,
  2705:       0b000000000000000000000,
  2706:       0b000000000000000000000,
  2707:       0b000000001000100000000,
  2708:       0b000000001000100000000,
  2709:       0b000000000101000000000,
  2710:       0b000000000101000000000,
  2711:       0b000000000010000000000,
  2712:       0b000000000000000000000,
  2713:       0b000000000000000000000,
  2714:       0b000000000000000000000,
  2715:     },  //0x76 v
  2716:     {
  2717:       0b000000000000000000000,
  2718:       0b000000000000000000000,
  2719:       0b000000000000000000000,
  2720:       0b000000000000000000000,
  2721:       0b000000000000000000000,
  2722:       0b000000010010010000000,
  2723:       0b000000010010010000000,
  2724:       0b000000010010010000000,
  2725:       0b000000010010010000000,
  2726:       0b000000001101110000000,
  2727:       0b000000000000000000000,
  2728:       0b000000000000000000000,
  2729:       0b000000000000000000000,
  2730:     },  //0x77 w
  2731:     {
  2732:       0b000000000000000000000,
  2733:       0b000000000000000000000,
  2734:       0b000000000000000000000,
  2735:       0b000000000000000000000,
  2736:       0b000000000000000000000,
  2737:       0b000000001000100000000,
  2738:       0b000000000101000000000,
  2739:       0b000000000010000000000,
  2740:       0b000000000101000000000,
  2741:       0b000000001000100000000,
  2742:       0b000000000000000000000,
  2743:       0b000000000000000000000,
  2744:       0b000000000000000000000,
  2745:     },  //0x78 x
  2746:     {
  2747:       0b000000000000000000000,
  2748:       0b000000000000000000000,
  2749:       0b000000000000000000000,
  2750:       0b000000000000000000000,
  2751:       0b000000001000100000000,
  2752:       0b000000001000100000000,
  2753:       0b000000001000100000000,
  2754:       0b000000001000100000000,
  2755:       0b000000000111100000000,
  2756:       0b000000000000100000000,
  2757:       0b000000000111000000000,
  2758:       0b000000000000000000000,
  2759:       0b000000000000000000000,
  2760:     },  //0x79 y
  2761:     {
  2762:       0b000000000000000000000,
  2763:       0b000000000000000000000,
  2764:       0b000000000000000000000,
  2765:       0b000000000000000000000,
  2766:       0b000000000000000000000,
  2767:       0b000000001111100000000,
  2768:       0b000000000001000000000,
  2769:       0b000000000010000000000,
  2770:       0b000000000100000000000,
  2771:       0b000000001111100000000,
  2772:       0b000000000000000000000,
  2773:       0b000000000000000000000,
  2774:       0b000000000000000000000,
  2775:     },  //0x7a z
  2776:     {
  2777:       0b000000000000000000000,
  2778:       0b000000000000000000000,
  2779:       0b000000000001000000000,
  2780:       0b000000000010000000000,
  2781:       0b000000000010000000000,
  2782:       0b000000000010000000000,
  2783:       0b000000000100000000000,
  2784:       0b000000000010000000000,
  2785:       0b000000000010000000000,
  2786:       0b000000000010000000000,
  2787:       0b000000000001000000000,
  2788:       0b000000000000000000000,
  2789:       0b000000000000000000000,
  2790:     },  //0x7b {
  2791:     {
  2792:       0b000000000000000000000,
  2793:       0b000000000000000000000,
  2794:       0b000000000010000000000,
  2795:       0b000000000010000000000,
  2796:       0b000000000010000000000,
  2797:       0b000000000010000000000,
  2798:       0b000000000010000000000,
  2799:       0b000000000010000000000,
  2800:       0b000000000010000000000,
  2801:       0b000000000010000000000,
  2802:       0b000000000010000000000,
  2803:       0b000000000000000000000,
  2804:       0b000000000000000000000,
  2805:     },  //0x7c |
  2806:     {
  2807:       0b000000000000000000000,
  2808:       0b000000000000000000000,
  2809:       0b000000000100000000000,
  2810:       0b000000000010000000000,
  2811:       0b000000000010000000000,
  2812:       0b000000000010000000000,
  2813:       0b000000000001000000000,
  2814:       0b000000000010000000000,
  2815:       0b000000000010000000000,
  2816:       0b000000000010000000000,
  2817:       0b000000000100000000000,
  2818:       0b000000000000000000000,
  2819:       0b000000000000000000000,
  2820:     },  //0x7d }
  2821:     {
  2822:       0b000000000000000000000,
  2823:       0b000000000000000000000,
  2824:       0b000000011111110000000,
  2825:       0b000000000000000000000,
  2826:       0b000000000000000000000,
  2827:       0b000000000000000000000,
  2828:       0b000000000000000000000,
  2829:       0b000000000000000000000,
  2830:       0b000000000000000000000,
  2831:       0b000000000000000000000,
  2832:       0b000000000000000000000,
  2833:       0b000000000000000000000,
  2834:       0b000000000000000000000,
  2835:     },  //0x7e ¯
  2836:     {
  2837:       0b000000000000000000000,
  2838:       0b000000000000000000000,
  2839:       0b000000100000011100000,
  2840:       0b000001010000100010000,
  2841:       0b000010001001000001000,
  2842:       0b000100000100000001000,
  2843:       0b000000000000000010000,
  2844:       0b000000000000000100000,
  2845:       0b000000000000001000000,
  2846:       0b000000000000000000000,
  2847:       0b000000000000001000000,
  2848:       0b000000000000000000000,
  2849:       0b000000000000000000000,
  2850:     },  //0x7f ^?
  2851:     {
  2852:       0b000000000000000000000,
  2853:       0b000000000000000000000,
  2854:       0b000000010000000000000,
  2855:       0b000000001000000000000,
  2856:       0b000000000100000000000,
  2857:       0b000000000100000000000,
  2858:       0b000000000010000000000,
  2859:       0b000000000001000000000,
  2860:       0b000000000001000000000,
  2861:       0b000000000000100000000,
  2862:       0b000000000000010000000,
  2863:       0b000000000000000000000,
  2864:       0b000000000000000000000,
  2865:     },  //0x80 \
  2866:     {
  2867:       0b000000000000000000000,
  2868:       0b000000000000000000000,
  2869:       0b000000001100000000000,
  2870:       0b000000010010010000000,
  2871:       0b000000000001100000000,
  2872:       0b000000000000000000000,
  2873:       0b000000000000000000000,
  2874:       0b000000000000000000000,
  2875:       0b000000000000000000000,
  2876:       0b000000000000000000000,
  2877:       0b000000000000000000000,
  2878:       0b000000000000000000000,
  2879:       0b000000000000000000000,
  2880:     },  //0x81 ~
  2881:     {
  2882:       0b000000000000000000000,
  2883:       0b000000000000000000000,
  2884:       0b000000000010000000000,
  2885:       0b000000000010000000000,
  2886:       0b000000000010000000000,
  2887:       0b000000000010000000000,
  2888:       0b000000000000000000000,
  2889:       0b000000000010000000000,
  2890:       0b000000000010000000000,
  2891:       0b000000000010000000000,
  2892:       0b000000000010000000000,
  2893:       0b000000000000000000000,
  2894:       0b000000000000000000000,
  2895:     },  //0x82 ¦
  2896:     {
  2897:       0b000000000000000000000,
  2898:       0b000000000000000000000,
  2899:       0b000000100001000000000,
  2900:       0b000001010000100000000,
  2901:       0b000010001000010000000,
  2902:       0b000100000100010000000,
  2903:       0b000000000000001000000,
  2904:       0b000000000000000100000,
  2905:       0b000000000000000100000,
  2906:       0b000000000000000010000,
  2907:       0b000000000000000001000,
  2908:       0b000000000000000000000,
  2909:       0b000000000000000000000,
  2910:     },  //0x83 ^\
  2911:     {
  2912:       0b000000000000000000000,
  2913:       0b000000000000000000000,
  2914:       0b000000000000000000000,
  2915:       0b011101010111011101100,
  2916:       0b010001010010010001010,
  2917:       0b010001110010010001010,
  2918:       0b011101110010011101100,
  2919:       0b010001110010010001010,
  2920:       0b010001010010010001010,
  2921:       0b011101010010011101010,
  2922:       0b000000000000000000000,
  2923:       0b000000000000000000000,
  2924:       0b000000000000000000000,
  2925:     },  //0x84 ENTER
  2926:     null,  //0x85
  2927:     {
  2928:       0b000000000000000000000,
  2929:       0b000000000000000000000,
  2930:       0b000000000010000000000,
  2931:       0b000000011111100000000,
  2932:       0b000000000100000000000,
  2933:       0b000000001110000000000,
  2934:       0b000000010011100000000,
  2935:       0b000000000101000000000,
  2936:       0b000000001001000000000,
  2937:       0b000000001000000000000,
  2938:       0b000000000111100000000,
  2939:       0b000000000000000000000,
  2940:       0b000000000000000000000,
  2941:     },  //0x86 を
  2942:     {
  2943:       0b000000000000000000000,
  2944:       0b000000000000000000000,
  2945:       0b000000000000000000000,
  2946:       0b000000000100000000000,
  2947:       0b000000011111110000000,
  2948:       0b000000000100000000000,
  2949:       0b000000001111100000000,
  2950:       0b000000010101010000000,
  2951:       0b000000010010010000000,
  2952:       0b000000001100100000000,
  2953:       0b000000000000000000000,
  2954:       0b000000000000000000000,
  2955:       0b000000000000000000000,
  2956:     },  //0x87 ぁ
  2957:     {
  2958:       0b000000000000000000000,
  2959:       0b000000000000000000000,
  2960:       0b000000000000000000000,
  2961:       0b000000000000000000000,
  2962:       0b000000010001000000000,
  2963:       0b000000010000100000000,
  2964:       0b000000010000100000000,
  2965:       0b000000010000010000000,
  2966:       0b000000010100010000000,
  2967:       0b000000001000000000000,
  2968:       0b000000000000000000000,
  2969:       0b000000000000000000000,
  2970:       0b000000000000000000000,
  2971:     },  //0x88 ぃ
  2972:     {
  2973:       0b000000000000000000000,
  2974:       0b000000000000000000000,
  2975:       0b000000000000000000000,
  2976:       0b000000001110000000000,
  2977:       0b000000000000000000000,
  2978:       0b000000001111000000000,
  2979:       0b000000000000100000000,
  2980:       0b000000000000100000000,
  2981:       0b000000000001000000000,
  2982:       0b000000000110000000000,
  2983:       0b000000000000000000000,
  2984:       0b000000000000000000000,
  2985:       0b000000000000000000000,
  2986:     },  //0x89 ぅ
  2987:     {
  2988:       0b000000000000000000000,
  2989:       0b000000000000000000000,
  2990:       0b000000000000000000000,
  2991:       0b000000000111000000000,
  2992:       0b000000000000000000000,
  2993:       0b000000001111100000000,
  2994:       0b000000000001000000000,
  2995:       0b000000000010000000000,
  2996:       0b000000000110000000000,
  2997:       0b000000001001100000000,
  2998:       0b000000000000000000000,
  2999:       0b000000000000000000000,
  3000:       0b000000000000000000000,
  3001:     },  //0x8a ぇ
  3002:     {
  3003:       0b000000000000000000000,
  3004:       0b000000000000000000000,
  3005:       0b000000000000000000000,
  3006:       0b000000000100000000000,
  3007:       0b000000011110100000000,
  3008:       0b000000000100100000000,
  3009:       0b000000001111000000000,
  3010:       0b000000010100100000000,
  3011:       0b000000010100100000000,
  3012:       0b000000001101000000000,
  3013:       0b000000000000000000000,
  3014:       0b000000000000000000000,
  3015:       0b000000000000000000000,
  3016:     },  //0x8b ぉ
  3017:     {
  3018:       0b000000000000000000000,
  3019:       0b000000000000000000000,
  3020:       0b000000000000000000000,
  3021:       0b000000000000000000000,
  3022:       0b000000001010000000000,
  3023:       0b000000001111100000000,
  3024:       0b000000011001010000000,
  3025:       0b000000000101010000000,
  3026:       0b000000000100000000000,
  3027:       0b000000000010000000000,
  3028:       0b000000000000000000000,
  3029:       0b000000000000000000000,
  3030:       0b000000000000000000000,
  3031:     },  //0x8c ゃ
  3032:     {
  3033:       0b000000000000000000000,
  3034:       0b000000000000000000000,
  3035:       0b000000000000000000000,
  3036:       0b000000000000000000000,
  3037:       0b000000010010000000000,
  3038:       0b000000010111000000000,
  3039:       0b000000011010100000000,
  3040:       0b000000010010100000000,
  3041:       0b000000010100100000000,
  3042:       0b000000000101000000000,
  3043:       0b000000000000000000000,
  3044:       0b000000000000000000000,
  3045:       0b000000000000000000000,
  3046:     },  //0x8d ゅ
  3047:     {
  3048:       0b000000000000000000000,
  3049:       0b000000000000000000000,
  3050:       0b000000000000000000000,
  3051:       0b000000000010000000000,
  3052:       0b000000000010000000000,
  3053:       0b000000000011100000000,
  3054:       0b000000000010000000000,
  3055:       0b000000000111000000000,
  3056:       0b000000001010100000000,
  3057:       0b000000000100000000000,
  3058:       0b000000000000000000000,
  3059:       0b000000000000000000000,
  3060:       0b000000000000000000000,
  3061:     },  //0x8e ょ
  3062:     {
  3063:       0b000000000000000000000,
  3064:       0b000000000000000000000,
  3065:       0b000000000000000000000,
  3066:       0b000000000000000000000,
  3067:       0b000000000000000000000,
  3068:       0b000000011111000000000,
  3069:       0b000000000000100000000,
  3070:       0b000000000000100000000,
  3071:       0b000000000001000000000,
  3072:       0b000000000110000000000,
  3073:       0b000000000000000000000,
  3074:       0b000000000000000000000,
  3075:       0b000000000000000000000,
  3076:     },  //0x8f っ
  3077:     null,  //0x90
  3078:     {
  3079:       0b000000000000000000000,
  3080:       0b000000000000000000000,
  3081:       0b000000000100000000000,
  3082:       0b000000011111110000000,
  3083:       0b000000000100000000000,
  3084:       0b000000001111100000000,
  3085:       0b000000010101010000000,
  3086:       0b000000100101001000000,
  3087:       0b000000100101001000000,
  3088:       0b000000100010001000000,
  3089:       0b000000011100010000000,
  3090:       0b000000000000000000000,
  3091:       0b000000000000000000000,
  3092:     },  //0x91 あ
  3093:     {
  3094:       0b000000000000000000000,
  3095:       0b000000000000000000000,
  3096:       0b000000100000100000000,
  3097:       0b000000100000010000000,
  3098:       0b000000100000010000000,
  3099:       0b000000100000010000000,
  3100:       0b000000100000001000000,
  3101:       0b000000100000001000000,
  3102:       0b000000101000001000000,
  3103:       0b000000010000000000000,
  3104:       0b000000000000000000000,
  3105:       0b000000000000000000000,
  3106:       0b000000000000000000000,
  3107:     },  //0x92 い
  3108:     {
  3109:       0b000000000000000000000,
  3110:       0b000000000000000000000,
  3111:       0b000000001111000000000,
  3112:       0b000000000000000000000,
  3113:       0b000000001111000000000,
  3114:       0b000000110000100000000,
  3115:       0b000000000000010000000,
  3116:       0b000000000000010000000,
  3117:       0b000000000000100000000,
  3118:       0b000000000001000000000,
  3119:       0b000000000110000000000,
  3120:       0b000000000000000000000,
  3121:       0b000000000000000000000,
  3122:     },  //0x93 う
  3123:     {
  3124:       0b000000000000000000000,
  3125:       0b000000000000000000000,
  3126:       0b000000000111000000000,
  3127:       0b000000000000000000000,
  3128:       0b000000011111110000000,
  3129:       0b000000000000100000000,
  3130:       0b000000000001000000000,
  3131:       0b000000000010000000000,
  3132:       0b000000000101000000000,
  3133:       0b000000001001000000000,
  3134:       0b000000010000110000000,
  3135:       0b000000000000000000000,
  3136:       0b000000000000000000000,
  3137:     },  //0x94 え
  3138:     {
  3139:       0b000000000000000000000,
  3140:       0b000000000000000000000,
  3141:       0b000000001000000000000,
  3142:       0b000000111110100000000,
  3143:       0b000000001000010000000,
  3144:       0b000000001111001000000,
  3145:       0b000000011000100000000,
  3146:       0b000000101000010000000,
  3147:       0b000001001000010000000,
  3148:       0b000000101000100000000,
  3149:       0b000000011001000000000,
  3150:       0b000000000000000000000,
  3151:       0b000000000000000000000,
  3152:     },  //0x95 お
  3153:     {
  3154:       0b000000000000000000000,
  3155:       0b000000000000000000000,
  3156:       0b000000000100100000000,
  3157:       0b000000000100010000000,
  3158:       0b000000111110010000000,
  3159:       0b000000001001001000000,
  3160:       0b000000001001001000000,
  3161:       0b000000010001000000000,
  3162:       0b000000010001000000000,
  3163:       0b000000100001000000000,
  3164:       0b000000100110000000000,
  3165:       0b000000000000000000000,
  3166:       0b000000000000000000000,
  3167:     },  //0x96 か
  3168:     {
  3169:       0b000000000000000000000,
  3170:       0b000000000000000000000,
  3171:       0b000000000100000000000,
  3172:       0b000000011111110000000,
  3173:       0b000000000010000000000,
  3174:       0b000000011111110000000,
  3175:       0b000000000001000000000,
  3176:       0b000000001111100000000,
  3177:       0b000000010000010000000,
  3178:       0b000000010000000000000,
  3179:       0b000000001111110000000,
  3180:       0b000000000000000000000,
  3181:       0b000000000000000000000,
  3182:     },  //0x97 き
  3183:     {
  3184:       0b000000000000000000000,
  3185:       0b000000000000000000000,
  3186:       0b000000000000100000000,
  3187:       0b000000000001000000000,
  3188:       0b000000000010000000000,
  3189:       0b000000000100000000000,
  3190:       0b000000001000000000000,
  3191:       0b000000000100000000000,
  3192:       0b000000000010000000000,
  3193:       0b000000000001000000000,
  3194:       0b000000000000100000000,
  3195:       0b000000000000000000000,
  3196:       0b000000000000000000000,
  3197:     },  //0x98 く
  3198:     {
  3199:       0b000000000000000000000,
  3200:       0b000000000000000000000,
  3201:       0b000000100001000000000,
  3202:       0b000000100001000000000,
  3203:       0b000000101111110000000,
  3204:       0b000000100001000000000,
  3205:       0b000000100001000000000,
  3206:       0b000000100001000000000,
  3207:       0b000000100001000000000,
  3208:       0b000000100010000000000,
  3209:       0b000000100100000000000,
  3210:       0b000000000000000000000,
  3211:       0b000000000000000000000,
  3212:     },  //0x99 け
  3213:     {
  3214:       0b000000000000000000000,
  3215:       0b000000000000000000000,
  3216:       0b000000001111100000000,
  3217:       0b000000000000010000000,
  3218:       0b000000000000100000000,
  3219:       0b000000000001000000000,
  3220:       0b000000000000000000000,
  3221:       0b000000001000000000000,
  3222:       0b000000010000000000000,
  3223:       0b000000001111110000000,
  3224:       0b000000000000000000000,
  3225:       0b000000000000000000000,
  3226:       0b000000000000000000000,
  3227:     },  //0x9a こ
  3228:     {
  3229:       0b000000000000000000000,
  3230:       0b000000000000000000000,
  3231:       0b000000001000000000000,
  3232:       0b000000000100100000000,
  3233:       0b000000011111000000000,
  3234:       0b000000000010000000000,
  3235:       0b000000000001000000000,
  3236:       0b000000001111100000000,
  3237:       0b000000010000000000000,
  3238:       0b000000010000000000000,
  3239:       0b000000001111110000000,
  3240:       0b000000000000000000000,
  3241:       0b000000000000000000000,
  3242:     },  //0x9b さ
  3243:     {
  3244:       0b000000000000000000000,
  3245:       0b000000000000000000000,
  3246:       0b000000010000000000000,
  3247:       0b000000010000000000000,
  3248:       0b000000010000000000000,
  3249:       0b000000010000000000000,
  3250:       0b000000010000000000000,
  3251:       0b000000010000010000000,
  3252:       0b000000010000010000000,
  3253:       0b000000001000100000000,
  3254:       0b000000000111000000000,
  3255:       0b000000000000000000000,
  3256:       0b000000000000000000000,
  3257:     },  //0x9c し
  3258:     {
  3259:       0b000000000000000000000,
  3260:       0b000000000000000000000,
  3261:       0b000000000001000000000,
  3262:       0b000000111111110000000,
  3263:       0b000000000001000000000,
  3264:       0b000000001101000000000,
  3265:       0b000000010011000000000,
  3266:       0b000000010011000000000,
  3267:       0b000000001101000000000,
  3268:       0b000000000001000000000,
  3269:       0b000000000110000000000,
  3270:       0b000000000000000000000,
  3271:       0b000000000000000000000,
  3272:     },  //0x9d す
  3273:     {
  3274:       0b000000000000000000000,
  3275:       0b000000000000000000000,
  3276:       0b000000001000100000000,
  3277:       0b000000001000100000000,
  3278:       0b000000111111111000000,
  3279:       0b000000001000100000000,
  3280:       0b000000001001100000000,
  3281:       0b000000001000000000000,
  3282:       0b000000001000000000000,
  3283:       0b000000001000000000000,
  3284:       0b000000000111110000000,
  3285:       0b000000000000000000000,
  3286:       0b000000000000000000000,
  3287:     },  //0x9e せ
  3288:     {
  3289:       0b000000000000000000000,
  3290:       0b000000000000000000000,
  3291:       0b000000001111100000000,
  3292:       0b000000000001000000000,
  3293:       0b000000000010000000000,
  3294:       0b000000001100000000000,
  3295:       0b000000111111111000000,
  3296:       0b000000000110000000000,
  3297:       0b000000001000000000000,
  3298:       0b000000001000000000000,
  3299:       0b000000000111110000000,
  3300:       0b000000000000000000000,
  3301:       0b000000000000000000000,
  3302:     },  //0x9f そ
  3303:     {
  3304:       0b000000000000000000000,
  3305:       0b000000000000000000000,
  3306:       0b000000010101010000000,
  3307:       0b000000000000000000000,
  3308:       0b000000010101010000000,
  3309:       0b000000000000000000000,
  3310:       0b000000010101010000000,
  3311:       0b000000000000000000000,
  3312:       0b000000010101010000000,
  3313:       0b000000000000000000000,
  3314:       0b000000010101010000000,
  3315:       0b000000000000000000000,
  3316:       0b000000000000000000000,
  3317:     },  //0xa0 □
  3318:     {
  3319:       0b000000000000000000000,
  3320:       0b000000000000000000000,
  3321:       0b000000000000000000000,
  3322:       0b000000000000000000000,
  3323:       0b000000000000000000000,
  3324:       0b000000000000000000000,
  3325:       0b000000000000000000000,
  3326:       0b000000000110000000000,
  3327:       0b000000001001000000000,
  3328:       0b000000001001000000000,
  3329:       0b000000000110000000000,
  3330:       0b000000000000000000000,
  3331:       0b000000000000000000000,
  3332:     },  //0xa1 。
  3333:     {
  3334:       0b000000000000000000000,
  3335:       0b000000000000000000000,
  3336:       0b000000001111100000000,
  3337:       0b000000001000000000000,
  3338:       0b000000001000000000000,
  3339:       0b000000001000000000000,
  3340:       0b000000001000000000000,
  3341:       0b000000001000000000000,
  3342:       0b000000000000000000000,
  3343:       0b000000000000000000000,
  3344:       0b000000000000000000000,
  3345:       0b000000000000000000000,
  3346:       0b000000000000000000000,
  3347:     },  //0xa2 「
  3348:     {
  3349:       0b000000000000000000000,
  3350:       0b000000000000000000000,
  3351:       0b000000000000000000000,
  3352:       0b000000000000000000000,
  3353:       0b000000000000000000000,
  3354:       0b000000000000100000000,
  3355:       0b000000000000100000000,
  3356:       0b000000000000100000000,
  3357:       0b000000000000100000000,
  3358:       0b000000000000100000000,
  3359:       0b000000001111100000000,
  3360:       0b000000000000000000000,
  3361:       0b000000000000000000000,
  3362:     },  //0xa3 」
  3363:     {
  3364:       0b000000000000000000000,
  3365:       0b000000000000000000000,
  3366:       0b000000000000000000000,
  3367:       0b000000000000000000000,
  3368:       0b000000000000000000000,
  3369:       0b000000000000000000000,
  3370:       0b000000000000000000000,
  3371:       0b000000000000000000000,
  3372:       0b000000000100000000000,
  3373:       0b000000000010000000000,
  3374:       0b000000000001000000000,
  3375:       0b000000000000000000000,
  3376:       0b000000000000000000000,
  3377:     },  //0xa4 、
  3378:     {
  3379:       0b000000000000000000000,
  3380:       0b000000000000000000000,
  3381:       0b000000000000000000000,
  3382:       0b000000000000000000000,
  3383:       0b000000000000000000000,
  3384:       0b000000000110000000000,
  3385:       0b000000000110000000000,
  3386:       0b000000000000000000000,
  3387:       0b000000000000000000000,
  3388:       0b000000000000000000000,
  3389:       0b000000000000000000000,
  3390:       0b000000000000000000000,
  3391:       0b000000000000000000000,
  3392:     },  //0xa5 ・
  3393:     {
  3394:       0b000000000000000000000,
  3395:       0b000000000000000000000,
  3396:       0b000000011111110000000,
  3397:       0b000000000000010000000,
  3398:       0b000000000000010000000,
  3399:       0b000000011111110000000,
  3400:       0b000000000000010000000,
  3401:       0b000000000000010000000,
  3402:       0b000000000000100000000,
  3403:       0b000000000001000000000,
  3404:       0b000000000110000000000,
  3405:       0b000000000000000000000,
  3406:       0b000000000000000000000,
  3407:     },  //0xa6 ヲ
  3408:     {
  3409:       0b000000000000000000000,
  3410:       0b000000000000000000000,
  3411:       0b000000000000000000000,
  3412:       0b000000000000000000000,
  3413:       0b000000001111100000000,
  3414:       0b000000000000100000000,
  3415:       0b000000000101000000000,
  3416:       0b000000000110000000000,
  3417:       0b000000000100000000000,
  3418:       0b000000001000000000000,
  3419:       0b000000000000000000000,
  3420:       0b000000000000000000000,
  3421:       0b000000000000000000000,
  3422:     },  //0xa7 ァ
  3423:     {
  3424:       0b000000000000000000000,
  3425:       0b000000000000000000000,
  3426:       0b000000000000000000000,
  3427:       0b000000000000000000000,
  3428:       0b000000000000100000000,
  3429:       0b000000000001000000000,
  3430:       0b000000000011000000000,
  3431:       0b000000000101000000000,
  3432:       0b000000001001000000000,
  3433:       0b000000000001000000000,
  3434:       0b000000000000000000000,
  3435:       0b000000000000000000000,
  3436:       0b000000000000000000000,
  3437:     },  //0xa8 ィ
  3438:     {
  3439:       0b000000000000000000000,
  3440:       0b000000000000000000000,
  3441:       0b000000000000000000000,
  3442:       0b000000000000000000000,
  3443:       0b000000000010000000000,
  3444:       0b000000001111100000000,
  3445:       0b000000001000100000000,
  3446:       0b000000000000100000000,
  3447:       0b000000000001000000000,
  3448:       0b000000000010000000000,
  3449:       0b000000000000000000000,
  3450:       0b000000000000000000000,
  3451:       0b000000000000000000000,
  3452:     },  //0xa9 ゥ
  3453:     {
  3454:       0b000000000000000000000,
  3455:       0b000000000000000000000,
  3456:       0b000000000000000000000,
  3457:       0b000000000000000000000,
  3458:       0b000000001111100000000,
  3459:       0b000000000010000000000,
  3460:       0b000000000010000000000,
  3461:       0b000000000010000000000,
  3462:       0b000000000010000000000,
  3463:       0b000000001111100000000,
  3464:       0b000000000000000000000,
  3465:       0b000000000000000000000,
  3466:       0b000000000000000000000,
  3467:     },  //0xaa ェ
  3468:     {
  3469:       0b000000000000000000000,
  3470:       0b000000000000000000000,
  3471:       0b000000000000000000000,
  3472:       0b000000000000000000000,
  3473:       0b000000000001000000000,
  3474:       0b000000001111100000000,
  3475:       0b000000000001000000000,
  3476:       0b000000000011000000000,
  3477:       0b000000000101000000000,
  3478:       0b000000001001000000000,
  3479:       0b000000000000000000000,
  3480:       0b000000000000000000000,
  3481:       0b000000000000000000000,
  3482:     },  //0xab ォ
  3483:     {
  3484:       0b000000000000000000000,
  3485:       0b000000000000000000000,
  3486:       0b000000000000000000000,
  3487:       0b000000000000000000000,
  3488:       0b000000000100000000000,
  3489:       0b000000001111100000000,
  3490:       0b000000000100100000000,
  3491:       0b000000000010000000000,
  3492:       0b000000000010000000000,
  3493:       0b000000000001000000000,
  3494:       0b000000000000000000000,
  3495:       0b000000000000000000000,
  3496:       0b000000000000000000000,
  3497:     },  //0xac ャ
  3498:     {
  3499:       0b000000000000000000000,
  3500:       0b000000000000000000000,
  3501:       0b000000000000000000000,
  3502:       0b000000000000000000000,
  3503:       0b000000000111000000000,
  3504:       0b000000000001000000000,
  3505:       0b000000000001000000000,
  3506:       0b000000000010000000000,
  3507:       0b000000000010000000000,
  3508:       0b000000001111100000000,
  3509:       0b000000000000000000000,
  3510:       0b000000000000000000000,
  3511:       0b000000000000000000000,
  3512:     },  //0xad ュ
  3513:     {
  3514:       0b000000000000000000000,
  3515:       0b000000000000000000000,
  3516:       0b000000000000000000000,
  3517:       0b000000000000000000000,
  3518:       0b000000001111100000000,
  3519:       0b000000000000100000000,
  3520:       0b000000001111100000000,
  3521:       0b000000000000100000000,
  3522:       0b000000001111100000000,
  3523:       0b000000000000100000000,
  3524:       0b000000000000000000000,
  3525:       0b000000000000000000000,
  3526:       0b000000000000000000000,
  3527:     },  //0xae ョ
  3528:     {
  3529:       0b000000000000000000000,
  3530:       0b000000000000000000000,
  3531:       0b000000000000000000000,
  3532:       0b000000000000000000000,
  3533:       0b000000001010100000000,
  3534:       0b000000001010100000000,
  3535:       0b000000000000100000000,
  3536:       0b000000000001000000000,
  3537:       0b000000000010000000000,
  3538:       0b000000000100000000000,
  3539:       0b000000000000000000000,
  3540:       0b000000000000000000000,
  3541:       0b000000000000000000000,
  3542:     },  //0xaf ッ
  3543:     {
  3544:       0b000000000000000000000,
  3545:       0b000000000000000000000,
  3546:       0b000000000000000000000,
  3547:       0b000000000000000000000,
  3548:       0b000000000000000000000,
  3549:       0b000000010000000000000,
  3550:       0b000000001111110000000,
  3551:       0b000000000000000000000,
  3552:       0b000000000000000000000,
  3553:       0b000000000000000000000,
  3554:       0b000000000000000000000,
  3555:       0b000000000000000000000,
  3556:       0b000000000000000000000,
  3557:     },  //0xb0 ー
  3558:     {
  3559:       0b000000000000000000000,
  3560:       0b000000000000000000000,
  3561:       0b000000011111110000000,
  3562:       0b000000000000010000000,
  3563:       0b000000000000010000000,
  3564:       0b000000000100100000000,
  3565:       0b000000000111000000000,
  3566:       0b000000000100000000000,
  3567:       0b000000000100000000000,
  3568:       0b000000001000000000000,
  3569:       0b000000010000000000000,
  3570:       0b000000000000000000000,
  3571:       0b000000000000000000000,
  3572:     },  //0xb1 ア
  3573:     {
  3574:       0b000000000000000000000,
  3575:       0b000000000000000000000,
  3576:       0b000000000000010000000,
  3577:       0b000000000000010000000,
  3578:       0b000000000000100000000,
  3579:       0b000000000001000000000,
  3580:       0b000000000011000000000,
  3581:       0b000000000101000000000,
  3582:       0b000000001001000000000,
  3583:       0b000000010001000000000,
  3584:       0b000000000001000000000,
  3585:       0b000000000000000000000,
  3586:       0b000000000000000000000,
  3587:     },  //0xb2 イ
  3588:     {
  3589:       0b000000000000000000000,
  3590:       0b000000000000000000000,
  3591:       0b000000000010000000000,
  3592:       0b000000000010000000000,
  3593:       0b000000011111110000000,
  3594:       0b000000010000010000000,
  3595:       0b000000010000010000000,
  3596:       0b000000000000010000000,
  3597:       0b000000000000100000000,
  3598:       0b000000000001000000000,
  3599:       0b000000000110000000000,
  3600:       0b000000000000000000000,
  3601:       0b000000000000000000000,
  3602:     },  //0xb3 ウ
  3603:     {
  3604:       0b000000000000000000000,
  3605:       0b000000000000000000000,
  3606:       0b000000001111100000000,
  3607:       0b000000000010000000000,
  3608:       0b000000000010000000000,
  3609:       0b000000000010000000000,
  3610:       0b000000000010000000000,
  3611:       0b000000000010000000000,
  3612:       0b000000000010000000000,
  3613:       0b000000011111110000000,
  3614:       0b000000000000000000000,
  3615:       0b000000000000000000000,
  3616:       0b000000000000000000000,
  3617:     },  //0xb4 エ
  3618:     {
  3619:       0b000000000000000000000,
  3620:       0b000000000000000000000,
  3621:       0b000000000001000000000,
  3622:       0b000000000001000000000,
  3623:       0b000000011111110000000,
  3624:       0b000000000001000000000,
  3625:       0b000000000011000000000,
  3626:       0b000000000101000000000,
  3627:       0b000000001001000000000,
  3628:       0b000000010001000000000,
  3629:       0b000000000001000000000,
  3630:       0b000000000000000000000,
  3631:       0b000000000000000000000,
  3632:     },  //0xb5 オ
  3633:     {
  3634:       0b000000000000000000000,
  3635:       0b000000000000000000000,
  3636:       0b000000000010000000000,
  3637:       0b000000000010000000000,
  3638:       0b000000011111110000000,
  3639:       0b000000000010010000000,
  3640:       0b000000000100010000000,
  3641:       0b000000000100010000000,
  3642:       0b000000001000010000000,
  3643:       0b000000001000010000000,
  3644:       0b000000010001100000000,
  3645:       0b000000000000000000000,
  3646:       0b000000000000000000000,
  3647:     },  //0xb6 カ
  3648:     {
  3649:       0b000000000000000000000,
  3650:       0b000000000000000000000,
  3651:       0b000000000100100000000,
  3652:       0b000000000101000000000,
  3653:       0b000000011110010000000,
  3654:       0b000000000010100000000,
  3655:       0b000000000011000000000,
  3656:       0b000000011101000000000,
  3657:       0b000000000001000000000,
  3658:       0b000000000000100000000,
  3659:       0b000000000000100000000,
  3660:       0b000000000000000000000,
  3661:       0b000000000000000000000,
  3662:     },  //0xb7 キ
  3663:     {
  3664:       0b000000000000000000000,
  3665:       0b000000000000000000000,
  3666:       0b000000000010000000000,
  3667:       0b000000000011110000000,
  3668:       0b000000000100010000000,
  3669:       0b000000000100010000000,
  3670:       0b000000001000100000000,
  3671:       0b000000010000100000000,
  3672:       0b000000000001000000000,
  3673:       0b000000000010000000000,
  3674:       0b000000000100000000000,
  3675:       0b000000000000000000000,
  3676:       0b000000000000000000000,
  3677:     },  //0xb8 ク
  3678:     {
  3679:       0b000000000000000000000,
  3680:       0b000000000000000000000,
  3681:       0b000000000100000000000,
  3682:       0b000000000100000000000,
  3683:       0b000000000111110000000,
  3684:       0b000000001001000000000,
  3685:       0b000000010001000000000,
  3686:       0b000000000001000000000,
  3687:       0b000000000010000000000,
  3688:       0b000000000010000000000,
  3689:       0b000000000100000000000,
  3690:       0b000000000000000000000,
  3691:       0b000000000000000000000,
  3692:     },  //0xb9 ケ
  3693:     {
  3694:       0b000000000000000000000,
  3695:       0b000000000000000000000,
  3696:       0b000000011111110000000,
  3697:       0b000000000000010000000,
  3698:       0b000000000000010000000,
  3699:       0b000000000000010000000,
  3700:       0b000000000000010000000,
  3701:       0b000000000000010000000,
  3702:       0b000000000000010000000,
  3703:       0b000000011111110000000,
  3704:       0b000000000000010000000,
  3705:       0b000000000000000000000,
  3706:       0b000000000000000000000,
  3707:     },  //0xba コ
  3708:     {
  3709:       0b000000000000000000000,
  3710:       0b000000000000000000000,
  3711:       0b000000001000100000000,
  3712:       0b000000001000100000000,
  3713:       0b000000011111110000000,
  3714:       0b000000001000100000000,
  3715:       0b000000001000100000000,
  3716:       0b000000000000100000000,
  3717:       0b000000000000100000000,
  3718:       0b000000000001000000000,
  3719:       0b000000000110000000000,
  3720:       0b000000000000000000000,
  3721:       0b000000000000000000000,
  3722:     },  //0xbb サ
  3723:     {
  3724:       0b000000000000000000000,
  3725:       0b000000000000000000000,
  3726:       0b000000011000000000000,
  3727:       0b000000000100000000000,
  3728:       0b000000000000000000000,
  3729:       0b000000011000010000000,
  3730:       0b000000000100010000000,
  3731:       0b000000000000100000000,
  3732:       0b000000000001000000000,
  3733:       0b000000000010000000000,
  3734:       0b000000011100000000000,
  3735:       0b000000000000000000000,
  3736:       0b000000000000000000000,
  3737:     },  //0xbc シ
  3738:     {
  3739:       0b000000000000000000000,
  3740:       0b000000000000000000000,
  3741:       0b000000011111110000000,
  3742:       0b000000000000010000000,
  3743:       0b000000000000010000000,
  3744:       0b000000000000100000000,
  3745:       0b000000000001000000000,
  3746:       0b000000000010000000000,
  3747:       0b000000000101000000000,
  3748:       0b000000001000100000000,
  3749:       0b000000010000010000000,
  3750:       0b000000000000000000000,
  3751:       0b000000000000000000000,
  3752:     },  //0xbd ス
  3753:     {
  3754:       0b000000000000000000000,
  3755:       0b000000000000000000000,
  3756:       0b000000001000000000000,
  3757:       0b000000001000000000000,
  3758:       0b000000001011110000000,
  3759:       0b000000011100010000000,
  3760:       0b000000001000100000000,
  3761:       0b000000001000000000000,
  3762:       0b000000001000000000000,
  3763:       0b000000001000000000000,
  3764:       0b000000000111110000000,
  3765:       0b000000000000000000000,
  3766:       0b000000000000000000000,
  3767:     },  //0xbe セ
  3768:     {
  3769:       0b000000000000000000000,
  3770:       0b000000000000000000000,
  3771:       0b000000000000010000000,
  3772:       0b000000010000010000000,
  3773:       0b000000001000010000000,
  3774:       0b000000000100010000000,
  3775:       0b000000000000100000000,
  3776:       0b000000000000100000000,
  3777:       0b000000000001000000000,
  3778:       0b000000000010000000000,
  3779:       0b000000000100000000000,
  3780:       0b000000000000000000000,
  3781:       0b000000000000000000000,
  3782:     },  //0xbf ソ
  3783:     {
  3784:       0b000000000000000000000,
  3785:       0b000000000000000000000,
  3786:       0b000000000010000000000,
  3787:       0b000000000011110000000,
  3788:       0b000000000100010000000,
  3789:       0b000000000110010000000,
  3790:       0b000000001001100000000,
  3791:       0b000000010000100000000,
  3792:       0b000000000001010000000,
  3793:       0b000000000010000000000,
  3794:       0b000000000100000000000,
  3795:       0b000000000000000000000,
  3796:       0b000000000000000000000,
  3797:     },  //0xc0 タ
  3798:     {
  3799:       0b000000000000000000000,
  3800:       0b000000000000000000000,
  3801:       0b000000000000100000000,
  3802:       0b000000000011000000000,
  3803:       0b000000001110000000000,
  3804:       0b000000000001000000000,
  3805:       0b000000011111110000000,
  3806:       0b000000000001000000000,
  3807:       0b000000000001000000000,
  3808:       0b000000000010000000000,
  3809:       0b000000000100000000000,
  3810:       0b000000000000000000000,
  3811:       0b000000000000000000000,
  3812:     },  //0xc1 チ
  3813:     {
  3814:       0b000000000000000000000,
  3815:       0b000000000000000000000,
  3816:       0b000000000100010000000,
  3817:       0b000000000010010000000,
  3818:       0b000000010010010000000,
  3819:       0b000000001000010000000,
  3820:       0b000000001000100000000,
  3821:       0b000000000000100000000,
  3822:       0b000000000001000000000,
  3823:       0b000000000010000000000,
  3824:       0b000000000100000000000,
  3825:       0b000000000000000000000,
  3826:       0b000000000000000000000,
  3827:     },  //0xc2 ツ
  3828:     {
  3829:       0b000000000000000000000,
  3830:       0b000000000000000000000,
  3831:       0b000000001111100000000,
  3832:       0b000000000000000000000,
  3833:       0b000000000000000000000,
  3834:       0b000000011111110000000,
  3835:       0b000000000010000000000,
  3836:       0b000000000010000000000,
  3837:       0b000000000010000000000,
  3838:       0b000000000100000000000,
  3839:       0b000000001000000000000,
  3840:       0b000000000000000000000,
  3841:       0b000000000000000000000,
  3842:     },  //0xc3 テ
  3843:     {
  3844:       0b000000000000000000000,
  3845:       0b000000000000000000000,
  3846:       0b000000001000000000000,
  3847:       0b000000001000000000000,
  3848:       0b000000001000000000000,
  3849:       0b000000001000000000000,
  3850:       0b000000001110000000000,
  3851:       0b000000001001000000000,
  3852:       0b000000001000100000000,
  3853:       0b000000001000000000000,
  3854:       0b000000001000000000000,
  3855:       0b000000000000000000000,
  3856:       0b000000000000000000000,
  3857:     },  //0xc4 ト
  3858:     {
  3859:       0b000000000000000000000,
  3860:       0b000000000000000000000,
  3861:       0b000000000010000000000,
  3862:       0b000000000010000000000,
  3863:       0b000000011111110000000,
  3864:       0b000000000010000000000,
  3865:       0b000000000010000000000,
  3866:       0b000000000010000000000,
  3867:       0b000000000010000000000,
  3868:       0b000000000100000000000,
  3869:       0b000000001000000000000,
  3870:       0b000000000000000000000,
  3871:       0b000000000000000000000,
  3872:     },  //0xc5 ナ
  3873:     {
  3874:       0b000000000000000000000,
  3875:       0b000000000000000000000,
  3876:       0b000000001111100000000,
  3877:       0b000000000000000000000,
  3878:       0b000000000000000000000,
  3879:       0b000000000000000000000,
  3880:       0b000000000000000000000,
  3881:       0b000000000000000000000,
  3882:       0b000000000000000000000,
  3883:       0b000000011111110000000,
  3884:       0b000000000000000000000,
  3885:       0b000000000000000000000,
  3886:       0b000000000000000000000,
  3887:     },  //0xc6 ニ
  3888:     {
  3889:       0b000000000000000000000,
  3890:       0b000000000000000000000,
  3891:       0b000000011111110000000,
  3892:       0b000000000000010000000,
  3893:       0b000000000000010000000,
  3894:       0b000000001000100000000,
  3895:       0b000000000101000000000,
  3896:       0b000000000010000000000,
  3897:       0b000000000101000000000,
  3898:       0b000000001000100000000,
  3899:       0b000000010000000000000,
  3900:       0b000000000000000000000,
  3901:       0b000000000000000000000,
  3902:     },  //0xc7 ヌ
  3903:     {
  3904:       0b000000000000000000000,
  3905:       0b000000000000000000000,
  3906:       0b000000000010000000000,
  3907:       0b000000011111110000000,
  3908:       0b000000000000010000000,
  3909:       0b000000000000100000000,
  3910:       0b000000000001000000000,
  3911:       0b000000000010000000000,
  3912:       0b000000000110100000000,
  3913:       0b000000011010010000000,
  3914:       0b000000000010000000000,
  3915:       0b000000000000000000000,
  3916:       0b000000000000000000000,
  3917:     },  //0xc8 ネ
  3918:     {
  3919:       0b000000000000000000000,
  3920:       0b000000000000000000000,
  3921:       0b000000000000010000000,
  3922:       0b000000000000010000000,
  3923:       0b000000000000010000000,
  3924:       0b000000000000100000000,
  3925:       0b000000000000100000000,
  3926:       0b000000000001000000000,
  3927:       0b000000000010000000000,
  3928:       0b000000000100000000000,
  3929:       0b000000011000000000000,
  3930:       0b000000000000000000000,
  3931:       0b000000000000000000000,
  3932:     },  //0xc9 ノ
  3933:     {
  3934:       0b000000000000000000000,
  3935:       0b000000000000000000000,
  3936:       0b000000000010000000000,
  3937:       0b000000000001000000000,
  3938:       0b000000001001000000000,
  3939:       0b000000001000100000000,
  3940:       0b000000001000100000000,
  3941:       0b000000001000100000000,
  3942:       0b000000010000010000000,
  3943:       0b000000010000010000000,
  3944:       0b000000010000010000000,
  3945:       0b000000000000000000000,
  3946:       0b000000000000000000000,
  3947:     },  //0xca ハ
  3948:     {
  3949:       0b000000000000000000000,
  3950:       0b000000000000000000000,
  3951:       0b000000010000000000000,
  3952:       0b000000010000000000000,
  3953:       0b000000010000110000000,
  3954:       0b000000011111000000000,
  3955:       0b000000010000000000000,
  3956:       0b000000010000000000000,
  3957:       0b000000010000000000000,
  3958:       0b000000010000000000000,
  3959:       0b000000001111110000000,
  3960:       0b000000000000000000000,
  3961:       0b000000000000000000000,
  3962:     },  //0xcb ヒ
  3963:     {
  3964:       0b000000000000000000000,
  3965:       0b000000000000000000000,
  3966:       0b000000011111110000000,
  3967:       0b000000000000010000000,
  3968:       0b000000000000010000000,
  3969:       0b000000000000010000000,
  3970:       0b000000000000010000000,
  3971:       0b000000000000010000000,
  3972:       0b000000000000100000000,
  3973:       0b000000000001000000000,
  3974:       0b000000000110000000000,
  3975:       0b000000000000000000000,
  3976:       0b000000000000000000000,
  3977:     },  //0xcc フ
  3978:     {
  3979:       0b000000000000000000000,
  3980:       0b000000000000000000000,
  3981:       0b000000000100000000000,
  3982:       0b000000001010000000000,
  3983:       0b000000001001000000000,
  3984:       0b000000010001000000000,
  3985:       0b000000010000100000000,
  3986:       0b000000000000100000000,
  3987:       0b000000000000010000000,
  3988:       0b000000000000010000000,
  3989:       0b000000000000010000000,
  3990:       0b000000000000000000000,
  3991:       0b000000000000000000000,
  3992:     },  //0xcd ヘ
  3993:     {
  3994:       0b000000000000000000000,
  3995:       0b000000000000000000000,
  3996:       0b000000000010000000000,
  3997:       0b000000000010000000000,
  3998:       0b000000011111110000000,
  3999:       0b000000000010000000000,
  4000:       0b000000000010000000000,
  4001:       0b000000001010100000000,
  4002:       0b000000010010010000000,
  4003:       0b000000010010010000000,
  4004:       0b000000000010000000000,
  4005:       0b000000000000000000000,
  4006:       0b000000000000000000000,
  4007:     },  //0xce ホ
  4008:     {
  4009:       0b000000000000000000000,
  4010:       0b000000000000000000000,
  4011:       0b000000011111110000000,
  4012:       0b000000000000010000000,
  4013:       0b000000000000010000000,
  4014:       0b000000000000100000000,
  4015:       0b000000010001000000000,
  4016:       0b000000001010000000000,
  4017:       0b000000000100000000000,
  4018:       0b000000000010000000000,
  4019:       0b000000000001000000000,
  4020:       0b000000000000000000000,
  4021:       0b000000000000000000000,
  4022:     },  //0xcf マ
  4023:     {
  4024:       0b000000000000000000000,
  4025:       0b000000000000000000000,
  4026:       0b000000001110000000000,
  4027:       0b000000000001100000000,
  4028:       0b000000000000010000000,
  4029:       0b000000001110000000000,
  4030:       0b000000000001100000000,
  4031:       0b000000000000010000000,
  4032:       0b000000011110000000000,
  4033:       0b000000000001100000000,
  4034:       0b000000000000010000000,
  4035:       0b000000000000000000000,
  4036:       0b000000000000000000000,
  4037:     },  //0xd0 ミ
  4038:     {
  4039:       0b000000000000000000000,
  4040:       0b000000000000000000000,
  4041:       0b000000000010000000000,
  4042:       0b000000000010000000000,
  4043:       0b000000000010000000000,
  4044:       0b000000000100000000000,
  4045:       0b000000000100000000000,
  4046:       0b000000001000100000000,
  4047:       0b000000001000100000000,
  4048:       0b000000010011010000000,
  4049:       0b000000011100010000000,
  4050:       0b000000000000000000000,
  4051:       0b000000000000000000000,
  4052:     },  //0xd1 ム
  4053:     {
  4054:       0b000000000000000000000,
  4055:       0b000000000000000000000,
  4056:       0b000000000000100000000,
  4057:       0b000000000000100000000,
  4058:       0b000000000001000000000,
  4059:       0b000000011001000000000,
  4060:       0b000000000110000000000,
  4061:       0b000000000011000000000,
  4062:       0b000000000100100000000,
  4063:       0b000000001000010000000,
  4064:       0b000000010000000000000,
  4065:       0b000000000000000000000,
  4066:       0b000000000000000000000,
  4067:     },  //0xd2 メ
  4068:     {
  4069:       0b000000000000000000000,
  4070:       0b000000000000000000000,
  4071:       0b000000001111100000000,
  4072:       0b000000000010000000000,
  4073:       0b000000000010000000000,
  4074:       0b000000011111110000000,
  4075:       0b000000000010000000000,
  4076:       0b000000000010000000000,
  4077:       0b000000000010000000000,
  4078:       0b000000000010000000000,
  4079:       0b000000000001110000000,
  4080:       0b000000000000000000000,
  4081:       0b000000000000000000000,
  4082:     },  //0xd3 モ
  4083:     {
  4084:       0b000000000000000000000,
  4085:       0b000000000000000000000,
  4086:       0b000000001000000000000,
  4087:       0b000000001001110000000,
  4088:       0b000000000110010000000,
  4089:       0b000000011100100000000,
  4090:       0b000000000100000000000,
  4091:       0b000000000010000000000,
  4092:       0b000000000010000000000,
  4093:       0b000000000001000000000,
  4094:       0b000000000000100000000,
  4095:       0b000000000000000000000,
  4096:       0b000000000000000000000,
  4097:     },  //0xd4 ヤ
  4098:     {
  4099:       0b000000000000000000000,
  4100:       0b000000000000000000000,
  4101:       0b000000001111100000000,
  4102:       0b000000000000100000000,
  4103:       0b000000000000100000000,
  4104:       0b000000000001000000000,
  4105:       0b000000000001000000000,
  4106:       0b000000000010000000000,
  4107:       0b000000000010000000000,
  4108:       0b000000011111110000000,
  4109:       0b000000000000000000000,
  4110:       0b000000000000000000000,
  4111:       0b000000000000000000000,
  4112:     },  //0xd5 ユ
  4113:     {
  4114:       0b000000000000000000000,
  4115:       0b000000000000000000000,
  4116:       0b000000011111110000000,
  4117:       0b000000000000010000000,
  4118:       0b000000000000010000000,
  4119:       0b000000011111110000000,
  4120:       0b000000000000010000000,
  4121:       0b000000000000010000000,
  4122:       0b000000000000010000000,
  4123:       0b000000011111110000000,
  4124:       0b000000000000010000000,
  4125:       0b000000000000000000000,
  4126:       0b000000000000000000000,
  4127:     },  //0xd6 ヨ
  4128:     {
  4129:       0b000000000000000000000,
  4130:       0b000000000000000000000,
  4131:       0b000000011111110000000,
  4132:       0b000000000000000000000,
  4133:       0b000000011111110000000,
  4134:       0b000000000000010000000,
  4135:       0b000000000000010000000,
  4136:       0b000000000000010000000,
  4137:       0b000000000000100000000,
  4138:       0b000000000001000000000,
  4139:       0b000000000110000000000,
  4140:       0b000000000000000000000,
  4141:       0b000000000000000000000,
  4142:     },  //0xd7 ラ
  4143:     {
  4144:       0b000000000000000000000,
  4145:       0b000000000000000000000,
  4146:       0b000000010000010000000,
  4147:       0b000000010000010000000,
  4148:       0b000000010000010000000,
  4149:       0b000000010000010000000,
  4150:       0b000000000000010000000,
  4151:       0b000000000000100000000,
  4152:       0b000000000000100000000,
  4153:       0b000000000001000000000,
  4154:       0b000000000110000000000,
  4155:       0b000000000000000000000,
  4156:       0b000000000000000000000,
  4157:     },  //0xd8 リ
  4158:     {
  4159:       0b000000000000000000000,
  4160:       0b000000000000000000000,
  4161:       0b000000001010000000000,
  4162:       0b000000001010000000000,
  4163:       0b000000001010000000000,
  4164:       0b000000001010000000000,
  4165:       0b000000001010000000000,
  4166:       0b000000001010010000000,
  4167:       0b000000001010010000000,
  4168:       0b000000010010100000000,
  4169:       0b000000010011000000000,
  4170:       0b000000000000000000000,
  4171:       0b000000000000000000000,
  4172:     },  //0xd9 ル
  4173:     {
  4174:       0b000000000000000000000,
  4175:       0b000000000000000000000,
  4176:       0b000000010000000000000,
  4177:       0b000000010000000000000,
  4178:       0b000000010000000000000,
  4179:       0b000000010000000000000,
  4180:       0b000000010000010000000,
  4181:       0b000000010000010000000,
  4182:       0b000000010000100000000,
  4183:       0b000000010011000000000,
  4184:       0b000000011100000000000,
  4185:       0b000000000000000000000,
  4186:       0b000000000000000000000,
  4187:     },  //0xda レ
  4188:     {
  4189:       0b000000000000000000000,
  4190:       0b000000000000000000000,
  4191:       0b000000011111110000000,
  4192:       0b000000010000010000000,
  4193:       0b000000010000010000000,
  4194:       0b000000010000010000000,
  4195:       0b000000010000010000000,
  4196:       0b000000010000010000000,
  4197:       0b000000010000010000000,
  4198:       0b000000011111110000000,
  4199:       0b000000010000010000000,
  4200:       0b000000000000000000000,
  4201:       0b000000000000000000000,
  4202:     },  //0xdb ロ
  4203:     {
  4204:       0b000000000000000000000,
  4205:       0b000000000000000000000,
  4206:       0b000000011111110000000,
  4207:       0b000000010000010000000,
  4208:       0b000000010000010000000,
  4209:       0b000000010000010000000,
  4210:       0b000000000000010000000,
  4211:       0b000000000000010000000,
  4212:       0b000000000000100000000,
  4213:       0b000000000001000000000,
  4214:       0b000000000110000000000,
  4215:       0b000000000000000000000,
  4216:       0b000000000000000000000,
  4217:     },  //0xdc ワ
  4218:     {
  4219:       0b000000000000000000000,
  4220:       0b000000000000000000000,
  4221:       0b000000010000000000000,
  4222:       0b000000001000000000000,
  4223:       0b000000000100000000000,
  4224:       0b000000000000000000000,
  4225:       0b000000000000010000000,
  4226:       0b000000000000100000000,
  4227:       0b000000000001000000000,
  4228:       0b000000000110000000000,
  4229:       0b000000011000000000000,
  4230:       0b000000000000000000000,
  4231:       0b000000000000000000000,
  4232:     },  //0xdd ン
  4233:     {
  4234:       0b000000000000000000000,
  4235:       0b000000000000000000000,
  4236:       0b000000010010000000000,
  4237:       0b000000001001000000000,
  4238:       0b000000000100100000000,
  4239:       0b000000000000000000000,
  4240:       0b000000000000000000000,
  4241:       0b000000000000000000000,
  4242:       0b000000000000000000000,
  4243:       0b000000000000000000000,
  4244:       0b000000000000000000000,
  4245:       0b000000000000000000000,
  4246:       0b000000000000000000000,
  4247:     },  //0xde ゛
  4248:     {
  4249:       0b000000000000000000000,
  4250:       0b000000000000000000000,
  4251:       0b000000000110000000000,
  4252:       0b000000001001000000000,
  4253:       0b000000001001000000000,
  4254:       0b000000000110000000000,
  4255:       0b000000000000000000000,
  4256:       0b000000000000000000000,
  4257:       0b000000000000000000000,
  4258:       0b000000000000000000000,
  4259:       0b000000000000000000000,
  4260:       0b000000000000000000000,
  4261:       0b000000000000000000000,
  4262:     },  //0xdf ゜
  4263:     {
  4264:       0b000000000000000000000,
  4265:       0b000000000000000000000,
  4266:       0b000000000100000000000,
  4267:       0b000000000100000000000,
  4268:       0b000000011111110000000,
  4269:       0b000000000100000000000,
  4270:       0b000000001001110000000,
  4271:       0b000000001000010000000,
  4272:       0b000000001000000000000,
  4273:       0b000000010010000000000,
  4274:       0b000000010001110000000,
  4275:       0b000000000000000000000,
  4276:       0b000000000000000000000,
  4277:     },  //0xe0 た
  4278:     {
  4279:       0b000000000000000000000,
  4280:       0b000000000000000000000,
  4281:       0b000000000100000000000,
  4282:       0b000000111111111000000,
  4283:       0b000000001000000000000,
  4284:       0b000000001011100000000,
  4285:       0b000000011100010000000,
  4286:       0b000000010000001000000,
  4287:       0b000000000000001000000,
  4288:       0b000000000000010000000,
  4289:       0b000000000111100000000,
  4290:       0b000000000000000000000,
  4291:       0b000000000000000000000,
  4292:     },  //0xe1 ち
  4293:     {
  4294:       0b000000000000000000000,
  4295:       0b000000000000000000000,
  4296:       0b000000000000000000000,
  4297:       0b000000001111100000000,
  4298:       0b000000110000010000000,
  4299:       0b000000000000001000000,
  4300:       0b000000000000001000000,
  4301:       0b000000000000010000000,
  4302:       0b000000000001100000000,
  4303:       0b000000000110000000000,
  4304:       0b000000000000000000000,
  4305:       0b000000000000000000000,
  4306:       0b000000000000000000000,
  4307:     },  //0xe2 つ
  4308:     {
  4309:       0b000000000000000000000,
  4310:       0b000000000000000000000,
  4311:       0b000000111111110000000,
  4312:       0b000000000001100000000,
  4313:       0b000000000010000000000,
  4314:       0b000000000100000000000,
  4315:       0b000000001000000000000,
  4316:       0b000000001000000000000,
  4317:       0b000000001000000000000,
  4318:       0b000000000100000000000,
  4319:       0b000000000011100000000,
  4320:       0b000000000000000000000,
  4321:       0b000000000000000000000,
  4322:     },  //0xe3 て
  4323:     {
  4324:       0b000000000000000000000,
  4325:       0b000000000000000000000,
  4326:       0b000000001000000000000,
  4327:       0b000000001000000000000,
  4328:       0b000000001001110000000,
  4329:       0b000000000110000000000,
  4330:       0b000000001000000000000,
  4331:       0b000000010000000000000,
  4332:       0b000000010000000000000,
  4333:       0b000000010000000000000,
  4334:       0b000000001111110000000,
  4335:       0b000000000000000000000,
  4336:       0b000000000000000000000,
  4337:     },  //0xe4 と
  4338:     {
  4339:       0b000000000000000000000,
  4340:       0b000000000000000000000,
  4341:       0b000000001001000000000,
  4342:       0b000000001000100000000,
  4343:       0b000000111100010000000,
  4344:       0b000000010001010000000,
  4345:       0b000000010001000000000,
  4346:       0b000000100111000000000,
  4347:       0b000000001001100000000,
  4348:       0b000000001001010000000,
  4349:       0b000000000110000000000,
  4350:       0b000000000000000000000,
  4351:       0b000000000000000000000,
  4352:     },  //0xe5 な
  4353:     {
  4354:       0b000000000000000000000,
  4355:       0b000000000000000000000,
  4356:       0b000000010011100000000,
  4357:       0b000000010000010000000,
  4358:       0b000000010000100000000,
  4359:       0b000000010000000000000,
  4360:       0b000000010000000000000,
  4361:       0b000000010100000000000,
  4362:       0b000000010100000000000,
  4363:       0b000000010011110000000,
  4364:       0b000000000000000000000,
  4365:       0b000000000000000000000,
  4366:       0b000000000000000000000,
  4367:     },  //0xe6 に
  4368:     {
  4369:       0b000000000000000000000,
  4370:       0b000000000000000000000,
  4371:       0b000000000001000000000,
  4372:       0b000000010001000000000,
  4373:       0b000000010111110000000,
  4374:       0b000000001010001000000,
  4375:       0b000000011010001000000,
  4376:       0b000000101010001000000,
  4377:       0b000000100100111000000,
  4378:       0b000000100101001100000,
  4379:       0b000000011000110000000,
  4380:       0b000000000000000000000,
  4381:       0b000000000000000000000,
  4382:     },  //0xe7 ぬ
  4383:     {
  4384:       0b000000000000000000000,
  4385:       0b000000000000000000000,
  4386:       0b000000001000000000000,
  4387:       0b000000111011100000000,
  4388:       0b000000001100010000000,
  4389:       0b000000001000010000000,
  4390:       0b000000011000010000000,
  4391:       0b000000011001110000000,
  4392:       0b000000101010011000000,
  4393:       0b000000101010010000000,
  4394:       0b000000001001100000000,
  4395:       0b000000000000000000000,
  4396:       0b000000000000000000000,
  4397:     },  //0xe8 ね
  4398:     {
  4399:       0b000000000000000000000,
  4400:       0b000000000000000000000,
  4401:       0b000000000000000000000,
  4402:       0b000000001111100000000,
  4403:       0b000000010010010000000,
  4404:       0b000000100010001000000,
  4405:       0b000000100010001000000,
  4406:       0b000000100010001000000,
  4407:       0b000000100100001000000,
  4408:       0b000000011000010000000,
  4409:       0b000000000000000000000,
  4410:       0b000000000000000000000,
  4411:       0b000000000000000000000,
  4412:     },  //0xe9 の
  4413:     {
  4414:       0b000000000000000000000,
  4415:       0b000000000000000000000,
  4416:       0b000000100001000000000,
  4417:       0b000000100001000000000,
  4418:       0b000000101111110000000,
  4419:       0b000000100001000000000,
  4420:       0b000000100001000000000,
  4421:       0b000000100111000000000,
  4422:       0b000000101001100000000,
  4423:       0b000000101001010000000,
  4424:       0b000000100110000000000,
  4425:       0b000000000000000000000,
  4426:       0b000000000000000000000,
  4427:     },  //0xea は
  4428:     {
  4429:       0b000000000000000000000,
  4430:       0b000000000000000000000,
  4431:       0b000000111001000000000,
  4432:       0b000000001001100000000,
  4433:       0b000000010001010000000,
  4434:       0b000000100001000000000,
  4435:       0b000000100001000000000,
  4436:       0b000000100001000000000,
  4437:       0b000000100010000000000,
  4438:       0b000000011100000000000,
  4439:       0b000000000000000000000,
  4440:       0b000000000000000000000,
  4441:       0b000000000000000000000,
  4442:     },  //0xeb ひ
  4443:     {
  4444:       0b000000000000000000000,
  4445:       0b000000000000000000000,
  4446:       0b000000011111000000000,
  4447:       0b000000000001000000000,
  4448:       0b000000000010000000000,
  4449:       0b000000100100010000000,
  4450:       0b000000100010010000000,
  4451:       0b000001000001001000000,
  4452:       0b000001000001001000000,
  4453:       0b000001010001001000000,
  4454:       0b000000001110000000000,
  4455:       0b000000000000000000000,
  4456:       0b000000000000000000000,
  4457:     },  //0xec ふ
  4458:     {
  4459:       0b000000000000000000000,
  4460:       0b000000000000000000000,
  4461:       0b000000000000000000000,
  4462:       0b000000000000000000000,
  4463:       0b000000000110000000000,
  4464:       0b000000001001000000000,
  4465:       0b000000010000100000000,
  4466:       0b000000100000010000000,
  4467:       0b000000000000001000000,
  4468:       0b000000000000000000000,
  4469:       0b000000000000000000000,
  4470:       0b000000000000000000000,
  4471:       0b000000000000000000000,
  4472:     },  //0xed へ
  4473:     {
  4474:       0b000000000000000000000,
  4475:       0b000000000000000000000,
  4476:       0b000000101111110000000,
  4477:       0b000000100001000000000,
  4478:       0b000000101111110000000,
  4479:       0b000000100001000000000,
  4480:       0b000000100001000000000,
  4481:       0b000000100111100000000,
  4482:       0b000000101001010000000,
  4483:       0b000000101001000000000,
  4484:       0b000000100110000000000,
  4485:       0b000000000000000000000,
  4486:       0b000000000000000000000,
  4487:     },  //0xee ほ
  4488:     {
  4489:       0b000000000000000000000,
  4490:       0b000000000000000000000,
  4491:       0b000000000010000000000,
  4492:       0b000000011111110000000,
  4493:       0b000000000010000000000,
  4494:       0b000000011111110000000,
  4495:       0b000000000010000000000,
  4496:       0b000000001111000000000,
  4497:       0b000000010010100000000,
  4498:       0b000000010010010000000,
  4499:       0b000000001100000000000,
  4500:       0b000000000000000000000,
  4501:       0b000000000000000000000,
  4502:     },  //0xef ま
  4503:     {
  4504:       0b000000000000000000000,
  4505:       0b000000000000000000000,
  4506:       0b000000011110000000000,
  4507:       0b000000000010000000000,
  4508:       0b000000000010010000000,
  4509:       0b000000001111110000000,
  4510:       0b000000010100011000000,
  4511:       0b000000100100010000000,
  4512:       0b000000100100010000000,
  4513:       0b000000011001100000000,
  4514:       0b000000000000000000000,
  4515:       0b000000000000000000000,
  4516:       0b000000000000000000000,
  4517:     },  //0xf0 み
  4518:     {
  4519:       0b000000000000000000000,
  4520:       0b000000000000000000000,
  4521:       0b000000000100000000000,
  4522:       0b000000111111110000000,
  4523:       0b000000000100000000000,
  4524:       0b000000000100110000000,
  4525:       0b000000011100001000000,
  4526:       0b000000100100000000000,
  4527:       0b000000100100010000000,
  4528:       0b000000011100010000000,
  4529:       0b000000000011100000000,
  4530:       0b000000000000000000000,
  4531:       0b000000000000000000000,
  4532:     },  //0xf1 む
  4533:     {
  4534:       0b000000000000000000000,
  4535:       0b000000000000000000000,
  4536:       0b000000000001000000000,
  4537:       0b000000010001000000000,
  4538:       0b000000010111100000000,
  4539:       0b000000001010010000000,
  4540:       0b000000011010001000000,
  4541:       0b000000101010001000000,
  4542:       0b000000100100001000000,
  4543:       0b000000100100001000000,
  4544:       0b000000011000110000000,
  4545:       0b000000000000000000000,
  4546:       0b000000000000000000000,
  4547:     },  //0xf2 め
  4548:     {
  4549:       0b000000000000000000000,
  4550:       0b000000000000000000000,
  4551:       0b000000000100000000000,
  4552:       0b000000011111100000000,
  4553:       0b000000000100000000000,
  4554:       0b000000011111100000000,
  4555:       0b000000000100000000000,
  4556:       0b000000000100000000000,
  4557:       0b000000000100010000000,
  4558:       0b000000000100010000000,
  4559:       0b000000000011100000000,
  4560:       0b000000000000000000000,
  4561:       0b000000000000000000000,
  4562:     },  //0xf3 も
  4563:     {
  4564:       0b000000000000000000000,
  4565:       0b000000000000000000000,
  4566:       0b000000000010000000000,
  4567:       0b000000010010000000000,
  4568:       0b000000010011110000000,
  4569:       0b000000001101001000000,
  4570:       0b000000011001001000000,
  4571:       0b000000101000010000000,
  4572:       0b000000000100000000000,
  4573:       0b000000000100000000000,
  4574:       0b000000000010000000000,
  4575:       0b000000000001000000000,
  4576:       0b000000000000000000000,
  4577:     },  //0xf4 や
  4578:     {
  4579:       0b000000000000000000000,
  4580:       0b000000000000000000000,
  4581:       0b000000000010000000000,
  4582:       0b000000100001000000000,
  4583:       0b000000100111110000000,
  4584:       0b000000101001001000000,
  4585:       0b000000010001001000000,
  4586:       0b000000010001001000000,
  4587:       0b000000010010001000000,
  4588:       0b000000000010010000000,
  4589:       0b000000000100000000000,
  4590:       0b000000000000000000000,
  4591:       0b000000000000000000000,
  4592:     },  //0xf5 ゆ
  4593:     {
  4594:       0b000000000000000000000,
  4595:       0b000000000000000000000,
  4596:       0b000000000010000000000,
  4597:       0b000000000010000000000,
  4598:       0b000000000011110000000,
  4599:       0b000000000010000000000,
  4600:       0b000000000010000000000,
  4601:       0b000000001111000000000,
  4602:       0b000000010010100000000,
  4603:       0b000000010010010000000,
  4604:       0b000000001100000000000,
  4605:       0b000000000000000000000,
  4606:       0b000000000000000000000,
  4607:     },  //0xf6 よ
  4608:     {
  4609:       0b000000000000000000000,
  4610:       0b000000000000000000000,
  4611:       0b000000011000000000000,
  4612:       0b000000000110000000000,
  4613:       0b000000000000000000000,
  4614:       0b000000010000000000000,
  4615:       0b000000010111100000000,
  4616:       0b000000011000010000000,
  4617:       0b000000010000010000000,
  4618:       0b000000000000100000000,
  4619:       0b000000000111000000000,
  4620:       0b000000000000000000000,
  4621:       0b000000000000000000000,
  4622:     },  //0xf7 ら
  4623:     {
  4624:       0b000000000000000000000,
  4625:       0b000000000000000000000,
  4626:       0b000000010011100000000,
  4627:       0b000000010100010000000,
  4628:       0b000000011000010000000,
  4629:       0b000000011000010000000,
  4630:       0b000000010000010000000,
  4631:       0b000000010000100000000,
  4632:       0b000000000000100000000,
  4633:       0b000000000001000000000,
  4634:       0b000000000110000000000,
  4635:       0b000000000000000000000,
  4636:       0b000000000000000000000,
  4637:     },  //0xf8 り
  4638:     {
  4639:       0b000000000000000000000,
  4640:       0b000000000000000000000,
  4641:       0b000000001111100000000,
  4642:       0b000000000001000000000,
  4643:       0b000000000010000000000,
  4644:       0b000000000100000000000,
  4645:       0b000000001111100000000,
  4646:       0b000000010000010000000,
  4647:       0b000000000111010000000,
  4648:       0b000000001000110000000,
  4649:       0b000000000111100000000,
  4650:       0b000000000000000000000,
  4651:       0b000000000000000000000,
  4652:     },  //0xf9 る
  4653:     {
  4654:       0b000000000000000000000,
  4655:       0b000000000000000000000,
  4656:       0b000000001000000000000,
  4657:       0b000000111011100000000,
  4658:       0b000000001100010000000,
  4659:       0b000000001000010000000,
  4660:       0b000000011000010000000,
  4661:       0b000000011000100000000,
  4662:       0b000000101000100000000,
  4663:       0b000000101001000000000,
  4664:       0b000000001001110000000,
  4665:       0b000000000000000000000,
  4666:       0b000000000000000000000,
  4667:     },  //0xfa れ
  4668:     {
  4669:       0b000000000000000000000,
  4670:       0b000000000000000000000,
  4671:       0b000000001111100000000,
  4672:       0b000000000001000000000,
  4673:       0b000000000010000000000,
  4674:       0b000000000100000000000,
  4675:       0b000000001111100000000,
  4676:       0b000000010000010000000,
  4677:       0b000000000000010000000,
  4678:       0b000000000000100000000,
  4679:       0b000000000111000000000,
  4680:       0b000000000000000000000,
  4681:       0b000000000000000000000,
  4682:     },  //0xfb ろ
  4683:     {
  4684:       0b000000000000000000000,
  4685:       0b000000000000000000000,
  4686:       0b000000001000000000000,
  4687:       0b000000001000000000000,
  4688:       0b000000111011100000000,
  4689:       0b000000001100010000000,
  4690:       0b000000011000010000000,
  4691:       0b000000011000010000000,
  4692:       0b000000111000010000000,
  4693:       0b000000101000100000000,
  4694:       0b000000001001000000000,
  4695:       0b000000000000000000000,
  4696:       0b000000000000000000000,
  4697:     },  //0xfc わ
  4698:     {
  4699:       0b000000000000000000000,
  4700:       0b000000000000000000000,
  4701:       0b000000000100000000000,
  4702:       0b000000000100000000000,
  4703:       0b000000000100000000000,
  4704:       0b000000001000000000000,
  4705:       0b000000001000000000000,
  4706:       0b000000011100000000000,
  4707:       0b000000010010010000000,
  4708:       0b000000100010010000000,
  4709:       0b000000100001100000000,
  4710:       0b000000000000000000000,
  4711:       0b000000000000000000000,
  4712:     },  //0xfd ん
  4713:     null,  //0xfe
  4714:     null,  //0xff
  4715:   };
  4716: 
  4717:   //LEDキーの番号→LEDキーに表示する文字のパターン
  4718:   public static final int[][] KBD_LED_LETTER = {
  4719:     {
  4720:       0b000000000000000000000,
  4721:       0b000000000000000000000,
  4722:       0b000001001000001001000,
  4723:       0b000001000100001000100,
  4724:       0b001111100100111100010,
  4725:       0b000010010010010001010,
  4726:       0b000010010010010001000,
  4727:       0b000100010000100111000,
  4728:       0b000100010000001001100,
  4729:       0b001000010000001001010,
  4730:       0b001001100000000110000,
  4731:       0b000000000000000000000,
  4732:       0b000000000000000000000,
  4733:     },  //0x5a  0 かな
  4734:     {
  4735:       0b000000000000000000000,
  4736:       0b000000000000000000000,
  4737:       0b000000000000000000000,
  4738:       0b001111100000011111000,
  4739:       0b001000100000000001000,
  4740:       0b001000100000000001000,
  4741:       0b001000101111010010000,
  4742:       0b001000100000001100000,
  4743:       0b001000100000000100000,
  4744:       0b001111100000000010000,
  4745:       0b000000000000000000000,
  4746:       0b000000000000000000000,
  4747:       0b000000000000000000000,
  4748:     },  //0x5b  1 ローマ字
  4749:     {
  4750:       0b000000000000000000000,
  4751:       0b000000000000000000000,
  4752:       0b000000000000000010100,
  4753:       0b001111100000001010100,
  4754:       0b000000100000001000000,
  4755:       0b000000100000001000000,
  4756:       0b000000101111001110000,
  4757:       0b000000100000001001000,
  4758:       0b000000100000001000000,
  4759:       0b001111100000001000000,
  4760:       0b000000000000000000000,
  4761:       0b000000000000000000000,
  4762:       0b000000000000000000000,
  4763:     },  //0x5c  2 コード入力
  4764:     {
  4765:       0b000000000000000000000,
  4766:       0b000000000000000000000,
  4767:       0b000000000000000000000,
  4768:       0b001100011001110001100,
  4769:       0b010010100101001010010,
  4770:       0b010000100101001010000,
  4771:       0b010000111101110001100,
  4772:       0b010000100101000000010,
  4773:       0b010010100101000010010,
  4774:       0b001100100101000001100,
  4775:       0b000000000000000000000,
  4776:       0b000000000000000000000,
  4777:       0b000000000000000000000,
  4778:     },  //0x5d  3 CAPS
  4779:     {
  4780:       0b000000000000000000000,
  4781:       0b000000000000000000000,
  4782:       0b000000000000000000000,
  4783:       0b000111001000100111000,
  4784:       0b000010001000101000100,
  4785:       0b000010001100101000000,
  4786:       0b000010001010100111000,
  4787:       0b000010001001100000100,
  4788:       0b000010001000101000100,
  4789:       0b000111001000100111000,
  4790:       0b000000000000000000000,
  4791:       0b000000000000000000000,
  4792:       0b000000000000000000000,
  4793:     },  //0x5e  4 INS
  4794:     {
  4795:       0b000000000000000000000,
  4796:       0b000000000000000000000,
  4797:       0b000000000000110000000,
  4798:       0b000111001000001100000,
  4799:       0b000001001100000000000,
  4800:       0b000010001010100000000,
  4801:       0b000100001000101111000,
  4802:       0b000100001000110000100,
  4803:       0b000100001000100000100,
  4804:       0b000100010000000001000,
  4805:       0b000011100000001110000,
  4806:       0b000000000000000000000,
  4807:       0b000000000000000000000,
  4808:     },  //0x5f  5 ひらがな
  4809:     {
  4810:       0b000000000000000000000,
  4811:       0b000000000000000000000,
  4812:       0b000001000000011110000,
  4813:       0b000010100000100010000,
  4814:       0b000100010001111111100,
  4815:       0b011000001100100100100,
  4816:       0b000111110000111111100,
  4817:       0b000001000000100100100,
  4818:       0b000111110000111111100,
  4819:       0b000001000000100000100,
  4820:       0b001111111001000001100,
  4821:       0b000000000000000000000,
  4822:       0b000000000000000000000,
  4823:     },  //0x60  6 全角
  4824:     {
  4825:       0b000000000000000000000,
  4826:       0b000000000000000000000,
  4827:       0b000000000000000000000,
  4828:       0b001000101000101000100,
  4829:       0b001000101000101101100,
  4830:       0b001100101000101010100,
  4831:       0b001010101000101000100,
  4832:       0b001001101000101000100,
  4833:       0b001000101000101000100,
  4834:       0b001000100111001000100,
  4835:       0b000000000000000000000,
  4836:       0b000000000000000000000,
  4837:       0b000000000000000000000,
  4838:     },  //0x74  7 NUM
  4839:   };
  4840: 
  4841:   //固定キーの番号→固定キーに表示する文字のパターン
  4842:   public static final int[][] KBD_FIX_LETTER = {
  4843:     {
  4844:       0b000000000000000000000,
  4845:       0b000000000000000000000,
  4846:       0b000000000000000000000,
  4847:       0b001111100111000111000,
  4848:       0b001000001000101000100,
  4849:       0b001000001000001000000,
  4850:       0b001111000111001000000,
  4851:       0b001000000000101000000,
  4852:       0b001000001000101000100,
  4853:       0b001111100111000111000,
  4854:       0b000000000000000000000,
  4855:       0b000000000000000000000,
  4856:       0b000000000000000000000,
  4857:     },  //0x01  0 ESC
  4858:     {
  4859:       0b000000000000000000000,
  4860:       0b000000000000000000000,
  4861:       0b000000000000000000000,
  4862:       0b000001111000111000000,
  4863:       0b000001000101000100000,
  4864:       0b000001000101000000000,
  4865:       0b000001111000111000000,
  4866:       0b000001000100000100000,
  4867:       0b000001000101000100000,
  4868:       0b000001111000111000000,
  4869:       0b000000000000000000000,
  4870:       0b000000000000000000000,
  4871:       0b000000000000000000000,
  4872:     },  //0x0f  1 BS
  4873:     {
  4874:       0b000000000000000000000,
  4875:       0b000000000000000000000,
  4876:       0b000000000000000000000,
  4877:       0b001111100010001111000,
  4878:       0b000010000101001000100,
  4879:       0b000010000101001000100,
  4880:       0b000010001000101111000,
  4881:       0b000010001111101000100,
  4882:       0b000010001000101000100,
  4883:       0b000010001000101111000,
  4884:       0b000000000000000000000,
  4885:       0b000000000000000000000,
  4886:       0b000000000000000000000,
  4887:     },  //0x10  2 TAB
  4888:     {
  4889:       0b0,0b00000000000000000000000000000000,
  4890:       0b0,0b00000000000000000000000000000000,
  4891:       0b0,0b00000000000000000000000000000000,
  4892:       0b0,0b00000000000000000000000000000000,
  4893:       0b0,0b00000000000000000000000000000000,
  4894:       0b0,0b00000000000000000000000000000000,
  4895:       0b0,0b00000000000000000000000000000000,
  4896:       0b0,0b00000000000000000001110000000000,
  4897:       0b0,0b00000000000000000001010000000000,
  4898:       0b0,0b00000000000000000001010000000000,
  4899:       0b0,0b00000000000000000001010000000000,
  4900:       0b0,0b00000000000000000001010000000000,
  4901:       0b0,0b00000000000000000001010000000000,
  4902:       0b0,0b00000000000000000001010000000000,
  4903:       0b0,0b00000000000000000001010000000000,
  4904:       0b0,0b00000000000000000001010000000000,
  4905:       0b0,0b00000000000000000001010000000000,
  4906:       0b0,0b00000000000000001001010000000000,
  4907:       0b0,0b00000000000000011001010000000000,
  4908:       0b0,0b00000000000000101111010000000000,
  4909:       0b0,0b00000000000001000000010000000000,
  4910:       0b0,0b00000000000000101111110000000000,
  4911:       0b0,0b00000000000000011000000000000000,
  4912:       0b0,0b00000000000000001000000000000000,
  4913:       0b0,0b00000000000000000000000000000000,
  4914:       0b0,0b00000000000000000000000000000000,
  4915:       0b0,0b00000000000000000000000000000000,
  4916:       0b0,0b00000000000000000000000000000000,
  4917:       0b0,0b00000000000000000000000000000000,
  4918:     },  //0x1d  3 RETURN
  4919:     null,  //0x35  4 Space
  4920:     {
  4921:       0b000000000000000000000,
  4922:       0b000000000000000000000,
  4923:       0b000000000000000000000,
  4924:       0b010010011001001011110,
  4925:       0b010010100101111010000,
  4926:       0b010010100101111010000,
  4927:       0b011110100101001011100,
  4928:       0b010010100101001010000,
  4929:       0b010010100101001010000,
  4930:       0b010010011001001011110,
  4931:       0b000000000000000000000,
  4932:       0b000000000000000000000,
  4933:       0b000000000000000000000,
  4934:     },  //0x36  5 HOME
  4935:     {
  4936:       0b000000000000000000000,
  4937:       0b000000000000000000000,
  4938:       0b000000000000000000000,
  4939:       0b001110001111101000000,
  4940:       0b001001001000001000000,
  4941:       0b001000101000001000000,
  4942:       0b001000101111001000000,
  4943:       0b001000101000001000000,
  4944:       0b001001001000001000000,
  4945:       0b001110001111101111100,
  4946:       0b000000000000000000000,
  4947:       0b000000000000000000000,
  4948:       0b000000000000000000000,
  4949:     },  //0x37  6 DEL
  4950:     {
  4951:       0b000000000000000000000,
  4952:       0b011100011001000010000,
  4953:       0b010010100101000010000,
  4954:       0b011100100101000010000,
  4955:       0b010010100101000010000,
  4956:       0b010010011001111011110,
  4957:       0b000000000000000000000,
  4958:       0b000000100101110000000,
  4959:       0b000000100101001000000,
  4960:       0b000000100101110000000,
  4961:       0b000000100101000000000,
  4962:       0b000000011001000000000,
  4963:       0b000000000000000000000,
  4964:     },  //0x38  7 ROLLUP
  4965:     {
  4966:       0b000000000000000000000,
  4967:       0b011100011001000010000,
  4968:       0b010010100101000010000,
  4969:       0b011100100101000010000,
  4970:       0b010010100101000010000,
  4971:       0b010010011001111011110,
  4972:       0b000000000000000000000,
  4973:       0b011100011001001010010,
  4974:       0b010010100101001011010,
  4975:       0b010010100101111011110,
  4976:       0b010010100101111010110,
  4977:       0b011100011001001010010,
  4978:       0b000000000000000000000,
  4979:     },  //0x39  8 ROLLDOWN
  4980:     {
  4981:       0b000000000000000000000,
  4982:       0b000000000000000000000,
  4983:       0b000000000000000000000,
  4984:       0b010010100101100001100,
  4985:       0b010010100101010010010,
  4986:       0b010010110101001010010,
  4987:       0b010010111101001010010,
  4988:       0b010010101101001010010,
  4989:       0b010010100101010010010,
  4990:       0b001100100101100001100,
  4991:       0b000000000000000000000,
  4992:       0b000000000000000000000,
  4993:       0b000000000000000000000,
  4994:     },  //0x3a  9 UNDO
  4995:     {
  4996:       0b000000000000000000000,
  4997:       0b000000000000000000000,
  4998:       0b000000000000000000000,
  4999:       0b000000000100000000000,
  5000:       0b000000001100000000000,
  5001:       0b000000010111111000000,
  5002:       0b000000100000001000000,
  5003:       0b000000010111111000000,
  5004:       0b000000001100000000000,
  5005:       0b000000000100000000000,
  5006:       0b000000000000000000000,
  5007:       0b000000000000000000000,
  5008:       0b000000000000000000000,
  5009:     },  //0x3b 10 ←
  5010:     {
  5011:       0b000000000000000000000,
  5012:       0b000000000000000000000,
  5013:       0b000000000010000000000,
  5014:       0b000000000101000000000,
  5015:       0b000000001000100000000,
  5016:       0b000000011101110000000,
  5017:       0b000000000101000000000,
  5018:       0b000000000101000000000,
  5019:       0b000000000101000000000,
  5020:       0b000000000101000000000,
  5021:       0b000000000111000000000,
  5022:       0b000000000000000000000,
  5023:       0b000000000000000000000,
  5024:     },  //0x3c 11 ↑
  5025:     {
  5026:       0b000000000000000000000,
  5027:       0b000000000000000000000,
  5028:       0b000000000000000000000,
  5029:       0b000000000001000000000,
  5030:       0b000000000001100000000,
  5031:       0b000000111111010000000,
  5032:       0b000000100000001000000,
  5033:       0b000000111111010000000,
  5034:       0b000000000001100000000,
  5035:       0b000000000001000000000,
  5036:       0b000000000000000000000,
  5037:       0b000000000000000000000,
  5038:       0b000000000000000000000,
  5039:     },  //0x3d 12 →
  5040:     {
  5041:       0b000000000000000000000,
  5042:       0b000000000000000000000,
  5043:       0b000000000111000000000,
  5044:       0b000000000101000000000,
  5045:       0b000000000101000000000,
  5046:       0b000000000101000000000,
  5047:       0b000000000101000000000,
  5048:       0b000000011101110000000,
  5049:       0b000000001000100000000,
  5050:       0b000000000101000000000,
  5051:       0b000000000010000000000,
  5052:       0b000000000000000000000,
  5053:       0b000000000000000000000,
  5054:     },  //0x3e 13 ↓
  5055:     {
  5056:       0b000000000000000000000,
  5057:       0b000000000000000000000,
  5058:       0b000000000000000000000,
  5059:       0b000111001000001111000,
  5060:       0b001000101000001000100,
  5061:       0b001000001000001000100,
  5062:       0b001000001000001111000,
  5063:       0b001000001000001000100,
  5064:       0b001000101000001000100,
  5065:       0b000111001111101000100,
  5066:       0b000000000000000000000,
  5067:       0b000000000000000000000,
  5068:       0b000000000000000000000,
  5069:     },  //0x3f 14 CLR
  5070:     {
  5071:       0b000000000000000000000,
  5072:       0b000000000000000000000,
  5073:       0b000000000000000000000,
  5074:       0b000000000000010000000,
  5075:       0b000000000000100000000,
  5076:       0b000000000001000000000,
  5077:       0b000000000010000000000,
  5078:       0b000000000100000000000,
  5079:       0b000000001000000000000,
  5080:       0b000000010000000000000,
  5081:       0b000000000000000000000,
  5082:       0b000000000000000000000,
  5083:       0b000000000000000000000,
  5084:     },  //0x40 15 /
  5085:     {
  5086:       0b000000000000000000000,
  5087:       0b000000000000000000000,
  5088:       0b000000000000000000000,
  5089:       0b000000000010000000000,
  5090:       0b000000010010010000000,
  5091:       0b000000001010100000000,
  5092:       0b000000000111000000000,
  5093:       0b000000001010100000000,
  5094:       0b000000010010010000000,
  5095:       0b000000000010000000000,
  5096:       0b000000000000000000000,
  5097:       0b000000000000000000000,
  5098:       0b000000000000000000000,
  5099:     },  //0x41 16 *
  5100:     {
  5101:       0b000000000000000000000,
  5102:       0b000000000000000000000,
  5103:       0b000000000000000000000,
  5104:       0b000000000000000000000,
  5105:       0b000000000000000000000,
  5106:       0b000000000000000000000,
  5107:       0b000000011111110000000,
  5108:       0b000000000000000000000,
  5109:       0b000000000000000000000,
  5110:       0b000000000000000000000,
  5111:       0b000000000000000000000,
  5112:       0b000000000000000000000,
  5113:       0b000000000000000000000,
  5114:     },  //0x42 17 -
  5115:     {
  5116:       0b000000000000000000000,
  5117:       0b000000000000000000000,
  5118:       0b000000011111110000000,
  5119:       0b000000000000010000000,
  5120:       0b000000000000010000000,
  5121:       0b000000000000100000000,
  5122:       0b000000000001000000000,
  5123:       0b000000000001000000000,
  5124:       0b000000000010000000000,
  5125:       0b000000000010000000000,
  5126:       0b000000000010000000000,
  5127:       0b000000000000000000000,
  5128:       0b000000000000000000000,
  5129:     },  //0x43 18 7
  5130:     {
  5131:       0b000000000000000000000,
  5132:       0b000000000000000000000,
  5133:       0b000000001111100000000,
  5134:       0b000000010000010000000,
  5135:       0b000000010000010000000,
  5136:       0b000000010000010000000,
  5137:       0b000000001111100000000,
  5138:       0b000000010000010000000,
  5139:       0b000000010000010000000,
  5140:       0b000000010000010000000,
  5141:       0b000000001111100000000,
  5142:       0b000000000000000000000,
  5143:       0b000000000000000000000,
  5144:     },  //0x44 19 8
  5145:     {
  5146:       0b000000000000000000000,
  5147:       0b000000000000000000000,
  5148:       0b000000001111100000000,
  5149:       0b000000010000010000000,
  5150:       0b000000010000010000000,
  5151:       0b000000010000010000000,
  5152:       0b000000001111110000000,
  5153:       0b000000000000010000000,
  5154:       0b000000000000010000000,
  5155:       0b000000000000100000000,
  5156:       0b000000001111000000000,
  5157:       0b000000000000000000000,
  5158:       0b000000000000000000000,
  5159:     },  //0x45 20 9
  5160:     {
  5161:       0b000000000000000000000,
  5162:       0b000000000000000000000,
  5163:       0b000000000000000000000,
  5164:       0b000000000010000000000,
  5165:       0b000000000010000000000,
  5166:       0b000000000010000000000,
  5167:       0b000000011111110000000,
  5168:       0b000000000010000000000,
  5169:       0b000000000010000000000,
  5170:       0b000000000010000000000,
  5171:       0b000000000000000000000,
  5172:       0b000000000000000000000,
  5173:       0b000000000000000000000,
  5174:     },  //0x46 21 +
  5175:     {
  5176:       0b000000000000000000000,
  5177:       0b000000000000000000000,
  5178:       0b000000000001100000000,
  5179:       0b000000000010100000000,
  5180:       0b000000000100100000000,
  5181:       0b000000001000100000000,
  5182:       0b000000010000100000000,
  5183:       0b000000010000100000000,
  5184:       0b000000011111110000000,
  5185:       0b000000000000100000000,
  5186:       0b000000000000100000000,
  5187:       0b000000000000000000000,
  5188:       0b000000000000000000000,
  5189:     },  //0x47 22 4
  5190:     {
  5191:       0b000000000000000000000,
  5192:       0b000000000000000000000,
  5193:       0b000000011111110000000,
  5194:       0b000000010000000000000,
  5195:       0b000000010000000000000,
  5196:       0b000000011111100000000,
  5197:       0b000000000000010000000,
  5198:       0b000000000000010000000,
  5199:       0b000000000000010000000,
  5200:       0b000000010000010000000,
  5201:       0b000000001111100000000,
  5202:       0b000000000000000000000,
  5203:       0b000000000000000000000,
  5204:     },  //0x48 23 5
  5205:     {
  5206:       0b000000000000000000000,
  5207:       0b000000000000000000000,
  5208:       0b000000000111100000000,
  5209:       0b000000001000000000000,
  5210:       0b000000010000000000000,
  5211:       0b000000010000000000000,
  5212:       0b000000011111100000000,
  5213:       0b000000010000010000000,
  5214:       0b000000010000010000000,
  5215:       0b000000010000010000000,
  5216:       0b000000001111100000000,
  5217:       0b000000000000000000000,
  5218:       0b000000000000000000000,
  5219:     },  //0x49 24 6
  5220:     {
  5221:       0b000000000000000000000,
  5222:       0b000000000000000000000,
  5223:       0b000000000000000000000,
  5224:       0b000000000000000000000,
  5225:       0b000000000000000000000,
  5226:       0b000000011111110000000,
  5227:       0b000000000000000000000,
  5228:       0b000000011111110000000,
  5229:       0b000000000000000000000,
  5230:       0b000000000000000000000,
  5231:       0b000000000000000000000,
  5232:       0b000000000000000000000,
  5233:       0b000000000000000000000,
  5234:     },  //0x4a 25 =
  5235:     {
  5236:       0b000000000000000000000,
  5237:       0b000000000000000000000,
  5238:       0b000000000010000000000,
  5239:       0b000000000110000000000,
  5240:       0b000000001010000000000,
  5241:       0b000000000010000000000,
  5242:       0b000000000010000000000,
  5243:       0b000000000010000000000,
  5244:       0b000000000010000000000,
  5245:       0b000000000010000000000,
  5246:       0b000000000010000000000,
  5247:       0b000000000000000000000,
  5248:       0b000000000000000000000,
  5249:     },  //0x4b 26 1
  5250:     {
  5251:       0b000000000000000000000,
  5252:       0b000000000000000000000,
  5253:       0b000000001111100000000,
  5254:       0b000000010000010000000,
  5255:       0b000000000000010000000,
  5256:       0b000000000000010000000,
  5257:       0b000000000001100000000,
  5258:       0b000000000110000000000,
  5259:       0b000000001000000000000,
  5260:       0b000000010000000000000,
  5261:       0b000000011111110000000,
  5262:       0b000000000000000000000,
  5263:       0b000000000000000000000,
  5264:     },  //0x4c 27 2
  5265:     {
  5266:       0b000000000000000000000,
  5267:       0b000000000000000000000,
  5268:       0b000000001111100000000,
  5269:       0b000000010000010000000,
  5270:       0b000000000000010000000,
  5271:       0b000000000000010000000,
  5272:       0b000000000011100000000,
  5273:       0b000000000000010000000,
  5274:       0b000000000000010000000,
  5275:       0b000000010000010000000,
  5276:       0b000000001111100000000,
  5277:       0b000000000000000000000,
  5278:       0b000000000000000000000,
  5279:     },  //0x4d 28 3
  5280:     {
  5281:       0b000000000000000000000,
  5282:       0b000000000000000000000,
  5283:       0b000000000000000000000,
  5284:       0b000000000000000000000,
  5285:       0b000000000000000000000,
  5286:       0b000000000000000000000,
  5287:       0b000000000000000000000,
  5288:       0b011101010111011101100,
  5289:       0b010001010010010001010,
  5290:       0b010001110010010001010,
  5291:       0b011101110010011101100,
  5292:       0b010001110010010001010,
  5293:       0b010001010010010001010,
  5294:       0b011101010010011101010,
  5295:       0b000000000000000000000,
  5296:       0b000000000000000000000,
  5297:       0b000000000000000000000,
  5298:       0b000000000000000000000,
  5299:       0b000000000000000000000,
  5300:       0b000000000000000000000,
  5301:       0b000000000000000000000,
  5302:     },  //0x4e 29 ENTER
  5303:     {
  5304:       0b000000000000000000000,
  5305:       0b000000000000000000000,
  5306:       0b000000001111100000000,
  5307:       0b000000010000010000000,
  5308:       0b000000010000010000000,
  5309:       0b000000010000010000000,
  5310:       0b000000010000010000000,
  5311:       0b000000010000010000000,
  5312:       0b000000010000010000000,
  5313:       0b000000010000010000000,
  5314:       0b000000001111100000000,
  5315:       0b000000000000000000000,
  5316:       0b000000000000000000000,
  5317:     },  //0x4f 30 0
  5318:     {
  5319:       0b000000000000000000000,
  5320:       0b000000000000000000000,
  5321:       0b000000000000000000000,
  5322:       0b000000000000000000000,
  5323:       0b000000000000000000000,
  5324:       0b000000000000000000000,
  5325:       0b000000000000000000000,
  5326:       0b000000000110000000000,
  5327:       0b000000000110000000000,
  5328:       0b000000000010000000000,
  5329:       0b000000000100000000000,
  5330:       0b000000000000000000000,
  5331:       0b000000000000000000000,
  5332:     },  //0x50 31 ,
  5333:     {
  5334:       0b000000000000000000000,
  5335:       0b000000000000000000000,
  5336:       0b000000000000000000000,
  5337:       0b000000000000000000000,
  5338:       0b000000000000000000000,
  5339:       0b000000000000000000000,
  5340:       0b000000000000000000000,
  5341:       0b000000000000000000000,
  5342:       0b000000000110000000000,
  5343:       0b000000000110000000000,
  5344:       0b000000000000000000000,
  5345:       0b000000000000000000000,
  5346:       0b000000000000000000000,
  5347:     },  //0x51 32 .
  5348:     {
  5349:       0b000000000000000000000,
  5350:       0b000000000000000000000,
  5351:       0b000111011110011111000,
  5352:       0b000000000010010001000,
  5353:       0b001111000010011111000,
  5354:       0b000000011110000000000,
  5355:       0b000111010000111111100,
  5356:       0b000000010000001000000,
  5357:       0b000111010000001111000,
  5358:       0b000101010010000001000,
  5359:       0b000111011110011111000,
  5360:       0b000000000000000000000,
  5361:       0b000000000000000000000,
  5362:     },  //0x52 33 記号入力
  5363:     {
  5364:       0b000000000000000000000,
  5365:       0b000000000000000000000,
  5366:       0b010111000100110011100,
  5367:       0b001010101001001000100,
  5368:       0b000111110010111011100,
  5369:       0b001000001001100000100,
  5370:       0b010111110100110111110,
  5371:       0b000100010001100001000,
  5372:       0b000111110010101011110,
  5373:       0b000010100001110011100,
  5374:       0b001111111011000101010,
  5375:       0b000000000000000000000,
  5376:       0b000000000000000000000,
  5377:     },  //0x53 34 登録
  5378:     {
  5379:       0b000000000000000000000,
  5380:       0b000000000000000000000,
  5381:       0b000000000000000000000,
  5382:       0b010010111101000011100,
  5383:       0b010010100001000010010,
  5384:       0b010010100001000010010,
  5385:       0b011110111001000011100,
  5386:       0b010010100001000010000,
  5387:       0b010010100001000010000,
  5388:       0b010010111101111010000,
  5389:       0b000000000000000000000,
  5390:       0b000000000000000000000,
  5391:       0b000000000000000000000,
  5392:     },  //0x54 35 HELP
  5393:     {
  5394:       0b000000000000000000000,
  5395:       0b000000000000000000000,
  5396:       0b000000000000000000000,
  5397:       0b001000101111100010000,
  5398:       0b001000101000000110000,
  5399:       0b000101001000000010000,
  5400:       0b000010001111000010000,
  5401:       0b000101001000000010000,
  5402:       0b001000101000000010000,
  5403:       0b001000101000000010000,
  5404:       0b000000000000000000000,
  5405:       0b000000000000000000000,
  5406:       0b000000000000000000000,
  5407:     },  //0x55 36 XF1
  5408:     {
  5409:       0b000000000000000000000,
  5410:       0b000000000000000000000,
  5411:       0b000000000000000000000,
  5412:       0b001000101111100111000,
  5413:       0b001000101000001000100,
  5414:       0b000101001000000000100,
  5415:       0b000010001111000011000,
  5416:       0b000101001000000100000,
  5417:       0b001000101000001000000,
  5418:       0b001000101000001111100,
  5419:       0b000000000000000000000,
  5420:       0b000000000000000000000,
  5421:       0b000000000000000000000,
  5422:     },  //0x56 37 XF2
  5423:     {
  5424:       0b000000000000000000000,
  5425:       0b000000000000000000000,
  5426:       0b000000000000000000000,
  5427:       0b001000101111100111000,
  5428:       0b001000101000001000100,
  5429:       0b000101001000000000100,
  5430:       0b000010001111000011000,
  5431:       0b000101001000000000100,
  5432:       0b001000101000001000100,
  5433:       0b001000101000000111000,
  5434:       0b000000000000000000000,
  5435:       0b000000000000000000000,
  5436:       0b000000000000000000000,
  5437:     },  //0x57 38 XF3
  5438:     {
  5439:       0b000000000000000000000,
  5440:       0b000000000000000000000,
  5441:       0b000000000000000000000,
  5442:       0b001000101111100001000,
  5443:       0b001000101000000011000,
  5444:       0b000101001000000101000,
  5445:       0b000010001111001001000,
  5446:       0b000101001000001111100,
  5447:       0b001000101000000001000,
  5448:       0b001000101000000001000,
  5449:       0b000000000000000000000,
  5450:       0b000000000000000000000,
  5451:       0b000000000000000000000,
  5452:     },  //0x58 39 XF4
  5453:     {
  5454:       0b000000000000000000000,
  5455:       0b000000000000000000000,
  5456:       0b000000000000000000000,
  5457:       0b001000101111101111100,
  5458:       0b001000101000001000000,
  5459:       0b000101001000001111000,
  5460:       0b000010001111000000100,
  5461:       0b000101001000000000100,
  5462:       0b001000101000001000100,
  5463:       0b001000101000000111000,
  5464:       0b000000000000000000000,
  5465:       0b000000000000000000000,
  5466:       0b000000000000000000000,
  5467:     },  //0x59 40 XF5
  5468:     {
  5469:       0b000000000000000000000,
  5470:       0b000000000000000000000,
  5471:       0b000000000000000000000,
  5472:       0b011001100111001001010,
  5473:       0b010101010100010101010,
  5474:       0b010101010100010101010,
  5475:       0b011001100111011101100,
  5476:       0b010101010100010101010,
  5477:       0b010101010100010101010,
  5478:       0b011001010111010101010,
  5479:       0b000000000000000000000,
  5480:       0b000000000000000000000,
  5481:       0b000000000000000000000,
  5482:     },  //0x61 41 BREAK
  5483:     {
  5484:       0b000000000000000000000,
  5485:       0b000000000000000000000,
  5486:       0b000000000000000000000,
  5487:       0b001100011001110100010,
  5488:       0b010010100101001100010,
  5489:       0b010000100101001010100,
  5490:       0b010000100101110001000,
  5491:       0b010000100101000001000,
  5492:       0b010010100101000001000,
  5493:       0b001100011001000001000,
  5494:       0b000000000000000000000,
  5495:       0b000000000000000000000,
  5496:       0b000000000000000000000,
  5497:     },  //0x62 42 COPY
  5498:     {
  5499:       0b000000000000000000000000000,
  5500:       0b000000000000000000000000000,
  5501:       0b000000001111100010000000000,
  5502:       0b000000001000000110000000000,
  5503:       0b000000001000000010000000000,
  5504:       0b000000001111000010000000000,
  5505:       0b000000001000000010000000000,
  5506:       0b000000001000000010000000000,
  5507:       0b000000001000000010000000000,
  5508:       0b000000000000000000000000000,
  5509:       0b000000000000000000000000000,
  5510:     },  //0x63 43 F1
  5511:     {
  5512:       0b000000000000000000000000000,
  5513:       0b000000000000000000000000000,
  5514:       0b000000001111100111000000000,
  5515:       0b000000001000001000100000000,
  5516:       0b000000001000000000100000000,
  5517:       0b000000001111000011000000000,
  5518:       0b000000001000000100000000000,
  5519:       0b000000001000001000000000000,
  5520:       0b000000001000001111100000000,
  5521:       0b000000000000000000000000000,
  5522:       0b000000000000000000000000000,
  5523:     },  //0x64 44 F2
  5524:     {
  5525:       0b000000000000000000000000000,
  5526:       0b000000000000000000000000000,
  5527:       0b000000001111100111000000000,
  5528:       0b000000001000001000100000000,
  5529:       0b000000001000000000100000000,
  5530:       0b000000001111000011000000000,
  5531:       0b000000001000000000100000000,
  5532:       0b000000001000001000100000000,
  5533:       0b000000001000000111000000000,
  5534:       0b000000000000000000000000000,
  5535:       0b000000000000000000000000000,
  5536:     },  //0x65 45 F3
  5537:     {
  5538:       0b000000000000000000000000000,
  5539:       0b000000000000000000000000000,
  5540:       0b000000001111100001000000000,
  5541:       0b000000001000000011000000000,
  5542:       0b000000001000000101000000000,
  5543:       0b000000001111001001000000000,
  5544:       0b000000001000001111100000000,
  5545:       0b000000001000000001000000000,
  5546:       0b000000001000000001000000000,
  5547:       0b000000000000000000000000000,
  5548:       0b000000000000000000000000000,
  5549:     },  //0x66 46 F4
  5550:     {
  5551:       0b000000000000000000000000000,
  5552:       0b000000000000000000000000000,
  5553:       0b000000001111101111100000000,
  5554:       0b000000001000001000000000000,
  5555:       0b000000001000001111000000000,
  5556:       0b000000001111000000100000000,
  5557:       0b000000001000000000100000000,
  5558:       0b000000001000001000100000000,
  5559:       0b000000001000000111000000000,
  5560:       0b000000000000000000000000000,
  5561:       0b000000000000000000000000000,
  5562:     },  //0x67 47 F5
  5563:     {
  5564:       0b000000000000000000000000000,
  5565:       0b000000000000000000000000000,
  5566:       0b000000001111100011000000000,
  5567:       0b000000001000000100000000000,
  5568:       0b000000001000001000000000000,
  5569:       0b000000001111001111000000000,
  5570:       0b000000001000001000100000000,
  5571:       0b000000001000001000100000000,
  5572:       0b000000001000000111000000000,
  5573:       0b000000000000000000000000000,
  5574:       0b000000000000000000000000000,
  5575:     },  //0x68 48 F6
  5576:     {
  5577:       0b000000000000000000000000000,
  5578:       0b000000000000000000000000000,
  5579:       0b000000001111101111100000000,
  5580:       0b000000001000000000100000000,
  5581:       0b000000001000000000100000000,
  5582:       0b000000001111000001000000000,
  5583:       0b000000001000000010000000000,
  5584:       0b000000001000000010000000000,
  5585:       0b000000001000000010000000000,
  5586:       0b000000000000000000000000000,
  5587:       0b000000000000000000000000000,
  5588:     },  //0x69 49 F7
  5589:     {
  5590:       0b000000000000000000000000000,
  5591:       0b000000000000000000000000000,
  5592:       0b000000001111100111000000000,
  5593:       0b000000001000001000100000000,
  5594:       0b000000001000001000100000000,
  5595:       0b000000001111000111000000000,
  5596:       0b000000001000001000100000000,
  5597:       0b000000001000001000100000000,
  5598:       0b000000001000000111000000000,
  5599:       0b000000000000000000000000000,
  5600:       0b000000000000000000000000000,
  5601:     },  //0x6a 50 F8
  5602:     {
  5603:       0b000000000000000000000000000,
  5604:       0b000000000000000000000000000,
  5605:       0b000000001111100111000000000,
  5606:       0b000000001000001000100000000,
  5607:       0b000000001000001000100000000,
  5608:       0b000000001111000111100000000,
  5609:       0b000000001000000000100000000,
  5610:       0b000000001000000001000000000,
  5611:       0b000000001000000110000000000,
  5612:       0b000000000000000000000000000,
  5613:       0b000000000000000000000000000,
  5614:     },  //0x6b 51 F9
  5615:     {
  5616:       0b000000000000000000000000000,
  5617:       0b000000000000000000000000000,
  5618:       0b000001111100010000111000000,
  5619:       0b000001000000110001000100000,
  5620:       0b000001000000010001000100000,
  5621:       0b000001111000010001000100000,
  5622:       0b000001000000010001000100000,
  5623:       0b000001000000010001000100000,
  5624:       0b000001000000010000111000000,
  5625:       0b000000000000000000000000000,
  5626:       0b000000000000000000000000000,
  5627:     },  //0x6c 52 F10
  5628:     {
  5629:       0b0000000,0b00000000000000000000000000000000,
  5630:       0b0000000,0b00000000000000000000000000000000,
  5631:       0b0000000,0b00000000000000000000000000000000,
  5632:       0b0000001,0b11001000100111001111101111100000,
  5633:       0b0000010,0b00101000100010001000000010000000,
  5634:       0b0000010,0b00001000100010001000000010000000,
  5635:       0b0000001,0b11001111100010001111000010000000,
  5636:       0b0000000,0b00101000100010001000000010000000,
  5637:       0b0000010,0b00101000100010001000000010000000,
  5638:       0b0000001,0b11001000100111001000000010000000,
  5639:       0b0000000,0b00000000000000000000000000000000,
  5640:       0b0000000,0b00000000000000000000000000000000,
  5641:       0b0000000,0b00000000000000000000000000000000,
  5642:     },  //0x70 53 SHIFT
  5643:     {
  5644:       0b000000000000000000000000000,
  5645:       0b000000000000000000000000000,
  5646:       0b000000000000000000000000000,
  5647:       0b000111001111101111001000000,
  5648:       0b001000100010001000101000000,
  5649:       0b001000000010001000101000000,
  5650:       0b001000000010001111001000000,
  5651:       0b001000000010001000101000000,
  5652:       0b001000100010001000101000000,
  5653:       0b000111000010001000101111100,
  5654:       0b000000000000000000000000000,
  5655:       0b000000000000000000000000000,
  5656:       0b000000000000000000000000000,
  5657:     },  //0x71 54 CTRL
  5658:     {
  5659:       0b000000000000000000000,
  5660:       0b000000000000000000000,
  5661:       0b000000000000000000000,
  5662:       0b000110011100111000100,
  5663:       0b001001010010010001100,
  5664:       0b001001010010010000100,
  5665:       0b001001011100010000100,
  5666:       0b001001010000010000100,
  5667:       0b001001010000010000100,
  5668:       0b000110010000010100100,
  5669:       0b000000000000000000000,
  5670:       0b000000000000000000000,
  5671:       0b000000000000000000000,
  5672:     },  //0x72 55 OPT.1
  5673:     {
  5674:       0b000000000000000000000,
  5675:       0b000000000000000000000,
  5676:       0b000000000000000000000,
  5677:       0b001100111001110001100,
  5678:       0b010010100100100010010,
  5679:       0b010010100100100000010,
  5680:       0b010010111000100000100,
  5681:       0b010010100000100001000,
  5682:       0b010010100000100010000,
  5683:       0b001100100000101011110,
  5684:       0b000000000000000000000,
  5685:       0b000000000000000000000,
  5686:       0b000000000000000000000,
  5687:     },  //0x73 56 OPT.2
  5688:   };
  5689: 
  5690:   //キーのビットマップ
  5691:   //  可変キーとLEDキーはキー毎にビットマップを用意する
  5692:   //  可変キーのビットマップの幅はキーの幅
  5693:   public static final int[][][] kbdVarStatBitmap = new int[256][][];  //文字コード→状態→可変キーのビットマップ
  5694:   public static final int[][][] kbdLedStatBitmap = new int[KBD_LED_KEYS][][];  //LEDキーの番号→状態→LEDキーのビットマップ
  5695: 
  5696:   //種類毎に別々に用意するもの
  5697:   //  ビットマップ
  5698:   //    ピクセルオフセット→RGBコード
  5699:   //    固定キーのビットマップの幅はキーボードの幅
  5700:   //  番号マップ
  5701:   //    ピクセルオフセット→番号。-1=キーがない
  5702:   //    マウスの座標にどのキーがあるか瞬時に判断するための配列
  5703:   //  レクタングル
  5704:   //    {}または{x,y,w,h}または{x1,y1,w1,h1,x2,y2,w2,h2}
  5705:   //    1段目を囲む0個~2個の長方形。欠番は0個、RETURNキーとSHIFTキーは2個、その他は1個
  5706:   //    キーを描き変えるときに使う
  5707:   public static final BufferedImage[] kbdDataTypeImage = new BufferedImage[KBD_TYPES];  //種類→イメージ
  5708:   public static final int[] kbdDataTypeWidth = new int[KBD_TYPES];  //種類→キーボードの幅
  5709:   public static final int[] kbdDataTypeHeight = new int[KBD_TYPES];  //種類→キーボードの高さ
  5710:   public static final int[][] kbdDataTypeBitmap = new int[KBD_TYPES][];  //種類→ビットマップ
  5711:   public static final byte[][] kbdDataTypeIndexMap = new byte[KBD_TYPES][];  //種類→番号マップ
  5712:   public static final int[][][] kbdDataTypeStatFixBitmap = new int[KBD_TYPES][][];  //種類→状態→固定キーのビットマップ
  5713:   public static final int[][][] kbdDataTypeIndexRect = new int[KBD_TYPES][][];  //種類→番号→レクタングル
  5714:   public static final int[][] kbdDataTypeIndexCharacterStat = new int[KBD_TYPES][];  //種類→番号→最後に描画したときの文字<<8|状態。-1=まだ描画されていない
  5715: 
  5716:   //設定
  5717:   public static boolean kbdUSLayoutOn;  //true=USレイアウト。初期値を選択するときに使う
  5718:   public static int[] kbdDefaultMapNonZ;  //Zキーボード以外のデフォルトのキーマップ
  5719:   public static int[] kbdCurrentMapNonZ;  //(Zキーボードのとき)Zキーボード以外のキーマップのバックアップ
  5720:   public static int[] kbdCurrentMap;  //現在のキーマップ
  5721: 
  5722:   //現在の状態
  5723:   //  表示位置のXEiJ.pnlKeyboardX,XEiJ.pnlKeyboardYはパネル側で制御するのでここにはない
  5724:   public static boolean kbdOn;  //true=表示する,false=表示しない
  5725:   public static int kbdType;  //キーボードの種類。KBD_STANDARD_TYPEまたはKBD_COMPACT_TYPE
  5726:   public static int kbdWidth;  //キーボードの幅
  5727:   public static int kbdHeight;  //キーボードの高さ
  5728:   public static BufferedImage kbdImage;  //イメージ
  5729:   public static int[] kbdBitmap;  //ビットマップ
  5730:   public static byte[] kbdIndexMap;  //番号マップ
  5731:   public static final int[] kbdStat = new int[KBD_ALL_KEYS];  //番号→状態
  5732:   public static int kbdPointedIndex;  //ポイントされているキーの番号。-1=どのキーもポイントされていない
  5733:   public static TimerTask kbdRepeatTask;  //リピート中のキーコードをMFPに転送するタスク。null=リピート中ではない
  5734:   public static int kbdRepeatDelay;  //リピートディレイ(ms)
  5735:   public static int kbdRepeatInterval;  //リピートインターバル(ms)
  5736:   public static int kbdLedBrightness;  //LEDの明るさ。0=明るい,1=やや明るい,2=やや暗い,3=暗い
  5737: 
  5738:   public static final int KBD_F11_FULLSCREEN = 0;
  5739:   public static final int KBD_F11_SCREENSHOT = 1;
  5740:   public static final int KBD_F11_GIFANIMATION = 2;
  5741:   public static final int KBD_F11_STOPANDSTART = 3;
  5742:   public static final int KBD_F11_DO_NOTHING = 4;
  5743:   public static int kbdF11Mode;  //F11キーが押されたとき何をするか
  5744: 
  5745:   //Zキーボード
  5746:   public static final boolean KBD_ZKEY_ON = true;
  5747:   public static boolean kbdZKeyOnRequest;  //true=Zキーボードを制御する
  5748:   public static boolean kbdZKeyOn;  //true=Zキーボードを制御する
  5749:   public static int kbdZKeyStatus;  //LEDの状態。bit0=かな,…,bit7=全角,0=消灯,1=点灯。ポートが開いていなくても更新する
  5750:   public static ZKeyLEDPort kbdZKeyPort;  //ポート
  5751:   public static boolean kbdZKeyDebugFlag;  //デバッグフラグ
  5752:   //  I/Oポート
  5753:   //  $00E9F040  かな
  5754:   //  $00E9F041  ローマ字
  5755:   //  $00E9F042  コード入力
  5756:   //  $00E9F043  CAPS
  5757:   //  $00E9F044  INS
  5758:   //  $00E9F045  ひらがな
  5759:   //  $00E9F046  全角
  5760:   //  $00E9F047  reserved
  5761:   //  $00E9F048  bit0    programmable  0=ノーマルモード,1=プログラマブルモード
  5762:   //             bit1    send          1=送信
  5763:   //             bit2-7  reserved
  5764:   //  $00E9F049  reserved
  5765:   //      :         :
  5766:   //  $00E9F04F  reserved
  5767:   public static final int KBD_ZKEY_IO_ADDRESS = 0x00e9f040;
  5768:   public static final int KBD_ZKEY_IO_SIZE = 16;
  5769:   public static long kbdZKeyIOData;  //I/Oポートのデータ
  5770:   public static boolean kbdZKeyIOProgrammable;  //false=ノーマルモード,true=プログラマブルモード
  5771:   //  入力
  5772:   //    BREAKの半角(VK 244)と全角(VK 243)は押されたときreleasedが発火していつ離されたのか分からない
  5773:   //      半角(VK 244)と全角(VK 243)のpressedを無視する。releasedで入力してすぐ離す
  5774:   //    CAPSの英数字(VK 240)→F17は押されたときreleasedが発火するがXF4でも発火するので区別がつかずいつ離されたのかも分からない
  5775:   //      英数字(VK 240)→F17のreleasedを無視する。pressedで入力してすぐ離す
  5776:   //    XF4のひらがな(VK 242)→F16は押されたときreleasedが発火していつ離されたのか分からない
  5777:   //      ひらがな(VK 242)→F16のreleasedを無視する。pressedで入力して他のキーが離されるまで押されたままにする
  5778:   //    NumLockが点灯していないとテンキーの5と=を区別できない
  5779:   //      NumLockが離されたときNumLockが消灯していたら叩いて点灯させる。次のNumLockを入力に使わない
  5780:   public static KeyEvent kbdXF4Locked;  //押されたままのXF4
  5781:   public static boolean kbdSavedNumLock;  //保存したNumLock
  5782:   public static boolean kbdIgnoreNumLock;  //NumLockを1回無視する
  5783:   //  キーマップ
  5784:   public static int[] kbdDefaultMapZ;  //Zキーボードのデフォルトのキーマップ
  5785:   public static int[] kbdCurrentMapZ;  //(Zキーボードでないとき)Zキーボードのキーマップのバックアップ
  5786:   //  メニュー
  5787:   public static JMenu kbdF11KeyMenu;
  5788:   public static JMenu kbdZKeyMenu;
  5789:   public static JCheckBoxMenuItem kbdZKeyConnectCheckBox;
  5790:   public static JCheckBoxMenuItem kbdZKeyDemoCheckBox;
  5791: 
  5792:   //キーの番号
  5793:   //  eo
  5794:   //    emulator order
  5795:   //    可変キー48個、LEDキー8個、固定キー57個の順で合計113個
  5796:   //  xo
  5797:   //    X68000 order
  5798:   //    X68000(NUM OFF)のキーコードの昇順。113個
  5799: 
  5800:   //キーマップ
  5801:   //  keyCode
  5802:   //    ke.getKeyCode()
  5803:   //    Windowsの「¥」と「ろ」のキーコードは92。キーコードだけでは見分けられない
  5804:   //  keyLocation
  5805:   //    ke.getKeyLocation()
  5806:   //    1  STANDARD
  5807:   //    2  LEFT
  5808:   //    3  RIGHT
  5809:   //    4  NUMPAD
  5810:   //    Macの「ろ」のキーロケーションは4。意味不明。
  5811:   //  extendedKeyCode
  5812:   //    ke.getExtendedKeyCode()
  5813:   //    Macの「¥」と「]」の拡張キーコードは92。拡張キーコードだけでは見分けられない
  5814:   //    MacのShift+5の拡張キーコードは0。ユニークIDどころかIDの用もなしていない
  5815:   //  rawCode
  5816:   //    ke.paramString()から取り出す
  5817:   //    Java15までrawCodeを直接参照できた。Java16から直接参照できなくなった
  5818:   //  intCode
  5819:   //    KeyEventのデータをintに詰め込む
  5820:   //    Mac
  5821:   //      (keyCode&0xfff)<<16|(extendedKeyCode&0x0f000fff)<<4|(keyLocation&0xf)
  5822:   //    Windows
  5823:   //      (keyCode&0xfff)<<16|(rawCode&0xfff)<<4|(keyLocation&0xf)
  5824:   //  kbdCurrentMap
  5825:   //    kbdCurrentMap[3*xo]=intCode1
  5826:   //    kbdCurrentMap[3*xo+1]=intCode2
  5827:   //    kbdCurrentMap[3*xo+2]=intCode3
  5828:   //  メモ
  5829:   //    半角全角漢字、変換、カタカナひらがなはKeyEventが発生しない
  5830:   //    窓はconsumeしてもスタートメニューが開く
  5831:   //    NumLock、ScrollLockはconsumeしてもNumLock、ScrollLockが切り替わる
  5832:   //
  5833: 
  5834:   //Thanks to saku39 for providing the data for the Linux.
  5835:   public static final int[] KBD_DEFAULT_MAP_LINUX = {
  5836:     //(keyCode&0xffff)<<16|(rawCode&0xfff)<<4|(keyLocation&0xf)
  5837:     //cccc_rrr_l    cccc_rrr_l    cccc_rrr_l        xo   hex  dec  text
  5838:     0x001b_01b_1, 0x001b_009_1, 0x0000_000_0,  //    0  0x01    1  ESC
  5839:     0x0031_031_1, 0x0031_00a_1, 0x0000_000_0,  //    1  0x02    2  1!ぬ 
  5840:     0x0032_032_1, 0x0032_00b_1, 0x0000_000_0,  //    2  0x03    3  2"ふ 
  5841:     0x0033_033_1, 0x0033_00c_1, 0x0000_000_0,  //    3  0x04    4  3#あぁ
  5842:     0x0034_034_1, 0x0034_00d_1, 0x0000_000_0,  //    4  0x05    5  4$うぅ
  5843:     0x0035_035_1, 0x0035_00e_1, 0x0000_000_0,  //    5  0x06    6  5%えぇ
  5844:     0x0036_036_1, 0x0036_00f_1, 0x0000_000_0,  //    6  0x07    7  6&おぉ
  5845:     0x0037_037_1, 0x0037_010_1, 0x0000_000_0,  //    7  0x08    8  7'やゃ
  5846:     0x0038_038_1, 0x0038_011_1, 0x0000_000_0,  //    8  0x09    9  8(ゆゅ
  5847:     0x0039_039_1, 0x0039_012_1, 0x0000_000_0,  //    9  0x0a   10  9)よょ
  5848:     0x0030_030_1, 0x0030_013_1, 0x0000_000_0,  //   10  0x0b   11  0 わを
  5849:     0x002d_0bd_1, 0x002d_014_1, 0x0000_000_0,  //   11  0x0c   12  -=ほ 
  5850:     0x0202_0de_1, 0x0202_015_1, 0x0000_000_0,  //   12  0x0d   13  ^~へ 
  5851:     0x005c_0dc_1, 0x005c_084_1, 0x0000_000_0,  //   13  0x0e   14  ¥|ー 
  5852:     0x0008_008_1, 0x0008_016_1, 0x0000_000_0,  //   14  0x0f   15  BS
  5853:     0x0009_009_1, 0x0009_017_1, 0x0000_000_0,  //   15  0x10   16  TAB
  5854:     0x0051_051_1, 0x0051_018_1, 0x0000_000_0,  //   16  0x11   17  Q た 
  5855:     0x0057_057_1, 0x0057_019_1, 0x0000_000_0,  //   17  0x12   18  W て 
  5856:     0x0045_045_1, 0x0045_01a_1, 0x0000_000_0,  //   18  0x13   19  E いぃ
  5857:     0x0052_052_1, 0x0052_01b_1, 0x0000_000_0,  //   19  0x14   20  R す 
  5858:     0x0054_054_1, 0x0054_01c_1, 0x0000_000_0,  //   20  0x15   21  T か 
  5859:     0x0059_059_1, 0x0059_01d_1, 0x0000_000_0,  //   21  0x16   22  Y ん 
  5860:     0x0055_055_1, 0x0055_01e_1, 0x0000_000_0,  //   22  0x17   23  U な 
  5861:     0x0049_049_1, 0x0049_01f_1, 0x0000_000_0,  //   23  0x18   24  I に 
  5862:     0x004f_04f_1, 0x004f_020_1, 0x0000_000_0,  //   24  0x19   25  O ら 
  5863:     0x0050_050_1, 0x0050_021_1, 0x0000_000_0,  //   25  0x1a   26  P せ 
  5864:     0x0200_0c0_1, 0x0200_022_1, 0x0000_000_0,  //   26  0x1b   27  @`゛ 
  5865:     0x005b_0db_1, 0x005b_023_1, 0x0000_000_0,  //   27  0x1c   28  [{゜「
  5866:     0x000a_00d_1, 0x000a_024_1, 0x0000_000_0,  //   28  0x1d   29  リターン
  5867:     0x0041_041_1, 0x0041_026_1, 0x0000_000_0,  //   29  0x1e   30  A ち 
  5868:     0x0053_053_1, 0x0053_027_1, 0x0000_000_0,  //   30  0x1f   31  S と 
  5869:     0x0044_044_1, 0x0044_028_1, 0x0000_000_0,  //   31  0x20   32  D し 
  5870:     0x0046_046_1, 0x0046_029_1, 0x0000_000_0,  //   32  0x21   33  F は 
  5871:     0x0047_047_1, 0x0047_02a_1, 0x0000_000_0,  //   33  0x22   34  G き 
  5872:     0x0048_048_1, 0x0048_02b_1, 0x0000_000_0,  //   34  0x23   35  H く 
  5873:     0x004a_04a_1, 0x004a_02c_1, 0x0000_000_0,  //   35  0x24   36  J ま 
  5874:     0x004b_04b_1, 0x004b_02d_1, 0x0000_000_0,  //   36  0x25   37  K の 
  5875:     0x004c_04c_1, 0x004c_02e_1, 0x0000_000_0,  //   37  0x26   38  L り 
  5876:     0x003b_0bb_1, 0x003b_02f_1, 0x0000_000_0,  //   38  0x27   39  ;+れ 
  5877:     0x0201_0ba_1, 0x0201_030_1, 0x0000_000_0,  //   39  0x28   40  :*け 
  5878:     0x005d_0dd_1, 0x005d_033_1, 0x0000_000_0,  //   40  0x29   41  ]}む」
  5879:     0x005a_05a_1, 0x005a_034_1, 0x0000_000_0,  //   41  0x2a   42  Z つっ
  5880:     0x0058_058_1, 0x0058_035_1, 0x0000_000_0,  //   42  0x2b   43  X さ 
  5881:     0x0043_043_1, 0x0043_036_1, 0x0000_000_0,  //   43  0x2c   44  C そ 
  5882:     0x0056_056_1, 0x0056_037_1, 0x0000_000_0,  //   44  0x2d   45  V ひ 
  5883:     0x0042_042_1, 0x0042_038_1, 0x0000_000_0,  //   45  0x2e   46  B こ 
  5884:     0x004e_04e_1, 0x004e_039_1, 0x0000_000_0,  //   46  0x2f   47  N み 
  5885:     0x004d_04d_1, 0x004d_03a_1, 0x0000_000_0,  //   47  0x30   48  M も 
  5886:     0x002c_0bc_1, 0x002c_03b_1, 0x0000_000_0,  //   48  0x31   49  ,<ね、
  5887:     0x002e_0be_1, 0x002e_03c_1, 0x0000_000_0,  //   49  0x32   50  .>る。
  5888:     0x002f_0bf_1, 0x002f_03d_1, 0x0000_000_0,  //   50  0x33   51  /?め・
  5889:     0x005c_0e2_1, 0x005c_061_1, 0x0000_000_0,  //   51  0x34   52   _ろ□
  5890:     0x0020_020_1, 0x0020_041_1, 0x0000_000_0,  //   52  0x35   53  スペース
  5891:     0x0024_024_1, 0x0024_06e_1, 0x0000_000_0,  //   53  0x36   54  HOME
  5892:     0x007f_02e_1, 0x007f_077_1, 0x0000_000_0,  //   54  0x37   55  DEL
  5893:     0x0022_022_1, 0x0022_075_1, 0x0000_000_0,  //   55  0x38   56  ROLLUP
  5894:     0x0021_021_1, 0x0021_070_1, 0x0000_000_0,  //   56  0x39   57  ROLLDOWN
  5895:     0x0023_023_1, 0x0023_073_1, 0x0000_000_0,  //   57  0x3a   58  UNDO
  5896:     0x0025_025_1, 0x0025_071_1, 0x0000_000_0,  //   58  0x3b   59  ←
  5897:     0x0026_026_1, 0x0026_06f_1, 0x0000_000_0,  //   59  0x3c   60  ↑
  5898:     0x0027_027_1, 0x0027_072_1, 0x0000_000_0,  //   60  0x3d   61  →
  5899:     0x0028_028_1, 0x0028_074_1, 0x0000_000_0,  //   61  0x3e   62  ↓
  5900:     0x0090_090_4, 0x0000_000_0, 0x0000_000_0,  //   62  0x3f   63  CLR
  5901:     0x006f_06f_4, 0x0000_000_0, 0x0000_000_0,  //   63  0x40   64  /
  5902:     0x006a_06a_4, 0x0000_000_0, 0x0000_000_0,  //   64  0x41   65  *
  5903:     0x006d_06d_4, 0x0000_000_0, 0x0000_000_0,  //   65  0x42   66  -
  5904:     0x0024_024_4, 0x0067_067_4, 0x0000_000_0,  //   66  0x43   67  7
  5905:     0x0026_026_4, 0x0068_068_4, 0x0000_000_0,  //   67  0x44   68  8
  5906:     0x0021_021_4, 0x0069_069_4, 0x0000_000_0,  //   68  0x45   69  9
  5907:     0x006b_06b_4, 0x0000_000_0, 0x0000_000_0,  //   69  0x46   70  +
  5908:     0x0025_025_4, 0x0064_064_4, 0x0000_000_0,  //   70  0x47   71  4
  5909:     0x000c_00c_4, 0x0065_065_4, 0x0000_000_0,  //   71  0x48   72  5
  5910:     0x0027_027_4, 0x0066_066_4, 0x0000_000_0,  //   72  0x49   73  6
  5911:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   73  0x4a   74  =
  5912:     0x0023_023_4, 0x0061_061_4, 0x0000_000_0,  //   74  0x4b   75  1
  5913:     0x0028_028_4, 0x0062_062_4, 0x0000_000_0,  //   75  0x4c   76  2
  5914:     0x0022_022_4, 0x0063_063_4, 0x0000_000_0,  //   76  0x4d   77  3
  5915:     0x000a_00d_4, 0x0000_000_0, 0x0000_000_0,  //   77  0x4e   78  ENTER
  5916:     0x009b_02d_4, 0x0060_060_4, 0x0000_000_0,  //   78  0x4f   79  0
  5917:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   79  0x50   80  ,
  5918:     0x007f_02e_4, 0x006e_06e_4, 0x0000_000_0,  //   80  0x51   81  .
  5919:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   81  0x52   82  記号入力
  5920:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   82  0x53   83  登録
  5921:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   83  0x54   84  HELP
  5922:     0x0012_012_2, 0x0012_040_2, 0x0000_000_0,  //   84  0x55   85  XF1
  5923:     0x001d_01d_1, 0x001d_066_1, 0x0000_000_0,  //   85  0x56   86  XF2
  5924:     0x0012_012_3, 0x0012_06c_3, 0x0000_000_0,  //   86  0x57   87  XF3
  5925:     0x020d_05d_1, 0x0000_000_0, 0x0000_000_0,  //   87  0x58   88  XF4
  5926:     0x0011_011_3, 0x0000_000_0, 0x0000_000_0,  //   88  0x59   89  XF5
  5927:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   89  0x5a   90  かな
  5928:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   90  0x5b   91  ローマ字
  5929:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   91  0x5c   92  コード入力
  5930:     0x0014_014_1, 0x0000_000_0, 0x0000_000_0,  //   92  0x5d   93  CAPS
  5931:     0x009b_02d_1, 0x009b_076_1, 0x0000_000_0,  //   93  0x5e   94  INS
  5932:     0x020c_05b_2, 0x0000_000_0, 0x0000_000_0,  //   94  0x5f   95  ひらがな
  5933:     0x020c_05c_3, 0x0000_000_0, 0x0000_000_0,  //   95  0x60   96  全角
  5934:     0x0013_013_1, 0x0000_000_0, 0x0000_000_0,  //   96  0x61   97  BREAK
  5935:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   97  0x62   98  COPY
  5936:     0x0070_070_1, 0x0070_043_1, 0x0000_000_0,  //   98  0x63   99  F1
  5937:     0x0071_071_1, 0x0071_044_1, 0x0000_000_0,  //   99  0x64  100  F2
  5938:     0x0072_072_1, 0x0072_045_1, 0x0000_000_0,  //  100  0x65  101  F3
  5939:     0x0073_073_1, 0x0073_046_1, 0x0000_000_0,  //  101  0x66  102  F4
  5940:     0x0074_074_1, 0x0074_047_1, 0x0000_000_0,  //  102  0x67  103  F5
  5941:     0x0075_075_1, 0x0075_048_1, 0x0000_000_0,  //  103  0x68  104  F6
  5942:     0x0076_076_1, 0x0076_049_1, 0x0000_000_0,  //  104  0x69  105  F7
  5943:     0x0077_077_1, 0x0077_04a_1, 0x0000_000_0,  //  105  0x6a  106  F8
  5944:     0x0078_078_1, 0x0078_04b_1, 0x0000_000_0,  //  106  0x6b  107  F9
  5945:     0x0079_079_1, 0x0079_04c_1, 0x0000_000_0,  //  107  0x6c  108  F10
  5946:     0x0010_010_3, 0x0010_032_2, 0x0010_03e_3,  //  108  0x70  112  SHIFT
  5947:     0x0011_011_2, 0x0011_042_2, 0x0000_000_0,  //  109  0x71  113  CTRL
  5948:     0x007a_05f_1, 0x0000_000_0, 0x0000_000_0,  //  110  0x72  114  OPT.1
  5949:     0x007b_060_1, 0x0000_000_0, 0x0000_000_0,  //  111  0x73  115  OPT.2
  5950:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //  112  0x74  116  NUM
  5951:   };
  5952: 
  5953:   //Thanks to tantan for providing the data for the macOS US layout.
  5954:   //
  5955:   //  KBD_DEFAULT_MAP_MAC_US
  5956:   //    macOS + USキーボード 用 XEiJ デフォルトキーマッピング
  5957:   //
  5958:   //  macOS + USキーボード で XEiJ を使用する場合、KBD_DEFAULT_MAP_MAC のマッピングでは
  5959:   //  主要記号を含む一部の文字が入力できません。これは一部のキーが KeyEvent#getExtendedKeyCode() で
  5960:   //  JISキーボードとは異なる値を返すためです。
  5961:   //
  5962:   //  このマッピングを使うことでUSキーボードでもすべての記号文字が入力可能となります。
  5963:   //  逆にこのマッピングを使うとJISキーボードでは正しく入力できなくなるので注意してください。
  5964:   //
  5965:   //  また、M.Kamadaさん作 KeyWitch.X を使用して Human68K 側をUS(ASCII)配列にすると、
  5966:   //  SHIFTキーと組み合わせた記号入力も含め、XEiJ上で完全なUS配列となります。(推奨)
  5967:   //
  5968:   //  KeyWitch.X を組み込まない場合は、XEiJ上でほぼJISキーボードの配列になります。
  5969:   //
  5970:   //  KeyWitch.Xと68エミュレータについては以下を参考にさせて頂きました。
  5971:   //  https://yatte-mita.hateblo.jp/entry/2019/06/15/130053
  5972:   //
  5973:   //  KeyWitch.X は CONFIG.SYS に以下のように追加してください。
  5974:   //  DEVICE=\path\to\KeyWitch.x -e \path\to\ascii.env
  5975:   //
  5976:   public static final int[] KBD_DEFAULT_MAP_MAC_US = {
  5977:     //(keyCode&0xfff)<<16|(extendedKeyCode&0x0f000fff)<<4|(keyLocation&0xf)
  5978:     //e_ccc_eee_l    e_ccc_eee_l    e_ccc_eee_l        xo   hex  dec  text
  5979:     0x0_01b_01b_1, 0x0_000_000_0, 0x0_000_000_0,  //    0  0x01    1  ESC
  5980:     0x0_031_031_1, 0x0_031_205_1, 0x0_000_000_0,  //    1  0x02    2  1!ぬ 
  5981:     0x0_032_032_1, 0x0_032_200_1, 0x0_000_000_0,  //    2  0x03    3  2"ふ       // 2番目を変更(@)
  5982:     0x0_033_033_1, 0x0_033_208_1, 0x0_000_000_0,  //    3  0x04    4  3#あぁ
  5983:     0x0_034_034_1, 0x0_034_203_1, 0x0_000_000_0,  //    4  0x05    5  4$うぅ
  5984:     0x0_035_035_1, 0x0_035_000_1, 0x0_000_000_0,  //    5  0x06    6  5%えぇ
  5985:     0x0_036_036_1, 0x0_036_202_1, 0x0_000_000_0,  //    6  0x07    7  6&おぉ      // 2番目を変更(^)
  5986:     0x0_037_037_1, 0x0_037_096_1, 0x0_000_000_0,  //    7  0x08    8  7'やゃ      // 2番目を変更(&)
  5987:     0x0_038_038_1, 0x0_038_097_1, 0x0_000_000_0,  //    8  0x09    9  8(ゆゅ      // 2番目を変更(*)
  5988:     0x0_039_039_1, 0x0_039_207_1, 0x0_000_000_0,  //    9  0x0a   10  9)よょ      // 2番目を変更(()
  5989:     0x0_030_030_1, 0x0_030_20a_1, 0x0_000_000_0,  //   10  0x0b   11  0 わを      // 2番目を変更())
  5990:     0x0_02d_02d_1, 0x0_02d_20b_1, 0x0_02d_000_1,  //   11  0x0c   12  -=ほ       // 2番目を変更(_)
  5991:     0x0_03d_03d_1, 0x0_03d_209_1, 0x0_03d_000_1,  //   12  0x0d   13  ^~へ       // 1,2番目を変更(=,+) 
  5992:     0x0_05c_05c_1, 0x1_05c_07c_1, 0x0_000_000_0,  //   13  0x0e   14  ¥|ー       // 1,2番目を変更(\,|)
  5993:     0x0_008_008_1, 0x0_000_000_0, 0x0_000_000_0,  //   14  0x0f   15  BS
  5994:     0x0_009_009_1, 0x0_000_000_0, 0x0_000_000_0,  //   15  0x10   16  TAB
  5995:     0x0_051_051_1, 0x0_051_000_1, 0x0_000_000_0,  //   16  0x11   17  Q た 
  5996:     0x0_057_057_1, 0x0_057_000_1, 0x0_000_000_0,  //   17  0x12   18  W て 
  5997:     0x0_045_045_1, 0x0_045_000_1, 0x0_000_000_0,  //   18  0x13   19  E いぃ
  5998:     0x0_052_052_1, 0x0_052_000_1, 0x0_000_000_0,  //   19  0x14   20  R す 
  5999:     0x0_054_054_1, 0x0_054_000_1, 0x0_000_000_0,  //   20  0x15   21  T か 
  6000:     0x0_059_059_1, 0x0_059_000_1, 0x0_000_000_0,  //   21  0x16   22  Y ん 
  6001:     0x0_055_055_1, 0x0_055_000_1, 0x0_000_000_0,  //   22  0x17   23  U な 
  6002:     0x0_049_049_1, 0x0_049_000_1, 0x0_000_000_0,  //   23  0x18   24  I に 
  6003:     0x0_04f_04f_1, 0x0_04f_000_1, 0x0_000_000_0,  //   24  0x19   25  O ら 
  6004:     0x0_050_050_1, 0x0_050_000_1, 0x0_000_000_0,  //   25  0x1a   26  P せ 
  6005:     0x0_05b_05b_1, 0x0_05b_0a1_1, 0x0_000_000_0,  //   26  0x1b   27  @`゛       // 1,2番目を変更([,{)
  6006:     0x0_05d_05d_1, 0x0_05d_0a2_1, 0x0_05d_01b_1,  //   27  0x1c   28  [{゜「      // 1,2番目を変更(],})
  6007:     0x0_00a_00a_1, 0x0_00a_000_1, 0x0_000_000_0,  //   28  0x1d   29  リターン      // 2番目を追加(SHIFT/CTRL同時押し)
  6008:     0x0_041_041_1, 0x0_041_000_1, 0x0_000_000_0,  //   29  0x1e   30  A ち 
  6009:     0x0_053_053_1, 0x0_053_000_1, 0x0_000_000_0,  //   30  0x1f   31  S と 
  6010:     0x0_044_044_1, 0x0_044_000_1, 0x0_000_000_0,  //   31  0x20   32  D し 
  6011:     0x0_046_046_1, 0x0_046_000_1, 0x0_000_000_0,  //   32  0x21   33  F は 
  6012:     0x0_047_047_1, 0x0_047_000_1, 0x0_000_000_0,  //   33  0x22   34  G き 
  6013:     0x0_048_048_1, 0x0_048_008_1, 0x0_000_000_0,  //   34  0x23   35  H く 
  6014:     0x0_04a_04a_1, 0x0_04a_00a_1, 0x0_000_000_0,  //   35  0x24   36  J ま 
  6015:     0x0_04b_04b_1, 0x0_04b_000_1, 0x0_000_000_0,  //   36  0x25   37  K の 
  6016:     0x0_04c_04c_1, 0x0_04c_000_1, 0x0_000_000_0,  //   37  0x26   38  L り 
  6017:     0x0_03b_03b_1, 0x0_03b_201_1, 0x0_000_000_0,  //   38  0x27   39  ;+れ       // 2番目を変更(:)
  6018:     0x0_0de_0de_1, 0x0_0de_098_1, 0x0_000_000_0,  //   39  0x28   40  :*け       // 1,2番目を変更(',"),3番目削除
  6019:     0x0_0c0_0c0_1, 0x1_0c0_07e_1, 0x0_05c_000_1,  //   40  0x29   41  ]}む」      // 1,2番目を変更(`,~)
  6020:     0x0_05a_05a_1, 0x0_05a_000_1, 0x0_000_000_0,  //   41  0x2a   42  Z つっ
  6021:     0x0_058_058_1, 0x0_058_000_1, 0x0_000_000_0,  //   42  0x2b   43  X さ 
  6022:     0x0_043_043_1, 0x0_043_000_1, 0x0_000_000_0,  //   43  0x2c   44  C そ 
  6023:     0x0_056_056_1, 0x0_056_000_1, 0x0_000_000_0,  //   44  0x2d   45  V ひ 
  6024:     0x0_042_042_1, 0x0_042_000_1, 0x0_000_000_0,  //   45  0x2e   46  B こ 
  6025:     0x0_04e_04e_1, 0x0_04e_000_1, 0x0_000_000_0,  //   46  0x2f   47  N み 
  6026:     0x0_04d_04d_1, 0x0_04d_000_1, 0x0_000_000_0,  //   47  0x30   48  M も 
  6027:     0x0_02c_02c_1, 0x0_02c_099_1, 0x0_000_000_0,  //   48  0x31   49  ,<ね、
  6028:     0x0_02e_02e_1, 0x0_02e_0a0_1, 0x0_000_000_0,  //   49  0x32   50  .>る。
  6029:     0x0_02f_02f_1, 0x0_02f_000_1, 0x0_000_000_0,  //   50  0x33   51  /?め・
  6030:     0x0_02d_20b_1, 0x0_20b_000_4, 0x0_000_000_0,  //   51  0x34   52   _ろ□        // 1番目を変更(_)
  6031:     0x0_020_020_1, 0x0_000_000_0, 0x0_000_000_0,  //   52  0x35   53  スペース
  6032:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   53  0x36   54  HOME
  6033:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   54  0x37   55  DEL
  6034:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   55  0x38   56  ROLLUP
  6035:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   56  0x39   57  ROLLDOWN
  6036:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   57  0x3a   58  UNDO
  6037:     0x0_025_025_1, 0x0_000_000_0, 0x0_000_000_0,  //   58  0x3b   59  ←
  6038:     0x0_026_026_1, 0x0_000_000_0, 0x0_000_000_0,  //   59  0x3c   60  ↑
  6039:     0x0_027_027_1, 0x0_000_000_0, 0x0_000_000_0,  //   60  0x3d   61  →
  6040:     0x0_028_028_1, 0x0_000_000_0, 0x0_000_000_0,  //   61  0x3e   62  ↓
  6041:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   62  0x3f   63  CLR
  6042:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   63  0x40   64  /
  6043:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   64  0x41   65  *
  6044:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   65  0x42   66  -
  6045:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   66  0x43   67  7
  6046:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   67  0x44   68  8
  6047:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   68  0x45   69  9
  6048:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   69  0x46   70  +
  6049:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   70  0x47   71  4
  6050:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   71  0x48   72  5
  6051:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   72  0x49   73  6
  6052:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   73  0x4a   74  =
  6053:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   74  0x4b   75  1
  6054:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   75  0x4c   76  2
  6055:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   76  0x4d   77  3
  6056:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   77  0x4e   78  ENTER
  6057:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   78  0x4f   79  0
  6058:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   79  0x50   80  ,
  6059:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   80  0x51   81  .
  6060:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   81  0x52   82  記号入力
  6061:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   82  0x53   83  登録
  6062:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   83  0x54   84  HELP
  6063:     0x0_012_012_2, 0x0_000_000_0, 0x0_000_000_0,  //   84  0x55   85  XF1
  6064:     0x0_09d_09d_2, 0x0_000_000_0, 0x0_000_000_0,  //   85  0x56   86  XF2
  6065:     0x0_09d_09d_3, 0x0_000_000_0, 0x0_000_000_0,  //   86  0x57   87  XF3
  6066:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   87  0x58   88  XF4
  6067:     0x0_07b_07b_1, 0x0_000_000_0, 0x0_000_000_0,  //   88  0x59   89  XF5
  6068:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   89  0x5a   90  かな
  6069:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   90  0x5b   91  ローマ字
  6070:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   91  0x5c   92  コード入力
  6071:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   92  0x5d   93  CAPS
  6072:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   93  0x5e   94  INS
  6073:     0x0_014_014_1, 0x0_000_000_0, 0x0_000_000_0,  //   94  0x5f   95  ひらがな
  6074:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   95  0x60   96  全角
  6075:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   96  0x61   97  BREAK
  6076:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   97  0x62   98  COPY
  6077:     0x0_070_070_1, 0x0_000_000_0, 0x0_000_000_0,  //   98  0x63   99  F1
  6078:     0x0_071_071_1, 0x0_000_000_0, 0x0_000_000_0,  //   99  0x64  100  F2
  6079:     0x0_072_072_1, 0x0_000_000_0, 0x0_000_000_0,  //  100  0x65  101  F3
  6080:     0x0_073_073_1, 0x0_000_000_0, 0x0_000_000_0,  //  101  0x66  102  F4
  6081:     0x0_074_074_1, 0x0_000_000_0, 0x0_000_000_0,  //  102  0x67  103  F5
  6082:     0x0_075_075_1, 0x0_000_000_0, 0x0_000_000_0,  //  103  0x68  104  F6
  6083:     0x0_076_076_1, 0x0_000_000_0, 0x0_000_000_0,  //  104  0x69  105  F7
  6084:     0x0_077_077_1, 0x0_000_000_0, 0x0_000_000_0,  //  105  0x6a  106  F8
  6085:     0x0_078_078_1, 0x0_000_000_0, 0x0_000_000_0,  //  106  0x6b  107  F9
  6086:     0x0_079_079_1, 0x0_000_000_0, 0x0_000_000_0,  //  107  0x6c  108  F10
  6087:     0x0_010_010_2, 0x0_010_010_3, 0x0_000_000_0,  //  108  0x70  112  SHIFT
  6088:     0x0_011_011_2, 0x0_000_000_0, 0x0_000_000_0,  //  109  0x71  113  CTRL
  6089:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //  110  0x72  114  OPT.1
  6090:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //  111  0x73  115  OPT.2
  6091:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //  112  0x74  116  NUM
  6092:   };
  6093: 
  6094:   //Thanks to yuduki for providing the data for the macOS.
  6095:   public static final int[] KBD_DEFAULT_MAP_MAC = {
  6096:     //(keyCode&0xfff)<<16|(extendedKeyCode&0x0f000fff)<<4|(keyLocation&0xf)
  6097:     //e_ccc_eee_l    e_ccc_eee_l    e_ccc_eee_l        xo   hex  dec  text
  6098:     0x0_01b_01b_1, 0x0_000_000_0, 0x0_000_000_0,  //    0  0x01    1  ESC
  6099:     0x0_031_031_1, 0x0_031_205_1, 0x0_000_000_0,  //    1  0x02    2  1!ぬ 
  6100:     0x0_032_032_1, 0x0_032_098_1, 0x0_000_000_0,  //    2  0x03    3  2"ふ 
  6101:     0x0_033_033_1, 0x0_033_208_1, 0x0_000_000_0,  //    3  0x04    4  3#あぁ
  6102:     0x0_034_034_1, 0x0_034_203_1, 0x0_000_000_0,  //    4  0x05    5  4$うぅ
  6103:     0x0_035_035_1, 0x0_035_000_1, 0x0_000_000_0,  //    5  0x06    6  5%えぇ
  6104:     0x0_036_036_1, 0x0_036_096_1, 0x0_000_000_0,  //    6  0x07    7  6&おぉ
  6105:     0x0_037_037_1, 0x0_037_0de_1, 0x0_000_000_0,  //    7  0x08    8  7'やゃ
  6106:     0x0_038_038_1, 0x0_038_207_1, 0x0_000_000_0,  //    8  0x09    9  8(ゆゅ
  6107:     0x0_039_039_1, 0x0_039_20a_1, 0x0_000_000_0,  //    9  0x0a   10  9)よょ
  6108:     0x0_030_030_1, 0x0_000_000_0, 0x0_000_000_0,  //   10  0x0b   11  0 わを
  6109:     0x0_02d_02d_1, 0x0_02d_03d_1, 0x0_02d_000_1,  //   11  0x0c   12  -=ほ 
  6110:     0x0_03d_202_1, 0x1_03d_07e_1, 0x0_03d_000_1,  //   12  0x0d   13  ^~へ 
  6111:     0x1_05c_0a5_1, 0x1_05c_07c_1, 0x0_000_000_0,  //   13  0x0e   14  ¥|ー 
  6112:     0x0_008_008_1, 0x0_000_000_0, 0x0_000_000_0,  //   14  0x0f   15  BS
  6113:     0x0_009_009_1, 0x0_000_000_0, 0x0_000_000_0,  //   15  0x10   16  TAB
  6114:     0x0_051_051_1, 0x0_051_000_1, 0x0_000_000_0,  //   16  0x11   17  Q た 
  6115:     0x0_057_057_1, 0x0_057_000_1, 0x0_000_000_0,  //   17  0x12   18  W て 
  6116:     0x0_045_045_1, 0x0_045_000_1, 0x0_000_000_0,  //   18  0x13   19  E いぃ
  6117:     0x0_052_052_1, 0x0_052_000_1, 0x0_000_000_0,  //   19  0x14   20  R す 
  6118:     0x0_054_054_1, 0x0_054_000_1, 0x0_000_000_0,  //   20  0x15   21  T か 
  6119:     0x0_059_059_1, 0x0_059_000_1, 0x0_000_000_0,  //   21  0x16   22  Y ん 
  6120:     0x0_055_055_1, 0x0_055_000_1, 0x0_000_000_0,  //   22  0x17   23  U な 
  6121:     0x0_049_049_1, 0x0_049_000_1, 0x0_000_000_0,  //   23  0x18   24  I に 
  6122:     0x0_04f_04f_1, 0x0_04f_000_1, 0x0_000_000_0,  //   24  0x19   25  O ら 
  6123:     0x0_050_050_1, 0x0_050_000_1, 0x0_000_000_0,  //   25  0x1a   26  P せ 
  6124:     0x0_05b_200_1, 0x0_05b_0c0_1, 0x0_05b_020_1,  //   26  0x1b   27  @`゛ 
  6125:     0x0_05d_05b_1, 0x0_05d_0a1_1, 0x0_05d_01b_1,  //   27  0x1c   28  [{゜「
  6126:     0x0_00a_00a_1, 0x0_000_000_0, 0x0_000_000_0,  //   28  0x1d   29  リターン
  6127:     0x0_041_041_1, 0x0_041_000_1, 0x0_000_000_0,  //   29  0x1e   30  A ち 
  6128:     0x0_053_053_1, 0x0_053_000_1, 0x0_000_000_0,  //   30  0x1f   31  S と 
  6129:     0x0_044_044_1, 0x0_044_000_1, 0x0_000_000_0,  //   31  0x20   32  D し 
  6130:     0x0_046_046_1, 0x0_046_000_1, 0x0_000_000_0,  //   32  0x21   33  F は 
  6131:     0x0_047_047_1, 0x0_047_000_1, 0x0_000_000_0,  //   33  0x22   34  G き 
  6132:     0x0_048_048_1, 0x0_048_008_1, 0x0_000_000_0,  //   34  0x23   35  H く 
  6133:     0x0_04a_04a_1, 0x0_04a_00a_1, 0x0_000_000_0,  //   35  0x24   36  J ま 
  6134:     0x0_04b_04b_1, 0x0_04b_000_1, 0x0_000_000_0,  //   36  0x25   37  K の 
  6135:     0x0_04c_04c_1, 0x0_04c_000_1, 0x0_000_000_0,  //   37  0x26   38  L り 
  6136:     0x0_03b_03b_1, 0x0_03b_209_1, 0x0_000_000_0,  //   38  0x27   39  ;+れ 
  6137:     0x0_0de_201_1, 0x0_0de_097_1, 0x0_0de_0de_1,  //   39  0x28   40  :*け 
  6138:     0x0_05c_05d_1, 0x0_05c_0a2_1, 0x0_05c_000_1,  //   40  0x29   41  ]}む」
  6139:     0x0_05a_05a_1, 0x0_05a_000_1, 0x0_000_000_0,  //   41  0x2a   42  Z つっ
  6140:     0x0_058_058_1, 0x0_058_000_1, 0x0_000_000_0,  //   42  0x2b   43  X さ 
  6141:     0x0_043_043_1, 0x0_043_000_1, 0x0_000_000_0,  //   43  0x2c   44  C そ 
  6142:     0x0_056_056_1, 0x0_056_000_1, 0x0_000_000_0,  //   44  0x2d   45  V ひ 
  6143:     0x0_042_042_1, 0x0_042_000_1, 0x0_000_000_0,  //   45  0x2e   46  B こ 
  6144:     0x0_04e_04e_1, 0x0_04e_000_1, 0x0_000_000_0,  //   46  0x2f   47  N み 
  6145:     0x0_04d_04d_1, 0x0_04d_000_1, 0x0_000_000_0,  //   47  0x30   48  M も 
  6146:     0x0_02c_02c_1, 0x0_02c_099_1, 0x0_000_000_0,  //   48  0x31   49  ,<ね、
  6147:     0x0_02e_02e_1, 0x0_02e_0a0_1, 0x0_000_000_0,  //   49  0x32   50  .>る。
  6148:     0x0_02f_02f_1, 0x0_02f_000_1, 0x0_000_000_0,  //   50  0x33   51  /?め・
  6149:     0x0_20b_20b_4, 0x0_20b_000_4, 0x0_000_000_0,  //   51  0x34   52   _ろ□
  6150:     0x0_020_020_1, 0x0_000_000_0, 0x0_000_000_0,  //   52  0x35   53  スペース
  6151:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   53  0x36   54  HOME
  6152:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   54  0x37   55  DEL
  6153:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   55  0x38   56  ROLLUP
  6154:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   56  0x39   57  ROLLDOWN
  6155:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   57  0x3a   58  UNDO
  6156:     0x0_025_025_1, 0x0_000_000_0, 0x0_000_000_0,  //   58  0x3b   59  ←
  6157:     0x0_026_026_1, 0x0_000_000_0, 0x0_000_000_0,  //   59  0x3c   60  ↑
  6158:     0x0_027_027_1, 0x0_000_000_0, 0x0_000_000_0,  //   60  0x3d   61  →
  6159:     0x0_028_028_1, 0x0_000_000_0, 0x0_000_000_0,  //   61  0x3e   62  ↓
  6160:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   62  0x3f   63  CLR
  6161:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   63  0x40   64  /
  6162:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   64  0x41   65  *
  6163:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   65  0x42   66  -
  6164:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   66  0x43   67  7
  6165:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   67  0x44   68  8
  6166:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   68  0x45   69  9
  6167:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   69  0x46   70  +
  6168:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   70  0x47   71  4
  6169:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   71  0x48   72  5
  6170:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   72  0x49   73  6
  6171:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   73  0x4a   74  =
  6172:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   74  0x4b   75  1
  6173:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   75  0x4c   76  2
  6174:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   76  0x4d   77  3
  6175:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   77  0x4e   78  ENTER
  6176:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   78  0x4f   79  0
  6177:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   79  0x50   80  ,
  6178:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   80  0x51   81  .
  6179:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   81  0x52   82  記号入力
  6180:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   82  0x53   83  登録
  6181:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   83  0x54   84  HELP
  6182:     0x0_012_012_2, 0x0_000_000_0, 0x0_000_000_0,  //   84  0x55   85  XF1
  6183:     0x0_09d_09d_2, 0x0_000_000_0, 0x0_000_000_0,  //   85  0x56   86  XF2
  6184:     0x0_09d_09d_3, 0x0_000_000_0, 0x0_000_000_0,  //   86  0x57   87  XF3
  6185:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   87  0x58   88  XF4
  6186:     0x0_07b_07b_1, 0x0_000_000_0, 0x0_000_000_0,  //   88  0x59   89  XF5
  6187:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   89  0x5a   90  かな
  6188:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   90  0x5b   91  ローマ字
  6189:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   91  0x5c   92  コード入力
  6190:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   92  0x5d   93  CAPS
  6191:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   93  0x5e   94  INS
  6192:     0x0_014_014_1, 0x0_000_000_0, 0x0_000_000_0,  //   94  0x5f   95  ひらがな
  6193:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   95  0x60   96  全角
  6194:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   96  0x61   97  BREAK
  6195:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //   97  0x62   98  COPY
  6196:     0x0_070_070_1, 0x0_000_000_0, 0x0_000_000_0,  //   98  0x63   99  F1
  6197:     0x0_071_071_1, 0x0_000_000_0, 0x0_000_000_0,  //   99  0x64  100  F2
  6198:     0x0_072_072_1, 0x0_000_000_0, 0x0_000_000_0,  //  100  0x65  101  F3
  6199:     0x0_073_073_1, 0x0_000_000_0, 0x0_000_000_0,  //  101  0x66  102  F4
  6200:     0x0_074_074_1, 0x0_000_000_0, 0x0_000_000_0,  //  102  0x67  103  F5
  6201:     0x0_075_075_1, 0x0_000_000_0, 0x0_000_000_0,  //  103  0x68  104  F6
  6202:     0x0_076_076_1, 0x0_000_000_0, 0x0_000_000_0,  //  104  0x69  105  F7
  6203:     0x0_077_077_1, 0x0_000_000_0, 0x0_000_000_0,  //  105  0x6a  106  F8
  6204:     0x0_078_078_1, 0x0_000_000_0, 0x0_000_000_0,  //  106  0x6b  107  F9
  6205:     0x0_079_079_1, 0x0_000_000_0, 0x0_000_000_0,  //  107  0x6c  108  F10
  6206:     0x0_010_010_2, 0x0_010_010_3, 0x0_000_000_0,  //  108  0x70  112  SHIFT
  6207:     0x0_011_011_2, 0x0_000_000_0, 0x0_000_000_0,  //  109  0x71  113  CTRL
  6208:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //  110  0x72  114  OPT.1
  6209:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //  111  0x73  115  OPT.2
  6210:     0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,  //  112  0x74  116  NUM
  6211:   };
  6212: 
  6213:   public static final int[] KBD_DEFAULT_MAP_WIN_US = {
  6214:     //(keyCode&0xffff)<<16|(rawCode&0xfff)<<4|(keyLocation&0xf)
  6215:     //cccc_rrr_l    cccc_rrr_l    cccc_rrr_l        xo   hex  dec  text
  6216:     0x001b_01b_1, 0x0000_000_0, 0x0000_000_0,  //    0  0x01    1  ESC
  6217:     0x0031_031_1, 0x0000_000_0, 0x0000_000_0,  //    1  0x02    2  1!ぬ 
  6218:     0x0032_032_1, 0x0000_000_0, 0x0000_000_0,  //    2  0x03    3  2"ふ 
  6219:     0x0033_033_1, 0x0000_000_0, 0x0000_000_0,  //    3  0x04    4  3#あぁ
  6220:     0x0034_034_1, 0x0000_000_0, 0x0000_000_0,  //    4  0x05    5  4$うぅ
  6221:     0x0035_035_1, 0x0000_000_0, 0x0000_000_0,  //    5  0x06    6  5%えぇ
  6222:     0x0036_036_1, 0x0000_000_0, 0x0000_000_0,  //    6  0x07    7  6&おぉ
  6223:     0x0037_037_1, 0x0000_000_0, 0x0000_000_0,  //    7  0x08    8  7'やゃ
  6224:     0x0038_038_1, 0x0000_000_0, 0x0000_000_0,  //    8  0x09    9  8(ゆゅ
  6225:     0x0039_039_1, 0x0000_000_0, 0x0000_000_0,  //    9  0x0a   10  9)よょ
  6226:     0x0030_030_1, 0x0000_000_0, 0x0000_000_0,  //   10  0x0b   11  0 わを
  6227:     0x002d_0bd_1, 0x0000_000_0, 0x0000_000_0,  //   11  0x0c   12  -=ほ 
  6228:     0x003d_0bb_1, 0x0000_000_0, 0x0000_000_0,  //   12  0x0d   13  ^~へ 
  6229:     0x00c0_0c0_1, 0x0000_0ff_1, 0x0000_000_0,  //   13  0x0e   14  ¥|ー 
  6230:     0x0008_008_1, 0x0000_000_0, 0x0000_000_0,  //   14  0x0f   15  BS
  6231:     0x0009_009_1, 0x0000_000_0, 0x0000_000_0,  //   15  0x10   16  TAB
  6232:     0x0051_051_1, 0x0000_000_0, 0x0000_000_0,  //   16  0x11   17  Q た 
  6233:     0x0057_057_1, 0x0000_000_0, 0x0000_000_0,  //   17  0x12   18  W て 
  6234:     0x0045_045_1, 0x0000_000_0, 0x0000_000_0,  //   18  0x13   19  E いぃ
  6235:     0x0052_052_1, 0x0000_000_0, 0x0000_000_0,  //   19  0x14   20  R す 
  6236:     0x0054_054_1, 0x0000_000_0, 0x0000_000_0,  //   20  0x15   21  T か 
  6237:     0x0059_059_1, 0x0000_000_0, 0x0000_000_0,  //   21  0x16   22  Y ん 
  6238:     0x0055_055_1, 0x0000_000_0, 0x0000_000_0,  //   22  0x17   23  U な 
  6239:     0x0049_049_1, 0x0000_000_0, 0x0000_000_0,  //   23  0x18   24  I に 
  6240:     0x004f_04f_1, 0x0000_000_0, 0x0000_000_0,  //   24  0x19   25  O ら 
  6241:     0x0050_050_1, 0x0000_000_0, 0x0000_000_0,  //   25  0x1a   26  P せ 
  6242:     0x005b_0db_1, 0x0000_000_0, 0x0000_000_0,  //   26  0x1b   27  @`゛ 
  6243:     0x005d_0dd_1, 0x0000_000_0, 0x0000_000_0,  //   27  0x1c   28  [{゜「
  6244:     0x000a_00d_1, 0x0000_000_0, 0x0000_000_0,  //   28  0x1d   29  リターン
  6245:     0x0041_041_1, 0x0000_000_0, 0x0000_000_0,  //   29  0x1e   30  A ち 
  6246:     0x0053_053_1, 0x0000_000_0, 0x0000_000_0,  //   30  0x1f   31  S と 
  6247:     0x0044_044_1, 0x0000_000_0, 0x0000_000_0,  //   31  0x20   32  D し 
  6248:     0x0046_046_1, 0x0000_000_0, 0x0000_000_0,  //   32  0x21   33  F は 
  6249:     0x0047_047_1, 0x0000_000_0, 0x0000_000_0,  //   33  0x22   34  G き 
  6250:     0x0048_048_1, 0x0000_000_0, 0x0000_000_0,  //   34  0x23   35  H く 
  6251:     0x004a_04a_1, 0x0000_000_0, 0x0000_000_0,  //   35  0x24   36  J ま 
  6252:     0x004b_04b_1, 0x0000_000_0, 0x0000_000_0,  //   36  0x25   37  K の 
  6253:     0x004c_04c_1, 0x0000_000_0, 0x0000_000_0,  //   37  0x26   38  L り 
  6254:     0x003b_0ba_1, 0x0000_000_0, 0x0000_000_0,  //   38  0x27   39  ;+れ 
  6255:     0x00de_0de_1, 0x0000_000_0, 0x0000_000_0,  //   39  0x28   40  :*け 
  6256:     0x005c_0dc_1, 0x0000_000_0, 0x0000_000_0,  //   40  0x29   41  ]}む」
  6257:     0x005a_05a_1, 0x0000_000_0, 0x0000_000_0,  //   41  0x2a   42  Z つっ
  6258:     0x0058_058_1, 0x0000_000_0, 0x0000_000_0,  //   42  0x2b   43  X さ 
  6259:     0x0043_043_1, 0x0000_000_0, 0x0000_000_0,  //   43  0x2c   44  C そ 
  6260:     0x0056_056_1, 0x0000_000_0, 0x0000_000_0,  //   44  0x2d   45  V ひ 
  6261:     0x0042_042_1, 0x0000_000_0, 0x0000_000_0,  //   45  0x2e   46  B こ 
  6262:     0x004e_04e_1, 0x0000_000_0, 0x0000_000_0,  //   46  0x2f   47  N み 
  6263:     0x004d_04d_1, 0x0000_000_0, 0x0000_000_0,  //   47  0x30   48  M も 
  6264:     0x002c_0bc_1, 0x0000_000_0, 0x0000_000_0,  //   48  0x31   49  ,<ね、
  6265:     0x002e_0be_1, 0x0000_000_0, 0x0000_000_0,  //   49  0x32   50  .>る。
  6266:     0x002f_0bf_1, 0x0000_000_0, 0x0000_000_0,  //   50  0x33   51  /?め・
  6267:     0x0000_0c1_1, 0x0000_000_0, 0x0000_000_0,  //   51  0x34   52   _ろ□
  6268:     0x0020_020_1, 0x0000_000_0, 0x0000_000_0,  //   52  0x35   53  スペース
  6269:     0x0024_024_1, 0x0000_000_0, 0x0000_000_0,  //   53  0x36   54  HOME
  6270:     0x007f_02e_1, 0x0000_000_0, 0x0000_000_0,  //   54  0x37   55  DEL
  6271:     0x0022_022_1, 0x0000_000_0, 0x0000_000_0,  //   55  0x38   56  ROLLUP
  6272:     0x0021_021_1, 0x0000_000_0, 0x0000_000_0,  //   56  0x39   57  ROLLDOWN
  6273:     0x0023_023_1, 0x0000_000_0, 0x0000_000_0,  //   57  0x3a   58  UNDO
  6274:     0x0025_025_1, 0x0000_000_0, 0x0000_000_0,  //   58  0x3b   59  ←
  6275:     0x0026_026_1, 0x0000_000_0, 0x0000_000_0,  //   59  0x3c   60  ↑
  6276:     0x0027_027_1, 0x0000_000_0, 0x0000_000_0,  //   60  0x3d   61  →
  6277:     0x0028_028_1, 0x0000_000_0, 0x0000_000_0,  //   61  0x3e   62  ↓
  6278:     0x0090_090_4, 0x0000_000_0, 0x0000_000_0,  //   62  0x3f   63  CLR
  6279:     0x006f_06f_4, 0x0000_000_0, 0x0000_000_0,  //   63  0x40   64  /
  6280:     0x006a_06a_4, 0x0000_000_0, 0x0000_000_0,  //   64  0x41   65  *
  6281:     0x006d_06d_4, 0x0000_000_0, 0x0000_000_0,  //   65  0x42   66  -
  6282:     0x0024_024_4, 0x0067_067_4, 0x0000_000_0,  //   66  0x43   67  7
  6283:     0x0026_026_4, 0x0068_068_4, 0x0000_000_0,  //   67  0x44   68  8
  6284:     0x0021_021_4, 0x0069_069_4, 0x0000_000_0,  //   68  0x45   69  9
  6285:     0x006b_06b_4, 0x0000_000_0, 0x0000_000_0,  //   69  0x46   70  +
  6286:     0x0025_025_4, 0x0064_064_4, 0x0000_000_0,  //   70  0x47   71  4
  6287:     0x000c_00c_4, 0x0065_065_4, 0x0000_000_0,  //   71  0x48   72  5
  6288:     0x0027_027_4, 0x0066_066_4, 0x0000_000_0,  //   72  0x49   73  6
  6289:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   73  0x4a   74  =
  6290:     0x0023_023_4, 0x0061_061_4, 0x0000_000_0,  //   74  0x4b   75  1
  6291:     0x0028_028_4, 0x0062_062_4, 0x0000_000_0,  //   75  0x4c   76  2
  6292:     0x0022_022_4, 0x0063_063_4, 0x0000_000_0,  //   76  0x4d   77  3
  6293:     0x000a_00d_4, 0x0000_000_0, 0x0000_000_0,  //   77  0x4e   78  ENTER
  6294:     0x009b_02d_4, 0x0060_060_4, 0x0000_000_0,  //   78  0x4f   79  0
  6295:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   79  0x50   80  ,
  6296:     0x007f_02e_4, 0x006e_06e_4, 0x0000_000_0,  //   80  0x51   81  .
  6297:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   81  0x52   82  記号入力
  6298:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   82  0x53   83  登録
  6299:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   83  0x54   84  HELP
  6300:     0x0012_012_2, 0x0000_000_0, 0x0000_000_0,  //   84  0x55   85  XF1
  6301:     0x0000_0eb_1, 0x0000_000_0, 0x0000_000_0,  //   85  0x56   86  XF2
  6302:     0x0012_012_3, 0x0000_000_0, 0x0000_000_0,  //   86  0x57   87  XF3
  6303:     0x020d_05d_1, 0x0000_000_0, 0x0000_000_0,  //   87  0x58   88  XF4
  6304:     0x0011_011_3, 0x0000_000_0, 0x0000_000_0,  //   88  0x59   89  XF5
  6305:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   89  0x5a   90  かな
  6306:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   90  0x5b   91  ローマ字
  6307:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   91  0x5c   92  コード入力
  6308:     0x0014_014_1, 0x0000_000_0, 0x0000_000_0,  //   92  0x5d   93  CAPS
  6309:     0x009b_02d_1, 0x0000_000_0, 0x0000_000_0,  //   93  0x5e   94  INS
  6310:     0x020c_05b_2, 0x0000_000_0, 0x0000_000_0,  //   94  0x5f   95  ひらがな
  6311:     0x020c_05c_3, 0x0000_000_0, 0x0000_000_0,  //   95  0x60   96  全角
  6312:     0x0013_013_1, 0x0000_000_0, 0x0000_000_0,  //   96  0x61   97  BREAK
  6313:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   97  0x62   98  COPY
  6314:     0x0070_070_1, 0x0000_000_0, 0x0000_000_0,  //   98  0x63   99  F1
  6315:     0x0071_071_1, 0x0000_000_0, 0x0000_000_0,  //   99  0x64  100  F2
  6316:     0x0072_072_1, 0x0000_000_0, 0x0000_000_0,  //  100  0x65  101  F3
  6317:     0x0073_073_1, 0x0000_000_0, 0x0000_000_0,  //  101  0x66  102  F4
  6318:     0x0074_074_1, 0x0000_000_0, 0x0000_000_0,  //  102  0x67  103  F5
  6319:     0x0075_075_1, 0x0000_000_0, 0x0000_000_0,  //  103  0x68  104  F6
  6320:     0x0076_076_1, 0x0000_000_0, 0x0000_000_0,  //  104  0x69  105  F7
  6321:     0x0077_077_1, 0x0000_000_0, 0x0000_000_0,  //  105  0x6a  106  F8
  6322:     0x0078_078_1, 0x0000_000_0, 0x0000_000_0,  //  106  0x6b  107  F9
  6323:     0x0079_079_1, 0x0000_000_0, 0x0000_000_0,  //  107  0x6c  108  F10
  6324:     0x0010_010_2, 0x0010_010_3, 0x0000_000_0,  //  108  0x70  112  SHIFT
  6325:     0x0011_011_2, 0x0000_000_0, 0x0000_000_0,  //  109  0x71  113  CTRL
  6326:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //  110  0x72  114  OPT.1
  6327:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //  111  0x73  115  OPT.2
  6328:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //  112  0x74  116  NUM
  6329:   };
  6330: 
  6331:   public static final int[] KBD_DEFAULT_MAP_WIN = {
  6332:     //(keyCode&0xffff)<<16|(rawCode&0xfff)<<4|(keyLocation&0xf)
  6333:     //cccc_rrr_l    cccc_rrr_l    cccc_rrr_l        xo   hex  dec  text
  6334:     0x001b_01b_1, 0x0000_000_0, 0x0000_000_0,  //    0  0x01    1  ESC
  6335:     0x0031_031_1, 0x0000_000_0, 0x0000_000_0,  //    1  0x02    2  1!ぬ 
  6336:     0x0032_032_1, 0x0000_000_0, 0x0000_000_0,  //    2  0x03    3  2"ふ 
  6337:     0x0033_033_1, 0x0000_000_0, 0x0000_000_0,  //    3  0x04    4  3#あぁ
  6338:     0x0034_034_1, 0x0000_000_0, 0x0000_000_0,  //    4  0x05    5  4$うぅ
  6339:     0x0035_035_1, 0x0000_000_0, 0x0000_000_0,  //    5  0x06    6  5%えぇ
  6340:     0x0036_036_1, 0x0000_000_0, 0x0000_000_0,  //    6  0x07    7  6&おぉ
  6341:     0x0037_037_1, 0x0000_000_0, 0x0000_000_0,  //    7  0x08    8  7'やゃ
  6342:     0x0038_038_1, 0x0000_000_0, 0x0000_000_0,  //    8  0x09    9  8(ゆゅ
  6343:     0x0039_039_1, 0x0000_000_0, 0x0000_000_0,  //    9  0x0a   10  9)よょ
  6344:     0x0030_030_1, 0x0000_000_0, 0x0000_000_0,  //   10  0x0b   11  0 わを
  6345:     0x002d_0bd_1, 0x0000_000_0, 0x0000_000_0,  //   11  0x0c   12  -=ほ 
  6346:     0x0202_0de_1, 0x0000_000_0, 0x0000_000_0,  //   12  0x0d   13  ^~へ 
  6347:     0x005c_0dc_1, 0x0000_000_0, 0x0000_000_0,  //   13  0x0e   14  ¥|ー 
  6348:     0x0008_008_1, 0x0000_000_0, 0x0000_000_0,  //   14  0x0f   15  BS
  6349:     0x0009_009_1, 0x0000_000_0, 0x0000_000_0,  //   15  0x10   16  TAB
  6350:     0x0051_051_1, 0x0000_000_0, 0x0000_000_0,  //   16  0x11   17  Q た 
  6351:     0x0057_057_1, 0x0000_000_0, 0x0000_000_0,  //   17  0x12   18  W て 
  6352:     0x0045_045_1, 0x0000_000_0, 0x0000_000_0,  //   18  0x13   19  E いぃ
  6353:     0x0052_052_1, 0x0000_000_0, 0x0000_000_0,  //   19  0x14   20  R す 
  6354:     0x0054_054_1, 0x0000_000_0, 0x0000_000_0,  //   20  0x15   21  T か 
  6355:     0x0059_059_1, 0x0000_000_0, 0x0000_000_0,  //   21  0x16   22  Y ん 
  6356:     0x0055_055_1, 0x0000_000_0, 0x0000_000_0,  //   22  0x17   23  U な 
  6357:     0x0049_049_1, 0x0000_000_0, 0x0000_000_0,  //   23  0x18   24  I に 
  6358:     0x004f_04f_1, 0x0000_000_0, 0x0000_000_0,  //   24  0x19   25  O ら 
  6359:     0x0050_050_1, 0x0000_000_0, 0x0000_000_0,  //   25  0x1a   26  P せ 
  6360:     0x0200_0c0_1, 0x0000_000_0, 0x0000_000_0,  //   26  0x1b   27  @`゛ 
  6361:     0x005b_0db_1, 0x0000_000_0, 0x0000_000_0,  //   27  0x1c   28  [{゜「
  6362:     0x000a_00d_1, 0x0000_000_0, 0x0000_000_0,  //   28  0x1d   29  リターン
  6363:     0x0041_041_1, 0x0000_000_0, 0x0000_000_0,  //   29  0x1e   30  A ち 
  6364:     0x0053_053_1, 0x0000_000_0, 0x0000_000_0,  //   30  0x1f   31  S と 
  6365:     0x0044_044_1, 0x0000_000_0, 0x0000_000_0,  //   31  0x20   32  D し 
  6366:     0x0046_046_1, 0x0000_000_0, 0x0000_000_0,  //   32  0x21   33  F は 
  6367:     0x0047_047_1, 0x0000_000_0, 0x0000_000_0,  //   33  0x22   34  G き 
  6368:     0x0048_048_1, 0x0000_000_0, 0x0000_000_0,  //   34  0x23   35  H く 
  6369:     0x004a_04a_1, 0x0000_000_0, 0x0000_000_0,  //   35  0x24   36  J ま 
  6370:     0x004b_04b_1, 0x0000_000_0, 0x0000_000_0,  //   36  0x25   37  K の 
  6371:     0x004c_04c_1, 0x0000_000_0, 0x0000_000_0,  //   37  0x26   38  L り 
  6372:     0x003b_0bb_1, 0x0000_000_0, 0x0000_000_0,  //   38  0x27   39  ;+れ 
  6373:     0x0201_0ba_1, 0x0000_000_0, 0x0000_000_0,  //   39  0x28   40  :*け 
  6374:     0x005d_0dd_1, 0x0000_000_0, 0x0000_000_0,  //   40  0x29   41  ]}む」
  6375:     0x005a_05a_1, 0x0000_000_0, 0x0000_000_0,  //   41  0x2a   42  Z つっ
  6376:     0x0058_058_1, 0x0000_000_0, 0x0000_000_0,  //   42  0x2b   43  X さ 
  6377:     0x0043_043_1, 0x0000_000_0, 0x0000_000_0,  //   43  0x2c   44  C そ 
  6378:     0x0056_056_1, 0x0000_000_0, 0x0000_000_0,  //   44  0x2d   45  V ひ 
  6379:     0x0042_042_1, 0x0000_000_0, 0x0000_000_0,  //   45  0x2e   46  B こ 
  6380:     0x004e_04e_1, 0x0000_000_0, 0x0000_000_0,  //   46  0x2f   47  N み 
  6381:     0x004d_04d_1, 0x0000_000_0, 0x0000_000_0,  //   47  0x30   48  M も 
  6382:     0x002c_0bc_1, 0x0000_000_0, 0x0000_000_0,  //   48  0x31   49  ,<ね、
  6383:     0x002e_0be_1, 0x0000_000_0, 0x0000_000_0,  //   49  0x32   50  .>る。
  6384:     0x002f_0bf_1, 0x0000_000_0, 0x0000_000_0,  //   50  0x33   51  /?め・
  6385:     0x005c_0e2_1, 0x0000_000_0, 0x0000_000_0,  //   51  0x34   52   _ろ□
  6386:     0x0020_020_1, 0x0000_000_0, 0x0000_000_0,  //   52  0x35   53  スペース
  6387:     0x0024_024_1, 0x0000_000_0, 0x0000_000_0,  //   53  0x36   54  HOME
  6388:     0x007f_02e_1, 0x0000_000_0, 0x0000_000_0,  //   54  0x37   55  DEL
  6389:     0x0022_022_1, 0x0000_000_0, 0x0000_000_0,  //   55  0x38   56  ROLLUP
  6390:     0x0021_021_1, 0x0000_000_0, 0x0000_000_0,  //   56  0x39   57  ROLLDOWN
  6391:     0x0023_023_1, 0x0000_000_0, 0x0000_000_0,  //   57  0x3a   58  UNDO
  6392:     0x0025_025_1, 0x0000_000_0, 0x0000_000_0,  //   58  0x3b   59  ←
  6393:     0x0026_026_1, 0x0000_000_0, 0x0000_000_0,  //   59  0x3c   60  ↑
  6394:     0x0027_027_1, 0x0000_000_0, 0x0000_000_0,  //   60  0x3d   61  →
  6395:     0x0028_028_1, 0x0000_000_0, 0x0000_000_0,  //   61  0x3e   62  ↓
  6396:     0x0090_090_4, 0x0000_000_0, 0x0000_000_0,  //   62  0x3f   63  CLR
  6397:     0x006f_06f_4, 0x0000_000_0, 0x0000_000_0,  //   63  0x40   64  /
  6398:     0x006a_06a_4, 0x0000_000_0, 0x0000_000_0,  //   64  0x41   65  *
  6399:     0x006d_06d_4, 0x0000_000_0, 0x0000_000_0,  //   65  0x42   66  -
  6400:     0x0024_024_4, 0x0067_067_4, 0x0000_000_0,  //   66  0x43   67  7
  6401:     0x0026_026_4, 0x0068_068_4, 0x0000_000_0,  //   67  0x44   68  8
  6402:     0x0021_021_4, 0x0069_069_4, 0x0000_000_0,  //   68  0x45   69  9
  6403:     0x006b_06b_4, 0x0000_000_0, 0x0000_000_0,  //   69  0x46   70  +
  6404:     0x0025_025_4, 0x0064_064_4, 0x0000_000_0,  //   70  0x47   71  4
  6405:     0x000c_00c_4, 0x0065_065_4, 0x0000_000_0,  //   71  0x48   72  5
  6406:     0x0027_027_4, 0x0066_066_4, 0x0000_000_0,  //   72  0x49   73  6
  6407:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   73  0x4a   74  =
  6408:     0x0023_023_4, 0x0061_061_4, 0x0000_000_0,  //   74  0x4b   75  1
  6409:     0x0028_028_4, 0x0062_062_4, 0x0000_000_0,  //   75  0x4c   76  2
  6410:     0x0022_022_4, 0x0063_063_4, 0x0000_000_0,  //   76  0x4d   77  3
  6411:     0x000a_00d_4, 0x0000_000_0, 0x0000_000_0,  //   77  0x4e   78  ENTER
  6412:     0x009b_02d_4, 0x0060_060_4, 0x0000_000_0,  //   78  0x4f   79  0
  6413:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   79  0x50   80  ,
  6414:     0x007f_02e_4, 0x006e_06e_4, 0x0000_000_0,  //   80  0x51   81  .
  6415:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   81  0x52   82  記号入力
  6416:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   82  0x53   83  登録
  6417:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   83  0x54   84  HELP
  6418:     0x0012_012_2, 0x0000_000_0, 0x0000_000_0,  //   84  0x55   85  XF1          左Alt
  6419:     0x001d_01d_1, 0x0000_000_0, 0x0000_000_0,  //   85  0x56   86  XF2          無変換
  6420:     0x0012_012_3, 0x0000_000_0, 0x0000_000_0,  //   86  0x57   87  XF3          右Alt
  6421:     0x020d_05d_1, 0x0000_000_0, 0x0000_000_0,  //   87  0x58   88  XF4          メニュー。Fn+右Ctrl
  6422:     0x0011_011_3, 0x0000_000_0, 0x0000_000_0,  //   88  0x59   89  XF5          右Ctrl
  6423:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   89  0x5a   90  かな
  6424:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   90  0x5b   91  ローマ字
  6425:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   91  0x5c   92  コード入力
  6426:     0x0014_014_1, 0x0000_000_0, 0x0000_000_0,  //   92  0x5d   93  CAPS
  6427:     0x009b_02d_1, 0x0000_000_0, 0x0000_000_0,  //   93  0x5e   94  INS
  6428:     0x020c_05b_2, 0x0000_000_0, 0x0000_000_0,  //   94  0x5f   95  ひらがな
  6429:     0x020c_05c_3, 0x0000_000_0, 0x0000_000_0,  //   95  0x60   96  全角
  6430:     0x0013_013_1, 0x0000_000_0, 0x0000_000_0,  //   96  0x61   97  BREAK
  6431:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //   97  0x62   98  COPY
  6432:     0x0070_070_1, 0x0000_000_0, 0x0000_000_0,  //   98  0x63   99  F1
  6433:     0x0071_071_1, 0x0000_000_0, 0x0000_000_0,  //   99  0x64  100  F2
  6434:     0x0072_072_1, 0x0000_000_0, 0x0000_000_0,  //  100  0x65  101  F3
  6435:     0x0073_073_1, 0x0000_000_0, 0x0000_000_0,  //  101  0x66  102  F4
  6436:     0x0074_074_1, 0x0000_000_0, 0x0000_000_0,  //  102  0x67  103  F5
  6437:     0x0075_075_1, 0x0000_000_0, 0x0000_000_0,  //  103  0x68  104  F6
  6438:     0x0076_076_1, 0x0000_000_0, 0x0000_000_0,  //  104  0x69  105  F7
  6439:     0x0077_077_1, 0x0000_000_0, 0x0000_000_0,  //  105  0x6a  106  F8
  6440:     0x0078_078_1, 0x0000_000_0, 0x0000_000_0,  //  106  0x6b  107  F9
  6441:     0x0079_079_1, 0x0000_000_0, 0x0000_000_0,  //  107  0x6c  108  F10
  6442:     0x0010_010_2, 0x0010_010_3, 0x0000_000_0,  //  108  0x70  112  SHIFT
  6443:     0x0011_011_2, 0x0000_000_0, 0x0000_000_0,  //  109  0x71  113  CTRL
  6444:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //  110  0x72  114  OPT.1
  6445:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //  111  0x73  115  OPT.2
  6446:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //  112  0x74  116  NUM
  6447:   };
  6448: 
  6449:   public static final int[] KBD_DEFAULT_MAP_ZKEY = {
  6450:     //(keyCode&0xffff)<<16|(rawCode&0xfff)<<4|(keyLocation&0xf)
  6451:     //cccc_rrr_l    cccc_rrr_l    cccc_rrr_l        xo   hex  dec  text
  6452:     0x001b_01b_1, 0x0000_000_0, 0x0000_000_0,  //    0  0x01    1  ESC
  6453:     0x0031_031_1, 0x0000_000_0, 0x0000_000_0,  //    1  0x02    2  1!ぬ 
  6454:     0x0032_032_1, 0x0000_000_0, 0x0000_000_0,  //    2  0x03    3  2"ふ 
  6455:     0x0033_033_1, 0x0000_000_0, 0x0000_000_0,  //    3  0x04    4  3#あぁ
  6456:     0x0034_034_1, 0x0000_000_0, 0x0000_000_0,  //    4  0x05    5  4$うぅ
  6457:     0x0035_035_1, 0x0000_000_0, 0x0000_000_0,  //    5  0x06    6  5%えぇ
  6458:     0x0036_036_1, 0x0000_000_0, 0x0000_000_0,  //    6  0x07    7  6&おぉ
  6459:     0x0037_037_1, 0x0000_000_0, 0x0000_000_0,  //    7  0x08    8  7'やゃ
  6460:     0x0038_038_1, 0x0000_000_0, 0x0000_000_0,  //    8  0x09    9  8(ゆゅ
  6461:     0x0039_039_1, 0x0000_000_0, 0x0000_000_0,  //    9  0x0a   10  9)よょ
  6462:     0x0030_030_1, 0x0000_000_0, 0x0000_000_0,  //   10  0x0b   11  0 わを
  6463:     0x002d_0bd_1, 0x0000_000_0, 0x0000_000_0,  //   11  0x0c   12  -=ほ 
  6464:     0x0202_0de_1, 0x0000_000_0, 0x0000_000_0,  //   12  0x0d   13  ^~へ 
  6465:     0x005c_0dc_1, 0x0000_000_0, 0x0000_000_0,  //   13  0x0e   14  ¥|ー 
  6466:     0x0008_008_1, 0x0000_000_0, 0x0000_000_0,  //   14  0x0f   15  BS
  6467:     0x0009_009_1, 0x0000_000_0, 0x0000_000_0,  //   15  0x10   16  TAB
  6468:     0x0051_051_1, 0x0000_000_0, 0x0000_000_0,  //   16  0x11   17  Q た 
  6469:     0x0057_057_1, 0x0000_000_0, 0x0000_000_0,  //   17  0x12   18  W て 
  6470:     0x0045_045_1, 0x0000_000_0, 0x0000_000_0,  //   18  0x13   19  E いぃ
  6471:     0x0052_052_1, 0x0000_000_0, 0x0000_000_0,  //   19  0x14   20  R す 
  6472:     0x0054_054_1, 0x0000_000_0, 0x0000_000_0,  //   20  0x15   21  T か 
  6473:     0x0059_059_1, 0x0000_000_0, 0x0000_000_0,  //   21  0x16   22  Y ん 
  6474:     0x0055_055_1, 0x0000_000_0, 0x0000_000_0,  //   22  0x17   23  U な 
  6475:     0x0049_049_1, 0x0000_000_0, 0x0000_000_0,  //   23  0x18   24  I に 
  6476:     0x004f_04f_1, 0x0000_000_0, 0x0000_000_0,  //   24  0x19   25  O ら 
  6477:     0x0050_050_1, 0x0000_000_0, 0x0000_000_0,  //   25  0x1a   26  P せ 
  6478:     0x0200_0c0_1, 0x0000_000_0, 0x0000_000_0,  //   26  0x1b   27  @`゛ 
  6479:     0x005b_0db_1, 0x0000_000_0, 0x0000_000_0,  //   27  0x1c   28  [{゜「
  6480:     0x000a_00d_1, 0x0000_000_0, 0x0000_000_0,  //   28  0x1d   29  リターン
  6481:     0x0041_041_1, 0x0000_000_0, 0x0000_000_0,  //   29  0x1e   30  A ち 
  6482:     0x0053_053_1, 0x0000_000_0, 0x0000_000_0,  //   30  0x1f   31  S と 
  6483:     0x0044_044_1, 0x0000_000_0, 0x0000_000_0,  //   31  0x20   32  D し 
  6484:     0x0046_046_1, 0x0000_000_0, 0x0000_000_0,  //   32  0x21   33  F は 
  6485:     0x0047_047_1, 0x0000_000_0, 0x0000_000_0,  //   33  0x22   34  G き 
  6486:     0x0048_048_1, 0x0000_000_0, 0x0000_000_0,  //   34  0x23   35  H く 
  6487:     0x004a_04a_1, 0x0000_000_0, 0x0000_000_0,  //   35  0x24   36  J ま 
  6488:     0x004b_04b_1, 0x0000_000_0, 0x0000_000_0,  //   36  0x25   37  K の 
  6489:     0x004c_04c_1, 0x0000_000_0, 0x0000_000_0,  //   37  0x26   38  L り 
  6490:     0x003b_0bb_1, 0x0000_000_0, 0x0000_000_0,  //   38  0x27   39  ;+れ 
  6491:     0x0201_0ba_1, 0x0000_000_0, 0x0000_000_0,  //   39  0x28   40  :*け 
  6492:     0x005d_0dd_1, 0x0000_000_0, 0x0000_000_0,  //   40  0x29   41  ]}む」
  6493:     0x005a_05a_1, 0x0000_000_0, 0x0000_000_0,  //   41  0x2a   42  Z つっ
  6494:     0x0058_058_1, 0x0000_000_0, 0x0000_000_0,  //   42  0x2b   43  X さ 
  6495:     0x0043_043_1, 0x0000_000_0, 0x0000_000_0,  //   43  0x2c   44  C そ 
  6496:     0x0056_056_1, 0x0000_000_0, 0x0000_000_0,  //   44  0x2d   45  V ひ 
  6497:     0x0042_042_1, 0x0000_000_0, 0x0000_000_0,  //   45  0x2e   46  B こ 
  6498:     0x004e_04e_1, 0x0000_000_0, 0x0000_000_0,  //   46  0x2f   47  N み 
  6499:     0x004d_04d_1, 0x0000_000_0, 0x0000_000_0,  //   47  0x30   48  M も 
  6500:     0x002c_0bc_1, 0x0000_000_0, 0x0000_000_0,  //   48  0x31   49  ,<ね、
  6501:     0x002e_0be_1, 0x0000_000_0, 0x0000_000_0,  //   49  0x32   50  .>る。
  6502:     0x002f_0bf_1, 0x0000_000_0, 0x0000_000_0,  //   50  0x33   51  /?め・
  6503:     0x005c_0e2_1, 0x0000_000_0, 0x0000_000_0,  //   51  0x34   52   _ろ□
  6504:     0x0020_020_1, 0x0000_000_0, 0x0000_000_0,  //   52  0x35   53  スペース
  6505:     0x0024_024_1, 0x0000_000_0, 0x0000_000_0,  //   53  0x36   54  HOME
  6506:     0x007f_02e_1, 0x0000_000_0, 0x0000_000_0,  //   54  0x37   55  DEL
  6507:     0x0021_021_1, 0x0000_000_0, 0x0000_000_0,  //   55  0x38   56  ROLLUP
  6508:     0x0022_022_1, 0x0000_000_0, 0x0000_000_0,  //   56  0x39   57  ROLLDOWN
  6509:     0x0023_023_1, 0x0000_000_0, 0x0000_000_0,  //   57  0x3a   58  UNDO
  6510:     0x0025_025_1, 0x0000_000_0, 0x0000_000_0,  //   58  0x3b   59  ←
  6511:     0x0026_026_1, 0x0000_000_0, 0x0000_000_0,  //   59  0x3c   60  ↑
  6512:     0x0027_027_1, 0x0000_000_0, 0x0000_000_0,  //   60  0x3d   61  →
  6513:     0x0028_028_1, 0x0000_000_0, 0x0000_000_0,  //   61  0x3e   62  ↓
  6514:     0x0090_090_4, 0x0000_000_0, 0x0000_000_0,  //   62  0x3f   63  CLR
  6515:     0x006f_06f_4, 0x0000_000_0, 0x0000_000_0,  //   63  0x40   64  /
  6516:     0x006a_06a_4, 0x0000_000_0, 0x0000_000_0,  //   64  0x41   65  *
  6517:     0x006d_06d_4, 0x0000_000_0, 0x0000_000_0,  //   65  0x42   66  -
  6518:     0x0024_024_4, 0x0067_067_4, 0x0000_000_0,  //   66  0x43   67  7
  6519:     0x0026_026_4, 0x0068_068_4, 0x0000_000_0,  //   67  0x44   68  8
  6520:     0x0021_021_4, 0x0069_069_4, 0x0000_000_0,  //   68  0x45   69  9
  6521:     0x006b_06b_4, 0x0000_000_0, 0x0000_000_0,  //   69  0x46   70  +
  6522:     0x0025_025_4, 0x0064_064_4, 0x0000_000_0,  //   70  0x47   71  4
  6523:     0x0065_065_4, 0x0000_000_0, 0x0000_000_0,  //   71  0x48   72  5
  6524:     0x0027_027_4, 0x0066_066_4, 0x0000_000_0,  //   72  0x49   73  6
  6525:     0x000c_00c_4, 0x0000_000_0, 0x0000_000_0,  //   73  0x4a   74  =
  6526:     0x0023_023_4, 0x0061_061_4, 0x0000_000_0,  //   74  0x4b   75  1
  6527:     0x0028_028_4, 0x0062_062_4, 0x0000_000_0,  //   75  0x4c   76  2
  6528:     0x0022_022_4, 0x0063_063_4, 0x0000_000_0,  //   76  0x4d   77  3
  6529:     0x000a_00d_4, 0x0000_000_0, 0x0000_000_0,  //   77  0x4e   78  ENTER
  6530:     0x009b_02d_4, 0x0060_060_4, 0x0000_000_0,  //   78  0x4f   79  0
  6531:     0x0000_0c2_1, 0x0000_000_0, 0x0000_000_0,  //   79  0x50   80  ,
  6532:     0x007f_02e_4, 0x006e_06e_4, 0x0000_000_0,  //   80  0x51   81  .
  6533:     0xf009_085_1, 0x0000_000_0, 0x0000_000_0,  //   81  0x52   82  記号入力     Volume Mute → F22
  6534:     0xf00a_086_1, 0x0000_000_0, 0x0000_000_0,  //   82  0x53   83  登録         Volume Down → F23
  6535:     0xf00b_087_1, 0x0000_000_0, 0x0000_000_0,  //   83  0x54   84  HELP         Volume Up → F24
  6536:     0x0012_012_2, 0x0000_000_0, 0x0000_000_0,  //   84  0x55   85  XF1          Alt (Left)
  6537:     0xf001_07d_1, 0x0000_000_0, 0x0000_000_0,  //   85  0x56   86  XF2          無変換(VK 29) → F14
  6538:     0xf002_07e_1, 0x0000_000_0, 0x0000_000_0,  //   86  0x57   87  XF3          変換(VK 28) → F15
  6539:     0xf003_07f_1, 0x0000_000_0, 0x0000_000_0,  //   87  0x58   88  XF4          ひらがな(VK 242) → F16
  6540:     0x0012_012_3, 0x0000_000_0, 0x0000_000_0,  //   88  0x59   89  XF5          Alt (Right)
  6541:     0xf005_081_1, 0x0000_000_0, 0x0000_000_0,  //   89  0x5a   90  かな         Print Screen → F18
  6542:     0xf006_082_1, 0x0000_000_0, 0x0000_000_0,  //   90  0x5b   91  ローマ字     Scroll Lock → F19
  6543:     0x0013_013_1, 0x0000_000_0, 0x0000_000_0,  //   91  0x5c   92  コード入力   Pause
  6544:     0xf004_080_1, 0x0000_000_0, 0x0000_000_0,  //   92  0x5d   93  CAPS         英数字(VK 240) → F17
  6545:     0x009b_02d_1, 0x0000_000_0, 0x0000_000_0,  //   93  0x5e   94  INS
  6546:     0xf007_083_1, 0x0000_000_0, 0x0000_000_0,  //   94  0x5f   95  ひらがな     Win (Left) → F20
  6547:     0xf008_084_1, 0x0000_000_0, 0x0000_000_0,  //   95  0x60   96  全角         Win (Right) → F21
  6548:     0x00f4_0f3_1, 0x00f3_0f4_1, 0x0000_000_0,  //   96  0x61   97  BREAK        半角(VK 244)/全角(VK 243)
  6549:     0x020d_05d_1, 0x0000_000_0, 0x0000_000_0,  //   97  0x62   98  COPY
  6550:     0x0070_070_1, 0x0000_000_0, 0x0000_000_0,  //   98  0x63   99  F1
  6551:     0x0071_071_1, 0x0000_000_0, 0x0000_000_0,  //   99  0x64  100  F2
  6552:     0x0072_072_1, 0x0000_000_0, 0x0000_000_0,  //  100  0x65  101  F3
  6553:     0x0073_073_1, 0x0000_000_0, 0x0000_000_0,  //  101  0x66  102  F4
  6554:     0x0074_074_1, 0x0000_000_0, 0x0000_000_0,  //  102  0x67  103  F5
  6555:     0x0075_075_1, 0x0000_000_0, 0x0000_000_0,  //  103  0x68  104  F6
  6556:     0x0076_076_1, 0x0000_000_0, 0x0000_000_0,  //  104  0x69  105  F7
  6557:     0x0077_077_1, 0x0000_000_0, 0x0000_000_0,  //  105  0x6a  106  F8
  6558:     0x0078_078_1, 0x0000_000_0, 0x0000_000_0,  //  106  0x6b  107  F9
  6559:     0x0079_079_1, 0x0000_000_0, 0x0000_000_0,  //  107  0x6c  108  F10
  6560:     0x0010_010_2, 0x0010_010_3, 0x0000_000_0,  //  108  0x70  112  SHIFT
  6561:     0x0011_011_2, 0x0000_000_0, 0x0000_000_0,  //  109  0x71  113  CTRL
  6562:     0xf000_07c_1, 0x0000_000_0, 0x0000_000_0,  //  110  0x72  114  OPT.1        F11 → F13
  6563:     0x007b_07b_1, 0x0000_000_0, 0x0000_000_0,  //  111  0x73  115  OPT.2        F12
  6564:     0x0000_000_0, 0x0000_000_0, 0x0000_000_0,  //  112  0x74  116  NUM
  6565:   };
  6566: 
  6567:   //  eo→xo
  6568:   public static final int[] KBD_EO_TO_XO = {
  6569:     //xo     eo   x68kCode
  6570:       1,  //  0  0x02  0x02  "1!ぬ "
  6571:       2,  //  1  0x03  0x03  "2"ふ "
  6572:       3,  //  2  0x04  0x04  "3#あぁ"
  6573:       4,  //  3  0x05  0x05  "4$うぅ"
  6574:       5,  //  4  0x06  0x06  "5%えぇ"
  6575:       6,  //  5  0x07  0x07  "6&おぉ"
  6576:       7,  //  6  0x08  0x43  "7'やゃ"
  6577:       8,  //  7  0x09  0x44  "8(ゆゅ"
  6578:       9,  //  8  0x0a  0x45  "9)よょ"
  6579:      10,  //  9  0x0b  0x40  "0 わを"
  6580:      11,  // 10  0x0c  0x41  "-=ほ "
  6581:      12,  // 11  0x0d  0x0d  "^~へ "
  6582:      13,  // 12  0x0e  0x0e  "¥|ー "
  6583:      16,  // 13  0x11  0x11  "Q た "
  6584:      17,  // 14  0x12  0x12  "W て "
  6585:      18,  // 15  0x13  0x13  "E いぃ"
  6586:      19,  // 16  0x14  0x14  "R す "
  6587:      20,  // 17  0x15  0x15  "T か "
  6588:      21,  // 18  0x16  0x16  "Y ん "
  6589:      22,  // 19  0x17  0x47  "U な "
  6590:      23,  // 20  0x18  0x48  "I に "
  6591:      24,  // 21  0x19  0x49  "O ら "
  6592:      25,  // 22  0x1a  0x42  "P せ "
  6593:      26,  // 23  0x1b  0x1b  "@`゛ "
  6594:      27,  // 24  0x1c  0x1c  "[{゜「"
  6595:      29,  // 25  0x1e  0x1e  "A ち "
  6596:      30,  // 26  0x1f  0x1f  "S と "
  6597:      31,  // 27  0x20  0x20  "D し "
  6598:      32,  // 28  0x21  0x21  "F は "
  6599:      33,  // 29  0x22  0x22  "G き "
  6600:      34,  // 30  0x23  0x23  "H く "
  6601:      35,  // 31  0x24  0x4b  "J ま "
  6602:      36,  // 32  0x25  0x4c  "K の "
  6603:      37,  // 33  0x26  0x4d  "L り "
  6604:      38,  // 34  0x27  0x46  ";+れ "
  6605:      39,  // 35  0x28  0x28  ":*け "
  6606:      40,  // 36  0x29  0x29  "]}む」"
  6607:      41,  // 37  0x2a  0x2a  "Z つっ"
  6608:      42,  // 38  0x2b  0x2b  "X さ "
  6609:      43,  // 39  0x2c  0x2c  "C そ "
  6610:      44,  // 40  0x2d  0x2d  "V ひ "
  6611:      45,  // 41  0x2e  0x2e  "B こ "
  6612:      46,  // 42  0x2f  0x2f  "N み "
  6613:      47,  // 43  0x30  0x4f  "M も "
  6614:      48,  // 44  0x31  0x50  ",<ね、"
  6615:      49,  // 45  0x32  0x51  ".>る。"
  6616:      50,  // 46  0x33  0x4a  "/?め・"
  6617:      51,  // 47  0x34  0x4e  " _ろ□"
  6618:      89,  // 48  0x5a  0x5a  "かな"
  6619:      90,  // 49  0x5b  0x5b  "ローマ字"
  6620:      91,  // 50  0x5c  0x5c  "コード入力"
  6621:      92,  // 51  0x5d  0x5d  "CAPS"
  6622:      93,  // 52  0x5e  0x5e  "INS"
  6623:      94,  // 53  0x5f  0x5f  "ひらがな"
  6624:      95,  // 54  0x60  0x60  "全角"
  6625:     112,  // 55  0x74  0x74  "NUM"
  6626:       0,  // 56  0x01  0x01  "ESC"
  6627:      14,  // 57  0x0f  0x0f  "BS"
  6628:      15,  // 58  0x10  0x10  "TAB"
  6629:      28,  // 59  0x1d  0x1d  "リターン"
  6630:      52,  // 60  0x35  0x35  "スペース"
  6631:      53,  // 61  0x36  0x36  "HOME"
  6632:      54,  // 62  0x37  0x37  "DEL"
  6633:      55,  // 63  0x38  0x38  "ROLLUP"
  6634:      56,  // 64  0x39  0x39  "ROLLDOWN"
  6635:      57,  // 65  0x3a  0x3a  "UNDO"
  6636:      58,  // 66  0x3b  0x3b  "←"
  6637:      59,  // 67  0x3c  0x3c  "↑"
  6638:      60,  // 68  0x3d  0x3d  "→"
  6639:      61,  // 69  0x3e  0x3e  "↓"
  6640:      62,  // 70  0x3f  0x3f  "CLR"
  6641:      63,  // 71  0x40  0x40  "/"
  6642:      64,  // 72  0x41  0x41  "*"
  6643:      65,  // 73  0x42  0x42  "-"
  6644:      66,  // 74  0x43  0x43  "7"
  6645:      67,  // 75  0x44  0x44  "8"
  6646:      68,  // 76  0x45  0x45  "9"
  6647:      69,  // 77  0x46  0x46  "+"
  6648:      70,  // 78  0x47  0x47  "4"
  6649:      71,  // 79  0x48  0x48  "5"
  6650:      72,  // 80  0x49  0x49  "6"
  6651:      73,  // 81  0x4a  0x4a  "="
  6652:      74,  // 82  0x4b  0x4b  "1"
  6653:      75,  // 83  0x4c  0x4c  "2"
  6654:      76,  // 84  0x4d  0x4d  "3"
  6655:      77,  // 85  0x4e  0x4e  "ENTER"
  6656:      78,  // 86  0x4f  0x4f  "0"
  6657:      79,  // 87  0x50  0x50  ","
  6658:      80,  // 88  0x51  0x51  "."
  6659:      81,  // 89  0x52  0x52  "記号入力"
  6660:      82,  // 90  0x53  0x53  "登録"
  6661:      83,  // 91  0x54  0x54  "HELP"
  6662:      84,  // 92  0x55  0x55  "XF1"
  6663:      85,  // 93  0x56  0x56  "XF2"
  6664:      86,  // 94  0x57  0x57  "XF3"
  6665:      87,  // 95  0x58  0x58  "XF4"
  6666:      88,  // 96  0x59  0x59  "XF5"
  6667:      96,  // 97  0x61  0x61  "BREAK"
  6668:      97,  // 98  0x62  0x62  "COPY"
  6669:      98,  // 99  0x63  0x63  "F1"
  6670:      99,  //100  0x64  0x64  "F2"
  6671:     100,  //101  0x65  0x65  "F3"
  6672:     101,  //102  0x66  0x66  "F4"
  6673:     102,  //103  0x67  0x67  "F5"
  6674:     103,  //104  0x68  0x68  "F6"
  6675:     104,  //105  0x69  0x69  "F7"
  6676:     105,  //106  0x6a  0x6a  "F8"
  6677:     106,  //107  0x6b  0x6b  "F9"
  6678:     107,  //108  0x6c  0x6c  "F10"
  6679:     108,  //109  0x70  0x70  "SHIFT"
  6680:     109,  //110  0x71  0x71  "CTRL"
  6681:     110,  //111  0x72  0x72  "OPT.1"
  6682:     111,  //112  0x73  0x73  "OPT.2"
  6683:   };
  6684: 
  6685:   //  xo→eo
  6686:   public static final int[] KBD_XO_TO_EO = {
  6687:     //eo     xo   x68kCode
  6688:      56,  //  0  0x01  0x01  "ESC"
  6689:       0,  //  1  0x02  0x02  "1!ぬ "
  6690:       1,  //  2  0x03  0x03  "2"ふ "
  6691:       2,  //  3  0x04  0x04  "3#あぁ"
  6692:       3,  //  4  0x05  0x05  "4$うぅ"
  6693:       4,  //  5  0x06  0x06  "5%えぇ"
  6694:       5,  //  6  0x07  0x07  "6&おぉ"
  6695:       6,  //  7  0x08  0x43  "7'やゃ"
  6696:       7,  //  8  0x09  0x44  "8(ゆゅ"
  6697:       8,  //  9  0x0a  0x45  "9)よょ"
  6698:       9,  // 10  0x0b  0x40  "0 わを"
  6699:      10,  // 11  0x0c  0x41  "-=ほ "
  6700:      11,  // 12  0x0d  0x0d  "^~へ "
  6701:      12,  // 13  0x0e  0x0e  "¥|ー "
  6702:      57,  // 14  0x0f  0x0f  "BS"
  6703:      58,  // 15  0x10  0x10  "TAB"
  6704:      13,  // 16  0x11  0x11  "Q た "
  6705:      14,  // 17  0x12  0x12  "W て "
  6706:      15,  // 18  0x13  0x13  "E いぃ"
  6707:      16,  // 19  0x14  0x14  "R す "
  6708:      17,  // 20  0x15  0x15  "T か "
  6709:      18,  // 21  0x16  0x16  "Y ん "
  6710:      19,  // 22  0x17  0x47  "U な "
  6711:      20,  // 23  0x18  0x48  "I に "
  6712:      21,  // 24  0x19  0x49  "O ら "
  6713:      22,  // 25  0x1a  0x42  "P せ "
  6714:      23,  // 26  0x1b  0x1b  "@`゛ "
  6715:      24,  // 27  0x1c  0x1c  "[{゜「"
  6716:      59,  // 28  0x1d  0x1d  "リターン"
  6717:      25,  // 29  0x1e  0x1e  "A ち "
  6718:      26,  // 30  0x1f  0x1f  "S と "
  6719:      27,  // 31  0x20  0x20  "D し "
  6720:      28,  // 32  0x21  0x21  "F は "
  6721:      29,  // 33  0x22  0x22  "G き "
  6722:      30,  // 34  0x23  0x23  "H く "
  6723:      31,  // 35  0x24  0x4b  "J ま "
  6724:      32,  // 36  0x25  0x4c  "K の "
  6725:      33,  // 37  0x26  0x4d  "L り "
  6726:      34,  // 38  0x27  0x46  ";+れ "
  6727:      35,  // 39  0x28  0x28  ":*け "
  6728:      36,  // 40  0x29  0x29  "]}む」"
  6729:      37,  // 41  0x2a  0x2a  "Z つっ"
  6730:      38,  // 42  0x2b  0x2b  "X さ "
  6731:      39,  // 43  0x2c  0x2c  "C そ "
  6732:      40,  // 44  0x2d  0x2d  "V ひ "
  6733:      41,  // 45  0x2e  0x2e  "B こ "
  6734:      42,  // 46  0x2f  0x2f  "N み "
  6735:      43,  // 47  0x30  0x4f  "M も "
  6736:      44,  // 48  0x31  0x50  ",<ね、"
  6737:      45,  // 49  0x32  0x51  ".>る。"
  6738:      46,  // 50  0x33  0x4a  "/?め・"
  6739:      47,  // 51  0x34  0x4e  " _ろ□"
  6740:      60,  // 52  0x35  0x35  "スペース"
  6741:      61,  // 53  0x36  0x36  "HOME"
  6742:      62,  // 54  0x37  0x37  "DEL"
  6743:      63,  // 55  0x38  0x38  "ROLLUP"
  6744:      64,  // 56  0x39  0x39  "ROLLDOWN"
  6745:      65,  // 57  0x3a  0x3a  "UNDO"
  6746:      66,  // 58  0x3b  0x3b  "←"
  6747:      67,  // 59  0x3c  0x3c  "↑"
  6748:      68,  // 60  0x3d  0x3d  "→"
  6749:      69,  // 61  0x3e  0x3e  "↓"
  6750:      70,  // 62  0x3f  0x3f  "CLR"
  6751:      71,  // 63  0x40  0x40  "/"
  6752:      72,  // 64  0x41  0x41  "*"
  6753:      73,  // 65  0x42  0x42  "-"
  6754:      74,  // 66  0x43  0x43  "7"
  6755:      75,  // 67  0x44  0x44  "8"
  6756:      76,  // 68  0x45  0x45  "9"
  6757:      77,  // 69  0x46  0x46  "+"
  6758:      78,  // 70  0x47  0x47  "4"
  6759:      79,  // 71  0x48  0x48  "5"
  6760:      80,  // 72  0x49  0x49  "6"
  6761:      81,  // 73  0x4a  0x4a  "="
  6762:      82,  // 74  0x4b  0x4b  "1"
  6763:      83,  // 75  0x4c  0x4c  "2"
  6764:      84,  // 76  0x4d  0x4d  "3"
  6765:      85,  // 77  0x4e  0x4e  "ENTER"
  6766:      86,  // 78  0x4f  0x4f  "0"
  6767:      87,  // 79  0x50  0x50  ","
  6768:      88,  // 80  0x51  0x51  "."
  6769:      89,  // 81  0x52  0x52  "記号入力"
  6770:      90,  // 82  0x53  0x53  "登録"
  6771:      91,  // 83  0x54  0x54  "HELP"
  6772:      92,  // 84  0x55  0x55  "XF1"
  6773:      93,  // 85  0x56  0x56  "XF2"
  6774:      94,  // 86  0x57  0x57  "XF3"
  6775:      95,  // 87  0x58  0x58  "XF4"
  6776:      96,  // 88  0x59  0x59  "XF5"
  6777:      48,  // 89  0x5a  0x5a  "かな"
  6778:      49,  // 90  0x5b  0x5b  "ローマ字"
  6779:      50,  // 91  0x5c  0x5c  "コード入力"
  6780:      51,  // 92  0x5d  0x5d  "CAPS"
  6781:      52,  // 93  0x5e  0x5e  "INS"
  6782:      53,  // 94  0x5f  0x5f  "ひらがな"
  6783:      54,  // 95  0x60  0x60  "全角"
  6784:      97,  // 96  0x61  0x61  "BREAK"
  6785:      98,  // 97  0x62  0x62  "COPY"
  6786:      99,  // 98  0x63  0x63  "F1"
  6787:     100,  // 99  0x64  0x64  "F2"
  6788:     101,  //100  0x65  0x65  "F3"
  6789:     102,  //101  0x66  0x66  "F4"
  6790:     103,  //102  0x67  0x67  "F5"
  6791:     104,  //103  0x68  0x68  "F6"
  6792:     105,  //104  0x69  0x69  "F7"
  6793:     106,  //105  0x6a  0x6a  "F8"
  6794:     107,  //106  0x6b  0x6b  "F9"
  6795:     108,  //107  0x6c  0x6c  "F10"
  6796:     109,  //108  0x70  0x70  "SHIFT"
  6797:     110,  //109  0x71  0x71  "CTRL"
  6798:     111,  //110  0x72  0x72  "OPT.1"
  6799:     112,  //111  0x73  0x73  "OPT.2"
  6800:      55,  //112  0x74  0x74  "NUM"
  6801:   };
  6802: 
  6803:   public static JFrame kbdFrame;
  6804:   public static KeyMapEditor kbdEditor;
  6805: 
  6806:   //kbdInit ()
  6807:   //  キーボードを初期化する
  6808:   public static void kbdInit () {
  6809: 
  6810:     //キーマップ
  6811:     kbdUSLayoutOn = Settings.sgsGetOnOff ("keymapus");
  6812:     //  Zキーボード以外のデフォルトのキーマップ
  6813:     kbdDefaultMapNonZ = (XEiJ.prgIsLinux ? KBD_DEFAULT_MAP_LINUX :
  6814:                          XEiJ.prgIsMac ?
  6815:                          kbdUSLayoutOn ? KBD_DEFAULT_MAP_MAC_US : KBD_DEFAULT_MAP_MAC :
  6816:                          kbdUSLayoutOn ? KBD_DEFAULT_MAP_WIN_US : KBD_DEFAULT_MAP_WIN);
  6817:     //  Zキーボード以外のキーマップ
  6818:     kbdCurrentMapNonZ = new int[KBD_DEFAULT_MAP_WIN.length];
  6819:     {
  6820:       int[] map = Settings.sgsGetIntArray ("keymap");  //保存されていたZキーボード以外のキーマップ
  6821:       if (map.length == 0 || map[0] != -3) {  //保存されていたZキーボード以外のキーマップがないかバージョンが古いとき
  6822:         System.arraycopy (kbdDefaultMapNonZ, 0,  //from
  6823:                           kbdCurrentMapNonZ, 0,  //to
  6824:                           KBD_DEFAULT_MAP_WIN.length);  //length
  6825:       } else {  //保存されていたZキーボード以外のキーマップがあるとき
  6826:         Arrays.fill (kbdCurrentMapNonZ, 0);  //array,value
  6827:         System.arraycopy (map, 1,  //from
  6828:                           kbdCurrentMapNonZ, 0,  //to
  6829:                           Math.min (map.length - 1, KBD_DEFAULT_MAP_WIN.length));  //length
  6830:       }
  6831:     }
  6832:     //  現在のキーマップ
  6833:     kbdCurrentMap = new int[KBD_DEFAULT_MAP_WIN.length];
  6834:     System.arraycopy (kbdCurrentMapNonZ, 0,  //from
  6835:                       kbdCurrentMap, 0,  //to
  6836:                       KBD_DEFAULT_MAP_WIN.length);  //length
  6837: 
  6838:     //キーボードの種類
  6839:     String paramKeyboard = Settings.sgsGetString ("keyboard");
  6840:     switch (paramKeyboard.toLowerCase ()) {
  6841:     case "":
  6842:     case "none":
  6843:       kbdOn = false;
  6844:       kbdType = KBD_STANDARD_TYPE;
  6845:       break;
  6846:     case "standard":
  6847:       kbdOn = true;
  6848:       kbdType = KBD_STANDARD_TYPE;
  6849:       break;
  6850:     case "compact":
  6851:       kbdOn = true;
  6852:       kbdType = KBD_COMPACT_TYPE;
  6853:       break;
  6854:     default:
  6855:       kbdOn = true;
  6856:       kbdType = KBD_STANDARD_TYPE;
  6857:     }
  6858: 
  6859:     //F11キー
  6860:     //kbdF11Mode = KBD_F11_FULLSCREEN;
  6861:     switch (Settings.sgsGetString ("f11key").toLowerCase ()) {
  6862:     case "fullscreen":
  6863:       kbdF11Mode = KBD_F11_FULLSCREEN;
  6864:       break;
  6865:     case "screenshot":
  6866:       kbdF11Mode = KBD_F11_SCREENSHOT;
  6867:       break;
  6868:     case "gifanimation":
  6869:       kbdF11Mode = KBD_F11_GIFANIMATION;
  6870:       break;
  6871:     case "stopandstart":
  6872:       kbdF11Mode = KBD_F11_STOPANDSTART;
  6873:       break;
  6874:     case "donothing":
  6875:       kbdF11Mode = KBD_F11_DO_NOTHING;
  6876:       break;
  6877:     default:
  6878:       kbdF11Mode = KBD_F11_FULLSCREEN;
  6879:     }
  6880: 
  6881:     //Zキーボード
  6882:     if (KBD_ZKEY_ON) {
  6883:       kbdZKeyOnRequest = XEiJ.prgWindllLoaded && Settings.sgsGetOnOff ("zkeyboard");
  6884:       kbdZKeyOn = false;
  6885:       kbdZKeyStatus = 0;
  6886:       kbdZKeyPort = null;
  6887:       kbdZKeyDebugFlag = false;
  6888:       //  I/Oポート
  6889:       kbdZKeyIOData = 0L;
  6890:       kbdZKeyIOProgrammable = false;
  6891:       //  入力
  6892:       kbdXF4Locked = null;
  6893:       kbdSavedNumLock = false;
  6894:       kbdIgnoreNumLock = false;
  6895:       //  デモ
  6896:       demoInit ();
  6897:       //  Zキーボードのデフォルトのキーマップ
  6898:       kbdDefaultMapZ = KBD_DEFAULT_MAP_ZKEY;
  6899:       //  Zキーボードのキーマップ
  6900:       kbdCurrentMapZ = new int[KBD_DEFAULT_MAP_WIN.length];
  6901:       {
  6902:         int[] map = Settings.sgsGetIntArray ("zkeymap");  //保存されていたZキーボードのキーマップ
  6903:         if (map.length == 0 || map[0] != -3) {  //保存されていたZキーボードのキーマップがないかバージョンが古いとき
  6904:           System.arraycopy (kbdDefaultMapZ, 0,  //from
  6905:                             kbdCurrentMapZ, 0,  //to
  6906:                             KBD_DEFAULT_MAP_WIN.length);  //length
  6907:         } else {  //保存されていたZキーボードのキーマップがあるとき
  6908:           Arrays.fill (kbdCurrentMapZ, 0);  //array,value
  6909:           System.arraycopy (map, 1,  //from
  6910:                             kbdCurrentMapZ, 0,  //to
  6911:                             Math.min (map.length - 1, KBD_DEFAULT_MAP_WIN.length));  //length
  6912:         }
  6913:       }
  6914:       //メニュー
  6915:       ActionListener listener = new ActionListener () {
  6916:         @Override public void actionPerformed (ActionEvent ae) {
  6917:           Object source = ae.getSource ();
  6918:           String command = ae.getActionCommand ();
  6919:           switch (command) {
  6920:           case "Toggle fullscreen":  //全画面表示
  6921:             kbdF11Mode = KBD_F11_FULLSCREEN;
  6922:             break;
  6923:           case "Take a screenshot":  //スクリーンショット
  6924:             kbdF11Mode = KBD_F11_SCREENSHOT;
  6925:             break;
  6926:           case "Record GIF animation":  //GIF アニメーション録画
  6927:             kbdF11Mode = KBD_F11_GIFANIMATION;
  6928:             break;
  6929:           case "Stop and start":  //停止と再開
  6930:             kbdF11Mode = KBD_F11_STOPANDSTART;
  6931:             break;
  6932:           case "Do nothing":  //何もしない
  6933:             kbdF11Mode = KBD_F11_DO_NOTHING;
  6934:             break;
  6935:           case "Connect":  //接続
  6936:             if (KBD_ZKEY_ON) {
  6937:               kbdZKeyOnRequest = ((JCheckBoxMenuItem) source).isSelected ();
  6938:               if (kbdZKeyOnRequest) {
  6939:                 kbdZKeyOpen ();
  6940:               } else {
  6941:                 XEiJ.tmrTimer.schedule (new TimerTask () {
  6942:                   @Override public void run () {
  6943:                     kbdZKeyClose ();
  6944:                   }
  6945:                 }, 0L);
  6946:               }
  6947:             }
  6948:             break;
  6949:           case "LED operation chedk":  //LED の動作確認
  6950:             if (KBD_ZKEY_ON) {
  6951:               if (((JCheckBoxMenuItem) source).isSelected ()) {
  6952:                 demoStart ();
  6953:               } else {
  6954:                 demoEnd ();
  6955:               }
  6956:             }
  6957:             break;
  6958:           case "Debug flag":  //デバッグフラグ
  6959:             if (KBD_ZKEY_ON) {
  6960:               kbdZKeyDebugFlag = ((JCheckBoxMenuItem) source).isSelected ();
  6961:               if (kbdZKeyPort != null) {
  6962:                 kbdZKeyPort.setDebugFlag (kbdZKeyDebugFlag);
  6963:               }
  6964:             }
  6965:             break;
  6966:           }
  6967:         }
  6968:       };
  6969:       ButtonGroup f11Group = new ButtonGroup ();
  6970:       kbdF11KeyMenu = Multilingual.mlnText (
  6971:         ComponentFactory.createMenu (
  6972:           "F11 key",
  6973:           Multilingual.mlnText (
  6974:             ComponentFactory.createRadioButtonMenuItem (f11Group, kbdF11Mode == KBD_F11_FULLSCREEN, "Toggle fullscreen", listener),
  6975:             "ja", "全画面表示"),
  6976:           Multilingual.mlnText (
  6977:             ComponentFactory.createRadioButtonMenuItem (f11Group, kbdF11Mode == KBD_F11_SCREENSHOT, "Take a screenshot", listener),
  6978:             "ja", "スクリーンショット"),
  6979:           Multilingual.mlnText (
  6980:             ComponentFactory.createRadioButtonMenuItem (f11Group, kbdF11Mode == KBD_F11_GIFANIMATION, "Record GIF animation", listener),
  6981:             "ja", "GIF アニメーション録画"),
  6982:           Multilingual.mlnText (
  6983:             ComponentFactory.createRadioButtonMenuItem (f11Group, kbdF11Mode == KBD_F11_STOPANDSTART, "Stop and start", listener),
  6984:             "ja", "停止と再開"),
  6985:           Multilingual.mlnText (
  6986:             ComponentFactory.createRadioButtonMenuItem (f11Group, kbdF11Mode == KBD_F11_DO_NOTHING, "Do nothing", listener),
  6987:             "ja", "何もしない")
  6988:           ),
  6989:         "ja", "F11 キー");
  6990:       kbdZKeyMenu = !KBD_ZKEY_ON ? null : Multilingual.mlnText (
  6991:         ComponentFactory.createMenu (
  6992:           "Z keyboard",
  6993:           kbdZKeyConnectCheckBox = 
  6994:           Multilingual.mlnText (
  6995:             ComponentFactory.createCheckBoxMenuItem (kbdZKeyOnRequest, "Connect", listener),
  6996:             "ja", "接続"),
  6997:           kbdZKeyDemoCheckBox =
  6998:           ComponentFactory.setEnabled (
  6999:             Multilingual.mlnText (
  7000:               ComponentFactory.createCheckBoxMenuItem (demoThread != null, "LED operation chedk", listener),
  7001:               "ja", "LED の動作確認"),
  7002:             kbdZKeyOn),
  7003:           ComponentFactory.createHorizontalSeparator (),
  7004:           Multilingual.mlnText (
  7005:             ComponentFactory.createCheckBoxMenuItem (kbdZKeyDebugFlag, "Debug flag", listener),
  7006:             "ja", "デバッグフラグ")
  7007:           ),
  7008:         "ja", "Z キーボード");
  7009:     }
  7010: 
  7011:     //配列を初期化する
  7012:     for (int i = 0; i < KBD_VAR_KEYS; i++) {
  7013:       int t = KBD_CAPS_BASE[i];
  7014:       KBD_CAPS_CHR[i] = (byte) t;
  7015:       KBD_NORMAL_CHR[i] = (byte) (t >= 'A' && t <= 'Z' ? t ^ 0x20 : t);
  7016:       KBD_CODE_CHR[i] = (byte) (t >= '0' && t <= '9' || t >= 'A' && t <= 'F' ? t : 0);
  7017:       t = KBD_CAPS_SHIFT_BASE[i];
  7018:       KBD_CAPS_SHIFT_CHR[i] = (byte) t;
  7019:       KBD_SHIFT_CHR[i] = (byte) (t >= 'a' && t <= 'z' ? t ^ 0x20 : t);
  7020:       KBD_CTRL_CHR[i] = (byte) (t < 0x20 ? t : t >= 0x40 ? t & 0x1f : 0);
  7021:       t = KBD_KANA_BASE[i];
  7022:       KBD_KANA_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
  7023:       t = KBD_KANA_SHIFT_BASE[i];
  7024:       KBD_KANA_SHIFT_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
  7025:       t = KBD_KANA_AIU_BASE[i];
  7026:       KBD_KANA_AIU_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
  7027:       t = KBD_KANA_AIU_SHIFT_BASE[i];
  7028:       KBD_KANA_AIU_SHIFT_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
  7029:       t = KBD_ROMA_BASE[i];
  7030:       KBD_ROMA_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
  7031:       t = KBD_ROMA_SHIFT_BASE[i];
  7032:       KBD_ROMA_SHIFT_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
  7033:       t = KBD_NUM_BASE[i];
  7034:       if (t != ' ') {
  7035:         KBD_NUM_CAPS_CHR[i] =
  7036:           KBD_NUM_CHR[i] =
  7037:             KBD_NUM_CODE_CHR[i] =
  7038:               KBD_NUM_CAPS_SHIFT_CHR[i] =
  7039:                 KBD_NUM_SHIFT_CHR[i] =
  7040:                   KBD_NUM_CTRL_CHR[i] =
  7041:                     KBD_NUM_KANA_CHR[i] =
  7042:                       KBD_NUM_KANA_SHIFT_CHR[i] =
  7043:                         KBD_NUM_KANA_AIU_CHR[i] =
  7044:                           KBD_NUM_KANA_AIU_SHIFT_CHR[i] =
  7045:                             KBD_NUM_ROMA_CHR[i] =
  7046:                               KBD_NUM_ROMA_SHIFT_CHR[i] = (byte) t;
  7047:       } else {
  7048:         KBD_NUM_CAPS_CHR[i] = KBD_CAPS_CHR[i];
  7049:         KBD_NUM_CHR[i] = KBD_NORMAL_CHR[i];
  7050:         KBD_NUM_CODE_CHR[i] = KBD_CODE_CHR[i];
  7051:         KBD_NUM_CAPS_SHIFT_CHR[i] = KBD_CAPS_SHIFT_CHR[i];
  7052:         KBD_NUM_SHIFT_CHR[i] = KBD_SHIFT_CHR[i];
  7053:         KBD_NUM_CTRL_CHR[i] = KBD_CTRL_CHR[i];
  7054:         KBD_NUM_KANA_CHR[i] = KBD_KANA_CHR[i];
  7055:         KBD_NUM_KANA_SHIFT_CHR[i] = KBD_KANA_SHIFT_CHR[i];
  7056:         KBD_NUM_KANA_AIU_CHR[i] = KBD_KANA_AIU_CHR[i];
  7057:         KBD_NUM_KANA_AIU_SHIFT_CHR[i] = KBD_KANA_AIU_SHIFT_CHR[i];
  7058:         KBD_NUM_ROMA_CHR[i] = KBD_ROMA_CHR[i];
  7059:         KBD_NUM_ROMA_SHIFT_CHR[i] = KBD_ROMA_SHIFT_CHR[i];
  7060:       }
  7061:     }
  7062: 
  7063:     //色を決める
  7064:     //  デフォルトのbrightnessは降順なので昇順のとき色を入れ替えてキーが凹まないようにする
  7065:     if (LnF.lnfHSB[6] <= LnF.lnfHSB[8]) {  //B0,B14
  7066:       kbdLetterRGB      = LnF.lnfRGB[KBD_LETTER_COLOR];
  7067:       kbdTopLeftRGB     = LnF.lnfRGB[KBD_TOP_LEFT_COLOR];
  7068:       kbdTopRGB         = LnF.lnfRGB[KBD_TOP_COLOR];
  7069:       kbdLeftRGB        = LnF.lnfRGB[KBD_LEFT_COLOR];
  7070:       kbdPointedRGB     = LnF.lnfRGB[KBD_POINTED_COLOR];
  7071:       kbdTopRightRGB    = LnF.lnfRGB[KBD_TOP_RIGHT_COLOR];
  7072:       kbdBottomLeftRGB  = LnF.lnfRGB[KBD_BOTTOM_LEFT_COLOR];
  7073:       kbdKeytopRGB      = LnF.lnfRGB[KBD_KEYTOP_COLOR];
  7074:       kbdRightRGB       = LnF.lnfRGB[KBD_RIGHT_COLOR];
  7075:       kbdBottomRGB      = LnF.lnfRGB[KBD_BOTTOM_COLOR];
  7076:       kbdBottomRightRGB = LnF.lnfRGB[KBD_BOTTOM_RIGHT_COLOR];
  7077:       kbdShadowRGB      = LnF.lnfRGB[KBD_SHADOW_COLOR];
  7078:       kbdBackgroundRGB  = LnF.lnfRGB[KBD_BACKGROUND_COLOR];
  7079:       kbdHoleRGB        = LnF.lnfRGB[KBD_HOLE_COLOR];
  7080:     } else {
  7081:       kbdLetterRGB      = LnF.lnfRGB[14 - KBD_LETTER_COLOR];
  7082:       kbdTopLeftRGB     = LnF.lnfRGB[14 - KBD_TOP_LEFT_COLOR];
  7083:       kbdTopRGB         = LnF.lnfRGB[14 - KBD_TOP_COLOR];
  7084:       kbdLeftRGB        = LnF.lnfRGB[14 - KBD_LEFT_COLOR];
  7085:       kbdPointedRGB     = LnF.lnfRGB[14 - KBD_POINTED_COLOR];
  7086:       kbdTopRightRGB    = LnF.lnfRGB[14 - KBD_TOP_RIGHT_COLOR];
  7087:       kbdBottomLeftRGB  = LnF.lnfRGB[14 - KBD_BOTTOM_LEFT_COLOR];
  7088:       kbdKeytopRGB      = LnF.lnfRGB[14 - KBD_KEYTOP_COLOR];
  7089:       kbdRightRGB       = LnF.lnfRGB[14 - KBD_RIGHT_COLOR];
  7090:       kbdBottomRGB      = LnF.lnfRGB[14 - KBD_BOTTOM_COLOR];
  7091:       kbdBottomRightRGB = LnF.lnfRGB[14 - KBD_BOTTOM_RIGHT_COLOR];
  7092:       kbdShadowRGB      = LnF.lnfRGB[14 - KBD_SHADOW_COLOR];
  7093:       kbdBackgroundRGB  = LnF.lnfRGB[14 - KBD_BACKGROUND_COLOR];
  7094:       kbdHoleRGB        = LnF.lnfRGB[14 - KBD_HOLE_COLOR];
  7095:     }
  7096: 
  7097:     //可変キーを描く
  7098:     //kbdVarStatBitmap = new int[256][][];
  7099:     for (int i = 0; i < 256; i++) {
  7100:       int[] letter = KBD_VAR_LETTER[i];
  7101:       if (letter == null) {
  7102:         kbdVarStatBitmap[i] = null;
  7103:         continue;
  7104:       }
  7105:       int[][] statBitmap = kbdVarStatBitmap[i] = new int[4][];
  7106:       for (int stat = 0; stat < 4; stat++) {
  7107:         if (KBD_USE_ROM_FONT) {  //ROMフォントを使う
  7108:           kbdDrawKey2 (statBitmap[stat] = new int[KBD_KEY_WIDTH * KBD_KEY_HEIGHT],
  7109:                        KBD_KEY_WIDTH, 0, 0, KBD_KEY_WIDTH, KBD_KEY_HEIGHT, 0, 0, null, i, stat);
  7110:         } else {
  7111:           kbdDrawKey (statBitmap[stat] = new int[KBD_KEY_WIDTH * KBD_KEY_HEIGHT],
  7112:                       KBD_KEY_WIDTH, 0, 0, KBD_KEY_WIDTH, KBD_KEY_HEIGHT, 0, 0, null, letter, stat);
  7113:         }
  7114:       }
  7115:     }
  7116: 
  7117:     //LEDキーを描く
  7118:     //kbdLedStatBitmap = new int[KBD_LED_KEYS][][];
  7119:     for (int i = 0; i < KBD_LED_KEYS; i++) {
  7120:       int[] letter = KBD_LED_LETTER[i];
  7121:       if (letter == null) {
  7122:         kbdLedStatBitmap[i] = null;
  7123:         continue;
  7124:       }
  7125:       int[][] statBitmap = kbdLedStatBitmap[i] = new int[32][];
  7126:       for (int stat = 0; stat < 32; stat++) {
  7127:         kbdDrawKey (statBitmap[stat] = new int[KBD_KEY_WIDTH * KBD_KEY_HEIGHT],
  7128:                     KBD_KEY_WIDTH, 0, 0, KBD_KEY_WIDTH, KBD_KEY_HEIGHT, 0, 0, KBD_LED_COLOR[i][stat >> 2], letter, stat & 3);
  7129:       }
  7130:     }
  7131: 
  7132:     //種類毎に別々に用意するもの
  7133:     //kbdDataTypeImage = new BufferedImage[KBD_TYPES];
  7134:     //kbdDataTypeWidth = new int[KBD_TYPES];
  7135:     //kbdDataTypeHeight = new int[KBD_TYPES];
  7136:     //kbdDataTypeBitmap = new int[KBD_TYPES][];
  7137:     //kbdDataTypeIndexMap = new byte[KBD_TYPES][];
  7138:     //kbdDataTypeStatFixBitmap = new int[KBD_TYPES][][];
  7139:     //kbdDataTypeIndexRect = new int[KBD_TYPES][][];
  7140:     //kbdDataTypeIndexCharacterStat = new int[KBD_TYPES][];
  7141:     for (int type = 0; type < KBD_TYPES; type++) {
  7142:       int cols = KBD_TYPE_COLS[type];
  7143:       int rows = KBD_TYPE_ROWS[type];
  7144:       int width = kbdDataTypeWidth[type] = KBD_PADDING_LEFT + KBD_COL_WIDTH * cols + KBD_PADDING_RIGHT;
  7145:       int height = kbdDataTypeHeight[type] = KBD_PADDING_TOP + KBD_ROW_HEIGHT * rows + KBD_PADDING_BOTTOM;
  7146:       BufferedImage image = kbdDataTypeImage[type] = new BufferedImage (width, height, BufferedImage.TYPE_INT_RGB);
  7147:       kbdDataTypeBitmap[type] = ((DataBufferInt) image.getRaster ().getDataBuffer ()).getData ();
  7148:       Arrays.fill (kbdDataTypeBitmap[type], kbdBackgroundRGB);
  7149:       byte[] indexMap = kbdDataTypeIndexMap[type] = new byte[width * height];
  7150:       Arrays.fill (kbdDataTypeIndexMap[type], (byte) -1);
  7151:       kbdDataTypeStatFixBitmap[type] = new int[4][];
  7152:       int[][] indexRect = kbdDataTypeIndexRect[type] = new int[KBD_ALL_KEYS][];
  7153:       int[] indexCharacterStat = kbdDataTypeIndexCharacterStat[type] = new int[KBD_ALL_KEYS];
  7154:       Arrays.fill (indexCharacterStat, -1);  //初回はすべてのキーを描画する
  7155: 
  7156:       //可変キーとLEDキーのレクタングルを作る
  7157:       int[][] ledBox = KBD_TYPE_LED_BOX[type];
  7158:       for (int i = 0; i < KBD_VAR_KEYS + KBD_LED_KEYS; i++) {
  7159:         int[] box = i < KBD_VAR_KEYS ? KBD_VAR_BOX[i] : ledBox[i - KBD_VAR_KEYS];
  7160:         if (box == null) {  //欠番。Standard KeyboardのNUMキー
  7161:           indexRect[i] = new int[0];
  7162:           continue;
  7163:         }
  7164:         int x = KBD_PADDING_LEFT + KBD_COL_WIDTH * box[0];
  7165:         int y = KBD_PADDING_TOP + KBD_ROW_HEIGHT * box[1];
  7166:         int w = KBD_COL_WIDTH * box[2] - 1;
  7167:         int h = KBD_ROW_HEIGHT * box[3] - 1;
  7168:         indexRect[i] = box == null ? new int[0] : new int[] { x, y, w, h };
  7169:         int tx = x + KBD_TOUCHABLE_AREA;
  7170:         int ty = y + KBD_TOUCHABLE_AREA;
  7171:         int tw = w - KBD_TOUCHABLE_AREA * 2;
  7172:         int th = h - KBD_TOUCHABLE_AREA * 2;
  7173:         int p = tx + width * ty;
  7174:         for (int v = 0; v < th; v++) {
  7175:           for (int u = 0; u < tw; u++) {
  7176:             indexMap[p + u] = (byte) i;
  7177:           }
  7178:           p += width;
  7179:         }
  7180:       }
  7181: 
  7182:       //固定キーを描く
  7183:       for (int stat = 0; stat < 4; stat++) {
  7184:         int[] bitmap = kbdDataTypeStatFixBitmap[type][stat] = new int[width * height];
  7185:         Arrays.fill (bitmap, kbdBackgroundRGB);
  7186:       }
  7187:       int[][] fixBox = KBD_TYPE_FIX_BOX[type];
  7188:       int[] fixStyle = KBD_TYPE_FIX_STYLE[type];
  7189:       for (int i = KBD_VAR_KEYS + KBD_LED_KEYS; i < KBD_ALL_KEYS; i++) {
  7190:         int[] box = fixBox[i - (KBD_VAR_KEYS + KBD_LED_KEYS)];
  7191:         if (box == null) {  //欠番。Compact Keyboardのテンキー
  7192:           indexRect[i] = new int[0];
  7193:           continue;
  7194:         }
  7195:         int col = box[0];  //列
  7196:         int row = box[1];  //行
  7197:         int wide = box[2];  //幅
  7198:         int tall = box[3];  //高さ
  7199:         int x = KBD_PADDING_LEFT + KBD_COL_WIDTH * col;
  7200:         int y = KBD_PADDING_TOP + KBD_ROW_HEIGHT * row;
  7201:         int w = KBD_COL_WIDTH * wide - 1;
  7202:         int h = KBD_ROW_HEIGHT * tall - 1;
  7203:         int style = fixStyle[i - (KBD_VAR_KEYS + KBD_LED_KEYS)];
  7204:         if (style == KBD_RETURN_STYLE) {  //RETURNキー
  7205:           //レクタングルの左下を1列x4行削る。キートップの左右を1列ずつ削る
  7206:           int wl = KBD_COL_WIDTH;  //左側
  7207:           int hb = KBD_ROW_HEIGHT * 4;  //下側
  7208:           int wr = w - wl;  //右側
  7209:           int ht = h - hb;  //上側
  7210:           indexRect[i] = new int[] { x, y, w, ht, x + wl, y + ht, wr, hb };
  7211:           int tx = x + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
  7212:           int ty = y + KBD_TOUCHABLE_AREA;
  7213:           int tw = w - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH) * 2;
  7214:           int th = ht - KBD_TOUCHABLE_AREA * 2;
  7215:           int p = tx + width * ty;
  7216:           for (int v = 0; v < th; v++) {
  7217:             for (int u = 0; u < tw; u++) {
  7218:               indexMap[p + u] = (byte) i;
  7219:             }
  7220:             p += width;
  7221:           }
  7222:           tx = x + wl + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
  7223:           ty = y + ht - KBD_TOUCHABLE_AREA;
  7224:           tw = wr - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH) * 2;
  7225:           th = hb;
  7226:           p = tx + width * ty;
  7227:           for (int v = 0; v < th; v++) {
  7228:             for (int u = 0; u < tw; u++) {
  7229:               indexMap[p + u] = (byte) i;
  7230:             }
  7231:             p += width;
  7232:           }
  7233:           //1段目
  7234:           for (int stat = 0; stat < 2; stat++) {  //!pressedのみ
  7235:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  7236:             kbdDrawLine (bitmap, x + width * y,
  7237:                          1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,  //→→
  7238:                          width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,  //↓↓
  7239:                          -1, 1, kbdBottomRightRGB, -1, wr - 2, kbdBottomRGB,  //←
  7240:                          -width, 1, kbdBottomLeftRGB, -width, hb - 1, kbdLeftRGB,  //↑
  7241:                          -1, 1, kbdBottomLeftRGB,  -1, wl - 1, kbdBottomRGB,  //←
  7242:                          -width, 1, kbdBottomLeftRGB, -width, ht - 2, kbdLeftRGB);  //↑
  7243:           }
  7244:           for (int stat = 2; stat < 4; stat++) {  //pressedのみ
  7245:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  7246:             kbdDrawLine (bitmap, x + width * y,
  7247:                          1, 1, kbdHoleRGB, 1, w - 2, kbdHoleRGB,  //→→
  7248:                          width, 1, kbdHoleRGB, width, h - 2, kbdHoleRGB,  //↓↓
  7249:                          -1, 1, kbdHoleRGB, -1, wr - 2, kbdHoleRGB,  //←
  7250:                          -width, 1, kbdHoleRGB, -width, hb - 1, kbdHoleRGB,  //↑
  7251:                          -1, 1, kbdHoleRGB,  -1, wl - 1, kbdHoleRGB,  //←
  7252:                          -width, 1, kbdHoleRGB, -width, ht - 2, kbdHoleRGB);  //↑
  7253:           }
  7254:           int u = KBD_COL_WIDTH;
  7255:           x += 1 + u;
  7256:           y += 1;
  7257:           w -= 2 + u * 2;
  7258:           h -= 2;
  7259:           wr -= 2 + u * 2;
  7260:           ht -= 2;
  7261:           //島
  7262:           for (int stat = 0; stat < 4; stat++) {
  7263:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  7264:             kbdFillRect (bitmap, width, x - u, y, u, ht, kbdKeytopRGB);  //左側の上半分
  7265:             kbdFillRect (bitmap, width, x + wl - u, y + ht, u, h - ht, kbdKeytopRGB);  //左側の下半分
  7266:             kbdFillRect (bitmap, width, x + w, y, u, h, kbdKeytopRGB);  //右側
  7267:           }
  7268:           //2段目
  7269:           int lx = x;
  7270:           int ly = y;
  7271:           int lw = w;
  7272:           int lh = h;
  7273:           for (int stat = 0; stat < 4; stat++) {
  7274:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  7275:             kbdDrawLine (bitmap, x + width * y,
  7276:                          1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,  //→→
  7277:                          width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,  //↓↓
  7278:                          -1, 1, kbdBottomRightRGB, -1, wr - 2, kbdBottomRGB,  //←
  7279:                          -width, 1, kbdBottomLeftRGB, -width, hb - 1, kbdLeftRGB,  //↑
  7280:                          -1, 1, kbdBottomLeftRGB, -1, wl - 1, kbdBottomRGB,  //←
  7281:                          -width, 1, kbdBottomLeftRGB, -width, ht - 2, kbdLeftRGB);  //↑
  7282:           }
  7283:           x++;
  7284:           y++;
  7285:           w -= 2;
  7286:           h -= 2;
  7287:           wr -= 2;
  7288:           ht -= 2;
  7289:           //3段目
  7290:           for (int stat = 0; stat < 4; stat++) {
  7291:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  7292:             kbdDrawLine (bitmap, x + width * y,
  7293:                          1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,  //→→
  7294:                          width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,  //↓↓
  7295:                          -1, 1, kbdBottomRightRGB, -1, wr - 2, kbdBottomRGB,  //←
  7296:                          -width, 1, kbdBottomLeftRGB, -width, hb - 1, kbdLeftRGB,  //↑
  7297:                          -1, 1, kbdBottomLeftRGB, -1, wl - 1, kbdBottomRGB,  //←
  7298:                          -width, 1, kbdBottomLeftRGB, -width, ht - 2, kbdLeftRGB);  //↑
  7299:           }
  7300:           x++;
  7301:           y++;
  7302:           w -= 2;
  7303:           h -= 2;
  7304:           wr -= 2;
  7305:           ht -= 2;
  7306:           //キートップと文字
  7307:           int[] letter = KBD_FIX_LETTER[KBD_RETURN_INDEX - (KBD_VAR_KEYS + KBD_LED_KEYS)];
  7308:           for (int stat = 0; stat < 4; stat++) {
  7309:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  7310:             boolean pointed = (stat & KBD_POINTED_MASK) != 0;
  7311:             int color = pointed ? kbdPointedRGB : kbdKeytopRGB;
  7312:             kbdFillRect (bitmap, width, x, y, w, ht, color);  //上半分
  7313:             kbdFillRect (bitmap, width, x + wl, y + ht, w - wl, h - ht, color);  //下半分
  7314:             kbdDrawLetter (bitmap, width, lx, ly, lw, lh, letter);
  7315:           }
  7316:         } else if (style == KBD_SHIFT_STYLE) {  //SHIFTキー
  7317:           int xr = x + KBD_COL_WIDTH * (wide - 9);  //右
  7318:           w = KBD_COL_WIDTH * 9 - 1;  //幅
  7319:           indexRect[i] = new int[] { x, y, w, h, xr, y, w, h };
  7320:           int tx = x + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
  7321:           int ty = y + KBD_TOUCHABLE_AREA;
  7322:           int tw = w - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH) * 2;
  7323:           int th = h - KBD_TOUCHABLE_AREA * 2;
  7324:           int p = tx + width * ty;
  7325:           for (int v = 0; v < th; v++) {
  7326:             for (int u = 0; u < tw; u++) {
  7327:               indexMap[p + u] = (byte) i;
  7328:             }
  7329:             p += width;
  7330:           }
  7331:           tx = xr + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
  7332:           p = tx + width * ty;
  7333:           for (int v = 0; v < th; v++) {
  7334:             for (int u = 0; u < tw; u++) {
  7335:               indexMap[p + u] = (byte) i;
  7336:             }
  7337:             p += width;
  7338:           }
  7339:           int[] letter = KBD_FIX_LETTER[KBD_SHIFT_INDEX - (KBD_VAR_KEYS + KBD_LED_KEYS)];
  7340:           for (int stat = 0; stat < 4; stat++) {
  7341:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  7342:             kbdDrawKey (bitmap, width, x, y, w, h, KBD_COL_WIDTH, 0, null, letter, stat);
  7343:             kbdDrawKey (bitmap, width, xr, y, w, h, KBD_COL_WIDTH, 0, null, letter, stat);
  7344:           }
  7345:         } else {  //RETURNキーとSHIFTキー以外
  7346:           if (style == KBD_FUNCTION_STYLE) {  //F1~F10
  7347:             y += KBD_ROW_HEIGHT >> 1;  //キーの上端を1/2行削る
  7348:             h -= KBD_ROW_HEIGHT >> 1;
  7349:           }
  7350:           int pw = (style == KBD_NARROWER_STYLE ? KBD_COL_WIDTH >> 1 :  //キートップの左右を1/2列ずつ削る
  7351:                     style == KBD_NARROW_STYLE ? KBD_COL_WIDTH :  //キートップの左右を1列ずつ削る
  7352:                     0);
  7353:           int ph = (style == KBD_SHORTER_STYLE ? KBD_ROW_HEIGHT :  //キートップの上下を1行ずつ削る
  7354:                     style == KBD_SHORT_STYLE ? KBD_ROW_HEIGHT << 1 :  //キートップの上下を2行ずつ削る
  7355:                     0);
  7356:           indexRect[i] = new int[] { x, y, w, h };
  7357:           int tx = x + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + pw);
  7358:           int ty = y + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + ph);
  7359:           int tw = w - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + pw) * 2;
  7360:           int th = h - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + ph) * 2;
  7361:           int p = tx + width * ty;
  7362:           for (int v = 0; v < th; v++) {
  7363:             for (int u = 0; u < tw; u++) {
  7364:               indexMap[p + u] = (byte) i;
  7365:             }
  7366:             p += width;
  7367:           }
  7368:           for (int stat = 0; stat < 4; stat++) {
  7369:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  7370:             kbdDrawKey (bitmap, width, x, y, w, h, pw, ph, null, KBD_FIX_LETTER[i - (KBD_VAR_KEYS + KBD_LED_KEYS)], stat);
  7371:           }
  7372:         }  //RETURNキー以外
  7373:       }  //for i
  7374:     }  //for type
  7375: 
  7376:     //現在の状態
  7377:     if (kbdOn) {
  7378:       kbdWidth = kbdDataTypeWidth[kbdType];
  7379:       kbdHeight = kbdDataTypeHeight[kbdType];
  7380:       kbdImage = kbdDataTypeImage[kbdType];
  7381:       kbdBitmap = kbdDataTypeBitmap[kbdType];
  7382:       kbdIndexMap = kbdDataTypeIndexMap[kbdType];
  7383:       kbdFlush ();
  7384:     } else {
  7385:       kbdWidth = 0;
  7386:       kbdHeight = 0;
  7387:       kbdImage = null;
  7388:       kbdBitmap = null;
  7389:       kbdIndexMap = null;
  7390:     }
  7391:     //kbdStat = new int[KBD_ALL_KEYS];
  7392:     Arrays.fill (kbdStat, 0);
  7393:     kbdPointedIndex = -1;
  7394:     if (!MC68901.MFP_KBD_ON) {
  7395:       kbdRepeatTask = null;
  7396:     }
  7397: 
  7398:     //kbdRepeatDelay = 200 + 100 * 3;
  7399:     //kbdRepeatInterval = 30 + 5 * 4 * 4;
  7400:     kbdSetRepeatDelay (MainMemory.mmrRbs (0x00ed003a));
  7401:     kbdSetRepeatInterval (MainMemory.mmrRbs (0x00ed003b));
  7402: 
  7403:     kbdLedBrightness = 0;  //明るい
  7404: 
  7405:   }  //kbdInit()
  7406: 
  7407:   //kbdTini ()
  7408:   //  後始末
  7409:   public static void kbdTini () {
  7410: 
  7411:     //キーマップを保存する
  7412:     if (KBD_ZKEY_ON && kbdZKeyPort != null) {  //Zキーボード
  7413:       System.arraycopy (kbdCurrentMap, 0,  //from
  7414:                         kbdCurrentMapZ, 0,  //to
  7415:                         KBD_DEFAULT_MAP_WIN.length);  //length
  7416:     } else {  //Zキーボード以外
  7417:       System.arraycopy (kbdCurrentMap, 0,  //from
  7418:                         kbdCurrentMapNonZ, 0,  //to
  7419:                         KBD_DEFAULT_MAP_WIN.length);  //length
  7420:     }
  7421: 
  7422:     //キーマップ
  7423:     Settings.sgsPutOnOff ("keymapus", kbdUSLayoutOn);
  7424:     {
  7425:       int[] map;
  7426:       if (Arrays.equals (kbdCurrentMapNonZ, kbdDefaultMapNonZ)) {  //デフォルトマップと同じ
  7427:         map = new int[0];
  7428:       } else {  //デフォルトマップと違う
  7429:         map = new int[1 + KBD_DEFAULT_MAP_WIN.length];
  7430:         map[0] = -3;
  7431:         Arrays.fill (map, 1, 1 + KBD_DEFAULT_MAP_WIN.length, 0);  //array,from,to,value
  7432:         System.arraycopy (kbdCurrentMapNonZ, 0,  //from
  7433:                           map, 1,  //to
  7434:                           KBD_DEFAULT_MAP_WIN.length);  //length
  7435:       }
  7436:       Settings.sgsPutIntArray ("keymap", map);
  7437:     }
  7438: 
  7439:     //キーボードの種類
  7440:     Settings.sgsPutString ("keyboard",
  7441:                            !kbdOn ? "none" :
  7442:                            kbdType == KBD_COMPACT_TYPE ? "compact" :
  7443:                            kbdType == KBD_STANDARD_TYPE ? "standard" :
  7444:                            "standard");
  7445: 
  7446:     //F11キー
  7447:     Settings.sgsPutString ("f11key",
  7448:                            kbdF11Mode == KBD_F11_FULLSCREEN ? "fullscreen" :
  7449:                            kbdF11Mode == KBD_F11_SCREENSHOT ? "screenshot" :
  7450:                            kbdF11Mode == KBD_F11_GIFANIMATION ? "gifanimation" :
  7451:                            kbdF11Mode == KBD_F11_STOPANDSTART ? "stopandstart" :
  7452:                            kbdF11Mode == KBD_F11_DO_NOTHING ? "donothing" :
  7453:                            "fullscreen");
  7454: 
  7455:     //Zキーボード
  7456:     if (KBD_ZKEY_ON) {
  7457:       Settings.sgsPutOnOff ("zkeyboard", kbdZKeyOnRequest);
  7458:       kbdZKeyClose ();
  7459:       int[] map;
  7460:       if (Arrays.equals (kbdCurrentMapZ, kbdDefaultMapZ)) {  //デフォルトマップと同じ
  7461:         map = new int[0];
  7462:       } else {  //デフォルトマップと違う
  7463:         map = new int[1 + KBD_DEFAULT_MAP_WIN.length];
  7464:         map[0] = -3;
  7465:         Arrays.fill (map, 1, 1 + KBD_DEFAULT_MAP_WIN.length, 0);  //array,from,to,value
  7466:         System.arraycopy (kbdCurrentMapZ, 0,  //from
  7467:                           map, 1,  //to
  7468:                           KBD_DEFAULT_MAP_WIN.length);  //length
  7469:       }
  7470:       Settings.sgsPutIntArray ("zkeymap", map);
  7471:     }
  7472: 
  7473:   }
  7474: 
  7475:   //kbdReset ()
  7476:   //  リセット
  7477:   public static void kbdReset () {
  7478:     kbdRePress ();  //押されているキーを再入力する
  7479:     if (KBD_ZKEY_ON) {
  7480:       if (!kbdZKeyOn && kbdZKeyOnRequest) {
  7481:         kbdZKeyOpen ();
  7482:       }
  7483:       kbdZKeyIOData = 0L;
  7484:       kbdZKeyIOProgrammable = false;
  7485:       kbdZKeyUpdate ();
  7486:     }
  7487:   }
  7488: 
  7489:   //kbdDrawKey (bitmap, width, x, y, w, h, u, v, ledColors, letter, stat)
  7490:   //  キーを描く
  7491:   //  bitmap     ビットマップ
  7492:   //  width      bitmapの幅(px)
  7493:   //  x          キーのx座標(px)
  7494:   //  y          キーのy座標(px)
  7495:   //  w          キーの幅(px)
  7496:   //  h          キーの高さ(px)
  7497:   //  u          キートップの左右を削る幅(px)
  7498:   //  v          キートップの上下を削る幅(px)
  7499:   //  ledColors  LEDの色。[0]=キートップ側の色(rgb),[1]=ボーダー側の色(rgb)
  7500:   //  letter     文字のパターン
  7501:   //  stat       キーの状態。bit0=pointed,bit1=pressed
  7502:   public static void kbdDrawKey (int[] bitmap, int width, int x, int y, int w, int h, int u, int v, int[] ledColors, int[] letter, int stat) {
  7503:     boolean pointed = (stat & KBD_POINTED_MASK) != 0;
  7504:     boolean pressed = (stat & KBD_PRESSED_MASK) != 0;
  7505:     //1段目
  7506:     if (!pressed) {
  7507:       kbdDrawLine (bitmap, x + width * y,
  7508:                    1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
  7509:                    width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
  7510:                    -1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
  7511:                    -width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
  7512:     } else {
  7513:       kbdDrawLine (bitmap, x + width * y,
  7514:                    1, 1, kbdHoleRGB, 1, w - 2, kbdHoleRGB,
  7515:                    width, 1, kbdHoleRGB, width, h - 2, kbdHoleRGB,
  7516:                    -1, 1, kbdHoleRGB, -1, w - 2, kbdHoleRGB,
  7517:                    -width, 1, kbdHoleRGB, -width, h - 2, kbdHoleRGB);
  7518:     }
  7519:     x += 1 + u;
  7520:     y += 1 + v;
  7521:     w -= 2 + u * 2;
  7522:     h -= 2 + v * 2;
  7523:     //島
  7524:     if (u > 0) {
  7525:       kbdFillRect (bitmap, width, x - u, y, u, h, kbdKeytopRGB);  //左側
  7526:       kbdFillRect (bitmap, width, x + w, y, u, h, kbdKeytopRGB);  //右側
  7527:     }
  7528:     if (v > 0) {
  7529:       kbdFillRect (bitmap, width, x, y - v, w, v, kbdKeytopRGB);  //上側
  7530:       kbdFillRect (bitmap, width, x, y + h, w, v, kbdKeytopRGB);  //下側
  7531:     }
  7532:     //2段目
  7533:     int lx = x;
  7534:     int ly = y;
  7535:     int lw = w;
  7536:     int lh = h;
  7537:     kbdDrawLine (bitmap, x + width * y,
  7538:                  1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
  7539:                  width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
  7540:                  -1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
  7541:                  -width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
  7542:     x++;
  7543:     y++;
  7544:     w -= 2;
  7545:     h -= 2;
  7546:     //3段目
  7547:     kbdDrawLine (bitmap, x + width * y,
  7548:                  1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
  7549:                  width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
  7550:                  -1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
  7551:                  -width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
  7552:     x++;
  7553:     y++;
  7554:     w -= 2;
  7555:     h -= 2;
  7556:     //キートップ
  7557:     kbdFillRect (bitmap, width, x, y, w, h, pointed ? kbdPointedRGB : kbdKeytopRGB);
  7558:     //LED
  7559:     if (ledColors != null) {
  7560:       x += w - KBD_LED_WIDTH >> 1;
  7561:       y += h;
  7562:       kbdFillRect (bitmap, width, x, y - KBD_LED_HEIGHT, KBD_LED_WIDTH, KBD_LED_HEIGHT, ledColors[0]);  //上半分
  7563:       kbdFillRect (bitmap, width, x, y, KBD_LED_WIDTH, pressed ? 2 : 3, ledColors[1]);  //下半分の高さはボーダーの幅
  7564:     }
  7565:     //文字
  7566:     if (letter != null) {  //文字あり
  7567:       kbdDrawLetter (bitmap, width, lx, ly, lw, lh, letter);
  7568:     }
  7569:   }  //kbdDrawKey
  7570: 
  7571:   //kbdDrawKey2 (bitmap, width, x, y, w, h, u, v, ledColors, code, stat)
  7572:   //  キーを描く
  7573:   //  bitmap     ビットマップ
  7574:   //  width      bitmapの幅(px)
  7575:   //  x          キーのx座標(px)
  7576:   //  y          キーのy座標(px)
  7577:   //  w          キーの幅(px)
  7578:   //  h          キーの高さ(px)
  7579:   //  u          キートップの左右を削る幅(px)
  7580:   //  v          キートップの上下を削る幅(px)
  7581:   //  ledColors  LEDの色。[0]=キートップ側の色(rgb),[1]=ボーダー側の色(rgb)
  7582:   //  code       文字コード
  7583:   //  stat       キーの状態。bit0=pointed,bit1=pressed
  7584:   public static void kbdDrawKey2 (int[] bitmap, int width, int x, int y, int w, int h, int u, int v, int[] ledColors, int code, int stat) {
  7585:     if (KBD_USE_ROM_FONT) {  //ROMフォントを使う
  7586:       boolean pointed = (stat & KBD_POINTED_MASK) != 0;
  7587:       boolean pressed = (stat & KBD_PRESSED_MASK) != 0;
  7588:       //1段目
  7589:       if (!pressed) {
  7590:         kbdDrawLine (bitmap, x + width * y,
  7591:                      1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
  7592:                      width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
  7593:                      -1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
  7594:                      -width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
  7595:       } else {
  7596:         kbdDrawLine (bitmap, x + width * y,
  7597:                      1, 1, kbdHoleRGB, 1, w - 2, kbdHoleRGB,
  7598:                      width, 1, kbdHoleRGB, width, h - 2, kbdHoleRGB,
  7599:                      -1, 1, kbdHoleRGB, -1, w - 2, kbdHoleRGB,
  7600:                      -width, 1, kbdHoleRGB, -width, h - 2, kbdHoleRGB);
  7601:       }
  7602:       x += 1 + u;
  7603:       y += 1 + v;
  7604:       w -= 2 + u * 2;
  7605:       h -= 2 + v * 2;
  7606:       //島
  7607:       if (u > 0) {
  7608:         kbdFillRect (bitmap, width, x - u, y, u, h, kbdKeytopRGB);  //左側
  7609:         kbdFillRect (bitmap, width, x + w, y, u, h, kbdKeytopRGB);  //右側
  7610:       }
  7611:       if (v > 0) {
  7612:         kbdFillRect (bitmap, width, x, y - v, w, v, kbdKeytopRGB);  //上側
  7613:         kbdFillRect (bitmap, width, x, y + h, w, v, kbdKeytopRGB);  //下側
  7614:       }
  7615:       //2段目
  7616:       int lx = x;
  7617:       int ly = y;
  7618:       int lw = w;
  7619:       int lh = h;
  7620:       kbdDrawLine (bitmap, x + width * y,
  7621:                    1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
  7622:                    width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
  7623:                    -1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
  7624:                    -width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
  7625:       x++;
  7626:       y++;
  7627:       w -= 2;
  7628:       h -= 2;
  7629:       //3段目
  7630:       kbdDrawLine (bitmap, x + width * y,
  7631:                    1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
  7632:                    width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
  7633:                    -1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
  7634:                    -width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
  7635:       x++;
  7636:       y++;
  7637:       w -= 2;
  7638:       h -= 2;
  7639:       //キートップ
  7640:       kbdFillRect (bitmap, width, x, y, w, h, pointed ? kbdPointedRGB : kbdKeytopRGB);
  7641:       //LED
  7642:       if (ledColors != null) {
  7643:         x += w - KBD_LED_WIDTH >> 1;
  7644:         y += h;
  7645:         kbdFillRect (bitmap, width, x, y - KBD_LED_HEIGHT, KBD_LED_WIDTH, KBD_LED_HEIGHT, ledColors[0]);  //上半分
  7646:         kbdFillRect (bitmap, width, x, y, KBD_LED_WIDTH, pressed ? 2 : 3, ledColors[1]);  //下半分の高さはボーダーの幅
  7647:       }
  7648:       //文字
  7649:       if (code != 0) {  //文字あり
  7650:         kbdDrawLetter2 (bitmap, width, lx, ly, lw, lh, code);
  7651:       }
  7652:     }  //if KBD_USE_ROM_FONT
  7653:   }  //kbdDrawKey2
  7654: 
  7655:   //kbdFillRect (bitmap, width, x, y, w, h, color)
  7656:   //  矩形を塗り潰す
  7657:   //  bitmap  ビットマップ
  7658:   //  width   bitmapの幅(px)
  7659:   //  x       x座標(px)
  7660:   //  y       y座標(px)
  7661:   //  w       幅(px)
  7662:   //  h       高さ(px)
  7663:   //  color   色(rgb)
  7664:   public static void kbdFillRect (int[] bitmap, int width, int x, int y, int w, int h, int color) {
  7665:     for (int j = 0; j < h; j++) {
  7666:       int dst = x + width * (y + j);
  7667:       for (int i = 0; i < w; i++) {
  7668:         bitmap[dst + i] = color;
  7669:       }
  7670:     }
  7671:   }  //kbdFillRect(int[],int,int,int,int,int,int)
  7672: 
  7673:   //kbdDrawLetter (bitmap, width, lx, ly, lw, lh, letter)
  7674:   //  文字のパターンを描く
  7675:   //  影を付ける
  7676:   //  bitmap  ビットマップ
  7677:   //  width   bitmapの幅(px)
  7678:   //  lx      x座標(px)
  7679:   //  ly      y座標(px)
  7680:   //  lw      幅(px)
  7681:   //  lh      高さ(px)
  7682:   //  letter  文字のパターン
  7683:   public static void kbdDrawLetter (int[] bitmap, int width, int lx, int ly, int lw, int lh, int[] letter) {
  7684:     if (lw <= 32) {
  7685:       for (int j = 0; j < lh; j++) {
  7686:         int dst = lx + width * (ly + j);
  7687:         for (int i = 0; i < lw; i++) {
  7688:           if ((letter[j] >> lw - 1 - i & 1) != 0) {
  7689:             bitmap[dst + i] = kbdLetterRGB;
  7690:           } else if (i > 0 && j > 0 && (letter[j - 1] >> lw - 1 - (i - 1) & 1) != 0) {
  7691:             bitmap[dst + i] = kbdShadowRGB;
  7692:             //bitmap[dst + i] = 0xff000000 | bitmap[dst + i] >> 2 & 0x003f3f3f;
  7693:             //bitmap[dst + i] = 0xff000000 | bitmap[dst + i] >> 1 & 0x007f7f7f;
  7694:           }
  7695:         }
  7696:       }
  7697:     } else {
  7698:       int n = lw + 31 >> 5;  //1ラスタあたりの文字データの数
  7699:       for (int j = 0; j < lh; j++) {
  7700:         int src = n * j + n - 1;  //文字データの右端
  7701:         int dst = lx + width * (ly + j) + lw - 1;  //キートップの右端
  7702:         for (int i = 0; i < lw; i++) {  //右端が0,左端がlw-1
  7703:           if ((letter[src - (i >> 5)] >> (i & 0x1f) & 1) != 0) {
  7704:             bitmap[dst - i] = kbdLetterRGB;
  7705:           } else if (i > 0 && j > 0 && (letter[src - n - (i + 1 >> 5)] >> (i + 1 & 0x1f) & 1) != 0) {
  7706:             bitmap[dst - i] = kbdShadowRGB;
  7707:             //bitmap[dst - i] = 0xff000000 | bitmap[dst - i] >> 2 & 0x003f3f3f;
  7708:             //bitmap[dst - i] = 0xff000000 | bitmap[dst - i] >> 1 & 0x007f7f7f;
  7709:           }
  7710:         }
  7711:       }
  7712:     }
  7713:   }  //kbdDrawLetter(int[],int,int,int,int,int,int[])
  7714: 
  7715:   //kbdDrawLetter2 (bitmap, width, lx, ly, lw, lh, code)
  7716:   //  文字のパターンを描く
  7717:   //  影を付ける
  7718:   //  bitmap  ビットマップ
  7719:   //  width   bitmapの幅(px)
  7720:   //  lx      x座標(px)
  7721:   //  ly      y座標(px)
  7722:   //  lw      幅(px)
  7723:   //  lh      高さ(px)
  7724:   //  code    文字コード
  7725:   public static void kbdDrawLetter2 (int[] bitmap, int width, int lx, int ly, int lw, int lh, int code) {
  7726:     final int fw = 8;
  7727:     final int fh = 8;
  7728:     final int fa = 0x00f3a000;  //ANK8x8
  7729:     int dst = lx + (lw - fw >> 1) + width * (ly + (lh - fh >> 1));
  7730:     int src = fa + (fw + 7 >> 3) * fh * code;
  7731:     for (int y = 0; y < fh; y++) {
  7732:       for (int x = 0; x < fw; x++) {
  7733:         if ((MainMemory.mmrM8[src + (fw + 7 >> 3) * y + (x >> 3)] & 1 << (~x & 0x07)) != 0) {
  7734:           bitmap[dst + width * y + x] = kbdLetterRGB;
  7735:         } else if (x > 0 && y > 0 &&
  7736:                    (MainMemory.mmrM8[src + (fw + 7 >> 3) * (y - 1) + (x - 1 >> 3)] & 1 << (~(x - 1) & 0x07)) != 0) {
  7737:           bitmap[dst + width * y + x] = kbdShadowRGB;
  7738:         }
  7739:       }
  7740:     }
  7741:   }  //kbdDrawLetter2(int[],int,int,int,int,int,int)
  7742: 
  7743:   //kbdDrawLine (bitmap, pos, vect0, step0, color0, vect1, step1, color1, ...)
  7744:   //  bitmap  ビットマップ
  7745:   //  pos     開始位置のオフセット
  7746:   //  vect    方向。オフセットの差分
  7747:   //  step    長さ(px)
  7748:   //  color   色(rgb)
  7749:   public static void kbdDrawLine (int[] bitmap, int pos, int... vect_step_color) {
  7750:     for (int i = 0; i < vect_step_color.length; i += 3) {
  7751:       int vect = vect_step_color[i];
  7752:       int step = vect_step_color[i + 1];
  7753:       int color = vect_step_color[i + 2];
  7754:       for (; step > 0; step--) {
  7755:         bitmap[pos] = color;
  7756:         pos += vect;
  7757:       }
  7758:     }
  7759:   }  //kbdDrawLine(int[],int,int...)
  7760: 
  7761:   //kbdStart ()
  7762:   //  キーボードのイベントリスナーを設定して動作を開始する
  7763:   //  MFPが初期化されている必要がある
  7764:   public static void kbdStart () {
  7765: 
  7766:     //Tabキーによるフォーカスの移動を無効にする
  7767:     //  setFocusTraversalKeysにCollections.EMPTY_SETを指定すると無検査変換の警告が出る
  7768:     //XEiJ.pnlPanel.setFocusTraversalKeys (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);
  7769:     //XEiJ.pnlPanel.setFocusTraversalKeys (KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);
  7770:     //XEiJ.pnlPanel.setFocusTraversalKeys (KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, Collections.EMPTY_SET);
  7771:     XEiJ.pnlPanel.setFocusTraversalKeysEnabled (false);  //Component.setFocusTraversalKeysEnabled()は1.4から
  7772: 
  7773:     //フォーカスリスナーとキーリスナー
  7774:     XEiJ.pnlPanel.setFocusable (true);  //普通のコンポーネントはクリックしてもフォーカスされないのでキーイベントが発生しない
  7775:     ComponentFactory.addListener (
  7776:       XEiJ.pnlPanel,
  7777:       new FocusAdapter () {
  7778:         @Override public void focusGained (FocusEvent fe) {
  7779:           kbdCloseIME ();  //IMEが開いていたら閉じる
  7780:         }
  7781:         //@Override public void focusLost (FocusEvent fe) {
  7782:         //}
  7783:       });
  7784:     XEiJ.pnlPanel.requestFocusInWindow ();  //フォーカスを要求する。Component.requestFocusInWindow()は1.4から
  7785:     ComponentFactory.addListener (
  7786:       XEiJ.pnlPanel,
  7787:       new KeyAdapter () {
  7788:         @Override public void keyPressed (KeyEvent ke) {
  7789:           if (Mouse.musOutputButtonStatus) {
  7790:             System.out.println ("when=" + ke.getWhen () + " toString=\"" + ke.toString () + "\"");
  7791:             //System.out.println (String.format ("keyPressed keyChar=0x%04x keyCode=0x%08x extendedKeyCode=0x%08x keyLocation=%d",
  7792:             //                                   (int) ke.getKeyChar (), ke.getKeyCode (), ke.getExtendedKeyCode (), ke.getKeyLocation ()));
  7793:           }
  7794:           kbdCloseIME ();  //IMEが開いていたら閉じる
  7795:           int keyCode = ke.getKeyCode ();
  7796:           if (KBD_ZKEY_ON && kbdZKeyPort != null) {  //Zキーボード
  7797:             switch (keyCode) {
  7798:             case KeyEvent.VK_HALF_WIDTH:  //BREAK 半角(VK 244)
  7799:             case KeyEvent.VK_FULL_WIDTH:  //BREAK 全角(VK 243)
  7800:               //pressedを無視する
  7801:               break;
  7802:             case KeyEvent.VK_F17:  //CAPS 英数字(VK 240)→F17
  7803:               //pressedで入力してすぐ離す
  7804:               kbdInput (ke, true);
  7805:               kbdInput (ke, false);
  7806:               break;
  7807:             case KeyEvent.VK_F16:  //XF4 ひらがな(VK 242)→F16
  7808:               //pressedで入力して他のキーが離されまで押されたままにする
  7809:               kbdInput (ke, true);
  7810:               kbdXF4Locked = ke;
  7811:               break;
  7812:             case KeyEvent.VK_NUM_LOCK:  //CLR NumLock
  7813:               if (kbdIgnoreNumLock) {  //NumLockを1回無視する
  7814:               } else {
  7815:                 kbdInput (ke, true);
  7816:               }
  7817:               break;
  7818:             default:  //その他
  7819:               kbdInput (ke, true);
  7820:             }
  7821:           } else {  //Zキーボードではない
  7822:             kbdInput (ke, true);
  7823:           }
  7824:           ke.consume ();
  7825:         }
  7826:         @Override public void keyReleased (KeyEvent ke) {
  7827:           if (Mouse.musOutputButtonStatus) {
  7828:             System.out.println ("when=" + ke.getWhen () + " toString=\"" + ke.toString () + "\"");
  7829:             //System.out.println (String.format ("keyReleased keyChar=0x%04x keyCode=0x%08x extendedKeyCode=0x%08x keyLocation=%d",
  7830:             //                                   (int) ke.getKeyChar (), ke.getKeyCode (), ke.getExtendedKeyCode (), ke.getKeyLocation ()));
  7831:           }
  7832:           kbdCloseIME ();  //IMEが開いていたら閉じる
  7833:           int keyCode = ke.getKeyCode ();
  7834:           int keyLocation = ke.getKeyLocation ();
  7835:           if (KBD_ZKEY_ON && kbdZKeyPort != null) {  //Zキーボード
  7836:             switch (keyCode) {
  7837:             case KeyEvent.VK_HALF_WIDTH:  //BREAK 半角(VK 244)
  7838:             case KeyEvent.VK_FULL_WIDTH:  //BREAK 全角(VK 243)
  7839:               //releasedで入力してすぐ離す
  7840:               kbdInput (ke, true);
  7841:               kbdInput (ke, false);
  7842:               break;
  7843:             case KeyEvent.VK_F17:  //CAPS 英数字(VK 240)→F17
  7844:             case KeyEvent.VK_F16:  //XF4 ひらがな(VK 242)→F16
  7845:               //releasedを無視する
  7846:               break;
  7847:             case KeyEvent.VK_NUM_LOCK:  //CLR NumLock
  7848:               if (kbdIgnoreNumLock) {  //NumLockを1回無視する
  7849:                 kbdIgnoreNumLock = false;
  7850:               } else {
  7851:                 kbdInput (ke, false);
  7852:                 //NumLockを点灯させる
  7853:                 if (!kbdZKeyPort.isKeyToggled (KeyEvent.VK_NUM_LOCK)) {  //NumLockが消灯している
  7854:                   kbdIgnoreNumLock = true;  //NumLockを1回無視する
  7855:                   kbdZKeyPort.hitKey (KeyEvent.VK_NUM_LOCK);  //NumLockを叩いて点灯させる。直ちに発火することに注意
  7856:                 }
  7857:               }
  7858:               break;
  7859:             default:  //その他
  7860:               kbdInput (ke, false);
  7861:               if (kbdXF4Locked != null) {  //XF4が押されている
  7862:                 kbdInput (kbdXF4Locked, false);  //XF4を離す
  7863:                 kbdXF4Locked = null;
  7864:               }
  7865:             }
  7866:           } else {  //Zキーボードではない
  7867:             kbdInput (ke, false);
  7868:           }
  7869:           ke.consume ();
  7870:         }
  7871:         @Override public void keyTyped (KeyEvent ke) {
  7872:           if (Mouse.musOutputButtonStatus) {
  7873:             System.out.println ("when=" + ke.getWhen () + " toString=\"" + ke.toString () + "\"");
  7874:             //System.out.println (String.format ("keyTyped keyChar=0x%04x keyCode=0x%08x extendedKeyCode=0x%08x keyLocation=%d",
  7875:             //                                   (int) ke.getKeyChar (), ke.getKeyCode (), ke.getExtendedKeyCode (), ke.getKeyLocation ()));
  7876:           }
  7877:           kbdCloseIME ();  //IMEが開いていたら閉じる
  7878:           ke.consume ();
  7879:         }
  7880:       });
  7881: 
  7882:     //IMEが開いていたら閉じる
  7883:     kbdCloseIME ();
  7884: 
  7885:     if (kbdOn) {
  7886:       //点灯要求コードを送出する
  7887:       if (MC68901.MFP_KBD_ON) {
  7888:         MC68901.mfpKbdInput (0xff, false);
  7889:       } else {
  7890:         kbdTransfer (0xff, false);
  7891:       }
  7892:     }
  7893: 
  7894:     //キーボード設定ウィンドウの準備
  7895:     if (RestorableFrame.rfmGetOpened (Settings.SGS_KBS_FRAME_KEY)) {
  7896:       kbdOpen ();
  7897:     }
  7898: 
  7899:   }  //kbdStart()
  7900: 
  7901:   //kbdOpen ()
  7902:   //  キーボード設定ウィンドウを開く
  7903:   public static void kbdOpen () {
  7904:     if (kbdFrame == null) {
  7905:       kbdMakeFrame ();
  7906:     }
  7907:     kbdFrame.setVisible (true);
  7908:   }  //kbdOpen()
  7909: 
  7910:   //kbdMakeFrame ()
  7911:   //  キーボード設定ウィンドウを作る
  7912:   //  ここでは開かない
  7913:   public static void kbdMakeFrame () {
  7914: 
  7915:     //キーマップエディタ
  7916:     kbdEditor = new KeyMapEditor (kbdCurrentMap);
  7917: 
  7918:     //アクションリスナー
  7919:     ActionListener listener = new ActionListener () {
  7920:       @Override public void actionPerformed (ActionEvent ae) {
  7921:         Object source = ae.getSource ();
  7922:         switch (ae.getActionCommand ()) {
  7923:         case "Blank":  //白紙
  7924:           kbdEditor.blank ();
  7925:           break;
  7926:         case "US layout":  //英語配列
  7927:           kbdUSLayoutOn = ((JCheckBox) source).isSelected ();
  7928:           kbdDefaultMapNonZ = (XEiJ.prgIsLinux ? KBD_DEFAULT_MAP_LINUX :
  7929:                                XEiJ.prgIsMac ?
  7930:                                kbdUSLayoutOn ? KBD_DEFAULT_MAP_MAC_US : KBD_DEFAULT_MAP_MAC :
  7931:                                kbdUSLayoutOn ? KBD_DEFAULT_MAP_WIN_US : KBD_DEFAULT_MAP_WIN);
  7932:           break;
  7933:         case "Default":  //初期値
  7934:           kbdEditor.reset (KBD_ZKEY_ON && kbdZKeyPort != null ? kbdDefaultMapZ : kbdDefaultMapNonZ);
  7935:           break;
  7936:         case "Save":  //保存
  7937:           kbdEditor.save ();
  7938:           break;
  7939:         case "Restore":  //復元
  7940:           kbdEditor.restore ();
  7941:           break;
  7942:         case "Undo":  //取り消し
  7943:           kbdEditor.undo ();
  7944:           break;
  7945:         case "Redo":  //やり直し
  7946:           kbdEditor.redo ();
  7947:           break;
  7948:         }
  7949:       }
  7950:     };
  7951: 
  7952:     //ウインドウ
  7953:     kbdFrame = Multilingual.mlnTitle (
  7954:       ComponentFactory.createRestorableSubFrame (
  7955:         Settings.SGS_KBS_FRAME_KEY,
  7956:         "Key assignment",
  7957:         null,
  7958:         ComponentFactory.createVerticalBox (
  7959:           ComponentFactory.createFlowPanel (
  7960:             FlowLayout.CENTER, 10, 2,
  7961:             Multilingual.mlnText (ComponentFactory.createButton ("Blank", listener), "ja", "白紙"),
  7962:             ComponentFactory.setLineBorder (
  7963:               ComponentFactory.createFlowPanel (2, 2,
  7964:                 Multilingual.mlnText (ComponentFactory.createCheckBox (kbdUSLayoutOn, "US layout", listener), "ja", "英語配列"),
  7965:                 Multilingual.mlnText (ComponentFactory.createButton ("Default", listener), "ja", "初期値")
  7966:                 )
  7967:               ),
  7968:             Multilingual.mlnText (ComponentFactory.createButton ("Save", listener), "ja", "保存"),
  7969:             Multilingual.mlnText (ComponentFactory.createButton ("Restore", listener), "ja", "復元"),
  7970:             Multilingual.mlnText (ComponentFactory.createButton ("Undo", listener), "ja", "取り消し"),
  7971:             Multilingual.mlnText (ComponentFactory.createButton ("Redo", listener), "ja", "やり直し")
  7972:             ),
  7973:           kbdEditor.getPanel ()
  7974:           )
  7975:         ),
  7976:       "ja", "キー割り当て");
  7977: 
  7978:   }  //kbdMakeFrame()
  7979: 
  7980: 
  7981:   //kbdCloseIME ()
  7982:   //  IMEが開いていたら閉じる
  7983:   //  継続的にIMEを無効化する方法が見当たらないのでIMEを開くキーが押されたらすぐに閉じることで擬似的にIMEを無効化する
  7984:   public static void kbdCloseIME () {
  7985:     try {
  7986:       InputContext context = XEiJ.pnlPanel.getInputContext ();
  7987:       if (context != null && context.isCompositionEnabled ()) {
  7988:         context.setCompositionEnabled (false);
  7989:         context.setCharacterSubsets (null);
  7990:       }
  7991:     } catch (UnsupportedOperationException uoe) {
  7992:     }
  7993:   }  //kbdCloseIME()
  7994: 
  7995:   //kbdSetOn (on)
  7996:   //  キーボードを表示する/表示しない
  7997:   public static void kbdSetOn (boolean on) {
  7998:     if (kbdOn != on) {
  7999:       kbdOn = on;
  8000:       if (on) {
  8001:         if (kbdType == KBD_STANDARD_TYPE) {
  8002:           System.out.println (Multilingual.mlnJapanese ?
  8003:                               "標準キーボードを接続します" :
  8004:                               "Connecting standard keyboard");
  8005:         } else if (kbdType == KBD_COMPACT_TYPE) {
  8006:           System.out.println (Multilingual.mlnJapanese ?
  8007:                               "コンパクトキーボードを接続します" :
  8008:                               "Connecting compact keyboard");
  8009:         }
  8010:         kbdWidth = kbdDataTypeWidth[kbdType];
  8011:         kbdHeight = kbdDataTypeHeight[kbdType];
  8012:         kbdImage = kbdDataTypeImage[kbdType];
  8013:         kbdBitmap = kbdDataTypeBitmap[kbdType];
  8014:         kbdIndexMap = kbdDataTypeIndexMap[kbdType];
  8015:         kbdFlush ();
  8016:         //点灯要求コードを送出する
  8017:         if (MC68901.MFP_KBD_ON) {
  8018:           MC68901.mfpKbdInput (0xff, false);
  8019:         } else {
  8020:           kbdTransfer (0xff, false);
  8021:         }
  8022:       } else {
  8023:         System.out.println (Multilingual.mlnJapanese ?
  8024:                             "キーボードを切り離します" :
  8025:                             "Disconnecting keyboard");
  8026:         //ポイントされているキーがあれば解除する
  8027:         if (kbdPointedIndex >= 0) {
  8028:           kbdHover (0, 0);
  8029:         }
  8030:         kbdWidth = 0;
  8031:         kbdHeight = 0;
  8032:         kbdImage = null;
  8033:         kbdBitmap = null;
  8034:         kbdIndexMap = null;
  8035:       }
  8036:       XEiJ.pnlUpdateArrangement ();
  8037:     }
  8038:   }  //kbdSetOn(boolean)
  8039: 
  8040:   //kbdSetType (type)
  8041:   //  キーボードの種類を変更する
  8042:   //  type  キーボードの種類。KEY_STANDARD_TYPEまたはKBD_COMPACT_TYPE
  8043:   public static void kbdSetType (int type) {
  8044:     if (kbdType != type) {
  8045:       kbdType = type;
  8046:       if (kbdOn) {
  8047:         System.out.println (Multilingual.mlnJapanese ?
  8048:                             "キーボードを切り離します" :
  8049:                             "Disconnecting keyboard");
  8050:         //ポイントされているキーがあれば解除する
  8051:         if (kbdPointedIndex >= 0) {
  8052:           kbdHover (0, 0);
  8053:         }
  8054:         if (kbdType == KBD_STANDARD_TYPE) {
  8055:           System.out.println (Multilingual.mlnJapanese ?
  8056:                               "標準キーボードを接続します" :
  8057:                               "Connecting standard keyboard");
  8058:         } else if (kbdType == KBD_COMPACT_TYPE) {
  8059:           System.out.println (Multilingual.mlnJapanese ?
  8060:                               "コンパクトキーボードを接続します" :
  8061:                               "Connecting compact keyboard");
  8062:         }
  8063:         kbdWidth = kbdDataTypeWidth[kbdType];
  8064:         kbdHeight = kbdDataTypeHeight[kbdType];
  8065:         kbdImage = kbdDataTypeImage[kbdType];
  8066:         kbdBitmap = kbdDataTypeBitmap[kbdType];
  8067:         kbdIndexMap = kbdDataTypeIndexMap[kbdType];
  8068:         kbdFlush ();
  8069:         //点灯要求コードを送出する
  8070:         if (MC68901.MFP_KBD_ON) {
  8071:           MC68901.mfpKbdInput (0xff, false);
  8072:         } else {
  8073:           kbdTransfer (0xff, false);
  8074:         }
  8075:         XEiJ.pnlUpdateArrangement ();
  8076:       }
  8077:     }
  8078:   }  //kbdSetType(int)
  8079: 
  8080:   //kbdRepaint ()
  8081:   //  キーボードが表示されているときkbdImageを作り直して再描画する
  8082:   public static void kbdRepaint () {
  8083:     if (kbdOn) {  //キーボードが表示されているとき
  8084:       kbdFlush ();  //kbdImageを作り直して
  8085:       XEiJ.pnlPanel.repaint (XEiJ.pnlKeyboardX, XEiJ.pnlKeyboardY, kbdWidth, kbdHeight);  //再描画する
  8086:     }
  8087:   }  //kbdRepaint()
  8088: 
  8089:   //kbdFlush ()
  8090:   //  kbdImageを作り直す
  8091:   public static void kbdFlush () {
  8092:     int width = kbdDataTypeWidth[kbdType];
  8093:     int[][] indexRect = kbdDataTypeIndexRect[kbdType];
  8094:     int[] indexCharacterStat = kbdDataTypeIndexCharacterStat[kbdType];
  8095:     int[][] statFixBitmap = kbdDataTypeStatFixBitmap[kbdType];
  8096:     //LEDキーとモードキーの状態によってキートップに表示する文字の配列を選択する
  8097:     boolean numOff = KBD_LED_TEST << (kbdStat[KBD_NUM_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
  8098:     boolean ctrlOn = KBD_MODE_TEST << (kbdStat[KBD_CTRL_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
  8099:     boolean codeOn = KBD_LED_TEST << (kbdStat[KBD_CODE_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
  8100:     boolean opt1Off = KBD_MODE_TEST << (kbdStat[KBD_OPT1_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
  8101:     boolean kanaOn = KBD_LED_TEST << (kbdStat[KBD_KANA_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
  8102:     boolean shiftOff = KBD_MODE_TEST << (kbdStat[KBD_SHIFT_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
  8103:     boolean romaOn = KBD_LED_TEST << (kbdStat[KBD_ROMA_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
  8104:     boolean capsOff = KBD_LED_TEST << (kbdStat[KBD_CAPS_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
  8105:     boolean zenOn = KBD_LED_TEST << (kbdStat[KBD_ZEN_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
  8106:     boolean hiraOn = KBD_LED_TEST << (kbdStat[KBD_HIRA_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
  8107:     byte[] varChr =
  8108:       (numOff
  8109:        ?  //-NUM
  8110:        (ctrlOn
  8111:         ?  //-NUM+CTRL
  8112:         KBD_CTRL_CHR
  8113:         :  //-NUM-CTRL
  8114:         (codeOn
  8115:          ?  //-NUM-CTRL+CODE
  8116:          KBD_CODE_CHR
  8117:          :  //-NUM-CTRL-CODE
  8118:          (opt1Off && kanaOn
  8119:           ?  //-NUM-CTRL-CODE+KANA
  8120:           (XEiJ.busPbs (0x00ed002b) == 0
  8121:            ?  //-NUM-CTRL-CODE+KANA-AIU
  8122:            (shiftOff
  8123:             ?  //-NUM-CTRL-CODE+KANA-AIU-SHIFT
  8124:             KBD_KANA_CHR
  8125:             :  //-NUM-CTRL-CODE+KANA-AIU+SHIFT
  8126:             KBD_KANA_SHIFT_CHR
  8127:             )  //!SHIFT
  8128:            :  //-NUM-CTRL-CODE+KANA+AIU
  8129:            (shiftOff
  8130:             ?  //-NUM-CTRL-CODE+KANA+AIU-SHIFT
  8131:             KBD_KANA_AIU_CHR
  8132:             :  //-NUM-CTRL-CODE+KANA+AIU+SHIFT
  8133:             KBD_KANA_AIU_SHIFT_CHR
  8134:             )  //!SHIFT
  8135:            )  //!AIU
  8136:           :  //-NUM-CTRL-CODE-KANA
  8137:           (opt1Off && romaOn
  8138:            ?  //-NUM-CTRL-CODE-KANA+ROMA
  8139:            (shiftOff
  8140:             ?  //-NUM-CTRL-CODE-KANA+ROMA-SHIFT
  8141:             KBD_ROMA_CHR
  8142:             :  //-NUM-CTRL-CODE-KANA+ROMA+SHIFT
  8143:             KBD_ROMA_SHIFT_CHR
  8144:             )  //!SHIFT
  8145:            :  //-NUM-CTRL-CODE-KANA-ROMA
  8146:            (capsOff
  8147:             ?  //-NUM-CTRL-CODE-KANA-ROMA-CAPS
  8148:             (shiftOff
  8149:              ?  //-NUM-CTRL-CODE-KANA-ROMA-CAPS-SHIFT
  8150:              KBD_NORMAL_CHR
  8151:              :  //-NUM-CTRL-CODE-KANA-ROMA-CAPS+SHIFT
  8152:              KBD_SHIFT_CHR
  8153:              )  //!SHIFT
  8154:             :  //-NUM-CTRL-CODE-KANA-ROMA+CAPS
  8155:             (shiftOff
  8156:              ?  //-NUM-CTRL-CODE-KANA-ROMA+CAPS-SHIFT
  8157:              KBD_CAPS_CHR
  8158:              :  //-NUM-CTRL-CODE-KANA-ROMA+CAPS+SHIFT
  8159:              KBD_CAPS_SHIFT_CHR
  8160:              )  //!SHIFT
  8161:             )  //!CAPS
  8162:            )  //!OPT.1&&ROMA
  8163:           )  //!OPT.1&&KANA
  8164:          )  //CODE
  8165:         )  //CTRL
  8166:        :  //+NUM
  8167:        (ctrlOn
  8168:         ?  //+NUM+CTRL
  8169:         KBD_NUM_CTRL_CHR
  8170:         :  //+NUM-CTRL
  8171:         (codeOn
  8172:          ?  //+NUM-CTRL+CODE
  8173:          KBD_NUM_CODE_CHR
  8174:          :  //+NUM-CTRL-CODE
  8175:          (opt1Off && kanaOn
  8176:           ?  //+NUM-CTRL-CODE+KANA
  8177:           (MainMemory.mmrM8[0x00ed002b] == 0
  8178:            ?  //+NUM-CTRL-CODE+KANA-AIU
  8179:            (shiftOff
  8180:             ?  //+NUM-CTRL-CODE+KANA-AIU-SHIFT
  8181:             KBD_NUM_KANA_CHR
  8182:             :  //+NUM-CTRL-CODE+KANA-AIU+SHIFT
  8183:             KBD_NUM_KANA_SHIFT_CHR
  8184:             )  //!SHIFT
  8185:            :  //+NUM-CTRL-CODE+KANA+AIU
  8186:            (shiftOff
  8187:             ?  //+NUM-CTRL-CODE+KANA+AIU-SHIFT
  8188:             KBD_NUM_KANA_AIU_CHR
  8189:             :  //+NUM-CTRL-CODE+KANA+AIU+SHIFT
  8190:             KBD_NUM_KANA_AIU_SHIFT_CHR
  8191:             )  //!SHIFT
  8192:            )  //!AIU
  8193:           :  //+NUM-CTRL-CODE-KANA
  8194:           (opt1Off && romaOn
  8195:            ?  //+NUM-CTRL-CODE-KANA+ROMA
  8196:            (shiftOff
  8197:             ?  //+NUM-CTRL-CODE-KANA+ROMA-SHIFT
  8198:             KBD_NUM_ROMA_CHR
  8199:             :  //+NUM-CTRL-CODE-KANA+ROMA+SHIFT
  8200:             KBD_NUM_ROMA_SHIFT_CHR
  8201:             )  //!SHIFT
  8202:            :  //+NUM-CTRL-CODE-KANA-ROMA
  8203:            (capsOff
  8204:             ?  //+NUM-CTRL-CODE-KANA-ROMA-CAPS
  8205:             (shiftOff
  8206:              ?  //+NUM-CTRL-CODE-KANA-ROMA-CAPS-SHIFT
  8207:              KBD_NUM_CHR
  8208:              :  //+NUM-CTRL-CODE-KANA-ROMA-CAPS+SHIFT
  8209:              KBD_NUM_SHIFT_CHR
  8210:              )  //!SHIFT
  8211:             :  //+NUM-CTRL-CODE-KANA-ROMA+CAPS
  8212:             (shiftOff
  8213:              ?  //+NUM-CTRL-CODE-KANA-ROMA+CAPS-SHIFT
  8214:              KBD_NUM_CAPS_CHR
  8215:              :  //+NUM-CTRL-CODE-KANA-ROMA+CAPS+SHIFT
  8216:              KBD_NUM_CAPS_SHIFT_CHR
  8217:              )  //!SHIFT
  8218:             )  //!CAPS
  8219:            )  //!OPT.1&&ROMA
  8220:           )  //!OPT.1&&KANA
  8221:          )  //CODE
  8222:         )  //CTRL
  8223:        );  //!NUM
  8224:     for (int i = 0; i < KBD_ALL_KEYS; i++) {
  8225:       int chr = 0;  //可変キーの文字。固定キーの文字は変化しないので0のままでよい
  8226:       if (i < KBD_VAR_KEYS) {  //可変キー
  8227:         chr = varChr[i] & 255;
  8228:         if (0xa6 <= chr && chr <= 0xdd && chr != 0xb0 &&  //記号を除くカタカナで
  8229:             zenOn && hiraOn) {  //全角とひらがなが両方点灯しているとき
  8230:           chr ^= 0x20;  //ひらがなにする
  8231:         } else if (chr == 0x5c && (MainMemory.mmrM8[0x00ed0059] & 0b00000001) != 0) {
  8232:           chr = 0x80;
  8233:         } else if (chr == 0x7e && (MainMemory.mmrM8[0x00ed0059] & 0b00000010) != 0) {
  8234:           chr = 0x81;
  8235:         } else if (chr == 0x7c && (MainMemory.mmrM8[0x00ed0059] & 0b00000100) != 0) {
  8236:           chr = 0x82;
  8237:         }
  8238:       }
  8239:       int stat = kbdStat[i] & (KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK);
  8240:       int characterStat = chr << 8 | stat;
  8241:       if (indexCharacterStat[i] != characterStat) {  //最後に描画した状態から変化した
  8242:         indexCharacterStat[i] = characterStat;
  8243:         int[] rect = indexRect[i];
  8244:         if (i < KBD_VAR_KEYS) {  //可変キー
  8245:           int[] bitmap = kbdVarStatBitmap[chr][stat];
  8246:           int p = rect[0] + width * rect[1];
  8247:           int w = rect[2];
  8248:           int h = rect[3];
  8249:           int q = 0;
  8250:           for (int dy = 0; dy < h; dy++) {
  8251:             for (int dx = 0; dx < w; dx++) {
  8252:               kbdBitmap[p++] = bitmap[q++];
  8253:             }
  8254:             p += width - w;
  8255:           }
  8256:         } else if (i < KBD_VAR_KEYS + KBD_LED_KEYS) {  //LEDキー
  8257:           int[] bitmap = kbdLedStatBitmap[i - KBD_VAR_KEYS][stat];
  8258:           if (rect.length >= 4) {  //Standard KeyboardはNUMキーがない
  8259:             int p = rect[0] + width * rect[1];
  8260:             int w = rect[2];
  8261:             int h = rect[3];
  8262:             int q = 0;
  8263:             for (int dy = 0; dy < h; dy++) {
  8264:               for (int dx = 0; dx < w; dx++) {
  8265:                 kbdBitmap[p++] = bitmap[q++];
  8266:               }
  8267:               p += width - w;
  8268:             }
  8269:           }
  8270:         } else {  //固定キー
  8271:           int[] bitmap = statFixBitmap[stat];
  8272:           if (rect.length >= 4) {  //Compact Keyboardはテンキーがない
  8273:             int p = rect[0] + width * rect[1];
  8274:             int w = rect[2];
  8275:             int h = rect[3];
  8276:             for (int dy = 0; dy < h; dy++) {
  8277:               for (int dx = 0; dx < w; dx++) {
  8278:                 kbdBitmap[p] = bitmap[p];
  8279:                 p++;
  8280:               }
  8281:               p += width - w;
  8282:             }
  8283:             if (rect.length >= 8) {  //RETURNキーとSHIFTキー
  8284:               p = rect[4] + width * rect[5];
  8285:               w = rect[6];
  8286:               h = rect[7];
  8287:               for (int dy = 0; dy < h; dy++) {
  8288:                 for (int dx = 0; dx < w; dx++) {
  8289:                   kbdBitmap[p] = bitmap[p];
  8290:                   p++;
  8291:                 }
  8292:                 p += width - w;
  8293:               }
  8294:             }
  8295:           }
  8296:         }
  8297:       }
  8298:     }
  8299:   }  //kbdFlush()
  8300: 
  8301:   //kbdHover (x, y)
  8302:   //  ポイントされているキーを変更する
  8303:   //  座標はキーボードのローカル座標で範囲内であること
  8304:   public static void kbdHover (int x, int y) {
  8305:     boolean flag = false;
  8306:     int i = kbdIndexMap[x + kbdWidth * y];  //今回ポイントされたキー。-1=キーがポイントされていない
  8307:     if (kbdPointedIndex != i) {  //ポイントされているキーが変わった
  8308:       if (kbdPointedIndex >= 0) {  //前回ポイントされていたキーがあった
  8309:         int stat = kbdStat[kbdPointedIndex];
  8310:         kbdStat[kbdPointedIndex] = stat &= ~KBD_POINTED_MASK;  //ポイントを外す
  8311:         if ((stat & KBD_MOUSEDOWN_MASK) != 0) {  //マウスで押されていた
  8312:           kbdStat[kbdPointedIndex] = stat &= ~KBD_MOUSEDOWN_MASK;  //マウスを離す
  8313:           if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) {  //ロックされておらずキーもマウスも押されていない
  8314:             kbdStat[kbdPointedIndex] = stat &= ~KBD_PRESSED_MASK;  //離す
  8315:             kbdRelease (kbdPointedIndex);
  8316:           }
  8317:         }
  8318:       }
  8319:       kbdPointedIndex = i;
  8320:       flag = true;
  8321:     }
  8322:     if (kbdPointedIndex >= 0) {  //ポイントされているキーがある
  8323:       int stat = kbdStat[kbdPointedIndex];
  8324:       kbdStat[kbdPointedIndex] = stat |= KBD_POINTED_MASK;  //ポイントする。前回もポイントされていた場合もある
  8325:       if (((stat & KBD_MOUSEDOWN_MASK) != 0) != (Mouse.musButtonLeft || Mouse.musButtonRight)) {  //マウスの押し下げ状態が変わった
  8326:         if (Mouse.musButtonLeft && (kbdPointedIndex == KBD_SHIFT_INDEX ||  //マウスで押されていなかったSHIFTキーが左ボタンで押された
  8327:                                     kbdPointedIndex == KBD_CTRL_INDEX) ||  //マウスで押されていなかったCTRLキーが左ボタンで押された
  8328:             Mouse.musButtonRight) {  //マウスで押されていなかったキーが右ボタンで押された
  8329:           stat ^= KBD_LOCKED_MASK;  //ロックを反転する
  8330:           kbdStat[kbdPointedIndex] = stat |= KBD_MOUSEDOWN_MASK;  //マウスで押す
  8331:           if ((stat & KBD_PRESSED_MASK) == 0) {  //押されていなかった
  8332:             kbdStat[kbdPointedIndex] = stat |= KBD_PRESSED_MASK;  //押す
  8333:             kbdPress (kbdPointedIndex);
  8334:           }
  8335:         } else if (Mouse.musButtonLeft) {  //マウスで押されていなかったキーが左ボタンで押された
  8336:           stat &= ~KBD_LOCKED_MASK;  //ロックを解除する
  8337:           kbdStat[kbdPointedIndex] = stat |= KBD_MOUSEDOWN_MASK;  //マウスで押す
  8338:           if ((stat & KBD_PRESSED_MASK) == 0) {  //押されていなかった
  8339:             kbdStat[kbdPointedIndex] = stat |= KBD_PRESSED_MASK;  //押す
  8340:             kbdPress (kbdPointedIndex);
  8341:           }
  8342:         } else {  //マウスで押されていたキーが離された
  8343:           kbdStat[kbdPointedIndex] = stat &= ~KBD_MOUSEDOWN_MASK;  //マウスを離す
  8344:           if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) {  //ロックされておらずキーもマウスも押されていない
  8345:             kbdStat[kbdPointedIndex] = stat &= ~KBD_PRESSED_MASK;  //離す
  8346:             kbdRelease (kbdPointedIndex);
  8347:           }
  8348:         }
  8349:         flag = true;
  8350:       }
  8351:     }
  8352:     if (flag) {
  8353:       kbdRepaint ();
  8354:     }
  8355:   }  //kbdHover(int,int)
  8356: 
  8357:   //kbdInput (ke, pressed)
  8358:   //  リアルキーボードから入力する
  8359:   public static void kbdInput (KeyEvent ke, boolean pressed) {
  8360:     int keyCode = ke.getKeyCode ();
  8361:     if (pressed) {
  8362:       if ((ke.getModifiersEx () & XEiJ.MNB_MODIFIERS) == XEiJ.MNB_MODIFIERS) {  //Alt+Shift
  8363:         switch (keyCode) {
  8364:         case KeyEvent.VK_C:  //Alt+Shift-C
  8365:           XEiJ.mnbConfigMenu.doClick ();
  8366:           return;
  8367:         case KeyEvent.VK_D:  //Alt+Shift-D
  8368:           XEiJ.mnbDisplayMenu.doClick ();
  8369:           return;
  8370:         case KeyEvent.VK_F:  //Alt+Shift-F
  8371:           XEiJ.mnbFileMenu.doClick ();
  8372:           return;
  8373:         case KeyEvent.VK_I:  //Alt+Shift-I
  8374:           XEiJ.mnbInputMenu.doClick ();
  8375:           return;
  8376:         case KeyEvent.VK_K:  //Alt+Shift-K
  8377:           if (kbdOn) {
  8378:             XEiJ.mnbNoKeyboardMenuItem.doClick ();
  8379:           } else if (kbdType == KBD_COMPACT_TYPE) {
  8380:             XEiJ.mnbCompactKeyboardMenuItem.doClick ();
  8381:           } else {
  8382:             XEiJ.mnbStandardKeyboardMenuItem.doClick ();
  8383:           }
  8384:           return;
  8385:         case KeyEvent.VK_L:  //Alt+Shift-L
  8386:           XEiJ.mnbLanguageMenu.doClick ();
  8387:           return;
  8388:         case KeyEvent.VK_M:  //Alt+Shift-M
  8389:           XEiJ.mpuMenu.doClick ();
  8390:           return;
  8391:         case KeyEvent.VK_O:  //Alt+Shift-O
  8392:           XEiJ.mpuOpt1ResetMenuItem.doClick ();
  8393:           return;
  8394:         case KeyEvent.VK_P:  //Alt+Shift-P
  8395:           if (XEiJ.mnbPlayMenuItem.isEnabled ()) {
  8396:             XEiJ.mnbPlayMenuItem.doClick ();
  8397:           }
  8398:           return;
  8399:         case KeyEvent.VK_Q:  //Alt+Shift-Q
  8400:           if (XEiJ.mnbQuitMenuItem.isEnabled ()) {
  8401:             XEiJ.mnbQuitMenuItem.doClick ();
  8402:           }
  8403:           return;
  8404:         case KeyEvent.VK_R:  //Alt+Shift-R
  8405:           XEiJ.mpuResetMenuItem.doClick ();
  8406:           return;
  8407:         case KeyEvent.VK_S:  //Alt+Shift-S
  8408:           if (XEiJ.mnbSoundMenu.isEnabled ()) {
  8409:             XEiJ.mnbSoundMenu.doClick ();
  8410:           }
  8411:           return;
  8412:         case KeyEvent.VK_T:  //Alt+Shift-T
  8413:           if (XEiJ.PNL_STEREOSCOPIC_ON) {
  8414:             XEiJ.mnbStereoscopicMenuItem.doClick ();
  8415:           }
  8416:           return;
  8417:         case KeyEvent.VK_V:  //Alt+Shift-V
  8418:           if (XEiJ.mnbPasteMenuItem.isEnabled ()) {
  8419:             XEiJ.mnbPasteMenuItem.doClick ();
  8420:           }
  8421:           return;
  8422:         case KeyEvent.VK_W:  //Alt+Shift-W
  8423:           if (XEiJ.mnbFitInWindowMenuItem.isEnabled ()) {  //ウインドウに合わせられるとき
  8424:             XEiJ.mnbFitInWindowMenuItem.doClick ();
  8425:           }
  8426:           return;
  8427:         case KeyEvent.VK_X:  //Alt+Shift-X
  8428:           XEiJ.mnbFixedScaleMenuItem.doClick ();
  8429:           return;
  8430:         }
  8431:       }  //if Alt+Shift
  8432:     }  //if pressed
  8433:     if (PPI.ppiInput (ke, pressed)) {  //JOYKEY
  8434:       return;
  8435:     }
  8436:     {
  8437:       //int keyCode = ke.getKeyLocation ();
  8438:       int keyLocation = ke.getKeyLocation ();
  8439:       int extendedOrRaw = XEiJ.prgIsMac ? ke.getExtendedKeyCode () : kbdGetRawCode (ke);
  8440:       int intCode = keyCode << 16 | extendedOrRaw << 4 | keyLocation;
  8441:       if ((keyCode & (XEiJ.prgIsMac ? 0x00000fff : 0x0000ffff)) != keyCode ||
  8442:           (extendedOrRaw & (XEiJ.prgIsMac ? 0x0f000fff : 0x00000fff)) != extendedOrRaw ||
  8443:           (keyLocation & 0x0000000f) != keyLocation ||
  8444:           intCode == 0) {  //範囲外
  8445:         System.out.printf ("KeyEvent: keyCode=0x%08x, extendedOrRaw=0x%08x, keyLocation=0x%08x\n",
  8446:                            keyCode, extendedOrRaw, keyLocation);
  8447:       } else {
  8448:         if (Mouse.musOutputButtonStatus) {
  8449:           System.out.printf ("intCode=0x%08x, pressed=%b\n", intCode, pressed);
  8450:         }
  8451:         for (int xo = 0; xo < KBD_ALL_KEYS; xo++) {
  8452:           if (kbdCurrentMap[3 * xo] == intCode ||  //1個目にある
  8453:               kbdCurrentMap[3 * xo + 1] == intCode ||  //2個目にある
  8454:               kbdCurrentMap[3 * xo + 2] == intCode) {  //3個目にある
  8455:             int eo = KBD_XO_TO_EO[xo];
  8456:             int stat = kbdStat[eo];
  8457:             //押す
  8458:             if (pressed) {  //キーが押された
  8459:               if ((stat & KBD_KEYDOWN_MASK) == 0) {  //キーで押されていなかった
  8460:                 kbdStat[eo] = stat |= KBD_KEYDOWN_MASK;  //キーで押す
  8461:                 if ((stat & KBD_PRESSED_MASK) == 0) {  //押されていなかった
  8462:                   kbdStat[eo] = stat |= KBD_PRESSED_MASK;  //押す
  8463:                   kbdPress (eo);
  8464:                   kbdRepaint ();
  8465:                 }
  8466:               }
  8467:             } else {  //キーが離された
  8468:               if ((stat & KBD_KEYDOWN_MASK) != 0) {  //キーで押されていた
  8469:                 kbdStat[eo] = stat &= ~KBD_KEYDOWN_MASK;  //キーを離す
  8470:                 if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) {  //ロックされておらずキーもマウスも押されていない
  8471:                   kbdStat[eo] = stat &= ~KBD_PRESSED_MASK;  //離す
  8472:                   kbdRelease (eo);
  8473:                   kbdRepaint ();
  8474:                 }
  8475:               }
  8476:             }
  8477:             return;
  8478:           }  //if
  8479:         }  //for xo
  8480:       }  //if
  8481:     }
  8482:     if (pressed) {
  8483:       if (keyCode == KeyEvent.VK_F11) {  //F11
  8484:         if ((ke.getModifiersEx () & InputEvent.SHIFT_DOWN_MASK) == InputEvent.SHIFT_DOWN_MASK) {  //Shift+F11
  8485:           Mouse.musSetSeamlessOn (!Mouse.musSeamlessOn);  //シームレス/エクスクルーシブを切り替える
  8486:           return;
  8487:         }
  8488:         if (kbdF11Mode == KBD_F11_DO_NOTHING) {  //何もしないときは全画面表示の解除もしない
  8489:         } else if (XEiJ.pnlFullscreenOn ||  //全画面表示のときF11キーは常に全画面表示の解除
  8490:             kbdF11Mode == KBD_F11_FULLSCREEN) {
  8491:           //全画面表示の切り替え
  8492:           if (XEiJ.mnbFullscreenMenuItem.isEnabled ()) {  //全画面表示に移行できて全画面表示の切り替えがJavaScriptに渡っていない
  8493:             if (!XEiJ.mnbFullscreenMenuItem.isSelected ()) {  //全画面表示になっていない
  8494:               XEiJ.mnbFullscreenMenuItem.doClick ();
  8495:             } else if (XEiJ.pnlPrevFitInWindowOn) {  //全画面表示になっていて全画面表示に移行する前にウインドウに合わせていた
  8496:               XEiJ.mnbFitInWindowMenuItem.doClick ();
  8497:             } else {  //全画面表示になっていて全画面表示に移行する前にウインドウに合わせていなかった
  8498:               XEiJ.mnbFixedScaleMenuItem.doClick ();
  8499:             }
  8500:           }
  8501:         } else if (kbdF11Mode == KBD_F11_SCREENSHOT) {
  8502:           kbdDoCapture ();
  8503:         } else if (kbdF11Mode == KBD_F11_GIFANIMATION) {
  8504:           GIFAnimation.gifStartRecording ();
  8505:         } else if (kbdF11Mode == KBD_F11_STOPANDSTART) {
  8506:           if (XEiJ.mpuTask == null) {  //Run
  8507:             XEiJ.mpuStart ();
  8508:           } else {  //Stop
  8509:             if (RootPointerList.RTL_ON) {
  8510:               if (RootPointerList.rtlCurrentSupervisorTaskIsStoppable ||
  8511:                   RootPointerList.rtlCurrentUserTaskIsStoppable) {
  8512:                 XEiJ.mpuStop (null);
  8513:               }
  8514:             } else {
  8515:               XEiJ.mpuStop (null);
  8516:             }
  8517:           }
  8518:         }
  8519:         return;
  8520:       } else if (keyCode == KeyEvent.VK_F12) {  //F12
  8521:         Mouse.musSetSeamlessOn (!Mouse.musSeamlessOn);  //シームレス/エクスクルーシブを切り替える
  8522:         return;
  8523:       }
  8524:     }  //if pressed
  8525:   }  //kbdInput(KeyEvent,boolean)
  8526: 
  8527:   public static void kbdCommandPress (int x68kCode) {
  8528:     if ((0x01 <= x68kCode && x68kCode <= 0x6c) ||
  8529:         (0x70 <= x68kCode && x68kCode <= 0x74)) {
  8530:       int eo = KBD_XO_TO_EO[x68kCode < 0x70 ? x68kCode - 1 : x68kCode - 4];
  8531:       int stat = kbdStat[eo];
  8532:       if ((stat & KBD_PRESSED_MASK) == 0) {  //押されていなかった
  8533:         kbdStat[eo] = stat |= KBD_PRESSED_MASK;  //押す
  8534:         kbdPress (eo);
  8535:         kbdRepaint ();
  8536:       }
  8537:     }
  8538:   }
  8539: 
  8540:   public static void kbdCommandRelease (int x68kCode) {
  8541:     if ((0x01 <= x68kCode && x68kCode <= 0x6c) ||
  8542:         (0x70 <= x68kCode && x68kCode <= 0x74)) {
  8543:       int eo = KBD_XO_TO_EO[x68kCode < 0x70 ? x68kCode - 1 : x68kCode - 4];
  8544:       int stat = kbdStat[eo];
  8545:       if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) {  //ロックされておらずキーもマウスも押されていない
  8546:         kbdStat[eo] = stat &= ~KBD_PRESSED_MASK;  //離す
  8547:         kbdRelease (eo);
  8548:         kbdRepaint ();
  8549:       }
  8550:     }
  8551:   }
  8552: 
  8553:   //rawCode = kbdGetRawCode (ke)
  8554:   //  KeyEventからrawCodeを取り出す
  8555:   public static int kbdGetRawCode (KeyEvent ke) {
  8556:     int rawCode = 0;
  8557:     //KeyEvent.paramString()で出力される文字列の中からrawCode=~を取り出す
  8558:     String s = ke.paramString ();
  8559:     int i = s.indexOf ("rawCode=");
  8560:     if (0 <= i) {
  8561:       i += 8;
  8562:       for (int k = s.length (); i < k; i++) {
  8563:         char c = s.charAt (i);
  8564:         if (c < '0' || '9' < c) {
  8565:           break;
  8566:         }
  8567:         rawCode = rawCode * 10 + (c - '0');
  8568:       }
  8569:     }
  8570:     return rawCode;
  8571:   }
  8572: 
  8573:   //kbdRePress()
  8574:   //  押されているキーを再入力する
  8575:   //  リセット後キー入力割り込みが許可されたら直ちに押されているキーを入力しないとOPT.2キーをロックしていてもROMデバッガが起動しない
  8576:   public static void kbdRePress () {
  8577:     for (int i = 0; i < KBD_ALL_KEYS; i++) {
  8578:       if (i != KBD_NUM_INDEX &&  //NUMキーは除く
  8579:           (kbdStat[i] & KBD_PRESSED_MASK) != 0) {  //押されている
  8580:         //キーコードを求める
  8581:         int code = ((kbdStat[KBD_NUM_INDEX] & KBD_LIGHTED_MASK) != 0 ? KBD_NUM_CODE : KBD_NORMAL_CODE)[i] & 0x7f;
  8582:         //MFPに転送する
  8583:         if (MC68901.MFP_KBD_ON) {
  8584:           MC68901.mfpKbdInput (code, true);
  8585:         } else {
  8586:           kbdTransfer (code, true);
  8587:         }
  8588:       }
  8589:     }
  8590:   }  //kbdRePress()
  8591: 
  8592:   //kbdPress (i)
  8593:   //  番号iのキーが押された
  8594:   public static void kbdPress (int i) {
  8595:     //キーコードを求める
  8596:     int code = ((kbdStat[KBD_NUM_INDEX] & KBD_LIGHTED_MASK) != 0 ? KBD_NUM_CODE : KBD_NORMAL_CODE)[i] & 0x7f;
  8597:     //NUMキーが押されたらLEDを反転する
  8598:     if (KBD_DEBUG_LED ? KBD_KANA_INDEX <= i && i <= KBD_NUM_INDEX : i == KBD_NUM_INDEX) {
  8599:       int stat = kbdStat[i];
  8600:       if ((stat & KBD_LIGHTED_MASK) != 0) {  //点灯→消灯
  8601:         stat &= ~(KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK);
  8602:       } else {  //消灯→点灯
  8603:         stat |= kbdLedBrightness << KBD_BRIGHTNESS_BIT | KBD_LIGHTED_MASK;
  8604:       }
  8605:       kbdStat[i] = stat;
  8606:       kbdRepaint ();
  8607:     }
  8608:     //MFPに転送する
  8609:     if (MC68901.MFP_KBD_ON) {
  8610:       MC68901.mfpKbdInput (code, true);
  8611:     } else {
  8612:       kbdTransfer (code, true);
  8613:     }
  8614:   }  //kbdPress(int)
  8615: 
  8616:   //kbdRelease (i)
  8617:   //  番号iのキーが離された
  8618:   public static void kbdRelease (int i) {
  8619:     //キーコードを求める
  8620:     int code = ((kbdStat[KBD_NUM_INDEX] & KBD_LIGHTED_MASK) != 0 ? KBD_NUM_CODE : KBD_NORMAL_CODE)[i] & 0x7f | 0x80;
  8621:     //MFPに転送する
  8622:     if (MC68901.MFP_KBD_ON) {
  8623:       MC68901.mfpKbdInput (code, false);
  8624:     } else {
  8625:       kbdTransfer (code, false);
  8626:     }
  8627:   }  //kbdRelease(int)
  8628: 
  8629:   //kbdTransfer (code, repeat)
  8630:   //  キーコードをMFPに転送する
  8631:   //  割り込み要求が競合しないようにコアのスレッドで行う
  8632:   public static void kbdTransfer (int code, boolean repeat) {
  8633:     XEiJ.tmrTimer.schedule (new KBDTask (code, repeat), 0L);
  8634:   }  //kbdTransfer(int)
  8635: 
  8636:   //kbdSetRepeatDelay (n)
  8637:   //  リピートディレイ
  8638:   //  200+100*n(ms)
  8639:   public static void kbdSetRepeatDelay (int n) {
  8640:     n &= 15;
  8641:     kbdRepeatDelay = 200 + 100 * n;
  8642:   }  //kbdSetRepeatDelay(int)
  8643: 
  8644:   //kbdSetRepeatInterval (n)
  8645:   //  リピートインターバル
  8646:   //  30+5*n^2(ms)
  8647:   public static void kbdSetRepeatInterval (int n) {
  8648:     n &= 15;
  8649:     kbdRepeatInterval = 30 + 5 * n * n;
  8650:   }  //kbdSetRepeatInterval(int)
  8651: 
  8652:   //kbdSetLedStatus (n)
  8653:   //  LEDキーのLEDの状態をまとめて設定する。各ビット0=点灯,1=消灯
  8654:   //  bit0  かな
  8655:   //  bit1  ローマ字
  8656:   //  bit2  コード入力
  8657:   //  bit3  CAPS
  8658:   //  bit4  INS
  8659:   //  bit5  ひらがな
  8660:   //  bit6  全角
  8661:   public static void kbdSetLedStatus (int n) {
  8662:     boolean flag = false;
  8663:     n = ~n & 127;
  8664:     if (KBD_ZKEY_ON) {
  8665:       if (kbdZKeyStatus != n) {
  8666:         kbdZKeyStatus = n;
  8667:         kbdZKeyUpdate ();
  8668:       }
  8669:     }
  8670:     for (int i = KBD_KANA_INDEX; i <= KBD_ZEN_INDEX; i++) {
  8671:       int mask = (n & 1) << KBD_LIGHTED_BIT;
  8672:       int stat = kbdStat[i];
  8673:       if ((stat & KBD_LIGHTED_MASK) != mask) {
  8674:         if (mask == 0) {  //点灯→消灯
  8675:           stat &= ~(KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK);
  8676:         } else {  //消灯→点灯
  8677:           stat |= kbdLedBrightness << KBD_BRIGHTNESS_BIT | KBD_LIGHTED_MASK;
  8678:         }
  8679:         kbdStat[i] = stat;
  8680:         flag = true;
  8681:       }
  8682:       n >>= 1;
  8683:     }
  8684:     if (flag) {
  8685:       kbdRepaint ();
  8686:     }
  8687:   }  //kbdSetLedStatus(int)
  8688: 
  8689:   //kbdSetLedBrightness (n)
  8690:   //  LEDキーのLEDの明るさを設定する
  8691:   //  n  0  明るい
  8692:   //     1  やや明るい
  8693:   //     2  やや暗い
  8694:   //     3  暗い
  8695:   public static void kbdSetLedBrightness (int n) {
  8696:     n &= 3;
  8697:     if (kbdLedBrightness != n) {
  8698:       kbdLedBrightness = n;
  8699:       boolean flag = false;
  8700:       for (int i = KBD_KANA_INDEX; i <= KBD_ZEN_INDEX; i++) {
  8701:         int stat = kbdStat[i];
  8702:         if ((stat & KBD_LIGHTED_MASK) != 0) {  //点灯→点灯
  8703:           stat &= ~(KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK);
  8704:           stat |= kbdLedBrightness << KBD_BRIGHTNESS_BIT | KBD_LIGHTED_MASK;
  8705:           kbdStat[i] = stat;
  8706:           flag = true;
  8707:         }
  8708:       }
  8709:       if (flag) {
  8710:         kbdRepaint ();
  8711:       }
  8712:       if (KBD_ZKEY_ON) {
  8713:         kbdZKeyUpdate ();
  8714:       }
  8715:     }
  8716:   }
  8717: 
  8718:   //kbdZKeyOpen ()
  8719:   //  Zキーボードのポートを開く
  8720:   public static void kbdZKeyOpen () {
  8721:     if (KBD_ZKEY_ON) {
  8722:       if (kbdZKeyPort == null) {
  8723:         //ポートを開く
  8724:         try {
  8725:           kbdZKeyPort = new ZKeyLEDPort (kbdZKeyDebugFlag);
  8726:         } catch (IOException ioe) {
  8727:           //ioe.printStackTrace ();
  8728:         }
  8729:         //開けなかったら終了
  8730:         if (kbdZKeyPort == null) {
  8731:           System.out.printf (Multilingual.mlnJapanese ?
  8732:                              "Z キーボードが接続されていないか制御できません\n" :
  8733:                              "Z Keyboard is not connected or cannot be controlled\n");
  8734:           kbdZKeyOnRequest = false;
  8735:           if (kbdZKeyConnectCheckBox != null) {
  8736:             kbdZKeyConnectCheckBox.setSelected (false);
  8737:           }
  8738:           return;
  8739:         }
  8740:         //送信スレッドを開始する
  8741:         senderStart ();
  8742:         //Zキーボード以外のキーマップを保存する
  8743:         System.arraycopy (kbdCurrentMap, 0,  //from
  8744:                           kbdCurrentMapNonZ, 0,  //to
  8745:                           KBD_DEFAULT_MAP_WIN.length);  //length
  8746:         //Zキーボードのキーマップを復元する
  8747:         System.arraycopy (kbdCurrentMapZ, 0,  //from
  8748:                           kbdCurrentMap, 0,  //to
  8749:                           KBD_DEFAULT_MAP_WIN.length);  //length
  8750:         //キーマップエディタの表示を更新する
  8751:         if (kbdEditor != null) {
  8752:           kbdEditor.updateTextAll ();
  8753:         }
  8754:         //NumLockを保存する
  8755:         kbdSavedNumLock = kbdZKeyPort.isKeyToggled (KeyEvent.VK_NUM_LOCK);
  8756:         //NumLockを点灯させる
  8757:         if (!kbdZKeyPort.isKeyToggled (KeyEvent.VK_NUM_LOCK)) {  //NumLockが消灯している
  8758:           kbdIgnoreNumLock = true;  //NumLockを1回無視する
  8759:           kbdZKeyPort.hitKey (KeyEvent.VK_NUM_LOCK);  //NumLockを叩いて点灯させる。直ちに発火することに注意
  8760:         }
  8761:       }
  8762:       if (!kbdZKeyOn) {
  8763:         System.out.printf (Multilingual.mlnJapanese ?
  8764:                            "Z キーボードの制御を開始しました\n" :
  8765:                            "Z keyboard control started\n");
  8766:         kbdZKeyOn = true;
  8767:         if (kbdZKeyDemoCheckBox != null) {
  8768:           kbdZKeyDemoCheckBox.setEnabled (true);
  8769:         }
  8770:       }
  8771:     }
  8772:   }
  8773: 
  8774:   //kbdZKeyClose ()
  8775:   //  Zキーボードのポートを閉じる
  8776:   public static void kbdZKeyClose () {
  8777:     if (KBD_ZKEY_ON) {
  8778:       //デモを終了する
  8779:       demoEnd ();
  8780:       if (kbdZKeyPort != null) {
  8781:         //NumLockを復元する
  8782:         if (kbdSavedNumLock != kbdZKeyPort.isKeyToggled (KeyEvent.VK_NUM_LOCK)) {  //保存したNumLockと違う
  8783:           kbdIgnoreNumLock = true;  //NumLockを1回無視する
  8784:           kbdZKeyPort.hitKey (KeyEvent.VK_NUM_LOCK);  //NumLockを叩いて戻す
  8785:         }
  8786:         //LEDを消灯する
  8787:         //senderSend (0L);
  8788:         //送信スレッドを終了する
  8789:         senderEnd ();
  8790:         //LEDを消灯する
  8791:         //  senderSendしてすぐsenderEndすると消灯する前に送信スレッドが終了してしまう
  8792:         kbdZKeyPort.send (0L);
  8793:         //ポートを閉じる
  8794:         kbdZKeyPort.close ();
  8795:         kbdZKeyPort = null;
  8796:         //Zキーボードのキーマップを保存する
  8797:         System.arraycopy (kbdCurrentMap, 0,  //from
  8798:                           kbdCurrentMapZ, 0,  //to
  8799:                           KBD_DEFAULT_MAP_WIN.length);  //length
  8800:         //Zキーボード以外のキーマップを復元する
  8801:         System.arraycopy (kbdCurrentMapNonZ, 0,  //from
  8802:                           kbdCurrentMap, 0,  //to
  8803:                           KBD_DEFAULT_MAP_WIN.length);  //length
  8804:         //キーマップエディタの表示を更新する
  8805:         if (kbdEditor != null) {
  8806:           kbdEditor.updateTextAll ();
  8807:         }
  8808:       }
  8809:       if (kbdZKeyOn) {
  8810:         System.out.printf (Multilingual.mlnJapanese ?
  8811:                            "Z キーボードの制御を終了しました\n" :
  8812:                            "Z keyboard control ended\n");
  8813:         kbdZKeyOn = false;
  8814:         if (kbdZKeyDemoCheckBox != null) {
  8815:           kbdZKeyDemoCheckBox.setEnabled (false);
  8816:         }
  8817:       }
  8818:     }
  8819:   }
  8820: 
  8821:   //kbdZKeyUpdate ()
  8822:   //  ZキーボードのLEDを更新する
  8823:   public static void kbdZKeyUpdate () {
  8824:     if (KBD_ZKEY_ON && kbdZKeyPort != null &&  //Zキーボード
  8825:         !kbdZKeyIOProgrammable &&  //ノーマルモード
  8826:         demoThread == null) {  //デモ中ではない
  8827:       long data = 0L;
  8828:       for (int i = 0; i < 7; i++) {
  8829:         if ((kbdZKeyStatus & (1 << i)) != 0) {
  8830:           data |= 1L << (8 * i);
  8831:         }
  8832:       }
  8833:       data *= (kbdLedBrightness == 0 ? 255 :
  8834:                kbdLedBrightness == 1 ? 128 :
  8835:                kbdLedBrightness == 2 ? 64 : 32);
  8836:       senderSend (data);
  8837:     }
  8838:   }
  8839: 
  8840: 
  8841: 
  8842:   //kbdZKeyIOReadByte (a)
  8843:   //  I/Oポートリードバイト
  8844:   public static int kbdZKeyIOReadByte (int a) {
  8845:     a &= 15;
  8846:     if (a < 8) {
  8847:       return (int) (kbdZKeyIOData >>> (a << 3)) & 0xff;
  8848:     } else if (a == 8) {
  8849:       return kbdZKeyIOProgrammable ? 1 : 0;
  8850:     } else {
  8851:       return 0xff;
  8852:     }
  8853:   }
  8854: 
  8855:   //kbdZKeyIOReadWord (a)
  8856:   //  I/Oポートリードワード
  8857:   public static int kbdZKeyIOReadWord (int a) {
  8858:     a &= 15;
  8859:     if (a < 8) {
  8860:       return (int) (kbdZKeyIOData >>> (a << 3)) & 0xffff;
  8861:     } else {
  8862:       return (kbdZKeyIOReadByte (a) << 8 |
  8863:               kbdZKeyIOReadByte (a + 1));
  8864:     }
  8865:   }
  8866: 
  8867:   //kbdZKeyIOReadLong (a)
  8868:   //  I/Oポートリードロング
  8869:   public static int kbdZKeyIOReadLong (int a) {
  8870:     a &= 15;
  8871:     if (a < 8) {
  8872:       return (int) (kbdZKeyIOData >>> (a << 3));
  8873:     } else {
  8874:       return (kbdZKeyIOReadByte (a) << 24 |
  8875:               kbdZKeyIOReadByte (a + 1) << 16 |
  8876:               kbdZKeyIOReadByte (a + 2) << 8 |
  8877:               kbdZKeyIOReadByte (a + 3));
  8878:     }
  8879:   }
  8880: 
  8881:   //kbdZKeyIOWriteByte (a, d)
  8882:   //  I/Oポートライトバイト
  8883:   public static void kbdZKeyIOWriteByte (int a, int d) {
  8884:     a &= 15;
  8885:     if (a < 8) {
  8886:       int bit = a << 3;
  8887:       kbdZKeyIOData = (kbdZKeyIOData & ~(0xffL << bit)) | (long) (d & 0xff) << bit;
  8888:     } else if (a == 8) {
  8889:       boolean programmable = (d & 1) != 0;  //ノーマルモードまたはプログラマブルモード
  8890:       if (kbdZKeyIOProgrammable != programmable) {
  8891:         kbdZKeyIOProgrammable = programmable;
  8892:         if (kbdZKeyIOProgrammable) {  //ノーマルモード→プログラマブルモード
  8893:         } else {  //プログラマブルモード→ノーマルモード
  8894:           kbdZKeyUpdate ();
  8895:         }
  8896:       }
  8897:       if (kbdZKeyIOProgrammable &&  //プログラマブルモード
  8898:           (d & 2) != 0 &&  //送信
  8899:           kbdZKeyPort != null &&  //ポートが開いている
  8900:           demoThread == null) {  //デモ中ではない
  8901:         long data = kbdZKeyIOData & 0x00ffffffffffffffL;
  8902:         senderSend (data);
  8903:       }
  8904:     }
  8905:   }
  8906: 
  8907:   //kbdZKeyIOWriteWord (a, d)
  8908:   //  I/Oポートライトワード
  8909:   public static void kbdZKeyIOWriteWord (int a, int d) {
  8910:     a &= 15;
  8911:     if (a < 8) {
  8912:       int bit = a << 3;
  8913:       kbdZKeyIOData = (kbdZKeyIOData & ~(0xffffL << bit)) | (long) (d & 0xffff) << bit;
  8914:     } else {
  8915:       kbdZKeyIOWriteByte (a, d >> 8);
  8916:       kbdZKeyIOWriteByte (a + 1, d);
  8917:     }
  8918:   }
  8919: 
  8920:   //kbdZKeyIOWriteLong (a, d)
  8921:   //  I/Oポートライトロング
  8922:   public static void kbdZKeyIOWriteLong (int a, int d) {
  8923:     a &= 15;
  8924:     if (a < 8) {
  8925:       int bit = a << 3;
  8926:       kbdZKeyIOData = (kbdZKeyIOData & ~(0xffffffffL << bit)) | ((long) d & 0xffffffffL) << bit;
  8927:     } else {
  8928:       kbdZKeyIOWriteByte (a, d >> 24);
  8929:       kbdZKeyIOWriteByte (a + 1, d >> 16);
  8930:       kbdZKeyIOWriteByte (a + 2, d >> 8);
  8931:       kbdZKeyIOWriteByte (a + 3, d);
  8932:     }
  8933:   }
  8934: 
  8935:   //kbdDoCapture ()
  8936:   //  キャプチャ実行
  8937:   //  カレントディレクトリのcaptureというサブディレクトリの中に1.png,2.png,...を作るだけ
  8938:   public static void kbdDoCapture () {
  8939:     try {
  8940:       File dir = new File ("capture");
  8941:       if (dir.exists ()) {  //captureがある
  8942:         if (!dir.isDirectory ()) {  //captureがあるがディレクトリでない
  8943:           return;
  8944:         }
  8945:       } else {  //captureがない
  8946:         if (!dir.mkdir ()) {  //captureがなくてディレクトリが作れない
  8947:           return;
  8948:         }
  8949:       }
  8950:       HashSet<String> nameSet = new HashSet<String> ();
  8951:       for (String name : dir.list ()) {
  8952:         nameSet.add (name);
  8953:       }
  8954:       int number = 0;
  8955:       for (String key : Settings.SGS_FRAME_KEYS) {
  8956:         BufferedImage image = RestorableFrame.rfmCapture (key);
  8957:         if (image != null) {  //ウインドウが開いていてキャプチャできた
  8958:           String name;
  8959:           do {
  8960:             number++;
  8961:             name = number + ".png";
  8962:           } while (!nameSet.add (name));  //セットに追加できるまで繰り返す
  8963:           name = "capture/" + name;
  8964:           if (XEiJ.saveImage (image, name)) {  //成功
  8965:             System.out.println (Multilingual.mlnJapanese ? name + " を更新しました" : name + " was updated");
  8966:           }
  8967:         }
  8968:       }
  8969:     } catch (Exception e) {
  8970:     }
  8971:   }  //kbdDoCapture()
  8972: 
  8973: 
  8974: 
  8975:   //$$KBT キー入力タスク
  8976:   public static class KBDTask extends TimerTask {
  8977:     public int code;
  8978:     public boolean repeat;
  8979:     public KBDTask (int c, boolean r) {
  8980:       code = c;
  8981:       repeat = r;
  8982:     }  //KBDTask(int,boolean)
  8983:     @Override public void run () {
  8984:       if (kbdRepeatTask != null) {
  8985:         //リピートを終了する
  8986:         //  開始と終了は同じスレッドで行わなければならない
  8987:         kbdRepeatTask.cancel ();
  8988:         kbdRepeatTask = null;
  8989:       }
  8990:       //MFPに転送する
  8991:       MC68901.mfpKeyboardInput (code);
  8992:       if (repeat) {
  8993:         //リピートを開始する
  8994:         XEiJ.tmrTimer.schedule (kbdRepeatTask = new KBDRepeatTask (code), (long) kbdRepeatDelay, (long) kbdRepeatInterval);
  8995:       }
  8996:     }  //run()
  8997:   }  //class KBDTask
  8998: 
  8999: 
  9000: 
  9001:   //$$KBR キーリピートタスク
  9002:   public static class KBDRepeatTask extends TimerTask {
  9003:     public int code;
  9004:     public KBDRepeatTask (int c) {
  9005:       code = c;
  9006:     }  //KBDRepeatTask(int)
  9007:     @Override public void run () {
  9008:       //MFPに転送する
  9009:       MC68901.mfpKeyboardInput (code);
  9010:     }  //run()
  9011:   }  //class KBDRepeatTask
  9012: 
  9013: 
  9014: 
  9015:   //ZキーボードLEDデモ
  9016:   static final long DEMO_INTERVAL = 40L;  //動作間隔(ms)
  9017:   static final int DEMO_LEVEL = 60;  //明るさの数
  9018:   static final int DEMO_BRIGHTEN = 3;  //明るくなる速さ
  9019:   static final int DEMO_DIM = -1;  //暗くなる速さ
  9020:   static final int DEMO_PROPAGATION = 10;  //明るくなり始めるのが伝わる速さ
  9021:   static final int DEMO_LED = 7;  //LEDの数
  9022:   static final int DEMO_INVISIBLE = 3;  //折り返す前後にある見えないLEDの数
  9023:   static long[] demoMap;  //明るさ→輝度
  9024:   static int[] demoBrightness;  //LED→明るさ
  9025:   static int[] demoDelta;  //LED→明るさの変化
  9026:   static int demoCounter;  //カウンタ
  9027:   static Thread demoThread;  //スレッド
  9028: 
  9029:   //初期化
  9030:   static void demoInit () {
  9031:     demoMap = new long[DEMO_LEVEL];
  9032:     for (int i = 0; i < DEMO_LEVEL; i++) {
  9033:       demoMap[i] = (long) (i * i * 255 / ((DEMO_LEVEL - 1) * (DEMO_LEVEL - 1)));
  9034:     }
  9035:     demoBrightness = new int[DEMO_LED];
  9036:     demoDelta = new int[DEMO_LED];
  9037:     demoThread = null;
  9038:   }
  9039: 
  9040:   //開始
  9041:   static void demoStart () {
  9042:     if (demoThread == null) {
  9043:       Arrays.fill (demoBrightness, 0);
  9044:       Arrays.fill (demoDelta, 0);
  9045:       demoCounter = 0;
  9046:       //スレッドを開始する
  9047:       demoThread = new DemoThread ();
  9048:       demoThread.start ();
  9049:     }
  9050:   }
  9051: 
  9052:   //終了
  9053:   static void demoEnd () {
  9054:     if (demoThread != null) {
  9055:       //スレッドに割り込む
  9056:       demoThread.interrupt ();
  9057:       //スレッドが終了するまで待つ
  9058:       try {
  9059:         demoThread.join (100);
  9060:       } catch (InterruptedException ie) {
  9061:       }
  9062:       demoThread = null;
  9063:     }
  9064:     //LEDを復元する
  9065:     kbdZKeyUpdate ();
  9066:   }
  9067: 
  9068:   //デモスレッド
  9069:   static class DemoThread extends Thread {
  9070:     @Override public void run () {
  9071:       //割り込まれるまで繰り返す
  9072:       for (;;) {
  9073:         //データを作る
  9074:         long data = 0L;
  9075:         for (int i = 0; i < DEMO_LED; i++) {
  9076:           data |= demoMap[demoBrightness[i]] << (i << 3);
  9077:         }
  9078:         //送信する
  9079:         senderSend (data);
  9080:         //明るさを変化させる
  9081:         for (int i = 0; i < DEMO_LED; i++) {  //LED毎に
  9082:           demoBrightness[i] += demoDelta[i];  //明るさを変化させる
  9083:           if (0 < demoDelta[i]) {  //明るくした
  9084:             if (DEMO_LEVEL - 1 <= demoBrightness[i]) {  //最大になった
  9085:               demoBrightness[i] = DEMO_LEVEL - 1;  //最大から
  9086:               demoDelta[i] = DEMO_DIM;  //暗くなり始める
  9087:             }
  9088:           } else if (demoDelta[i] < 0) {  //暗くした
  9089:             if (demoBrightness[i] <= 0) {  //最小になった
  9090:               demoBrightness[i] = 0;  //最小で
  9091:               demoDelta[i] = 0;  //止まる
  9092:             }
  9093:           }
  9094:         }
  9095:         //明るくなり始める
  9096:         if (demoCounter % DEMO_PROPAGATION == 0) {
  9097:           int k = demoCounter / DEMO_PROPAGATION;
  9098:           if (DEMO_INVISIBLE * 2 + DEMO_LED <= k) {  //後半
  9099:             k = (DEMO_INVISIBLE * 2 + DEMO_LED) * 2 - 1 - k;  //折り返す
  9100:           }
  9101:           if (DEMO_INVISIBLE <= k && k < DEMO_INVISIBLE + DEMO_LED) {
  9102:             demoDelta[k - DEMO_INVISIBLE] = DEMO_BRIGHTEN;  //明るくなり始める
  9103:           }
  9104:         }
  9105:         //カウンタを進める
  9106:         demoCounter++;
  9107:         if (demoCounter == DEMO_PROPAGATION * (DEMO_INVISIBLE * 2 + DEMO_LED) * 2) {
  9108:           demoCounter = 0;
  9109:         }
  9110:         //間隔を空ける
  9111:         try {
  9112:           Thread.sleep (DEMO_INTERVAL);
  9113:         } catch (InterruptedException ie) {
  9114:           break;
  9115:         }
  9116:       }
  9117:     }
  9118:   }
  9119: 
  9120: 
  9121: 
  9122:   //ZキーボードLEDデータ送信
  9123:   //  送信の間隔を保つ
  9124:   static final long SENDER_INTERVAL = 10L;  //送信の間隔(ms)
  9125:   static long senderLastData;  //最後に送信しようとしたデータ
  9126:   static long senderSentData;  //最後に送信したデータ
  9127:   static ArrayBlockingQueue<Long> senderQueue;  //送信するデータのキュー
  9128:   static Thread senderThread;  //スレッド
  9129: 
  9130:   //開始
  9131:   static void senderStart () {
  9132:     if (senderThread == null) {
  9133:       if (senderQueue == null) {
  9134:         senderLastData = -1L;
  9135:         senderSentData = -1L;
  9136:         //キューを作る
  9137:         senderQueue = new ArrayBlockingQueue<Long> (10);
  9138:       }
  9139:       //スレッドを開始する
  9140:       senderThread = new SenderThread ();
  9141:       senderThread.start ();
  9142:     }
  9143:   }
  9144: 
  9145:   //終了
  9146:   static void senderEnd () {
  9147:     if (senderThread != null) {
  9148:       //スレッドに割り込む
  9149:       senderThread.interrupt ();
  9150:       //スレッドが終了するまで待つ
  9151:       try {
  9152:         senderThread.join (100);
  9153:       } catch (InterruptedException ie) {
  9154:       }
  9155:       senderThread = null;
  9156:     }
  9157:   }
  9158: 
  9159:   //送信
  9160:   static void senderSend (long data) {
  9161:     if (senderLastData != data) {
  9162:       senderLastData = data;
  9163:       //キューに古いデータが残っていたら消す
  9164:       senderQueue.clear ();
  9165:       //キューに新しいデータを入れる
  9166:       senderQueue.offer (data);
  9167:     }
  9168:   }
  9169: 
  9170:   //送信スレッド
  9171:   static class SenderThread extends Thread {
  9172:     @Override public void run () {
  9173:       //割り込まれるまで繰り返す
  9174:       for (;;) {
  9175:         long data;
  9176:         //キューからデータを取り出す。取り出せるまでブロックする
  9177:         try {
  9178:           data = senderQueue.take ();
  9179:         } catch (InterruptedException ie) {
  9180:           break;
  9181:         }
  9182:         //送信する
  9183:         if (senderSentData != data) {
  9184:           senderSentData = data;
  9185:           kbdZKeyPort.send (data);
  9186:         }
  9187:         //間隔を空ける
  9188:         try {
  9189:           Thread.sleep (SENDER_INTERVAL);
  9190:         } catch (InterruptedException ie) {
  9191:           break;
  9192:         }
  9193:       }
  9194:     }
  9195:   }
  9196: 
  9197: 
  9198: 
  9199: }  //class Keyboard
  9200: 
  9201: 
  9202: