OSDN Git Service

[VM] Merge Upstream 2018-02-23.
[csp-qt/common_source_project-fm7.git] / source / src / vm / fm16beta / keyboard.cpp
1 /*
2         FUJITSU FM16beta Emulator 'eFM16beta'
3
4         Author : Takeda.Toshiya
5         Date   : 2018.01.01 -
6
7         [ keyboard ]
8 */
9
10 #include "keyboard.h"
11 #include "main.h"
12 #include "../../fifo.h"
13
14
15 void KEYBOARD::initialize()
16 {
17         key_buf = new FIFO(64);
18         register_frame_event(this);
19 }
20
21 void KEYBOARD::release()
22 {
23         key_buf->release();
24         delete key_buf;
25 }
26
27 void KEYBOARD::reset()
28 {
29         memset(table, 0, sizeof(table));
30         key_buf->clear();
31         kbstat = kbdata = 0;
32 }
33
34 uint32_t KEYBOARD::read_io8(uint32_t addr)
35 {
36         if(addr & 1) {
37                 d_main->write_signal(SIG_MAIN_IRQ1, 0, 0);
38                 kbstat &= ~1;
39                 return kbdata & 0xff;
40         } else {
41                 return kbdata >> 8;
42         }
43 }
44
45 void KEYBOARD::event_frame()
46 {
47         if(!(kbstat & 1) && !key_buf->empty()) {
48                 d_main->write_signal(SIG_MAIN_IRQ1, 1, 1);
49                 kbstat |= 1;
50                 kbdata = key_buf->read();
51         }
52 }
53
54 void KEYBOARD::key_down(int code)
55 {
56 //      if(!table[code]) {
57                 table[code] = 1;
58                 if(code = key_table[code]) {
59 //code=0x20;
60                         key_buf->write(code);
61                 }
62 //      }
63 }
64
65 void KEYBOARD::key_up(int code)
66 {
67 //      if(table[code]) {
68                 table[code] = 0;
69                 if(code = key_table[code]) {
70 //code=0x20;
71                         key_buf->write(code| 0x80);
72                 }
73 //      }
74 }
75
76 #define STATE_VERSION   1
77
78 void KEYBOARD::save_state(FILEIO* state_fio)
79 {
80         state_fio->FputUint32(STATE_VERSION);
81         state_fio->FputInt32(this_device_id);
82         
83         key_buf->save_state((void *)state_fio);
84         state_fio->FputInt32(kbstat);
85         state_fio->FputInt32(kbdata);
86         state_fio->Fwrite(table, sizeof(table), 1);
87 }
88
89 bool KEYBOARD::load_state(FILEIO* state_fio)
90 {
91         if(state_fio->FgetUint32() != STATE_VERSION) {
92                 return false;
93         }
94         if(state_fio->FgetInt32() != this_device_id) {
95                 return false;
96         }
97         if(!key_buf->load_state((void *)state_fio)) {
98                 return false;
99         }
100         kbstat = state_fio->FgetInt32();
101         kbdata = state_fio->FgetInt32();
102         state_fio->Fread(table, sizeof(table), 1);
103         return true;
104 }
105
106 static const int key_code[] = {
107 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x008,  0x009,  -1,     -1,     -1,     0x00D,  -1,     -1,
108 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x10B,  -1,     0x01B,  0x10D,  0x10E,  -1,     -1,
109 0x020,  0x112,  0x113,  0x111,  0x115,  0x118,  0x116,  0x119,  0x117,  -1,     -1,     -1,     -1,     0x110,  0x114,  -1,
110 0x030,  0x031,  0x032,  0x033,  0x034,  0x035,  0x036,  0x037,  0x038,  0x039,  -1,     -1,     -1,     -1,     -1,     -1,
111 -1,     0x061,  0x062,  0x063,  0x064,  0x065,  0x066,  0x067,  0x068,  0x069,  0x06A,  0x06B,  0x06C,  0x06D,  0x06E,  0x06F,
112 0x070,  0x071,  0x072,  0x073,  0x074,  0x075,  0x076,  0x077,  0x078,  0x079,  0x07A,  -1,     -1,     -1,     -1,     -1,
113 0x030,  0x031,  0x032,  0x033,  0x034,  0x035,  0x036,  0x037,  0x038,  0x039,  0x02A,  0x02B,  0x02C,  0x02D,  0x02E,  0x02F,
114 0x101,  0x102,  0x103,  0x104,  0x105,  0x106,  0x107,  0x108,  0x109,  0x10A,  0x10B,  0x10C,  -1,     -1,     -1,     -1,
115 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
116 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
117 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
118 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x03A,  0x03B,  0x02C,  0x02D,  0x02E,  0x02F,
119 0x040,  -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
120 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x05B,  0x05C,  0x05D,  0x05E,  -1,
121 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
122 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
123 };
124 static const int key_code_shift[] = {
125 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x008,  0x009,  -1,     -1,     -1,     0x00D,  -1,     -1,
126 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x12B,  -1,     0x01B,  0x12D,  0x12E,  -1,     -1,
127 0x020,  0x132,  0x133,  0x131,  0x135,  0x138,  0x136,  0x139,  0x137,  -1,     -1,     -1,     -1,     0x130,  0x134,  -1,
128 -1,     0x021,  0x022,  0x023,  0x024,  0x025,  0x026,  0x027,  0x028,  0x029,  -1,     -1,     -1,     -1,     -1,     -1,
129 -1,     0x041,  0x042,  0x043,  0x044,  0x045,  0x046,  0x047,  0x048,  0x049,  0x04A,  0x04B,  0x04C,  0x04D,  0x04E,  0x04F,
130 0x050,  0x051,  0x052,  0x053,  0x054,  0x055,  0x056,  0x057,  0x058,  0x059,  0x05A,  -1,     -1,     -1,     -1,     -1,
131 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
132 0x121,  0x122,  0x123,  0x124,  0x125,  0x126,  0x127,  0x128,  0x129,  0x12A,  0x12B,  0x12C,  -1,     -1,     -1,     -1,
133 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
134 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
135 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
136 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x02B,  0x02A,  0x03C,  0x03D,  0x03E,  0x03F,
137 0x060,  -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
138 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x07B,  0x07C,  0x07D,  0x07E,  -1,
139 -1,     -1,     0x05F,  -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
140 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
141 };
142 static const int key_code_kana[] = {
143 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x008,  0x009,  -1,     -1,     -1,     0x00D,  -1,     -1,
144 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x10B,  -1,     0x01B,  0x10D,  0x10E,  -1,     -1,
145 0x020,  0x112,  0x113,  0x111,  0x115,  0x118,  0x116,  0x119,  0x117,  -1,     -1,     -1,     -1,     0x110,  0x114,  -1,
146 0x0DC,  0x0C7,  0x0CC,  0x0B1,  0x0B3,  0x0B4,  0x0B5,  0x0D4,  0x0D5,  0x0D6,  -1,     -1,     -1,     -1,     -1,     -1,
147 -1,     0x0C1,  0x0BA,  0x0BF,  0x0BC,  0x0B2,  0x0CA,  0x0B7,  0x0B8,  0x0C6,  0x0C9,  0x0C9,  0x0D8,  0x0D3,  0x0D0,  0x0D7,
148 0x0BE,  0x0C0,  0x0BD,  0x0C4,  0x0B6,  0x0C5,  0x0CB,  0x0C3,  0x0BB,  0x0DD,  0x0C2,  -1,     -1,     -1,     -1,     -1,
149 0x030,  0x031,  0x032,  0x033,  0x034,  0x035,  0x036,  0x037,  0x038,  0x039,  0x02A,  0x02B,  0x02C,  0x02D,  0x02E,  0x02F,
150 0x101,  0x102,  0x103,  0x104,  0x105,  0x106,  0x107,  0x108,  0x109,  0x10A,  0x10B,  0x10C,  -1,     -1,     -1,     -1,
151 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
152 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
153 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
154 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x0B9,  0x0DA,  0x0C8,  0x0CE,  0x0D9,  0x0D2,
155 0x0DE,  -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
156 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x0DF,  0x0B0,  0x0D1,  0x0CD,  -1,
157 -1,     -1,     0x0DB,  -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
158 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
159 };
160 static const int key_code_kana_shift[] = {
161 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x008,  0x009,  -1,     -1,     -1,     0x00D,  -1,     -1,
162 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x12B,  -1,     0x01B,  0x12D,  0x12E,  -1,     -1,
163 0x020,  0x132,  0x133,  0x131,  0x135,  0x138,  0x136,  0x139,  0x137,  -1,     -1,     -1,     -1,     0x130,  0x134,  -1,
164 0x0A6,  -1,     -1,     0x0A7,  0x0A9,  0x0AA,  0x0AB,  0x0AC,  0x0AD,  0x0AE,  -1,     -1,     -1,     -1,     -1,     -1,
165 -1,     -1,     -1,     -1,     -1,     0x0A8,  -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
166 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x0AF,  -1,     -1,     -1,     -1,     -1,
167 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
168 0x121,  0x122,  0x123,  0x124,  0x125,  0x126,  0x127,  0x128,  0x129,  0x12A,  0x12B,  0x12C,  -1,     -1,     -1,     -1,
169 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
170 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
171 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
172 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x0A4,  -1,     0x0A1,  0x0A5,
173 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
174 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x0A2,  -1,     0x0A3,  -1,     -1,
175 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
176 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
177 };
178 static const int key_code_graph[] = {
179 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x008,  0x009,  -1,     -1,     -1,     0x00D,  -1,     -1,
180 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x10B,  -1,     0x01B,  0x10D,  0x10E,  -1,     -1,
181 0x020,  0x112,  0x113,  0x111,  0x115,  0x118,  0x116,  0x119,  0x117,  -1,     -1,     -1,     -1,     0x110,  0x114,  -1,
182 0x0F7,  0x0F9,  0x0FA,  0x0FB,  0x0FC,  0x0F2,  0x0F3,  0x0F4,  0x0F5,  0x0F6,  -1,     -1,     -1,     -1,     -1,     -1,
183 -1,     0x095,  0x084,  0x082,  0x0E6,  0x0E4,  0x0E7,  0x09E,  0x09F,  0x0E8,  0x0EA,  0x0EB,  0x08E,  0x086,  0x085,  0x0E9,
184 0x08D,  0x0FD,  0x0E5,  0x096,  0x09C,  0x0F0,  0x083,  0x0F8,  0x081,  0x09D,  0x080,  -1,     -1,     -1,     -1,     -1,
185 -1,     0x09A,  0x090,  0x09B,  0x093,  0x080,  0x092,  0x0E1,  0x0E2,  0x0E3,  0x098,  0x099,  -1,     0x0EE,  -1,     0x091,
186 0x101,  0x102,  0x103,  0x104,  0x105,  0x106,  0x107,  0x108,  0x109,  0x10A,  0x10B,  0x10C,  -1,     -1,     -1,     -1,
187 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
188 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
189 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
190 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x094,  0x089,  0x087,  0x08C,  0x088,  0x097,
191 0x08A,  -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
192 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x0ED,  0x0F1,  0x0EC,  0x08B,  -1,
193 -1,     -1,     0x0E0,  -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
194 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
195 };
196 static const int key_code_graph_shift[] = {
197 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x008,  0x009,  -1,     -1,     -1,     0x00D,  -1,     -1,
198 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x12B,  -1,     0x01B,  0x12D,  0x12E,  -1,     -1,
199 0x020,  0x132,  0x133,  0x131,  0x135,  0x138,  0x136,  0x139,  0x137,  -1,     -1,     -1,     -1,     0x130,  0x134,  -1,
200 0x0F7,  0x0F9,  0x0FA,  0x0FB,  0x0FC,  0x0F2,  0x0F3,  0x0F4,  0x0F5,  0x0F6,  -1,     -1,     -1,     -1,     -1,     -1,
201 -1,     0x095,  0x084,  0x082,  0x0E6,  0x0E4,  0x0E7,  0x09E,  0x09F,  0x0E8,  0x0EA,  0x0EB,  0x08E,  0x086,  0x085,  0x0E9,
202 0x08D,  0x0FD,  0x0E5,  0x096,  0x09C,  0x0F0,  0x083,  0x0F8,  0x081,  0x09D,  0x080,  -1,     -1,     -1,     -1,     -1,
203 -1,     0x09A,  0x090,  0x09B,  0x093,  0x080,  0x092,  0x0E1,  0x0E2,  0x0E3,  0x098,  0x099,  -1,     0x0EE,  -1,     0x091,
204 0x101,  0x102,  0x103,  0x104,  0x105,  0x106,  0x107,  0x108,  0x109,  0x10A,  0x10B,  0x10C,  -1,     -1,     -1,     -1,
205 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
206 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
207 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
208 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x094,  0x089,  0x087,  0x08C,  0x088,  0x097,
209 0x08A,  -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
210 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x0ED,  0x0F1,  0x0EC,  0x08B,  -1,
211 -1,     -1,     0x0E0,  -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
212 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
213 };
214 static const int key_code_ctrl[] = {
215 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
216 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x14B,  -1,     -1,     0x14D,  0x14E,  -1,     -1,
217 -1,     0x152,  0x153,  0x151,  0x155,  0x158,  0x156,  0x159,  0x157,  -1,     -1,     -1,     -1,     0x150,  0x154,  -1,
218 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
219 -1,     0x001,  0x002,  0x003,  0x004,  0x005,  0x006,  0x007,  0x008,  0x009,  0x00A,  0x00B,  0x00C,  0x00D,  0x00E,  0x00F,
220 0x010,  0x011,  0x012,  0x013,  0x014,  0x015,  0x016,  0x017,  0x018,  0x109,  0x01A,  -1,     -1,     -1,     -1,     -1,
221 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
222 0x141,  0x142,  0x143,  0x144,  0x145,  0x146,  0x147,  0x148,  0x149,  0x14A,  0x14B,  0x14C,  -1,     -1,     -1,     -1,
223 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
224 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
225 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
226 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
227 0x000,  -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
228 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x01B,  0x01C,  0x01D,  0x01E,  -1,
229 -1,     -1,     0x01F,  -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
230 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
231 };
232 static const int scan_code[] = {
233 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x0F,   0x10,   -1,     -1,     -1,     0x1D,   -1,     -1,
234 0x53,   0x52,   0x56,   -1,     0x55,   0x5A,   -1,     -1,     -1,     0x59,   -1,     0x01,   0x58,   0x57,   -1,     -1,
235 0x35,   0x49,   0x4C,   0x4A,   0x4E,   0x4F,   0x4D,   0x51,   0x50,   -1,     -1,     -1,     -1,     0x48,   0x4B,   -1,
236 0x0B,   0x02,   0x03,   0x04,   0x05,   0x06,   0x07,   0x08,   0x09,   0x0A,   -1,     -1,     -1,     -1,     -1,     -1,
237 -1,     0x1E,   0x2E,   0x2C,   0x20,   0x13,   0x21,   0x22,   0x23,   0x18,   0x24,   0x25,   0x26,   0x30,   0x2F,   0x19,
238 0x1A,   0x11,   0x14,   0x1F,   0x15,   0x17,   0x2D,   0x12,   0x2B,   0x16,   0x2A,   -1,     -1,     -1,     -1,     -1,
239 0x46,   0x42,   0x43,   0x44,   0x3E,   0x3F,   0x40,   0x3A,   0x3B,   0x3C,   0x36,   0x38,   0x41,   0x39,   0x47,   0x37,
240 0x5D,   0x5E,   0x5F,   0x60,   0x61,   0x62,   0x63,   0x64,   0x65,   0x66,   0x59,   0x5B,   -1,     -1,     -1,     -1,
241 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
242 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
243 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
244 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x28,   0x27,   0x31,   0x0C,   0x32,   0x33,
245 0x1B,   -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
246 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     0x1C,   0x0E,   0x29,   0x0D,   -1,
247 -1,     -1,     0x34,   -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
248 -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
249 };