xeij/Keyboard.java
//========================================================================================
// Keyboard.java
// en:Keyboard
// ja:キーボード
// Copyright (C) 2003-2026 Makoto Kamada
//
// This file is part of the XEiJ (X68000 Emulator in Java).
// You can use, modify and redistribute the XEiJ if the conditions are met.
// Read the XEiJ License for more details.
// https://stdkmd.net/xeij/
//========================================================================================
//----------------------------------------------------------------------------------------
//! SHIFTとCTRLは左ボタンで押されただけでロックするようになっているが、
// これをプレフィックスにして次に他のキーが離された後にSHIFTとCTRLも自動的に離されるモードが欲しい
// 右ボタンで押されたときのロックは従来通り、ロックしたキーをクリックするまで押されっぱなしにする
//----------------------------------------------------------------------------------------
package xeij;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.im.*; //InputContext
import java.io.*;
import java.util.*;
import java.util.concurrent.*; //ArrayBlockingQueue
import javax.swing.*;
public class Keyboard {
//デバッグ
public static final boolean KBD_DEBUG_LED = false; //LEDキーが押されたらLEDを反転する
//種類
public static final int KBD_STANDARD_TYPE = 0; //Standard Keyboard
public static final int KBD_COMPACT_TYPE = 1; //Compact Keyboard
public static final int KBD_TYPES = 2; //キーボードの種類の数。Standard KeyboardとCompact Keyboardの2種類
//サイズ
// 6+6*94+6=576,2+4*25+2=104 Standard Keyboard
// 6+6*76+6=468,2+4*25+2=104 Compact Keyboard
public static final int KBD_COL_WIDTH = 6; //列の幅(px)。可変キーの幅の1/4
public static final int KBD_ROW_HEIGHT = 4; //行の高さ(px)。可変キーの高さの1/4
public static final int KBD_LED_WIDTH = 11; //LEDの幅
public static final int KBD_LED_HEIGHT = 4; //LEDのキートップ側の高さ
public static final int KBD_PADDING_TOP = 2; //パディング(px)
public static final int KBD_PADDING_RIGHT = 6;
public static final int KBD_PADDING_BOTTOM = 2;
public static final int KBD_PADDING_LEFT = 6;
public static final int KBD_TOUCHABLE_AREA = 1; //ポイントできる範囲。0=1段目から,1=2段目から,2=3段目から,3=キートップのみ
public static final int[] KBD_TYPE_COLS = { 94, 76 }; //種類→キーボードの幅(列数)
public static final int[] KBD_TYPE_ROWS = { 25, 25 }; //種類→キーボードの高さ(行数)
public static final int KBD_KEY_WIDTH = KBD_COL_WIDTH * 4 - 1; //可変キーとLEDキーの幅
public static final int KBD_KEY_HEIGHT = KBD_ROW_HEIGHT * 4 - 1; //可変キーとLEDキーの高さ
//スタイル
public static final int KBD_NONE_STYLE = 0; //キーなし
public static final int KBD_NORMAL_STYLE = 1; //ノーマル
public static final int KBD_FUNCTION_STYLE = 2; //キーの上端を1/2行削る。63~6C:F1~F10
public static final int KBD_NARROWER_STYLE = 3; //キートップの左右を1/2列ずつ削る。55:XF1,56:XF2,57:XF3(Compact),58:XF4(Standard),59:XF5(Standard)
public static final int KBD_NARROW_STYLE = 4; //キートップの左右を1列ずつ削る。10:TAB,57:XF3(Standard),71:CTRL,72:OPT.1,73:OPT.2
public static final int KBD_SHORTER_STYLE = 5; //キートップの上下を1行ずつ削る。4E:ENTER(Standard)
public static final int KBD_SHORT_STYLE = 6; //キートップの上下を2行ずつ削る。3B:LEFT(Standard),3D:RIGHT(Standard)
public static final int KBD_RETURN_STYLE = 7; //レクタングルの左下を1列x4行削る。キートップの左右を1列ずつ削る。1D:RETURN
public static final int KBD_SHIFT_STYLE = 8; //レクタングルの左右を9列ずつ残して中央を削る。70:SHIFT
//文字
public static final boolean KBD_USE_ROM_FONT = false; //可変キーの文字をROMフォントにする。ROMフォントが生成済みでなければならない
//色
public static final int KBD_LETTER_COLOR = 14; //文字
public static final int KBD_TOP_LEFT_COLOR = 10; //ボーダー左上
public static final int KBD_TOP_COLOR = 8; //ボーダー上
public static final int KBD_LEFT_COLOR = 8; //ボーダー左
public static final int KBD_POINTED_COLOR = 8; //キートップ(pointed)
public static final int KBD_TOP_RIGHT_COLOR = 6; //ボーダー右上
public static final int KBD_BOTTOM_LEFT_COLOR = 6; //ボーダー左下
public static final int KBD_KEYTOP_COLOR = 6; //キートップ
public static final int KBD_RIGHT_COLOR = 4; //ボーダー右
public static final int KBD_BOTTOM_COLOR = 4; //ボーダー下
public static final int KBD_BOTTOM_RIGHT_COLOR = 2; //ボーダー右下
public static final int KBD_SHADOW_COLOR = 2; //文字の影
public static final int KBD_BACKGROUND_COLOR = 0; //背景
public static final int KBD_HOLE_COLOR = 0; //押し下げられたキーの周囲の隙間
//
public static int kbdLetterRGB;
public static int kbdTopLeftRGB;
public static int kbdTopRGB;
public static int kbdLeftRGB;
public static int kbdPointedRGB;
public static int kbdTopRightRGB;
public static int kbdBottomLeftRGB;
public static int kbdKeytopRGB;
public static int kbdRightRGB;
public static int kbdBottomRGB;
public static int kbdBottomRightRGB;
public static int kbdShadowRGB;
public static int kbdBackgroundRGB;
public static int kbdHoleRGB;
//
public static final int KBD_RED_OFF_KEYTOP_COLOR = Color.HSBtoRGB (0.99F, 0.50F, 0.40F); //赤色LED、消灯、キートップ側
public static final int KBD_RED_OFF_BORDER_COLOR = Color.HSBtoRGB (0.99F, 0.50F, 0.20F); //赤色LED、消灯、ボーダー側
public static final int KBD_RED_ON_KEYTOP_COLOR_0 = Color.HSBtoRGB (0.99F, 1.00F, 1.00F - 0.150F * 0); //赤色LED、明るい、キートップ側
public static final int KBD_RED_ON_BORDER_COLOR_0 = Color.HSBtoRGB (0.99F, 1.00F, 0.50F - 0.075F * 0); //赤色LED、明るい、ボーダー側
public static final int KBD_RED_ON_KEYTOP_COLOR_1 = Color.HSBtoRGB (0.99F, 1.00F, 1.00F - 0.150F * 1); //赤色LED、やや明るい、キートップ側
public static final int KBD_RED_ON_BORDER_COLOR_1 = Color.HSBtoRGB (0.99F, 1.00F, 0.50F - 0.075F * 1); //赤色LED、やや明るい、ボーダー側
public static final int KBD_RED_ON_KEYTOP_COLOR_2 = Color.HSBtoRGB (0.99F, 1.00F, 1.00F - 0.150F * 2); //赤色LED、やや暗い、キートップ側
public static final int KBD_RED_ON_BORDER_COLOR_2 = Color.HSBtoRGB (0.99F, 1.00F, 0.50F - 0.075F * 2); //赤色LED、やや暗い、ボーダー側
public static final int KBD_RED_ON_KEYTOP_COLOR_3 = Color.HSBtoRGB (0.99F, 1.00F, 1.00F - 0.150F * 3); //赤色LED、暗い、キートップ側
public static final int KBD_RED_ON_BORDER_COLOR_3 = Color.HSBtoRGB (0.99F, 1.00F, 0.50F - 0.075F * 3); //赤色LED、暗い、ボーダー側
public static final int KBD_GREEN_OFF_KEYTOP_COLOR = Color.HSBtoRGB (0.24F, 0.50F, 0.40F); //緑色LED、消灯、キートップ側
public static final int KBD_GREEN_OFF_BORDER_COLOR = Color.HSBtoRGB (0.24F, 0.50F, 0.20F); //緑色LED、消灯、ボーダー側
public static final int KBD_GREEN_ON_KEYTOP_COLOR_0 = Color.HSBtoRGB (0.24F, 1.00F, 1.00F - 0.150F * 0); //緑色LED、明るい、キートップ側
public static final int KBD_GREEN_ON_BORDER_COLOR_0 = Color.HSBtoRGB (0.24F, 1.00F, 0.50F - 0.075F * 0); //緑色LED、明るい、ボーダー側
public static final int KBD_GREEN_ON_KEYTOP_COLOR_1 = Color.HSBtoRGB (0.24F, 1.00F, 1.00F - 0.150F * 1); //緑色LED、やや明るい、キートップ側
public static final int KBD_GREEN_ON_BORDER_COLOR_1 = Color.HSBtoRGB (0.24F, 1.00F, 0.50F - 0.075F * 1); //緑色LED、やや明るい、ボーダー側
public static final int KBD_GREEN_ON_KEYTOP_COLOR_2 = Color.HSBtoRGB (0.24F, 1.00F, 1.00F - 0.150F * 2); //緑色LED、やや暗い、キートップ側
public static final int KBD_GREEN_ON_BORDER_COLOR_2 = Color.HSBtoRGB (0.24F, 1.00F, 0.50F - 0.075F * 2); //緑色LED、やや暗い、ボーダー側
public static final int KBD_GREEN_ON_KEYTOP_COLOR_3 = Color.HSBtoRGB (0.24F, 1.00F, 1.00F - 0.150F * 3); //緑色LED、暗い、キートップ側
public static final int KBD_GREEN_ON_BORDER_COLOR_3 = Color.HSBtoRGB (0.24F, 1.00F, 0.50F - 0.075F * 3); //緑色LED、暗い、ボーダー側
//状態
// stat = KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK | KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK
public static final int KBD_POINTED_BIT = 0; //bit0 1=ポイントされている。ポイントされているキーは1つしか存在しない
public static final int KBD_POINTED_MASK = 0b00000001;
public static final int KBD_PRESSED_BIT = 1; //bit1 1=押されている。ロックされているか、キーで押されているか、マウスで押されている
public static final int KBD_PRESSED_MASK = 0b00000010;
public static final int KBD_LIGHTED_BIT = 2; //bit2 (LEDキーのとき)1=LEDが点灯している
public static final int KBD_LIGHTED_MASK = 0b00000100;
public static final int KBD_BRIGHTNESS_BIT = 3; //bit4-3 (LEDキーかつLEDが点灯しているとき)0=明るい,1=やや明るい,2=やや暗い,3=暗い
public static final int KBD_BRIGHTNESS_MASK = 0b00011000;
// △ここまで描画に使う。ビット位置に依存していることに注意
// ▽ここから描画に使わない
public static final int KBD_MOUSEDOWN_BIT = 5; //bit3 1=マウスで押されている
public static final int KBD_MOUSEDOWN_MASK = 0b00100000;
public static final int KBD_KEYDOWN_BIT = 6; //bit4 1=キーで押されている
public static final int KBD_KEYDOWN_MASK = 0b01000000;
public static final int KBD_LOCKED_BIT = 7; //bit5 1=ロックされている
public static final int KBD_LOCKED_MASK = 0b10000000;
// LEDキー
// lighted||pointedかどうかで可変キーに表示する文字を変更する
// KBD_LED_TEST << (stat & (kbdStat[KBD_NUM_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0
// その他のモードキー
// pressed||pointedかどうかで可変キーに表示する文字を変更する
// KBD_MODE_TEST << (stat & (kbdStat[KBD_NUM_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0
public static final int KBD_LED_TEST = 0b01011010_01011010_01011010_01011010;
public static final int KBD_MODE_TEST = 0b01100110_01100110_01100110_01100110;
//数
public static final int KBD_VAR_KEYS = 48; //可変キーの数
public static final int KBD_LED_KEYS = 8; //LEDキーの数
public static final int KBD_FIX_KEYS = 57; //固定キーの数
public static final int KBD_ALL_KEYS = KBD_VAR_KEYS + KBD_LED_KEYS + KBD_FIX_KEYS; //キーの数
//番号
// 可変キー,LEDキー,固定キーの順序でスキャンコード順に割り当てた番号
// RETURNキーの上下とSHIFTキーの左右は形を特別扱いにすることで1個の番号で扱う
public static final int KBD_KANA_INDEX = 48; //かなキーの番号
public static final int KBD_ROMA_INDEX = 49; //ローマ字キーの番号
public static final int KBD_CODE_INDEX = 50; //コード入力キーの番号
public static final int KBD_CAPS_INDEX = 51; //CAPSキーの番号
public static final int KBD_HIRA_INDEX = 53; //ひらがなキーの番号
public static final int KBD_ZEN_INDEX = 54; //全角キーの番号
public static final int KBD_NUM_INDEX = 55; //NUMキーの番号
public static final int KBD_RETURN_INDEX = 59; //RETURNキーの番号
public static final int KBD_SHIFT_INDEX = 109; //SHIFTキーの番号
public static final int KBD_CTRL_INDEX = 110; //CTRLキーの番号
public static final int KBD_OPT1_INDEX = 111; //OPT.1キーの番号
//番号→スキャンコード(NUM OFF)
/*
public static final byte[] KBD_NORMAL_CODE = {
// |1| | | | | | | | | | | | |NUM
// | |1| | | | | | | | | | | |CTRL
// | | |1| | | | | | | | | | |コード入力
// | | | |0|0|0|0|0|0| | | | |OPT.1
// | | | |1|1|1|1| | | | | | |かな。ひらがな+全角→ひらがな
// | | | | | | | |1|1| | | | |ローマ字
// | | | |0|0|1|1| | | | | | |五十音
// | | | | | | | | | |0|0|1|1|CAPS
// | | | |0|1|0|1|0|1|0|1|0|1|SHIFT
0x02, // 0 0 | | |1|ヌ|ヌ|ア|ァ|1|!|1|!|1|!|
0x03, // 1 1 | | |2|フ|フ|イ|ィ|2|"|2|"|2|"|
0x04, // 2 2 | | |3|ア|ァ|ウ|ゥ|3|#|3|#|3|#|
0x05, // 3 3 | | |4|ウ|ゥ|エ|ェ|4|$|4|$|4|$|
0x06, // 4 4 | | |5|エ|ェ|オ|ォ|5|%|5|%|5|%|
0x07, // 5 5 | | |6|オ|ォ|ナ|ナ|6|&|6|&|6|&|
0x08, // 6 6 |7| |7|ヤ|ャ|ニ|ニ|7|'|7|'|7|'|
0x09, // 7 7 |8| |8|ユ|ュ|ヌ|ヌ|8|(|8|(|8|(|
0x0a, // 8 8 |9| |9|ヨ|ョ|ネ|ネ|9|)|9|)|9|)|
0x0b, // 9 9 |/| |0|ワ|ヲ|ノ|ヲ|0| |0| |0| |
0x0c, // 10 10 |*| | |ホ|ホ|ラ|ラ|ー|=|-|=|-|=|
0x0d, // 11 11 | |^| |ヘ|ヘ|リ|リ|^|~|^|~|^|~|
0x0e, // 12 12 | |\| |ー|ー|ル|ル|\|||\|||\|||
0x11, // 13 13 | |Q| |タ|タ|カ|カ|Q|Q|q|Q|Q|q|
0x12, // 14 14 | |W| |テ|テ|キ|キ|W|W|w|W|W|w|
0x13, // 15 15 | |E|e|イ|ィ|ク|ク|E|e|e|E|E|e|
0x14, // 16 16 | |R| |ス|ス|ケ|ケ|R|R|r|R|R|r|
0x15, // 17 17 | |T| |カ|カ|コ|コ|T|T|t|T|T|t|
0x16, // 18 18 | |Y| |ン|ン|ハ|ハ|Y|Y|y|Y|Y|y|
0x17, // 19 19 |4|U| |ナ|ナ|ヒ|ヒ|U|u|u|U|U|u|
0x18, // 20 20 |5|I| |ニ|ニ|フ|フ|I|i|i|I|I|i|
0x19, // 21 21 |6|O| |ラ|ラ|ヘ|ヘ|O|o|o|O|O|o|
0x1a, // 22 22 |-|P| |セ|セ|ホ|ホ|P|P|p|P|P|p|
0x1b, // 23 23 | | | |゙|゙|レ|レ|@|`|@|`|@|`|
0x1c, // 24 24 | |[| |゚|「|ロ|「|「|{|[|{|[|{|
0x1e, // 25 25 | |A|a|チ|チ|サ| |A|a|a|A|A|a| かな+五十音+SHIFT→0xa0
0x1f, // 26 26 | |S| |ト|ト|シ|シ|S|S|s|S|S|s|
0x20, // 27 27 | |D|d|シ|シ|ス|ス|D|D|d|D|D|d|
0x21, // 28 28 | |F|f|ハ|ハ|セ|セ|F|F|f|F|F|f|
0x22, // 29 29 | |G| |キ|キ|ソ|ソ|G|G|g|G|G|g|
0x23, // 30 30 | |H| |ク|ク|マ|マ|H|H|h|H|H|h|
0x24, // 31 31 |1|J| |マ|マ|ミ|ミ|J|J|j|J|J|j|
0x25, // 32 32 |2|K| |ノ|ノ|ム|ム|K|K|k|K|K|k|
0x26, // 33 33 |3|L| |リ|リ|メ|メ|L|L|l|L|L|l|
0x27, // 34 34 |+| | |レ|レ|モ|モ|;|+|;|+|;|+|
0x28, // 35 35 | | | |ケ|ケ|゙|ー|:|*|:|*|:|*|
0x29, // 36 36 | |]| |ム|」|゚|」|」|}|]|}|]|}|
0x2a, // 37 37 | |Z| |ツ|ッ|タ|タ|Z|z|z|Z|Z|z|
0x2b, // 38 38 | |X| |サ|サ|チ|チ|X|X|x|X|X|x|
0x2c, // 39 39 | |C|c|ソ|ソ|ツ|ッ|C|C|c|C|C|c|
0x2d, // 40 40 | |V| |ヒ|ヒ|テ|テ|V|V|v|V|V|v|
0x2e, // 41 41 | |B|b|コ|コ|ト|ト|B|B|b|B|B|b|
0x2f, // 42 42 | |N| |ミ|ミ|ヤ|ャ|N|N|n|N|N|n|
0x30, // 43 43 |0|M| |モ|モ|ユ|ュ|M|M|m|M|M|m|
0x31, // 44 44 |,| | |ネ|、|ヨ|ョ|、|<|,|<|,|<|
0x32, // 45 45 |.| | |ル|。|ワ|、|。|>|.|>|.|>|
0x33, // 46 46 |=| | |メ|・|ヲ|。|・|?|/|?|/|?|
0x34, // 47 47 |E|_| |ロ| |ン|・| |_| |_| |_| NUM→ENTER、かな+SHIFT→0xa0
0x5a, // 48 0 かな
0x5b, // 49 1 ローマ字
0x5c, // 50 2 コード入力
0x5d, // 51 3 CAPS
0x5e, // 52 4 INS
0x5f, // 53 5 ひらがな
0x60, // 54 6 全角
0x74, // 55 7 NUM
0x01, // 56 0 ESC
0x0f, // 57 1 BS
0x10, // 58 2 TAB
0x1d, // 59 3 RETURN
0x35, // 60 4 Space
0x36, // 61 5 HOME
0x37, // 62 6 DEL
0x38, // 63 7 ROLLUP
0x39, // 64 8 ROLLDOWN
0x3a, // 65 9 UNDO
0x3b, // 66 10 ←
0x3c, // 67 11 ↑
0x3d, // 68 12 →
0x3e, // 69 13 ↓
0x3f, // 70 14 CLR
0x40, // 71 15 /
0x41, // 72 16 *
0x42, // 73 17 -
0x43, // 74 18 7
0x44, // 75 19 8
0x45, // 76 20 9
0x46, // 77 21 +
0x47, // 78 22 4
0x48, // 79 23 5
0x49, // 80 24 6
0x4a, // 81 25 =
0x4b, // 82 26 1
0x4c, // 83 27 2
0x4d, // 84 28 3
0x4e, // 85 29 ENTER
0x4f, // 86 30 0
0x50, // 87 31 ,
0x51, // 88 32 .
0x52, // 89 33 記号入力
0x53, // 90 34 登録
0x54, // 91 35 HELP
0x55, // 92 36 XF1
0x56, // 93 37 XF2
0x57, // 94 38 XF3
0x58, // 95 39 XF4
0x59, // 96 40 XF5
0x61, // 97 41 BREAK
0x62, // 98 42 COPY
0x63, // 99 43 F1
0x64, //100 44 F2
0x65, //101 45 F3
0x66, //102 46 F4
0x67, //103 47 F5
0x68, //104 48 F6
0x69, //105 49 F7
0x6a, //106 50 F8
0x6b, //107 51 F9
0x6c, //108 52 F10
0x70, //109 53 SHIFT
0x71, //110 54 CTRL
0x72, //111 55 OPT.1
0x73, //112 56 OPT.2
};
*/
// perl misc/itob.pl xeij/Keyboard.java KBD_NORMAL_CODE
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);
//番号→スキャンコード(NUM ON)
/*
public static final byte[] KBD_NUM_CODE = {
// |1| | | | | | | | | | | | |NUM
// | |1| | | | | | | | | | | |CTRL
// | | |1| | | | | | | | | | |コード入力
// | | | |0|0|0|0|0|0| | | | |OPT.1
// | | | |1|1|1|1| | | | | | |かな。ひらがな+全角→ひらがな
// | | | | | | | |1|1| | | | |ローマ字
// | | | |0|0|1|1| | | | | | |五十音
// | | | | | | | | | |0|0|1|1|CAPS
// | | | |0|1|0|1|0|1|0|1|0|1|SHIFT
0x02, // 0 0 | | |1|ヌ|ヌ|ア|ァ|1|!|1|!|1|!|
0x03, // 1 1 | | |2|フ|フ|イ|ィ|2|"|2|"|2|"|
0x04, // 2 2 | | |3|ア|ァ|ウ|ゥ|3|#|3|#|3|#|
0x05, // 3 3 | | |4|ウ|ゥ|エ|ェ|4|$|4|$|4|$|
0x06, // 4 4 | | |5|エ|ェ|オ|ォ|5|%|5|%|5|%|
0x07, // 5 5 | | |6|オ|ォ|ナ|ナ|6|&|6|&|6|&|
0x43, // 6 6 |7| |7|ヤ|ャ|ニ|ニ|7|'|7|'|7|'|
0x44, // 7 7 |8| |8|ユ|ュ|ヌ|ヌ|8|(|8|(|8|(|
0x45, // 8 8 |9| |9|ヨ|ョ|ネ|ネ|9|)|9|)|9|)|
0x40, // 9 9 |/| |0|ワ|ヲ|ノ|ヲ|0| |0| |0| |
0x41, // 10 10 |*| | |ホ|ホ|ラ|ラ|ー|=|-|=|-|=|
0x0d, // 11 11 | |^| |ヘ|ヘ|リ|リ|^|~|^|~|^|~|
0x0e, // 12 12 | |\| |ー|ー|ル|ル|\|||\|||\|||
0x11, // 13 13 | |Q| |タ|タ|カ|カ|Q|Q|q|Q|Q|q|
0x12, // 14 14 | |W| |テ|テ|キ|キ|W|W|w|W|W|w|
0x13, // 15 15 | |E|e|イ|ィ|ク|ク|E|e|e|E|E|e|
0x14, // 16 16 | |R| |ス|ス|ケ|ケ|R|R|r|R|R|r|
0x15, // 17 17 | |T| |カ|カ|コ|コ|T|T|t|T|T|t|
0x16, // 18 18 | |Y| |ン|ン|ハ|ハ|Y|Y|y|Y|Y|y|
0x47, // 19 19 |4|U| |ナ|ナ|ヒ|ヒ|U|u|u|U|U|u|
0x48, // 20 20 |5|I| |ニ|ニ|フ|フ|I|i|i|I|I|i|
0x49, // 21 21 |6|O| |ラ|ラ|ヘ|ヘ|O|o|o|O|O|o|
0x42, // 22 22 |-|P| |セ|セ|ホ|ホ|P|P|p|P|P|p|
0x1b, // 23 23 | | | |゙|゙|レ|レ|@|`|@|`|@|`|
0x1c, // 24 24 | |[| |゚|「|ロ|「|「|{|[|{|[|{|
0x1e, // 25 25 | |A|a|チ|チ|サ| |A|a|a|A|A|a| かな+五十音+SHIFT→0xa0
0x1f, // 26 26 | |S| |ト|ト|シ|シ|S|S|s|S|S|s|
0x20, // 27 27 | |D|d|シ|シ|ス|ス|D|D|d|D|D|d|
0x21, // 28 28 | |F|f|ハ|ハ|セ|セ|F|F|f|F|F|f|
0x22, // 29 29 | |G| |キ|キ|ソ|ソ|G|G|g|G|G|g|
0x23, // 30 30 | |H| |ク|ク|マ|マ|H|H|h|H|H|h|
0x4b, // 31 31 |1|J| |マ|マ|ミ|ミ|J|J|j|J|J|j|
0x4c, // 32 32 |2|K| |ノ|ノ|ム|ム|K|K|k|K|K|k|
0x4d, // 33 33 |3|L| |リ|リ|メ|メ|L|L|l|L|L|l|
0x46, // 34 34 |+| | |レ|レ|モ|モ|;|+|;|+|;|+|
0x28, // 35 35 | | | |ケ|ケ|゙|ー|:|*|:|*|:|*|
0x29, // 36 36 | |]| |ム|」|゚|」|」|}|]|}|]|}|
0x2a, // 37 37 | |Z| |ツ|ッ|タ|タ|Z|z|z|Z|Z|z|
0x2b, // 38 38 | |X| |サ|サ|チ|チ|X|X|x|X|X|x|
0x2c, // 39 39 | |C|c|ソ|ソ|ツ|ッ|C|C|c|C|C|c|
0x2d, // 40 40 | |V| |ヒ|ヒ|テ|テ|V|V|v|V|V|v|
0x2e, // 41 41 | |B|b|コ|コ|ト|ト|B|B|b|B|B|b|
0x2f, // 42 42 | |N| |ミ|ミ|ヤ|ャ|N|N|n|N|N|n|
0x4f, // 43 43 |0|M| |モ|モ|ユ|ュ|M|M|m|M|M|m|
0x50, // 44 44 |,| | |ネ|、|ヨ|ョ|、|<|,|<|,|<|
0x51, // 45 45 |.| | |ル|。|ワ|、|。|>|.|>|.|>|
0x4a, // 46 46 |=| | |メ|・|ヲ|。|・|?|/|?|/|?|
0x4e, // 47 47 |E|_| |ロ| |ン|・| |_| |_| |_| NUM→ENTER、かな+SHIFT→0xa0
0x5a, // 48 0 かな
0x5b, // 49 1 ローマ字
0x5c, // 50 2 コード入力
0x5d, // 51 3 CAPS
0x5e, // 52 4 INS
0x5f, // 53 5 ひらがな
0x60, // 54 6 全角
0x74, // 55 7 NUM
0x01, // 56 0 ESC
0x0f, // 57 1 BS
0x10, // 58 2 TAB
0x1d, // 59 3 RETURN
0x35, // 60 4 Space
0x36, // 61 5 HOME
0x37, // 62 6 DEL
0x38, // 63 7 ROLLUP
0x39, // 64 8 ROLLDOWN
0x3a, // 65 9 UNDO
0x3b, // 66 10 ←
0x3c, // 67 11 ↑
0x3d, // 68 12 →
0x3e, // 69 13 ↓
0x3f, // 70 14 CLR
0x40, // 71 15 /
0x41, // 72 16 *
0x42, // 73 17 -
0x43, // 74 18 7
0x44, // 75 19 8
0x45, // 76 20 9
0x46, // 77 21 +
0x47, // 78 22 4
0x48, // 79 23 5
0x49, // 80 24 6
0x4a, // 81 25 =
0x4b, // 82 26 1
0x4c, // 83 27 2
0x4d, // 84 28 3
0x4e, // 85 29 ENTER
0x4f, // 86 30 0
0x50, // 87 31 ,
0x51, // 88 32 .
0x52, // 89 33 記号入力
0x53, // 90 34 登録
0x54, // 91 35 HELP
0x55, // 92 36 XF1
0x56, // 93 37 XF2
0x57, // 94 38 XF3
0x58, // 95 39 XF4
0x59, // 96 40 XF5
0x61, // 97 41 BREAK
0x62, // 98 42 COPY
0x63, // 99 43 F1
0x64, //100 44 F2
0x65, //101 45 F3
0x66, //102 46 F4
0x67, //103 47 F5
0x68, //104 48 F6
0x69, //105 49 F7
0x6a, //106 50 F8
0x6b, //107 51 F9
0x6c, //108 52 F10
0x70, //109 53 SHIFT
0x71, //110 54 CTRL
0x72, //111 55 OPT.1
0x73, //112 56 OPT.2
};
*/
// perl misc/itob.pl xeij/Keyboard.java KBD_NUM_CODE
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);
//種類→固定キーの番号→固定キーのスタイル
// Standard KeyboardとCompact KeyboardではXFnキーやOPT.nキーの形が異なるので種類毎にスタイルデータを用意する
public static final int[][] KBD_TYPE_FIX_STYLE = {
//Standard Keyboard
{
KBD_NORMAL_STYLE , //0x01 0 ESC
KBD_NARROW_STYLE , //0x0f 1 BS
KBD_NARROW_STYLE , //0x10 2 TAB
KBD_RETURN_STYLE , //0x1d 3 RETURN
KBD_NORMAL_STYLE , //0x35 4 Space
KBD_NORMAL_STYLE , //0x36 5 HOME
KBD_NORMAL_STYLE , //0x37 6 DEL
KBD_NORMAL_STYLE , //0x38 7 ROLLUP
KBD_NORMAL_STYLE , //0x39 8 ROLLDOWN
KBD_NORMAL_STYLE , //0x3a 9 UNDO
KBD_SHORT_STYLE , //0x3b 10 ←
KBD_NORMAL_STYLE , //0x3c 11 ↑
KBD_SHORT_STYLE , //0x3d 12 →
KBD_NORMAL_STYLE , //0x3e 13 ↓
KBD_NORMAL_STYLE , //0x3f 14 CLR
KBD_NORMAL_STYLE , //0x40 15 /
KBD_NORMAL_STYLE , //0x41 16 *
KBD_NORMAL_STYLE , //0x42 17 -
KBD_NORMAL_STYLE , //0x43 18 7
KBD_NORMAL_STYLE , //0x44 19 8
KBD_NORMAL_STYLE , //0x45 20 9
KBD_NORMAL_STYLE , //0x46 21 +
KBD_NORMAL_STYLE , //0x47 22 4
KBD_NORMAL_STYLE , //0x48 23 5
KBD_NORMAL_STYLE , //0x49 24 6
KBD_NORMAL_STYLE , //0x4a 25 =
KBD_NORMAL_STYLE , //0x4b 26 1
KBD_NORMAL_STYLE , //0x4c 27 2
KBD_NORMAL_STYLE , //0x4d 28 3
KBD_SHORTER_STYLE , //0x4e 29 ENTER
KBD_NORMAL_STYLE , //0x4f 30 0
KBD_NORMAL_STYLE , //0x50 31 ,
KBD_NORMAL_STYLE , //0x51 32 .
KBD_NORMAL_STYLE , //0x52 33 記号入力
KBD_NORMAL_STYLE , //0x53 34 登録
KBD_NORMAL_STYLE , //0x54 35 HELP
KBD_NARROWER_STYLE, //0x55 36 XF1
KBD_NARROWER_STYLE, //0x56 37 XF2
KBD_NARROW_STYLE , //0x57 38 XF3
KBD_NARROWER_STYLE, //0x58 39 XF4
KBD_NARROWER_STYLE, //0x59 40 XF5
KBD_NORMAL_STYLE , //0x61 41 BREAK
KBD_NORMAL_STYLE , //0x62 42 COPY
KBD_FUNCTION_STYLE, //0x63 43 F1
KBD_FUNCTION_STYLE, //0x64 44 F2
KBD_FUNCTION_STYLE, //0x65 45 F3
KBD_FUNCTION_STYLE, //0x66 46 F4
KBD_FUNCTION_STYLE, //0x67 47 F5
KBD_FUNCTION_STYLE, //0x68 48 F6
KBD_FUNCTION_STYLE, //0x69 49 F7
KBD_FUNCTION_STYLE, //0x6a 50 F8
KBD_FUNCTION_STYLE, //0x6b 51 F9
KBD_FUNCTION_STYLE, //0x6c 52 F10
KBD_SHIFT_STYLE , //0x70 53 SHIFT
KBD_NARROW_STYLE , //0x71 54 CTRL
KBD_NARROW_STYLE , //0x72 55 OPT.1
KBD_NARROW_STYLE , //0x73 56 OPT.2
},
//Compact Keyboard
{
KBD_NORMAL_STYLE , //0x01 0 ESC
KBD_NARROW_STYLE , //0x0f 1 BS
KBD_NARROW_STYLE , //0x10 2 TAB
KBD_RETURN_STYLE , //0x1d 3 RETURN
KBD_NORMAL_STYLE , //0x35 4 Space
KBD_NORMAL_STYLE , //0x36 5 HOME
KBD_NORMAL_STYLE , //0x37 6 DEL
KBD_NORMAL_STYLE , //0x38 7 ROLLUP
KBD_NORMAL_STYLE , //0x39 8 ROLLDOWN
KBD_NORMAL_STYLE , //0x3a 9 UNDO
KBD_NORMAL_STYLE , //0x3b 10 ←
KBD_NORMAL_STYLE , //0x3c 11 ↑
KBD_NORMAL_STYLE , //0x3d 12 →
KBD_NORMAL_STYLE , //0x3e 13 ↓
KBD_NORMAL_STYLE , //0x3f 14 CLR
KBD_NONE_STYLE , //0x40 15 /
KBD_NONE_STYLE , //0x41 16 *
KBD_NONE_STYLE , //0x42 17 -
KBD_NONE_STYLE , //0x43 18 7
KBD_NONE_STYLE , //0x44 19 8
KBD_NONE_STYLE , //0x45 20 9
KBD_NONE_STYLE , //0x46 21 +
KBD_NONE_STYLE , //0x47 22 4
KBD_NONE_STYLE , //0x48 23 5
KBD_NONE_STYLE , //0x49 24 6
KBD_NONE_STYLE , //0x4a 25 =
KBD_NONE_STYLE , //0x4b 26 1
KBD_NONE_STYLE , //0x4c 27 2
KBD_NONE_STYLE , //0x4d 28 3
KBD_NONE_STYLE , //0x4e 29 ENTER
KBD_NONE_STYLE , //0x4f 30 0
KBD_NONE_STYLE , //0x50 31 ,
KBD_NONE_STYLE , //0x51 32 .
KBD_NORMAL_STYLE , //0x52 33 記号入力
KBD_NORMAL_STYLE , //0x53 34 登録
KBD_NORMAL_STYLE , //0x54 35 HELP
KBD_NARROWER_STYLE, //0x55 36 XF1
KBD_NARROWER_STYLE, //0x56 37 XF2
KBD_NARROWER_STYLE, //0x57 38 XF3
KBD_NORMAL_STYLE , //0x58 39 XF4
KBD_NORMAL_STYLE , //0x59 40 XF5
KBD_NORMAL_STYLE , //0x61 41 BREAK
KBD_NORMAL_STYLE , //0x62 42 COPY
KBD_FUNCTION_STYLE, //0x63 43 F1
KBD_FUNCTION_STYLE, //0x64 44 F2
KBD_FUNCTION_STYLE, //0x65 45 F3
KBD_FUNCTION_STYLE, //0x66 46 F4
KBD_FUNCTION_STYLE, //0x67 47 F5
KBD_FUNCTION_STYLE, //0x68 48 F6
KBD_FUNCTION_STYLE, //0x69 49 F7
KBD_FUNCTION_STYLE, //0x6a 50 F8
KBD_FUNCTION_STYLE, //0x6b 51 F9
KBD_FUNCTION_STYLE, //0x6c 52 F10
KBD_SHIFT_STYLE , //0x70 53 SHIFT
KBD_NARROW_STYLE , //0x71 54 CTRL
KBD_NORMAL_STYLE , //0x72 55 OPT.1
KBD_NORMAL_STYLE , //0x73 56 OPT.2
},
}; //KBD_TYPE_FIX_STYLE
//赤色LEDの色
// 5A:かな,5B:ローマ字,5C:コード入力,5D:CAPS,5E:INS,74:NUM
public static final int[][] KBD_RED_LED_COLOR = {
{ KBD_RED_OFF_KEYTOP_COLOR, KBD_RED_OFF_BORDER_COLOR }, //000xx 消灯
{ KBD_RED_ON_KEYTOP_COLOR_0, KBD_RED_ON_BORDER_COLOR_0 }, //001xx 明るい
{ KBD_RED_OFF_KEYTOP_COLOR, KBD_RED_OFF_BORDER_COLOR }, //010xx
{ KBD_RED_ON_KEYTOP_COLOR_1, KBD_RED_ON_BORDER_COLOR_1 }, //011xx やや明るい
{ KBD_RED_OFF_KEYTOP_COLOR, KBD_RED_OFF_BORDER_COLOR }, //100xx
{ KBD_RED_ON_KEYTOP_COLOR_2, KBD_RED_ON_BORDER_COLOR_2 }, //101xx やや暗い
{ KBD_RED_OFF_KEYTOP_COLOR, KBD_RED_OFF_BORDER_COLOR }, //110xx
{ KBD_RED_ON_KEYTOP_COLOR_3, KBD_RED_ON_BORDER_COLOR_3 }, //111xx 暗い
};
//緑色LEDの色
// 5F:ひらがな,60:全角
public static final int[][] KBD_GREEN_LED_COLOR = {
{ KBD_GREEN_OFF_KEYTOP_COLOR, KBD_GREEN_OFF_BORDER_COLOR }, //000xx 消灯
{ KBD_GREEN_ON_KEYTOP_COLOR_0, KBD_GREEN_ON_BORDER_COLOR_0 }, //001xx 明るい
{ KBD_GREEN_OFF_KEYTOP_COLOR, KBD_GREEN_OFF_BORDER_COLOR }, //010xx
{ KBD_GREEN_ON_KEYTOP_COLOR_1, KBD_GREEN_ON_BORDER_COLOR_1 }, //011xx やや明るい
{ KBD_GREEN_OFF_KEYTOP_COLOR, KBD_GREEN_OFF_BORDER_COLOR }, //100xx
{ KBD_GREEN_ON_KEYTOP_COLOR_2, KBD_GREEN_ON_BORDER_COLOR_2 }, //101xx やや暗い
{ KBD_GREEN_OFF_KEYTOP_COLOR, KBD_GREEN_OFF_BORDER_COLOR }, //110xx
{ KBD_GREEN_ON_KEYTOP_COLOR_3, KBD_GREEN_ON_BORDER_COLOR_3 }, //111xx 暗い
};
//LEDキーの番号→LEDの色
public static final int[][][] KBD_LED_COLOR = {
KBD_RED_LED_COLOR , //0x5a 0 かな
KBD_RED_LED_COLOR , //0x5b 1 ローマ字
KBD_RED_LED_COLOR , //0x5c 2 コード入力
KBD_RED_LED_COLOR , //0x5d 3 CAPS
KBD_RED_LED_COLOR , //0x5e 4 INS
KBD_GREEN_LED_COLOR, //0x5f 5 ひらがな
KBD_GREEN_LED_COLOR, //0x60 6 全角
KBD_RED_LED_COLOR , //0x74 7 NUM
};
//Standard Keyboard
// 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
// 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
// 0 +-------+ +-------+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +-------+-------+-------+ . +-------+-------+-------+-------+ 0
// 1 |61 | |62 | . +---------+---------+---------+---------+---------+ +---------+---------+---------+---------+---------+ . |5A |5B |5C | . |5D |52 |53 |54 | 1
// 2 | BREAK | | COPY | . |63 |64 |65 |66 |67 | |68 |69 |6A |6B |6C | . | KANA | ROMA | CODE | . | CAPS | KIGOU |TOUROKU| HELP | 2
// 3 | | | | . | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | . | rrr | rrr | rrr | . | rrr | | | | 3
// 4 +-------+ +-------+ . +---------+---------+---------+---------+---------+ +---------+---------+---------+---------+---------+ . +--rrr--+--rrr--+--rrr--+ . +--rrr--+-------+-------+-------+ 4
// 5 +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-----------+ . +-------+-------+-------+ . +-------+-------+-------+-------+ 5
// 6 |01 |02 |03 |04 |05 |06 |07 |08 |09 |0A |0B |0C |0D |0E | !0F ! | . |36 |5E |37 | . |3F |40 |41 |42 | 6
// 7 | ESC | 1! | 2" | 3# | 4$ | 5% | 6& | 7' | 8( | 9) | 0 | -= | ^~ | \| | ! BS ! | . | HOME | INS | DEL | . | CLR | / | * | - | 7
// 8 | | | | | | | | | | | | | | | ! ! | . | | rrr | | . | | ~~~~~ | ~~~~~ | ~~~~~ | 8
// 9 +-------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-----------+ . +-------+--rrr--+-------+ . +-------+-------+-------+-------+ 9
//10 | !10 ! |11 |12 |13 |14 |15 |16 |17 |18 |19 |1A |1B |1C | !1D ! | . |38 |39 |3A | . |43 |44 |45 |46 | 10
//11 | ! TAB ! | Q | W | E | R | T | Y | U | I | O | P | @` | [{ | ! ! | . | R-UP |R-DOWN | UNDO | . | 7 | 8 | 9 | + | 11
//12 | ! ! | | | | | | | | | | | | | ! ! | . | | | | . | ~~~~~ | ~~~~~ | ~~~~~ | ~~~~~ | 12
//13 +-----------+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+ ! RETURN ! | . +-------+-------+-------+ . +-------+-------+-------+-------+ 13
//14 | !71 ! |1E |1F |20 |21 |22 |23 |24 |25 |26 |27 |28 |29 | ! ! | . | |3C | | . |47 |48 |49 |4A | 14
//15 | ! CTRL ! | A | S | D | F | G | H | J | K | L | ;+ | :* | ]} | ! ! | . | - - - | UP | - - - | . | 4 | 5 | 6 | = | 15
//16 | ! ! | | | | | | | | | | | | | ! ! | . | 3B | |3D | . | ~~~~~ | ~~~~~ | ~~~~~ | ~~~~~ | 16
//17 +-------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------------+ . | LEFT +-------+ RIGHT | . +-------+-------+-------+-------+ 17
//18 | !70 ! |2A |2B |2C |2D |2E |2F |30 |31 |32 |33 |34 | !70 ! | . | |3E | | . |4B |4C |4D | - - - | 18
//19 | ! SHIFT ! | Z | X | C | V | B | M | N | ,< | .> | /? | _ | ! SHIFT ! | . | - - - | DOWN | - - - | . | 1 | 2 | 3 |4E | 19
//20 | ! ! | | | | | | | | | | | | ! ! | . | | | | . | ~~~~~ | ~~~~~ | ~~~~~ | | 20
//21 +-------------+---+---+---+-----+-+-------+-------+-------+-------+---+---+-------+-------+-+-----+---+---+---+-------------+ . +-------+---+---+-------+ . +-------+-------+-------+ ENTER | 21
//22 . . . . . . . |5F |!55 !|!56 !|35 | !57 ! |!58 !|!59 !|60 | . . . . . . . . | !72 ! | !73 ! | . |4F |50 |51 | ~~~~~ | 22
//23 . . . . . . . | HIRA |! XF1 !|! XF2 !| SPACE | ! XF3 ! |! XF4 !|! XF5 !|ZENKAKU| . . . . . . . . | ! OPT.1 ! | ! OPT.2 ! | . | 0 | , | . | | 23
//24 . . . . . . . | ggg |! !|! !| | ! ! |! !|! !| ggg | . . . . . . . . | ! ! | ! ! | . | ~~~~~ | ~~~~~ | ~~~~~ | - - - | 24
//25 . . . . . . . +--ggg--+---------+---------+---------------------------+-----------+---------+---------+--ggg--+ . . . . . . . . +-----------+-----------+ . +-------+-------+-------+-------+ 25
// 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
// 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
//Compact Keyboard
// 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
// 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
// 0 +-------+ +-------+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +-------+-------+-------+ 0
// 1 |61 | |62 | . +---------+---------+---------+---------+---------+ +---------+---------+---------+---------+---------+ . |52 |53 |54 | 1
// 2 | BREAK | | COPY | . |63 |64 |65 |66 |67 | |68 |69 |6A |6B |6C | . | KIGOU |TOUROKU| HELP | 2
// 3 | | | | . | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | . | | | | 3
// 4 +-------+ +-------+ . +---------+---------+---------+---------+---------+ +---------+---------+---------+---------+---------+ . +-------+-------+-------+ 4
// 5 +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-----------+ . |60 |5F |5C | 5
// 6 |01 |02 |03 |04 |05 |06 |07 |08 / |09 / |0A / |0B / |0C / |0D |0E | !0F ! | . |ZENKAKU| HIRA | CODE | 6
// 7 | ESC | 1! | 2" | 3# | 4$ | 5% | 6& | 7'/ 7 | 8(/ 8 | 9)/ 9 | 0 / / | -=/ * | ^~ | \| | ! BS ! | . | ggg | ggg | rrr | 7
// 8 | | | | | | | | / 43| / 44| / 45| / 40| / 41| | | ! ! | . +--ggg--+--ggg--+--rrr--+ 8
// 9 +-------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-----------+ . +-------+--rrr--+-------+ 9
//10 | !10 ! |11 |12 |13 |14 |15 |16 |17 / |18 / |19 / |1A / |1B |1C | !1D ! | . |36 |3F |37 | 10
//11 | ! TAB ! | Q | W | E | R | T | Y | U / 4 | I / 5 | O / 6 | P / - | @` | [{ | ! ! | . | HOME | CLR | DEL | 11
//12 | ! ! | | | | | | | / 47| / 48| / 49| / 42| | | ! ! | . | | | | 12
//13 +-----------+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+ ! RETURN ! | . +-------+-------+-------+ 13
//14 | !71 ! |1E |1F |20 |21 |22 |23 |24 / |25 / |26 / |27 / |28 |29 | ! ! | . |74 |5E |3A | 14
//15 | ! CTRL ! | A | S | D | F | G | H | J / 1 | K / 2 | L / 3 | ;+/ + | :* | ]} | ! ! | . | NUM | INS | UNDO | 15
//16 | ! ! | | | | | | | / 4B| / 4C| / 4D| / 46| | | ! ! | . | rrr | rrr | | 16
//17 +-------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------------+ . +--rrr--+--rrr--+-------+ 17
//18 | !70 ! |2A |2B |2C |2D |2E |2F |30 / |31 / |32 / |33 / |34 / | !70 ! | . |38 |3C |39 | 18
//19 | ! SHIFT ! | Z | X | C | V | B | M | N / 0 | ,</ , | .>/ . | /?/ = | _ /ENT| ! SHIFT ! | . | R-UP | UP |R-DOWN | 19
//20 | ! ! | | | | | | | / 4F| / 50| / 51| / 4A| / 4E| ! ! | . | | | | 20
//21 +-----+-------+---+---+---+-----+-+-------+-------+-------+-------+---+---+-----+-+-----+-+-----+-+-----+-+-----+-------+---+ . +-------+-------+-------+ 21
//22 . . . |72 |5D |!55 !|!56 !|35 |! 57 !|58 |59 |5B |5A |73 | . . . |3B |3E |3D | 22
//23 . . . | OPT.1 | CAPS |! XF1 !|! XF2 !| SPACE |! XF3 !| XF4 | XF5 | ROMA | KANA | OPT.2 | . . . | LEFT | DOWN | RIGHT | 23
//24 . . . | | rrr |! !|! !| |! !| | | rrr | rrr | | . . . | | | | 24
//25 . . . +-------+--rrr--+---------+---------+---------------------------+---------+-------+-------+--rrr--+--rrr--+-------+ . . . +-------+-------+-------+ 25
// 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
// 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
//可変キーの番号→ボックス
// Standard KeyboardとCompact Keyboardで共通
// 欠番なし
public static final int[][] KBD_VAR_BOX = {
{ 4, 5, 4, 4 }, //0x02 0 1
{ 8, 5, 4, 4 }, //0x03 1 2
{ 12, 5, 4, 4 }, //0x04 2 3
{ 16, 5, 4, 4 }, //0x05 3 4
{ 20, 5, 4, 4 }, //0x06 4 5
{ 24, 5, 4, 4 }, //0x07 5 6
{ 28, 5, 4, 4 }, //0x08 6 7
{ 32, 5, 4, 4 }, //0x09 7 8
{ 36, 5, 4, 4 }, //0x0a 8 9
{ 40, 5, 4, 4 }, //0x0b 9 0
{ 44, 5, 4, 4 }, //0x0c 10 -
{ 48, 5, 4, 4 }, //0x0d 11 ^
{ 52, 5, 4, 4 }, //0x0e 12 \
{ 6, 9, 4, 4 }, //0x11 13 q
{ 10, 9, 4, 4 }, //0x12 14 w
{ 14, 9, 4, 4 }, //0x13 15 e
{ 18, 9, 4, 4 }, //0x14 16 r
{ 22, 9, 4, 4 }, //0x15 17 t
{ 26, 9, 4, 4 }, //0x16 18 y
{ 30, 9, 4, 4 }, //0x17 19 u
{ 34, 9, 4, 4 }, //0x18 20 i
{ 38, 9, 4, 4 }, //0x19 21 o
{ 42, 9, 4, 4 }, //0x1a 22 p
{ 46, 9, 4, 4 }, //0x1b 23 @
{ 50, 9, 4, 4 }, //0x1c 24 [
{ 7, 13, 4, 4 }, //0x1e 25 a
{ 11, 13, 4, 4 }, //0x1f 26 s
{ 15, 13, 4, 4 }, //0x20 27 d
{ 19, 13, 4, 4 }, //0x21 28 f
{ 23, 13, 4, 4 }, //0x22 29 g
{ 27, 13, 4, 4 }, //0x23 30 h
{ 31, 13, 4, 4 }, //0x24 31 j
{ 35, 13, 4, 4 }, //0x25 32 k
{ 39, 13, 4, 4 }, //0x26 33 l
{ 43, 13, 4, 4 }, //0x27 34 ;
{ 47, 13, 4, 4 }, //0x28 35 :
{ 51, 13, 4, 4 }, //0x29 36 ]
{ 9, 17, 4, 4 }, //0x2a 37 z
{ 13, 17, 4, 4 }, //0x2b 38 x
{ 17, 17, 4, 4 }, //0x2c 39 c
{ 21, 17, 4, 4 }, //0x2d 40 v
{ 25, 17, 4, 4 }, //0x2e 41 b
{ 29, 17, 4, 4 }, //0x2f 42 n
{ 33, 17, 4, 4 }, //0x30 43 m
{ 37, 17, 4, 4 }, //0x31 44 ,
{ 41, 17, 4, 4 }, //0x32 45 .
{ 45, 17, 4, 4 }, //0x33 46 /
{ 49, 17, 4, 4 }, //0x34 47
}; //KBD_VAR_BOX
//種類→LEDキーの番号→ボックス
// 欠番あり
// Standard KeyboardのNUMキー
public static final int[][][] KBD_TYPE_LED_BOX = {
//Standard Keyboard
{
{ 64, 0, 4, 4 }, //0x5a 0 かな
{ 68, 0, 4, 4 }, //0x5b 1 ローマ字
{ 72, 0, 4, 4 }, //0x5c 2 コード入力
{ 78, 0, 4, 4 }, //0x5d 3 CAPS
{ 68, 5, 4, 4 }, //0x5e 4 INS
{ 7, 21, 4, 4 }, //0x5f 5 ひらがな
{ 51, 21, 4, 4 }, //0x60 6 全角
null , //0x74 7 NUM
},
//Compact Keyboard
{
{ 52, 21, 4, 4 }, //0x5a 0 かな
{ 48, 21, 4, 4 }, //0x5b 1 ローマ字
{ 72, 4, 4, 4 }, //0x5c 2 コード入力
{ 7, 21, 4, 4 }, //0x5d 3 CAPS
{ 68, 13, 4, 4 }, //0x5e 4 INS
{ 68, 4, 4, 4 }, //0x5f 5 ひらがな
{ 64, 4, 4, 4 }, //0x60 6 全角
{ 64, 13, 4, 4 }, //0x74 7 NUM
},
}; //KBD_TYPE_LED_BOX
//種類→固定キーのインデックス→ボックス
// 欠番あり
// Compact Keyboardのテンキー
public static final int[][][] KBD_TYPE_FIX_BOX = {
//Standard Keyboard
{
{ 0, 5, 4, 4 }, //0x01 0 ESC
{ 56, 5, 6, 4 }, //0x0f 1 BS
{ 0, 9, 6, 4 }, //0x10 2 TAB
{ 54, 9, 8, 8 }, //0x1d 3 RETURN
{ 21, 21, 14, 4 }, //0x35 4 Space
{ 64, 5, 4, 4 }, //0x36 5 HOME
{ 72, 5, 4, 4 }, //0x37 6 DEL
{ 64, 9, 4, 4 }, //0x38 7 ROLLUP
{ 68, 9, 4, 4 }, //0x39 8 ROLLDOWN
{ 72, 9, 4, 4 }, //0x3a 9 UNDO
{ 64, 13, 4, 8 }, //0x3b 10 ←
{ 68, 13, 4, 4 }, //0x3c 11 ↑
{ 72, 13, 4, 8 }, //0x3d 12 →
{ 68, 17, 4, 4 }, //0x3e 13 ↓
{ 78, 5, 4, 4 }, //0x3f 14 CLR
{ 82, 5, 4, 4 }, //0x40 15 /
{ 86, 5, 4, 4 }, //0x41 16 *
{ 90, 5, 4, 4 }, //0x42 17 -
{ 78, 9, 4, 4 }, //0x43 18 7
{ 82, 9, 4, 4 }, //0x44 19 8
{ 86, 9, 4, 4 }, //0x45 20 9
{ 90, 9, 4, 4 }, //0x46 21 +
{ 78, 13, 4, 4 }, //0x47 22 4
{ 82, 13, 4, 4 }, //0x48 23 5
{ 86, 13, 4, 4 }, //0x49 24 6
{ 90, 13, 4, 4 }, //0x4a 25 =
{ 78, 17, 4, 4 }, //0x4b 26 1
{ 82, 17, 4, 4 }, //0x4c 27 2
{ 86, 17, 4, 4 }, //0x4d 28 3
{ 90, 17, 4, 8 }, //0x4e 29 ENTER
{ 78, 21, 4, 4 }, //0x4f 30 0
{ 82, 21, 4, 4 }, //0x50 31 ,
{ 86, 21, 4, 4 }, //0x51 32 .
{ 82, 0, 4, 4 }, //0x52 33 記号入力
{ 86, 0, 4, 4 }, //0x53 34 登録
{ 90, 0, 4, 4 }, //0x54 35 HELP
{ 11, 21, 5, 4 }, //0x55 36 XF1
{ 16, 21, 5, 4 }, //0x56 37 XF2
{ 35, 21, 6, 4 }, //0x57 38 XF3
{ 41, 21, 5, 4 }, //0x58 39 XF4
{ 46, 21, 5, 4 }, //0x59 40 XF5
{ 0, 0, 4, 4 }, //0x61 41 BREAK
{ 5, 0, 4, 4 }, //0x62 42 COPY
{ 11, 0, 5, 4 }, //0x63 43 F1
{ 16, 0, 5, 4 }, //0x64 44 F2
{ 21, 0, 5, 4 }, //0x65 45 F3
{ 26, 0, 5, 4 }, //0x66 46 F4
{ 31, 0, 5, 4 }, //0x67 47 F5
{ 37, 0, 5, 4 }, //0x68 48 F6
{ 42, 0, 5, 4 }, //0x69 49 F7
{ 47, 0, 5, 4 }, //0x6a 50 F8
{ 52, 0, 5, 4 }, //0x6b 51 F9
{ 57, 0, 5, 4 }, //0x6c 52 F10
{ 0, 17, 62, 4 }, //0x70 53 SHIFT
{ 0, 13, 7, 4 }, //0x71 54 CTRL
{ 64, 21, 6, 4 }, //0x72 55 OPT.1
{ 70, 21, 6, 4 }, //0x73 56 OPT.2
},
//Compact Keyboard
{
{ 0, 5, 4, 4 }, //0x01 0 ESC
{ 56, 5, 6, 4 }, //0x0f 1 BS
{ 0, 9, 6, 4 }, //0x10 2 TAB
{ 54, 9, 8, 8 }, //0x1d 3 RETURN
{ 21, 21, 14, 4 }, //0x35 4 Space
{ 64, 9, 4, 4 }, //0x36 5 HOME
{ 72, 9, 4, 4 }, //0x37 6 DEL
{ 64, 17, 4, 4 }, //0x38 7 ROLLUP
{ 72, 17, 4, 4 }, //0x39 8 ROLLDOWN
{ 72, 13, 4, 4 }, //0x3a 9 UNDO
{ 64, 21, 4, 4 }, //0x3b 10 ←
{ 68, 17, 4, 4 }, //0x3c 11 ↑
{ 72, 21, 4, 4 }, //0x3d 12 →
{ 68, 21, 4, 4 }, //0x3e 13 ↓
{ 68, 9, 4, 4 }, //0x3f 14 CLR
null , //0x40 15 /
null , //0x41 16 *
null , //0x42 17 -
null , //0x43 18 7
null , //0x44 19 8
null , //0x45 20 9
null , //0x46 21 +
null , //0x47 22 4
null , //0x48 23 5
null , //0x49 24 6
null , //0x4a 25 =
null , //0x4b 26 1
null , //0x4c 27 2
null , //0x4d 28 3
null , //0x4e 29 ENTER
null , //0x4f 30 0
null , //0x50 31 ,
null , //0x51 32 .
{ 64, 0, 4, 4 }, //0x52 33 記号入力
{ 68, 0, 4, 4 }, //0x53 34 登録
{ 72, 0, 4, 4 }, //0x54 35 HELP
{ 11, 21, 5, 4 }, //0x55 36 XF1
{ 16, 21, 5, 4 }, //0x56 37 XF2
{ 35, 21, 5, 4 }, //0x57 38 XF3
{ 40, 21, 4, 4 }, //0x58 39 XF4
{ 44, 21, 4, 4 }, //0x59 40 XF5
{ 0, 0, 4, 4 }, //0x61 41 BREAK
{ 5, 0, 4, 4 }, //0x62 42 COPY
{ 11, 0, 5, 4 }, //0x63 43 F1
{ 16, 0, 5, 4 }, //0x64 44 F2
{ 21, 0, 5, 4 }, //0x65 45 F3
{ 26, 0, 5, 4 }, //0x66 46 F4
{ 31, 0, 5, 4 }, //0x67 47 F5
{ 37, 0, 5, 4 }, //0x68 48 F6
{ 42, 0, 5, 4 }, //0x69 49 F7
{ 47, 0, 5, 4 }, //0x6a 50 F8
{ 52, 0, 5, 4 }, //0x6b 51 F9
{ 57, 0, 5, 4 }, //0x6c 52 F10
{ 0, 17, 62, 4 }, //0x70 53 SHIFT
{ 0, 13, 7, 4 }, //0x71 54 CTRL
{ 3, 21, 4, 4 }, //0x72 55 OPT.1
{ 56, 21, 4, 4 }, //0x73 56 OPT.2
},
}; //KBD_TYPE_FIX_BOX
//可変キーの番号→可変キーに表示する文字の文字コード
// 可変キーに表示する文字はモードキーの状態によって変化する
// かなの配列はSRAMの設定によって変化する
// 0x00ed002b キーボードのかなの配列。0=旧JIS,0以外=五十音
// 文字コード0x5c,0x7e,0x7cの字体はSRAMの設定によって変化する
// 0x00ed0059 bit0 文字コード0x5cの字体。0=YEN SIGN(0x5c,U+00A5),1=REVERSE SOLIDUS(0x80,U+005C)
// bit1 文字コード0x7eの字体。0=MACRON(0x7e,U+00AF),1=TILDE(0x81,U+007E)
// bit2 文字コード0x7cの字体。0=VERTICAL LINE(0x7c,U+007C),1=BROKEN BAR(0x82,U+00A6)
// 文字の字体は半角と全角を区別しない
// 文字の字体はカタカナとひらがなを区別する。ひらがな+全角のときだけひらがなにする
// テレビコントロール(SHIFT|OPT.2+←|↑|→|↓|CLR|/|*|-|7|8|9|+|4|5|6|=|1|2|3|0|,|.)は区別しない
public static final char[] KBD_CAPS_BASE = "1234567890-^\\QWERTYUIOP@[ASDFGHJKL;:]ZXCVBNM,./\u0000".toCharArray ();
public static final char[] KBD_CAPS_SHIFT_BASE = "!\"#$%&'()\u0000=~|qwertyuiop`{asdfghjkl+*}zxcvbnm<>?_".toCharArray ();
public static final char[] KBD_KANA_BASE = "ヌフアウエオヤユヨワホヘータテイスカンナニラゼ゚チトシハキクマノリレケムツサソヒコミモネルメロ".toCharArray ();
public static final char[] KBD_KANA_SHIFT_BASE = "ヌファゥェォャュョヲホヘータティスカンナニラゼ「チトシハキクマノリレケ」ッサソヒコミモ、。・\u00a0".toCharArray ();
public static final char[] KBD_KANA_AIU_BASE = "アイウエオナニヌネノラリルカキクケコハヒフヘホレロサシスセソマミムメモ゙゚タチツテトヤユヨワヲン".toCharArray ();
public static final char[] KBD_KANA_AIU_SHIFT_BASE = "ァィゥェォナニヌネヲラリルカキクケコハヒフヘホレ「\u00a0シスセソマミムメモー」タチッテトャュョ、。・".toCharArray ();
public static final char[] KBD_ROMA_BASE = "1234567890ー^\\QWERTYUIOP@「ASDFGHJKL;:」ZXCVBNM、。・\u0000".toCharArray ();
public static final char[] KBD_ROMA_SHIFT_BASE = "!\"#$%&'()\u0000=~|QWeRTYuioP`{aSDFGHJKL+*}zXCVBNM<>?_".toCharArray ();
public static final char[] KBD_NUM_BASE = (" 789/" + "* 456- 123+ 0,.=\u0084").toCharArray ();
public static final byte[] KBD_CAPS_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_NORMAL_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_CODE_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_CAPS_SHIFT_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_SHIFT_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_CTRL_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_KANA_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_KANA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_KANA_AIU_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_KANA_AIU_SHIFT_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_ROMA_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_ROMA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_NUM_CAPS_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_NUM_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_NUM_CODE_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_NUM_CAPS_SHIFT_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_NUM_SHIFT_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_NUM_CTRL_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_NUM_KANA_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_NUM_KANA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_NUM_KANA_AIU_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_NUM_KANA_AIU_SHIFT_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_NUM_ROMA_CHR = new byte[KBD_VAR_KEYS];
public static final byte[] KBD_NUM_ROMA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
//文字コード→可変キーに表示する文字のパターン
//
// +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f
// 0x00 ^A ^B ^C ^D ^E ^F ^G ^H ^I ^J ^K ^L ^M ^N ^O
// 0x10 ^P ^Q ^R ^S ^T ^U ^V ^W ^X ^Y ^Z ^[ ^¥ ^] ^^ ^_
// 0x20 ! ” # $ % & ’ ( ) * + , - . /
// 0x30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
// 0x40 @ A B C D E F G H I J K L M N O
// 0x50 P Q R S T U V W X Y Z [ ¥ ] ^ _
// 0x60 ` a b c d e f g h i j k l m n o
// 0x70 p q r s t u v w x y z { | }  ̄ ^?
// 0x80 \ ~ ¦ ^\ EN を ぁ ぃ ぅ ぇ ぉ ゃ ゅ ょ っ
// 0x90 あ い う え お か き く け こ さ し す せ そ
// 0xa0 □ 。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ
// 0xb0 ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ
// 0xc0 タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ
// 0xd0 ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン ゛ ゜
// 0xe0 た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま
// 0xf0 み む め も や ゆ よ ら り る れ ろ わ ん
//
// 0x00 U+0020 SPACE。文字が割り当てられていないキーを表示するときに使うので^@ではなくて空白
// 0x1c ^¥ U+005E,U+00A5 CIRCUMFLEX ACCENT,YEN SIGN
// 0x5c ¥ U+00A5 YEN SIGN
// 0x7c | U+007C VERTICAL LINE
// 0x7e ¯ U+00AF MACRON
// 0x7f ^? U+005E,U+003F CIRCUMFLEX ACCENT,QUESTION MARK
// 0x80 \ U+005C REVERSE SOLIDUS。0x5cの代わり
// 0x81 ~ U+007E TILDE。0x7eの代わり
// 0x82 ¦ U+00A6 BROKEN BAR。0x7cの代わり
// 0x83 ^\ U+005E,U+005C CIRCUMFLEX ACCENT,REVERSE SOLIDUS。0x1cの代わり
// 0x84 ENTER NUM ONのときに使う
// 0xa0 □ U+00A0 NO-BREAK SPACE。空白と見分けがつかないと困るのでキーボードには市松模様で表示する
//
public static final int[][] KBD_VAR_LETTER = {
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x00
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000001000000,
0b000001010000010100000,
0b000010001000010100000,
0b000100000100100010000,
0b000000000000100010000,
0b000000000001000001000,
0b000000000001111111000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x01 ^A
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001111100000,
0b000001010001000010000,
0b000010001001000001000,
0b000100000101000010000,
0b000000000001111100000,
0b000000000001000010000,
0b000000000001000001000,
0b000000000001000010000,
0b000000000001111100000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x02 ^B
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000011100000,
0b000001010000100010000,
0b000010001001000001000,
0b000100000101000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000001000,
0b000000000000100010000,
0b000000000000011100000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x03 ^C
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001111100000,
0b000001010001000010000,
0b000010001001000001000,
0b000100000101000001000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000001000010000,
0b000000000001111100000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x04 ^D
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001111111000,
0b000001010001000000000,
0b000010001001000000000,
0b000100000101000000000,
0b000000000001111110000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001111111000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x05 ^E
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001111111000,
0b000001010001000000000,
0b000010001001000000000,
0b000100000101000000000,
0b000000000001111110000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x06 ^F
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000011110000,
0b000001010000100000000,
0b000010001001000000000,
0b000100000101000000000,
0b000000000001001111000,
0b000000000001000010000,
0b000000000001000010000,
0b000000000000100010000,
0b000000000000011100000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x07 ^G
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001000001000,
0b000001010001000001000,
0b000010001001000001000,
0b000100000101000001000,
0b000000000001111111000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x08 ^H
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000011100000,
0b000001010000001000000,
0b000010001000001000000,
0b000100000100001000000,
0b000000000000001000000,
0b000000000000001000000,
0b000000000000001000000,
0b000000000000001000000,
0b000000000000011100000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x09 ^I
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000000001000,
0b000001010000000001000,
0b000010001000000001000,
0b000100000100000001000,
0b000000000000000001000,
0b000000000000000001000,
0b000000000001000001000,
0b000000000000100010000,
0b000000000000011100000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x0a ^J
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001000001000,
0b000001010001000010000,
0b000010001001000100000,
0b000100000101001000000,
0b000000000001010000000,
0b000000000001101000000,
0b000000000001000100000,
0b000000000001000010000,
0b000000000001000001000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x0b ^K
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001000000000,
0b000001010001000000000,
0b000010001001000000000,
0b000100000101000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001111111000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x0c ^L
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001000001000,
0b000001010001100011000,
0b000010001001010101000,
0b000100000101010101000,
0b000000000001001001000,
0b000000000001001001000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x0d ^M
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001000001000,
0b000001010001000001000,
0b000010001001100001000,
0b000100000101010001000,
0b000000000001001001000,
0b000000000001000101000,
0b000000000001000011000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x0e ^N
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000011100000,
0b000001010000100010000,
0b000010001001000001000,
0b000100000101000001000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000000100010000,
0b000000000000011100000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x0f ^O
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001111100000,
0b000001010001000010000,
0b000010001001000001000,
0b000100000101000001000,
0b000000000001000010000,
0b000000000001111100000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x10 ^P
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000011100000,
0b000001010000100010000,
0b000010001001000001000,
0b000100000101000001000,
0b000000000001000001000,
0b000000000001001001000,
0b000000000001000101000,
0b000000000000100010000,
0b000000000000011101000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x11 ^Q
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001111100000,
0b000001010001000010000,
0b000010001001000001000,
0b000100000101000001000,
0b000000000001000010000,
0b000000000001111100000,
0b000000000001000010000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x12 ^R
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000011110000,
0b000001010000100000000,
0b000010001001000000000,
0b000100000100100000000,
0b000000000000011100000,
0b000000000000000010000,
0b000000000000000001000,
0b000000000000000010000,
0b000000000000111100000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x13 ^S
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001111111000,
0b000001010000001000000,
0b000010001000001000000,
0b000100000100001000000,
0b000000000000001000000,
0b000000000000001000000,
0b000000000000001000000,
0b000000000000001000000,
0b000000000000001000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x14 ^T
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001000001000,
0b000001010001000001000,
0b000010001001000001000,
0b000100000101000001000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000000100010000,
0b000000000000011100000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x15 ^U
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001000001000,
0b000001010001000001000,
0b000010001001000001000,
0b000100000101000001000,
0b000000000000100010000,
0b000000000000100010000,
0b000000000000010100000,
0b000000000000010100000,
0b000000000000001000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x16 ^V
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100010001000100,
0b000001010010001000100,
0b000010001010001000100,
0b000100000101010101000,
0b000000000001010101000,
0b000000000001010101000,
0b000000000000100010000,
0b000000000000100010000,
0b000000000000100010000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x17 ^W
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001000001000,
0b000001010001000001000,
0b000010001000100010000,
0b000100000100010100000,
0b000000000000001000000,
0b000000000000010100000,
0b000000000000100010000,
0b000000000001000001000,
0b000000000001000001000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x18 ^X
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001000001000,
0b000001010001000001000,
0b000010001001000001000,
0b000100000100100010000,
0b000000000000010100000,
0b000000000000001000000,
0b000000000000001000000,
0b000000000000001000000,
0b000000000000001000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x19 ^Y
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001111111000,
0b000001010000000001000,
0b000010001000000010000,
0b000100000100000100000,
0b000000000000001000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000001111111000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x1a ^Z
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000011100000,
0b000001010000010000000,
0b000010001000010000000,
0b000100000100010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000011100000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x1b ^[
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001000001000,
0b000001010000100010000,
0b000010001000010100000,
0b000100000100001000000,
0b000000000001111111000,
0b000000000000001000000,
0b000000000001111111000,
0b000000000000001000000,
0b000000000000001000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x1c ^¥
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000011100000,
0b000001010000000100000,
0b000010001000000100000,
0b000100000100000100000,
0b000000000000000100000,
0b000000000000000100000,
0b000000000000000100000,
0b000000000000000100000,
0b000000000000011100000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x1d ^]
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000001000000,
0b000001010000010100000,
0b000010001000100010000,
0b000100000101000001000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x1e ^^
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000000000000,
0b000001010000000000000,
0b000010001000000000000,
0b000100000100000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000001111111000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x1f ^_
null, //0x20
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x21 !
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x22 "
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000011111110000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000011111110000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x23 #
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000001111110000000,
0b000000010010000000000,
0b000000010010000000000,
0b000000001111100000000,
0b000000000010010000000,
0b000000000010010000000,
0b000000011111100000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x24 $
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011100000000000,
0b000000010100010000000,
0b000000011100100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000001001110000000,
0b000000010001010000000,
0b000000000001110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x25 %
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001110000000000,
0b000000010001000000000,
0b000000010001000000000,
0b000000001010000000000,
0b000000000100000000000,
0b000000001010000000000,
0b000000010001010000000,
0b000000010000100000000,
0b000000001111010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x26 &
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x27 '
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x28 (
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x29 )
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000010010010000000,
0b000000001010100000000,
0b000000000111000000000,
0b000000001010100000000,
0b000000010010010000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x2a *
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x2b +
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000110000000000,
0b000000000110000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x2c ,
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x2d -
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000110000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x2e .
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000001000000000000,
0b000000010000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x2f /
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x30 0
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000001000000000,
0b000000000011000000000,
0b000000000101000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x31 1
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000001100000000,
0b000000000110000000000,
0b000000001000000000000,
0b000000010000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x32 2
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000011100000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000010000010000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x33 3
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000001100000000,
0b000000000010100000000,
0b000000000100100000000,
0b000000001000100000000,
0b000000010000100000000,
0b000000010000100000000,
0b000000011111110000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x34 4
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000011111100000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000010000010000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x35 5
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111100000000,
0b000000001000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000011111100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x36 6
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x37 7
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x38 8
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001111110000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000001110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x39 9
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000110000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000110000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x3a :
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000110000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000110000000000,
0b000000000110000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x3b ;
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000001000000000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000000100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x3c <
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x3d =
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000001000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x3e >
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000001000100000000,
0b000000010000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x3f ?
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000001000100000000,
0b000000010010010000000,
0b000000010101010000000,
0b000000010101010000000,
0b000000010101010000000,
0b000000010011110000000,
0b000000001000000000000,
0b000000000111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x40 @
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000010000010000000,
0b000000011111110000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x41 A
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111000000000,
0b000000010000100000000,
0b000000010000010000000,
0b000000010000100000000,
0b000000011111000000000,
0b000000010000100000000,
0b000000010000010000000,
0b000000010000100000000,
0b000000011111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x42 B
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000001000100000000,
0b000000010000010000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000010000000,
0b000000001000100000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x43 C
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111000000000,
0b000000010000100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000100000000,
0b000000011111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x44 D
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000011111100000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x45 E
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000011111100000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x46 F
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111100000000,
0b000000001000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010011110000000,
0b000000010000100000000,
0b000000010000100000000,
0b000000001000100000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x47 G
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000011111110000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x48 H
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x49 I
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000010000010000000,
0b000000001000100000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x4a J
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000010000000,
0b000000010000100000000,
0b000000010001000000000,
0b000000010010000000000,
0b000000010100000000000,
0b000000011010000000000,
0b000000010001000000000,
0b000000010000100000000,
0b000000010000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x4b K
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x4c L
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000010000000,
0b000000011000110000000,
0b000000010101010000000,
0b000000010101010000000,
0b000000010010010000000,
0b000000010010010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x4d M
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000011000010000000,
0b000000010100010000000,
0b000000010010010000000,
0b000000010001010000000,
0b000000010000110000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x4e N
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000001000100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001000100000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x4f O
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111000000000,
0b000000010000100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000100000000,
0b000000011111000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x50 P
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000001000100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010010010000000,
0b000000010001010000000,
0b000000001000100000000,
0b000000000111010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x51 Q
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111000000000,
0b000000010000100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000100000000,
0b000000011111000000000,
0b000000010000100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x52 R
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111100000000,
0b000000001000000000000,
0b000000010000000000000,
0b000000001000000000000,
0b000000000111000000000,
0b000000000000100000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000001111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x53 S
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x54 T
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001000100000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x55 U
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x56 V
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100010001000000,
0b000000100010001000000,
0b000000100010001000000,
0b000000010101010000000,
0b000000010101010000000,
0b000000010101010000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x57 W
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001000100000000,
0b000000000101000000000,
0b000000000010000000000,
0b000000000101000000000,
0b000000001000100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x58 X
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001000100000000,
0b000000000101000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x59 Y
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000001000000000000,
0b000000010000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x5a Z
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x5b [
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000010000000,
0b000000001000100000000,
0b000000000101000000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x5c ¥
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x5d ]
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000101000000000,
0b000000001000100000000,
0b000000010000010000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x5e ^
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x5f _
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x60 `
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000111100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001001100000000,
0b000000000110100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x61 a
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001011000000000,
0b000000001100100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001111000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x62 b
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001000100000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x63 c
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000111100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001001100000000,
0b000000000110100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x64 d
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000001000100000000,
0b000000001111100000000,
0b000000001000000000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x65 e
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000001100000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000001111100000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x66 f
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000111100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000000111100000000,
0b000000000000100000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x67 g
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001111000000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x68 h
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x69 i
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000001000100000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x6a j
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001001100000000,
0b000000001010000000000,
0b000000001110000000000,
0b000000001001000000000,
0b000000001000100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x6b k
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x6c l
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000011101100000000,
0b000000010010010000000,
0b000000010010010000000,
0b000000010010010000000,
0b000000010010010000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x6d m
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001011000000000,
0b000000001100100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x6e n
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x6f o
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001011000000000,
0b000000001100100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001111000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x70 p
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000110100000000,
0b000000001001100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000000111100000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x71 q
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001011000000000,
0b000000001100100000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x72 r
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000111100000000,
0b000000001000000000000,
0b000000000111000000000,
0b000000000000100000000,
0b000000001111000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x73 s
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000001111100000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000001100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x74 t
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001001100000000,
0b000000000110100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x75 u
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x76 v
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000010010010000000,
0b000000010010010000000,
0b000000010010010000000,
0b000000010010010000000,
0b000000001101110000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x77 w
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001000100000000,
0b000000000101000000000,
0b000000000010000000000,
0b000000000101000000000,
0b000000001000100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x78 x
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000000111100000000,
0b000000000000100000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x79 y
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x7a z
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x7b {
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x7c |
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x7d }
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x7e ¯
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000011100000,
0b000001010000100010000,
0b000010001001000001000,
0b000100000100000001000,
0b000000000000000010000,
0b000000000000000100000,
0b000000000000001000000,
0b000000000000000000000,
0b000000000000001000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x7f ^?
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000000000000,
0b000000001000000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000000100000000,
0b000000000000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x80 \
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001100000000000,
0b000000010010010000000,
0b000000000001100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x81 ~
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x82 ¦
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001000000000,
0b000001010000100000000,
0b000010001000010000000,
0b000100000100010000000,
0b000000000000001000000,
0b000000000000000100000,
0b000000000000000100000,
0b000000000000000010000,
0b000000000000000001000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x83 ^\
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b011101010111011101100,
0b010001010010010001010,
0b010001110010010001010,
0b011101110010011101100,
0b010001110010010001010,
0b010001010010010001010,
0b011101010010011101010,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x84 ENTER
null, //0x85
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000011111100000000,
0b000000000100000000000,
0b000000001110000000000,
0b000000010011100000000,
0b000000000101000000000,
0b000000001001000000000,
0b000000001000000000000,
0b000000000111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x86 を
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000011111110000000,
0b000000000100000000000,
0b000000001111100000000,
0b000000010101010000000,
0b000000010010010000000,
0b000000001100100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x87 ぁ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000010001000000000,
0b000000010000100000000,
0b000000010000100000000,
0b000000010000010000000,
0b000000010100010000000,
0b000000001000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x88 ぃ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001110000000000,
0b000000000000000000000,
0b000000001111000000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x89 ぅ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000110000000000,
0b000000001001100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x8a ぇ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000011110100000000,
0b000000000100100000000,
0b000000001111000000000,
0b000000010100100000000,
0b000000010100100000000,
0b000000001101000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x8b ぉ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001010000000000,
0b000000001111100000000,
0b000000011001010000000,
0b000000000101010000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x8c ゃ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000010010000000000,
0b000000010111000000000,
0b000000011010100000000,
0b000000010010100000000,
0b000000010100100000000,
0b000000000101000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x8d ゅ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000011100000000,
0b000000000010000000000,
0b000000000111000000000,
0b000000001010100000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x8e ょ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000011111000000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x8f っ
null, //0x90
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000011111110000000,
0b000000000100000000000,
0b000000001111100000000,
0b000000010101010000000,
0b000000100101001000000,
0b000000100101001000000,
0b000000100010001000000,
0b000000011100010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x91 あ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100000100000000,
0b000000100000010000000,
0b000000100000010000000,
0b000000100000010000000,
0b000000100000001000000,
0b000000100000001000000,
0b000000101000001000000,
0b000000010000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x92 い
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111000000000,
0b000000000000000000000,
0b000000001111000000000,
0b000000110000100000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x93 う
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000101000000000,
0b000000001001000000000,
0b000000010000110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x94 え
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000111110100000000,
0b000000001000010000000,
0b000000001111001000000,
0b000000011000100000000,
0b000000101000010000000,
0b000001001000010000000,
0b000000101000100000000,
0b000000011001000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x95 お
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100100000000,
0b000000000100010000000,
0b000000111110010000000,
0b000000001001001000000,
0b000000001001001000000,
0b000000010001000000000,
0b000000010001000000000,
0b000000100001000000000,
0b000000100110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x96 か
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000011111110000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000001000000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000010000000000000,
0b000000001111110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x97 き
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000001000000000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000000100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x98 く
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001000000000,
0b000000100001000000000,
0b000000101111110000000,
0b000000100001000000000,
0b000000100001000000000,
0b000000100001000000000,
0b000000100001000000000,
0b000000100010000000000,
0b000000100100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x99 け
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000010000000000000,
0b000000001111110000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x9a こ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000000100100000000,
0b000000011111000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000001111100000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000001111110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x9b さ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001000100000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x9c し
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000001000000000,
0b000000111111110000000,
0b000000000001000000000,
0b000000001101000000000,
0b000000010011000000000,
0b000000010011000000000,
0b000000001101000000000,
0b000000000001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x9d す
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000111111111000000,
0b000000001000100000000,
0b000000001001100000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000000111110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x9e せ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000001100000000000,
0b000000111111111000000,
0b000000000110000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000000111110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x9f そ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010101010000000,
0b000000000000000000000,
0b000000010101010000000,
0b000000000000000000000,
0b000000010101010000000,
0b000000000000000000000,
0b000000010101010000000,
0b000000000000000000000,
0b000000010101010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xa0 □
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000110000000000,
0b000000001001000000000,
0b000000001001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xa1 。
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xa2 「
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xa3 」
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xa4 、
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000110000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xa5 ・
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xa6 ヲ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000000100000000,
0b000000000101000000000,
0b000000000110000000000,
0b000000000100000000000,
0b000000001000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xa7 ァ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000011000000000,
0b000000000101000000000,
0b000000001001000000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xa8 ィ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000001111100000000,
0b000000001000100000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xa9 ゥ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xaa ェ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000001000000000,
0b000000001111100000000,
0b000000000001000000000,
0b000000000011000000000,
0b000000000101000000000,
0b000000001001000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xab ォ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000001111100000000,
0b000000000100100000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xac ャ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xad ュ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000000100000000,
0b000000001111100000000,
0b000000000000100000000,
0b000000001111100000000,
0b000000000000100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xae ョ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001010100000000,
0b000000001010100000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xaf ッ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000010000000000000,
0b000000001111110000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xb0 ー
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000100100000000,
0b000000000111000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000001000000000000,
0b000000010000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xb1 ア
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000011000000000,
0b000000000101000000000,
0b000000001001000000000,
0b000000010001000000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xb2 イ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xb3 ウ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xb4 エ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000011111110000000,
0b000000000001000000000,
0b000000000011000000000,
0b000000000101000000000,
0b000000001001000000000,
0b000000010001000000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xb5 オ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000010010000000,
0b000000000100010000000,
0b000000000100010000000,
0b000000001000010000000,
0b000000001000010000000,
0b000000010001100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xb6 カ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100100000000,
0b000000000101000000000,
0b000000011110010000000,
0b000000000010100000000,
0b000000000011000000000,
0b000000011101000000000,
0b000000000001000000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xb7 キ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000011110000000,
0b000000000100010000000,
0b000000000100010000000,
0b000000001000100000000,
0b000000010000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xb8 ク
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000111110000000,
0b000000001001000000000,
0b000000010001000000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xb9 ケ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xba コ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000011111110000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xbb サ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011000000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000011000010000000,
0b000000000100010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000011100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xbc シ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000101000000000,
0b000000001000100000000,
0b000000010000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xbd ス
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001011110000000,
0b000000011100010000000,
0b000000001000100000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000000111110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xbe セ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000010000000,
0b000000010000010000000,
0b000000001000010000000,
0b000000000100010000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xbf ソ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000011110000000,
0b000000000100010000000,
0b000000000110010000000,
0b000000001001100000000,
0b000000010000100000000,
0b000000000001010000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xc0 タ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000100000000,
0b000000000011000000000,
0b000000001110000000000,
0b000000000001000000000,
0b000000011111110000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xc1 チ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100010000000,
0b000000000010010000000,
0b000000010010010000000,
0b000000001000010000000,
0b000000001000100000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xc2 ツ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000001000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xc3 テ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001110000000000,
0b000000001001000000000,
0b000000001000100000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xc4 ト
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000001000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xc5 ナ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xc6 ニ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000001000100000000,
0b000000000101000000000,
0b000000000010000000000,
0b000000000101000000000,
0b000000001000100000000,
0b000000010000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xc7 ヌ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000110100000000,
0b000000011010010000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xc8 ネ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000011000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xc9 ノ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000001001000000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xca ハ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000110000000,
0b000000011111000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000001111110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xcb ヒ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xcc フ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000001010000000000,
0b000000001001000000000,
0b000000010001000000000,
0b000000010000100000000,
0b000000000000100000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xcd ヘ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000001010100000000,
0b000000010010010000000,
0b000000010010010000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xce ホ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000010001000000000,
0b000000001010000000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xcf マ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001110000000000,
0b000000000001100000000,
0b000000000000010000000,
0b000000001110000000000,
0b000000000001100000000,
0b000000000000010000000,
0b000000011110000000000,
0b000000000001100000000,
0b000000000000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xd0 ミ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000001000100000000,
0b000000001000100000000,
0b000000010011010000000,
0b000000011100010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xd1 ム
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000011001000000000,
0b000000000110000000000,
0b000000000011000000000,
0b000000000100100000000,
0b000000001000010000000,
0b000000010000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xd2 メ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000001110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xd3 モ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000001001110000000,
0b000000000110010000000,
0b000000011100100000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000000100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xd4 ヤ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xd5 ユ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xd6 ヨ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xd7 ラ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xd8 リ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001010000000000,
0b000000001010000000000,
0b000000001010000000000,
0b000000001010000000000,
0b000000001010000000000,
0b000000001010010000000,
0b000000001010010000000,
0b000000010010100000000,
0b000000010011000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xd9 ル
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000100000000,
0b000000010011000000000,
0b000000011100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xda レ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000011111110000000,
0b000000010000010000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xdb ロ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xdc ワ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010000000000000,
0b000000001000000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000110000000000,
0b000000011000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xdd ン
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010010000000000,
0b000000001001000000000,
0b000000000100100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xde ゛
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000110000000000,
0b000000001001000000000,
0b000000001001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xdf ゜
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000011111110000000,
0b000000000100000000000,
0b000000001001110000000,
0b000000001000010000000,
0b000000001000000000000,
0b000000010010000000000,
0b000000010001110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xe0 た
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000111111111000000,
0b000000001000000000000,
0b000000001011100000000,
0b000000011100010000000,
0b000000010000001000000,
0b000000000000001000000,
0b000000000000010000000,
0b000000000111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xe1 ち
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000110000010000000,
0b000000000000001000000,
0b000000000000001000000,
0b000000000000010000000,
0b000000000001100000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xe2 つ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000111111110000000,
0b000000000001100000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000000100000000000,
0b000000000011100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xe3 て
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000001001110000000,
0b000000000110000000000,
0b000000001000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000001111110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xe4 と
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001001000000000,
0b000000001000100000000,
0b000000111100010000000,
0b000000010001010000000,
0b000000010001000000000,
0b000000100111000000000,
0b000000001001100000000,
0b000000001001010000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xe5 な
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010011100000000,
0b000000010000010000000,
0b000000010000100000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000010100000000000,
0b000000010100000000000,
0b000000010011110000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xe6 に
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000001000000000,
0b000000010001000000000,
0b000000010111110000000,
0b000000001010001000000,
0b000000011010001000000,
0b000000101010001000000,
0b000000100100111000000,
0b000000100101001100000,
0b000000011000110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xe7 ぬ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000111011100000000,
0b000000001100010000000,
0b000000001000010000000,
0b000000011000010000000,
0b000000011001110000000,
0b000000101010011000000,
0b000000101010010000000,
0b000000001001100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xe8 ね
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000010010010000000,
0b000000100010001000000,
0b000000100010001000000,
0b000000100010001000000,
0b000000100100001000000,
0b000000011000010000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xe9 の
{
0b000000000000000000000,
0b000000000000000000000,
0b000000100001000000000,
0b000000100001000000000,
0b000000101111110000000,
0b000000100001000000000,
0b000000100001000000000,
0b000000100111000000000,
0b000000101001100000000,
0b000000101001010000000,
0b000000100110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xea は
{
0b000000000000000000000,
0b000000000000000000000,
0b000000111001000000000,
0b000000001001100000000,
0b000000010001010000000,
0b000000100001000000000,
0b000000100001000000000,
0b000000100001000000000,
0b000000100010000000000,
0b000000011100000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xeb ひ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111000000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000100100010000000,
0b000000100010010000000,
0b000001000001001000000,
0b000001000001001000000,
0b000001010001001000000,
0b000000001110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xec ふ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000110000000000,
0b000000001001000000000,
0b000000010000100000000,
0b000000100000010000000,
0b000000000000001000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xed へ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000101111110000000,
0b000000100001000000000,
0b000000101111110000000,
0b000000100001000000000,
0b000000100001000000000,
0b000000100111100000000,
0b000000101001010000000,
0b000000101001000000000,
0b000000100110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xee ほ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000010000000000,
0b000000001111000000000,
0b000000010010100000000,
0b000000010010010000000,
0b000000001100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xef ま
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011110000000000,
0b000000000010000000000,
0b000000000010010000000,
0b000000001111110000000,
0b000000010100011000000,
0b000000100100010000000,
0b000000100100010000000,
0b000000011001100000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xf0 み
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000111111110000000,
0b000000000100000000000,
0b000000000100110000000,
0b000000011100001000000,
0b000000100100000000000,
0b000000100100010000000,
0b000000011100010000000,
0b000000000011100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xf1 む
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000001000000000,
0b000000010001000000000,
0b000000010111100000000,
0b000000001010010000000,
0b000000011010001000000,
0b000000101010001000000,
0b000000100100001000000,
0b000000100100001000000,
0b000000011000110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xf2 め
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000011111100000000,
0b000000000100000000000,
0b000000011111100000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000100010000000,
0b000000000100010000000,
0b000000000011100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xf3 も
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000010010000000000,
0b000000010011110000000,
0b000000001101001000000,
0b000000011001001000000,
0b000000101000010000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000010000000000,
0b000000000001000000000,
0b000000000000000000000,
}, //0xf4 や
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000100001000000000,
0b000000100111110000000,
0b000000101001001000000,
0b000000010001001000000,
0b000000010001001000000,
0b000000010010001000000,
0b000000000010010000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xf5 ゆ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000011110000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000001111000000000,
0b000000010010100000000,
0b000000010010010000000,
0b000000001100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xf6 よ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011000000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000010000000000000,
0b000000010111100000000,
0b000000011000010000000,
0b000000010000010000000,
0b000000000000100000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xf7 ら
{
0b000000000000000000000,
0b000000000000000000000,
0b000000010011100000000,
0b000000010100010000000,
0b000000011000010000000,
0b000000011000010000000,
0b000000010000010000000,
0b000000010000100000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xf8 り
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000000111010000000,
0b000000001000110000000,
0b000000000111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xf9 る
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000111011100000000,
0b000000001100010000000,
0b000000001000010000000,
0b000000011000010000000,
0b000000011000100000000,
0b000000101000100000000,
0b000000101001000000000,
0b000000001001110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xfa れ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xfb ろ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000111011100000000,
0b000000001100010000000,
0b000000011000010000000,
0b000000011000010000000,
0b000000111000010000000,
0b000000101000100000000,
0b000000001001000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xfc わ
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000000100000000000,
0b000000001000000000000,
0b000000001000000000000,
0b000000011100000000000,
0b000000010010010000000,
0b000000100010010000000,
0b000000100001100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0xfd ん
null, //0xfe
null, //0xff
};
//LEDキーの番号→LEDキーに表示する文字のパターン
public static final int[][] KBD_LED_LETTER = {
{
0b000000000000000000000,
0b000000000000000000000,
0b000001001000001001000,
0b000001000100001000100,
0b001111100100111100010,
0b000010010010010001010,
0b000010010010010001000,
0b000100010000100111000,
0b000100010000001001100,
0b001000010000001001010,
0b001001100000000110000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x5a 0 かな
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b001111100000011111000,
0b001000100000000001000,
0b001000100000000001000,
0b001000101111010010000,
0b001000100000001100000,
0b001000100000000100000,
0b001111100000000010000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x5b 1 ローマ字
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000010100,
0b001111100000001010100,
0b000000100000001000000,
0b000000100000001000000,
0b000000101111001110000,
0b000000100000001001000,
0b000000100000001000000,
0b001111100000001000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x5c 2 コード入力
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b001100011001110001100,
0b010010100101001010010,
0b010000100101001010000,
0b010000111101110001100,
0b010000100101000000010,
0b010010100101000010010,
0b001100100101000001100,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x5d 3 CAPS
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000111001000100111000,
0b000010001000101000100,
0b000010001100101000000,
0b000010001010100111000,
0b000010001001100000100,
0b000010001000101000100,
0b000111001000100111000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x5e 4 INS
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000110000000,
0b000111001000001100000,
0b000001001100000000000,
0b000010001010100000000,
0b000100001000101111000,
0b000100001000110000100,
0b000100001000100000100,
0b000100010000000001000,
0b000011100000001110000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x5f 5 ひらがな
{
0b000000000000000000000,
0b000000000000000000000,
0b000001000000011110000,
0b000010100000100010000,
0b000100010001111111100,
0b011000001100100100100,
0b000111110000111111100,
0b000001000000100100100,
0b000111110000111111100,
0b000001000000100000100,
0b001111111001000001100,
0b000000000000000000000,
0b000000000000000000000,
}, //0x60 6 全角
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b001000101000101000100,
0b001000101000101101100,
0b001100101000101010100,
0b001010101000101000100,
0b001001101000101000100,
0b001000101000101000100,
0b001000100111001000100,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x74 7 NUM
};
//固定キーの番号→固定キーに表示する文字のパターン
public static final int[][] KBD_FIX_LETTER = {
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b001111100111000111000,
0b001000001000101000100,
0b001000001000001000000,
0b001111000111001000000,
0b001000000000101000000,
0b001000001000101000100,
0b001111100111000111000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x01 0 ESC
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000001111000111000000,
0b000001000101000100000,
0b000001000101000000000,
0b000001111000111000000,
0b000001000100000100000,
0b000001000101000100000,
0b000001111000111000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x0f 1 BS
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b001111100010001111000,
0b000010000101001000100,
0b000010000101001000100,
0b000010001000101111000,
0b000010001111101000100,
0b000010001000101000100,
0b000010001000101111000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x10 2 TAB
{
0b0,0b00000000000000000000000000000000,
0b0,0b00000000000000000000000000000000,
0b0,0b00000000000000000000000000000000,
0b0,0b00000000000000000000000000000000,
0b0,0b00000000000000000000000000000000,
0b0,0b00000000000000000000000000000000,
0b0,0b00000000000000000000000000000000,
0b0,0b00000000000000000001110000000000,
0b0,0b00000000000000000001010000000000,
0b0,0b00000000000000000001010000000000,
0b0,0b00000000000000000001010000000000,
0b0,0b00000000000000000001010000000000,
0b0,0b00000000000000000001010000000000,
0b0,0b00000000000000000001010000000000,
0b0,0b00000000000000000001010000000000,
0b0,0b00000000000000000001010000000000,
0b0,0b00000000000000000001010000000000,
0b0,0b00000000000000001001010000000000,
0b0,0b00000000000000011001010000000000,
0b0,0b00000000000000101111010000000000,
0b0,0b00000000000001000000010000000000,
0b0,0b00000000000000101111110000000000,
0b0,0b00000000000000011000000000000000,
0b0,0b00000000000000001000000000000000,
0b0,0b00000000000000000000000000000000,
0b0,0b00000000000000000000000000000000,
0b0,0b00000000000000000000000000000000,
0b0,0b00000000000000000000000000000000,
0b0,0b00000000000000000000000000000000,
}, //0x1d 3 RETURN
null, //0x35 4 Space
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b010010011001001011110,
0b010010100101111010000,
0b010010100101111010000,
0b011110100101001011100,
0b010010100101001010000,
0b010010100101001010000,
0b010010011001001011110,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x36 5 HOME
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b001110001111101000000,
0b001001001000001000000,
0b001000101000001000000,
0b001000101111001000000,
0b001000101000001000000,
0b001001001000001000000,
0b001110001111101111100,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x37 6 DEL
{
0b000000000000000000000,
0b011100011001000010000,
0b010010100101000010000,
0b011100100101000010000,
0b010010100101000010000,
0b010010011001111011110,
0b000000000000000000000,
0b000000100101110000000,
0b000000100101001000000,
0b000000100101110000000,
0b000000100101000000000,
0b000000011001000000000,
0b000000000000000000000,
}, //0x38 7 ROLLUP
{
0b000000000000000000000,
0b011100011001000010000,
0b010010100101000010000,
0b011100100101000010000,
0b010010100101000010000,
0b010010011001111011110,
0b000000000000000000000,
0b011100011001001010010,
0b010010100101001011010,
0b010010100101111011110,
0b010010100101111010110,
0b011100011001001010010,
0b000000000000000000000,
}, //0x39 8 ROLLDOWN
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b010010100101100001100,
0b010010100101010010010,
0b010010110101001010010,
0b010010111101001010010,
0b010010101101001010010,
0b010010100101010010010,
0b001100100101100001100,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x3a 9 UNDO
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000100000000000,
0b000000001100000000000,
0b000000010111111000000,
0b000000100000001000000,
0b000000010111111000000,
0b000000001100000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x3b 10 ←
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000101000000000,
0b000000001000100000000,
0b000000011101110000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000000111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x3c 11 ↑
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000001000000000,
0b000000000001100000000,
0b000000111111010000000,
0b000000100000001000000,
0b000000111111010000000,
0b000000000001100000000,
0b000000000001000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x3d 12 →
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111000000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000000101000000000,
0b000000011101110000000,
0b000000001000100000000,
0b000000000101000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x3e 13 ↓
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000111001000001111000,
0b001000101000001000100,
0b001000001000001000100,
0b001000001000001111000,
0b001000001000001000100,
0b001000101000001000100,
0b000111001111101000100,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x3f 14 CLR
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000001000000000000,
0b000000010000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x40 15 /
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000010010010000000,
0b000000001010100000000,
0b000000000111000000000,
0b000000001010100000000,
0b000000010010010000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x41 16 *
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x42 17 -
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000000001000000000,
0b000000000001000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x43 18 7
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x44 19 8
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001111110000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000100000000,
0b000000001111000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x45 20 9
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000011111110000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x46 21 +
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000001100000000,
0b000000000010100000000,
0b000000000100100000000,
0b000000001000100000000,
0b000000010000100000000,
0b000000010000100000000,
0b000000011111110000000,
0b000000000000100000000,
0b000000000000100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x47 22 4
{
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000011111100000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000010000010000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x48 23 5
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000111100000000,
0b000000001000000000000,
0b000000010000000000000,
0b000000010000000000000,
0b000000011111100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x49 24 6
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x4a 25 =
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000010000000000,
0b000000000110000000000,
0b000000001010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000010000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x4b 26 1
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000001100000000,
0b000000000110000000000,
0b000000001000000000000,
0b000000010000000000000,
0b000000011111110000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x4c 27 2
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000000011100000000,
0b000000000000010000000,
0b000000000000010000000,
0b000000010000010000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x4d 28 3
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b011101010111011101100,
0b010001010010010001010,
0b010001110010010001010,
0b011101110010011101100,
0b010001110010010001010,
0b010001010010010001010,
0b011101010010011101010,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x4e 29 ENTER
{
0b000000000000000000000,
0b000000000000000000000,
0b000000001111100000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000010000010000000,
0b000000001111100000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x4f 30 0
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000110000000000,
0b000000000110000000000,
0b000000000010000000000,
0b000000000100000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x50 31 ,
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000110000000000,
0b000000000110000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x51 32 .
{
0b000000000000000000000,
0b000000000000000000000,
0b000111011110011111000,
0b000000000010010001000,
0b001111000010011111000,
0b000000011110000000000,
0b000111010000111111100,
0b000000010000001000000,
0b000111010000001111000,
0b000101010010000001000,
0b000111011110011111000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x52 33 記号入力
{
0b000000000000000000000,
0b000000000000000000000,
0b010111000100110011100,
0b001010101001001000100,
0b000111110010111011100,
0b001000001001100000100,
0b010111110100110111110,
0b000100010001100001000,
0b000111110010101011110,
0b000010100001110011100,
0b001111111011000101010,
0b000000000000000000000,
0b000000000000000000000,
}, //0x53 34 登録
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b010010111101000011100,
0b010010100001000010010,
0b010010100001000010010,
0b011110111001000011100,
0b010010100001000010000,
0b010010100001000010000,
0b010010111101111010000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x54 35 HELP
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b001000101111100010000,
0b001000101000000110000,
0b000101001000000010000,
0b000010001111000010000,
0b000101001000000010000,
0b001000101000000010000,
0b001000101000000010000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x55 36 XF1
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b001000101111100111000,
0b001000101000001000100,
0b000101001000000000100,
0b000010001111000011000,
0b000101001000000100000,
0b001000101000001000000,
0b001000101000001111100,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x56 37 XF2
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b001000101111100111000,
0b001000101000001000100,
0b000101001000000000100,
0b000010001111000011000,
0b000101001000000000100,
0b001000101000001000100,
0b001000101000000111000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x57 38 XF3
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b001000101111100001000,
0b001000101000000011000,
0b000101001000000101000,
0b000010001111001001000,
0b000101001000001111100,
0b001000101000000001000,
0b001000101000000001000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x58 39 XF4
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b001000101111101111100,
0b001000101000001000000,
0b000101001000001111000,
0b000010001111000000100,
0b000101001000000000100,
0b001000101000001000100,
0b001000101000000111000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x59 40 XF5
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b011001100111001001010,
0b010101010100010101010,
0b010101010100010101010,
0b011001100111011101100,
0b010101010100010101010,
0b010101010100010101010,
0b011001010111010101010,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x61 41 BREAK
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b001100011001110100010,
0b010010100101001100010,
0b010000100101001010100,
0b010000100101110001000,
0b010000100101000001000,
0b010010100101000001000,
0b001100011001000001000,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x62 42 COPY
{
0b000000000000000000000000000,
0b000000000000000000000000000,
0b000000001111100010000000000,
0b000000001000000110000000000,
0b000000001000000010000000000,
0b000000001111000010000000000,
0b000000001000000010000000000,
0b000000001000000010000000000,
0b000000001000000010000000000,
0b000000000000000000000000000,
0b000000000000000000000000000,
}, //0x63 43 F1
{
0b000000000000000000000000000,
0b000000000000000000000000000,
0b000000001111100111000000000,
0b000000001000001000100000000,
0b000000001000000000100000000,
0b000000001111000011000000000,
0b000000001000000100000000000,
0b000000001000001000000000000,
0b000000001000001111100000000,
0b000000000000000000000000000,
0b000000000000000000000000000,
}, //0x64 44 F2
{
0b000000000000000000000000000,
0b000000000000000000000000000,
0b000000001111100111000000000,
0b000000001000001000100000000,
0b000000001000000000100000000,
0b000000001111000011000000000,
0b000000001000000000100000000,
0b000000001000001000100000000,
0b000000001000000111000000000,
0b000000000000000000000000000,
0b000000000000000000000000000,
}, //0x65 45 F3
{
0b000000000000000000000000000,
0b000000000000000000000000000,
0b000000001111100001000000000,
0b000000001000000011000000000,
0b000000001000000101000000000,
0b000000001111001001000000000,
0b000000001000001111100000000,
0b000000001000000001000000000,
0b000000001000000001000000000,
0b000000000000000000000000000,
0b000000000000000000000000000,
}, //0x66 46 F4
{
0b000000000000000000000000000,
0b000000000000000000000000000,
0b000000001111101111100000000,
0b000000001000001000000000000,
0b000000001000001111000000000,
0b000000001111000000100000000,
0b000000001000000000100000000,
0b000000001000001000100000000,
0b000000001000000111000000000,
0b000000000000000000000000000,
0b000000000000000000000000000,
}, //0x67 47 F5
{
0b000000000000000000000000000,
0b000000000000000000000000000,
0b000000001111100011000000000,
0b000000001000000100000000000,
0b000000001000001000000000000,
0b000000001111001111000000000,
0b000000001000001000100000000,
0b000000001000001000100000000,
0b000000001000000111000000000,
0b000000000000000000000000000,
0b000000000000000000000000000,
}, //0x68 48 F6
{
0b000000000000000000000000000,
0b000000000000000000000000000,
0b000000001111101111100000000,
0b000000001000000000100000000,
0b000000001000000000100000000,
0b000000001111000001000000000,
0b000000001000000010000000000,
0b000000001000000010000000000,
0b000000001000000010000000000,
0b000000000000000000000000000,
0b000000000000000000000000000,
}, //0x69 49 F7
{
0b000000000000000000000000000,
0b000000000000000000000000000,
0b000000001111100111000000000,
0b000000001000001000100000000,
0b000000001000001000100000000,
0b000000001111000111000000000,
0b000000001000001000100000000,
0b000000001000001000100000000,
0b000000001000000111000000000,
0b000000000000000000000000000,
0b000000000000000000000000000,
}, //0x6a 50 F8
{
0b000000000000000000000000000,
0b000000000000000000000000000,
0b000000001111100111000000000,
0b000000001000001000100000000,
0b000000001000001000100000000,
0b000000001111000111100000000,
0b000000001000000000100000000,
0b000000001000000001000000000,
0b000000001000000110000000000,
0b000000000000000000000000000,
0b000000000000000000000000000,
}, //0x6b 51 F9
{
0b000000000000000000000000000,
0b000000000000000000000000000,
0b000001111100010000111000000,
0b000001000000110001000100000,
0b000001000000010001000100000,
0b000001111000010001000100000,
0b000001000000010001000100000,
0b000001000000010001000100000,
0b000001000000010000111000000,
0b000000000000000000000000000,
0b000000000000000000000000000,
}, //0x6c 52 F10
{
0b0000000,0b00000000000000000000000000000000,
0b0000000,0b00000000000000000000000000000000,
0b0000000,0b00000000000000000000000000000000,
0b0000001,0b11001000100111001111101111100000,
0b0000010,0b00101000100010001000000010000000,
0b0000010,0b00001000100010001000000010000000,
0b0000001,0b11001111100010001111000010000000,
0b0000000,0b00101000100010001000000010000000,
0b0000010,0b00101000100010001000000010000000,
0b0000001,0b11001000100111001000000010000000,
0b0000000,0b00000000000000000000000000000000,
0b0000000,0b00000000000000000000000000000000,
0b0000000,0b00000000000000000000000000000000,
}, //0x70 53 SHIFT
{
0b000000000000000000000000000,
0b000000000000000000000000000,
0b000000000000000000000000000,
0b000111001111101111001000000,
0b001000100010001000101000000,
0b001000000010001000101000000,
0b001000000010001111001000000,
0b001000000010001000101000000,
0b001000100010001000101000000,
0b000111000010001000101111100,
0b000000000000000000000000000,
0b000000000000000000000000000,
0b000000000000000000000000000,
}, //0x71 54 CTRL
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b000110011100111000100,
0b001001010010010001100,
0b001001010010010000100,
0b001001011100010000100,
0b001001010000010000100,
0b001001010000010000100,
0b000110010000010100100,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x72 55 OPT.1
{
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
0b001100111001110001100,
0b010010100100100010010,
0b010010100100100000010,
0b010010111000100000100,
0b010010100000100001000,
0b010010100000100010000,
0b001100100000101011110,
0b000000000000000000000,
0b000000000000000000000,
0b000000000000000000000,
}, //0x73 56 OPT.2
};
//キーのビットマップ
// 可変キーとLEDキーはキー毎にビットマップを用意する
// 可変キーのビットマップの幅はキーの幅
public static final int[][][] kbdVarStatBitmap = new int[256][][]; //文字コード→状態→可変キーのビットマップ
public static final int[][][] kbdLedStatBitmap = new int[KBD_LED_KEYS][][]; //LEDキーの番号→状態→LEDキーのビットマップ
//種類毎に別々に用意するもの
// ビットマップ
// ピクセルオフセット→RGBコード
// 固定キーのビットマップの幅はキーボードの幅
// 番号マップ
// ピクセルオフセット→番号。-1=キーがない
// マウスの座標にどのキーがあるか瞬時に判断するための配列
// レクタングル
// {}または{x,y,w,h}または{x1,y1,w1,h1,x2,y2,w2,h2}
// 1段目を囲む0個~2個の長方形。欠番は0個、RETURNキーとSHIFTキーは2個、その他は1個
// キーを描き変えるときに使う
public static final BufferedImage[] kbdDataTypeImage = new BufferedImage[KBD_TYPES]; //種類→イメージ
public static final int[] kbdDataTypeWidth = new int[KBD_TYPES]; //種類→キーボードの幅
public static final int[] kbdDataTypeHeight = new int[KBD_TYPES]; //種類→キーボードの高さ
public static final int[][] kbdDataTypeBitmap = new int[KBD_TYPES][]; //種類→ビットマップ
public static final byte[][] kbdDataTypeIndexMap = new byte[KBD_TYPES][]; //種類→番号マップ
public static final int[][][] kbdDataTypeStatFixBitmap = new int[KBD_TYPES][][]; //種類→状態→固定キーのビットマップ
public static final int[][][] kbdDataTypeIndexRect = new int[KBD_TYPES][][]; //種類→番号→レクタングル
public static final int[][] kbdDataTypeIndexCharacterStat = new int[KBD_TYPES][]; //種類→番号→最後に描画したときの文字<<8|状態。-1=まだ描画されていない
//設定
public static boolean kbdUSLayoutOn; //true=USレイアウト。初期値を選択するときに使う
public static int[] kbdDefaultMapNonZ; //Zキーボード以外のデフォルトのキーマップ
public static int[] kbdCurrentMapNonZ; //(Zキーボードのとき)Zキーボード以外のキーマップのバックアップ
public static int[] kbdCurrentMap; //現在のキーマップ
//現在の状態
// 表示位置のXEiJ.pnlKeyboardX,XEiJ.pnlKeyboardYはパネル側で制御するのでここにはない
public static boolean kbdOn; //true=表示する,false=表示しない
public static int kbdType; //キーボードの種類。KBD_STANDARD_TYPEまたはKBD_COMPACT_TYPE
public static int kbdWidth; //キーボードの幅
public static int kbdHeight; //キーボードの高さ
public static BufferedImage kbdImage; //イメージ
public static int[] kbdBitmap; //ビットマップ
public static byte[] kbdIndexMap; //番号マップ
public static final int[] kbdStat = new int[KBD_ALL_KEYS]; //番号→状態
public static int kbdPointedIndex; //ポイントされているキーの番号。-1=どのキーもポイントされていない
public static volatile TimerTask kbdRepeatTask; //リピート中のキーコードをMFPに転送するタスク。null=リピート中ではない
public static int kbdRepeatDelay; //リピートディレイ(ms)
public static int kbdRepeatInterval; //リピートインターバル(ms)
public static int kbdLedBrightness; //LEDの明るさ。0=明るい,1=やや明るい,2=やや暗い,3=暗い
//Zキーボード
public static final boolean KBD_ZKEY_ON = true;
public static boolean kbdZKeyOnRequest; //true=Zキーボードを制御する
public static boolean kbdZKeyOn; //true=Zキーボードを制御する
public static int kbdZKeyStatus; //LEDの状態。bit0=かな,…,bit7=全角,0=消灯,1=点灯。ポートが開いていなくても更新する
public static ZKeyLEDPort kbdZKeyPort; //ポート
public static boolean kbdZKeyDebugFlag; //デバッグフラグ
// I/Oポート
// $00E9F040 かな
// $00E9F041 ローマ字
// $00E9F042 コード入力
// $00E9F043 CAPS
// $00E9F044 INS
// $00E9F045 ひらがな
// $00E9F046 全角
// $00E9F047 reserved
// $00E9F048 bit0 programmable 0=ノーマルモード,1=プログラマブルモード
// bit1 send 1=送信
// bit2-7 reserved
// $00E9F049 reserved
// : :
// $00E9F04F reserved
public static final int KBD_ZKEY_IO_ADDRESS = 0x00e9f040;
public static final int KBD_ZKEY_IO_SIZE = 16;
public static long kbdZKeyIOData; //I/Oポートのデータ
public static boolean kbdZKeyIOProgrammable; //false=ノーマルモード,true=プログラマブルモード
// 入力
// BREAKの半角(VK 244)と全角(VK 243)は押されたときreleasedが発火していつ離されたのか分からない
// 半角(VK 244)と全角(VK 243)のpressedを無視する。releasedで入力してすぐ離す
// CAPSの英数字(VK 240)→F17は押されたときreleasedが発火するがXF4でも発火するので区別がつかずいつ離されたのかも分からない
// 英数字(VK 240)→F17のreleasedを無視する。pressedで入力してすぐ離す
// XF4のひらがな(VK 242)→F16は押されたときreleasedが発火していつ離されたのか分からない
// ひらがな(VK 242)→F16のreleasedを無視する。pressedで入力して他のキーが離されるまで押されたままにする
// NumLockが点灯していないとテンキーの5と=を区別できない
// NumLockが離されたときNumLockが消灯していたら叩いて点灯させる。次のNumLockを入力に使わない
public static KeyEvent kbdXF4Locked; //押されたままのXF4
public static boolean kbdSavedNumLock; //保存したNumLock
public static boolean kbdIgnoreNumLock; //NumLockを1回無視する
// キーマップ
public static int[] kbdDefaultMapZ; //Zキーボードのデフォルトのキーマップ
public static int[] kbdCurrentMapZ; //(Zキーボードでないとき)Zキーボードのキーマップのバックアップ
// メニュー
public static JMenu kbdZKeyMenu;
public static JCheckBoxMenuItem kbdZKeyConnectCheckBox;
public static JCheckBoxMenuItem kbdZKeyDemoCheckBox;
//キーの番号
// eo
// emulator order
// 可変キー48個、LEDキー8個、固定キー57個の順で合計113個
// xo
// X68000 order
// X68000(NUM OFF)のキーコードの昇順。113個
//キーマップ
// keyCode
// ke.getKeyCode()
// Windowsの「¥」と「ろ」のキーコードは92。キーコードだけでは見分けられない
// keyLocation
// ke.getKeyLocation()
// 1 STANDARD
// 2 LEFT
// 3 RIGHT
// 4 NUMPAD
// Macの「ろ」のキーロケーションは4。意味不明。
// extendedKeyCode
// ke.getExtendedKeyCode()
// Macの「¥」と「]」の拡張キーコードは92。拡張キーコードだけでは見分けられない
// MacのShift+5の拡張キーコードは0。ユニークIDどころかIDの用もなしていない
// rawCode
// ke.paramString()から取り出す
// Java15までrawCodeを直接参照できた。Java16から直接参照できなくなった
// intCode
// KeyEventのデータをintに詰め込む
// Mac
// (keyCode&0xfff)<<16|(extendedKeyCode&0x0f000fff)<<4|(keyLocation&0xf)
// Windows
// (keyCode&0xfff)<<16|(rawCode&0xfff)<<4|(keyLocation&0xf)
// kbdCurrentMap
// kbdCurrentMap[3*xo]=intCode1
// kbdCurrentMap[3*xo+1]=intCode2
// kbdCurrentMap[3*xo+2]=intCode3
// メモ
// 半角全角漢字、変換、カタカナひらがなはKeyEventが発生しない
// 窓はconsumeしてもスタートメニューが開く
// NumLock、ScrollLockはconsumeしてもNumLock、ScrollLockが切り替わる
//
//Thanks to saku39 for providing the data for the Linux.
public static final int[] KBD_DEFAULT_MAP_LINUX = {
//(keyCode&0xffff)<<16|(rawCode&0xfff)<<4|(keyLocation&0xf)
//cccc_rrr_l cccc_rrr_l cccc_rrr_l xo hex dec text
0x001b_01b_1, 0x001b_009_1, 0x0000_000_0, // 0 0x01 1 ESC
0x0031_031_1, 0x0031_00a_1, 0x0000_000_0, // 1 0x02 2 1!ぬ
0x0032_032_1, 0x0032_00b_1, 0x0000_000_0, // 2 0x03 3 2"ふ
0x0033_033_1, 0x0033_00c_1, 0x0000_000_0, // 3 0x04 4 3#あぁ
0x0034_034_1, 0x0034_00d_1, 0x0000_000_0, // 4 0x05 5 4$うぅ
0x0035_035_1, 0x0035_00e_1, 0x0000_000_0, // 5 0x06 6 5%えぇ
0x0036_036_1, 0x0036_00f_1, 0x0000_000_0, // 6 0x07 7 6&おぉ
0x0037_037_1, 0x0037_010_1, 0x0000_000_0, // 7 0x08 8 7'やゃ
0x0038_038_1, 0x0038_011_1, 0x0000_000_0, // 8 0x09 9 8(ゆゅ
0x0039_039_1, 0x0039_012_1, 0x0000_000_0, // 9 0x0a 10 9)よょ
0x0030_030_1, 0x0030_013_1, 0x0000_000_0, // 10 0x0b 11 0 わを
0x002d_0bd_1, 0x002d_014_1, 0x0000_000_0, // 11 0x0c 12 -=ほ
0x0202_0de_1, 0x0202_015_1, 0x0000_000_0, // 12 0x0d 13 ^~へ
0x005c_0dc_1, 0x005c_084_1, 0x0000_000_0, // 13 0x0e 14 ¥|ー
0x0008_008_1, 0x0008_016_1, 0x0000_000_0, // 14 0x0f 15 BS
0x0009_009_1, 0x0009_017_1, 0x0000_000_0, // 15 0x10 16 TAB
0x0051_051_1, 0x0051_018_1, 0x0000_000_0, // 16 0x11 17 Q た
0x0057_057_1, 0x0057_019_1, 0x0000_000_0, // 17 0x12 18 W て
0x0045_045_1, 0x0045_01a_1, 0x0000_000_0, // 18 0x13 19 E いぃ
0x0052_052_1, 0x0052_01b_1, 0x0000_000_0, // 19 0x14 20 R す
0x0054_054_1, 0x0054_01c_1, 0x0000_000_0, // 20 0x15 21 T か
0x0059_059_1, 0x0059_01d_1, 0x0000_000_0, // 21 0x16 22 Y ん
0x0055_055_1, 0x0055_01e_1, 0x0000_000_0, // 22 0x17 23 U な
0x0049_049_1, 0x0049_01f_1, 0x0000_000_0, // 23 0x18 24 I に
0x004f_04f_1, 0x004f_020_1, 0x0000_000_0, // 24 0x19 25 O ら
0x0050_050_1, 0x0050_021_1, 0x0000_000_0, // 25 0x1a 26 P せ
0x0200_0c0_1, 0x0200_022_1, 0x0000_000_0, // 26 0x1b 27 @`゛
0x005b_0db_1, 0x005b_023_1, 0x0000_000_0, // 27 0x1c 28 [{゜「
0x000a_00d_1, 0x000a_024_1, 0x0000_000_0, // 28 0x1d 29 リターン
0x0041_041_1, 0x0041_026_1, 0x0000_000_0, // 29 0x1e 30 A ち
0x0053_053_1, 0x0053_027_1, 0x0000_000_0, // 30 0x1f 31 S と
0x0044_044_1, 0x0044_028_1, 0x0000_000_0, // 31 0x20 32 D し
0x0046_046_1, 0x0046_029_1, 0x0000_000_0, // 32 0x21 33 F は
0x0047_047_1, 0x0047_02a_1, 0x0000_000_0, // 33 0x22 34 G き
0x0048_048_1, 0x0048_02b_1, 0x0000_000_0, // 34 0x23 35 H く
0x004a_04a_1, 0x004a_02c_1, 0x0000_000_0, // 35 0x24 36 J ま
0x004b_04b_1, 0x004b_02d_1, 0x0000_000_0, // 36 0x25 37 K の
0x004c_04c_1, 0x004c_02e_1, 0x0000_000_0, // 37 0x26 38 L り
0x003b_0bb_1, 0x003b_02f_1, 0x0000_000_0, // 38 0x27 39 ;+れ
0x0201_0ba_1, 0x0201_030_1, 0x0000_000_0, // 39 0x28 40 :*け
0x005d_0dd_1, 0x005d_033_1, 0x0000_000_0, // 40 0x29 41 ]}む」
0x005a_05a_1, 0x005a_034_1, 0x0000_000_0, // 41 0x2a 42 Z つっ
0x0058_058_1, 0x0058_035_1, 0x0000_000_0, // 42 0x2b 43 X さ
0x0043_043_1, 0x0043_036_1, 0x0000_000_0, // 43 0x2c 44 C そ
0x0056_056_1, 0x0056_037_1, 0x0000_000_0, // 44 0x2d 45 V ひ
0x0042_042_1, 0x0042_038_1, 0x0000_000_0, // 45 0x2e 46 B こ
0x004e_04e_1, 0x004e_039_1, 0x0000_000_0, // 46 0x2f 47 N み
0x004d_04d_1, 0x004d_03a_1, 0x0000_000_0, // 47 0x30 48 M も
0x002c_0bc_1, 0x002c_03b_1, 0x0000_000_0, // 48 0x31 49 ,<ね、
0x002e_0be_1, 0x002e_03c_1, 0x0000_000_0, // 49 0x32 50 .>る。
0x002f_0bf_1, 0x002f_03d_1, 0x0000_000_0, // 50 0x33 51 /?め・
0x005c_0e2_1, 0x005c_061_1, 0x0000_000_0, // 51 0x34 52 _ろ□
0x0020_020_1, 0x0020_041_1, 0x0000_000_0, // 52 0x35 53 スペース
0x0024_024_1, 0x0024_06e_1, 0x0000_000_0, // 53 0x36 54 HOME
0x007f_02e_1, 0x007f_077_1, 0x0000_000_0, // 54 0x37 55 DEL
0x0022_022_1, 0x0022_075_1, 0x0000_000_0, // 55 0x38 56 ROLLUP
0x0021_021_1, 0x0021_070_1, 0x0000_000_0, // 56 0x39 57 ROLLDOWN
0x0023_023_1, 0x0023_073_1, 0x0000_000_0, // 57 0x3a 58 UNDO
0x0025_025_1, 0x0025_071_1, 0x0000_000_0, // 58 0x3b 59 ←
0x0026_026_1, 0x0026_06f_1, 0x0000_000_0, // 59 0x3c 60 ↑
0x0027_027_1, 0x0027_072_1, 0x0000_000_0, // 60 0x3d 61 →
0x0028_028_1, 0x0028_074_1, 0x0000_000_0, // 61 0x3e 62 ↓
0x0090_090_4, 0x0000_000_0, 0x0000_000_0, // 62 0x3f 63 CLR
0x006f_06f_4, 0x0000_000_0, 0x0000_000_0, // 63 0x40 64 /
0x006a_06a_4, 0x0000_000_0, 0x0000_000_0, // 64 0x41 65 *
0x006d_06d_4, 0x0000_000_0, 0x0000_000_0, // 65 0x42 66 -
0x0024_024_4, 0x0067_067_4, 0x0000_000_0, // 66 0x43 67 7
0x0026_026_4, 0x0068_068_4, 0x0000_000_0, // 67 0x44 68 8
0x0021_021_4, 0x0069_069_4, 0x0000_000_0, // 68 0x45 69 9
0x006b_06b_4, 0x0000_000_0, 0x0000_000_0, // 69 0x46 70 +
0x0025_025_4, 0x0064_064_4, 0x0000_000_0, // 70 0x47 71 4
0x000c_00c_4, 0x0065_065_4, 0x0000_000_0, // 71 0x48 72 5
0x0027_027_4, 0x0066_066_4, 0x0000_000_0, // 72 0x49 73 6
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 73 0x4a 74 =
0x0023_023_4, 0x0061_061_4, 0x0000_000_0, // 74 0x4b 75 1
0x0028_028_4, 0x0062_062_4, 0x0000_000_0, // 75 0x4c 76 2
0x0022_022_4, 0x0063_063_4, 0x0000_000_0, // 76 0x4d 77 3
0x000a_00d_4, 0x0000_000_0, 0x0000_000_0, // 77 0x4e 78 ENTER
0x009b_02d_4, 0x0060_060_4, 0x0000_000_0, // 78 0x4f 79 0
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 79 0x50 80 ,
0x007f_02e_4, 0x006e_06e_4, 0x0000_000_0, // 80 0x51 81 .
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 81 0x52 82 記号入力
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 82 0x53 83 登録
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 83 0x54 84 HELP
0x0012_012_2, 0x0012_040_2, 0x0000_000_0, // 84 0x55 85 XF1
0x001d_01d_1, 0x001d_066_1, 0x0000_000_0, // 85 0x56 86 XF2
0x0012_012_3, 0x0012_06c_3, 0x0000_000_0, // 86 0x57 87 XF3
0x020d_05d_1, 0x0000_000_0, 0x0000_000_0, // 87 0x58 88 XF4
0x0011_011_3, 0x0000_000_0, 0x0000_000_0, // 88 0x59 89 XF5
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 89 0x5a 90 かな
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 90 0x5b 91 ローマ字
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 91 0x5c 92 コード入力
0x0014_014_1, 0x0000_000_0, 0x0000_000_0, // 92 0x5d 93 CAPS
0x009b_02d_1, 0x009b_076_1, 0x0000_000_0, // 93 0x5e 94 INS
0x020c_05b_2, 0x0000_000_0, 0x0000_000_0, // 94 0x5f 95 ひらがな
0x020c_05c_3, 0x0000_000_0, 0x0000_000_0, // 95 0x60 96 全角
0x0013_013_1, 0x0000_000_0, 0x0000_000_0, // 96 0x61 97 BREAK
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 97 0x62 98 COPY
0x0070_070_1, 0x0070_043_1, 0x0000_000_0, // 98 0x63 99 F1
0x0071_071_1, 0x0071_044_1, 0x0000_000_0, // 99 0x64 100 F2
0x0072_072_1, 0x0072_045_1, 0x0000_000_0, // 100 0x65 101 F3
0x0073_073_1, 0x0073_046_1, 0x0000_000_0, // 101 0x66 102 F4
0x0074_074_1, 0x0074_047_1, 0x0000_000_0, // 102 0x67 103 F5
0x0075_075_1, 0x0075_048_1, 0x0000_000_0, // 103 0x68 104 F6
0x0076_076_1, 0x0076_049_1, 0x0000_000_0, // 104 0x69 105 F7
0x0077_077_1, 0x0077_04a_1, 0x0000_000_0, // 105 0x6a 106 F8
0x0078_078_1, 0x0078_04b_1, 0x0000_000_0, // 106 0x6b 107 F9
0x0079_079_1, 0x0079_04c_1, 0x0000_000_0, // 107 0x6c 108 F10
0x0010_010_3, 0x0010_032_2, 0x0010_03e_3, // 108 0x70 112 SHIFT
0x0011_011_2, 0x0011_042_2, 0x0000_000_0, // 109 0x71 113 CTRL
0x007a_05f_1, 0x0000_000_0, 0x0000_000_0, // 110 0x72 114 OPT.1
0x007b_060_1, 0x0000_000_0, 0x0000_000_0, // 111 0x73 115 OPT.2
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 112 0x74 116 NUM
};
//Thanks to tantan for providing the data for the macOS US layout.
//
// KBD_DEFAULT_MAP_MAC_US
// macOS + USキーボード 用 XEiJ デフォルトキーマッピング
//
// macOS + USキーボード で XEiJ を使用する場合、KBD_DEFAULT_MAP_MAC のマッピングでは
// 主要記号を含む一部の文字が入力できません。これは一部のキーが KeyEvent#getExtendedKeyCode() で
// JISキーボードとは異なる値を返すためです。
//
// このマッピングを使うことでUSキーボードでもすべての記号文字が入力可能となります。
// 逆にこのマッピングを使うとJISキーボードでは正しく入力できなくなるので注意してください。
//
// また、M.Kamadaさん作 KeyWitch.X を使用して Human68K 側をUS(ASCII)配列にすると、
// SHIFTキーと組み合わせた記号入力も含め、XEiJ上で完全なUS配列となります。(推奨)
//
// KeyWitch.X を組み込まない場合は、XEiJ上でほぼJISキーボードの配列になります。
//
// KeyWitch.Xと68エミュレータについては以下を参考にさせて頂きました。
// https://yatte-mita.hateblo.jp/entry/2019/06/15/130053
//
// KeyWitch.X は CONFIG.SYS に以下のように追加してください。
// DEVICE=\path\to\KeyWitch.x -e \path\to\ascii.env
//
public static final int[] KBD_DEFAULT_MAP_MAC_US = {
//(keyCode&0xfff)<<16|(extendedKeyCode&0x0f000fff)<<4|(keyLocation&0xf)
//e_ccc_eee_l e_ccc_eee_l e_ccc_eee_l xo hex dec text
0x0_01b_01b_1, 0x0_000_000_0, 0x0_000_000_0, // 0 0x01 1 ESC
0x0_031_031_1, 0x0_031_205_1, 0x0_000_000_0, // 1 0x02 2 1!ぬ
0x0_032_032_1, 0x0_032_200_1, 0x0_000_000_0, // 2 0x03 3 2"ふ // 2番目を変更(@)
0x0_033_033_1, 0x0_033_208_1, 0x0_000_000_0, // 3 0x04 4 3#あぁ
0x0_034_034_1, 0x0_034_203_1, 0x0_000_000_0, // 4 0x05 5 4$うぅ
0x0_035_035_1, 0x0_035_000_1, 0x0_000_000_0, // 5 0x06 6 5%えぇ
0x0_036_036_1, 0x0_036_202_1, 0x0_000_000_0, // 6 0x07 7 6&おぉ // 2番目を変更(^)
0x0_037_037_1, 0x0_037_096_1, 0x0_000_000_0, // 7 0x08 8 7'やゃ // 2番目を変更(&)
0x0_038_038_1, 0x0_038_097_1, 0x0_000_000_0, // 8 0x09 9 8(ゆゅ // 2番目を変更(*)
0x0_039_039_1, 0x0_039_207_1, 0x0_000_000_0, // 9 0x0a 10 9)よょ // 2番目を変更(()
0x0_030_030_1, 0x0_030_20a_1, 0x0_000_000_0, // 10 0x0b 11 0 わを // 2番目を変更())
0x0_02d_02d_1, 0x0_02d_20b_1, 0x0_02d_000_1, // 11 0x0c 12 -=ほ // 2番目を変更(_)
0x0_03d_03d_1, 0x0_03d_209_1, 0x0_03d_000_1, // 12 0x0d 13 ^~へ // 1,2番目を変更(=,+)
0x0_05c_05c_1, 0x1_05c_07c_1, 0x0_000_000_0, // 13 0x0e 14 ¥|ー // 1,2番目を変更(\,|)
0x0_008_008_1, 0x0_000_000_0, 0x0_000_000_0, // 14 0x0f 15 BS
0x0_009_009_1, 0x0_000_000_0, 0x0_000_000_0, // 15 0x10 16 TAB
0x0_051_051_1, 0x0_051_000_1, 0x0_000_000_0, // 16 0x11 17 Q た
0x0_057_057_1, 0x0_057_000_1, 0x0_000_000_0, // 17 0x12 18 W て
0x0_045_045_1, 0x0_045_000_1, 0x0_000_000_0, // 18 0x13 19 E いぃ
0x0_052_052_1, 0x0_052_000_1, 0x0_000_000_0, // 19 0x14 20 R す
0x0_054_054_1, 0x0_054_000_1, 0x0_000_000_0, // 20 0x15 21 T か
0x0_059_059_1, 0x0_059_000_1, 0x0_000_000_0, // 21 0x16 22 Y ん
0x0_055_055_1, 0x0_055_000_1, 0x0_000_000_0, // 22 0x17 23 U な
0x0_049_049_1, 0x0_049_000_1, 0x0_000_000_0, // 23 0x18 24 I に
0x0_04f_04f_1, 0x0_04f_000_1, 0x0_000_000_0, // 24 0x19 25 O ら
0x0_050_050_1, 0x0_050_000_1, 0x0_000_000_0, // 25 0x1a 26 P せ
0x0_05b_05b_1, 0x0_05b_0a1_1, 0x0_000_000_0, // 26 0x1b 27 @`゛ // 1,2番目を変更([,{)
0x0_05d_05d_1, 0x0_05d_0a2_1, 0x0_05d_01b_1, // 27 0x1c 28 [{゜「 // 1,2番目を変更(],})
0x0_00a_00a_1, 0x0_00a_000_1, 0x0_000_000_0, // 28 0x1d 29 リターン // 2番目を追加(SHIFT/CTRL同時押し)
0x0_041_041_1, 0x0_041_000_1, 0x0_000_000_0, // 29 0x1e 30 A ち
0x0_053_053_1, 0x0_053_000_1, 0x0_000_000_0, // 30 0x1f 31 S と
0x0_044_044_1, 0x0_044_000_1, 0x0_000_000_0, // 31 0x20 32 D し
0x0_046_046_1, 0x0_046_000_1, 0x0_000_000_0, // 32 0x21 33 F は
0x0_047_047_1, 0x0_047_000_1, 0x0_000_000_0, // 33 0x22 34 G き
0x0_048_048_1, 0x0_048_008_1, 0x0_000_000_0, // 34 0x23 35 H く
0x0_04a_04a_1, 0x0_04a_00a_1, 0x0_000_000_0, // 35 0x24 36 J ま
0x0_04b_04b_1, 0x0_04b_000_1, 0x0_000_000_0, // 36 0x25 37 K の
0x0_04c_04c_1, 0x0_04c_000_1, 0x0_000_000_0, // 37 0x26 38 L り
0x0_03b_03b_1, 0x0_03b_201_1, 0x0_000_000_0, // 38 0x27 39 ;+れ // 2番目を変更(:)
0x0_0de_0de_1, 0x0_0de_098_1, 0x0_000_000_0, // 39 0x28 40 :*け // 1,2番目を変更(',"),3番目削除
0x0_0c0_0c0_1, 0x1_0c0_07e_1, 0x0_05c_000_1, // 40 0x29 41 ]}む」 // 1,2番目を変更(`,~)
0x0_05a_05a_1, 0x0_05a_000_1, 0x0_000_000_0, // 41 0x2a 42 Z つっ
0x0_058_058_1, 0x0_058_000_1, 0x0_000_000_0, // 42 0x2b 43 X さ
0x0_043_043_1, 0x0_043_000_1, 0x0_000_000_0, // 43 0x2c 44 C そ
0x0_056_056_1, 0x0_056_000_1, 0x0_000_000_0, // 44 0x2d 45 V ひ
0x0_042_042_1, 0x0_042_000_1, 0x0_000_000_0, // 45 0x2e 46 B こ
0x0_04e_04e_1, 0x0_04e_000_1, 0x0_000_000_0, // 46 0x2f 47 N み
0x0_04d_04d_1, 0x0_04d_000_1, 0x0_000_000_0, // 47 0x30 48 M も
0x0_02c_02c_1, 0x0_02c_099_1, 0x0_000_000_0, // 48 0x31 49 ,<ね、
0x0_02e_02e_1, 0x0_02e_0a0_1, 0x0_000_000_0, // 49 0x32 50 .>る。
0x0_02f_02f_1, 0x0_02f_000_1, 0x0_000_000_0, // 50 0x33 51 /?め・
0x0_02d_20b_1, 0x0_20b_000_4, 0x0_000_000_0, // 51 0x34 52 _ろ□ // 1番目を変更(_)
0x0_020_020_1, 0x0_000_000_0, 0x0_000_000_0, // 52 0x35 53 スペース
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 53 0x36 54 HOME
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 54 0x37 55 DEL
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 55 0x38 56 ROLLUP
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 56 0x39 57 ROLLDOWN
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 57 0x3a 58 UNDO
0x0_025_025_1, 0x0_000_000_0, 0x0_000_000_0, // 58 0x3b 59 ←
0x0_026_026_1, 0x0_000_000_0, 0x0_000_000_0, // 59 0x3c 60 ↑
0x0_027_027_1, 0x0_000_000_0, 0x0_000_000_0, // 60 0x3d 61 →
0x0_028_028_1, 0x0_000_000_0, 0x0_000_000_0, // 61 0x3e 62 ↓
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 62 0x3f 63 CLR
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 63 0x40 64 /
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 64 0x41 65 *
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 65 0x42 66 -
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 66 0x43 67 7
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 67 0x44 68 8
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 68 0x45 69 9
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 69 0x46 70 +
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 70 0x47 71 4
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 71 0x48 72 5
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 72 0x49 73 6
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 73 0x4a 74 =
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 74 0x4b 75 1
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 75 0x4c 76 2
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 76 0x4d 77 3
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 77 0x4e 78 ENTER
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 78 0x4f 79 0
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 79 0x50 80 ,
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 80 0x51 81 .
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 81 0x52 82 記号入力
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 82 0x53 83 登録
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 83 0x54 84 HELP
0x0_012_012_2, 0x0_000_000_0, 0x0_000_000_0, // 84 0x55 85 XF1
0x0_09d_09d_2, 0x0_000_000_0, 0x0_000_000_0, // 85 0x56 86 XF2
0x0_09d_09d_3, 0x0_000_000_0, 0x0_000_000_0, // 86 0x57 87 XF3
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 87 0x58 88 XF4
0x0_07b_07b_1, 0x0_000_000_0, 0x0_000_000_0, // 88 0x59 89 XF5
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 89 0x5a 90 かな
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 90 0x5b 91 ローマ字
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 91 0x5c 92 コード入力
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 92 0x5d 93 CAPS
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 93 0x5e 94 INS
0x0_014_014_1, 0x0_000_000_0, 0x0_000_000_0, // 94 0x5f 95 ひらがな
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 95 0x60 96 全角
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 96 0x61 97 BREAK
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 97 0x62 98 COPY
0x0_070_070_1, 0x0_000_000_0, 0x0_000_000_0, // 98 0x63 99 F1
0x0_071_071_1, 0x0_000_000_0, 0x0_000_000_0, // 99 0x64 100 F2
0x0_072_072_1, 0x0_000_000_0, 0x0_000_000_0, // 100 0x65 101 F3
0x0_073_073_1, 0x0_000_000_0, 0x0_000_000_0, // 101 0x66 102 F4
0x0_074_074_1, 0x0_000_000_0, 0x0_000_000_0, // 102 0x67 103 F5
0x0_075_075_1, 0x0_000_000_0, 0x0_000_000_0, // 103 0x68 104 F6
0x0_076_076_1, 0x0_000_000_0, 0x0_000_000_0, // 104 0x69 105 F7
0x0_077_077_1, 0x0_000_000_0, 0x0_000_000_0, // 105 0x6a 106 F8
0x0_078_078_1, 0x0_000_000_0, 0x0_000_000_0, // 106 0x6b 107 F9
0x0_079_079_1, 0x0_000_000_0, 0x0_000_000_0, // 107 0x6c 108 F10
0x0_010_010_2, 0x0_010_010_3, 0x0_000_000_0, // 108 0x70 112 SHIFT
0x0_011_011_2, 0x0_000_000_0, 0x0_000_000_0, // 109 0x71 113 CTRL
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 110 0x72 114 OPT.1
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 111 0x73 115 OPT.2
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 112 0x74 116 NUM
};
//Thanks to yuduki for providing the data for the macOS.
public static final int[] KBD_DEFAULT_MAP_MAC = {
//(keyCode&0xfff)<<16|(extendedKeyCode&0x0f000fff)<<4|(keyLocation&0xf)
//e_ccc_eee_l e_ccc_eee_l e_ccc_eee_l xo hex dec text
0x0_01b_01b_1, 0x0_000_000_0, 0x0_000_000_0, // 0 0x01 1 ESC
0x0_031_031_1, 0x0_031_205_1, 0x0_000_000_0, // 1 0x02 2 1!ぬ
0x0_032_032_1, 0x0_032_098_1, 0x0_000_000_0, // 2 0x03 3 2"ふ
0x0_033_033_1, 0x0_033_208_1, 0x0_000_000_0, // 3 0x04 4 3#あぁ
0x0_034_034_1, 0x0_034_203_1, 0x0_000_000_0, // 4 0x05 5 4$うぅ
0x0_035_035_1, 0x0_035_000_1, 0x0_000_000_0, // 5 0x06 6 5%えぇ
0x0_036_036_1, 0x0_036_096_1, 0x0_000_000_0, // 6 0x07 7 6&おぉ
0x0_037_037_1, 0x0_037_0de_1, 0x0_000_000_0, // 7 0x08 8 7'やゃ
0x0_038_038_1, 0x0_038_207_1, 0x0_000_000_0, // 8 0x09 9 8(ゆゅ
0x0_039_039_1, 0x0_039_20a_1, 0x0_000_000_0, // 9 0x0a 10 9)よょ
0x0_030_030_1, 0x0_000_000_0, 0x0_000_000_0, // 10 0x0b 11 0 わを
0x0_02d_02d_1, 0x0_02d_03d_1, 0x0_02d_000_1, // 11 0x0c 12 -=ほ
0x0_03d_202_1, 0x1_03d_07e_1, 0x0_03d_000_1, // 12 0x0d 13 ^~へ
0x1_05c_0a5_1, 0x1_05c_07c_1, 0x0_000_000_0, // 13 0x0e 14 ¥|ー
0x0_008_008_1, 0x0_000_000_0, 0x0_000_000_0, // 14 0x0f 15 BS
0x0_009_009_1, 0x0_000_000_0, 0x0_000_000_0, // 15 0x10 16 TAB
0x0_051_051_1, 0x0_051_000_1, 0x0_000_000_0, // 16 0x11 17 Q た
0x0_057_057_1, 0x0_057_000_1, 0x0_000_000_0, // 17 0x12 18 W て
0x0_045_045_1, 0x0_045_000_1, 0x0_000_000_0, // 18 0x13 19 E いぃ
0x0_052_052_1, 0x0_052_000_1, 0x0_000_000_0, // 19 0x14 20 R す
0x0_054_054_1, 0x0_054_000_1, 0x0_000_000_0, // 20 0x15 21 T か
0x0_059_059_1, 0x0_059_000_1, 0x0_000_000_0, // 21 0x16 22 Y ん
0x0_055_055_1, 0x0_055_000_1, 0x0_000_000_0, // 22 0x17 23 U な
0x0_049_049_1, 0x0_049_000_1, 0x0_000_000_0, // 23 0x18 24 I に
0x0_04f_04f_1, 0x0_04f_000_1, 0x0_000_000_0, // 24 0x19 25 O ら
0x0_050_050_1, 0x0_050_000_1, 0x0_000_000_0, // 25 0x1a 26 P せ
0x0_05b_200_1, 0x0_05b_0c0_1, 0x0_05b_020_1, // 26 0x1b 27 @`゛
0x0_05d_05b_1, 0x0_05d_0a1_1, 0x0_05d_01b_1, // 27 0x1c 28 [{゜「
0x0_00a_00a_1, 0x0_000_000_0, 0x0_000_000_0, // 28 0x1d 29 リターン
0x0_041_041_1, 0x0_041_000_1, 0x0_000_000_0, // 29 0x1e 30 A ち
0x0_053_053_1, 0x0_053_000_1, 0x0_000_000_0, // 30 0x1f 31 S と
0x0_044_044_1, 0x0_044_000_1, 0x0_000_000_0, // 31 0x20 32 D し
0x0_046_046_1, 0x0_046_000_1, 0x0_000_000_0, // 32 0x21 33 F は
0x0_047_047_1, 0x0_047_000_1, 0x0_000_000_0, // 33 0x22 34 G き
0x0_048_048_1, 0x0_048_008_1, 0x0_000_000_0, // 34 0x23 35 H く
0x0_04a_04a_1, 0x0_04a_00a_1, 0x0_000_000_0, // 35 0x24 36 J ま
0x0_04b_04b_1, 0x0_04b_000_1, 0x0_000_000_0, // 36 0x25 37 K の
0x0_04c_04c_1, 0x0_04c_000_1, 0x0_000_000_0, // 37 0x26 38 L り
0x0_03b_03b_1, 0x0_03b_209_1, 0x0_000_000_0, // 38 0x27 39 ;+れ
0x0_0de_201_1, 0x0_0de_097_1, 0x0_0de_0de_1, // 39 0x28 40 :*け
0x0_05c_05d_1, 0x0_05c_0a2_1, 0x0_05c_000_1, // 40 0x29 41 ]}む」
0x0_05a_05a_1, 0x0_05a_000_1, 0x0_000_000_0, // 41 0x2a 42 Z つっ
0x0_058_058_1, 0x0_058_000_1, 0x0_000_000_0, // 42 0x2b 43 X さ
0x0_043_043_1, 0x0_043_000_1, 0x0_000_000_0, // 43 0x2c 44 C そ
0x0_056_056_1, 0x0_056_000_1, 0x0_000_000_0, // 44 0x2d 45 V ひ
0x0_042_042_1, 0x0_042_000_1, 0x0_000_000_0, // 45 0x2e 46 B こ
0x0_04e_04e_1, 0x0_04e_000_1, 0x0_000_000_0, // 46 0x2f 47 N み
0x0_04d_04d_1, 0x0_04d_000_1, 0x0_000_000_0, // 47 0x30 48 M も
0x0_02c_02c_1, 0x0_02c_099_1, 0x0_000_000_0, // 48 0x31 49 ,<ね、
0x0_02e_02e_1, 0x0_02e_0a0_1, 0x0_000_000_0, // 49 0x32 50 .>る。
0x0_02f_02f_1, 0x0_02f_000_1, 0x0_000_000_0, // 50 0x33 51 /?め・
0x0_20b_20b_4, 0x0_20b_000_4, 0x0_000_000_0, // 51 0x34 52 _ろ□
0x0_020_020_1, 0x0_000_000_0, 0x0_000_000_0, // 52 0x35 53 スペース
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 53 0x36 54 HOME
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 54 0x37 55 DEL
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 55 0x38 56 ROLLUP
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 56 0x39 57 ROLLDOWN
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 57 0x3a 58 UNDO
0x0_025_025_1, 0x0_000_000_0, 0x0_000_000_0, // 58 0x3b 59 ←
0x0_026_026_1, 0x0_000_000_0, 0x0_000_000_0, // 59 0x3c 60 ↑
0x0_027_027_1, 0x0_000_000_0, 0x0_000_000_0, // 60 0x3d 61 →
0x0_028_028_1, 0x0_000_000_0, 0x0_000_000_0, // 61 0x3e 62 ↓
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 62 0x3f 63 CLR
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 63 0x40 64 /
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 64 0x41 65 *
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 65 0x42 66 -
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 66 0x43 67 7
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 67 0x44 68 8
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 68 0x45 69 9
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 69 0x46 70 +
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 70 0x47 71 4
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 71 0x48 72 5
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 72 0x49 73 6
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 73 0x4a 74 =
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 74 0x4b 75 1
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 75 0x4c 76 2
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 76 0x4d 77 3
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 77 0x4e 78 ENTER
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 78 0x4f 79 0
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 79 0x50 80 ,
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 80 0x51 81 .
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 81 0x52 82 記号入力
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 82 0x53 83 登録
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 83 0x54 84 HELP
0x0_012_012_2, 0x0_000_000_0, 0x0_000_000_0, // 84 0x55 85 XF1
0x0_09d_09d_2, 0x0_000_000_0, 0x0_000_000_0, // 85 0x56 86 XF2
0x0_09d_09d_3, 0x0_000_000_0, 0x0_000_000_0, // 86 0x57 87 XF3
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 87 0x58 88 XF4
0x0_07b_07b_1, 0x0_000_000_0, 0x0_000_000_0, // 88 0x59 89 XF5
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 89 0x5a 90 かな
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 90 0x5b 91 ローマ字
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 91 0x5c 92 コード入力
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 92 0x5d 93 CAPS
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 93 0x5e 94 INS
0x0_014_014_1, 0x0_000_000_0, 0x0_000_000_0, // 94 0x5f 95 ひらがな
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 95 0x60 96 全角
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 96 0x61 97 BREAK
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 97 0x62 98 COPY
0x0_070_070_1, 0x0_000_000_0, 0x0_000_000_0, // 98 0x63 99 F1
0x0_071_071_1, 0x0_000_000_0, 0x0_000_000_0, // 99 0x64 100 F2
0x0_072_072_1, 0x0_000_000_0, 0x0_000_000_0, // 100 0x65 101 F3
0x0_073_073_1, 0x0_000_000_0, 0x0_000_000_0, // 101 0x66 102 F4
0x0_074_074_1, 0x0_000_000_0, 0x0_000_000_0, // 102 0x67 103 F5
0x0_075_075_1, 0x0_000_000_0, 0x0_000_000_0, // 103 0x68 104 F6
0x0_076_076_1, 0x0_000_000_0, 0x0_000_000_0, // 104 0x69 105 F7
0x0_077_077_1, 0x0_000_000_0, 0x0_000_000_0, // 105 0x6a 106 F8
0x0_078_078_1, 0x0_000_000_0, 0x0_000_000_0, // 106 0x6b 107 F9
0x0_079_079_1, 0x0_000_000_0, 0x0_000_000_0, // 107 0x6c 108 F10
0x0_010_010_2, 0x0_010_010_3, 0x0_000_000_0, // 108 0x70 112 SHIFT
0x0_011_011_2, 0x0_000_000_0, 0x0_000_000_0, // 109 0x71 113 CTRL
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 110 0x72 114 OPT.1
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 111 0x73 115 OPT.2
0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0, // 112 0x74 116 NUM
};
public static final int[] KBD_DEFAULT_MAP_WIN_US = {
//(keyCode&0xffff)<<16|(rawCode&0xfff)<<4|(keyLocation&0xf)
//cccc_rrr_l cccc_rrr_l cccc_rrr_l xo hex dec text
0x001b_01b_1, 0x0000_000_0, 0x0000_000_0, // 0 0x01 1 ESC
0x0031_031_1, 0x0000_000_0, 0x0000_000_0, // 1 0x02 2 1!ぬ
0x0032_032_1, 0x0000_000_0, 0x0000_000_0, // 2 0x03 3 2"ふ
0x0033_033_1, 0x0000_000_0, 0x0000_000_0, // 3 0x04 4 3#あぁ
0x0034_034_1, 0x0000_000_0, 0x0000_000_0, // 4 0x05 5 4$うぅ
0x0035_035_1, 0x0000_000_0, 0x0000_000_0, // 5 0x06 6 5%えぇ
0x0036_036_1, 0x0000_000_0, 0x0000_000_0, // 6 0x07 7 6&おぉ
0x0037_037_1, 0x0000_000_0, 0x0000_000_0, // 7 0x08 8 7'やゃ
0x0038_038_1, 0x0000_000_0, 0x0000_000_0, // 8 0x09 9 8(ゆゅ
0x0039_039_1, 0x0000_000_0, 0x0000_000_0, // 9 0x0a 10 9)よょ
0x0030_030_1, 0x0000_000_0, 0x0000_000_0, // 10 0x0b 11 0 わを
0x002d_0bd_1, 0x0000_000_0, 0x0000_000_0, // 11 0x0c 12 -=ほ
0x003d_0bb_1, 0x0000_000_0, 0x0000_000_0, // 12 0x0d 13 ^~へ
0x00c0_0c0_1, 0x0000_0ff_1, 0x0000_000_0, // 13 0x0e 14 ¥|ー
0x0008_008_1, 0x0000_000_0, 0x0000_000_0, // 14 0x0f 15 BS
0x0009_009_1, 0x0000_000_0, 0x0000_000_0, // 15 0x10 16 TAB
0x0051_051_1, 0x0000_000_0, 0x0000_000_0, // 16 0x11 17 Q た
0x0057_057_1, 0x0000_000_0, 0x0000_000_0, // 17 0x12 18 W て
0x0045_045_1, 0x0000_000_0, 0x0000_000_0, // 18 0x13 19 E いぃ
0x0052_052_1, 0x0000_000_0, 0x0000_000_0, // 19 0x14 20 R す
0x0054_054_1, 0x0000_000_0, 0x0000_000_0, // 20 0x15 21 T か
0x0059_059_1, 0x0000_000_0, 0x0000_000_0, // 21 0x16 22 Y ん
0x0055_055_1, 0x0000_000_0, 0x0000_000_0, // 22 0x17 23 U な
0x0049_049_1, 0x0000_000_0, 0x0000_000_0, // 23 0x18 24 I に
0x004f_04f_1, 0x0000_000_0, 0x0000_000_0, // 24 0x19 25 O ら
0x0050_050_1, 0x0000_000_0, 0x0000_000_0, // 25 0x1a 26 P せ
0x005b_0db_1, 0x0000_000_0, 0x0000_000_0, // 26 0x1b 27 @`゛
0x005d_0dd_1, 0x0000_000_0, 0x0000_000_0, // 27 0x1c 28 [{゜「
0x000a_00d_1, 0x0000_000_0, 0x0000_000_0, // 28 0x1d 29 リターン
0x0041_041_1, 0x0000_000_0, 0x0000_000_0, // 29 0x1e 30 A ち
0x0053_053_1, 0x0000_000_0, 0x0000_000_0, // 30 0x1f 31 S と
0x0044_044_1, 0x0000_000_0, 0x0000_000_0, // 31 0x20 32 D し
0x0046_046_1, 0x0000_000_0, 0x0000_000_0, // 32 0x21 33 F は
0x0047_047_1, 0x0000_000_0, 0x0000_000_0, // 33 0x22 34 G き
0x0048_048_1, 0x0000_000_0, 0x0000_000_0, // 34 0x23 35 H く
0x004a_04a_1, 0x0000_000_0, 0x0000_000_0, // 35 0x24 36 J ま
0x004b_04b_1, 0x0000_000_0, 0x0000_000_0, // 36 0x25 37 K の
0x004c_04c_1, 0x0000_000_0, 0x0000_000_0, // 37 0x26 38 L り
0x003b_0ba_1, 0x0000_000_0, 0x0000_000_0, // 38 0x27 39 ;+れ
0x00de_0de_1, 0x0000_000_0, 0x0000_000_0, // 39 0x28 40 :*け
0x005c_0dc_1, 0x0000_000_0, 0x0000_000_0, // 40 0x29 41 ]}む」
0x005a_05a_1, 0x0000_000_0, 0x0000_000_0, // 41 0x2a 42 Z つっ
0x0058_058_1, 0x0000_000_0, 0x0000_000_0, // 42 0x2b 43 X さ
0x0043_043_1, 0x0000_000_0, 0x0000_000_0, // 43 0x2c 44 C そ
0x0056_056_1, 0x0000_000_0, 0x0000_000_0, // 44 0x2d 45 V ひ
0x0042_042_1, 0x0000_000_0, 0x0000_000_0, // 45 0x2e 46 B こ
0x004e_04e_1, 0x0000_000_0, 0x0000_000_0, // 46 0x2f 47 N み
0x004d_04d_1, 0x0000_000_0, 0x0000_000_0, // 47 0x30 48 M も
0x002c_0bc_1, 0x0000_000_0, 0x0000_000_0, // 48 0x31 49 ,<ね、
0x002e_0be_1, 0x0000_000_0, 0x0000_000_0, // 49 0x32 50 .>る。
0x002f_0bf_1, 0x0000_000_0, 0x0000_000_0, // 50 0x33 51 /?め・
0x0000_0c1_1, 0x0000_000_0, 0x0000_000_0, // 51 0x34 52 _ろ□
0x0020_020_1, 0x0000_000_0, 0x0000_000_0, // 52 0x35 53 スペース
0x0024_024_1, 0x0000_000_0, 0x0000_000_0, // 53 0x36 54 HOME
0x007f_02e_1, 0x0000_000_0, 0x0000_000_0, // 54 0x37 55 DEL
0x0022_022_1, 0x0000_000_0, 0x0000_000_0, // 55 0x38 56 ROLLUP
0x0021_021_1, 0x0000_000_0, 0x0000_000_0, // 56 0x39 57 ROLLDOWN
0x0023_023_1, 0x0000_000_0, 0x0000_000_0, // 57 0x3a 58 UNDO
0x0025_025_1, 0x0000_000_0, 0x0000_000_0, // 58 0x3b 59 ←
0x0026_026_1, 0x0000_000_0, 0x0000_000_0, // 59 0x3c 60 ↑
0x0027_027_1, 0x0000_000_0, 0x0000_000_0, // 60 0x3d 61 →
0x0028_028_1, 0x0000_000_0, 0x0000_000_0, // 61 0x3e 62 ↓
0x0090_090_4, 0x0000_000_0, 0x0000_000_0, // 62 0x3f 63 CLR
0x006f_06f_4, 0x0000_000_0, 0x0000_000_0, // 63 0x40 64 /
0x006a_06a_4, 0x0000_000_0, 0x0000_000_0, // 64 0x41 65 *
0x006d_06d_4, 0x0000_000_0, 0x0000_000_0, // 65 0x42 66 -
0x0024_024_4, 0x0067_067_4, 0x0000_000_0, // 66 0x43 67 7
0x0026_026_4, 0x0068_068_4, 0x0000_000_0, // 67 0x44 68 8
0x0021_021_4, 0x0069_069_4, 0x0000_000_0, // 68 0x45 69 9
0x006b_06b_4, 0x0000_000_0, 0x0000_000_0, // 69 0x46 70 +
0x0025_025_4, 0x0064_064_4, 0x0000_000_0, // 70 0x47 71 4
0x000c_00c_4, 0x0065_065_4, 0x0000_000_0, // 71 0x48 72 5
0x0027_027_4, 0x0066_066_4, 0x0000_000_0, // 72 0x49 73 6
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 73 0x4a 74 =
0x0023_023_4, 0x0061_061_4, 0x0000_000_0, // 74 0x4b 75 1
0x0028_028_4, 0x0062_062_4, 0x0000_000_0, // 75 0x4c 76 2
0x0022_022_4, 0x0063_063_4, 0x0000_000_0, // 76 0x4d 77 3
0x000a_00d_4, 0x0000_000_0, 0x0000_000_0, // 77 0x4e 78 ENTER
0x009b_02d_4, 0x0060_060_4, 0x0000_000_0, // 78 0x4f 79 0
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 79 0x50 80 ,
0x007f_02e_4, 0x006e_06e_4, 0x0000_000_0, // 80 0x51 81 .
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 81 0x52 82 記号入力
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 82 0x53 83 登録
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 83 0x54 84 HELP
0x0012_012_2, 0x0000_000_0, 0x0000_000_0, // 84 0x55 85 XF1
0x0000_0eb_1, 0x0000_000_0, 0x0000_000_0, // 85 0x56 86 XF2
0x0012_012_3, 0x0000_000_0, 0x0000_000_0, // 86 0x57 87 XF3
0x020d_05d_1, 0x0000_000_0, 0x0000_000_0, // 87 0x58 88 XF4
0x0011_011_3, 0x0000_000_0, 0x0000_000_0, // 88 0x59 89 XF5
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 89 0x5a 90 かな
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 90 0x5b 91 ローマ字
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 91 0x5c 92 コード入力
0x0014_014_1, 0x0000_000_0, 0x0000_000_0, // 92 0x5d 93 CAPS
0x009b_02d_1, 0x0000_000_0, 0x0000_000_0, // 93 0x5e 94 INS
0x020c_05b_2, 0x0000_000_0, 0x0000_000_0, // 94 0x5f 95 ひらがな
0x020c_05c_3, 0x0000_000_0, 0x0000_000_0, // 95 0x60 96 全角
0x0013_013_1, 0x0000_000_0, 0x0000_000_0, // 96 0x61 97 BREAK
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 97 0x62 98 COPY
0x0070_070_1, 0x0000_000_0, 0x0000_000_0, // 98 0x63 99 F1
0x0071_071_1, 0x0000_000_0, 0x0000_000_0, // 99 0x64 100 F2
0x0072_072_1, 0x0000_000_0, 0x0000_000_0, // 100 0x65 101 F3
0x0073_073_1, 0x0000_000_0, 0x0000_000_0, // 101 0x66 102 F4
0x0074_074_1, 0x0000_000_0, 0x0000_000_0, // 102 0x67 103 F5
0x0075_075_1, 0x0000_000_0, 0x0000_000_0, // 103 0x68 104 F6
0x0076_076_1, 0x0000_000_0, 0x0000_000_0, // 104 0x69 105 F7
0x0077_077_1, 0x0000_000_0, 0x0000_000_0, // 105 0x6a 106 F8
0x0078_078_1, 0x0000_000_0, 0x0000_000_0, // 106 0x6b 107 F9
0x0079_079_1, 0x0000_000_0, 0x0000_000_0, // 107 0x6c 108 F10
0x0010_010_2, 0x0010_010_3, 0x0000_000_0, // 108 0x70 112 SHIFT
0x0011_011_2, 0x0000_000_0, 0x0000_000_0, // 109 0x71 113 CTRL
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 110 0x72 114 OPT.1
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 111 0x73 115 OPT.2
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 112 0x74 116 NUM
};
public static final int[] KBD_DEFAULT_MAP_WIN = {
//(keyCode&0xffff)<<16|(rawCode&0xfff)<<4|(keyLocation&0xf)
//cccc_rrr_l cccc_rrr_l cccc_rrr_l xo hex dec text
0x001b_01b_1, 0x0000_000_0, 0x0000_000_0, // 0 0x01 1 ESC
0x0031_031_1, 0x0000_000_0, 0x0000_000_0, // 1 0x02 2 1!ぬ
0x0032_032_1, 0x0000_000_0, 0x0000_000_0, // 2 0x03 3 2"ふ
0x0033_033_1, 0x0000_000_0, 0x0000_000_0, // 3 0x04 4 3#あぁ
0x0034_034_1, 0x0000_000_0, 0x0000_000_0, // 4 0x05 5 4$うぅ
0x0035_035_1, 0x0000_000_0, 0x0000_000_0, // 5 0x06 6 5%えぇ
0x0036_036_1, 0x0000_000_0, 0x0000_000_0, // 6 0x07 7 6&おぉ
0x0037_037_1, 0x0000_000_0, 0x0000_000_0, // 7 0x08 8 7'やゃ
0x0038_038_1, 0x0000_000_0, 0x0000_000_0, // 8 0x09 9 8(ゆゅ
0x0039_039_1, 0x0000_000_0, 0x0000_000_0, // 9 0x0a 10 9)よょ
0x0030_030_1, 0x0000_000_0, 0x0000_000_0, // 10 0x0b 11 0 わを
0x002d_0bd_1, 0x0000_000_0, 0x0000_000_0, // 11 0x0c 12 -=ほ
0x0202_0de_1, 0x0000_000_0, 0x0000_000_0, // 12 0x0d 13 ^~へ
0x005c_0dc_1, 0x0000_000_0, 0x0000_000_0, // 13 0x0e 14 ¥|ー
0x0008_008_1, 0x0000_000_0, 0x0000_000_0, // 14 0x0f 15 BS
0x0009_009_1, 0x0000_000_0, 0x0000_000_0, // 15 0x10 16 TAB
0x0051_051_1, 0x0000_000_0, 0x0000_000_0, // 16 0x11 17 Q た
0x0057_057_1, 0x0000_000_0, 0x0000_000_0, // 17 0x12 18 W て
0x0045_045_1, 0x0000_000_0, 0x0000_000_0, // 18 0x13 19 E いぃ
0x0052_052_1, 0x0000_000_0, 0x0000_000_0, // 19 0x14 20 R す
0x0054_054_1, 0x0000_000_0, 0x0000_000_0, // 20 0x15 21 T か
0x0059_059_1, 0x0000_000_0, 0x0000_000_0, // 21 0x16 22 Y ん
0x0055_055_1, 0x0000_000_0, 0x0000_000_0, // 22 0x17 23 U な
0x0049_049_1, 0x0000_000_0, 0x0000_000_0, // 23 0x18 24 I に
0x004f_04f_1, 0x0000_000_0, 0x0000_000_0, // 24 0x19 25 O ら
0x0050_050_1, 0x0000_000_0, 0x0000_000_0, // 25 0x1a 26 P せ
0x0200_0c0_1, 0x0000_000_0, 0x0000_000_0, // 26 0x1b 27 @`゛
0x005b_0db_1, 0x0000_000_0, 0x0000_000_0, // 27 0x1c 28 [{゜「
0x000a_00d_1, 0x0000_000_0, 0x0000_000_0, // 28 0x1d 29 リターン
0x0041_041_1, 0x0000_000_0, 0x0000_000_0, // 29 0x1e 30 A ち
0x0053_053_1, 0x0000_000_0, 0x0000_000_0, // 30 0x1f 31 S と
0x0044_044_1, 0x0000_000_0, 0x0000_000_0, // 31 0x20 32 D し
0x0046_046_1, 0x0000_000_0, 0x0000_000_0, // 32 0x21 33 F は
0x0047_047_1, 0x0000_000_0, 0x0000_000_0, // 33 0x22 34 G き
0x0048_048_1, 0x0000_000_0, 0x0000_000_0, // 34 0x23 35 H く
0x004a_04a_1, 0x0000_000_0, 0x0000_000_0, // 35 0x24 36 J ま
0x004b_04b_1, 0x0000_000_0, 0x0000_000_0, // 36 0x25 37 K の
0x004c_04c_1, 0x0000_000_0, 0x0000_000_0, // 37 0x26 38 L り
0x003b_0bb_1, 0x0000_000_0, 0x0000_000_0, // 38 0x27 39 ;+れ
0x0201_0ba_1, 0x0000_000_0, 0x0000_000_0, // 39 0x28 40 :*け
0x005d_0dd_1, 0x0000_000_0, 0x0000_000_0, // 40 0x29 41 ]}む」
0x005a_05a_1, 0x0000_000_0, 0x0000_000_0, // 41 0x2a 42 Z つっ
0x0058_058_1, 0x0000_000_0, 0x0000_000_0, // 42 0x2b 43 X さ
0x0043_043_1, 0x0000_000_0, 0x0000_000_0, // 43 0x2c 44 C そ
0x0056_056_1, 0x0000_000_0, 0x0000_000_0, // 44 0x2d 45 V ひ
0x0042_042_1, 0x0000_000_0, 0x0000_000_0, // 45 0x2e 46 B こ
0x004e_04e_1, 0x0000_000_0, 0x0000_000_0, // 46 0x2f 47 N み
0x004d_04d_1, 0x0000_000_0, 0x0000_000_0, // 47 0x30 48 M も
0x002c_0bc_1, 0x0000_000_0, 0x0000_000_0, // 48 0x31 49 ,<ね、
0x002e_0be_1, 0x0000_000_0, 0x0000_000_0, // 49 0x32 50 .>る。
0x002f_0bf_1, 0x0000_000_0, 0x0000_000_0, // 50 0x33 51 /?め・
0x005c_0e2_1, 0x0000_000_0, 0x0000_000_0, // 51 0x34 52 _ろ□
0x0020_020_1, 0x0000_000_0, 0x0000_000_0, // 52 0x35 53 スペース
0x0024_024_1, 0x0000_000_0, 0x0000_000_0, // 53 0x36 54 HOME
0x007f_02e_1, 0x0000_000_0, 0x0000_000_0, // 54 0x37 55 DEL
0x0022_022_1, 0x0000_000_0, 0x0000_000_0, // 55 0x38 56 ROLLUP
0x0021_021_1, 0x0000_000_0, 0x0000_000_0, // 56 0x39 57 ROLLDOWN
0x0023_023_1, 0x0000_000_0, 0x0000_000_0, // 57 0x3a 58 UNDO
0x0025_025_1, 0x0000_000_0, 0x0000_000_0, // 58 0x3b 59 ←
0x0026_026_1, 0x0000_000_0, 0x0000_000_0, // 59 0x3c 60 ↑
0x0027_027_1, 0x0000_000_0, 0x0000_000_0, // 60 0x3d 61 →
0x0028_028_1, 0x0000_000_0, 0x0000_000_0, // 61 0x3e 62 ↓
0x0090_090_4, 0x0000_000_0, 0x0000_000_0, // 62 0x3f 63 CLR
0x006f_06f_4, 0x0000_000_0, 0x0000_000_0, // 63 0x40 64 /
0x006a_06a_4, 0x0000_000_0, 0x0000_000_0, // 64 0x41 65 *
0x006d_06d_4, 0x0000_000_0, 0x0000_000_0, // 65 0x42 66 -
0x0024_024_4, 0x0067_067_4, 0x0000_000_0, // 66 0x43 67 7
0x0026_026_4, 0x0068_068_4, 0x0000_000_0, // 67 0x44 68 8
0x0021_021_4, 0x0069_069_4, 0x0000_000_0, // 68 0x45 69 9
0x006b_06b_4, 0x0000_000_0, 0x0000_000_0, // 69 0x46 70 +
0x0025_025_4, 0x0064_064_4, 0x0000_000_0, // 70 0x47 71 4
0x000c_00c_4, 0x0065_065_4, 0x0000_000_0, // 71 0x48 72 5
0x0027_027_4, 0x0066_066_4, 0x0000_000_0, // 72 0x49 73 6
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 73 0x4a 74 =
0x0023_023_4, 0x0061_061_4, 0x0000_000_0, // 74 0x4b 75 1
0x0028_028_4, 0x0062_062_4, 0x0000_000_0, // 75 0x4c 76 2
0x0022_022_4, 0x0063_063_4, 0x0000_000_0, // 76 0x4d 77 3
0x000a_00d_4, 0x0000_000_0, 0x0000_000_0, // 77 0x4e 78 ENTER
0x009b_02d_4, 0x0060_060_4, 0x0000_000_0, // 78 0x4f 79 0
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 79 0x50 80 ,
0x007f_02e_4, 0x006e_06e_4, 0x0000_000_0, // 80 0x51 81 .
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 81 0x52 82 記号入力
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 82 0x53 83 登録
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 83 0x54 84 HELP
0x0012_012_2, 0x0000_000_0, 0x0000_000_0, // 84 0x55 85 XF1 左Alt
0x001d_01d_1, 0x0000_000_0, 0x0000_000_0, // 85 0x56 86 XF2 無変換
0x0012_012_3, 0x0000_000_0, 0x0000_000_0, // 86 0x57 87 XF3 右Alt
0x020d_05d_1, 0x0000_000_0, 0x0000_000_0, // 87 0x58 88 XF4 メニュー。Fn+右Ctrl
0x0011_011_3, 0x0000_000_0, 0x0000_000_0, // 88 0x59 89 XF5 右Ctrl
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 89 0x5a 90 かな
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 90 0x5b 91 ローマ字
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 91 0x5c 92 コード入力
0x0014_014_1, 0x0000_000_0, 0x0000_000_0, // 92 0x5d 93 CAPS
0x009b_02d_1, 0x0000_000_0, 0x0000_000_0, // 93 0x5e 94 INS
0x020c_05b_2, 0x0000_000_0, 0x0000_000_0, // 94 0x5f 95 ひらがな
0x020c_05c_3, 0x0000_000_0, 0x0000_000_0, // 95 0x60 96 全角
0x0013_013_1, 0x0000_000_0, 0x0000_000_0, // 96 0x61 97 BREAK
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 97 0x62 98 COPY
0x0070_070_1, 0x0000_000_0, 0x0000_000_0, // 98 0x63 99 F1
0x0071_071_1, 0x0000_000_0, 0x0000_000_0, // 99 0x64 100 F2
0x0072_072_1, 0x0000_000_0, 0x0000_000_0, // 100 0x65 101 F3
0x0073_073_1, 0x0000_000_0, 0x0000_000_0, // 101 0x66 102 F4
0x0074_074_1, 0x0000_000_0, 0x0000_000_0, // 102 0x67 103 F5
0x0075_075_1, 0x0000_000_0, 0x0000_000_0, // 103 0x68 104 F6
0x0076_076_1, 0x0000_000_0, 0x0000_000_0, // 104 0x69 105 F7
0x0077_077_1, 0x0000_000_0, 0x0000_000_0, // 105 0x6a 106 F8
0x0078_078_1, 0x0000_000_0, 0x0000_000_0, // 106 0x6b 107 F9
0x0079_079_1, 0x0000_000_0, 0x0000_000_0, // 107 0x6c 108 F10
0x0010_010_2, 0x0010_010_3, 0x0000_000_0, // 108 0x70 112 SHIFT
0x0011_011_2, 0x0000_000_0, 0x0000_000_0, // 109 0x71 113 CTRL
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 110 0x72 114 OPT.1
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 111 0x73 115 OPT.2
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 112 0x74 116 NUM
};
public static final int[] KBD_DEFAULT_MAP_ZKEY = {
//(keyCode&0xffff)<<16|(rawCode&0xfff)<<4|(keyLocation&0xf)
//cccc_rrr_l cccc_rrr_l cccc_rrr_l xo hex dec text
0x001b_01b_1, 0x0000_000_0, 0x0000_000_0, // 0 0x01 1 ESC
0x0031_031_1, 0x0000_000_0, 0x0000_000_0, // 1 0x02 2 1!ぬ
0x0032_032_1, 0x0000_000_0, 0x0000_000_0, // 2 0x03 3 2"ふ
0x0033_033_1, 0x0000_000_0, 0x0000_000_0, // 3 0x04 4 3#あぁ
0x0034_034_1, 0x0000_000_0, 0x0000_000_0, // 4 0x05 5 4$うぅ
0x0035_035_1, 0x0000_000_0, 0x0000_000_0, // 5 0x06 6 5%えぇ
0x0036_036_1, 0x0000_000_0, 0x0000_000_0, // 6 0x07 7 6&おぉ
0x0037_037_1, 0x0000_000_0, 0x0000_000_0, // 7 0x08 8 7'やゃ
0x0038_038_1, 0x0000_000_0, 0x0000_000_0, // 8 0x09 9 8(ゆゅ
0x0039_039_1, 0x0000_000_0, 0x0000_000_0, // 9 0x0a 10 9)よょ
0x0030_030_1, 0x0000_000_0, 0x0000_000_0, // 10 0x0b 11 0 わを
0x002d_0bd_1, 0x0000_000_0, 0x0000_000_0, // 11 0x0c 12 -=ほ
0x0202_0de_1, 0x0000_000_0, 0x0000_000_0, // 12 0x0d 13 ^~へ
0x005c_0dc_1, 0x0000_000_0, 0x0000_000_0, // 13 0x0e 14 ¥|ー
0x0008_008_1, 0x0000_000_0, 0x0000_000_0, // 14 0x0f 15 BS
0x0009_009_1, 0x0000_000_0, 0x0000_000_0, // 15 0x10 16 TAB
0x0051_051_1, 0x0000_000_0, 0x0000_000_0, // 16 0x11 17 Q た
0x0057_057_1, 0x0000_000_0, 0x0000_000_0, // 17 0x12 18 W て
0x0045_045_1, 0x0000_000_0, 0x0000_000_0, // 18 0x13 19 E いぃ
0x0052_052_1, 0x0000_000_0, 0x0000_000_0, // 19 0x14 20 R す
0x0054_054_1, 0x0000_000_0, 0x0000_000_0, // 20 0x15 21 T か
0x0059_059_1, 0x0000_000_0, 0x0000_000_0, // 21 0x16 22 Y ん
0x0055_055_1, 0x0000_000_0, 0x0000_000_0, // 22 0x17 23 U な
0x0049_049_1, 0x0000_000_0, 0x0000_000_0, // 23 0x18 24 I に
0x004f_04f_1, 0x0000_000_0, 0x0000_000_0, // 24 0x19 25 O ら
0x0050_050_1, 0x0000_000_0, 0x0000_000_0, // 25 0x1a 26 P せ
0x0200_0c0_1, 0x0000_000_0, 0x0000_000_0, // 26 0x1b 27 @`゛
0x005b_0db_1, 0x0000_000_0, 0x0000_000_0, // 27 0x1c 28 [{゜「
0x000a_00d_1, 0x0000_000_0, 0x0000_000_0, // 28 0x1d 29 リターン
0x0041_041_1, 0x0000_000_0, 0x0000_000_0, // 29 0x1e 30 A ち
0x0053_053_1, 0x0000_000_0, 0x0000_000_0, // 30 0x1f 31 S と
0x0044_044_1, 0x0000_000_0, 0x0000_000_0, // 31 0x20 32 D し
0x0046_046_1, 0x0000_000_0, 0x0000_000_0, // 32 0x21 33 F は
0x0047_047_1, 0x0000_000_0, 0x0000_000_0, // 33 0x22 34 G き
0x0048_048_1, 0x0000_000_0, 0x0000_000_0, // 34 0x23 35 H く
0x004a_04a_1, 0x0000_000_0, 0x0000_000_0, // 35 0x24 36 J ま
0x004b_04b_1, 0x0000_000_0, 0x0000_000_0, // 36 0x25 37 K の
0x004c_04c_1, 0x0000_000_0, 0x0000_000_0, // 37 0x26 38 L り
0x003b_0bb_1, 0x0000_000_0, 0x0000_000_0, // 38 0x27 39 ;+れ
0x0201_0ba_1, 0x0000_000_0, 0x0000_000_0, // 39 0x28 40 :*け
0x005d_0dd_1, 0x0000_000_0, 0x0000_000_0, // 40 0x29 41 ]}む」
0x005a_05a_1, 0x0000_000_0, 0x0000_000_0, // 41 0x2a 42 Z つっ
0x0058_058_1, 0x0000_000_0, 0x0000_000_0, // 42 0x2b 43 X さ
0x0043_043_1, 0x0000_000_0, 0x0000_000_0, // 43 0x2c 44 C そ
0x0056_056_1, 0x0000_000_0, 0x0000_000_0, // 44 0x2d 45 V ひ
0x0042_042_1, 0x0000_000_0, 0x0000_000_0, // 45 0x2e 46 B こ
0x004e_04e_1, 0x0000_000_0, 0x0000_000_0, // 46 0x2f 47 N み
0x004d_04d_1, 0x0000_000_0, 0x0000_000_0, // 47 0x30 48 M も
0x002c_0bc_1, 0x0000_000_0, 0x0000_000_0, // 48 0x31 49 ,<ね、
0x002e_0be_1, 0x0000_000_0, 0x0000_000_0, // 49 0x32 50 .>る。
0x002f_0bf_1, 0x0000_000_0, 0x0000_000_0, // 50 0x33 51 /?め・
0x005c_0e2_1, 0x0000_000_0, 0x0000_000_0, // 51 0x34 52 _ろ□
0x0020_020_1, 0x0000_000_0, 0x0000_000_0, // 52 0x35 53 スペース
0x0024_024_1, 0x0000_000_0, 0x0000_000_0, // 53 0x36 54 HOME
0x007f_02e_1, 0x0000_000_0, 0x0000_000_0, // 54 0x37 55 DEL
0x0021_021_1, 0x0000_000_0, 0x0000_000_0, // 55 0x38 56 ROLLUP
0x0022_022_1, 0x0000_000_0, 0x0000_000_0, // 56 0x39 57 ROLLDOWN
0x0023_023_1, 0x0000_000_0, 0x0000_000_0, // 57 0x3a 58 UNDO
0x0025_025_1, 0x0000_000_0, 0x0000_000_0, // 58 0x3b 59 ←
0x0026_026_1, 0x0000_000_0, 0x0000_000_0, // 59 0x3c 60 ↑
0x0027_027_1, 0x0000_000_0, 0x0000_000_0, // 60 0x3d 61 →
0x0028_028_1, 0x0000_000_0, 0x0000_000_0, // 61 0x3e 62 ↓
0x0090_090_4, 0x0000_000_0, 0x0000_000_0, // 62 0x3f 63 CLR
0x006f_06f_4, 0x0000_000_0, 0x0000_000_0, // 63 0x40 64 /
0x006a_06a_4, 0x0000_000_0, 0x0000_000_0, // 64 0x41 65 *
0x006d_06d_4, 0x0000_000_0, 0x0000_000_0, // 65 0x42 66 -
0x0024_024_4, 0x0067_067_4, 0x0000_000_0, // 66 0x43 67 7
0x0026_026_4, 0x0068_068_4, 0x0000_000_0, // 67 0x44 68 8
0x0021_021_4, 0x0069_069_4, 0x0000_000_0, // 68 0x45 69 9
0x006b_06b_4, 0x0000_000_0, 0x0000_000_0, // 69 0x46 70 +
0x0025_025_4, 0x0064_064_4, 0x0000_000_0, // 70 0x47 71 4
0x0065_065_4, 0x0000_000_0, 0x0000_000_0, // 71 0x48 72 5
0x0027_027_4, 0x0066_066_4, 0x0000_000_0, // 72 0x49 73 6
0x000c_00c_4, 0x0000_000_0, 0x0000_000_0, // 73 0x4a 74 =
0x0023_023_4, 0x0061_061_4, 0x0000_000_0, // 74 0x4b 75 1
0x0028_028_4, 0x0062_062_4, 0x0000_000_0, // 75 0x4c 76 2
0x0022_022_4, 0x0063_063_4, 0x0000_000_0, // 76 0x4d 77 3
0x000a_00d_4, 0x0000_000_0, 0x0000_000_0, // 77 0x4e 78 ENTER
0x009b_02d_4, 0x0060_060_4, 0x0000_000_0, // 78 0x4f 79 0
0x0000_0c2_1, 0x0000_000_0, 0x0000_000_0, // 79 0x50 80 ,
0x007f_02e_4, 0x006e_06e_4, 0x0000_000_0, // 80 0x51 81 .
0xf009_085_1, 0x0000_000_0, 0x0000_000_0, // 81 0x52 82 記号入力 Volume Mute → F22
0xf00a_086_1, 0x0000_000_0, 0x0000_000_0, // 82 0x53 83 登録 Volume Down → F23
0xf00b_087_1, 0x0000_000_0, 0x0000_000_0, // 83 0x54 84 HELP Volume Up → F24
0x0012_012_2, 0x0000_000_0, 0x0000_000_0, // 84 0x55 85 XF1 Alt (Left)
0xf001_07d_1, 0x0000_000_0, 0x0000_000_0, // 85 0x56 86 XF2 無変換(VK 29) → F14
0xf002_07e_1, 0x0000_000_0, 0x0000_000_0, // 86 0x57 87 XF3 変換(VK 28) → F15
0xf003_07f_1, 0x0000_000_0, 0x0000_000_0, // 87 0x58 88 XF4 ひらがな(VK 242) → F16
0x0012_012_3, 0x0000_000_0, 0x0000_000_0, // 88 0x59 89 XF5 Alt (Right)
0xf005_081_1, 0x0000_000_0, 0x0000_000_0, // 89 0x5a 90 かな Print Screen → F18
0xf006_082_1, 0x0000_000_0, 0x0000_000_0, // 90 0x5b 91 ローマ字 Scroll Lock → F19
0x0013_013_1, 0x0000_000_0, 0x0000_000_0, // 91 0x5c 92 コード入力 Pause
0xf004_080_1, 0x0000_000_0, 0x0000_000_0, // 92 0x5d 93 CAPS 英数字(VK 240) → F17
0x009b_02d_1, 0x0000_000_0, 0x0000_000_0, // 93 0x5e 94 INS
0xf007_083_1, 0x0000_000_0, 0x0000_000_0, // 94 0x5f 95 ひらがな Win (Left) → F20
0xf008_084_1, 0x0000_000_0, 0x0000_000_0, // 95 0x60 96 全角 Win (Right) → F21
0x00f4_0f3_1, 0x00f3_0f4_1, 0x0000_000_0, // 96 0x61 97 BREAK 半角(VK 244)/全角(VK 243)
0x020d_05d_1, 0x0000_000_0, 0x0000_000_0, // 97 0x62 98 COPY
0x0070_070_1, 0x0000_000_0, 0x0000_000_0, // 98 0x63 99 F1
0x0071_071_1, 0x0000_000_0, 0x0000_000_0, // 99 0x64 100 F2
0x0072_072_1, 0x0000_000_0, 0x0000_000_0, // 100 0x65 101 F3
0x0073_073_1, 0x0000_000_0, 0x0000_000_0, // 101 0x66 102 F4
0x0074_074_1, 0x0000_000_0, 0x0000_000_0, // 102 0x67 103 F5
0x0075_075_1, 0x0000_000_0, 0x0000_000_0, // 103 0x68 104 F6
0x0076_076_1, 0x0000_000_0, 0x0000_000_0, // 104 0x69 105 F7
0x0077_077_1, 0x0000_000_0, 0x0000_000_0, // 105 0x6a 106 F8
0x0078_078_1, 0x0000_000_0, 0x0000_000_0, // 106 0x6b 107 F9
0x0079_079_1, 0x0000_000_0, 0x0000_000_0, // 107 0x6c 108 F10
0x0010_010_2, 0x0010_010_3, 0x0000_000_0, // 108 0x70 112 SHIFT
0x0011_011_2, 0x0000_000_0, 0x0000_000_0, // 109 0x71 113 CTRL
0xf000_07c_1, 0x0000_000_0, 0x0000_000_0, // 110 0x72 114 OPT.1 F11 → F13
0x007b_07b_1, 0x0000_000_0, 0x0000_000_0, // 111 0x73 115 OPT.2 F12
0x0000_000_0, 0x0000_000_0, 0x0000_000_0, // 112 0x74 116 NUM
};
// eo→xo
public static final int[] KBD_EO_TO_XO = {
//xo eo x68kCode
1, // 0 0x02 0x02 "1!ぬ "
2, // 1 0x03 0x03 "2"ふ "
3, // 2 0x04 0x04 "3#あぁ"
4, // 3 0x05 0x05 "4$うぅ"
5, // 4 0x06 0x06 "5%えぇ"
6, // 5 0x07 0x07 "6&おぉ"
7, // 6 0x08 0x43 "7'やゃ"
8, // 7 0x09 0x44 "8(ゆゅ"
9, // 8 0x0a 0x45 "9)よょ"
10, // 9 0x0b 0x40 "0 わを"
11, // 10 0x0c 0x41 "-=ほ "
12, // 11 0x0d 0x0d "^~へ "
13, // 12 0x0e 0x0e "¥|ー "
16, // 13 0x11 0x11 "Q た "
17, // 14 0x12 0x12 "W て "
18, // 15 0x13 0x13 "E いぃ"
19, // 16 0x14 0x14 "R す "
20, // 17 0x15 0x15 "T か "
21, // 18 0x16 0x16 "Y ん "
22, // 19 0x17 0x47 "U な "
23, // 20 0x18 0x48 "I に "
24, // 21 0x19 0x49 "O ら "
25, // 22 0x1a 0x42 "P せ "
26, // 23 0x1b 0x1b "@`゛ "
27, // 24 0x1c 0x1c "[{゜「"
29, // 25 0x1e 0x1e "A ち "
30, // 26 0x1f 0x1f "S と "
31, // 27 0x20 0x20 "D し "
32, // 28 0x21 0x21 "F は "
33, // 29 0x22 0x22 "G き "
34, // 30 0x23 0x23 "H く "
35, // 31 0x24 0x4b "J ま "
36, // 32 0x25 0x4c "K の "
37, // 33 0x26 0x4d "L り "
38, // 34 0x27 0x46 ";+れ "
39, // 35 0x28 0x28 ":*け "
40, // 36 0x29 0x29 "]}む」"
41, // 37 0x2a 0x2a "Z つっ"
42, // 38 0x2b 0x2b "X さ "
43, // 39 0x2c 0x2c "C そ "
44, // 40 0x2d 0x2d "V ひ "
45, // 41 0x2e 0x2e "B こ "
46, // 42 0x2f 0x2f "N み "
47, // 43 0x30 0x4f "M も "
48, // 44 0x31 0x50 ",<ね、"
49, // 45 0x32 0x51 ".>る。"
50, // 46 0x33 0x4a "/?め・"
51, // 47 0x34 0x4e " _ろ□"
89, // 48 0x5a 0x5a "かな"
90, // 49 0x5b 0x5b "ローマ字"
91, // 50 0x5c 0x5c "コード入力"
92, // 51 0x5d 0x5d "CAPS"
93, // 52 0x5e 0x5e "INS"
94, // 53 0x5f 0x5f "ひらがな"
95, // 54 0x60 0x60 "全角"
112, // 55 0x74 0x74 "NUM"
0, // 56 0x01 0x01 "ESC"
14, // 57 0x0f 0x0f "BS"
15, // 58 0x10 0x10 "TAB"
28, // 59 0x1d 0x1d "リターン"
52, // 60 0x35 0x35 "スペース"
53, // 61 0x36 0x36 "HOME"
54, // 62 0x37 0x37 "DEL"
55, // 63 0x38 0x38 "ROLLUP"
56, // 64 0x39 0x39 "ROLLDOWN"
57, // 65 0x3a 0x3a "UNDO"
58, // 66 0x3b 0x3b "←"
59, // 67 0x3c 0x3c "↑"
60, // 68 0x3d 0x3d "→"
61, // 69 0x3e 0x3e "↓"
62, // 70 0x3f 0x3f "CLR"
63, // 71 0x40 0x40 "/"
64, // 72 0x41 0x41 "*"
65, // 73 0x42 0x42 "-"
66, // 74 0x43 0x43 "7"
67, // 75 0x44 0x44 "8"
68, // 76 0x45 0x45 "9"
69, // 77 0x46 0x46 "+"
70, // 78 0x47 0x47 "4"
71, // 79 0x48 0x48 "5"
72, // 80 0x49 0x49 "6"
73, // 81 0x4a 0x4a "="
74, // 82 0x4b 0x4b "1"
75, // 83 0x4c 0x4c "2"
76, // 84 0x4d 0x4d "3"
77, // 85 0x4e 0x4e "ENTER"
78, // 86 0x4f 0x4f "0"
79, // 87 0x50 0x50 ","
80, // 88 0x51 0x51 "."
81, // 89 0x52 0x52 "記号入力"
82, // 90 0x53 0x53 "登録"
83, // 91 0x54 0x54 "HELP"
84, // 92 0x55 0x55 "XF1"
85, // 93 0x56 0x56 "XF2"
86, // 94 0x57 0x57 "XF3"
87, // 95 0x58 0x58 "XF4"
88, // 96 0x59 0x59 "XF5"
96, // 97 0x61 0x61 "BREAK"
97, // 98 0x62 0x62 "COPY"
98, // 99 0x63 0x63 "F1"
99, //100 0x64 0x64 "F2"
100, //101 0x65 0x65 "F3"
101, //102 0x66 0x66 "F4"
102, //103 0x67 0x67 "F5"
103, //104 0x68 0x68 "F6"
104, //105 0x69 0x69 "F7"
105, //106 0x6a 0x6a "F8"
106, //107 0x6b 0x6b "F9"
107, //108 0x6c 0x6c "F10"
108, //109 0x70 0x70 "SHIFT"
109, //110 0x71 0x71 "CTRL"
110, //111 0x72 0x72 "OPT.1"
111, //112 0x73 0x73 "OPT.2"
};
// xo→eo
public static final int[] KBD_XO_TO_EO = {
//eo xo x68kCode
56, // 0 0x01 0x01 "ESC"
0, // 1 0x02 0x02 "1!ぬ "
1, // 2 0x03 0x03 "2"ふ "
2, // 3 0x04 0x04 "3#あぁ"
3, // 4 0x05 0x05 "4$うぅ"
4, // 5 0x06 0x06 "5%えぇ"
5, // 6 0x07 0x07 "6&おぉ"
6, // 7 0x08 0x43 "7'やゃ"
7, // 8 0x09 0x44 "8(ゆゅ"
8, // 9 0x0a 0x45 "9)よょ"
9, // 10 0x0b 0x40 "0 わを"
10, // 11 0x0c 0x41 "-=ほ "
11, // 12 0x0d 0x0d "^~へ "
12, // 13 0x0e 0x0e "¥|ー "
57, // 14 0x0f 0x0f "BS"
58, // 15 0x10 0x10 "TAB"
13, // 16 0x11 0x11 "Q た "
14, // 17 0x12 0x12 "W て "
15, // 18 0x13 0x13 "E いぃ"
16, // 19 0x14 0x14 "R す "
17, // 20 0x15 0x15 "T か "
18, // 21 0x16 0x16 "Y ん "
19, // 22 0x17 0x47 "U な "
20, // 23 0x18 0x48 "I に "
21, // 24 0x19 0x49 "O ら "
22, // 25 0x1a 0x42 "P せ "
23, // 26 0x1b 0x1b "@`゛ "
24, // 27 0x1c 0x1c "[{゜「"
59, // 28 0x1d 0x1d "リターン"
25, // 29 0x1e 0x1e "A ち "
26, // 30 0x1f 0x1f "S と "
27, // 31 0x20 0x20 "D し "
28, // 32 0x21 0x21 "F は "
29, // 33 0x22 0x22 "G き "
30, // 34 0x23 0x23 "H く "
31, // 35 0x24 0x4b "J ま "
32, // 36 0x25 0x4c "K の "
33, // 37 0x26 0x4d "L り "
34, // 38 0x27 0x46 ";+れ "
35, // 39 0x28 0x28 ":*け "
36, // 40 0x29 0x29 "]}む」"
37, // 41 0x2a 0x2a "Z つっ"
38, // 42 0x2b 0x2b "X さ "
39, // 43 0x2c 0x2c "C そ "
40, // 44 0x2d 0x2d "V ひ "
41, // 45 0x2e 0x2e "B こ "
42, // 46 0x2f 0x2f "N み "
43, // 47 0x30 0x4f "M も "
44, // 48 0x31 0x50 ",<ね、"
45, // 49 0x32 0x51 ".>る。"
46, // 50 0x33 0x4a "/?め・"
47, // 51 0x34 0x4e " _ろ□"
60, // 52 0x35 0x35 "スペース"
61, // 53 0x36 0x36 "HOME"
62, // 54 0x37 0x37 "DEL"
63, // 55 0x38 0x38 "ROLLUP"
64, // 56 0x39 0x39 "ROLLDOWN"
65, // 57 0x3a 0x3a "UNDO"
66, // 58 0x3b 0x3b "←"
67, // 59 0x3c 0x3c "↑"
68, // 60 0x3d 0x3d "→"
69, // 61 0x3e 0x3e "↓"
70, // 62 0x3f 0x3f "CLR"
71, // 63 0x40 0x40 "/"
72, // 64 0x41 0x41 "*"
73, // 65 0x42 0x42 "-"
74, // 66 0x43 0x43 "7"
75, // 67 0x44 0x44 "8"
76, // 68 0x45 0x45 "9"
77, // 69 0x46 0x46 "+"
78, // 70 0x47 0x47 "4"
79, // 71 0x48 0x48 "5"
80, // 72 0x49 0x49 "6"
81, // 73 0x4a 0x4a "="
82, // 74 0x4b 0x4b "1"
83, // 75 0x4c 0x4c "2"
84, // 76 0x4d 0x4d "3"
85, // 77 0x4e 0x4e "ENTER"
86, // 78 0x4f 0x4f "0"
87, // 79 0x50 0x50 ","
88, // 80 0x51 0x51 "."
89, // 81 0x52 0x52 "記号入力"
90, // 82 0x53 0x53 "登録"
91, // 83 0x54 0x54 "HELP"
92, // 84 0x55 0x55 "XF1"
93, // 85 0x56 0x56 "XF2"
94, // 86 0x57 0x57 "XF3"
95, // 87 0x58 0x58 "XF4"
96, // 88 0x59 0x59 "XF5"
48, // 89 0x5a 0x5a "かな"
49, // 90 0x5b 0x5b "ローマ字"
50, // 91 0x5c 0x5c "コード入力"
51, // 92 0x5d 0x5d "CAPS"
52, // 93 0x5e 0x5e "INS"
53, // 94 0x5f 0x5f "ひらがな"
54, // 95 0x60 0x60 "全角"
97, // 96 0x61 0x61 "BREAK"
98, // 97 0x62 0x62 "COPY"
99, // 98 0x63 0x63 "F1"
100, // 99 0x64 0x64 "F2"
101, //100 0x65 0x65 "F3"
102, //101 0x66 0x66 "F4"
103, //102 0x67 0x67 "F5"
104, //103 0x68 0x68 "F6"
105, //104 0x69 0x69 "F7"
106, //105 0x6a 0x6a "F8"
107, //106 0x6b 0x6b "F9"
108, //107 0x6c 0x6c "F10"
109, //108 0x70 0x70 "SHIFT"
110, //109 0x71 0x71 "CTRL"
111, //110 0x72 0x72 "OPT.1"
112, //111 0x73 0x73 "OPT.2"
55, //112 0x74 0x74 "NUM"
};
public static JFrame kbdFrame;
public static KeyMapEditor kbdEditor;
//kbdInit ()
// キーボードを初期化する
public static void kbdInit () {
//キーマップ
kbdUSLayoutOn = Settings.sgsGetOnOff ("keymapus");
// Zキーボード以外のデフォルトのキーマップ
kbdDefaultMapNonZ = (XEiJ.prgIsLinux ? KBD_DEFAULT_MAP_LINUX :
XEiJ.prgIsMac ?
kbdUSLayoutOn ? KBD_DEFAULT_MAP_MAC_US : KBD_DEFAULT_MAP_MAC :
kbdUSLayoutOn ? KBD_DEFAULT_MAP_WIN_US : KBD_DEFAULT_MAP_WIN);
// Zキーボード以外のキーマップ
kbdCurrentMapNonZ = new int[KBD_DEFAULT_MAP_WIN.length];
{
int[] map = Settings.sgsGetIntArray ("keymap"); //保存されていたZキーボード以外のキーマップ
if (map.length == 0 || map[0] != -3) { //保存されていたZキーボード以外のキーマップがないかバージョンが古いとき
System.arraycopy (kbdDefaultMapNonZ, 0, //from
kbdCurrentMapNonZ, 0, //to
KBD_DEFAULT_MAP_WIN.length); //length
} else { //保存されていたZキーボード以外のキーマップがあるとき
Arrays.fill (kbdCurrentMapNonZ, 0); //array,value
System.arraycopy (map, 1, //from
kbdCurrentMapNonZ, 0, //to
Math.min (map.length - 1, KBD_DEFAULT_MAP_WIN.length)); //length
}
}
// 現在のキーマップ
kbdCurrentMap = new int[KBD_DEFAULT_MAP_WIN.length];
System.arraycopy (kbdCurrentMapNonZ, 0, //from
kbdCurrentMap, 0, //to
KBD_DEFAULT_MAP_WIN.length); //length
//キーボードの種類
String paramKeyboard = Settings.sgsGetString ("keyboard");
switch (paramKeyboard.toLowerCase ()) {
case "":
case "none":
kbdOn = false;
kbdType = KBD_STANDARD_TYPE;
break;
case "standard":
kbdOn = true;
kbdType = KBD_STANDARD_TYPE;
break;
case "compact":
kbdOn = true;
kbdType = KBD_COMPACT_TYPE;
break;
default:
kbdOn = true;
kbdType = KBD_STANDARD_TYPE;
}
if (KBD_GUIDE_ON) {
kbdGuideThread = null;
}
//Zキーボード
if (KBD_ZKEY_ON) {
kbdZKeyOnRequest = XEiJ.prgIsWindows && Settings.sgsGetOnOff ("zkeyboard");
kbdZKeyOn = false;
kbdZKeyStatus = 0;
kbdZKeyPort = null;
kbdZKeyDebugFlag = false;
// I/Oポート
kbdZKeyIOData = 0L;
kbdZKeyIOProgrammable = false;
// 入力
kbdXF4Locked = null;
kbdSavedNumLock = false;
kbdIgnoreNumLock = false;
// デモ
demoInit ();
// Zキーボードのデフォルトのキーマップ
kbdDefaultMapZ = KBD_DEFAULT_MAP_ZKEY;
// Zキーボードのキーマップ
kbdCurrentMapZ = new int[KBD_DEFAULT_MAP_WIN.length];
{
int[] map = Settings.sgsGetIntArray ("zkeymap"); //保存されていたZキーボードのキーマップ
if (map.length == 0 || map[0] != -3) { //保存されていたZキーボードのキーマップがないかバージョンが古いとき
System.arraycopy (kbdDefaultMapZ, 0, //from
kbdCurrentMapZ, 0, //to
KBD_DEFAULT_MAP_WIN.length); //length
} else { //保存されていたZキーボードのキーマップがあるとき
Arrays.fill (kbdCurrentMapZ, 0); //array,value
System.arraycopy (map, 1, //from
kbdCurrentMapZ, 0, //to
Math.min (map.length - 1, KBD_DEFAULT_MAP_WIN.length)); //length
}
}
//メニュー
ActionListener listener = new ActionListener () {
@Override public void actionPerformed (ActionEvent ae) {
Object source = ae.getSource ();
String command = ae.getActionCommand ();
switch (command) {
case "Connect": //接続
if (KBD_ZKEY_ON) {
kbdZKeyOnRequest = ((JCheckBoxMenuItem) source).isSelected ();
if (kbdZKeyOnRequest) {
kbdZKeyOpen ();
} else {
XEiJ.tmrTimer.schedule (new TimerTask () {
@Override public void run () {
kbdZKeyClose ();
}
}, 0L);
}
}
break;
case "LED operation chedk": //LED の動作確認
if (KBD_ZKEY_ON) {
if (((JCheckBoxMenuItem) source).isSelected ()) {
demoStart ();
} else {
demoEnd ();
}
}
break;
case "Debug flag": //デバッグフラグ
if (KBD_ZKEY_ON) {
kbdZKeyDebugFlag = ((JCheckBoxMenuItem) source).isSelected ();
if (kbdZKeyPort != null) {
kbdZKeyPort.setDebugFlag (kbdZKeyDebugFlag);
}
}
break;
}
}
};
kbdZKeyMenu = !KBD_ZKEY_ON ? null : Multilingual.mlnText (
ComponentFactory.createMenu (
"Z keyboard",
kbdZKeyConnectCheckBox =
Multilingual.mlnText (
ComponentFactory.createCheckBoxMenuItem (kbdZKeyOnRequest, "Connect", listener),
"ja", "接続"),
kbdZKeyDemoCheckBox =
ComponentFactory.setEnabled (
Multilingual.mlnText (
ComponentFactory.createCheckBoxMenuItem (demoThread != null, "LED operation chedk", listener),
"ja", "LED の動作確認"),
kbdZKeyOn),
ComponentFactory.createHorizontalSeparator (),
Multilingual.mlnText (
ComponentFactory.createCheckBoxMenuItem (kbdZKeyDebugFlag, "Debug flag", listener),
"ja", "デバッグフラグ")
),
"ja", "Z キーボード");
}
//配列を初期化する
for (int i = 0; i < KBD_VAR_KEYS; i++) {
int t = KBD_CAPS_BASE[i];
KBD_CAPS_CHR[i] = (byte) t;
KBD_NORMAL_CHR[i] = (byte) (t >= 'A' && t <= 'Z' ? t ^ 0x20 : t);
KBD_CODE_CHR[i] = (byte) (t >= '0' && t <= '9' || t >= 'A' && t <= 'F' ? t : 0);
t = KBD_CAPS_SHIFT_BASE[i];
KBD_CAPS_SHIFT_CHR[i] = (byte) t;
KBD_SHIFT_CHR[i] = (byte) (t >= 'a' && t <= 'z' ? t ^ 0x20 : t);
KBD_CTRL_CHR[i] = (byte) (t < 0x20 ? t : t >= 0x40 ? t & 0x1f : 0);
t = KBD_KANA_BASE[i];
KBD_KANA_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
t = KBD_KANA_SHIFT_BASE[i];
KBD_KANA_SHIFT_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
t = KBD_KANA_AIU_BASE[i];
KBD_KANA_AIU_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
t = KBD_KANA_AIU_SHIFT_BASE[i];
KBD_KANA_AIU_SHIFT_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
t = KBD_ROMA_BASE[i];
KBD_ROMA_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
t = KBD_ROMA_SHIFT_BASE[i];
KBD_ROMA_SHIFT_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
t = KBD_NUM_BASE[i];
if (t != ' ') {
KBD_NUM_CAPS_CHR[i] =
KBD_NUM_CHR[i] =
KBD_NUM_CODE_CHR[i] =
KBD_NUM_CAPS_SHIFT_CHR[i] =
KBD_NUM_SHIFT_CHR[i] =
KBD_NUM_CTRL_CHR[i] =
KBD_NUM_KANA_CHR[i] =
KBD_NUM_KANA_SHIFT_CHR[i] =
KBD_NUM_KANA_AIU_CHR[i] =
KBD_NUM_KANA_AIU_SHIFT_CHR[i] =
KBD_NUM_ROMA_CHR[i] =
KBD_NUM_ROMA_SHIFT_CHR[i] = (byte) t;
} else {
KBD_NUM_CAPS_CHR[i] = KBD_CAPS_CHR[i];
KBD_NUM_CHR[i] = KBD_NORMAL_CHR[i];
KBD_NUM_CODE_CHR[i] = KBD_CODE_CHR[i];
KBD_NUM_CAPS_SHIFT_CHR[i] = KBD_CAPS_SHIFT_CHR[i];
KBD_NUM_SHIFT_CHR[i] = KBD_SHIFT_CHR[i];
KBD_NUM_CTRL_CHR[i] = KBD_CTRL_CHR[i];
KBD_NUM_KANA_CHR[i] = KBD_KANA_CHR[i];
KBD_NUM_KANA_SHIFT_CHR[i] = KBD_KANA_SHIFT_CHR[i];
KBD_NUM_KANA_AIU_CHR[i] = KBD_KANA_AIU_CHR[i];
KBD_NUM_KANA_AIU_SHIFT_CHR[i] = KBD_KANA_AIU_SHIFT_CHR[i];
KBD_NUM_ROMA_CHR[i] = KBD_ROMA_CHR[i];
KBD_NUM_ROMA_SHIFT_CHR[i] = KBD_ROMA_SHIFT_CHR[i];
}
}
//色を決める
// デフォルトのbrightnessは降順なので昇順のとき色を入れ替えてキーが凹まないようにする
if (LnF.lnfHSB[6] <= LnF.lnfHSB[8]) { //B0,B14
kbdLetterRGB = LnF.lnfRGB[KBD_LETTER_COLOR];
kbdTopLeftRGB = LnF.lnfRGB[KBD_TOP_LEFT_COLOR];
kbdTopRGB = LnF.lnfRGB[KBD_TOP_COLOR];
kbdLeftRGB = LnF.lnfRGB[KBD_LEFT_COLOR];
kbdPointedRGB = LnF.lnfRGB[KBD_POINTED_COLOR];
kbdTopRightRGB = LnF.lnfRGB[KBD_TOP_RIGHT_COLOR];
kbdBottomLeftRGB = LnF.lnfRGB[KBD_BOTTOM_LEFT_COLOR];
kbdKeytopRGB = LnF.lnfRGB[KBD_KEYTOP_COLOR];
kbdRightRGB = LnF.lnfRGB[KBD_RIGHT_COLOR];
kbdBottomRGB = LnF.lnfRGB[KBD_BOTTOM_COLOR];
kbdBottomRightRGB = LnF.lnfRGB[KBD_BOTTOM_RIGHT_COLOR];
kbdShadowRGB = LnF.lnfRGB[KBD_SHADOW_COLOR];
kbdBackgroundRGB = LnF.lnfRGB[KBD_BACKGROUND_COLOR];
kbdHoleRGB = LnF.lnfRGB[KBD_HOLE_COLOR];
} else {
kbdLetterRGB = LnF.lnfRGB[14 - KBD_LETTER_COLOR];
kbdTopLeftRGB = LnF.lnfRGB[14 - KBD_TOP_LEFT_COLOR];
kbdTopRGB = LnF.lnfRGB[14 - KBD_TOP_COLOR];
kbdLeftRGB = LnF.lnfRGB[14 - KBD_LEFT_COLOR];
kbdPointedRGB = LnF.lnfRGB[14 - KBD_POINTED_COLOR];
kbdTopRightRGB = LnF.lnfRGB[14 - KBD_TOP_RIGHT_COLOR];
kbdBottomLeftRGB = LnF.lnfRGB[14 - KBD_BOTTOM_LEFT_COLOR];
kbdKeytopRGB = LnF.lnfRGB[14 - KBD_KEYTOP_COLOR];
kbdRightRGB = LnF.lnfRGB[14 - KBD_RIGHT_COLOR];
kbdBottomRGB = LnF.lnfRGB[14 - KBD_BOTTOM_COLOR];
kbdBottomRightRGB = LnF.lnfRGB[14 - KBD_BOTTOM_RIGHT_COLOR];
kbdShadowRGB = LnF.lnfRGB[14 - KBD_SHADOW_COLOR];
kbdBackgroundRGB = LnF.lnfRGB[14 - KBD_BACKGROUND_COLOR];
kbdHoleRGB = LnF.lnfRGB[14 - KBD_HOLE_COLOR];
}
//可変キーを描く
//kbdVarStatBitmap = new int[256][][];
for (int i = 0; i < 256; i++) {
int[] letter = KBD_VAR_LETTER[i];
if (letter == null) {
kbdVarStatBitmap[i] = null;
continue;
}
int[][] statBitmap = kbdVarStatBitmap[i] = new int[4][];
for (int stat = 0; stat < 4; stat++) {
if (KBD_USE_ROM_FONT) { //ROMフォントを使う
kbdDrawKey2 (statBitmap[stat] = new int[KBD_KEY_WIDTH * KBD_KEY_HEIGHT],
KBD_KEY_WIDTH, 0, 0, KBD_KEY_WIDTH, KBD_KEY_HEIGHT, 0, 0, null, i, stat);
} else {
kbdDrawKey (statBitmap[stat] = new int[KBD_KEY_WIDTH * KBD_KEY_HEIGHT],
KBD_KEY_WIDTH, 0, 0, KBD_KEY_WIDTH, KBD_KEY_HEIGHT, 0, 0, null, letter, stat);
}
}
}
//LEDキーを描く
//kbdLedStatBitmap = new int[KBD_LED_KEYS][][];
for (int i = 0; i < KBD_LED_KEYS; i++) {
int[] letter = KBD_LED_LETTER[i];
if (letter == null) {
kbdLedStatBitmap[i] = null;
continue;
}
int[][] statBitmap = kbdLedStatBitmap[i] = new int[32][];
for (int stat = 0; stat < 32; stat++) {
kbdDrawKey (statBitmap[stat] = new int[KBD_KEY_WIDTH * KBD_KEY_HEIGHT],
KBD_KEY_WIDTH, 0, 0, KBD_KEY_WIDTH, KBD_KEY_HEIGHT, 0, 0, KBD_LED_COLOR[i][stat >> 2], letter, stat & 3);
}
}
//種類毎に別々に用意するもの
//kbdDataTypeImage = new BufferedImage[KBD_TYPES];
//kbdDataTypeWidth = new int[KBD_TYPES];
//kbdDataTypeHeight = new int[KBD_TYPES];
//kbdDataTypeBitmap = new int[KBD_TYPES][];
//kbdDataTypeIndexMap = new byte[KBD_TYPES][];
//kbdDataTypeStatFixBitmap = new int[KBD_TYPES][][];
//kbdDataTypeIndexRect = new int[KBD_TYPES][][];
//kbdDataTypeIndexCharacterStat = new int[KBD_TYPES][];
for (int type = 0; type < KBD_TYPES; type++) {
int cols = KBD_TYPE_COLS[type];
int rows = KBD_TYPE_ROWS[type];
int width = kbdDataTypeWidth[type] = KBD_PADDING_LEFT + KBD_COL_WIDTH * cols + KBD_PADDING_RIGHT;
int height = kbdDataTypeHeight[type] = KBD_PADDING_TOP + KBD_ROW_HEIGHT * rows + KBD_PADDING_BOTTOM;
BufferedImage image = kbdDataTypeImage[type] = new BufferedImage (width, height, BufferedImage.TYPE_INT_RGB);
kbdDataTypeBitmap[type] = ((DataBufferInt) image.getRaster ().getDataBuffer ()).getData ();
Arrays.fill (kbdDataTypeBitmap[type], kbdBackgroundRGB);
byte[] indexMap = kbdDataTypeIndexMap[type] = new byte[width * height];
Arrays.fill (kbdDataTypeIndexMap[type], (byte) -1);
kbdDataTypeStatFixBitmap[type] = new int[4][];
int[][] indexRect = kbdDataTypeIndexRect[type] = new int[KBD_ALL_KEYS][];
int[] indexCharacterStat = kbdDataTypeIndexCharacterStat[type] = new int[KBD_ALL_KEYS];
Arrays.fill (indexCharacterStat, -1); //初回はすべてのキーを描画する
//可変キーとLEDキーのレクタングルを作る
int[][] ledBox = KBD_TYPE_LED_BOX[type];
for (int i = 0; i < KBD_VAR_KEYS + KBD_LED_KEYS; i++) {
int[] box = i < KBD_VAR_KEYS ? KBD_VAR_BOX[i] : ledBox[i - KBD_VAR_KEYS];
if (box == null) { //欠番。Standard KeyboardのNUMキー
indexRect[i] = new int[0];
continue;
}
int x = KBD_PADDING_LEFT + KBD_COL_WIDTH * box[0];
int y = KBD_PADDING_TOP + KBD_ROW_HEIGHT * box[1];
int w = KBD_COL_WIDTH * box[2] - 1;
int h = KBD_ROW_HEIGHT * box[3] - 1;
indexRect[i] = box == null ? new int[0] : new int[] { x, y, w, h };
int tx = x + KBD_TOUCHABLE_AREA;
int ty = y + KBD_TOUCHABLE_AREA;
int tw = w - KBD_TOUCHABLE_AREA * 2;
int th = h - KBD_TOUCHABLE_AREA * 2;
int p = tx + width * ty;
for (int v = 0; v < th; v++) {
for (int u = 0; u < tw; u++) {
indexMap[p + u] = (byte) i;
}
p += width;
}
}
//固定キーを描く
for (int stat = 0; stat < 4; stat++) {
int[] bitmap = kbdDataTypeStatFixBitmap[type][stat] = new int[width * height];
Arrays.fill (bitmap, kbdBackgroundRGB);
}
int[][] fixBox = KBD_TYPE_FIX_BOX[type];
int[] fixStyle = KBD_TYPE_FIX_STYLE[type];
for (int i = KBD_VAR_KEYS + KBD_LED_KEYS; i < KBD_ALL_KEYS; i++) {
int[] box = fixBox[i - (KBD_VAR_KEYS + KBD_LED_KEYS)];
if (box == null) { //欠番。Compact Keyboardのテンキー
indexRect[i] = new int[0];
continue;
}
int col = box[0]; //列
int row = box[1]; //行
int wide = box[2]; //幅
int tall = box[3]; //高さ
int x = KBD_PADDING_LEFT + KBD_COL_WIDTH * col;
int y = KBD_PADDING_TOP + KBD_ROW_HEIGHT * row;
int w = KBD_COL_WIDTH * wide - 1;
int h = KBD_ROW_HEIGHT * tall - 1;
int style = fixStyle[i - (KBD_VAR_KEYS + KBD_LED_KEYS)];
if (style == KBD_RETURN_STYLE) { //RETURNキー
//レクタングルの左下を1列x4行削る。キートップの左右を1列ずつ削る
int wl = KBD_COL_WIDTH; //左側
int hb = KBD_ROW_HEIGHT * 4; //下側
int wr = w - wl; //右側
int ht = h - hb; //上側
indexRect[i] = new int[] { x, y, w, ht, x + wl, y + ht, wr, hb };
int tx = x + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
int ty = y + KBD_TOUCHABLE_AREA;
int tw = w - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH) * 2;
int th = ht - KBD_TOUCHABLE_AREA * 2;
int p = tx + width * ty;
for (int v = 0; v < th; v++) {
for (int u = 0; u < tw; u++) {
indexMap[p + u] = (byte) i;
}
p += width;
}
tx = x + wl + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
ty = y + ht - KBD_TOUCHABLE_AREA;
tw = wr - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH) * 2;
th = hb;
p = tx + width * ty;
for (int v = 0; v < th; v++) {
for (int u = 0; u < tw; u++) {
indexMap[p + u] = (byte) i;
}
p += width;
}
//1段目
for (int stat = 0; stat < 2; stat++) { //!pressedのみ
int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
kbdDrawLine (bitmap, x + width * y,
1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB, //→→
width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB, //↓↓
-1, 1, kbdBottomRightRGB, -1, wr - 2, kbdBottomRGB, //←
-width, 1, kbdBottomLeftRGB, -width, hb - 1, kbdLeftRGB, //↑
-1, 1, kbdBottomLeftRGB, -1, wl - 1, kbdBottomRGB, //←
-width, 1, kbdBottomLeftRGB, -width, ht - 2, kbdLeftRGB); //↑
}
for (int stat = 2; stat < 4; stat++) { //pressedのみ
int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
kbdDrawLine (bitmap, x + width * y,
1, 1, kbdHoleRGB, 1, w - 2, kbdHoleRGB, //→→
width, 1, kbdHoleRGB, width, h - 2, kbdHoleRGB, //↓↓
-1, 1, kbdHoleRGB, -1, wr - 2, kbdHoleRGB, //←
-width, 1, kbdHoleRGB, -width, hb - 1, kbdHoleRGB, //↑
-1, 1, kbdHoleRGB, -1, wl - 1, kbdHoleRGB, //←
-width, 1, kbdHoleRGB, -width, ht - 2, kbdHoleRGB); //↑
}
int u = KBD_COL_WIDTH;
x += 1 + u;
y += 1;
w -= 2 + u * 2;
h -= 2;
wr -= 2 + u * 2;
ht -= 2;
//島
for (int stat = 0; stat < 4; stat++) {
int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
kbdFillRect (bitmap, width, x - u, y, u, ht, kbdKeytopRGB); //左側の上半分
kbdFillRect (bitmap, width, x + wl - u, y + ht, u, h - ht, kbdKeytopRGB); //左側の下半分
kbdFillRect (bitmap, width, x + w, y, u, h, kbdKeytopRGB); //右側
}
//2段目
int lx = x;
int ly = y;
int lw = w;
int lh = h;
for (int stat = 0; stat < 4; stat++) {
int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
kbdDrawLine (bitmap, x + width * y,
1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB, //→→
width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB, //↓↓
-1, 1, kbdBottomRightRGB, -1, wr - 2, kbdBottomRGB, //←
-width, 1, kbdBottomLeftRGB, -width, hb - 1, kbdLeftRGB, //↑
-1, 1, kbdBottomLeftRGB, -1, wl - 1, kbdBottomRGB, //←
-width, 1, kbdBottomLeftRGB, -width, ht - 2, kbdLeftRGB); //↑
}
x++;
y++;
w -= 2;
h -= 2;
wr -= 2;
ht -= 2;
//3段目
for (int stat = 0; stat < 4; stat++) {
int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
kbdDrawLine (bitmap, x + width * y,
1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB, //→→
width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB, //↓↓
-1, 1, kbdBottomRightRGB, -1, wr - 2, kbdBottomRGB, //←
-width, 1, kbdBottomLeftRGB, -width, hb - 1, kbdLeftRGB, //↑
-1, 1, kbdBottomLeftRGB, -1, wl - 1, kbdBottomRGB, //←
-width, 1, kbdBottomLeftRGB, -width, ht - 2, kbdLeftRGB); //↑
}
x++;
y++;
w -= 2;
h -= 2;
wr -= 2;
ht -= 2;
//キートップと文字
int[] letter = KBD_FIX_LETTER[KBD_RETURN_INDEX - (KBD_VAR_KEYS + KBD_LED_KEYS)];
for (int stat = 0; stat < 4; stat++) {
int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
boolean pointed = (stat & KBD_POINTED_MASK) != 0;
int color = pointed ? kbdPointedRGB : kbdKeytopRGB;
kbdFillRect (bitmap, width, x, y, w, ht, color); //上半分
kbdFillRect (bitmap, width, x + wl, y + ht, w - wl, h - ht, color); //下半分
kbdDrawLetter (bitmap, width, lx, ly, lw, lh, letter);
}
} else if (style == KBD_SHIFT_STYLE) { //SHIFTキー
int xr = x + KBD_COL_WIDTH * (wide - 9); //右
w = KBD_COL_WIDTH * 9 - 1; //幅
indexRect[i] = new int[] { x, y, w, h, xr, y, w, h };
int tx = x + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
int ty = y + KBD_TOUCHABLE_AREA;
int tw = w - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH) * 2;
int th = h - KBD_TOUCHABLE_AREA * 2;
int p = tx + width * ty;
for (int v = 0; v < th; v++) {
for (int u = 0; u < tw; u++) {
indexMap[p + u] = (byte) i;
}
p += width;
}
tx = xr + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
p = tx + width * ty;
for (int v = 0; v < th; v++) {
for (int u = 0; u < tw; u++) {
indexMap[p + u] = (byte) i;
}
p += width;
}
int[] letter = KBD_FIX_LETTER[KBD_SHIFT_INDEX - (KBD_VAR_KEYS + KBD_LED_KEYS)];
for (int stat = 0; stat < 4; stat++) {
int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
kbdDrawKey (bitmap, width, x, y, w, h, KBD_COL_WIDTH, 0, null, letter, stat);
kbdDrawKey (bitmap, width, xr, y, w, h, KBD_COL_WIDTH, 0, null, letter, stat);
}
} else { //RETURNキーとSHIFTキー以外
if (style == KBD_FUNCTION_STYLE) { //F1~F10
y += KBD_ROW_HEIGHT >> 1; //キーの上端を1/2行削る
h -= KBD_ROW_HEIGHT >> 1;
}
int pw = (style == KBD_NARROWER_STYLE ? KBD_COL_WIDTH >> 1 : //キートップの左右を1/2列ずつ削る
style == KBD_NARROW_STYLE ? KBD_COL_WIDTH : //キートップの左右を1列ずつ削る
0);
int ph = (style == KBD_SHORTER_STYLE ? KBD_ROW_HEIGHT : //キートップの上下を1行ずつ削る
style == KBD_SHORT_STYLE ? KBD_ROW_HEIGHT << 1 : //キートップの上下を2行ずつ削る
0);
indexRect[i] = new int[] { x, y, w, h };
int tx = x + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + pw);
int ty = y + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + ph);
int tw = w - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + pw) * 2;
int th = h - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + ph) * 2;
int p = tx + width * ty;
for (int v = 0; v < th; v++) {
for (int u = 0; u < tw; u++) {
indexMap[p + u] = (byte) i;
}
p += width;
}
for (int stat = 0; stat < 4; stat++) {
int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
kbdDrawKey (bitmap, width, x, y, w, h, pw, ph, null, KBD_FIX_LETTER[i - (KBD_VAR_KEYS + KBD_LED_KEYS)], stat);
}
} //RETURNキー以外
} //for i
} //for type
//現在の状態
if (kbdOn) {
kbdWidth = kbdDataTypeWidth[kbdType];
kbdHeight = kbdDataTypeHeight[kbdType];
kbdImage = kbdDataTypeImage[kbdType];
kbdBitmap = kbdDataTypeBitmap[kbdType];
kbdIndexMap = kbdDataTypeIndexMap[kbdType];
kbdFlush ();
} else {
kbdWidth = 0;
kbdHeight = 0;
kbdImage = null;
kbdBitmap = null;
kbdIndexMap = null;
}
//kbdStat = new int[KBD_ALL_KEYS];
Arrays.fill (kbdStat, 0);
kbdPointedIndex = -1;
if (!MC68901.MFP_KBD_ON) {
kbdRepeatTask = null;
}
//kbdRepeatDelay = 200 + 100 * 3;
//kbdRepeatInterval = 30 + 5 * 4 * 4;
kbdSetRepeatDelay (MainMemory.mmrRbs (0x00ed003a));
kbdSetRepeatInterval (MainMemory.mmrRbs (0x00ed003b));
kbdLedBrightness = 0; //明るい
} //kbdInit()
//kbdTini ()
// 後始末
public static void kbdTini () {
//キーマップを保存する
if (KBD_ZKEY_ON && kbdZKeyPort != null) { //Zキーボード
System.arraycopy (kbdCurrentMap, 0, //from
kbdCurrentMapZ, 0, //to
KBD_DEFAULT_MAP_WIN.length); //length
} else { //Zキーボード以外
System.arraycopy (kbdCurrentMap, 0, //from
kbdCurrentMapNonZ, 0, //to
KBD_DEFAULT_MAP_WIN.length); //length
}
//キーマップ
Settings.sgsPutOnOff ("keymapus", kbdUSLayoutOn);
{
int[] map;
if (Arrays.equals (kbdCurrentMapNonZ, kbdDefaultMapNonZ)) { //デフォルトマップと同じ
map = new int[0];
} else { //デフォルトマップと違う
map = new int[1 + KBD_DEFAULT_MAP_WIN.length];
map[0] = -3;
Arrays.fill (map, 1, 1 + KBD_DEFAULT_MAP_WIN.length, 0); //array,from,to,value
System.arraycopy (kbdCurrentMapNonZ, 0, //from
map, 1, //to
KBD_DEFAULT_MAP_WIN.length); //length
}
Settings.sgsPutIntArray ("keymap", map);
}
//キーボードの種類
Settings.sgsPutString ("keyboard",
!kbdOn ? "none" :
kbdType == KBD_COMPACT_TYPE ? "compact" :
kbdType == KBD_STANDARD_TYPE ? "standard" :
"standard");
if (KBD_GUIDE_ON) {
if (kbdGuideThread != null) {
kbdGuideThread.interrupt ();
try {
kbdGuideThread.join (100L);
} catch (InterruptedException ie) {
}
kbdGuideThread = null;
}
}
//Zキーボード
if (KBD_ZKEY_ON) {
Settings.sgsPutOnOff ("zkeyboard", kbdZKeyOnRequest);
kbdZKeyClose ();
int[] map;
if (Arrays.equals (kbdCurrentMapZ, kbdDefaultMapZ)) { //デフォルトマップと同じ
map = new int[0];
} else { //デフォルトマップと違う
map = new int[1 + KBD_DEFAULT_MAP_WIN.length];
map[0] = -3;
Arrays.fill (map, 1, 1 + KBD_DEFAULT_MAP_WIN.length, 0); //array,from,to,value
System.arraycopy (kbdCurrentMapZ, 0, //from
map, 1, //to
KBD_DEFAULT_MAP_WIN.length); //length
}
Settings.sgsPutIntArray ("zkeymap", map);
}
}
//kbdReset ()
// リセット
public static void kbdReset () {
kbdRePress (); //押されているキーを再入力する
if (KBD_ZKEY_ON) {
if (!kbdZKeyOn && kbdZKeyOnRequest) {
kbdZKeyOpen ();
}
kbdZKeyIOData = 0L;
kbdZKeyIOProgrammable = false;
kbdZKeyUpdate ();
}
}
//kbdDrawKey (bitmap, width, x, y, w, h, u, v, ledColors, letter, stat)
// キーを描く
// bitmap ビットマップ
// width bitmapの幅(px)
// x キーのx座標(px)
// y キーのy座標(px)
// w キーの幅(px)
// h キーの高さ(px)
// u キートップの左右を削る幅(px)
// v キートップの上下を削る幅(px)
// ledColors LEDの色。[0]=キートップ側の色(rgb),[1]=ボーダー側の色(rgb)
// letter 文字のパターン
// stat キーの状態。bit0=pointed,bit1=pressed
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) {
boolean pointed = (stat & KBD_POINTED_MASK) != 0;
boolean pressed = (stat & KBD_PRESSED_MASK) != 0;
//1段目
if (!pressed) {
kbdDrawLine (bitmap, x + width * y,
1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
-1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
-width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
} else {
kbdDrawLine (bitmap, x + width * y,
1, 1, kbdHoleRGB, 1, w - 2, kbdHoleRGB,
width, 1, kbdHoleRGB, width, h - 2, kbdHoleRGB,
-1, 1, kbdHoleRGB, -1, w - 2, kbdHoleRGB,
-width, 1, kbdHoleRGB, -width, h - 2, kbdHoleRGB);
}
x += 1 + u;
y += 1 + v;
w -= 2 + u * 2;
h -= 2 + v * 2;
//島
if (u > 0) {
kbdFillRect (bitmap, width, x - u, y, u, h, kbdKeytopRGB); //左側
kbdFillRect (bitmap, width, x + w, y, u, h, kbdKeytopRGB); //右側
}
if (v > 0) {
kbdFillRect (bitmap, width, x, y - v, w, v, kbdKeytopRGB); //上側
kbdFillRect (bitmap, width, x, y + h, w, v, kbdKeytopRGB); //下側
}
//2段目
int lx = x;
int ly = y;
int lw = w;
int lh = h;
kbdDrawLine (bitmap, x + width * y,
1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
-1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
-width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
x++;
y++;
w -= 2;
h -= 2;
//3段目
kbdDrawLine (bitmap, x + width * y,
1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
-1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
-width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
x++;
y++;
w -= 2;
h -= 2;
//キートップ
kbdFillRect (bitmap, width, x, y, w, h, pointed ? kbdPointedRGB : kbdKeytopRGB);
//LED
if (ledColors != null) {
x += w - KBD_LED_WIDTH >> 1;
y += h;
kbdFillRect (bitmap, width, x, y - KBD_LED_HEIGHT, KBD_LED_WIDTH, KBD_LED_HEIGHT, ledColors[0]); //上半分
kbdFillRect (bitmap, width, x, y, KBD_LED_WIDTH, pressed ? 2 : 3, ledColors[1]); //下半分の高さはボーダーの幅
}
//文字
if (letter != null) { //文字あり
kbdDrawLetter (bitmap, width, lx, ly, lw, lh, letter);
}
} //kbdDrawKey
//kbdDrawKey2 (bitmap, width, x, y, w, h, u, v, ledColors, code, stat)
// キーを描く
// bitmap ビットマップ
// width bitmapの幅(px)
// x キーのx座標(px)
// y キーのy座標(px)
// w キーの幅(px)
// h キーの高さ(px)
// u キートップの左右を削る幅(px)
// v キートップの上下を削る幅(px)
// ledColors LEDの色。[0]=キートップ側の色(rgb),[1]=ボーダー側の色(rgb)
// code 文字コード
// stat キーの状態。bit0=pointed,bit1=pressed
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) {
if (KBD_USE_ROM_FONT) { //ROMフォントを使う
boolean pointed = (stat & KBD_POINTED_MASK) != 0;
boolean pressed = (stat & KBD_PRESSED_MASK) != 0;
//1段目
if (!pressed) {
kbdDrawLine (bitmap, x + width * y,
1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
-1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
-width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
} else {
kbdDrawLine (bitmap, x + width * y,
1, 1, kbdHoleRGB, 1, w - 2, kbdHoleRGB,
width, 1, kbdHoleRGB, width, h - 2, kbdHoleRGB,
-1, 1, kbdHoleRGB, -1, w - 2, kbdHoleRGB,
-width, 1, kbdHoleRGB, -width, h - 2, kbdHoleRGB);
}
x += 1 + u;
y += 1 + v;
w -= 2 + u * 2;
h -= 2 + v * 2;
//島
if (u > 0) {
kbdFillRect (bitmap, width, x - u, y, u, h, kbdKeytopRGB); //左側
kbdFillRect (bitmap, width, x + w, y, u, h, kbdKeytopRGB); //右側
}
if (v > 0) {
kbdFillRect (bitmap, width, x, y - v, w, v, kbdKeytopRGB); //上側
kbdFillRect (bitmap, width, x, y + h, w, v, kbdKeytopRGB); //下側
}
//2段目
int lx = x;
int ly = y;
int lw = w;
int lh = h;
kbdDrawLine (bitmap, x + width * y,
1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
-1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
-width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
x++;
y++;
w -= 2;
h -= 2;
//3段目
kbdDrawLine (bitmap, x + width * y,
1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
-1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
-width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
x++;
y++;
w -= 2;
h -= 2;
//キートップ
kbdFillRect (bitmap, width, x, y, w, h, pointed ? kbdPointedRGB : kbdKeytopRGB);
//LED
if (ledColors != null) {
x += w - KBD_LED_WIDTH >> 1;
y += h;
kbdFillRect (bitmap, width, x, y - KBD_LED_HEIGHT, KBD_LED_WIDTH, KBD_LED_HEIGHT, ledColors[0]); //上半分
kbdFillRect (bitmap, width, x, y, KBD_LED_WIDTH, pressed ? 2 : 3, ledColors[1]); //下半分の高さはボーダーの幅
}
//文字
if (code != 0) { //文字あり
kbdDrawLetter2 (bitmap, width, lx, ly, lw, lh, code);
}
} //if KBD_USE_ROM_FONT
} //kbdDrawKey2
//kbdFillRect (bitmap, width, x, y, w, h, color)
// 矩形を塗り潰す
// bitmap ビットマップ
// width bitmapの幅(px)
// x x座標(px)
// y y座標(px)
// w 幅(px)
// h 高さ(px)
// color 色(rgb)
public static void kbdFillRect (int[] bitmap, int width, int x, int y, int w, int h, int color) {
for (int j = 0; j < h; j++) {
int dst = x + width * (y + j);
for (int i = 0; i < w; i++) {
bitmap[dst + i] = color;
}
}
} //kbdFillRect(int[],int,int,int,int,int,int)
//kbdDrawLetter (bitmap, width, lx, ly, lw, lh, letter)
// 文字のパターンを描く
// 影を付ける
// bitmap ビットマップ
// width bitmapの幅(px)
// lx x座標(px)
// ly y座標(px)
// lw 幅(px)
// lh 高さ(px)
// letter 文字のパターン
public static void kbdDrawLetter (int[] bitmap, int width, int lx, int ly, int lw, int lh, int[] letter) {
if (lw <= 32) {
for (int j = 0; j < lh; j++) {
int dst = lx + width * (ly + j);
for (int i = 0; i < lw; i++) {
if ((letter[j] >> lw - 1 - i & 1) != 0) {
bitmap[dst + i] = kbdLetterRGB;
} else if (i > 0 && j > 0 && (letter[j - 1] >> lw - 1 - (i - 1) & 1) != 0) {
bitmap[dst + i] = kbdShadowRGB;
//bitmap[dst + i] = 0xff000000 | bitmap[dst + i] >> 2 & 0x003f3f3f;
//bitmap[dst + i] = 0xff000000 | bitmap[dst + i] >> 1 & 0x007f7f7f;
}
}
}
} else {
int n = lw + 31 >> 5; //1ラスタあたりの文字データの数
for (int j = 0; j < lh; j++) {
int src = n * j + n - 1; //文字データの右端
int dst = lx + width * (ly + j) + lw - 1; //キートップの右端
for (int i = 0; i < lw; i++) { //右端が0,左端がlw-1
if ((letter[src - (i >> 5)] >> (i & 0x1f) & 1) != 0) {
bitmap[dst - i] = kbdLetterRGB;
} else if (i > 0 && j > 0 && (letter[src - n - (i + 1 >> 5)] >> (i + 1 & 0x1f) & 1) != 0) {
bitmap[dst - i] = kbdShadowRGB;
//bitmap[dst - i] = 0xff000000 | bitmap[dst - i] >> 2 & 0x003f3f3f;
//bitmap[dst - i] = 0xff000000 | bitmap[dst - i] >> 1 & 0x007f7f7f;
}
}
}
}
} //kbdDrawLetter(int[],int,int,int,int,int,int[])
//kbdDrawLetter2 (bitmap, width, lx, ly, lw, lh, code)
// 文字のパターンを描く
// 影を付ける
// bitmap ビットマップ
// width bitmapの幅(px)
// lx x座標(px)
// ly y座標(px)
// lw 幅(px)
// lh 高さ(px)
// code 文字コード
public static void kbdDrawLetter2 (int[] bitmap, int width, int lx, int ly, int lw, int lh, int code) {
final int fw = 8;
final int fh = 8;
final int fa = 0x00f3a000; //ANK8x8
int dst = lx + (lw - fw >> 1) + width * (ly + (lh - fh >> 1));
int src = fa + (fw + 7 >> 3) * fh * code;
for (int y = 0; y < fh; y++) {
for (int x = 0; x < fw; x++) {
if ((MainMemory.mmrM8[src + (fw + 7 >> 3) * y + (x >> 3)] & 1 << (~x & 0x07)) != 0) {
bitmap[dst + width * y + x] = kbdLetterRGB;
} else if (x > 0 && y > 0 &&
(MainMemory.mmrM8[src + (fw + 7 >> 3) * (y - 1) + (x - 1 >> 3)] & 1 << (~(x - 1) & 0x07)) != 0) {
bitmap[dst + width * y + x] = kbdShadowRGB;
}
}
}
} //kbdDrawLetter2(int[],int,int,int,int,int,int)
//kbdDrawLine (bitmap, pos, vect0, step0, color0, vect1, step1, color1, ...)
// bitmap ビットマップ
// pos 開始位置のオフセット
// vect 方向。オフセットの差分
// step 長さ(px)
// color 色(rgb)
public static void kbdDrawLine (int[] bitmap, int pos, int... vect_step_color) {
for (int i = 0; i < vect_step_color.length; i += 3) {
int vect = vect_step_color[i];
int step = vect_step_color[i + 1];
int color = vect_step_color[i + 2];
for (; step > 0; step--) {
bitmap[pos] = color;
pos += vect;
}
}
} //kbdDrawLine(int[],int,int...)
//kbdStart ()
// キーボードのイベントリスナーを設定して動作を開始する
// MFPが初期化されている必要がある
public static void kbdStart () {
//Tabキーによるフォーカスの移動を無効にする
// setFocusTraversalKeysにCollections.EMPTY_SETを指定すると無検査変換の警告が出る
//XEiJ.pnlPanel.setFocusTraversalKeys (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);
//XEiJ.pnlPanel.setFocusTraversalKeys (KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);
//XEiJ.pnlPanel.setFocusTraversalKeys (KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, Collections.EMPTY_SET);
XEiJ.pnlCanvasOrPanel.setFocusTraversalKeysEnabled (false); //Component.setFocusTraversalKeysEnabled()は1.4から
//フォーカスリスナーとキーリスナー
XEiJ.pnlCanvasOrPanel.setFocusable (true); //普通のコンポーネントはクリックしてもフォーカスされないのでキーイベントが発生しない
ComponentFactory.addListener (
XEiJ.pnlCanvasOrPanel,
new FocusAdapter () {
@Override public void focusGained (FocusEvent fe) {
kbdCloseIME (); //IMEが開いていたら閉じる
}
//@Override public void focusLost (FocusEvent fe) {
//}
});
XEiJ.pnlCanvasOrPanel.requestFocusInWindow (); //フォーカスを要求する。Component.requestFocusInWindow()は1.4から
ComponentFactory.addListener (
XEiJ.pnlCanvasOrPanel,
new KeyAdapter () {
@Override public void keyPressed (KeyEvent ke) {
if (Mouse.musOutputButtonStatus) {
System.out.println ("when=" + ke.getWhen () + " toString=\"" + ke.toString () + "\"");
//System.out.println (String.format ("keyPressed keyChar=0x%04x keyCode=0x%08x extendedKeyCode=0x%08x keyLocation=%d",
// (int) ke.getKeyChar (), ke.getKeyCode (), ke.getExtendedKeyCode (), ke.getKeyLocation ()));
}
kbdCloseIME (); //IMEが開いていたら閉じる
int keyCode = ke.getKeyCode ();
if (KBD_ZKEY_ON && kbdZKeyPort != null) { //Zキーボード
switch (keyCode) {
case KeyEvent.VK_HALF_WIDTH: //BREAK 半角(VK 244)
case KeyEvent.VK_FULL_WIDTH: //BREAK 全角(VK 243)
//pressedを無視する
break;
case KeyEvent.VK_F17: //CAPS 英数字(VK 240)→F17
//pressedで入力してすぐ離す
kbdInput (ke, true);
kbdInput (ke, false);
break;
case KeyEvent.VK_F16: //XF4 ひらがな(VK 242)→F16
//pressedで入力して他のキーが離されまで押されたままにする
kbdInput (ke, true);
kbdXF4Locked = ke;
break;
case KeyEvent.VK_NUM_LOCK: //CLR NumLock
if (kbdIgnoreNumLock) { //NumLockを1回無視する
} else {
kbdInput (ke, true);
}
break;
default: //その他
kbdInput (ke, true);
}
} else if (XEiJ.prgIsWindows && //Windows。WSLはWindowsキーではイベントが発生しない
keyCode == KeyEvent.VK_WINDOWS) { //Windowsキー
kbdInput (ke, true); //押して離す
kbdInput (ke, false);
} else { //その他
kbdInput (ke, true);
}
ke.consume ();
}
@Override public void keyReleased (KeyEvent ke) {
if (Mouse.musOutputButtonStatus) {
System.out.println ("when=" + ke.getWhen () + " toString=\"" + ke.toString () + "\"");
//System.out.println (String.format ("keyReleased keyChar=0x%04x keyCode=0x%08x extendedKeyCode=0x%08x keyLocation=%d",
// (int) ke.getKeyChar (), ke.getKeyCode (), ke.getExtendedKeyCode (), ke.getKeyLocation ()));
}
kbdCloseIME (); //IMEが開いていたら閉じる
int keyCode = ke.getKeyCode ();
int keyLocation = ke.getKeyLocation ();
if (KBD_ZKEY_ON && kbdZKeyPort != null) { //Zキーボード
switch (keyCode) {
case KeyEvent.VK_HALF_WIDTH: //BREAK 半角(VK 244)
case KeyEvent.VK_FULL_WIDTH: //BREAK 全角(VK 243)
//releasedで入力してすぐ離す
kbdInput (ke, true);
kbdInput (ke, false);
break;
case KeyEvent.VK_F17: //CAPS 英数字(VK 240)→F17
case KeyEvent.VK_F16: //XF4 ひらがな(VK 242)→F16
//releasedを無視する
break;
case KeyEvent.VK_NUM_LOCK: //CLR NumLock
if (kbdIgnoreNumLock) { //NumLockを1回無視する
kbdIgnoreNumLock = false;
} else {
kbdInput (ke, false);
//NumLockを点灯させる
if (!kbdZKeyPort.isKeyToggled (KeyEvent.VK_NUM_LOCK)) { //NumLockが消灯している
kbdIgnoreNumLock = true; //NumLockを1回無視する
kbdZKeyPort.hitKey (KeyEvent.VK_NUM_LOCK); //NumLockを叩いて点灯させる。直ちに発火することに注意
}
}
break;
default: //その他
kbdInput (ke, false);
if (kbdXF4Locked != null) { //XF4が押されている
kbdInput (kbdXF4Locked, false); //XF4を離す
kbdXF4Locked = null;
}
}
} else { //Zキーボードではない
kbdInput (ke, false);
}
ke.consume ();
}
@Override public void keyTyped (KeyEvent ke) {
if (Mouse.musOutputButtonStatus) {
System.out.println ("when=" + ke.getWhen () + " toString=\"" + ke.toString () + "\"");
//System.out.println (String.format ("keyTyped keyChar=0x%04x keyCode=0x%08x extendedKeyCode=0x%08x keyLocation=%d",
// (int) ke.getKeyChar (), ke.getKeyCode (), ke.getExtendedKeyCode (), ke.getKeyLocation ()));
}
kbdCloseIME (); //IMEが開いていたら閉じる
ke.consume ();
}
});
//IMEが開いていたら閉じる
kbdCloseIME ();
if (kbdOn) {
//点灯要求コードを送出する
if (MC68901.MFP_KBD_ON) {
MC68901.mfpKbdInput (0xff, false);
} else {
kbdTransfer (0xff, false);
}
}
//キーボード設定ウィンドウの準備
if (RestorableFrame.rfmGetOpened (Settings.SGS_KBS_FRAME_KEY)) {
kbdOpen ();
}
} //kbdStart()
//kbdOpen ()
// キーボード設定ウィンドウを開く
public static void kbdOpen () {
if (kbdFrame == null) {
kbdMakeFrame ();
}
XEiJ.pnlExitFullScreen (false);
kbdFrame.setVisible (true);
} //kbdOpen()
//kbdMakeFrame ()
// キーボード設定ウィンドウを作る
// ここでは開かない
public static void kbdMakeFrame () {
//キーマップエディタ
kbdEditor = new KeyMapEditor (kbdCurrentMap);
//アクションリスナー
ActionListener listener = new ActionListener () {
@Override public void actionPerformed (ActionEvent ae) {
Object source = ae.getSource ();
switch (ae.getActionCommand ()) {
case "Blank": //白紙
kbdEditor.blank ();
break;
case "US layout": //英語配列
kbdUSLayoutOn = ((JCheckBox) source).isSelected ();
kbdDefaultMapNonZ = (XEiJ.prgIsLinux ? KBD_DEFAULT_MAP_LINUX :
XEiJ.prgIsMac ?
kbdUSLayoutOn ? KBD_DEFAULT_MAP_MAC_US : KBD_DEFAULT_MAP_MAC :
kbdUSLayoutOn ? KBD_DEFAULT_MAP_WIN_US : KBD_DEFAULT_MAP_WIN);
break;
case "Default": //初期値
kbdEditor.reset (KBD_ZKEY_ON && kbdZKeyPort != null ? kbdDefaultMapZ : kbdDefaultMapNonZ);
break;
case "Save": //保存
kbdEditor.save ();
break;
case "Restore": //復元
kbdEditor.restore ();
break;
case "Undo": //取り消し
kbdEditor.undo ();
break;
case "Redo": //やり直し
kbdEditor.redo ();
break;
}
}
};
//ウインドウ
kbdFrame = Multilingual.mlnTitle (
ComponentFactory.createRestorableSubFrame (
Settings.SGS_KBS_FRAME_KEY,
"Key assignment",
null,
ComponentFactory.createVerticalBox (
ComponentFactory.createFlowPanel (
FlowLayout.CENTER, 10, 2,
Multilingual.mlnText (ComponentFactory.createButton ("Blank", listener), "ja", "白紙"),
ComponentFactory.setLineBorder (
ComponentFactory.createFlowPanel (2, 2,
Multilingual.mlnText (ComponentFactory.createCheckBox (kbdUSLayoutOn, "US layout", listener), "ja", "英語配列"),
Multilingual.mlnText (ComponentFactory.createButton ("Default", listener), "ja", "初期値")
)
),
Multilingual.mlnText (ComponentFactory.createButton ("Save", listener), "ja", "保存"),
Multilingual.mlnText (ComponentFactory.createButton ("Restore", listener), "ja", "復元"),
Multilingual.mlnText (ComponentFactory.createButton ("Undo", listener), "ja", "取り消し"),
Multilingual.mlnText (ComponentFactory.createButton ("Redo", listener), "ja", "やり直し")
),
kbdEditor.getPanel ()
)
),
"ja", "キー割り当て");
} //kbdMakeFrame()
//kbdCloseIME ()
// IMEが開いていたら閉じる
// 継続的にIMEを無効化する方法が見当たらないのでIMEを開くキーが押されたらすぐに閉じることで擬似的にIMEを無効化する
public static void kbdCloseIME () {
try {
InputContext context = XEiJ.pnlCanvasOrPanel.getInputContext ();
if (context != null && context.isCompositionEnabled ()) {
context.setCompositionEnabled (false);
context.setCharacterSubsets (null);
}
} catch (UnsupportedOperationException uoe) {
}
} //kbdCloseIME()
//kbdSetOn (on)
// キーボードを表示する/表示しない
public static void kbdSetOn (boolean on) {
if (kbdOn != on) {
kbdOn = on;
if (on) {
if (false) {
if (kbdType == KBD_STANDARD_TYPE) {
System.out.println (Multilingual.mlnJapanese ?
"標準キーボードを接続します" :
"Connecting standard keyboard");
} else if (kbdType == KBD_COMPACT_TYPE) {
System.out.println (Multilingual.mlnJapanese ?
"コンパクトキーボードを接続します" :
"Connecting compact keyboard");
}
}
kbdWidth = kbdDataTypeWidth[kbdType];
kbdHeight = kbdDataTypeHeight[kbdType];
kbdImage = kbdDataTypeImage[kbdType];
kbdBitmap = kbdDataTypeBitmap[kbdType];
kbdIndexMap = kbdDataTypeIndexMap[kbdType];
kbdFlush ();
//点灯要求コードを送出する
if (MC68901.MFP_KBD_ON) {
MC68901.mfpKbdInput (0xff, false);
} else {
kbdTransfer (0xff, false);
}
} else {
if (false) {
System.out.println (Multilingual.mlnJapanese ?
"キーボードを切り離します" :
"Disconnecting keyboard");
}
//ポイントされているキーがあれば解除する
if (kbdPointedIndex >= 0) {
kbdHover (0, 0);
}
kbdWidth = 0;
kbdHeight = 0;
kbdImage = null;
kbdBitmap = null;
kbdIndexMap = null;
}
if (XEiJ.pnlMode == XEiJ.PNL_FULLSCREEN) { //全画面表示
if (XEiJ.pnlHideKeyboard) { //全画面表示のときキーボードを隠す
XEiJ.pnlPrevKeyboardOn = kbdImage != null; //変更されたので復元しない
}
}
}
} //kbdSetOn(boolean)
//kbdSetType (type)
// キーボードの種類を変更する
// type キーボードの種類。KEY_STANDARD_TYPEまたはKBD_COMPACT_TYPE
public static void kbdSetType (int type) {
if (kbdType != type) {
kbdType = type;
if (kbdOn) {
if (false) {
System.out.println (Multilingual.mlnJapanese ?
"キーボードを切り離します" :
"Disconnecting keyboard");
}
//ポイントされているキーがあれば解除する
if (kbdPointedIndex >= 0) {
kbdHover (0, 0);
}
if (false) {
if (kbdType == KBD_STANDARD_TYPE) {
System.out.println (Multilingual.mlnJapanese ?
"標準キーボードを接続します" :
"Connecting standard keyboard");
} else if (kbdType == KBD_COMPACT_TYPE) {
System.out.println (Multilingual.mlnJapanese ?
"コンパクトキーボードを接続します" :
"Connecting compact keyboard");
}
}
kbdWidth = kbdDataTypeWidth[kbdType];
kbdHeight = kbdDataTypeHeight[kbdType];
kbdImage = kbdDataTypeImage[kbdType];
kbdBitmap = kbdDataTypeBitmap[kbdType];
kbdIndexMap = kbdDataTypeIndexMap[kbdType];
kbdFlush ();
//点灯要求コードを送出する
if (MC68901.MFP_KBD_ON) {
MC68901.mfpKbdInput (0xff, false);
} else {
kbdTransfer (0xff, false);
}
}
}
} //kbdSetType(int)
//kbdRepaint ()
// キーボードが表示されているときkbdImageを作り直して再描画する
public static void kbdRepaint () {
if (kbdOn) { //キーボードが表示されているとき
kbdFlush (); //kbdImageを作り直して
if (!XEiJ.PNL_USE_THREAD) {
XEiJ.pnlPanel.repaint (XEiJ.pnlKeyboardX, XEiJ.pnlKeyboardY, kbdWidth, kbdHeight); //再描画する
}
}
} //kbdRepaint()
//kbdFlush ()
// kbdImageを作り直す
public static void kbdFlush () {
int width = kbdDataTypeWidth[kbdType];
int[][] indexRect = kbdDataTypeIndexRect[kbdType];
int[] indexCharacterStat = kbdDataTypeIndexCharacterStat[kbdType];
int[][] statFixBitmap = kbdDataTypeStatFixBitmap[kbdType];
//LEDキーとモードキーの状態によってキートップに表示する文字の配列を選択する
boolean numOff = KBD_LED_TEST << (kbdStat[KBD_NUM_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
boolean ctrlOn = KBD_MODE_TEST << (kbdStat[KBD_CTRL_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
boolean codeOn = KBD_LED_TEST << (kbdStat[KBD_CODE_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
boolean opt1Off = KBD_MODE_TEST << (kbdStat[KBD_OPT1_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
boolean kanaOn = KBD_LED_TEST << (kbdStat[KBD_KANA_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
boolean shiftOff = KBD_MODE_TEST << (kbdStat[KBD_SHIFT_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
boolean romaOn = KBD_LED_TEST << (kbdStat[KBD_ROMA_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
boolean capsOff = KBD_LED_TEST << (kbdStat[KBD_CAPS_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
boolean zenOn = KBD_LED_TEST << (kbdStat[KBD_ZEN_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
boolean hiraOn = KBD_LED_TEST << (kbdStat[KBD_HIRA_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
byte[] varChr =
(numOff
? //-NUM
(ctrlOn
? //-NUM+CTRL
KBD_CTRL_CHR
: //-NUM-CTRL
(codeOn
? //-NUM-CTRL+CODE
KBD_CODE_CHR
: //-NUM-CTRL-CODE
(opt1Off && kanaOn
? //-NUM-CTRL-CODE+KANA
(XEiJ.busPbs (0x00ed002b) == 0
? //-NUM-CTRL-CODE+KANA-AIU
(shiftOff
? //-NUM-CTRL-CODE+KANA-AIU-SHIFT
KBD_KANA_CHR
: //-NUM-CTRL-CODE+KANA-AIU+SHIFT
KBD_KANA_SHIFT_CHR
) //!SHIFT
: //-NUM-CTRL-CODE+KANA+AIU
(shiftOff
? //-NUM-CTRL-CODE+KANA+AIU-SHIFT
KBD_KANA_AIU_CHR
: //-NUM-CTRL-CODE+KANA+AIU+SHIFT
KBD_KANA_AIU_SHIFT_CHR
) //!SHIFT
) //!AIU
: //-NUM-CTRL-CODE-KANA
(opt1Off && romaOn
? //-NUM-CTRL-CODE-KANA+ROMA
(shiftOff
? //-NUM-CTRL-CODE-KANA+ROMA-SHIFT
KBD_ROMA_CHR
: //-NUM-CTRL-CODE-KANA+ROMA+SHIFT
KBD_ROMA_SHIFT_CHR
) //!SHIFT
: //-NUM-CTRL-CODE-KANA-ROMA
(capsOff
? //-NUM-CTRL-CODE-KANA-ROMA-CAPS
(shiftOff
? //-NUM-CTRL-CODE-KANA-ROMA-CAPS-SHIFT
KBD_NORMAL_CHR
: //-NUM-CTRL-CODE-KANA-ROMA-CAPS+SHIFT
KBD_SHIFT_CHR
) //!SHIFT
: //-NUM-CTRL-CODE-KANA-ROMA+CAPS
(shiftOff
? //-NUM-CTRL-CODE-KANA-ROMA+CAPS-SHIFT
KBD_CAPS_CHR
: //-NUM-CTRL-CODE-KANA-ROMA+CAPS+SHIFT
KBD_CAPS_SHIFT_CHR
) //!SHIFT
) //!CAPS
) //!OPT.1&&ROMA
) //!OPT.1&&KANA
) //CODE
) //CTRL
: //+NUM
(ctrlOn
? //+NUM+CTRL
KBD_NUM_CTRL_CHR
: //+NUM-CTRL
(codeOn
? //+NUM-CTRL+CODE
KBD_NUM_CODE_CHR
: //+NUM-CTRL-CODE
(opt1Off && kanaOn
? //+NUM-CTRL-CODE+KANA
(MainMemory.mmrM8[0x00ed002b] == 0
? //+NUM-CTRL-CODE+KANA-AIU
(shiftOff
? //+NUM-CTRL-CODE+KANA-AIU-SHIFT
KBD_NUM_KANA_CHR
: //+NUM-CTRL-CODE+KANA-AIU+SHIFT
KBD_NUM_KANA_SHIFT_CHR
) //!SHIFT
: //+NUM-CTRL-CODE+KANA+AIU
(shiftOff
? //+NUM-CTRL-CODE+KANA+AIU-SHIFT
KBD_NUM_KANA_AIU_CHR
: //+NUM-CTRL-CODE+KANA+AIU+SHIFT
KBD_NUM_KANA_AIU_SHIFT_CHR
) //!SHIFT
) //!AIU
: //+NUM-CTRL-CODE-KANA
(opt1Off && romaOn
? //+NUM-CTRL-CODE-KANA+ROMA
(shiftOff
? //+NUM-CTRL-CODE-KANA+ROMA-SHIFT
KBD_NUM_ROMA_CHR
: //+NUM-CTRL-CODE-KANA+ROMA+SHIFT
KBD_NUM_ROMA_SHIFT_CHR
) //!SHIFT
: //+NUM-CTRL-CODE-KANA-ROMA
(capsOff
? //+NUM-CTRL-CODE-KANA-ROMA-CAPS
(shiftOff
? //+NUM-CTRL-CODE-KANA-ROMA-CAPS-SHIFT
KBD_NUM_CHR
: //+NUM-CTRL-CODE-KANA-ROMA-CAPS+SHIFT
KBD_NUM_SHIFT_CHR
) //!SHIFT
: //+NUM-CTRL-CODE-KANA-ROMA+CAPS
(shiftOff
? //+NUM-CTRL-CODE-KANA-ROMA+CAPS-SHIFT
KBD_NUM_CAPS_CHR
: //+NUM-CTRL-CODE-KANA-ROMA+CAPS+SHIFT
KBD_NUM_CAPS_SHIFT_CHR
) //!SHIFT
) //!CAPS
) //!OPT.1&&ROMA
) //!OPT.1&&KANA
) //CODE
) //CTRL
); //!NUM
for (int i = 0; i < KBD_ALL_KEYS; i++) {
int chr = 0; //可変キーの文字。固定キーの文字は変化しないので0のままでよい
if (i < KBD_VAR_KEYS) { //可変キー
chr = varChr[i] & 255;
if (0xa6 <= chr && chr <= 0xdd && chr != 0xb0 && //記号を除くカタカナで
zenOn && hiraOn) { //全角とひらがなが両方点灯しているとき
chr ^= 0x20; //ひらがなにする
} else if (chr == 0x5c && (MainMemory.mmrM8[0x00ed0059] & 0b00000001) != 0) {
chr = 0x80;
} else if (chr == 0x7e && (MainMemory.mmrM8[0x00ed0059] & 0b00000010) != 0) {
chr = 0x81;
} else if (chr == 0x7c && (MainMemory.mmrM8[0x00ed0059] & 0b00000100) != 0) {
chr = 0x82;
}
}
int stat = kbdStat[i] & (KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK);
int characterStat = chr << 8 | stat;
if (indexCharacterStat[i] != characterStat) { //最後に描画した状態から変化した
indexCharacterStat[i] = characterStat;
int[] rect = indexRect[i];
if (i < KBD_VAR_KEYS) { //可変キー
int[] bitmap = kbdVarStatBitmap[chr][stat];
int p = rect[0] + width * rect[1];
int w = rect[2];
int h = rect[3];
int q = 0;
for (int dy = 0; dy < h; dy++) {
for (int dx = 0; dx < w; dx++) {
kbdBitmap[p++] = bitmap[q++];
}
p += width - w;
}
} else if (i < KBD_VAR_KEYS + KBD_LED_KEYS) { //LEDキー
int[] bitmap = kbdLedStatBitmap[i - KBD_VAR_KEYS][stat];
if (rect.length >= 4) { //Standard KeyboardはNUMキーがない
int p = rect[0] + width * rect[1];
int w = rect[2];
int h = rect[3];
int q = 0;
for (int dy = 0; dy < h; dy++) {
for (int dx = 0; dx < w; dx++) {
kbdBitmap[p++] = bitmap[q++];
}
p += width - w;
}
}
} else { //固定キー
int[] bitmap = statFixBitmap[stat];
if (rect.length >= 4) { //Compact Keyboardはテンキーがない
int p = rect[0] + width * rect[1];
int w = rect[2];
int h = rect[3];
for (int dy = 0; dy < h; dy++) {
for (int dx = 0; dx < w; dx++) {
kbdBitmap[p] = bitmap[p];
p++;
}
p += width - w;
}
if (rect.length >= 8) { //RETURNキーとSHIFTキー
p = rect[4] + width * rect[5];
w = rect[6];
h = rect[7];
for (int dy = 0; dy < h; dy++) {
for (int dx = 0; dx < w; dx++) {
kbdBitmap[p] = bitmap[p];
p++;
}
p += width - w;
}
}
}
}
}
}
} //kbdFlush()
//kbdHover (x, y)
// ポイントされているキーを変更する
// 座標はキーボードのローカル座標で範囲内であること
public static void kbdHover (int x, int y) {
boolean flag = false;
int i = kbdIndexMap[x + kbdWidth * y]; //今回ポイントされたキー。-1=キーがポイントされていない
if (kbdPointedIndex != i) { //ポイントされているキーが変わった
if (kbdPointedIndex >= 0) { //前回ポイントされていたキーがあった
int stat = kbdStat[kbdPointedIndex];
kbdStat[kbdPointedIndex] = stat &= ~KBD_POINTED_MASK; //ポイントを外す
if ((stat & KBD_MOUSEDOWN_MASK) != 0) { //マウスで押されていた
kbdStat[kbdPointedIndex] = stat &= ~KBD_MOUSEDOWN_MASK; //マウスを離す
if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) { //ロックされておらずキーもマウスも押されていない
kbdStat[kbdPointedIndex] = stat &= ~KBD_PRESSED_MASK; //離す
kbdRelease (kbdPointedIndex);
}
}
}
kbdPointedIndex = i;
flag = true;
}
if (kbdPointedIndex >= 0) { //ポイントされているキーがある
int stat = kbdStat[kbdPointedIndex];
kbdStat[kbdPointedIndex] = stat |= KBD_POINTED_MASK; //ポイントする。前回もポイントされていた場合もある
if (((stat & KBD_MOUSEDOWN_MASK) != 0) != (Mouse.musButtonLeft || Mouse.musButtonRight)) { //マウスの押し下げ状態が変わった
if (Mouse.musButtonLeft && (kbdPointedIndex == KBD_SHIFT_INDEX || //マウスで押されていなかったSHIFTキーが左ボタンで押された
kbdPointedIndex == KBD_CTRL_INDEX) || //マウスで押されていなかったCTRLキーが左ボタンで押された
Mouse.musButtonRight) { //マウスで押されていなかったキーが右ボタンで押された
stat ^= KBD_LOCKED_MASK; //ロックを反転する
kbdStat[kbdPointedIndex] = stat |= KBD_MOUSEDOWN_MASK; //マウスで押す
if ((stat & KBD_PRESSED_MASK) == 0) { //押されていなかった
kbdStat[kbdPointedIndex] = stat |= KBD_PRESSED_MASK; //押す
kbdPress (kbdPointedIndex);
}
} else if (Mouse.musButtonLeft) { //マウスで押されていなかったキーが左ボタンで押された
stat &= ~KBD_LOCKED_MASK; //ロックを解除する
kbdStat[kbdPointedIndex] = stat |= KBD_MOUSEDOWN_MASK; //マウスで押す
if ((stat & KBD_PRESSED_MASK) == 0) { //押されていなかった
kbdStat[kbdPointedIndex] = stat |= KBD_PRESSED_MASK; //押す
kbdPress (kbdPointedIndex);
}
} else { //マウスで押されていたキーが離された
kbdStat[kbdPointedIndex] = stat &= ~KBD_MOUSEDOWN_MASK; //マウスを離す
if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) { //ロックされておらずキーもマウスも押されていない
kbdStat[kbdPointedIndex] = stat &= ~KBD_PRESSED_MASK; //離す
kbdRelease (kbdPointedIndex);
}
}
flag = true;
}
}
if (flag) {
kbdRepaint ();
}
} //kbdHover(int,int)
//kbdInput (ke, pressed)
// リアルキーボードから入力する
public static void kbdInput (KeyEvent ke, boolean pressed) {
int keyCode = ke.getKeyCode ();
int modifiersEx = ke.getModifiersEx ();
if (pressed) {
if ((modifiersEx & XEiJ.MNB_MODIFIERS) == XEiJ.MNB_MODIFIERS) { //Alt+Shift
switch (keyCode) {
case KeyEvent.VK_C: //Alt+Shift-C
TextCopy.txcCopy ();
return;
case KeyEvent.VK_D: //Alt+Shift-D
XEiJ.mnbDisplayMenu.doClick ();
return;
case KeyEvent.VK_F: //Alt+Shift-F
XEiJ.mnbFileMenu.doClick ();
return;
case KeyEvent.VK_G: //Alt+Shift-G
XEiJ.mnbConfigMenu.doClick ();
return;
case KeyEvent.VK_I: //Alt+Shift-I
XEiJ.mnbInputMenu.doClick ();
return;
case KeyEvent.VK_K: //Alt+Shift-K
if (kbdOn) {
XEiJ.mnbNoKeyboardMenuItem.doClick ();
} else if (kbdType == KBD_COMPACT_TYPE) {
XEiJ.mnbCompactKeyboardMenuItem.doClick ();
} else {
XEiJ.mnbStandardKeyboardMenuItem.doClick ();
}
return;
case KeyEvent.VK_L: //Alt+Shift-L
XEiJ.mnbLanguageMenu.doClick ();
return;
case KeyEvent.VK_M: //Alt+Shift-M
XEiJ.mpuMenu.doClick ();
return;
case KeyEvent.VK_O: //Alt+Shift-O
XEiJ.mpuOpt1ResetMenuItem.doClick ();
return;
case KeyEvent.VK_P: //Alt+Shift-P
if (XEiJ.mnbPlayMenuItem.isEnabled ()) {
XEiJ.mnbPlayMenuItem.doClick ();
}
return;
case KeyEvent.VK_Q: //Alt+Shift-Q
if (XEiJ.mnbQuitMenuItem.isEnabled ()) {
XEiJ.mnbQuitMenuItem.doClick ();
}
return;
case KeyEvent.VK_R: //Alt+Shift-R
XEiJ.mpuResetMenuItem.doClick ();
return;
case KeyEvent.VK_S: //Alt+Shift-S
if (XEiJ.mnbSoundMenu.isEnabled ()) {
XEiJ.mnbSoundMenu.doClick ();
}
return;
case KeyEvent.VK_T: //Alt+Shift-T
if (XEiJ.PNL_STEREOSCOPIC_ON) {
XEiJ.mnbStereoscopicMenuItem.doClick ();
}
return;
case KeyEvent.VK_V: //Alt+Shift-V
if (XEiJ.mnbPasteMenuItem.isEnabled ()) {
XEiJ.mnbPasteMenuItem.doClick ();
}
return;
case KeyEvent.VK_W: //Alt+Shift-W
if (XEiJ.mnbFitInWindowMenuItem.isEnabled ()) { //ウインドウに合わせられるとき
XEiJ.mnbFitInWindowMenuItem.doClick ();
}
return;
case KeyEvent.VK_X: //Alt+Shift-X
XEiJ.mnbFixedScaleMenuItem.doClick ();
return;
}
} //if Alt+Shift
} //if pressed
if (PPI.ppiInput (ke, pressed)) { //JOYKEY
return;
}
if (keyCode == KeyEvent.VK_F11) { //F11
if (ButtonFunction.bfnExecute (ButtonFunction.Button.F11, modifiersEx, pressed, null)) {
return;
}
} else if (keyCode == KeyEvent.VK_F12) { //F12
if (ButtonFunction.bfnExecute (ButtonFunction.Button.F12, modifiersEx, pressed, null)) {
return;
}
}
{
//int keyCode = ke.getKeyLocation ();
int keyLocation = ke.getKeyLocation ();
int extendedOrRaw = XEiJ.prgIsMac ? ke.getExtendedKeyCode () : kbdGetRawCode (ke);
int intCode = keyCode << 16 | extendedOrRaw << 4 | keyLocation;
if ((keyCode & (XEiJ.prgIsMac ? 0x00000fff : 0x0000ffff)) != keyCode ||
(extendedOrRaw & (XEiJ.prgIsMac ? 0x0f000fff : 0x00000fff)) != extendedOrRaw ||
(keyLocation & 0x0000000f) != keyLocation ||
intCode == 0) { //範囲外
System.out.printf ("KeyEvent: keyCode=0x%08x, extendedOrRaw=0x%08x, keyLocation=0x%08x\n",
keyCode, extendedOrRaw, keyLocation);
} else {
if (Mouse.musOutputButtonStatus) {
System.out.printf ("intCode=0x%08x, pressed=%b\n", intCode, pressed);
}
// macOSでextendedKeyCodeが0かつどのキーともマッチしなかったとき、
// extendedKeyCodeの代わりにkeyCodeを用いて再検索する
// 参考
// https://gist.github.com/iwadon/b861e398e53f05fc4a63f710f9145ee7
for (int cand = XEiJ.prgIsMac && extendedOrRaw == 0 ? 2 : 1; cand != 0; cand--) {
for (int xo = 0; xo < KBD_ALL_KEYS; xo++) {
if (kbdCurrentMap[3 * xo] == intCode || //1個目にある
kbdCurrentMap[3 * xo + 1] == intCode || //2個目にある
kbdCurrentMap[3 * xo + 2] == intCode) { //3個目にある
int eo = KBD_XO_TO_EO[xo];
int stat = kbdStat[eo];
//押す
if (pressed) { //キーが押された
if ((stat & KBD_KEYDOWN_MASK) == 0) { //キーで押されていなかった
kbdStat[eo] = stat |= KBD_KEYDOWN_MASK; //キーで押す
if ((stat & KBD_PRESSED_MASK) == 0) { //押されていなかった
kbdStat[eo] = stat |= KBD_PRESSED_MASK; //押す
kbdPress (eo);
kbdRepaint ();
}
}
} else { //キーが離された
if ((stat & KBD_KEYDOWN_MASK) != 0) { //キーで押されていた
kbdStat[eo] = stat &= ~KBD_KEYDOWN_MASK; //キーを離す
if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) { //ロックされておらずキーもマウスも押されていない
kbdStat[eo] = stat &= ~KBD_PRESSED_MASK; //離す
kbdRelease (eo);
kbdRepaint ();
}
}
}
return;
} //if マッチした
} //for xo
intCode = keyCode << 16 | keyCode << 4 | keyLocation;
} //for cand
} //if
}
} //kbdInput(KeyEvent,boolean)
public static void kbdCommandPress (int x68kCode) {
if ((0x01 <= x68kCode && x68kCode <= 0x6c) ||
(0x70 <= x68kCode && x68kCode <= 0x74)) {
int eo = KBD_XO_TO_EO[x68kCode < 0x70 ? x68kCode - 1 : x68kCode - 4];
int stat = kbdStat[eo];
if ((stat & KBD_PRESSED_MASK) == 0) { //押されていなかった
kbdStat[eo] = stat |= KBD_PRESSED_MASK; //押す
kbdPress (eo);
kbdRepaint ();
}
}
}
public static void kbdCommandRelease (int x68kCode) {
if ((0x01 <= x68kCode && x68kCode <= 0x6c) ||
(0x70 <= x68kCode && x68kCode <= 0x74)) {
int eo = KBD_XO_TO_EO[x68kCode < 0x70 ? x68kCode - 1 : x68kCode - 4];
int stat = kbdStat[eo];
if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) { //ロックされておらずキーもマウスも押されていない
kbdStat[eo] = stat &= ~KBD_PRESSED_MASK; //離す
kbdRelease (eo);
kbdRepaint ();
}
}
}
//rawCode = kbdGetRawCode (ke)
// KeyEventからrawCodeを取り出す
public static int kbdGetRawCode (KeyEvent ke) {
int rawCode = 0;
//KeyEvent.paramString()で出力される文字列の中からrawCode=~を取り出す
String s = ke.paramString ();
int i = s.indexOf ("rawCode=");
if (0 <= i) {
i += 8;
for (int k = s.length (); i < k; i++) {
char c = s.charAt (i);
if (c < '0' || '9' < c) {
break;
}
rawCode = rawCode * 10 + (c - '0');
}
}
return rawCode;
}
//kbdRePress()
// 押されているキーを再入力する
// リセット後キー入力割り込みが許可されたら直ちに押されているキーを入力しないとOPT.2キーをロックしていてもROMデバッガが起動しない
public static void kbdRePress () {
for (int i = 0; i < KBD_ALL_KEYS; i++) {
if (i != KBD_NUM_INDEX && //NUMキーは除く
(kbdStat[i] & KBD_PRESSED_MASK) != 0) { //押されている
//キーコードを求める
int code = ((kbdStat[KBD_NUM_INDEX] & KBD_LIGHTED_MASK) != 0 ? KBD_NUM_CODE : KBD_NORMAL_CODE)[i] & 0x7f;
//MFPに転送する
if (MC68901.MFP_KBD_ON) {
MC68901.mfpKbdInput (code, true);
} else {
kbdTransfer (code, true);
}
}
}
} //kbdRePress()
//kbdPress (i)
// 番号iのキーが押された
public static void kbdPress (int i) {
//キーコードを求める
int code = ((kbdStat[KBD_NUM_INDEX] & KBD_LIGHTED_MASK) != 0 ? KBD_NUM_CODE : KBD_NORMAL_CODE)[i] & 0x7f;
//NUMキーが押されたらLEDを反転する
if (KBD_DEBUG_LED ? KBD_KANA_INDEX <= i && i <= KBD_NUM_INDEX : i == KBD_NUM_INDEX) {
int stat = kbdStat[i];
if ((stat & KBD_LIGHTED_MASK) != 0) { //点灯→消灯
stat &= ~(KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK);
} else { //消灯→点灯
stat |= kbdLedBrightness << KBD_BRIGHTNESS_BIT | KBD_LIGHTED_MASK;
}
kbdStat[i] = stat;
kbdRepaint ();
}
//MFPに転送する
if (MC68901.MFP_KBD_ON) {
MC68901.mfpKbdInput (code, true);
} else {
kbdTransfer (code, true);
}
} //kbdPress(int)
//kbdRelease (i)
// 番号iのキーが離された
public static void kbdRelease (int i) {
//キーコードを求める
int code = ((kbdStat[KBD_NUM_INDEX] & KBD_LIGHTED_MASK) != 0 ? KBD_NUM_CODE : KBD_NORMAL_CODE)[i] & 0x7f | 0x80;
//MFPに転送する
if (MC68901.MFP_KBD_ON) {
MC68901.mfpKbdInput (code, false);
} else {
kbdTransfer (code, false);
}
} //kbdRelease(int)
//kbdTransfer (code, repeat)
// キーコードをMFPに転送する
// 割り込み要求が競合しないようにコアのスレッドで行う
public static void kbdTransfer (int code, boolean repeat) {
if (KBD_GUIDE_ON) {
if (kbdGuideThread != null) {
kbdGuideThread.interrupt ();
kbdGuideThread = null;
}
XEiJ.tmrTimer.schedule (new GuideTask (code), kbdGuideDate);
if (repeat) {
kbdGuideThread = new GuideThread (code);
kbdGuideThread.start ();
}
} else {
XEiJ.tmrTimer.schedule (new KBDTask (code, repeat), 0L);
}
} //kbdTransfer(int)
//kbdSetRepeatDelay (n)
// リピートディレイ
// 200+100*n(ms)
public static void kbdSetRepeatDelay (int n) {
n &= 15;
kbdRepeatDelay = 200 + 100 * n;
} //kbdSetRepeatDelay(int)
//kbdSetRepeatInterval (n)
// リピートインターバル
// 30+5*n^2(ms)
public static void kbdSetRepeatInterval (int n) {
n &= 15;
kbdRepeatInterval = 30 + 5 * n * n;
} //kbdSetRepeatInterval(int)
//kbdSetLedStatus (n)
// LEDキーのLEDの状態をまとめて設定する。各ビット0=点灯,1=消灯
// bit0 かな
// bit1 ローマ字
// bit2 コード入力
// bit3 CAPS
// bit4 INS
// bit5 ひらがな
// bit6 全角
public static void kbdSetLedStatus (int n) {
boolean flag = false;
n = ~n & 127;
if (KBD_ZKEY_ON) {
if (kbdZKeyStatus != n) {
kbdZKeyStatus = n;
kbdZKeyUpdate ();
}
}
for (int i = KBD_KANA_INDEX; i <= KBD_ZEN_INDEX; i++) {
int mask = (n & 1) << KBD_LIGHTED_BIT;
int stat = kbdStat[i];
if ((stat & KBD_LIGHTED_MASK) != mask) {
if (mask == 0) { //点灯→消灯
stat &= ~(KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK);
} else { //消灯→点灯
stat |= kbdLedBrightness << KBD_BRIGHTNESS_BIT | KBD_LIGHTED_MASK;
}
kbdStat[i] = stat;
flag = true;
}
n >>= 1;
}
if (flag) {
kbdRepaint ();
}
} //kbdSetLedStatus(int)
//kbdSetLedBrightness (n)
// LEDキーのLEDの明るさを設定する
// n 0 明るい
// 1 やや明るい
// 2 やや暗い
// 3 暗い
public static void kbdSetLedBrightness (int n) {
n &= 3;
if (kbdLedBrightness != n) {
kbdLedBrightness = n;
boolean flag = false;
for (int i = KBD_KANA_INDEX; i <= KBD_ZEN_INDEX; i++) {
int stat = kbdStat[i];
if ((stat & KBD_LIGHTED_MASK) != 0) { //点灯→点灯
stat &= ~(KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK);
stat |= kbdLedBrightness << KBD_BRIGHTNESS_BIT | KBD_LIGHTED_MASK;
kbdStat[i] = stat;
flag = true;
}
}
if (flag) {
kbdRepaint ();
}
if (KBD_ZKEY_ON) {
kbdZKeyUpdate ();
}
}
}
//kbdZKeyOpen ()
// Zキーボードのポートを開く
public static void kbdZKeyOpen () {
if (KBD_ZKEY_ON) {
if (kbdZKeyPort == null) {
//ポートを開く
try {
kbdZKeyPort = new ZKeyLEDPort (kbdZKeyDebugFlag);
} catch (IOException ioe) {
//ioe.printStackTrace ();
}
//開けなかったら終了
if (kbdZKeyPort == null) {
System.out.printf (Multilingual.mlnJapanese ?
"Z キーボードが接続されていないか制御できません\n" :
"Z Keyboard is not connected or cannot be controlled\n");
kbdZKeyOnRequest = false;
if (kbdZKeyConnectCheckBox != null) {
kbdZKeyConnectCheckBox.setSelected (false);
}
return;
}
//送信スレッドを開始する
senderStart ();
//Zキーボード以外のキーマップを保存する
System.arraycopy (kbdCurrentMap, 0, //from
kbdCurrentMapNonZ, 0, //to
KBD_DEFAULT_MAP_WIN.length); //length
//Zキーボードのキーマップを復元する
System.arraycopy (kbdCurrentMapZ, 0, //from
kbdCurrentMap, 0, //to
KBD_DEFAULT_MAP_WIN.length); //length
//キーマップエディタの表示を更新する
if (kbdEditor != null) {
kbdEditor.updateTextAll ();
}
//NumLockを保存する
kbdSavedNumLock = kbdZKeyPort.isKeyToggled (KeyEvent.VK_NUM_LOCK);
//NumLockを点灯させる
if (!kbdZKeyPort.isKeyToggled (KeyEvent.VK_NUM_LOCK)) { //NumLockが消灯している
kbdIgnoreNumLock = true; //NumLockを1回無視する
kbdZKeyPort.hitKey (KeyEvent.VK_NUM_LOCK); //NumLockを叩いて点灯させる。直ちに発火することに注意
}
}
if (!kbdZKeyOn) {
System.out.printf (Multilingual.mlnJapanese ?
"Z キーボードの制御を開始しました\n" :
"Z keyboard control started\n");
kbdZKeyOn = true;
if (kbdZKeyDemoCheckBox != null) {
kbdZKeyDemoCheckBox.setEnabled (true);
}
}
}
}
//kbdZKeyClose ()
// Zキーボードのポートを閉じる
public static void kbdZKeyClose () {
if (KBD_ZKEY_ON) {
//デモを終了する
demoEnd ();
if (kbdZKeyPort != null) {
//NumLockを復元する
if (kbdSavedNumLock != kbdZKeyPort.isKeyToggled (KeyEvent.VK_NUM_LOCK)) { //保存したNumLockと違う
kbdIgnoreNumLock = true; //NumLockを1回無視する
kbdZKeyPort.hitKey (KeyEvent.VK_NUM_LOCK); //NumLockを叩いて戻す
}
//LEDを消灯する
//senderSend (0L);
//送信スレッドを終了する
senderEnd ();
//LEDを消灯する
// senderSendしてすぐsenderEndすると消灯する前に送信スレッドが終了してしまう
kbdZKeyPort.send (0L);
//ポートを閉じる
kbdZKeyPort.close ();
kbdZKeyPort = null;
//Zキーボードのキーマップを保存する
System.arraycopy (kbdCurrentMap, 0, //from
kbdCurrentMapZ, 0, //to
KBD_DEFAULT_MAP_WIN.length); //length
//Zキーボード以外のキーマップを復元する
System.arraycopy (kbdCurrentMapNonZ, 0, //from
kbdCurrentMap, 0, //to
KBD_DEFAULT_MAP_WIN.length); //length
//キーマップエディタの表示を更新する
if (kbdEditor != null) {
kbdEditor.updateTextAll ();
}
}
if (kbdZKeyOn) {
System.out.printf (Multilingual.mlnJapanese ?
"Z キーボードの制御を終了しました\n" :
"Z keyboard control ended\n");
kbdZKeyOn = false;
if (kbdZKeyDemoCheckBox != null) {
kbdZKeyDemoCheckBox.setEnabled (false);
}
}
}
}
//kbdZKeyUpdate ()
// ZキーボードのLEDを更新する
public static void kbdZKeyUpdate () {
if (KBD_ZKEY_ON && kbdZKeyPort != null && //Zキーボード
!kbdZKeyIOProgrammable && //ノーマルモード
demoThread == null) { //デモ中ではない
long data = 0L;
for (int i = 0; i < 7; i++) {
if ((kbdZKeyStatus & (1 << i)) != 0) {
data |= 1L << (8 * i);
}
}
data *= (kbdLedBrightness == 0 ? 255 :
kbdLedBrightness == 1 ? 128 :
kbdLedBrightness == 2 ? 64 : 32);
senderSend (data);
}
}
//kbdZKeyIOReadByte (a)
// I/Oポートリードバイト
public static int kbdZKeyIOReadByte (int a) {
a &= 15;
if (a < 8) {
return (int) (kbdZKeyIOData >>> (a << 3)) & 0xff;
} else if (a == 8) {
return kbdZKeyIOProgrammable ? 1 : 0;
} else {
return 0xff;
}
}
//kbdZKeyIOReadWord (a)
// I/Oポートリードワード
public static int kbdZKeyIOReadWord (int a) {
a &= 15;
if (a < 8) {
return (int) (kbdZKeyIOData >>> (a << 3)) & 0xffff;
} else {
return (kbdZKeyIOReadByte (a) << 8 |
kbdZKeyIOReadByte (a + 1));
}
}
//kbdZKeyIOReadLong (a)
// I/Oポートリードロング
public static int kbdZKeyIOReadLong (int a) {
a &= 15;
if (a < 8) {
return (int) (kbdZKeyIOData >>> (a << 3));
} else {
return (kbdZKeyIOReadByte (a) << 24 |
kbdZKeyIOReadByte (a + 1) << 16 |
kbdZKeyIOReadByte (a + 2) << 8 |
kbdZKeyIOReadByte (a + 3));
}
}
//kbdZKeyIOWriteByte (a, d)
// I/Oポートライトバイト
public static void kbdZKeyIOWriteByte (int a, int d) {
a &= 15;
if (a < 8) {
int bit = a << 3;
kbdZKeyIOData = (kbdZKeyIOData & ~(0xffL << bit)) | (long) (d & 0xff) << bit;
} else if (a == 8) {
boolean programmable = (d & 1) != 0; //ノーマルモードまたはプログラマブルモード
if (kbdZKeyIOProgrammable != programmable) {
kbdZKeyIOProgrammable = programmable;
if (kbdZKeyIOProgrammable) { //ノーマルモード→プログラマブルモード
} else { //プログラマブルモード→ノーマルモード
kbdZKeyUpdate ();
}
}
if (kbdZKeyIOProgrammable && //プログラマブルモード
(d & 2) != 0 && //送信
kbdZKeyPort != null && //ポートが開いている
demoThread == null) { //デモ中ではない
long data = kbdZKeyIOData & 0x00ffffffffffffffL;
senderSend (data);
}
}
}
//kbdZKeyIOWriteWord (a, d)
// I/Oポートライトワード
public static void kbdZKeyIOWriteWord (int a, int d) {
a &= 15;
if (a < 8) {
int bit = a << 3;
kbdZKeyIOData = (kbdZKeyIOData & ~(0xffffL << bit)) | (long) (d & 0xffff) << bit;
} else {
kbdZKeyIOWriteByte (a, d >> 8);
kbdZKeyIOWriteByte (a + 1, d);
}
}
//kbdZKeyIOWriteLong (a, d)
// I/Oポートライトロング
public static void kbdZKeyIOWriteLong (int a, int d) {
a &= 15;
if (a < 8) {
int bit = a << 3;
kbdZKeyIOData = (kbdZKeyIOData & ~(0xffffffffL << bit)) | ((long) d & 0xffffffffL) << bit;
} else {
kbdZKeyIOWriteByte (a, d >> 24);
kbdZKeyIOWriteByte (a + 1, d >> 16);
kbdZKeyIOWriteByte (a + 2, d >> 8);
kbdZKeyIOWriteByte (a + 3, d);
}
}
//kbdDoCapture ()
// キャプチャ実行
// カレントディレクトリのcaptureというサブディレクトリの中に1.png,2.png,...を作るだけ
public static void kbdDoCapture () {
try {
File dir = new File ("capture");
if (dir.exists ()) { //captureがある
if (!dir.isDirectory ()) { //captureがあるがディレクトリでない
return;
}
} else { //captureがない
if (!dir.mkdir ()) { //captureがなくてディレクトリが作れない
return;
}
}
HashSet<String> nameSet = new HashSet<String> ();
for (String name : dir.list ()) {
nameSet.add (name);
}
int number = 0;
for (String key : Settings.SGS_FRAME_KEYS) {
BufferedImage image = RestorableFrame.rfmCapture (key);
if (image != null) { //ウインドウが開いていてキャプチャできた
String name;
do {
number++;
name = number + ".png";
} while (!nameSet.add (name)); //セットに追加できるまで繰り返す
name = "capture/" + name;
if (XEiJ.saveImage (image, name)) { //成功
System.out.println (Multilingual.mlnJapanese ? name + " を更新しました" : name + " was updated");
}
}
}
} catch (Exception e) {
}
} //kbdDoCapture()
//$$KBT キー入力タスク
public static class KBDTask extends TimerTask {
public int code;
public boolean repeat;
public KBDTask (int c, boolean r) {
code = c;
repeat = r;
} //KBDTask(int,boolean)
@Override public void run () {
if (kbdRepeatTask != null) {
//リピートを終了する
// 開始と終了は同じスレッドで行わなければならない
kbdRepeatTask.cancel ();
kbdRepeatTask = null;
}
//MFPに転送する
MC68901.mfpKeyboardInput (code);
if (repeat) {
//リピートを開始する
XEiJ.tmrTimer.schedule (kbdRepeatTask = new KBDRepeatTask (code), (long) kbdRepeatDelay, (long) kbdRepeatInterval);
}
} //run()
} //class KBDTask
//$$KBR キーリピートタスク
public static class KBDRepeatTask extends TimerTask {
public int code;
public KBDRepeatTask (int c) {
code = c;
} //KBDRepeatTask(int)
@Override public void run () {
//MFPに転送する
MC68901.mfpKeyboardInput (code);
} //run()
} //class KBDRepeatTask
public static final boolean KBD_GUIDE_ON = true; //キー入力にガイドスレッドを使う
public static Thread kbdGuideThread;
public static final Date kbdGuideDate = new Date (0L);
static class GuideThread extends Thread {
int code;
public GuideThread (int code) {
this.code = code;
}
@Override public void run () {
long time = kbdRepeatDelay;
while (!Thread.interrupted ()) {
try {
Thread.sleep (time);
time = kbdRepeatInterval;
} catch (InterruptedException ie) {
break;
}
XEiJ.tmrTimer.schedule (new GuideTask (code), kbdGuideDate);
}
}
}
static class GuideTask extends TimerTask {
int code;
public GuideTask (int code) {
this.code = code;
}
@Override public void run () {
MC68901.mfpKeyboardInput (code); //MFPに転送する
}
}
//ZキーボードLEDデモ
static final long DEMO_INTERVAL = 40L; //動作間隔(ms)
static final int DEMO_LEVEL = 60; //明るさの数
static final int DEMO_BRIGHTEN = 3; //明るくなる速さ
static final int DEMO_DIM = -1; //暗くなる速さ
static final int DEMO_PROPAGATION = 10; //明るくなり始めるのが伝わる速さ
static final int DEMO_LED = 7; //LEDの数
static final int DEMO_INVISIBLE = 3; //折り返す前後にある見えないLEDの数
static long[] demoMap; //明るさ→輝度
static int[] demoBrightness; //LED→明るさ
static int[] demoDelta; //LED→明るさの変化
static int demoCounter; //カウンタ
static Thread demoThread; //スレッド
//初期化
static void demoInit () {
demoMap = new long[DEMO_LEVEL];
for (int i = 0; i < DEMO_LEVEL; i++) {
demoMap[i] = (long) (i * i * 255 / ((DEMO_LEVEL - 1) * (DEMO_LEVEL - 1)));
}
demoBrightness = new int[DEMO_LED];
demoDelta = new int[DEMO_LED];
demoThread = null;
}
//開始
static void demoStart () {
if (demoThread == null) {
Arrays.fill (demoBrightness, 0);
Arrays.fill (demoDelta, 0);
demoCounter = 0;
//スレッドを開始する
demoThread = new DemoThread ();
demoThread.start ();
}
}
//終了
static void demoEnd () {
if (demoThread != null) {
//スレッドに割り込む
demoThread.interrupt ();
//スレッドが終了するまで待つ
try {
demoThread.join (100L);
} catch (InterruptedException ie) {
}
demoThread = null;
}
//LEDを復元する
kbdZKeyUpdate ();
}
//デモスレッド
static class DemoThread extends Thread {
@Override public void run () {
//割り込まれるまで繰り返す
for (;;) {
//データを作る
long data = 0L;
for (int i = 0; i < DEMO_LED; i++) {
data |= demoMap[demoBrightness[i]] << (i << 3);
}
//送信する
senderSend (data);
//明るさを変化させる
for (int i = 0; i < DEMO_LED; i++) { //LED毎に
demoBrightness[i] += demoDelta[i]; //明るさを変化させる
if (0 < demoDelta[i]) { //明るくした
if (DEMO_LEVEL - 1 <= demoBrightness[i]) { //最大になった
demoBrightness[i] = DEMO_LEVEL - 1; //最大から
demoDelta[i] = DEMO_DIM; //暗くなり始める
}
} else if (demoDelta[i] < 0) { //暗くした
if (demoBrightness[i] <= 0) { //最小になった
demoBrightness[i] = 0; //最小で
demoDelta[i] = 0; //止まる
}
}
}
//明るくなり始める
if (demoCounter % DEMO_PROPAGATION == 0) {
int k = demoCounter / DEMO_PROPAGATION;
if (DEMO_INVISIBLE * 2 + DEMO_LED <= k) { //後半
k = (DEMO_INVISIBLE * 2 + DEMO_LED) * 2 - 1 - k; //折り返す
}
if (DEMO_INVISIBLE <= k && k < DEMO_INVISIBLE + DEMO_LED) {
demoDelta[k - DEMO_INVISIBLE] = DEMO_BRIGHTEN; //明るくなり始める
}
}
//カウンタを進める
demoCounter++;
if (demoCounter == DEMO_PROPAGATION * (DEMO_INVISIBLE * 2 + DEMO_LED) * 2) {
demoCounter = 0;
}
//間隔を空ける
try {
Thread.sleep (DEMO_INTERVAL);
} catch (InterruptedException ie) {
break;
}
}
}
}
//ZキーボードLEDデータ送信
// 送信の間隔を保つ
static final long SENDER_INTERVAL = 10L; //送信の間隔(ms)
static long senderLastData; //最後に送信しようとしたデータ
static long senderSentData; //最後に送信したデータ
static ArrayBlockingQueue<Long> senderQueue; //送信するデータのキュー
static Thread senderThread; //スレッド
//開始
static void senderStart () {
if (senderThread == null) {
if (senderQueue == null) {
senderLastData = -1L;
senderSentData = -1L;
//キューを作る
senderQueue = new ArrayBlockingQueue<Long> (10);
}
//スレッドを開始する
senderThread = new SenderThread ();
senderThread.start ();
}
}
//終了
static void senderEnd () {
if (senderThread != null) {
//スレッドに割り込む
senderThread.interrupt ();
//スレッドが終了するまで待つ
try {
senderThread.join (100L);
} catch (InterruptedException ie) {
}
senderThread = null;
}
}
//送信
static void senderSend (long data) {
if (senderLastData != data) {
senderLastData = data;
//キューに古いデータが残っていたら消す
senderQueue.clear ();
//キューに新しいデータを入れる
senderQueue.offer (data);
}
}
//送信スレッド
static class SenderThread extends Thread {
@Override public void run () {
//割り込まれるまで繰り返す
for (;;) {
long data;
//キューからデータを取り出す。取り出せるまでブロックする
try {
data = senderQueue.take ();
} catch (InterruptedException ie) {
break;
}
//送信する
if (senderSentData != data) {
senderSentData = data;
kbdZKeyPort.send (data);
}
//間隔を空ける
try {
Thread.sleep (SENDER_INTERVAL);
} catch (InterruptedException ie) {
break;
}
}
}
}
} //class Keyboard