Annotation of nono/vm/lcd.cpp, revision 1.1.1.15

1.1       root        1: //
                      2: // nono
1.1.1.3   root        3: // Copyright (C) 2020 nono project
                      4: // Licensed under nono-license.txt
1.1       root        5: //
                      6: 
1.1.1.4   root        7: //
                      8: // LCD (HD44780)
                      9: //
                     10: 
1.1       root       11: #include "lcd.h"
1.1.1.13  root       12: #include "monitor.h"
1.1.1.8   root       13: #include "uimessage.h"
1.1       root       14: 
1.1.1.9   root       15: // コンストラクタ
1.1       root       16: LCDDevice::LCDDevice()
1.1.1.11  root       17:        : inherited(OBJ_LCD)
1.1       root       18: {
1.1.1.13  root       19:        monitor = gMonitorManager->Regist(ID_MONITOR_LCD, this);
1.1.1.15! root       20:        monitor->SetCallback(&LCDDevice::MonitorScreen);
1.1.1.13  root       21:        monitor->SetSize(67, 3);
1.1       root       22: }
                     23: 
1.1.1.9   root       24: // デストラクタ
1.1       root       25: LCDDevice::~LCDDevice()
                     26: {
                     27: }
                     28: 
1.1.1.14  root       29: // 初期化
                     30: bool
                     31: LCDDevice::Init()
                     32: {
                     33:        uimessage = gMainApp.GetUIMessage();
                     34: 
                     35:        return true;
                     36: }
                     37: 
1.1.1.9   root       38: // リセット
1.1       root       39: void
1.1.1.9   root       40: LCDDevice::ResetHard(bool poweron)
1.1.1.5   root       41: {
                     42:        // とりあえずモニタ画面での表示を消す
                     43:        memset(ddram, 0x20, sizeof(ddram));
                     44:        // XXX not yet
                     45:        // CGRAM とか信号線とか
                     46: 
1.1.1.8   root       47:        SetAddr(0, false);
                     48: 
1.1.1.14  root       49:        uimessage->Post(UIMessage::LCD);
1.1.1.5   root       50: }
                     51: 
1.1.1.9   root       52: // 電源オフ
                     53: void
                     54: LCDDevice::PowerOff()
                     55: {
                     56:        // XXX 電源オフは色を落としたほうがいい
                     57:        memset(ddram, 0x20, sizeof(ddram));
1.1.1.14  root       58:        uimessage->Post(UIMessage::LCD);
1.1.1.9   root       59: }
                     60: 
1.1.1.5   root       61: void
1.1       root       62: LCDDevice::SetRW(bool val)
                     63: {
                     64:        rw = val;
                     65:        putlog(2, "R/W = %c", val ? 'R' : 'W');
                     66: }
                     67: 
                     68: void
1.1.1.8   root       69: LCDDevice::SetRS(bool val)
1.1       root       70: {
                     71:        rs = val;
1.1.1.12  root       72:        putlog(2, "RS = %u", rs);
1.1       root       73: }
                     74: 
                     75: void
                     76: LCDDevice::SetE(bool val)
                     77: {
                     78:        en = val;
1.1.1.12  root       79:        putlog(2, "E = %u", en);
1.1       root       80: }
                     81: 
                     82: // E, RS, R/W 線の状態を取得する (PIO1 のポートC 読み込み用)
                     83: uint8
                     84: LCDDevice::Get() const
                     85: {
                     86:        return (en ? 0x80 : 0)
1.1.1.8   root       87:                 | (rs ? 0x40 : 0)
1.1       root       88:                 | (rw ? 0x20 : 0);
                     89: }
                     90: 
1.1.1.8   root       91: // 現在のアドレスでデータレジスタにラッチ
                     92: void
                     93: LCDDevice::LatchData()
                     94: {
                     95:        if (addr_is_cgram) {
1.1.1.9   root       96:                // cgram は 5 bit 有効で左詰めされている
                     97:                data_reg = cgram[addr_counter] >> 3;
1.1.1.8   root       98:        }  else {
                     99:                data_reg = ddram[addr_counter];
                    100:        }
                    101: }
                    102: 
                    103: // アドレスカウンタを設定
                    104: void
1.1.1.12  root      105: LCDDevice::SetAddr(uint addr, bool is_cgram)
1.1.1.8   root      106: {
                    107:        // アドレスカウンタをセットするとデータレジスタにラッチされる
                    108:        addr_counter = addr;
                    109:        addr_is_cgram = is_cgram;
                    110:        LatchData();
                    111: }
                    112: 
                    113: // アドレスカウンタを次へ進める
                    114: void
                    115: LCDDevice::NextAddr()
                    116: {
                    117:        // アドレス更新について。
                    118:        // DDRAM は各行 0x27 までしか存在していないが、stride が 0x40 バイト。
                    119:        // XXX CGRAM が折り返すかどうかは分からないがそのまま DDRAM 領域に
                    120:        // 行っても困ると思うのでとりあえず。
                    121: 
                    122:        if (addr_is_cgram) {
                    123:                if (addr_inc) {
                    124:                        addr_counter++;
                    125:                } else {
                    126:                        addr_counter--;
                    127:                }
                    128:                addr_counter &= 0x3f;
                    129:        } else {
                    130:                // 2 行モードしかサポートしていない
                    131:                if (addr_inc) {
                    132:                        addr_counter++;
                    133:                        if (addr_counter == 0x28) {                     // DDRAM 1行目
                    134:                                addr_counter = 0x40;
                    135:                        } else if (addr_counter == 0x68) {      // DDRAM 2行目
                    136:                                addr_counter = 0x0;
                    137:                        }
                    138:                } else {
                    139:                        if (addr_counter == 0x0) {                      // DDRAM 1行目
                    140:                                addr_counter = 0x68;
                    141:                        } else if (addr_counter == 0x40) {      // DDRAM 2行目
                    142:                                addr_counter = 0x28;
                    143:                        }
                    144:                        addr_counter--;
                    145:                }
                    146:        }
                    147:        LatchData();
                    148: }
                    149: 
1.1       root      150: uint8
                    151: LCDDevice::Read()
                    152: {
                    153:        if (en == false || rw == false) {
1.1.1.8   root      154:                // ハイインピーダンス
1.1       root      155:                return 0xff;
                    156:        }
1.1.1.8   root      157: 
                    158:        if (rs == false) {
1.1       root      159:                // ステータスレジスタの読み込み
                    160:                // B A A A A A A A
                    161:                // | +-+-+-+-+-+-+-- アドレスカウンタ
                    162:                // +---------------- ビジーフラグ %1=BUSY
                    163: 
                    164:                // XXX ビジーは未実装
1.1.1.8   root      165:                return addr_counter;
1.1       root      166:        } else {
1.1.1.8   root      167:                // データレジスタの読み込み
                    168:                uint8 rv = data_reg;
                    169:                NextAddr();
                    170:                return rv;
1.1       root      171:        }
                    172: }
                    173: 
                    174: void
                    175: LCDDevice::Write(uint8 data)
                    176: {
1.1.1.8   root      177:        if (en == false) {
                    178:                // ハイインピーダンス
1.1       root      179:                return;
                    180:        }
1.1.1.8   root      181:        if (rw == true) {
                    182:                // LCD はドライブ、PIOもドライブ。ショートが発生して燃える。
                    183:                // たまたま値が一致したときだけセーフ。
                    184:                putlog(0, "LCD will short out.");
                    185:                return;
                    186:        }
                    187: 
                    188:        if (rs == false) {
1.1       root      189:                // コマンド書き込み
1.1.1.4   root      190: 
1.1       root      191:                if ((data & 0x80)) {
1.1.1.8   root      192:                        SetAddr(data & 0x7f, false);
1.1.1.10  root      193:                        putlog(1, "DDRAM Address <- $%02x", addr_counter);
1.1       root      194:                } else if ((data & 0x40)) {
1.1.1.8   root      195:                        SetAddr(data & 0x3f, true);
1.1.1.10  root      196:                        putlog(1, "CGRAM Address <- $%02x", addr_counter);
1.1       root      197:                } else if ((data & 0x20)) {
                    198:                        // ファンクション・セット
                    199:                        // 0x38 (8ビットバス、2行表示、8ライン/行)モードのみサポート
                    200:                        if (data != 0x38) {
1.1.1.10  root      201:                                putlog(0, "Write Command $%02x Function Set (NOT IMPLEMENTED)",                                 data);
1.1       root      202:                        }
                    203:                } else if ((data & 0x10)) {
                    204:                        // カーソル移動
1.1.1.10  root      205:                        putlog(0, "Write Command $%02x Move Cursor (NOT IMPLEMENTED)",
                    206:                                data);
1.1       root      207:                } else if ((data & 0x08)) {
                    208:                        // 表示ON/OFF
                    209:                        // 文字表示 ON/OFF のみサポート
                    210:                        disp_char = (data & 0x04);
                    211:                        // XXX それ以外は未サポート
                    212:                } else if ((data & 0x04)) {
                    213:                        // エントリモード
                    214:                        addr_inc = (data & 0x02);
                    215:                        // XXX 表示シフトは未サポート
                    216:                } else if ((data & 0x02)) {
                    217:                        // カーソルホーム
1.1.1.8   root      218:                        // DDRAM アドレス 0 をセット
                    219:                        SetAddr(0, false);
1.1       root      220:                } else if ((data & 0x01)) {
                    221:                        // 表示クリア
                    222:                        memset(ddram, 0x20, sizeof(ddram));
1.1.1.8   root      223:                        // DDRAM アドレス 0 をセット
                    224:                        SetAddr(0, false);
1.1.1.14  root      225:                        uimessage->Post(UIMessage::LCD);
1.1       root      226:                } else {
                    227:                        // $00 が書き込まれるんだけど、データシートにはないんだよね。
                    228:                        // 無視していいかな。
1.1.1.10  root      229:                        putlog(2, "Write undefined $%02x", data);
1.1       root      230:                }
                    231:        } else {
1.1.1.8   root      232:                // データ書き込み
                    233:                if (addr_is_cgram) {
1.1.1.9   root      234:                        // cgram は 5 bit 有効で左詰めで格納
                    235:                        cgram[addr_counter] = data << 3;
1.1.1.10  root      236:                        putlog(1, "CGRAM Data $%02x <- $%02x",
1.1.1.8   root      237:                                addr_counter, data);
1.1.1.4   root      238:                } else {
1.1.1.8   root      239:                        ddram[addr_counter] = data;
1.1.1.12  root      240:                        putlog(1, "DDRAM Data X=%2u Y=%u <- $%02x",
1.1.1.8   root      241:                                addr_counter % 0x40, addr_counter / 0x40, data);
1.1       root      242:                }
1.1.1.8   root      243:                NextAddr();
1.1.1.14  root      244:                uimessage->Post(UIMessage::LCD);
1.1       root      245:        }
                    246: }
                    247: 
1.1.1.2   root      248: // PIO1 からのピーク用
                    249: uint8
                    250: LCDDevice::Peek() const
                    251: {
                    252:        if (en == false || rw == false) {
                    253:                // XXX どうなるんだろ
                    254:                return 0xff;
                    255:        }
1.1.1.8   root      256:        if (rs == false) {
                    257:                // ステータスレジスタをピークする
                    258:                // XXX ビジーは未実装
                    259:                return addr_counter;
1.1.1.2   root      260:        } else {
1.1.1.8   root      261:                // データレジスタをピークする
                    262:                return data_reg;
1.1.1.2   root      263:        }
                    264:        return 0xff;
                    265: }
                    266: 
1.1.1.4   root      267: void
1.1.1.15! root      268: LCDDevice::MonitorScreen(Monitor *, TextScreen &screen)
1.1       root      269: {
                    270:        char buf[17];
                    271: 
1.1.1.4   root      272:        // 0         1         2         3         4         5         6
                    273:        // 01234567890123456789012345678901234567890123456789012345678901234567
                    274:        // RW=R  RS=0  E=0
                    275:        // 00 01 02 03 04 05 06 07  08 09 0a 0b 0c 0d 0e 0f |0123456789abcdef|
                    276:        // 00 01 02 03 04 05 06 07  08 09 0a 0b 0c 0d 0e 0f |0123456789abcdef|
                    277: 
1.1.1.7   root      278:        screen.Clear();
1.1.1.12  root      279:        screen.Print(0, 0, "RW=%c  RS=%u  E=%u", rw ? 'R' : 'W', rs, en);
1.1       root      280: 
                    281:        for (int y = 0; y < 2; y++) {
                    282:                memcpy(buf, &ddram[y * 0x40], 16);
                    283:                buf[16] = '\0';
1.1.1.4   root      284:                // 16進を表示する端から文字ダンプ用に加工していく
                    285:                for (int x = 0; x < 16; x++) {
1.1.1.7   root      286:                        screen.Print(x * 3 + (x / 8), y + 1, "%02x", buf[x]);
1.1.1.4   root      287:                        if (buf[x] < 0x20 || buf[x] > 0x7e) {
                    288:                                buf[x] = '.';
                    289:                        }
                    290:                }
1.1.1.7   root      291:                screen.Print(49, y + 1, "|%-16s|", buf);
1.1       root      292:        }
                    293: }
1.1.1.4   root      294: 
                    295: // CGROM は ROM A00 版のみ考慮する (A02 版との共存は今の所考えない)。
                    296: // A00 版は以下のような配置になっている。
                    297: //
                    298: //      +0+1+2+3+4+5+6+7+8+9+a+b+c+d+e+f
                    299: // 0x00 <------------ CGRAM ----------->
                    300: // 0x10
                    301: // 0x20   ! " # $ % & ' ( ) * + , - . /
                    302: // 0x30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
                    303: // 0x40 @ A B C D E F G H I J K L M N O
                    304: // 0x50 P Q R S T U V W X Y Z [ \ ] ^ _
                    305: // 0x60 ` a b c d e f g h i j k l m n o
                    306: // 0x70 p q r s t u v w x y z { | } →←
                    307: // 0x80
                    308: // 0x90
                    309: // 0xa0   。「」、・ヲァィゥェォャュョッ
                    310: // 0xb0 ーアイウエオカキクケコサシスセソ
                    311: // 0xc0 タチツテトナニヌネノハヒフヘホマ
                    312: // 0xd0 ミムメモヤユヨラリルレロワン゛゜
                    313: // 0xe0 <---- 5x10 ギリシャ文字など --->
                    314: // 0xf0 <---- 5x10 ギリシャ文字など --->
                    315: //
                    316: // 0x00 〜 0x07 は 8文字の CGRAM で、0x08 〜 0x0f には同じものが見える。
                    317: // 0x20〜0x7f と 0xa0〜0xdf までが 5x7 フォント、
                    318: // 0xe0〜0xff は 5x7 フォントと 5x10 フォントが混在している。
                    319: // 5x7 フォントは、メモリとしては 5x8 分(8バイト) を使用し、一番下のラインを
                    320: // 常に空白としておく (LCD の1行自体が 5x8 で構成されており、一番下が
                    321: // カーソル用に予約されているため)。
                    322: // 一方 5x10 フォントのカーソルはこのフォントの一つ下に表示するので 5x11
                    323: // フォントのうち一番下のラインがカーソル用とも言える。5x10 モードはサポート
                    324: // しないので、サイズを揃えるため上から 5x8 分のデータだけを保持することにする。
                    325: // (5x10 モードをサポートする時になんとかすること)
                    326: //
                    327: // 空き領域が多いこと、どのみち CGRAM 部分を考慮する必要があること、それと
                    328: // もし 5x10 モードをサポートする場合には途中でライン数が変わることなどから、
                    329: // フォントデータの取得は生データに直接アクセスさせるのではなく、1文字ずつ
                    330: // フォントデータのアドレスを返す方式にする。
                    331: 
                    332: // 文字コード ch のフォントデータ(の先頭アドレス) を取得する。
                    333: //
                    334: // 連続する 8 バイトがフォントデータで、下位側(右側) 5ビットのみ有効。
                    335: // 9バイト目が次の文字の1バイト目であることは保証していないので必ず1文字ごと
                    336: // に呼び出すこと。また CGRAM 領域のように動的に変化する場合もあるため
                    337: // 呼び出し側でこの読み出し値をキャッシュしないこと。
                    338: const uint8 *
1.1.1.12  root      339: LCDDevice::GetFont(uint ch) const
1.1.1.4   root      340: {
                    341:        // CGRAM 部分
                    342:        if (ch < 0x10) {
                    343:                ch &= 0x07;
                    344:                return &cgram[ch * 8];
                    345:        }
                    346: 
                    347:        if (ch < 0x20) {
                    348:                return &CGROM[0];       // space
                    349:        }
                    350: 
                    351:        // ASCII 部分
                    352:        if (ch < 0x80) {
                    353:                return &CGROM[(ch - 0x20) * 8];
                    354:        }
                    355: 
                    356:        if (ch < 0xa0) {
                    357:                return &CGROM[0];       // space
                    358:        }
                    359: 
                    360:        // カナ以降
                    361:        return &CGROM[(ch - 0xa0 + 0x60) * 8];
                    362: }
                    363: 
1.1.1.9   root      364: // MSB 側 5 ビットに詰める
                    365: #define B(x)   (0b##x##000)
                    366: 
1.1.1.4   root      367: /*static*/ const uint8 LCDDevice::CGROM[12 * 16 * 8] =
                    368: {
1.1.1.9   root      369:        B(00000),                       // 0x20 space
                    370:        B(00000),
                    371:        B(00000),
                    372:        B(00000),
                    373:        B(00000),
                    374:        B(00000),
                    375:        B(00000),
                    376:        B(0),
                    377: 
                    378:        B(00100),                       // 0x21 !
                    379:        B(00100),
                    380:        B(00100),
                    381:        B(00100),
                    382:        B(00100),
                    383:        B(00000),
                    384:        B(00100),
                    385:        B(0),
                    386: 
                    387:        B(01010),                       // 0x22 "
                    388:        B(01010),
                    389:        B(00000),
                    390:        B(00000),
                    391:        B(00000),
                    392:        B(00000),
                    393:        B(00000),
                    394:        B(0),
                    395: 
                    396:        B(01010),                       // 0x23 #
                    397:        B(01010),
                    398:        B(11111),
                    399:        B(01010),
                    400:        B(11111),
                    401:        B(01010),
                    402:        B(01010),
                    403:        B(0),
                    404: 
                    405:        B(00100),                       // 0x24 $
                    406:        B(01110),
                    407:        B(10100),
                    408:        B(01110),
                    409:        B(00101),
                    410:        B(01110),
                    411:        B(00100),
                    412:        B(0),
                    413: 
                    414:        B(11000),                       // 0x25 %
                    415:        B(11001),
                    416:        B(00010),
                    417:        B(00100),
                    418:        B(01011),
                    419:        B(10011),
                    420:        B(00000),
                    421:        B(0),
                    422: 
                    423:        B(01100),                       // 0x26 &
                    424:        B(10010),
                    425:        B(10100),
                    426:        B(01000),
                    427:        B(10100),
                    428:        B(10010),
                    429:        B(01101),
                    430:        B(0),
                    431: 
                    432:        B(01100),                       // 0x27 '
                    433:        B(00100),
                    434:        B(01000),
                    435:        B(00000),
                    436:        B(00000),
                    437:        B(00000),
                    438:        B(00000),
                    439:        B(0),
                    440: 
                    441:        B(00010),                       // 0x28 (
                    442:        B(00100),
                    443:        B(01000),
                    444:        B(01000),
                    445:        B(01000),
                    446:        B(00100),
                    447:        B(00010),
                    448:        B(0),
                    449: 
                    450:        B(01000),                       // 0x29 )
                    451:        B(00100),
                    452:        B(00010),
                    453:        B(00010),
                    454:        B(00010),
                    455:        B(00100),
                    456:        B(01000),
                    457:        B(0),
                    458: 
                    459:        B(00000),                       // 0x2a *
                    460:        B(00100),
                    461:        B(10101),
                    462:        B(01110),
                    463:        B(10101),
                    464:        B(00100),
                    465:        B(00000),
                    466:        B(0),
                    467: 
                    468:        B(00000),                       // 0x2b +
                    469:        B(00100),
                    470:        B(00100),
                    471:        B(11111),
                    472:        B(00100),
                    473:        B(00100),
                    474:        B(00000),
                    475:        B(0),
                    476: 
                    477:        B(00000),                       // 0x2c ,
                    478:        B(00000),
                    479:        B(00000),
                    480:        B(00000),
                    481:        B(01100),
                    482:        B(00100),
                    483:        B(01000),
                    484:        B(0),
                    485: 
                    486:        B(00000),                       // 0x2d -
                    487:        B(00000),
                    488:        B(00000),
                    489:        B(11111),
                    490:        B(00000),
                    491:        B(00000),
                    492:        B(00000),
                    493:        B(0),
                    494: 
                    495:        B(00000),                       // 0x2e .
                    496:        B(00000),
                    497:        B(00000),
                    498:        B(00000),
                    499:        B(00000),
                    500:        B(01100),
                    501:        B(01100),
                    502:        B(0),
                    503: 
                    504:        B(00000),                       // 0x2f /
                    505:        B(00001),
                    506:        B(00010),
                    507:        B(00100),
                    508:        B(01000),
                    509:        B(10000),
                    510:        B(00000),
                    511:        B(0),
                    512: 
                    513:        B(01110),                       // 0x30 0
                    514:        B(10001),
                    515:        B(10011),
                    516:        B(10101),
                    517:        B(11001),
                    518:        B(10001),
                    519:        B(01110),
                    520:        B(0),
                    521: 
                    522:        B(00100),                       // 0x31 1
                    523:        B(01100),
                    524:        B(00100),
                    525:        B(00100),
                    526:        B(00100),
                    527:        B(00100),
                    528:        B(01110),
                    529:        B(0),
                    530: 
                    531:        B(01110),                       // 0x32 2
                    532:        B(10001),
                    533:        B(10001),
                    534:        B(00010),
                    535:        B(00100),
                    536:        B(01000),
                    537:        B(11111),
                    538:        B(0),
                    539: 
                    540:        B(11111),                       // 0x33 3
                    541:        B(00010),
                    542:        B(00100),
                    543:        B(01110),
                    544:        B(00001),
                    545:        B(10001),
                    546:        B(01110),
                    547:        B(0),
                    548: 
                    549:        B(00010),                       // 0x34 4
                    550:        B(00110),
                    551:        B(01010),
                    552:        B(10010),
                    553:        B(11111),
                    554:        B(00010),
                    555:        B(00010),
                    556:        B(0),
                    557: 
                    558:        B(11111),                       // 0x35 5
                    559:        B(10000),
                    560:        B(10000),
                    561:        B(11110),
                    562:        B(00001),
                    563:        B(10001),
                    564:        B(01110),
                    565:        B(0),
                    566: 
                    567:        B(00110),                       // 0x36 6
                    568:        B(01000),
                    569:        B(10000),
                    570:        B(11110),
                    571:        B(10001),
                    572:        B(10001),
                    573:        B(01110),
                    574:        B(0),
                    575: 
                    576:        B(11111),                       // 0x37 7
                    577:        B(00001),
                    578:        B(00010),
                    579:        B(00100),
                    580:        B(00100),
                    581:        B(00100),
                    582:        B(00100),
                    583:        B(0),
                    584: 
                    585:        B(01110),                       // 0x38 8
                    586:        B(10001),
                    587:        B(10001),
                    588:        B(01110),
                    589:        B(10001),
                    590:        B(10001),
                    591:        B(01110),
                    592:        B(0),
                    593: 
                    594:        B(01110),                       // 0x39 9
                    595:        B(10001),
                    596:        B(10001),
                    597:        B(01111),
                    598:        B(00001),
                    599:        B(00010),
                    600:        B(01100),
                    601:        B(0),
                    602: 
                    603:        B(00000),                       // 0x3a :
                    604:        B(01100),
                    605:        B(01100),
                    606:        B(00000),
                    607:        B(01100),
                    608:        B(01100),
                    609:        B(00000),
                    610:        B(0),
                    611: 
                    612:        B(00000),                       // 0x3b ;
                    613:        B(01100),
                    614:        B(01100),
                    615:        B(00000),
                    616:        B(01100),
                    617:        B(00100),
                    618:        B(01000),
                    619:        B(0),
                    620: 
                    621:        B(00010),                       // 0x3c <
                    622:        B(00100),
                    623:        B(01000),
                    624:        B(10000),
                    625:        B(01000),
                    626:        B(00100),
                    627:        B(00010),
                    628:        B(0),
                    629: 
                    630:        B(00000),                       // 0x3d =
                    631:        B(00000),
                    632:        B(11111),
                    633:        B(00000),
                    634:        B(11111),
                    635:        B(00000),
                    636:        B(00000),
                    637:        B(0),
                    638: 
                    639:        B(01000),                       // 0x3e >
                    640:        B(00100),
                    641:        B(00010),
                    642:        B(00001),
                    643:        B(00010),
                    644:        B(00100),
                    645:        B(01000),
                    646:        B(0),
                    647: 
                    648:        B(01110),                       // 0x3f ?
                    649:        B(10001),
                    650:        B(00001),
                    651:        B(00010),
                    652:        B(00100),
                    653:        B(00000),
                    654:        B(00100),
                    655:        B(0),
                    656: 
                    657:        B(01110),                       // 0x40 @
                    658:        B(10001),
                    659:        B(00001),
                    660:        B(01101),
                    661:        B(10101),
                    662:        B(10101),
                    663:        B(01110),
                    664:        B(0),
                    665: 
                    666:        B(01110),                       // 0x41 A
                    667:        B(10001),
                    668:        B(10001),
                    669:        B(10001),
                    670:        B(11111),
                    671:        B(10001),
                    672:        B(10001),
                    673:        B(0),
                    674: 
                    675:        B(11110),                       // 0x42 B
                    676:        B(10001),
                    677:        B(10001),
                    678:        B(11110),
                    679:        B(10001),
                    680:        B(10001),
                    681:        B(11110),
                    682:        B(0),
                    683: 
                    684:        B(01110),                       // 0x43 C
                    685:        B(10001),
                    686:        B(10000),
                    687:        B(10000),
                    688:        B(10000),
                    689:        B(10001),
                    690:        B(01110),
                    691:        B(0),
                    692: 
                    693:        B(11100),                       // 0x44 D
                    694:        B(10010),
                    695:        B(10001),
                    696:        B(10001),
                    697:        B(10001),
                    698:        B(10010),
                    699:        B(11100),
                    700:        B(0),
                    701: 
                    702:        B(11111),                       // 0x45 E
                    703:        B(10000),
                    704:        B(10000),
                    705:        B(11110),
                    706:        B(10000),
                    707:        B(10000),
                    708:        B(11111),
                    709:        B(0),
                    710: 
                    711:        B(11111),                       // 0x46 F
                    712:        B(10000),
                    713:        B(10000),
                    714:        B(11110),
                    715:        B(10000),
                    716:        B(10000),
                    717:        B(10000),
                    718:        B(0),
                    719: 
                    720:        B(01110),                       // 0x47 G
                    721:        B(10001),
                    722:        B(10000),
                    723:        B(10011),
                    724:        B(10001),
                    725:        B(10001),
                    726:        B(01110),
                    727:        B(0),
                    728: 
                    729:        B(10001),                       // 0x48 H
                    730:        B(10001),
                    731:        B(10001),
                    732:        B(11111),
                    733:        B(10001),
                    734:        B(10001),
                    735:        B(10001),
                    736:        B(0),
                    737: 
                    738:        B(01110),                       // 0x49 I
                    739:        B(00100),
                    740:        B(00100),
                    741:        B(00100),
                    742:        B(00100),
                    743:        B(00100),
                    744:        B(01110),
                    745:        B(0),
                    746: 
                    747:        B(00111),                       // 0x4a J
                    748:        B(00010),
                    749:        B(00010),
                    750:        B(00010),
                    751:        B(10010),
                    752:        B(10010),
                    753:        B(01100),
                    754:        B(0),
                    755: 
                    756:        B(10001),                       // 0x4b K
                    757:        B(10010),
                    758:        B(10100),
                    759:        B(11000),
                    760:        B(10100),
                    761:        B(10010),
                    762:        B(10001),
                    763:        B(0),
                    764: 
                    765:        B(10000),                       // 0x4c L
                    766:        B(10000),
                    767:        B(10000),
                    768:        B(10000),
                    769:        B(10000),
                    770:        B(10000),
                    771:        B(11111),
                    772:        B(0),
                    773: 
                    774:        B(10001),                       // 0x4d M
                    775:        B(11011),
                    776:        B(10101),
                    777:        B(10101),
                    778:        B(10001),
                    779:        B(10001),
                    780:        B(10001),
                    781:        B(0),
                    782: 
                    783:        B(10001),                       // 0x4e N
                    784:        B(10001),
                    785:        B(11001),
                    786:        B(10101),
                    787:        B(10011),
                    788:        B(10001),
                    789:        B(10001),
                    790:        B(0),
                    791: 
                    792:        B(01110),                       // 0x4f O
                    793:        B(10001),
                    794:        B(10001),
                    795:        B(10001),
                    796:        B(10001),
                    797:        B(10001),
                    798:        B(01110),
                    799:        B(0),
                    800: 
                    801:        B(11110),                       // 0x50 P
                    802:        B(10001),
                    803:        B(10001),
                    804:        B(11110),
                    805:        B(10000),
                    806:        B(10000),
                    807:        B(10000),
                    808:        B(0),
                    809: 
                    810:        B(01110),                       // 0x51 Q
                    811:        B(10001),
                    812:        B(10001),
                    813:        B(10001),
                    814:        B(10101),
                    815:        B(10010),
                    816:        B(01101),
                    817:        B(0),
                    818: 
                    819:        B(11110),                       // 0x52 R
                    820:        B(10001),
                    821:        B(10001),
                    822:        B(11110),
                    823:        B(10100),
                    824:        B(10010),
                    825:        B(10001),
                    826:        B(0),
                    827: 
                    828:        B(01111),                       // 0x53 S
                    829:        B(10000),
                    830:        B(10000),
                    831:        B(01110),
                    832:        B(00001),
                    833:        B(00001),
                    834:        B(11110),
                    835:        B(0),
                    836: 
                    837:        B(11111),                       // 0x54 T
                    838:        B(00100),
                    839:        B(00100),
                    840:        B(00100),
                    841:        B(00100),
                    842:        B(00100),
                    843:        B(00100),
                    844:        B(0),
                    845: 
                    846:        B(10001),                       // 0x55 U
                    847:        B(10001),
                    848:        B(10001),
                    849:        B(10001),
                    850:        B(10001),
                    851:        B(10001),
                    852:        B(01110),
                    853:        B(0),
                    854: 
                    855:        B(10001),                       // 0x56 V
                    856:        B(10001),
                    857:        B(10001),
                    858:        B(10001),
                    859:        B(10001),
                    860:        B(01010),
                    861:        B(00100),
                    862:        B(0),
                    863: 
                    864:        B(10001),                       // 0x57 W
                    865:        B(10001),
                    866:        B(10001),
                    867:        B(10001),
                    868:        B(10101),
                    869:        B(10101),
                    870:        B(01010),
                    871:        B(0),
                    872: 
                    873:        B(10001),                       // 0x58 X
                    874:        B(10001),
                    875:        B(01010),
                    876:        B(00100),
                    877:        B(01010),
                    878:        B(10001),
                    879:        B(10001),
                    880:        B(0),
                    881: 
                    882:        B(10001),                       // 0x59 Y
                    883:        B(10001),
                    884:        B(10001),
                    885:        B(01010),
                    886:        B(00100),
                    887:        B(00100),
                    888:        B(00100),
                    889:        B(0),
                    890: 
                    891:        B(11111),                       // 0x5a Z
                    892:        B(00001),
                    893:        B(00010),
                    894:        B(00100),
                    895:        B(01000),
                    896:        B(10000),
                    897:        B(11111),
                    898:        B(0),
                    899: 
                    900:        B(01110),                       // 0x5b [
                    901:        B(01000),
                    902:        B(01000),
                    903:        B(01000),
                    904:        B(01000),
                    905:        B(01000),
                    906:        B(01110),
                    907:        B(0),
                    908: 
                    909:        B(10001),                       // 0x5c ¥
                    910:        B(01010),
                    911:        B(11111),
                    912:        B(00100),
                    913:        B(11111),
                    914:        B(00100),
                    915:        B(00100),
                    916:        B(0),
                    917: 
                    918:        B(01110),                       // 0x5d ]
                    919:        B(00010),
                    920:        B(00010),
                    921:        B(00010),
                    922:        B(00010),
                    923:        B(00010),
                    924:        B(01110),
                    925:        B(0),
                    926: 
                    927:        B(00100),                       // 0x5e ^
                    928:        B(01010),
                    929:        B(10001),
                    930:        B(00000),
                    931:        B(00000),
                    932:        B(00000),
                    933:        B(00000),
                    934:        B(0),
                    935: 
                    936:        B(00000),                       // 0x5f _
                    937:        B(00000),
                    938:        B(00000),
                    939:        B(00000),
                    940:        B(00000),
                    941:        B(00000),
                    942:        B(11111),
                    943:        B(0),
                    944: 
                    945:        B(01000),                       // 0x60 `
                    946:        B(00100),
                    947:        B(00010),
                    948:        B(00000),
                    949:        B(00000),
                    950:        B(00000),
                    951:        B(00000),
                    952:        B(0),
                    953: 
                    954:        B(00000),                       // 0x61 a
                    955:        B(00000),
                    956:        B(01110),
                    957:        B(00001),
                    958:        B(01111),
                    959:        B(10001),
                    960:        B(01111),
                    961:        B(0),
                    962: 
                    963:        B(10000),                       // 0x62 b
                    964:        B(10000),
                    965:        B(10110),
                    966:        B(11001),
                    967:        B(10001),
                    968:        B(10001),
                    969:        B(11110),
                    970:        B(0),
                    971: 
                    972:        B(00000),                       // 0x63 c
                    973:        B(00000),
                    974:        B(01110),
                    975:        B(10001),
                    976:        B(10000),
                    977:        B(10001),
                    978:        B(01110),
                    979:        B(0),
                    980: 
                    981:        B(00001),                       // 0x64 d
                    982:        B(00001),
                    983:        B(01101),
                    984:        B(10011),
                    985:        B(10001),
                    986:        B(10001),
                    987:        B(01111),
                    988:        B(0),
                    989: 
                    990:        B(00000),                       // 0x65 e
                    991:        B(00000),
                    992:        B(01110),
                    993:        B(10001),
                    994:        B(11111),
                    995:        B(10000),
                    996:        B(01110),
                    997:        B(0),
                    998: 
                    999:        B(00011),                       // 0x66 f
                   1000:        B(00100),
                   1001:        B(01110),
                   1002:        B(00100),
                   1003:        B(00100),
                   1004:        B(00100),
                   1005:        B(00100),
                   1006:        B(0),
                   1007: 
                   1008:        B(00000),                       // 0x67 g
                   1009:        B(00000),
                   1010:        B(01111),
                   1011:        B(10001),
                   1012:        B(01111),
                   1013:        B(00001),
                   1014:        B(01110),
                   1015:        B(0),
                   1016: 
                   1017:        B(10000),                       // 0x68 h
                   1018:        B(10000),
                   1019:        B(10110),
                   1020:        B(11001),
                   1021:        B(10001),
                   1022:        B(10001),
                   1023:        B(10001),
                   1024:        B(0),
                   1025: 
                   1026:        B(00100),                       // 0x69 i
                   1027:        B(00000),
                   1028:        B(01100),
                   1029:        B(00100),
                   1030:        B(00100),
                   1031:        B(00100),
                   1032:        B(01110),
                   1033:        B(0),
                   1034: 
                   1035:        B(00010),                       // 0x6a j
                   1036:        B(00000),
                   1037:        B(00110),
                   1038:        B(00010),
                   1039:        B(00010),
                   1040:        B(10010),
                   1041:        B(01100),
                   1042:        B(0),
                   1043: 
                   1044:        B(10000),                       // 0x6b k
                   1045:        B(10000),
                   1046:        B(10010),
                   1047:        B(10100),
                   1048:        B(11000),
                   1049:        B(10100),
                   1050:        B(10010),
                   1051:        B(0),
                   1052: 
                   1053:        B(01100),                       // 0x6c l
                   1054:        B(00100),
                   1055:        B(00100),
                   1056:        B(00100),
                   1057:        B(00100),
                   1058:        B(00100),
                   1059:        B(01110),
                   1060:        B(0),
                   1061: 
                   1062:        B(00000),                       // 0x6d m
                   1063:        B(00000),
                   1064:        B(11010),
                   1065:        B(10101),
                   1066:        B(10101),
                   1067:        B(10001),
                   1068:        B(10001),
                   1069:        B(0),
                   1070: 
                   1071:        B(00000),                       // 0x6e n
                   1072:        B(00000),
                   1073:        B(10110),
                   1074:        B(11001),
                   1075:        B(10001),
                   1076:        B(10001),
                   1077:        B(10001),
                   1078:        B(0),
                   1079: 
                   1080:        B(00000),                       // 0x6f o
                   1081:        B(00000),
                   1082:        B(01110),
                   1083:        B(10001),
                   1084:        B(10001),
                   1085:        B(10001),
                   1086:        B(01110),
                   1087:        B(0),
                   1088: 
                   1089:        B(00000),                       // 0x70 p
                   1090:        B(00000),
                   1091:        B(11110),
                   1092:        B(10001),
                   1093:        B(11110),
                   1094:        B(10000),
                   1095:        B(10000),
                   1096:        B(0),
                   1097: 
                   1098:        B(00000),                       // 0x71 q
                   1099:        B(00000),
                   1100:        B(01111),
                   1101:        B(10001),
                   1102:        B(01111),
                   1103:        B(00001),
                   1104:        B(00001),
                   1105:        B(0),
                   1106: 
                   1107:        B(00000),                       // 0x72 r
                   1108:        B(00000),
                   1109:        B(10110),
                   1110:        B(11001),
                   1111:        B(10000),
                   1112:        B(10000),
                   1113:        B(10000),
                   1114:        B(0),
                   1115: 
                   1116:        B(00000),                       // 0x73 s
                   1117:        B(00000),
                   1118:        B(01110),
                   1119:        B(10000),
                   1120:        B(01110),
                   1121:        B(00001),
                   1122:        B(11110),
                   1123:        B(0),
                   1124: 
                   1125:        B(00000),                       // 0x74 t
                   1126:        B(01000),
                   1127:        B(11110),
                   1128:        B(01000),
                   1129:        B(01000),
                   1130:        B(01000),
                   1131:        B(00110),
                   1132:        B(0),
                   1133: 
                   1134:        B(00000),                       // 0x75 u
                   1135:        B(00000),
                   1136:        B(10001),
                   1137:        B(10001),
                   1138:        B(10001),
                   1139:        B(10011),
                   1140:        B(01101),
                   1141:        B(0),
                   1142: 
                   1143:        B(00000),                       // 0x76 v
                   1144:        B(00000),
                   1145:        B(10001),
                   1146:        B(10001),
                   1147:        B(10001),
                   1148:        B(01010),
                   1149:        B(00100),
                   1150:        B(0),
                   1151: 
                   1152:        B(00000),                       // 0x77 w
                   1153:        B(00000),
                   1154:        B(10001),
                   1155:        B(10001),
                   1156:        B(10101),
                   1157:        B(10101),
                   1158:        B(01010),
                   1159:        B(0),
                   1160: 
                   1161:        B(00000),                       // 0x78 x
                   1162:        B(00000),
                   1163:        B(10001),
                   1164:        B(01010),
                   1165:        B(00100),
                   1166:        B(01010),
                   1167:        B(10001),
                   1168:        B(0),
                   1169: 
                   1170:        B(00000),                       // 0x79 y
                   1171:        B(00000),
                   1172:        B(10001),
                   1173:        B(10001),
                   1174:        B(01111),
                   1175:        B(00001),
                   1176:        B(01110),
                   1177:        B(0),
                   1178: 
                   1179:        B(00000),                       // 0x7a z
                   1180:        B(00000),
                   1181:        B(11111),
                   1182:        B(00010),
                   1183:        B(00100),
                   1184:        B(01000),
                   1185:        B(11111),
                   1186:        B(0),
                   1187: 
                   1188:        B(00010),                       // 0x7b {
                   1189:        B(00100),
                   1190:        B(00100),
                   1191:        B(01000),
                   1192:        B(00100),
                   1193:        B(00100),
                   1194:        B(00010),
                   1195:        B(0),
                   1196: 
                   1197:        B(00100),                       // 0x7c |
                   1198:        B(00100),
                   1199:        B(00100),
                   1200:        B(00100),
                   1201:        B(00100),
                   1202:        B(00100),
                   1203:        B(00100),
                   1204:        B(0),
                   1205: 
                   1206:        B(01000),                       // 0x7d }
                   1207:        B(00100),
                   1208:        B(00100),
                   1209:        B(00010),
                   1210:        B(00100),
                   1211:        B(00100),
                   1212:        B(01000),
                   1213:        B(0),
                   1214: 
                   1215:        B(00000),                       // 0x7e →
                   1216:        B(00100),
                   1217:        B(00010),
                   1218:        B(11111),
                   1219:        B(00010),
                   1220:        B(00100),
                   1221:        B(00000),
                   1222:        B(0),
                   1223: 
                   1224:        B(00000),                       // 0x7f ←
                   1225:        B(00100),
                   1226:        B(01000),
                   1227:        B(11111),
                   1228:        B(01000),
                   1229:        B(00100),
                   1230:        B(00000),
                   1231:        B(0),
                   1232: 
                   1233: 
                   1234:        B(00000),                       // 0xa0 space
                   1235:        B(00000),
                   1236:        B(00000),
                   1237:        B(00000),
                   1238:        B(00000),
                   1239:        B(00000),
                   1240:        B(00000),
                   1241:        B(0),
                   1242: 
                   1243:        B(00000),                       // 0xa1 。
                   1244:        B(00000),
                   1245:        B(00000),
                   1246:        B(00000),
                   1247:        B(11100),
                   1248:        B(10100),
                   1249:        B(11100),
                   1250:        B(0),
                   1251: 
                   1252:        B(00111),                       // 0xa2 「
                   1253:        B(00100),
                   1254:        B(00100),
                   1255:        B(00100),
                   1256:        B(00000),
                   1257:        B(00000),
                   1258:        B(00000),
                   1259:        B(0),
                   1260: 
                   1261:        B(00000),                       // 0xa3 」
                   1262:        B(00000),
                   1263:        B(00000),
                   1264:        B(00100),
                   1265:        B(00100),
                   1266:        B(00100),
                   1267:        B(11100),
                   1268:        B(0),
                   1269: 
                   1270:        B(00000),                       // 0xa4 、
                   1271:        B(00000),
                   1272:        B(00000),
                   1273:        B(00000),
                   1274:        B(10000),
                   1275:        B(01000),
                   1276:        B(00100),
                   1277:        B(0),
                   1278: 
                   1279:        B(00000),                       // 0xa5 ・
                   1280:        B(00000),
                   1281:        B(00000),
                   1282:        B(01100),
                   1283:        B(01100),
                   1284:        B(00000),
                   1285:        B(00000),
                   1286:        B(0),
                   1287: 
                   1288:        B(00000),                       // 0xa6 ヲ
                   1289:        B(11111),
                   1290:        B(00001),
                   1291:        B(01111),
                   1292:        B(00001),
                   1293:        B(00010),
                   1294:        B(01100),
                   1295:        B(0),
                   1296: 
                   1297:        B(00000),                       // 0xa7 ァ
                   1298:        B(00000),
                   1299:        B(11111),
                   1300:        B(00001),
                   1301:        B(00110),
                   1302:        B(00100),
                   1303:        B(01000),
                   1304:        B(0),
                   1305: 
                   1306:        B(00000),                       // 0xa8 ィ
                   1307:        B(00000),
                   1308:        B(00010),
                   1309:        B(00100),
                   1310:        B(01100),
                   1311:        B(10100),
                   1312:        B(00100),
                   1313:        B(0),
                   1314: 
                   1315:        B(00000),                       // 0xa9 ゥ
                   1316:        B(00000),
                   1317:        B(00100),
                   1318:        B(11111),
                   1319:        B(10001),
                   1320:        B(00001),
                   1321:        B(00110),
                   1322:        B(0),
                   1323: 
                   1324:        B(00000),                       // 0xaa ェ
                   1325:        B(00000),
                   1326:        B(11111),
                   1327:        B(00100),
                   1328:        B(00100),
                   1329:        B(00100),
                   1330:        B(11111),
                   1331:        B(0),
                   1332: 
                   1333:        B(00000),                       // 0xab ォ
                   1334:        B(00000),
                   1335:        B(00010),
                   1336:        B(11111),
                   1337:        B(00110),
                   1338:        B(01010),
                   1339:        B(10010),
                   1340:        B(0),
                   1341: 
                   1342:        B(00000),                       // 0xac ャ
                   1343:        B(00000),
                   1344:        B(01000),
                   1345:        B(11111),
                   1346:        B(01001),
                   1347:        B(01010),
                   1348:        B(01000),
                   1349:        B(0),
                   1350: 
                   1351:        B(00000),                       // 0xad ュ
                   1352:        B(00000),
                   1353:        B(00000),
                   1354:        B(11110),
                   1355:        B(00010),
                   1356:        B(00010),
                   1357:        B(11111),
                   1358:        B(0),
                   1359: 
                   1360:        B(00000),                       // 0xae ョ
                   1361:        B(00000),
                   1362:        B(11111),
                   1363:        B(00001),
                   1364:        B(11111),
                   1365:        B(00001),
                   1366:        B(11111),
                   1367:        B(0),
                   1368: 
                   1369:        B(00000),                       // 0xaf ッ
                   1370:        B(00000),
                   1371:        B(10101),
                   1372:        B(10101),
                   1373:        B(00001),
                   1374:        B(00001),
                   1375:        B(00110),
                   1376:        B(0),
                   1377: 
                   1378:        B(00000),                       // 0xb0 ー
                   1379:        B(00000),
                   1380:        B(10000),
                   1381:        B(01111),
                   1382:        B(00000),
                   1383:        B(00000),
                   1384:        B(00000),
                   1385:        B(0),
                   1386: 
                   1387:        B(00000),                       // 0xb1 ア
                   1388:        B(11111),
                   1389:        B(00001),
                   1390:        B(00101),
                   1391:        B(00110),
                   1392:        B(00100),
                   1393:        B(01000),
                   1394:        B(0),
                   1395: 
                   1396:        B(00001),                       // 0xb2 イ
                   1397:        B(00010),
                   1398:        B(00100),
                   1399:        B(01100),
                   1400:        B(10100),
                   1401:        B(00100),
                   1402:        B(00100),
                   1403:        B(0),
                   1404: 
                   1405:        B(00100),                       // 0xb3 ウ
                   1406:        B(11111),
                   1407:        B(10001),
                   1408:        B(10001),
                   1409:        B(00001),
                   1410:        B(00010),
                   1411:        B(00100),
                   1412:        B(0),
                   1413: 
                   1414:        B(00000),                       // 0xb4 エ
                   1415:        B(11111),
                   1416:        B(00100),
                   1417:        B(00100),
                   1418:        B(00100),
                   1419:        B(00100),
                   1420:        B(11111),
                   1421:        B(0),
                   1422: 
                   1423:        B(00010),                       // 0xb5 オ
                   1424:        B(11111),
                   1425:        B(00010),
                   1426:        B(00110),
                   1427:        B(01010),
                   1428:        B(10010),
                   1429:        B(00010),
                   1430:        B(0),
                   1431: 
                   1432:        B(01000),                       // 0xb6 カ
                   1433:        B(11111),
                   1434:        B(01001),
                   1435:        B(01001),
                   1436:        B(01001),
                   1437:        B(01001),
                   1438:        B(10010),
                   1439:        B(0),
                   1440: 
                   1441:        B(00100),                       // 0xb7 キ
                   1442:        B(11111),
                   1443:        B(00100),
                   1444:        B(11111),
                   1445:        B(00100),
                   1446:        B(00100),
                   1447:        B(00100),
                   1448:        B(0),
                   1449: 
                   1450:        B(00000),                       // 0xb8 ク
                   1451:        B(01111),
                   1452:        B(01001),
                   1453:        B(10001),
                   1454:        B(00001),
                   1455:        B(00010),
                   1456:        B(01100),
                   1457:        B(0),
                   1458: 
                   1459:        B(01000),                       // 0xb9 ケ
                   1460:        B(01111),
                   1461:        B(10010),
                   1462:        B(00010),
                   1463:        B(00010),
                   1464:        B(00010),
                   1465:        B(00100),
                   1466:        B(0),
                   1467: 
                   1468:        B(00000),                       // 0xba コ
                   1469:        B(11111),
                   1470:        B(00001),
                   1471:        B(00001),
                   1472:        B(00001),
                   1473:        B(00001),
                   1474:        B(11111),
                   1475:        B(0),
                   1476: 
                   1477:        B(01010),                       // 0xbb サ
                   1478:        B(11111),
                   1479:        B(01010),
                   1480:        B(01010),
                   1481:        B(00010),
                   1482:        B(00100),
                   1483:        B(01000),
                   1484:        B(0),
                   1485: 
                   1486:        B(00000),                       // 0xbc シ
                   1487:        B(11001),
                   1488:        B(00001),
                   1489:        B(11001),
                   1490:        B(00001),
                   1491:        B(00010),
                   1492:        B(11100),
                   1493:        B(0),
                   1494: 
                   1495:        B(00000),                       // 0xbd ス
                   1496:        B(11111),
                   1497:        B(00001),
                   1498:        B(00010),
                   1499:        B(00100),
                   1500:        B(01010),
                   1501:        B(10001),
                   1502:        B(0),
                   1503: 
                   1504:        B(01000),                       // 0xbe セ
                   1505:        B(11111),
                   1506:        B(01001),
                   1507:        B(01001),
                   1508:        B(01010),
                   1509:        B(01000),
                   1510:        B(00110),
                   1511:        B(0),
                   1512: 
                   1513:        B(00000),                       // 0xbf ソ
                   1514:        B(10001),
                   1515:        B(10001),
                   1516:        B(01001),
                   1517:        B(00001),
                   1518:        B(00010),
                   1519:        B(01100),
                   1520:        B(0),
                   1521: 
                   1522:        B(00000),                       // 0xc0 タ
                   1523:        B(01111),
                   1524:        B(01001),
                   1525:        B(10101),
                   1526:        B(00011),
                   1527:        B(00010),
                   1528:        B(01100),
                   1529:        B(0),
                   1530: 
                   1531:        B(00010),                       // 0xc1 チ
                   1532:        B(01100),
                   1533:        B(00100),
                   1534:        B(11111),
                   1535:        B(00100),
                   1536:        B(00100),
                   1537:        B(01000),
                   1538:        B(0),
                   1539: 
                   1540:        B(00000),                       // 0xc2 ツ
                   1541:        B(10101),
                   1542:        B(10101),
                   1543:        B(10101),
                   1544:        B(00001),
                   1545:        B(00010),
                   1546:        B(00100),
                   1547:        B(0),
                   1548: 
                   1549:        B(01110),                       // 0xc3 テ
                   1550:        B(00000),
                   1551:        B(11111),
                   1552:        B(00100),
                   1553:        B(00100),
                   1554:        B(00100),
                   1555:        B(01000),
                   1556:        B(0),
                   1557: 
                   1558:        B(01000),                       // 0xc4 ト
                   1559:        B(01000),
                   1560:        B(01000),
                   1561:        B(01100),
                   1562:        B(01010),
                   1563:        B(01000),
                   1564:        B(01000),
                   1565:        B(0),
                   1566: 
                   1567:        B(00100),                       // 0xc5 ナ
                   1568:        B(00100),
                   1569:        B(11111),
                   1570:        B(00100),
                   1571:        B(00100),
                   1572:        B(00100),
                   1573:        B(01000),
                   1574:        B(0),
                   1575: 
                   1576:        B(00000),                       // 0xc6 ニ
                   1577:        B(01110),
                   1578:        B(00000),
                   1579:        B(00000),
                   1580:        B(00000),
                   1581:        B(00000),
                   1582:        B(11111),
                   1583:        B(0),
                   1584: 
                   1585:        B(00000),                       // 0xc7 ヌ
                   1586:        B(11111),
                   1587:        B(00001),
                   1588:        B(01010),
                   1589:        B(00100),
                   1590:        B(01010),
                   1591:        B(10001),
                   1592:        B(0),
                   1593: 
                   1594:        B(00100),                       // 0xc8 ネ
                   1595:        B(11111),
                   1596:        B(00010),
                   1597:        B(00100),
                   1598:        B(01110),
                   1599:        B(10101),
                   1600:        B(00100),
                   1601:        B(0),
                   1602: 
                   1603:        B(00000),                       // 0xc9 ノ
                   1604:        B(00010),
                   1605:        B(00010),
                   1606:        B(00010),
                   1607:        B(00010),
                   1608:        B(00100),
                   1609:        B(01000),
                   1610:        B(0),
                   1611: 
                   1612:        B(00000),                       // 0xca ハ
                   1613:        B(00100),
                   1614:        B(00010),
                   1615:        B(10001),
                   1616:        B(10001),
                   1617:        B(10001),
                   1618:        B(10001),
                   1619:        B(0),
                   1620: 
                   1621:        B(00000),                       // 0xcb ヒ
                   1622:        B(10000),
                   1623:        B(11111),
                   1624:        B(10000),
                   1625:        B(10000),
                   1626:        B(10000),
                   1627:        B(01111),
                   1628:        B(0),
                   1629: 
                   1630:        B(00000),                       // 0xcc フ
                   1631:        B(11111),
                   1632:        B(00001),
                   1633:        B(00001),
                   1634:        B(00001),
                   1635:        B(00010),
                   1636:        B(01100),
                   1637:        B(0),
                   1638: 
                   1639:        B(00000),                       // 0xcd ヘ
                   1640:        B(01000),
                   1641:        B(10100),
                   1642:        B(10010),
                   1643:        B(00001),
                   1644:        B(00001),
                   1645:        B(00000),
                   1646:        B(0),
                   1647: 
                   1648:        B(00100),                       // 0xce ホ
                   1649:        B(11111),
                   1650:        B(00100),
                   1651:        B(10101),
                   1652:        B(10101),
                   1653:        B(10101),
                   1654:        B(00100),
                   1655:        B(0),
                   1656: 
                   1657:        B(00000),                       // 0xcf マ
                   1658:        B(11111),
                   1659:        B(00001),
                   1660:        B(00001),
                   1661:        B(01010),
                   1662:        B(00100),
                   1663:        B(00010),
                   1664:        B(0),
                   1665: 
                   1666:        B(00000),                       // 0xd0 ミ
                   1667:        B(01110),
                   1668:        B(00000),
                   1669:        B(01110),
                   1670:        B(00000),
                   1671:        B(01110),
                   1672:        B(00001),
                   1673:        B(0),
                   1674: 
                   1675:        B(00000),                       // 0xd1 ム
                   1676:        B(00100),
                   1677:        B(00100),
                   1678:        B(01000),
                   1679:        B(01001),
                   1680:        B(10011),
                   1681:        B(11101),
                   1682:        B(0),
                   1683: 
                   1684:        B(00000),                       // 0xd2 メ
                   1685:        B(00001),
                   1686:        B(00001),
                   1687:        B(00101),
                   1688:        B(00010),
                   1689:        B(00101),
                   1690:        B(11000),
                   1691:        B(0),
                   1692: 
                   1693:        B(00000),                       // 0xd3 モ
                   1694:        B(11111),
                   1695:        B(00100),
                   1696:        B(11111),
                   1697:        B(00100),
                   1698:        B(00100),
                   1699:        B(00011),
                   1700:        B(0),
                   1701: 
                   1702:        B(01000),                       // 0xd4 ヤ
                   1703:        B(01000),
                   1704:        B(11111),
                   1705:        B(01001),
                   1706:        B(01010),
                   1707:        B(01000),
                   1708:        B(01000),
                   1709:        B(0),
                   1710: 
                   1711:        B(00000),                       // 0xd5 ユ
                   1712:        B(01110),
                   1713:        B(00010),
                   1714:        B(00010),
                   1715:        B(00010),
                   1716:        B(00010),
                   1717:        B(11111),
                   1718:        B(0),
                   1719: 
                   1720:        B(00000),                       // 0xd6 ヨ
                   1721:        B(11111),
                   1722:        B(00001),
                   1723:        B(01111),
                   1724:        B(00001),
                   1725:        B(00001),
                   1726:        B(11111),
                   1727:        B(0),
                   1728: 
                   1729:        B(01110),                       // 0xd7 ラ
                   1730:        B(00000),
                   1731:        B(11111),
                   1732:        B(00001),
                   1733:        B(00001),
                   1734:        B(00010),
                   1735:        B(00100),
                   1736:        B(0),
                   1737: 
                   1738:        B(00000),                       // 0xd8 リ
                   1739:        B(10010),
                   1740:        B(10010),
                   1741:        B(10010),
                   1742:        B(00010),
                   1743:        B(00100),
                   1744:        B(01000),
                   1745:        B(0),
                   1746: 
                   1747:        B(00000),                       // 0xd9 ル
                   1748:        B(00100),
                   1749:        B(10100),
                   1750:        B(10100),
                   1751:        B(10101),
                   1752:        B(10101),
                   1753:        B(00110),
                   1754:        B(0),
                   1755: 
                   1756:        B(00000),                       // 0xda レ
                   1757:        B(10000),
                   1758:        B(10000),
                   1759:        B(10001),
                   1760:        B(10010),
                   1761:        B(10100),
                   1762:        B(11000),
                   1763:        B(0),
                   1764: 
                   1765:        B(00000),                       // 0xdb ロ
                   1766:        B(11111),
                   1767:        B(10001),
                   1768:        B(10001),
                   1769:        B(10001),
                   1770:        B(10001),
                   1771:        B(11111),
                   1772:        B(0),
                   1773: 
                   1774:        B(00000),                       // 0xdc ワ
                   1775:        B(11111),
                   1776:        B(10001),
                   1777:        B(10001),
                   1778:        B(00001),
                   1779:        B(00010),
                   1780:        B(00100),
                   1781:        B(0),
                   1782: 
                   1783:        B(00000),                       // 0xdd ン
                   1784:        B(11000),
                   1785:        B(00000),
                   1786:        B(00001),
                   1787:        B(00001),
                   1788:        B(00010),
                   1789:        B(11100),
                   1790:        B(0),
                   1791: 
                   1792:        B(00100),                       // 0xde ゛
                   1793:        B(10010),
                   1794:        B(01000),
                   1795:        B(00000),
                   1796:        B(00000),
                   1797:        B(00000),
                   1798:        B(00000),
                   1799:        B(0),
                   1800: 
                   1801:        B(11100),                       // 0xdf ゜
                   1802:        B(10100),
                   1803:        B(11100),
                   1804:        B(00000),
                   1805:        B(00000),
                   1806:        B(00000),
                   1807:        B(00000),
                   1808:        B(0),
1.1.1.4   root     1809: 
                   1810:        // ここから実際には 5x10 dot も混ざるが、現在はサポートしていない
                   1811: 
1.1.1.9   root     1812:        B(00000),                       // 0xe0 α
                   1813:        B(00000),
                   1814:        B(00001),
                   1815:        B(01101),
                   1816:        B(10010),
                   1817:        B(10010),
                   1818:        B(01101),
                   1819:        B(00000),
                   1820: 
                   1821:        B(01010),                       // 0xe1 a‥(Latin Small Letter A with Diaeresis)
                   1822:        B(00000),
                   1823:        B(01110),
                   1824:        B(00001),
                   1825:        B(01111),
                   1826:        B(10001),
                   1827:        B(01111),
                   1828:        B(00000),
                   1829: 
                   1830:        B(00000),                       // 0xe2 β (10dot)
                   1831:        B(00000),
                   1832:        B(01110),
                   1833:        B(10001),
                   1834:        B(11110),
                   1835:        B(10001),
                   1836:        B(11110),
                   1837:        B(10000),
                   1838: 
                   1839:        B(00000),                       // 0xe3 ε
                   1840:        B(00000),
                   1841:        B(01110),
                   1842:        B(10000),
                   1843:        B(01110),
                   1844:        B(10000),
                   1845:        B(01110),
                   1846:        B(00000),
                   1847: 
                   1848:        B(00000),                       // 0xe4 μ (10dot)
                   1849:        B(00000),
                   1850:        B(10001),
                   1851:        B(10001),
                   1852:        B(10001),
                   1853:        B(10011),
                   1854:        B(11101),
                   1855:        B(10000),
                   1856: 
                   1857:        B(00000),                       // 0xe5 σ
                   1858:        B(00000),
                   1859:        B(01111),
                   1860:        B(10010),
                   1861:        B(10001),
                   1862:        B(10001),
                   1863:        B(01110),
                   1864:        B(00000),
                   1865: 
                   1866:        B(00000),                       // 0xe6 ρ (10dot)
                   1867:        B(00000),
                   1868:        B(00000),
                   1869:        B(00000),
                   1870:        B(00000),
                   1871:        B(00000),
                   1872:        B(00000),
                   1873:        B(00000),
                   1874: 
                   1875:        B(00000),                       // 0xe7 g (10dot ver)
                   1876:        B(00000),
                   1877:        B(01111),
                   1878:        B(10001),
                   1879:        B(10001),
                   1880:        B(10001),
                   1881:        B(01111),
                   1882:        B(00001),
                   1883: 
                   1884:        B(00000),                       // 0xe8 √(?)
                   1885:        B(00111),
                   1886:        B(00100),
                   1887:        B(00100),
                   1888:        B(10100),
                   1889:        B(01000),
                   1890:        B(00000),
                   1891:        B(00000),
                   1892: 
                   1893:        B(00000),                       // 0xe9 ^(-1) (?)
                   1894:        B(00010),
                   1895:        B(11010),
                   1896:        B(00010),
                   1897:        B(00000),
                   1898:        B(00000),
                   1899:        B(00000),
                   1900:        B(00000),
                   1901: 
                   1902:        B(00010),                       // 0xea j (10dot ver)
                   1903:        B(00000),
                   1904:        B(00110),
                   1905:        B(00010),
                   1906:        B(00010),
                   1907:        B(00010),
                   1908:        B(00010),
                   1909:        B(00010),
                   1910: 
                   1911:        B(00000),                       // 0xeb ^x (?)
                   1912:        B(00000),
                   1913:        B(00000),
                   1914:        B(00000),
                   1915:        B(00000),
                   1916:        B(00000),
                   1917:        B(00000),
                   1918:        B(00000),
                   1919: 
                   1920:        B(00000),                       // 0xec ¢
                   1921:        B(00100),
                   1922:        B(01110),
                   1923:        B(10100),
                   1924:        B(10101),
                   1925:        B(01110),
                   1926:        B(00100),
                   1927:        B(00000),
                   1928: 
                   1929:        B(00000),                       // 0xed L= (U+26c0 だろうか?)
                   1930:        B(00000),
                   1931:        B(00000),
                   1932:        B(00000),
                   1933:        B(00000),
                   1934:        B(00000),
                   1935:        B(00000),
                   1936:        B(00000),
                   1937: 
                   1938:        B(00000),                       // 0xee n ̄(n マクロン?)
                   1939:        B(00000),
                   1940:        B(00000),
                   1941:        B(00000),
                   1942:        B(00000),
                   1943:        B(00000),
                   1944:        B(00000),
                   1945:        B(00000),
                   1946: 
                   1947:        B(01010),                       // 0xef o‥(Latin Small Letter O with Diaeresis)
                   1948:        B(00000),
                   1949:        B(01110),
                   1950:        B(10001),
                   1951:        B(10001),
                   1952:        B(10001),
                   1953:        B(01110),
                   1954:        B(00000),
                   1955: 
                   1956:        B(00000),                       // 0xf0 p (10dot ver)
                   1957:        B(00000),
                   1958:        B(10110),
                   1959:        B(11001),
                   1960:        B(10001),
                   1961:        B(10001),
                   1962:        B(11110),
                   1963:        B(10000),
                   1964: 
                   1965:        B(00000),                       // 0xf1 q (10dot ver)
                   1966:        B(00000),
                   1967:        B(01101),
                   1968:        B(10011),
                   1969:        B(10001),
                   1970:        B(10001),
                   1971:        B(01111),
                   1972:        B(00001),
                   1973: 
                   1974:        B(01110),                       // 0xf2 θ(?)
                   1975:        B(10001),
                   1976:        B(10001),
                   1977:        B(11111),
                   1978:        B(10001),
                   1979:        B(10001),
                   1980:        B(01110),
                   1981:        B(00000),
                   1982: 
                   1983:        B(00000),                       // 0xf3 ∞(?)
                   1984:        B(00000),
                   1985:        B(01010),
                   1986:        B(10101),
                   1987:        B(10101),
                   1988:        B(01010),
                   1989:        B(00000),
                   1990:        B(00000),
                   1991: 
                   1992:        B(00000),                       // 0xf4 Ω
                   1993:        B(01110),
                   1994:        B(10001),
                   1995:        B(10001),
                   1996:        B(10001),
                   1997:        B(01010),
                   1998:        B(11011),
                   1999:        B(00000),
                   2000: 
                   2001:        B(01010),                       // 0xf5 u‥(?)
                   2002:        B(00000),
                   2003:        B(10001),
                   2004:        B(10001),
                   2005:        B(10001),
                   2006:        B(10011),
                   2007:        B(01101),
                   2008:        B(00000),
                   2009: 
                   2010:        B(11111),                       // 0xf6 Σ
                   2011:        B(01000),
                   2012:        B(00100),
                   2013:        B(00010),
                   2014:        B(00100),
                   2015:        B(01000),
                   2016:        B(11111),
                   2017:        B(00000),
                   2018: 
                   2019:        B(00000),                       // 0xf7 π
                   2020:        B(00000),
                   2021:        B(11111),
                   2022:        B(01010),
                   2023:        B(01010),
                   2024:        B(01010),
                   2025:        B(10011),
                   2026:        B(00000),
                   2027: 
                   2028:        B(11111),                       // 0xf8 x ̄(?)
                   2029:        B(00000),
                   2030:        B(10001),
                   2031:        B(01010),
                   2032:        B(00100),
                   2033:        B(01010),
                   2034:        B(10001),
                   2035:        B(00000),
                   2036: 
                   2037:        B(00000),                       // 0xf9 y (10dot ver)
                   2038:        B(00000),
                   2039:        B(10001),
                   2040:        B(10001),
                   2041:        B(10001),
                   2042:        B(10001),
                   2043:        B(01111),
                   2044:        B(00001),
                   2045: 
                   2046:        B(00000),                       // 0xfa 千
                   2047:        B(00001),
                   2048:        B(01110),
                   2049:        B(00100),
                   2050:        B(11111),
                   2051:        B(00100),
                   2052:        B(00100),
                   2053:        B(00000),
                   2054: 
                   2055:        B(00000),                       // 0xfb 万
                   2056:        B(11111),
                   2057:        B(01000),
                   2058:        B(01111),
                   2059:        B(01001),
                   2060:        B(01001),
                   2061:        B(10001),
                   2062:        B(00000),
                   2063: 
                   2064:        B(00000),                       // 0xfc 円
                   2065:        B(11111),
                   2066:        B(10101),
                   2067:        B(10101),
                   2068:        B(11111),
                   2069:        B(10001),
                   2070:        B(10001),
                   2071:        B(00000),
                   2072: 
                   2073:        B(00000),                       // 0xfd ÷
                   2074:        B(00000),
                   2075:        B(00100),
                   2076:        B(00000),
                   2077:        B(11111),
                   2078:        B(00000),
                   2079:        B(00100),
                   2080:        B(00000),
                   2081: 
                   2082:        B(00000),                       // 0xfe space
                   2083:        B(00000),
                   2084:        B(00000),
                   2085:        B(00000),
                   2086:        B(00000),
                   2087:        B(00000),
                   2088:        B(00000),
                   2089:        B(00000),
                   2090: 
                   2091:        B(11111),                       // 0xff cursor
                   2092:        B(11111),
                   2093:        B(11111),
                   2094:        B(11111),
                   2095:        B(11111),
                   2096:        B(11111),
                   2097:        B(11111),
                   2098:        B(11111),
1.1.1.4   root     2099: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.