Gigamix Online

懐かしの8bitおもちゃPC「MSX」を骨までしゃぶり尽くそう。MSXの最新ニュース、ブログ。自作ソフトの配布などは公式サイトへ→ https://gigamix.jp/

MSXの漢字ROMを自作する!他機種には存在しない文字もフリーフォントで補いたい

【2025.02.19更新】MSXπ✨✨✨✨✨✨✨」を追加
【2025.02.19更新】16pxフリーフォント「ばぐまるフォント」を追加
【2025.02.19更新】漢字ROMのチェックサムデータを追加
【2021.07.06更新】初版公開

 MSXの漢字ROMに含まれている「JISの規格外だがMSXの各機種では共通っぽい非漢字部分の文字群(いわゆる機種依存文字)」について、JIS規格側と実機側との互換性をいまさら取るために手描きをしたライセンスフリーフォントを用いて、漢字ROMの自作データ化を目指します。

 なんという後ろ向きなソリューション!

MSX共通・漢字ROMの「非漢字部分」とは

 MSXの漢字ROMは旧JIS(JIS C 6226-1978、いわゆる78JIS)ベースですが、主に非漢字部分であるシフトJISコード 81ADh~859Eh には旧JISでは未定義なのに独自に実装された文字、かつ新JIS(JIS X 0208-1983、いわゆる83JIS)とは違う独自に実装された文字が含まれています。

https://p.gigamix.jp/devmsx/cg/kanjirom_non-kanji_large.png

 この漢字部分は東芝ワープロRupoシリーズと互換性があるものの、MSXにおいてはメーカー・機種問わず共通の字形で揃えられており、MSX以外のPCでは採用実績が見当たらないため、MSXにおける事実上の規格化された文字群(いわゆる機種依存文字)である 可能性が高いことが分かっています。

 漢字ROMの調査結果については、以下のブログ記事をご参照ください。 gigamix.hatenablog.com

 この「MSX共通の非漢字部分」は現代のUnicodeで代用できない文字も含まれていることから、いま新規でMSX用漢字フォントデータを作成する際に他のライセンスフリーフォントからそのまま移植して再現することができません。

 そこで、この文字群のライセンスフリーフォントを整備することとしました。

チェックサム用データも追加が必要

MSX漢字ROMのルール。①128個目の文字は先頭8バイトが特定の値で固定 ②7550個目は先頭8バイトの合計値(チェックサム)の下2桁が95h こうしないと正しく認識されず、表示が豆腐(白四角)になってしまう。文字は①\(JISコード2140)、②龠(737E)。これらの文字はデザインを変えられないね…#MSX pic.twitter.com/AQJAiqweNZ — ばぐすけ (@bugnaga) 2023年9月3日

 MSX用の漢字ROMフォントデータは各機種共通の非漢字部分データ部分の追加のほか、漢字ROMの存在チェックを判定するためのチェックサムデータの追加も必要です。これを怠るとMSXのシステムが漢字ROMの存在に気付かず文字を表示できません。

16px角のライセンスフリーフォント

漢字ROM image file for msx emulaters

 正解から言ってしまうと、A to Cさん作のライセンスフリーフォントデータ「漢字ROM image file for msx emulaters」は、MSX共通の非漢字部分データとチェックサムデータが含まれています。必要なデータを抜き出して任意のフォントへ移植することで、MSXの実機と同一の文字が表示可能な16pxのフォントデータが完成します。

↓ フォントのダウンロードはこちら ↓ www.yo.rim.or.jp

 「漢字ROM image file for msx emulaters」はその名の通り各種MSXエミュレータライセンスフリーの漢字ROMを導入する目的で開発されたフォントデータで、公式のMSXエミュレータMSXPLAYer」や「1chipMSX」にも採用されました。

 文字デザインのベースは「jiskan16(jiskan16.bdf)」で、jiskan16の全角文字部分はパブリックドメインにつき自由に使用することができます。jiskan16の半角文字部分は著作者がソニー社のため再配布時に著作権表示とライセンス条項の添付が必要となっているようです。1980~90年代当時はパソコンに限らずコンピュータ制御による日本語表示環境が芳しくなかったため、電子機器、インジケータ、電光掲示板、鉄道の行先表示機や発車標、プリンタなど多くの用途でjiskanシリーズのフォントが採用されました。

↓ jiskanについてはこちら ↓ ja.wikipedia.org

あの頃は無料のものにライセンスを明示するなんて発想がなかった…。 > jiskan16はパブリックドメインですが手描きの追加部分はライセンスが明示されていません 今更ですが、Apache License 2.0ということにします。@nf_ban — LD A,'akayaman';RRCA (@akayaman) 2021年5月26日

 jiskan16の全角文字の一部はMSXの漢字ROMと互換性がないこともあり、「漢字ROM image file for msx emulaters」ではjiskan16の半角文字と全角文字の非互換部分が作者による手描きフォントへ差し替えられています。そして2021年5月26日、このフォントデータはApache License 2.0の適用となりました。

 後述の「漢字FlashROMカートリッジ」へこのフォントデータをインストールすることで、実機向けのMSX用漢字ROMカートリッジを自作することもできます

ばぐまるゴシック

ばぐまるゴシック Ver.0.20を公開しました!https://debugx.net/BugSoft.aspx?Soft=BugMaruGothic 5年ぶりの更新です~。Windows、macOS用のファイルの他、X680x0版とMSX版も作ってみました。ぜひダウンロードしてみてください!#ばぐまるゴシック #ピクセルフォント #pixelfont pic.twitter.com/5PDQ1kT7uH
MSX2版はちょっと特殊で、エミュレータ用の漢字ROM形式で提供します。見慣れた画面が少し変わっておもしろい…#ばぐまるゴシック #MSX2 pic.twitter.com/J7FuUQKbpx — ばぐすけ (@bugnaga) 2024年5月6日

 ばぐ★NAGAさん(twitter@bugnaga)が開発した丸ゴシックのビットマップフォント。元々はX68000用のフォントデータですが、なんとMSX用漢字ROMのデータ形式でも配付が開始されました。MSX向けの特殊文字も搭載されています。

↓ フォントのダウンロードはこちら ↓ debugx.net

遅ればせながら…にがさんの「漢字FlashROMカートリッジ」にばぐ★NAGAさん(@bugnaga)の「ばぐまるゴシック」をインストールして漢字ROMの載ってないMSXの実機で使ってみたら無事認識しました。文字が丸くて新鮮だ!😳エミュレータ用漢字ROMデータの実機転用2例目。リリースありがとうございます👍 pic.twitter.com/qEtwzt4aQf — Takashi Kobayashi (@nf_ban) 2025年2月19日

 後述の「漢字FlashROMカートリッジ」へこのフォントデータをインストールすることで、実機でも使えます!

実機向け漢字ROMを作れる「漢字FlashROMカートリッジ」

 MSXエミュレータ用漢字ROMデータファイルをFlashROMへ書き込むと実機向けの漢字ROM拡張カートリッジとして使えるすごい同人ハードウェアが発売になりました!

【新入荷】にがHP様謹製「SG-MK3 OPLL増設基板」「似非SGROM」「漢字FlashROM(ケース入り)」「漢字FlashROM(基板のみ)」新入荷です!ヽ(´ー`)ノ これぞ同人ハードな感じですな!ヽ(´ー`)ノ 通販はこちら!https://www.kadenken.com/view/category/ct142 #akiba #アキバのお店 #MSX pic.twitter.com/JZ1GYxGpvy — 家電のHRDちゃん X ヽ(´ー`)ノエックス (@zan2zanjp) 2021年9月25日

↓ メーカーの「にがHP」さんはこちら ↓ niga2.sytes.net

12px角のライセンスフリーフォント

 12pxの全角非漢字部分のフォントは、けっきょく自分で描きました。なんという本末転倒!!

https://p.gigamix.jp/devmsx/cg/kanjirom_non-kanji_freefont_20210622.png

 一旦この内容でFIXとさせていただきます。私のデータもライセンスは Apache Licence 2.0 を適用します。どうぞご利用ください。

MSXの漢字ROM 非漢字領域の各社共通部分フリーフォント(12px, ver.4) ○○グラムと○○メートルの表記を現在の国際ルール(筆記体を用いない)に変更、グラムを「めがねg」へ変更&メートルの筆記体っぽさを少し残したのは、全角文字の「g」「m」と区別するため。 pic.twitter.com/iLdkrhPpYf — Takashi Kobayashi (@nf_ban) 2021年6月20日

実機向け漢字ROMを作れる「MSXπ✨✨✨✨✨✨✨」

 Rapsberry Piを用いてMSXの各種機能を再現する「MSXπ✨✨✨✨✨✨✨」カートリッジで、MSXの16pxフォントと12pxフォントを漢字ROMとして利用可能にするファームウェアが公開開始。

MSXπで標準漢字&松下12サイズ漢字&漢字ドライバーの複合ファームウェア作ってみました✨。松下モードはMSX1でもちゃんと使えるようです🔥。 pic.twitter.com/hByIn8VRBr — ピーガー伝説➋代 (@AOldfJaHcEmvAWC) 2025年2月18日

 16pxフォントはMSX標準の漢字ROMとして、12pxフォントは松下仕様の12ドット漢字ROMとして利用可能です。松下仕様の12ドット漢字ROMとは、松下電器(ナショナル・パナソニックブランド)のMSXハードウェアに実装されたメーカー独自の漢字ROMです。実機ではFS-4600FとFS-A1FMの2機種に内蔵、外付けカートリッジには通信モデムカートリッジFS-CM1が存在することが判明しています。

 一見すると松下仕様の漢字ROMの利用シーンは極めて限定的な印象を受けますが、MSX日本語BASIC(漢字ドライバ)で松下仕様12ドット漢字ROMが対応しています(CALL KANJI1 及び CALL KANJI3利用時)。

↓ MSXπ✨✨✨✨✨✨✨の購入はこちら ↓ auctions.yahoo.co.jp

【細かすぎて伝わらない】松下仕様12ドット漢字ROMとは、パナソニックの一部環境(FS-4600F、FS-A1FM、FS-CM1)に搭載されたROM。画面解像度が低いMSXでは16px角の標準漢字ROMより12px角が重宝する場面あり。また、漢字BASICの_kanji1と_kanji3でこのROMが利用される。文字の見え方が全然違うでしょ? pic.twitter.com/8fSJPVDd6U — Takashi Kobayashi (@nf_ban) 2020年7月20日

 松下仕様12ドット漢字ROMが存在する場合、日本語BASICでは松下仕様の漢字ROMから文字表示を行うため、存在しない場合(標準漢字ROMの16×16pxを12×16pxへ圧縮して表示)と比べてきれいな文字デザインで文字表示が可能です。日本語BASICはMSX2+以降の実機には標準搭載されており、MSX2以下の機種では日本語カートリッジ HBI-J1、日本語MSX-DOS2カートリッジの装着時に使用可能となります。

MSXπ✨✨✨✨✨✨✨。CX5Fで漢字basic。 pic.twitter.com/72p9927gSE — KS (@kickstate7) 2025年2月17日

 にわかに信じがたいのですが、日本語BASICはMSX1でも利用可能です。

フォント解説

 非漢字部分はの文字は番号0(G000)から93(G093)まで、全94文字あります。ここでは便宜上「Gコード」と呼びます。

https://p.gigamix.jp/devmsx/cg/kanjirom_non-kanji_freefont_20210622_2.png

 Gコードはこの絵の左上を起点(G000)として、右へ走査してゆきます。1文字ごとにカウントを増やしてゆきます。1行20文字で、右端まで走査した場合は1行下がってまた左端から右へ走査してゆきます。

 非漢字部分のシフトJISコードとGコードのデザイン割付の対比表は以下の通りです。

Shift_JIS Gコード 文字の意味 Unicode
81AD G000 U+3231 (PARENTHESIZED IDEOGRAPH STOCK)
81AE G001 U+3232 (PARENTHESIZED IDEOGRAPH HAVE)
81AF G002 U+2160 (ROMAN NUMERAL ONE)
81B0 G003 U+2161 (ROMAN NUMERAL TWO)
81B1 G004 'U+2162 (ROMAN NUMERAL THREE)
81B2 G005 U+2163 (ROMAN NUMERAL FOUR)
81B3 G006 U+2164 (ROMAN NUMERAL FIVE)
81B4 G007 U+2165 (ROMAN NUMERAL SIX)
81B5 G008 U+2166 (ROMAN NUMERAL SEVEN)
81B6 G009 U+2167 (ROMAN NUMERAL EIGHT)
81B7 G010 U+2168 (ROMAN NUMERAL NINE)
81B8 G011 U+2169 (ROMAN NUMERAL TEN)
81B9 G012 g(グラム) (不明)
81BA G013 m(メートル) (不明)
81BB G014 U+339D (SQUARE CM)
81BC G015 U+339C (SQUARE MM)
81BD G016 U+339E (SQUARE KM)
81BE G017 U+33A0 (SQUARE CM SQUARED)
81BF G018 U+33A1 (SQUARE M SQUARED)
81C0 G019 U+3396 (SQUARE ML)
81C1 G020 U+338E (SQUARE MG)
81C2 G021 U+338F (SQUARE KG)
81C3 G022 U+33B2 (SQUARE MU S)
81C4 G023 U+3239 (PARENTHESIZED IDEOGRAPH REPRESENT)
81C5 G024 U+33CD (SQUARE KK)
81C6 G025 U+2121 (TELEPHONE SIGN)
81C7 G026 U+2116 (NUMERO SIGN)
81C8 G027 U+3305 (SQUARE INTI)
81C9 G028 空白(カテゴリ不明) (不明)
81CA G029 U+3318 (SQUARE GURAMU)
81CB G030 U+334D (SQUARE MEETORU)
81CC G031 U+3322 (SQUARE SENTI)
81CD G032 U+3349 (SQUARE MIRI)
81CE G033 U+3336 (SQUARE HEKUTAARU)
81CF G034 U+3303 (SQUARE AARU)
81D0 G035 U+3326 (SQUARE DORU)
81D1 G036 U+3327 (SQUARE TON)
81D2 G037 U+3314 (SQUARE KIRO)
81D3 G038 U+3315 (SQUARE KIROGURAMU)
81D4 G039 U+3317 (SQUARE KIROWATTO)
81D5 G040 U+3357 (SQUARE WATTO)
81D6 G041 U+3351 (SQUARE RITTORU)
81D7 G042 U+332B (SQUARE PAASENTO)
81D8 G043 U+333B (SQUARE PEEZI)
81D9 G044 U+334E (SQUARE YAADO)
81DA G045 U+3333 (SQUARE HUIITO)
81DB G046 U+2460 (CIRCLED DIGIT ONE)
81DC G047 U+2461 (CIRCLED DIGIT TWO)
81DD G048 U+2462 (CIRCLED DIGIT THREE)
81DE G049 U+2463 (CIRCLED DIGIT FOUR)
81DF G050 U+2464 (CIRCLED DIGIT FIVE)
81E0 G051 U+2465 (CIRCLED DIGIT SIX)
81E1 G052 U+2466 (CIRCLED DIGIT SEVEN)
81E2 G053 U+2467 (CIRCLED DIGIT EIGHT)
81E3 G054 U+2468 (CIRCLED DIGIT NINE)
81E4 G055 U+2469 (CIRCLED NUMBER TEN)
81E5 G056 U+301A (LEFT WHITE SQUARE BRACKET)
81E6 G057 U+301B (RIGHT WHITE SQUARE BRACKET)
81E7 G058 U+3020 (POSTAL MARK FACE)
81E8 G059 U+260E (BLACK TELEPHONE)
81E9 G060 「🗀」のような記号(数学記号?) (不明)
81EA G061 U+222B (INTEGRAL)
81EB G062 U+221A (SQUARE ROOT)
81EC G063 「√」(ルート記号)の右隣に付随する横棒(数学記号?) (不明)
81ED G064 縦展開の箱の上半分 (不明)
81EE G065 縦展開の箱の中間部分 (不明)
81EF G066 縦展開の箱の下半分 (不明)
81F0 G067 円の上半分(U+25E0「◠」はなんか違う気がする) (不明)
81F1 G068 円の下半分(U+25E1「◡」はなんか違う気がする) (不明)
81F2 G069 横展開の箱の左半分 (不明)
81F3 G070 横展開の箱の中間部分 (不明)
81F4 G071 横展開の箱の右半分 (不明)
81F5 G072 円の左半分 (不明)
81F6 G073 円の右半分 (不明)
81F7 G074 ○の中にCR1 (不明)
81F8 G075 ○の中にCR2 (不明)
81F9 G076 ○の中に禁 (不明)
81FA G077 ○の中に均 (不明)
81FB G078 ○の中に↑ (不明)
81FC G079 ○の中に↓ (不明)
8240 G080 三角付き縦線素片 (不明)
8241 G081 U+25C2 (BLACK LEFT-POINTING SMALL TRIANGLE)
8242 G082 U+254C (BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL)
8243 G083 U+254D (BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL)
8244 G084 中黒(カテゴリ不明) (不明)
8245 G085 U+254E (BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL)
8246 G086 U+21E8 (RIGHTWARDS WHITE ARROW)
82F2 G087 斜線1 (不明)
82F3 G088 斜線2 (不明)
82F4 G089 点線縦 (不明)
82F5 G090 点線横 (不明)
82F6 G091 点線水玉 (不明)
83B7 G092 U+2FF0 (IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT)
83DD G093 網目 (不明)