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

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

unix.superglobalmegacorp.com

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