Gigamix Online

懐かしの8bitおもちゃPC「MSX」を骨までしゃぶり尽くそう。MSXの最新ニュース、ブログ、自作ソフトの配布など。

DMシステム2:「ねこいらず」という当時の8bitパソコンで不要だったがMSXでは必要だった日本語表示技術のメモ

絶賛追記中

 拙作「DMシステム2」の各種ドライバをオープンソースで公開する作業の一環で、「ねこいらず」というフォントドライバを公開するにあたりフォントデータの構造を理解する必要があったので、解析結果を忘れないうちにメモしておきます。

「ねこいらず」とは?

 漢字ROM(というフォントデータを含んだIC)を搭載しないMSX2以降の機種で漢字混じりの日本語表示を行うため、JIS第1水準に準拠した12px角のフォントデータをVRAMの裏画面(10000h)へを配置し、日本語表示を行うソフトウェアです。漢字ROM要らずだから「ねこいらず」。

 やってることと言えば、アメリカ産のIBM/PCで「DOS/V」として日本語表示を行う技術(メモリにフォントデータを常駐してグラフィック画面へ日本語の文字を表示する手法)とほぼ同等です。

 作者はKICHIさん(お元気でしょうか?)。元々DMシステム2とは関係がなかった独立したソフトウェアでしたが、作者自らDMシステム2のフォントドライバAPIに合わせてリリースしてくださったのでした。

 なお「ねこいらず」はMSX向け漢字ROM相当のハードウェアやインターフェースをソフトウェアでエミュレートするものではありません。

 DMシステム2および「ねこいらず」「フォントドライバ」について詳しくはこちらをご覧ください。

www.gigamix.jp

「ねこいらず」ファイルフォーマット

 「ねこいらず」データファイル(KANJI3.GRP)は、以下のような構造を持ちます。

  • 65419 バイト…実データ量
  • 65412 バイト…BSAVEヘッダを抜いた実質データ量
  • うち2016バイト…半角文字(224文字分)※表示可能文字数は159文字
  • うち63396バイト…全角文字(3522文字分)

 なお、データファイルにヘッダや辞書の類は存在しません。

半角文字

「ねこいらず」半角フォントデータ仕様をようやく理解した。6×12pxの1文字9バイトで、6bit毎の折り返しだった(全角は12bit毎折り返しの18バイト)。8bitの折り返しでデザインを眺めてたから気が付かなかったのであった。これでようやくFONTX要町フォントでねこいらず互換フォントデータの準備が整う…😋 pic.twitter.com/fb1SAhZrHC — Takashi Kobayashi (@nf_ban) July 27, 2020

  • 半角文字のピクセル数は、6×12px。
  • フォントデータの0バイト目(データ先頭からのオフセット +0)から、1文字あたり9バイト(6bit折り返し×12行)格納。
  • 文字コード 0x20~0xFF の224文字分を連続して、計2016バイトのデータ量となります。
  • DMシステム2の日本語表示時は文字コードが「シフトJIS」で解釈されるため、本来であればシフトJISで表示できない1バイト目の領域(0x80~0x9Fと0xE0~0xFF)は使用できませんが、「ねこいらず」ではMSXの半角文字のデザインが無駄に入っています。データ領域を端折ると誤動作するので、224文字分の領域は確保しますが、実際に表示可能な半角文字数は159文字となります。

「ねこいらず」フォントの半角文字をよく見たら、シフトJISで表示できない1バイト目の領域(0x80~0x9Fと0xE0~0xFF)にMSXの半角文字のデザインが入ってる。全角文字の0x8140のデータが先頭から2016バイト目だから、半角224文字分のデータ量(9*224=2016)と計算が合う。んー、本来は無駄データだよね… pic.twitter.com/GncqFvKY1e — Takashi Kobayashi (@nf_ban) July 28, 2020

 ちなみに文字コード 0x7F も表示はできないがデータの領域は確保されている。データオフセットの計算を端折るためかな?

全角文字

旅行がなくなったので「ねこいらずフォント」の解析。全角文字は1文字18バイト。3バイトで2行分。2バイト目の左4bitと右4bitを上下に振分。FONTXのように横12pxで16bit確保する無駄が無い。シフトJISの未定義コードは除外されデータが詰められてる。半角文字はさっぱり…見えてるようで見えてない… pic.twitter.com/elS7CBOzPu — Takashi Kobayashi (@nf_ban) July 25, 2020

  • 全角文字のピクセル数は、12×12px。
  • フォントデータの2016バイト目(データ先頭からのオフセット +2016)から、1文字あたり18バイト(12bit折り返し×12行)格納。
  • 漢字(2965文字)および非漢字(557文字)を含む文字コード 0x8140~0x9872(「腕」)まで3418文字分連続して、計63396バイトのデータ量となります。
  • 規格はJIS C 6226(いわゆる旧JIS、78JIS)がベースになっています。第1水準の漢字(2965文字)は全て対応します。第2水準の漢字は非対応です。非漢字(557文字)はMSX標準の独自実装文字が含まれていますが新JIS(83JIS)以降の規格とは違っているため、互換性に気をつける必要があります。
  • シフトJISの領域外である文字コード(2バイト目が0x00~0x3F、0x7F、0xFD、0xFE、0xFF)はデータ領域が確保されずに詰められています(半角文字では領域があるのに!!)。
  • 旧JISと互換性が無い一部の文字にUnicodeで再現できない文字が含まれています。

非漢字部分の互換性について

https://p.gigamix.jp/ds2/cg/ds2kanji_nekoirazu_chrmap.png

 非漢字の赤と緑の文字について解説。

  • ■ 赤字:旧JIS(78JIS)では定義が無かった空きエリアだが、新JIS(83JIS)では定義されたために他機種との互換性が無い文字
  • ■ 緑字:旧JIS・新JISともに定義が無かった空きエリアだが、後の90JISで第3水準に定義されたものが含まれるために他機種との互換性が無い文字
  • ■ 薄字:ねこいらずフォントの中にフォントデータが存在しない文字(全く違う文字が表示されます)

 旧JISで未定義だった文字コード(赤字・緑字)は基本的にフォントデータそのものが存在しません(薄字になっています)が、MSXにおける事実上の規格化された独自実装の文字群は概ね含まれています。

 全角文字のデータ構造としては若いコードの順から18バイト毎に羅列されていますが、データが存在しないコードは詰められていますので注意が必要です。

 なお、赤字・緑字の2色に含まれる文字はMSX以外の他機種と互換性が失われます。MSXの漢字ROMに関する文字の互換性問題については、以下のブログ記事をご参照ください。

gigamix.hatenablog.com

全ての全角文字のデータオフセット対比表

 全ての全角文字のシフトJISコード(デザイン割付)とデータオフセット(先頭が+0000h)の対比表は以下の通りです。

 文字が複数ある列の文字列は、左端から1文字につき +18バイトのオフセットが追加されます。

 表中にある「G」から始まる数字は、MSX共通・非漢字部分の文字です。Unicodeで表示できない文字が含まれているため、番号0(G000)から93(G093)まで全94文字を「G」から始まる数字で表現しています。これらの文字に対するデザイン割付については、以下のブログ記事をご参照ください。

https://gigamix.hatenablog.com/entry/kanjirom-nonkanji-freefontgigamix.hatenablog.com

オフセット シフトJIS 文字の意味
07E0 8140  、。,.・:;?!゛゜´`¨^
0900 8150  ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\
0A20 8160 ~∥|…‥‘’“”()〔〕[]{
0B40 8170 }〈〉《》「」『』【】+-±×
0C4E 8180 ÷=≠<>≦≧∞∴♂♀°′″℃¥
0D6E 8190 $¢£%#&*@§☆★○●◎◇◆
0E8E 81A0 □■△▲▽▼※〒→←↑↓〓
0F78 81AD G000
0F8A 81AE G001
0F9C 81AF G002
0FAE 81B0 G003
0FC0 81B1 G004
0FD2 81B2 G005
0FE4 81B3 G006
0FF6 81B4 G007
1008 81B5 G008
101A 81B6 G009
102C 81B7 G010
103E 81B8 G011
1050 81B9 G012
1062 81BA G013
1074 81BB G014
1086 81BC G015
1098 81BD G016
10AA 81BE G017
10BC 81BF G018
10CE 81C0 G019
10E0 81C1 G020
10F2 81C2 G021
1104 81C3 G022
1116 81C4 G023
1128 81C5 G024
113A 81C6 G025
114C 81C7 G026
115E 81C8 G027
1170 81C9 G028
1182 81CA G029
1194 81CB G030
11A6 81CC G031
11B8 81CD G032
11CA 81CE G033
11DC 81CF G034
11EE 81D0 G035
1200 81D1 G036
1212 81D2 G037
1224 81D3 G038
1236 81D4 G039
1248 81D5 G040
125A 81D6 G041
126C 81D7 G042
127E 81D8 G043
1290 81D9 G044
12A2 81DA G045
12B4 81DB G046
12C6 81DC G047
12D8 81DD G048
12EA 81DE G049
12FC 81DF G050
130E 81E0 G051
1320 81E1 G052
1332 81E2 G053
1344 81E3 G054
1356 81E4 G055
1368 81E5 G056
137A 81E6 G057
138C 81E7 G058
139E 81E8 G059
13B0 81E9 G060
13C2 81EA G061
13D4 81EB G062
13E6 81EC G063
13F8 81ED G064
140A 81EE G065
141C 81EF G066
142E 81F0 G067
1440 81F1 G068
1452 81F2 G069
1464 81F3 G070
1476 81F4 G071
1488 81F5 G072
149A 81F6 G073
14AC 81F7 G074
14BE 81F8 G075
14D0 81F9 G076
14E2 81FA G077
14F4 81FB G078
1506 81FC G079
1518 8240 G080
152A 8241 G081
153C 8242 G082
154E 8243 G083
1560 8244 G084
1572 8245 G085
1584 8246 G086
1596 824F
15A8 8250 123456789
164A 8260 ABCDEFGHIJKLMNOP
176A 8270 QRSTUVWXYZ
181E 8281 abcdefghijklmno
192C 8290 pqrstuvwxyz
19F2 829F
1A04 82A0 あぃいぅうぇえぉおかがきぎくぐけ
1B24 82B0 げこごさざしじすずせぜそぞただち
1C44 82C0 ぢっつづてでとどなにぬねのはばぱ
1D64 82D0 ひびぴふぶぷへべぺほぼぽまみむめ
1E84 82E0 もゃやゅゆょよらりるれろゎわゐゑ
1FA4 82F0 をん
1FC8 82F2 G087
1FDA 82F3 G088
1FEC 82F4 G089
1FFE 82F5 G090
2010 82F6 G091
2022 8340 ァアィイゥウェエォオカガキギクグ
2142 8350 ケゲコゴサザシジスズセゼソゾタダ
2262 8360 チヂッツヅテデトドナニヌネノハバ
2382 8370 パヒビピフブプヘベペホボポマミ
2490 8380 ムメモャヤュユョヨラリルレロヮワ
25B0 8390 ヰヱヲンヴヵヶ
262E 839F Α
2640 83A0 ΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ
2760 83B0 ΣΤΥΦΧΨΩ
27DE 83B7 G092
27F0 83BF α
2802 83C0 βγδεζηθικλμνξοπρ
2922 83D0 στυφχψω
29A0 83DD G093
29B2 8440 АБВГДЕЁЖЗИЙКЛМНО
2AD2 8450 ПРСТУФХЦЧШЩЪЫЬЭЮ
2BF2 8460 Я
2C04 8470 абвгдеёжзийклмн
2D12 8480 опрстуфхцчшщъыьэ
2E32 8490 юя
2F0A 889F
2F1C 88A0 唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦
303C 88B0 芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷
315C 88C0 安庵按暗案闇鞍杏以伊位依偉囲夷委
327C 88D0 威尉惟意慰易椅為畏異移維緯胃萎衣
339C 88E0 謂違遺医井亥域育郁磯一壱溢逸稲茨
34BC 88F0 芋鰯允印咽員因姻引飲淫胤蔭
35A6 8940 院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓
36C6 8950 臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲
37E6 8960 荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴
3906 8970 英衛詠鋭液疫益駅悦謁越閲榎厭円
3A14 8980 園堰奄宴延怨掩援沿演炎焔煙燕猿縁
3B34 8990 艶苑薗遠鉛鴛塩於汚甥凹央奥往応押
3C54 89A0 旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶
3D74 89B0 臆桶牡乙俺卸恩温穏音下化仮何伽価
3E94 89C0 佳加可嘉夏嫁家寡科暇果架歌河火珂
3FB4 89D0 禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過
40D4 89E0 霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会
41F4 89F0 解回塊壊廻快怪悔恢懐戒拐改
42DE 8A40 魁晦械海灰界皆絵芥蟹開階貝凱劾外
43FE 8A50 咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣
451E 8A60 柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚
463E 8A70 角赫較郭閣隔革学岳楽額顎掛笠樫
474C 8A80 橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹
486C 8A90 叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥
498C 8AA0 刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官
4AAC 8AB0 寛干幹患感慣憾換敢柑桓棺款歓汗漢
4BCC 8AC0 澗潅環甘監看竿管簡緩缶翰肝艦莞観
4CEC 8AD0 諌貫還鑑間閑関陥韓館舘丸含岸巌玩
4E0C 8AE0 癌眼岩翫贋雁頑顔願企伎危喜器基奇
4F2C 8AF0 嬉寄岐希幾忌揮机旗既期棋棄
5016 8B40 機帰毅気汽畿祈季稀紀徽規記貴起軌
5136 8B50 輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇
5256 8B60 義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍
5376 8B70 却客脚虐逆丘久仇休及吸宮弓急救
5484 8B80 朽求汲泣灸球究窮笈級糾給旧牛去居
55A4 8B90 巨拒拠挙渠虚許距鋸漁禦魚亨享京供
56C4 8BA0 侠僑兇競共凶協匡卿叫喬境峡強彊怯
57E4 8BB0 恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響
5904 8BC0 饗驚仰凝尭暁業局曲極玉桐粁僅勤均
5A24 8BD0 巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近
5B44 8BE0 金吟銀九倶句区狗玖矩苦躯駆駈駒具
5C64 8BF0 愚虞喰空偶寓遇隅串櫛釧屑屈
5D4E 8C40 掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫
5E6E 8C50 訓群軍郡卦袈祁係傾刑兄啓圭珪型契
5F8E 8C60 形径恵慶慧憩掲携敬景桂渓畦稽系経
60AE 8C70 継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨
61BC 8C80 劇戟撃激隙桁傑欠決潔穴結血訣月件
62DC 8C90 倹倦健兼券剣喧圏堅嫌建憲懸拳捲検
63FC 8CA0 権牽犬献研硯絹県肩見謙賢軒遣鍵険
651C 8CB0 顕験鹸元原厳幻弦減源玄現絃舷言諺
663C 8CC0 限乎個古呼固姑孤己庫弧戸故枯湖狐
675C 8CD0 糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午
687C 8CE0 呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉
699C 8CF0 交佼侯候倖光公功効勾厚口向
6A86 8D40 后喉坑垢好孔孝宏工巧巷幸広庚康弘
6BA6 8D50 恒慌抗拘控攻昂晃更杭校梗構江洪浩
6CC6 8D60 港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔
6DE6 8D70 膏航荒行衡講貢購郊酵鉱砿鋼閤降
6EF4 8D80 項香高鴻剛劫号合壕拷濠豪轟麹克刻
7014 8D90 告国穀酷鵠黒獄漉腰甑忽惚骨狛込此
7134 8DA0 頃今困坤墾婚恨懇昏昆根梱混痕紺艮
7254 8DB0 魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐
7374 8DC0 座挫債催再最哉塞妻宰彩才採栽歳済
7494 8DD0 災采犀砕砦祭斎細菜裁載際剤在材罪
75B4 8DE0 財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾
76D4 8DF0 昨朔柵窄策索錯桜鮭笹匙冊刷
77BE 8E40 察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三
78DE 8E50 傘参山惨撒散桟燦珊産算纂蚕讃賛酸
79FE 8E60 餐斬暫残仕仔伺使刺司史嗣四士始姉
7B1E 8E70 姿子屍市師志思指支孜斯施旨枝止
7C2C 8E80 死氏獅祉私糸紙紫肢脂至視詞詩試誌
7D4C 8E90 諮資賜雌飼歯事似侍児字寺慈持時次
7E6C 8EA0 滋治爾璽痔磁示而耳自蒔辞汐鹿式識
7F8C 8EB0 鴫竺軸宍雫七叱執失嫉室悉湿漆疾質
80AC 8EC0 実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮
81CC 8ED0 社紗者謝車遮蛇邪借勺尺杓灼爵酌釈
82EC 8EE0 錫若寂弱惹主取守手朱殊狩珠種腫趣
840C 8EF0 酒首儒受呪寿授樹綬需囚収周
84F6 8F40 宗就州修愁拾洲秀秋終繍習臭舟蒐衆
8616 8F50 襲讐蹴輯週酋酬集醜什住充十従戎柔
8736 8F60 汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出
8856 8F70 術述俊峻春瞬竣舜駿准循旬楯殉淳
8964 8F80 準潤盾純巡遵醇順処初所暑曙渚庶緒
8A84 8F90 署書薯藷諸助叙女序徐恕鋤除傷償勝
8BA4 8FA0 匠升召哨商唱嘗奨妾娼宵将小少尚庄
8CC4 8FB0 床廠彰承抄招掌捷昇昌昭晶松梢樟樵
8DE4 8FC0 沼消渉湘焼焦照症省硝礁祥称章笑粧
8F04 8FD0 紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾
9024 8FE0 鐘障鞘上丈丞乗冗剰城場壌嬢常情擾
9144 8FF0 条杖浄状畳穣蒸譲醸錠嘱埴飾
922E 9040 拭植殖燭織職色触食蝕辱尻伸信侵唇
934E 9050 娠寝審心慎振新晋森榛浸深申疹真神
946E 9060 秦紳臣芯薪親診身辛進針震人仁刃塵
958E 9070 壬尋甚尽腎訊迅陣靭笥諏須酢図厨
969C 9080 逗吹垂帥推水炊睡粋翠衰遂酔錐錘随
97BC 9090 瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄
98DC 90A0 摺寸世瀬畝是凄制勢姓征性成政整星
99FC 90B0 晴棲栖正清牲生盛精聖声製西誠誓請
9B1C 90C0 逝醒青静斉税脆隻席惜戚斥昔析石積
9C3C 90D0 籍績脊責赤跡蹟碩切拙接摂折設窃節
9D5C 90E0 説雪絶舌蝉仙先千占宣専尖川戦扇撰
9E7C 90F0 栓栴泉浅洗染潜煎煽旋穿箭線
9F66 9140 繊羨腺舛船薦詮賎践選遷銭銑閃鮮前
A086 9150 善漸然全禅繕膳糎噌塑岨措曾曽楚狙
A1A6 9160 疏疎礎祖租粗素組蘇訴阻遡鼠僧創双
A2C6 9170 叢倉喪壮奏爽宋層匝惣想捜掃挿掻
A3D4 9180 操早曹巣槍槽漕燥争痩相窓糟総綜聡
A4F4 9190 草荘葬蒼藻装走送遭鎗霜騒像増憎臓
A614 91A0 蔵贈造促側則即息捉束測足速俗属賊
A734 91B0 族続卒袖其揃存孫尊損村遜他多太汰
A854 91C0 詑唾堕妥惰打柁舵楕陀駄騨体堆対耐
A974 91D0 岱帯待怠態戴替泰滞胎腿苔袋貸退逮
AA94 91E0 隊黛鯛代台大第醍題鷹滝瀧卓啄宅托
ABB4 91F0 択拓沢濯琢託鐸濁諾茸凧蛸只
AC9E 9240 叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹
ADBE 9250 単嘆坦担探旦歎淡湛炭短端箪綻耽胆
AEDE 9260 蛋誕鍛団壇弾断暖檀段男談値知地弛
AFFE 9270 恥智池痴稚置致蜘遅馳築畜竹筑蓄
B10C 9280 逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷
B22C 9290 註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖
B34C 92A0 帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹
B46C 92B0 腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍
B58C 92C0 賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃
B6AC 92D0 漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴
B7CC 92E0 亭低停偵剃貞呈堤定帝底庭廷弟悌抵
B8EC 92F0 挺提梯汀碇禎程締艇訂諦蹄逓
B9D6 9340 邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹
BAF6 9350 撤轍迭鉄典填天展店添纏甜貼転顛点
BC16 9360 伝殿澱田電兎吐堵塗妬屠徒斗杜渡登
BD36 9370 菟賭途都鍍砥砺努度土奴怒倒党冬
BE44 9380 凍刀唐塔塘套宕島嶋悼投搭東桃梼棟
BF64 9390 盗淘湯涛灯燈当痘祷等答筒糖統到董
C084 93A0 蕩藤討謄豆踏逃透鐙陶頭騰闘働動同
C1A4 93B0 堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳
C2C4 93C0 涜特督禿篤毒独読栃橡凸突椴届鳶苫
C3E4 93D0 寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那
C504 93E0 内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難
C624 93F0 汝二尼弐迩匂賑肉虹廿日乳入
C70E 9440 如尿韮任妊忍認濡禰祢寧葱猫熱年念
C82E 9450 捻撚燃粘乃廼之埜嚢悩濃納能脳膿農
C94E 9460 覗蚤巴把播覇杷波派琶破婆罵芭馬俳
CA6E 9470 廃拝排敗杯盃牌背肺輩配倍培媒梅
CB7C 9480 楳煤狽買売賠陪這蝿秤矧萩伯剥博拍
CC9C 9490 柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函
CDBC 94A0 箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪
CEDC 94B0 伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆
CFFC 94C0 搬斑板氾汎版犯班畔繁般藩販範釆煩
D11C 94D0 頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲
D23C 94E0 扉批披斐比泌疲皮碑秘緋罷肥被誹費
D35C 94F0 避非飛樋簸備尾微枇毘琵眉美
D446 9540 鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧
D566 9550 姫媛紐百謬俵彪標氷漂瓢票表評豹廟
D686 9560 描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓
D7A6 9570 頻敏瓶不付埠夫婦富冨布府怖扶敷
D8B4 9580 斧普浮父符腐膚芙譜負賦赴阜附侮撫
D9D4 9590 武舞葡蕪部封楓風葺蕗伏副復幅服福
DAF4 95A0 腹複覆淵弗払沸仏物鮒分吻噴墳憤扮
DC14 95B0 焚奮粉糞紛雰文聞丙併兵塀幣平弊柄
DD34 95C0 並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変
DE54 95D0 片篇編辺返遍便勉娩弁鞭保舗鋪圃捕
DF74 95E0 歩甫補輔穂募墓慕戊暮母簿菩倣俸包
E094 95F0 呆報奉宝峰峯崩庖抱捧放方朋
E17E 9640 法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽
E29E 9650 鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒
E3BE 9660 冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲
E4DE 9670 朴牧睦穆釦勃没殆堀幌奔本翻凡盆
E5EC 9680 摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾
E70C 9690 鱒桝亦俣又抹末沫迄侭繭麿万慢満漫
E82C 96A0 蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民
E94C 96B0 眠務夢無牟矛霧鵡椋婿娘冥名命明盟
EA6C 96C0 迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄
EB8C 96D0 孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻
ECAC 96E0 籾貰問悶紋門匁也冶夜爺耶野弥矢厄
EDCC 96F0 役約薬訳躍靖柳薮鑓愉愈油癒
EEB6 9740 諭輸唯佑優勇友宥幽悠憂揖有柚湧涌
EFD6 9750 猶猷由祐裕誘遊邑郵雄融夕予余与誉
F0F6 9760 輿預傭幼妖容庸揚揺擁曜楊様洋溶熔
F216 9770 用窯羊耀葉蓉要謡踊遥陽養慾抑欲
F324 9780 沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪
F444 9790 乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢
F564 97A0 裏裡里離陸律率立葎掠略劉流溜琉留
F684 97B0 硫粒隆竜龍侶慮旅虜了亮僚両凌寮料
F7A4 97C0 梁涼猟療瞭稜糧良諒遼量陵領力緑倫
F8C4 97D0 厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令
F9E4 97E0 伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦
FB04 97F0 歴列劣烈裂廉恋憐漣煉簾練聯
FBEE 9840 蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼
FD0E 9850 榔浪漏牢狼篭老聾蝋郎六麓禄肋録論
FE2E 9860 倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀
FF4E 9870 湾碗腕

こぼれ話

で、なんでこんなことが必要だったかと言うと

 今ではにわかに信じがたい話ですが、MSX2のリリース時点(1985年)では漢字混じりの日本語表示をハードウェア側で行う環境が整っていませんでした。漢字ROMの部品が高価なため、コストアップを嫌ったメーカーは安価な機種で漢字ROMを搭載しませんでした。まぁMSXの場合ANKコードのGRAPH文字(日月火水木金土・大中小・年月日・時分秒)は表示できましたけど、文字数が全然足りないわけです。

 1987年に29800円で発売された超低価格のMSX2(FS-A1, HB-F1)は当時爆発的に普及しましたが、もちろん漢字ROMは非搭載です。漢字ROMはMSX2の時点ではオプション(周辺機器)の扱いです。FDD搭載のモデルでも漢字ROMが搭載されないケースがあり、「VRAMを128KB搭載しているが漢字ROMは利用できないMSX2」という最低限なハードウェアスペックがMSXの市場に溢れました

 日本産のいわゆる御三家と呼ばれた8bitPCやPC-9801は漢字ROMが当然のように搭載されていましたし、実用ではなくゲーム用途ならMSXでも漢字混じりの文字表示がほとんど限定的(メーカー側が予め制御できる程度に留め、アプリケーション毎にフォントを内蔵して解決した)ですから、MSXユーザーの中でもそんな苦労の経験ない人のほうが圧倒的に多いですが、MSXで日本語を表示しようとしたソフトウェアの開発は…それはそれはご苦労されたようです。

 「ねこいらず」使用時は裏のVRAM 64KBがまるまるフォントデータで埋め尽くされるので、これをゲーム用途へ活用するのは難しいのでした。DMシステム2ではVRAMではなくMSX-DOS2のマッパーRAM(拡張メモリ)へフォントデータを配置できる「マッパーRAM版のフォントドライバ」も開発されたので、VRAMが足りない問題は多少解決しました。