MSXは各社から発売されていましたが、漢字ROMにはどのくらい互換性があったのか調査します。また、MSX以外の他機種とテキストを交換する際の互換性についても検討しています。
分かっていること
当方で確認できる環境で全ての文字を調査したところ、以下のような結果でした。
- MSXの漢字ROMは旧JIS(JIS C 6226、いわゆる78JIS)ベースだが、漢字部分は新JIS(83JIS)による字形の変更が実装されている。
- シフトJISコード 81ADh~859Eh のうち旧JISでは定義されていなかった部分(主に非漢字部分)に、新JISとは違う独自に実装された文字が含まれる。
- 独自に実装された非漢字部分は東芝製ワープロRupoシリーズと互換性があるものの、MSXにおいてはメーカー・機種問わず共通の字形で揃えられており、MSX以外のPCでは採用実績が見当たらないため、MSXにおける事実上の規格化された文字群(いわゆる機種依存文字)である可能性が高い。
- 独自実装と思われる拡張文字には「(CR1)」「(禁)」「(均)」や多種な網点等の文字が含まれており、一部の文字はUnicodeでも代用できない。
- なお、MSXの規格において、漢字ROMのどのコードがどの文字を表すかといったJIS規格のような仕様は明確に存在しない。
MSXと他機種とで互換性が失われる、独自実装の拡張文字群
非漢字の赤と緑の文字について解説。この2色に含まれる文字は、MSX以外の他機種と互換性が失われます。
- ■ 赤字:旧JIS(78JIS)では定義が無かった空きエリアだが、新JIS(83JIS)では定義されたために他機種との互換性が無い文字
- ■ 緑字:旧JIS・新JISともに定義が無かった空きエリアだが、後の90JISで第3水準に定義されたものが含まれるために他機種との互換性が無い文字
ここで気になるのが、独自実装された文字群が当方で確認できる環境(FS-4600F・FS-A1ST・MSXPLAYer・HALNOTE・MSXView)すべてで(デザインの誤差はあるものの)字形は同じでした。松下・ソニー・東芝・三洋・アスキー・HAL研究所や各社ともども敢えて独自実装部分を揃えているのかもしれません。
非漢字部分で独自実装されている文字群は大まかに「上部(81ADh~824Eh)」と「下部(8492h~859Fh)」に分かれます(表中の「モヤモヤポイント」を参照のこと)。上部の実装は共通化されている傾向が強い一方、下部の実装は各社で違いが見受けられます。
MSXとそれ以外との互換性を保つには
以上のことから、表中の緑字と赤字の文字を避ければ他のレトロPCや2021年現在のPCとの互換性をほぼ保てます(エンコードはシフトJISが適切です)。
逆にMSXの実機との完全な互換性を確保するには、ROM側に緑字と赤字の実装(特にモヤモヤポイントの上部文字群の実装)が必須、ということのようです。
えっ!?
漢字ROM全文字ビュアー(閲覧プログラム)
今回の調査で私が使用しました「漢字ROM全文字ビュアー」です。もしこれ以外の字形である機種をお持ちの方がいらっしゃいましたらぜひご確認&ご連絡ください。→ twitter@nf_ban
ブラウザで動きを確認する
ダウンロード
- Zipアーカイブファイル(69KBytes)https://www.gigamix.jp/ds2/download/ds2kanji_viewer.zip
- ディスクイメージファイル(720KBytes) https://www.gigamix.jp/ds2/download/ds2kanji_viewer.dsk
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の実際の内容と違って表示される可能性がありますので予めご了承ください。
16pxフォントの判定方法
第一水準・第二水準ともに指定された文字コードに対するデータが正しく取得できた状態で「漢字ROMが存在する」というルールとなっています。これを満たさないと漢字ROMとして各種アプリケーションが認識しません。
12pxフォントの調査
MSXの標準漢字ROMは16pxフォントですが、MSXの低解像度に適したスモールフォントも存在します。
HALNOTE・MSXView
HALNOTE及びMSXViewに付属されているスモールフォントです。12pxフォントと12×8pxフォントの2種類を利用できます。FS-A1GTに内蔵されています。12pxはJIS第1水準・第2水準を搭載、12×8pxはJIS第1水準のみ搭載。
12px・12×8pxの双方において、赤字・緑字のどちらも、非漢字部分にMSX共通の字形が実装されていますので、実機で作成したテキストに関しては互換性がほぼ保たれています(モヤモヤポイントの下部は互換性がありません)。
このフォントは各種対応アプリで日本語表示が可能です。詳しくはブログ記事にて
松下仕様12ドット漢字
FS-4600F、FS-A1FM、通信モデムFS-CM1、プリンタカートリッジFS-PW1に内蔵されているスモールフォントです。MSX日本語BASICのCALL KANJI1・CALL KANJI3で対応しています。JIS第1水準のみ搭載。
緑字は全く実装がなく、赤字はMSX共通の字形ではなく83JIS相当の字形となっています。
つまり、MSX以外の他機種との互換性は高いものの、標準漢字ROMのフォントが用いられる CALL KANJI0・CALL KANJI2 と、松下仕様の12ドット漢字が用いられる CALL KANJI1・CALL KANJI3 とでは同一機種でも字形が変わって表示されるということです。
なお、技術資料ならびにソースコード・実装例については、別ページにて解説しています。
かんたん手帳リフィルくん
アスキーのシステム手帳リフィル用印刷アプリに付属されているスモールフォントです。JIS第1水準のみ搭載。
緑字は全く実装がなく、赤字はMSX共通の字形ではなく83JIS相当の字形となっています。全角文字は松下仕様12ドット漢字と全く同じデザインですが、83JISで定義されている849Fh以降の各種罫線文字が含まれていません(注:確認プログラムのバグで表示できていないだけかもしれません)。
要町 as MSX-View(MSXView漢字カートリッジ互換ROM)
MSXViewの付属漢字ROMカートリッジと互換性のある、フリーフォント「要町フォント」のROMイメージです。JIS第1水準・第2水準の漢字を搭載。
非漢字部分に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水準の漢字を搭載。
ここでは「東雲フォント(12px)」を取り上げますが、緑字は全く実装がなく、赤字はMSX共通の字形ではなく83JIS相当の字形となっています。なお「k12x8」も83JIS相当の字形となっています。
「k12x8shn」は、門真なむさんのWebページでダウンロード可能です。→ https://littlelimit.net/viewfont.htm
こぼれ話
漢字ROMの源流はどこなのか
MSXの漢字ROMは東芝の意向が強く働いた、という見解があります。松下製品に搭載された漢字ROMのICは東芝製、とのこと。東芝仕様の漢字ROMがそのまま規格化されたようです。
私が分からないのは、東芝仕様をMSXの規格として取り込む際、JIS規格(JIS X 9051-1984「表示装置用16ドット字形」)のような「コードと文字の意味付け」を含んでいたのか?ということです。例えば旧JISの空きエリアの一つ「81F9hはマル禁マークにしよう」というような。非漢字部分の共通化されているかもしれない独自実装の文字が実は或るメーカーによっては字形が異なるかもしれない、という可能性を未だ捨て切れません。
東芝製の漢字ROMはワープロ「Rupo」シリーズで採用されたものと同等のようです。ワープロが先にあり、MSXへ転用された可能性が高い。
今後作成するフリーフォントの互換ROMは、どこに合わせるべきなのか
私も、今から漢字ROMイメージを作るのであればJIS2004/2012字形とかイマドキの規格でいいんじゃないかと思います。もちろん後述の「実機と互換性のある漢字フォント」も組み込めば完璧とは思うのですが。
で、問題なのは、MSXView互換の漢字フォントのほうでして。
MSXViewの純正ROMには、一部文字のデータ位置が間違って格納されているバグがあります。FS-A1GT内蔵のROMも該当します。対して「要町 as MSX-View」「k8x12shn」のように新しく開発された互換フォントROMでは第2水準の漢字データが追加されることに加え、このバグが修正されています。
純正ROMを「旧仕様」、互換ROMを「新仕様」と呼ぶことにすると、ROMが旧仕様の場合は一部文字の表示処理をソフトウェア側で補正する必要があり、Viewフォント対応の各種アプリは既にそのように実装されています。
新仕様向けの互換ROMについてはイマドキの規格(90JIS以降)で作成して良いと思っています。逆に、実機との互換性を重視する旧仕様向けの互換ROMを新規作成する場合は以下の要件を満たすべきと考えます。
- 文字体系は旧JIS(漢字部分は新JIS)に準拠し、上記の表のようにMSX特有の独自文字群を実装する
- 一部文字のバグを逆算して実装する
独自実装された文字をUnicodeへ代用する
Unicodeでは何のコードが適切なのか…未来情報産業さんのブログにオピニオンがあります。
ただし、Unicodeでは代用できない文字も含まれています。
MSXの実機と互換性のある漢字フォント作り
公式の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
A to Cさんの粋な計らいで、2021年5月26日、Apache License 2.0の適用となりました。
MSX共通非漢字部分のライセンスフリーフォントについては、以下のブログ記事をご参照ください。
参考文献:漢字ROMに関する情報サイト
- MSX日本語機能の歴史(Uniabisさん) https://uniabis.net/pico/msx/msxjp/
- 漢字ROM博物館(はせりんさん)http://haserin09.la.coocan.jp/kanji_rom.html ROMの型番一覧表
- 漢字袋「日本の漢字表」(安岡孝一 京都大学博士) http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/kanjibukuro/japan.html 旧JIS・新JISの一覧表
- CyberLibrarian「JIS X 0208コード表」(上綱秀治さん) https://www.asahi-net.or.jp/~ax2s-kmtn/ref/jisx0208.html
- シフトJISの闇を訪ねる旅 - Togetter(小形克宏さん) https://togetter.com/li/511107