Gigamix Online

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

MSXの漢字ROMの互換性を調査する

 MSXは各社から発売されていましたが、漢字ROMにはどのくらい互換性があったのか調査します。また、MSX以外の他機種とテキストを交換する際の互換性についても検討しています。

https://p.gigamix.jp/devmsx/cg/kanjirom_title.png

分かっていること

 当方で確認できる環境で全ての文字を調査したところ、以下のような結果でした。

  1. MSXの漢字ROMは旧JIS(JIS C 6226、いわゆる78JIS)ベースだが、漢字部分は新JIS(83JIS)による字形の変更が実装されている
  2. シフトJISコード 81ADh~859Eh のうち旧JISでは定義されていなかった部分(主に非漢字部分)に、新JISとは違う独自に実装された文字が含まれる
  3. 独自に実装された非漢字部分は東芝ワープロRupoシリーズと互換性があるものの、MSXにおいては共通の字形で揃えられており、MSX以外のPCでは採用実績が見当たらないため、MSXにおける事実上の規格化された文字群である可能性が高い。
  4. 独自実装と思われる拡張文字には「(CR1)」「(禁)」「(均)」や多種な網点等の文字が含まれており、一部の文字はUnicodeでも代用できない。
  5. なお、MSXの規格において、漢字ROMのどのコードがどの文字を表すかといったJIS規格のような仕様は明確に存在しない。

MSXと他機種とで互換性が失われる、独自実装の拡張文字群

 非漢字の赤と緑の文字について解説。この2色に含まれる文字は、MSX以外の他機種と互換性が失われます。

  • ■ 赤字:旧JIS(78JIS)では定義が無かった空きエリアだが、新JIS(83JIS)では定義されたために他機種との互換性が無い文字
  • ■ 緑字:旧JIS・新JISともに定義が無かった空きエリアだが、後の90JISで第3水準に定義されたものが含まれるために他機種との互換性が無い文字

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

 ここで気になるのが、独自実装された文字群が当方で確認できる環境(FS-4600F・FS-A1ST・MSXPLAYer・HALNOTE・MSXView)すべてで(デザインの誤差はあるものの)字形は同じでした。松下・ソニー東芝・三洋・アスキーHAL研究所各社ともども敢えて独自実装部分を揃えているのかもしれません。

 非漢字部分で独自実装されている文字群は大まかに「上部(81ADh~824Eh)」と「下部(8492h~859Fh)」に分かれます(表中の「モヤモヤポイント」を参照のこと)。上部の実装は共通化されている傾向が強い一方、下部の実装は各社で違いが見受けられます。

MSXとそれ以外との互換性を保つには

 以上のことから、表中の緑字と赤字の文字を避ければ他のレトロPCや2021年現在のPCとの互換性をほぼ保てます(エンコードシフトJISが適切です)。

 逆にMSXの実機との完全な互換性を確保するには、ROM側に緑字と赤字の実装(特にモヤモヤポイントの上部文字群の実装)が必須、ということのようです。

そしてパイオニアの漢字ROMにはMSX規格外のフォントが入ってる旨がマニュアルに書かれているなど無法っぷりがすごい。 — MSX研究所長 (@yoshimatsuTUQ) 2021年5月26日

 えっ!?

漢字ROM全文字ビュアー(閲覧プログラム)

 今回の調査で私が使用しました「漢字ROM全文字ビュアー」です。もしこれ以外の字形である機種をお持ちの方がいらっしゃいましたらぜひご確認&ご連絡ください。→ twitter@nf_ban

ブラウザで動きを確認する

webmsx.org

ダウンロード

BASICプログラム解説

  • 16PXVIEW.BAS…MSX標準漢字ROM(16pxフォント)のビュアー
  • 12PXVIEW.BAS…MSXView互換ROM(12pxフォント)のビュアー(参考出品) ※対象フォントROMが必要です
  • AUTOEXEC.DS2…READMEを表示します

 次々と漢字を表示します。BEEP音のあとに何かキーを押すと改ページ、Sキーを押すと画面をBSAVE形式で保存します。JIS第1水準で計13枚の画像、第2水準まで保存すると計16枚の画像となります。

【おことわり】画面上の文字はROMをダンプした結果ではなく、文字出力エンジンであるDMシステム2による結果ですので、ROMの実際の内容と違って表示される可能性がありますので予めご了承ください。

www.gigamix.jp

12pxフォントの調査

 MSXの標準漢字ROMは16pxフォントですが、MSXの低解像度に適したスモールフォントも存在します。

HALNOTE・MSXView

 HALNOTE及びMSXViewに付属されているスモールフォントです。12pxフォントと12×8pxフォントの2種類を利用できます。FS-A1GTに内蔵されています。12pxはJIS第1水準・第2水準を搭載、12×8pxはJIS第1水準のみ搭載。

https://p.gigamix.jp/devmsx/cg/kanjirom_halnote12_large.png

 12px・12×8pxの双方において、赤字・緑字のどちらも、非漢字部分にMSX共通の字形が実装されていますので、実機で作成したテキストに関しては互換性がほぼ保たれています(モヤモヤポイントの下部は互換性がありません)。

 このフォントは各種対応アプリで日本語表示が可能です。詳しくはブログ記事にて

gigamix.hatenablog.com

松下仕様12ドット漢字

 FS-4600F、FS-A1FM、通信モデムFS-CM1、プリンタカートリッジFS-PW1に内蔵されているスモールフォントです。MSX日本語BASICのCALL KANJI1・CALL KANJI3で対応しています。JIS第1水準のみ搭載。

https://p.gigamix.jp/devmsx/cg/kanjirom_matsushita12_large.png

 緑字は全く実装がなく、赤字はMSX共通の字形ではなく83JIS相当の字形となっています。

【細かすぎて伝わらない】松下仕様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日

 つまり、MSX以外の他機種との互換性は高いものの、標準漢字ROMのフォントが用いられる CALL KANJI0・CALL KANJI2 と、松下仕様の12ドット漢字が用いられる CALL KANJI1・CALL KANJI3 とでは同一機種でも字形が変わって表示されるということです。

かんたん手帳リフィルくん

 アスキーのシステム手帳リフィル用印刷アプリに付属されているスモールフォントです。JIS第1水準のみ搭載。

https://p.gigamix.jp/devmsx/cg/kanjirom_refill12_large.png

 緑字は全く実装がなく、赤字はMSX共通の字形ではなく83JIS相当の字形となっています。全角文字は松下仕様12ドット漢字と全く同じデザインですが、83JISで定義されている849Fh以降の各種罫線文字が含まれていません(注:確認プログラムのバグで表示できていないだけかもしれません)。

要町 as MSX-View(MSXView漢字カートリッジ互換ROM)

 MSXViewの付属漢字ROMカートリッジと互換性のある、フリーフォント「要町フォント」のROMイメージです。JIS第1水準・第2水準の漢字を搭載。

https://p.gigamix.jp/devmsx/cg/kanjirom_kanamecho12_large.png

 非漢字部分に90JISの文字が含まれており、漢字部分も90JISの改定が含まれますので、字形としては90JIS相当品と考えられます。他機種との互換性は非常に高くなる一方、赤字・緑字のどちらもMSX実機とは互換性がありません。

 「要町 as MSX-View」は、A to CさんのWebページでダウンロード可能です。→ http://www.yo.rim.or.jp/~anaka/AtoC/labo/labo32.htm

k12x8shn(MSXView漢字カートリッジ互換ROM)

 MSXViewの付属漢字ROMカートリッジと互換性のある、フリーフォント「東雲フォント(12px)」「k12x8(12×8px)」が組み合わせられているROMイメージです。JIS第1水準・第2水準の漢字を搭載。

https://p.gigamix.jp/devmsx/cg/kanjirom_k12x8shn12_large.png

 ここでは「東雲フォント(12px)」を取り上げますが、緑字は全く実装がなく、赤字はMSX共通の字形ではなく83JIS相当の字形となっています。なお「k12x8」も83JIS相当の字形となっています。

 「k12x8shn」は、門真なむさんのWebページでダウンロード可能です。→ https://littlelimit.net/viewfont.htm

こぼれ話

漢字ROMの源流はどこなのか

テクハンやデータパックのI/Oマップにもその名残が…。 pic.twitter.com/BGxE2hvNV1 — ごりぽん (@goripon_tw) 2021年5月26日

 MSXの漢字ROMは東芝の意向が強く働いた、という見解があります。松下製品に搭載された漢字ROMのICは東芝製、とのこと。東芝仕様の漢字ROMがそのまま規格化されたようです。

 私が分からないのは、東芝仕様をMSXの規格として取り込む際、JIS規格(JIS X 9051-1984「表示装置用16ドット字形」)のような「コードと文字の意味付け」を含んでいたのか?ということです。例えば旧JISの空きエリアの一つ「81F9hはマル禁マークにしよう」というような。非漢字部分の共通化されているかもしれない独自実装の文字が実は或るメーカーによっては字形が異なるかもしれない、という可能性を未だ捨て切れません。

https://t.co/KyKVHQhcPz このサイトによると、FS-A1Fの漢字ROMはTC531000AP(マスク番号6616)でMSX-Writeと同一らしいです。HX-33/MSX-WriteIIの漢字ROMであるTC531000P/CP/AP(マスク番号0071)からの拡張からなのかがわかれば、MSX独自拡張文字(?)の由来の手がかりにはなるかと思います。 — たけがみりう@Nice boat. (@RyuTakegami) 2021年5月1日
TC531000CP-0071は手元に吸出し済みの状態であるから画像化すれば良いのね?ちょっと気になったことがあるのでちょっと作業してみるけど… — SASANO Takayoshi (@uaa) 2021年5月4日
レイアウトが全然違うので比較が難しくなっていますけど、こっちがJW-R50FIIの16×16部分(こちらも意図的に縮小しています)。/\の部分はMSX仕様になっていないと記憶してるんだけど、実際どうだったっけか…? pic.twitter.com/wDZx4ZYHnx — SASANO Takayoshi (@uaa) 2021年5月4日

 東芝製の漢字ROMはワープロ「Rupo」シリーズで採用されたものと同等のようです。ワープロが先にあり、MSXへ転用された可能性が高い。

今後作成するフリーフォントの互換ROMは、どこに合わせるべきなのか

個人的にはJIS2004/2012字形とかJIS第三水準の非漢字部分とか…イマドキの仕様を含んだMSX向け漢字ROMを作る方が良いんじゃないのって気がする。 — SASANO Takayoshi (@uaa) 2021年5月4日

 私も、今から漢字ROMイメージを作るのであればJIS2004/2012字形とかイマドキの規格でいいんじゃないかと思います。もちろん後述の「実機と互換性のある漢字フォント」も組み込めば完璧とは思うのですが。

 で、問題なのは、MSXView互換の漢字フォントのほうでして。

MSX-View用漢字ROMって第二水準のグリフの並びがバグってたりするんですが、あれを直すべきかどうかって問題ありますよね。ソフト側で漢字ROMのバグを意識しているならバグを残した並びにしないといけないし、そうでなければ正しい並びに直さないといけないし…どうするのかな? — SASANO Takayoshi (@uaa) 2021年5月4日

となると対処としては… ・純正相当でバグ無しROMの仕様(ヘッダ文字列)を定めてそれにプログラム側で対応する ・(さっき書いたように)ROMの側で対処コード有無に関係なく使えるようフォントデータを配置する …のどちらかだけど、すでにメンテされてない対応アプリを考慮すると後者が無難かも? — ごりぽん (@goripon_tw) 2021年4月26日

うーんダメか。結構派手にズレてたorz。両用は無理ですね。 pic.twitter.com/VwLvyhwlU8 — ごりぽん (@goripon_tw) 2021年4月27日

 MSXViewの純正ROMには、一部文字のデータ位置が間違って格納されているバグがあります。FS-A1GT内蔵のROMも該当します。対して「要町 as MSX-View」「k8x12shn」のように新しく開発された互換フォントROMでは第2水準の漢字データが追加されることに加え、このバグが修正されています。

 純正ROMを「旧仕様」、互換ROMを「新仕様」と呼ぶことにすると、ROMが旧仕様の場合は一部文字の表示処理をソフトウェア側で補正する必要があり、Viewフォント対応の各種アプリは既にそのように実装されています。

MSXViewのバグについてはモノは既に出回っているので結局ソフト側の対応が必要で、ソフト側の対応フローも既にあって各アプリが実装済(そして作者はフェードアウト気味でソフト改修が見込めない)なので、ROMの実装でバグ解消するなら要町の字形に準拠した新仕様のROMでリリースするのが得策かと。 — Takashi Kobayashi (@nf_ban) 2021年5月4日

なるほど……。となると、やはり12×8の第二水準を機械的な変換で埋めて、

 新仕様向けの互換ROMについてはイマドキの規格(90JIS以降)で作成して良いと思っています。逆に、実機との互換性を重視する旧仕様向けの互換ROMを新規作成する場合は以下の要件を満たすべきと考えます。

  1. 文字体系は旧JIS(漢字部分は新JIS)に準拠し、上記の表のようにMSX特有の独自文字群を実装する
  2. 一部文字のバグを逆算して実装する

独自実装された文字をUnicodeへ代用する

 Unicodeでは何のコードが適切なのか…未来情報産業さんのブログにオピニオンがあります。

miraicorp.blog.fc2.com

miraicorp.blog.fc2.com

 ただし、Unicodeでは代用できない文字も含まれています。

MSXの実機と互換性のある漢字フォント作り

AtoCさんの漢字ROMイメージがOCMやMSXPLAYerへ実装されたもので間違いないと思います。jiskan16にはMSX固有の非漢字が含まれていないから足りない部分を手描きする必要があった、と。他のFPGAプロダクツの事情はちょっと分かりません。 — Takashi Kobayashi (@nf_ban) 2021年5月5日

 公式のMSXエミュレータであったMSXPLAYerに実装された漢字ROMは、A to Cさん製作の「漢字ROM image file for msx emulaters」であることは間違いないようです。この漢字ROMイメージはJISで規格化されたパプリックドメインのフォント「jiskan16(JIS X 9051-1984」をベースに、規格外の半角文字やMSX独自実装の文字を手描きで実装したようです。

 「漢字ROM image file for msx emulaters」は、A to CさんのWebページでダウンロード可能です。→ http://www.yo.rim.or.jp/~anaka/AtoC/labo/labo32.htm

あと、このROMイメージのライセンスについて、jiskan16は半角部分がソニー製で、無償で使えますがソニーのコピーライト表記が必要だったはずなので、手描きで置き換えることでライセンス表記を回避したんだと思います。が、これ自身(手描きを含んだjiskan16)に対するライセンス明示が無いんですね。 — Takashi Kobayashi (@nf_ban) 2021年5月5日

ライセンス表記さえちゃんとしていればSONYのフォントでも問題ないってことですか…(8x16.bdfの表記 https://t.co/OS3nCmCScg みたいに)。おそらく自由に使っても問題ないのでしょうが、なんとなくですがAtoCさんの追加部分に関してもライセンスをきちんと設定した方が良い気がします。 — SASANO Takayoshi (@uaa) 2021年5月5日

 jiskan16の全角文字部分はパブリックドメインです。手描きの半角文字とMSXの独自実装となる全角文字群はライセンスが永らく不明だったのですが、なんと2021年5月26日、Apache License 2.0の適用となりました!

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

 12pxのMSX独自実装の文字については、けっきょく自分で描きました。なんという本末転倒!!

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

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

参考文献:漢字ROMに関する情報サイト