Gigamix Online

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

FS-PW1に松下仕様12ドット漢字ROMは載っていないんじゃないか説

 風の噂で聞きました。FS-PW1はワープロパソコンFS-4600F相当のワープロソフト「MSXワープロⅢ」が搭載されているので、FS-4600Fに搭載されている「松下仕様12ドット漢字ROM」がFS-PW1にも載っているのではないか?と。

 当方が分かる範囲で検証結果をまとめていますが、現在有力な説は、FS-PW1には松下仕様の12ドット漢字ROMが搭載されていない です。

 「松下仕様12ドット漢字ROM」については、こちらの記事で解説しています。

gigamix.hatenablog.com

https://www.msx.org/wiki/images/thumb/6/67/Fspw1c.jpg/740px-Fspw1c.jpg

FS-PW1に搭載されている機能

  • ワープロソフト「MSXワープロⅢ」
  • MSX-JE(日本語変換機能)
  • MSX標準 漢字ROM(16px角, JIS第一水準のみ)
  • 印刷用 24ドット漢字ROM(24px角)※プリンタ側に存在

FS-PW1を分解して解析

ヤフオクで落札したFS-PW1が届いたので腑分け。TC531000AP-6616は第一水準確定、μPD23C2000C-183やMB831000-340も漢字ROMっぽいけど詳細不明、サブ基板の方はMEIの型番ルールだし多分ワープロソフトのROMかな。1000が1Mbit、2000が2Mbit、と思われるので漢字ROM全体で4Mbit(512KB)かな? pic.twitter.com/4a0QdUqCUc — ごりぽん (@goripon_tw) 2021年10月18日

 「似非RAMDisk MAXIMUM」「漢字FlashROM」等のMSX用同人ハードで知られるにがHPさんから寄せられた見解も交えて解説します。

 FS-PW1に実装されているROMを全部引っこ抜いて内容を検証した内訳は次の通りです。

IC名 容量 型番 用途
IC102 128kB DA531P66616-0 MSX標準 漢字ROM 16×16px
IC109 256kB D23C2000C-183 熟語辞書
IC107 128kB 831000-20 340 8A 熟語辞書
IC115 128kB DA1024D0359R 8C2 A1 ワープロソフト
IC114 128kB DA1024D0358R 8D3 A4 ワープロ(16kB) + 名刺(48kB) + 連文節(32kB) + 単漢字(32kB)

usbsecretbase.michikusa.jp

ワープロソフト

 FS-PW1のワープロソフトは、サブ基板のメーカー不明のIC114「DA1024D0358R」とIC115「DA1024D0359R(1Mbit ROM)」に入っています。ROMが番号が通し番号になっていますので、組で2Mbit ROMとして使う前提と思われます。

 ワープロソフトはIC115がROMヘッダ付きで、ワープロソフトのメニュー等の文字列が確認できました。IC114がヘッダなしですのでIC115側が前半バンク、IC114が後半バンクと思われます。IC114の内容を見ると最後の32kBは単漢字変換ソフトであることがヘッダから読み取れました。よってこれらはフォントROMでないことは確定です。

熟語辞書

 FS-PW1の熟語辞書はIC109が前半256kBで「合」~「習志野市」の熟語が入り、IC107が後半128kBで「ならず者」~「腕白」まで入っていました。システムからは384kB連続したバンクとして見えるのだろうと思います。

 384kBytesの熟語ROMを入れるのに当時は512kBのROMが高価であったため、256kB+128kBで組み合わせるのがコストや実装面積で合理的という判断があったのかもしれません。

MSX標準 漢字ROM

 FS-PW1のMSX標準漢字ROMは「DA531P6616」と刻印されているもの(ROMの型番としては「TC531000AP-6616」=東芝製1MbitのマスクROM)だそうで、1Mbitの容量では第一水準しか入らないようです。

usbsecretbase.michikusa.jp

 28pパッケージのマスクROMには最大1Mbitしか入らず、2Mbit以上のものは必ず32p以上のパッケージになります。FS-PW1にはNECの40p 4Mbit ROMのuPD23C2000Cが使われていますが、この時代には2MbitのROMとして40pの8/16bit共用のものが利用しやすかった(32pパッケージはなかったのかも)のだろうと思います。

 漢字ROMは標準のものも松下12ドットのものも、いずれもハードウェア的にはアドレス線の下位5bitにカウンタを接続する必要があり、プログラム用のROMとは独立してアドレス線が制御されています。このカウンタは双方の漢字ROMシステムを同時に使わない前提で共用にできますから、同じゲートアレイで制御するのが合理的で、FS-4600Fでは通常の漢字ROMと12ドットROMが隣り合って実装されていることから考えて、そのように制御されている可能性があります。

 ちなみに「DA」の型番が付いたICは松下がICに付ける部品番号で、他のROMやゲートアレイにも付いているものがあるそうです(JIS第一水準漢字ROMはFS-A1F、FS-4600F、FS-PW1の3機種においていずれも「DA531P6616」が使われています)。松下のサービスマニュアルに品番として掲載されているものなので、DA品番が共通しているものはROM内容も共通であると推測されます。

印刷用のフォントROM

 印刷用フォントROMはカートリッジには含まれませんが、これはプリンタ側の画像で512kBのマスクROMを確認しています。

松下仕様12ドット漢字ROMがFS-PW1には搭載されていない根拠

 ROM内容を精査しても漢字ROMは1Mbitの第一水準16ドットフォントしか搭載されておらず、取説の容量表記は誤記であることが裏付けられました。それ以外は説明書の容量通りと考えて矛盾はありません。

マニュアルは誤植でした

PW1のマニュアルに記載されている表示用漢字ROMが256KBってのは第1水準にしては2倍の容量なんですよね…。もしかして多機種とアクセス方法が違うとか… pic.twitter.com/xI3X3Wq0Vu — レイドオン・バンゲリング・ベイ(バンゲリング帝国そろそろ解雇) (@bungeling01) 2021年10月8日

A1FMのマニュアルには 12ドットフォントの表記がありました。 pic.twitter.com/WA7EpMLxVP — レイドオン・バンゲリング・ベイ(バンゲリング帝国そろそろ解雇) (@bungeling01) 2021年10月6日

 FS-PW1のマニュアルには「表示用漢字ROM」の容量が256KBytesと書いてあります。これが第二水準まで対応する「MSX標準の16px漢字ROM」だけであればその容量通りとなりますが、FS-PW1の漢字ROMは東芝製1MbitのマスクROMだそうで、1Mbitの容量では第一水準の内容しか入らないためにこれは誤報、と判断しました。

なぜFS-PW1を解析することになったのか

 松下電器パナソニック)はMSXのハードウェアでワープロを実現するためのソリューションを多数展開していました。その折、低解像度であったMSXの画面に多くの文字を増やすために考案された(と推測される)「松下仕様12ドット漢字ROM」という12×12pxのスモールフォントが内的(松下以外のメーカーには非公開)に活用されていました。

gigamix.hatenablog.com

 ところがこのスモールフォントROMはMSXの拡張I/Oについて公表されていた仕様から外れた松下独自の設計となっており、接続する他のハードウェアによってはI/Oの衝突が発生して誤動作や故障を起こす 危険性が2021年の今頃になって発覚しました

 にがHPさんの同人ハードウェア「漢字FlashROM」が一部環境で不具合が発生する原因がこの松下仕様12ドット漢字ROMである疑いがあり、ROMの仕様を再確認する必要がありました。松下仕様12ドット漢字ROMを本体に内蔵しているMSX2の実機「FS-4600F」のワープロソフトの相当品がFS-PW1にも搭載されていたため、フォントROMの存在の可能性が指摘されていました。

本体を入手してROMを解析する以前の根拠

 本体を解析する前までの根拠として、以下の検証結果が挙げられました。

  • FS-PW1では、拡張I/Oポート40hに FEh を書いても 8 を書いても、他の拡張I/Oポートに動きが見られない。他機種では何らかの拡張I/Oポートに 0 が返ります。
  • 他機種では適正な手順で漢字ROMからデータを取り出すことが可能になるプログラムが、FS-PW1ではデータを取り出せない(無効を意味するFFh=255が返る)。
  • 他の機種で採用されている松下仕様のROMと思われる「354 BA」のICはFS-PW1には存在しませんし、機能が統合されたようなROMは存在しないようにも見えます。
  • FS-PW1の基板に実装されているICの部品を精査しても、松下仕様のフォントを搭載できる余地が考えられない。

拡張I/Oから松下仕様12ドット漢字ROMをイネーブルできない

A1 + PW1の実行結果ですが…… pic.twitter.com/1IhxhL5aTy — レイドオン・バンゲリング・ベイ(バンゲリング帝国そろそろ解雇) (@bungeling01) 2021年10月6日

いやー。これ、ROM有効化の手順が他と違うのかな。FS-PW1に松下仕様12ドット漢字ROM搭載は、誤報かもしれない… — Takashi Kobayashi (@nf_ban) 2021年10月8日

 他の3機種(FS-4600F、FS-A1FM、FS-CM1)ではイネーブルできる手順で、FS-PW1ではイネーブルできません。

1枚目の右下の「354 BA」と書かれたICが松下仕様12ドット漢字ROMのようです。FS-4600Fにも搭載されています。FS-A1FMは複数機能が1チップ化されてるので、これではない。FS-PW1は搭載されていないらしく。 — Takashi Kobayashi (@nf_ban) 2021年10月9日

 FS-PW1は他機種とは違うイネーブル手順が存在するのかもしれませんが、けっきょくその方法が分かりません。この機種だけ特別な手順なのでしょうか?そんなの効率が悪くなりませんか。可能性は低いと思います。

松下仕様12ドット漢字ROMのフォントビュアーが利用できない

松下仕様の漢字フォントビュアーのプログラムが完成しました。もしお時間ありましたら、FS-PW1やFS-A1FMで表示できるかお試しいただきたく。🙏https://t.co/fCxGtFfyDr — Takashi Kobayashi (@nf_ban) 2021年10月8日

面白いですねぇ (⌒,_ゝ⌒) これはA1FMの実行結果です pic.twitter.com/pqezG5cxxX — レイドオン・バンゲリング・ベイ(バンゲリング帝国そろそろ解雇) (@bungeling01) 2021年10月8日

A1F + PW1の実行結果 pic.twitter.com/5zs3eapPyG — レイドオン・バンゲリング・ベイ(バンゲリング帝国そろそろ解雇) (@bungeling01) 2021年10月8日

PW1、A1FMと同じコード表示ですが出ません( ̄▽ ̄;) やはりROM積んでいないとか……? pic.twitter.com/lJENZPtGIK — レイドオン・バンゲリング・ベイ(バンゲリング帝国そろそろ解雇) (@bungeling01) 2021年10月8日

 フォントがイネーブルできないんだから漢字フォントも表示できないのは当たり前。

関連情報へのリンク

usbsecretbase.michikusa.jp

Panasonic FS-PW1 - MSX Wiki

松下仕様12ドット漢字ROM 解析資料 by ごりぽん+α

 「松下仕様の12ドット漢字ROM」という、MSX標準の漢字ROMではないパナソニック独自の12pxスモールフォントというものがかつて存在していました(当クラブは省略して「CM1フォント」と呼んでいました)。低画質のMSXかつフリーフォントという概念が無かった時代において、ピクセル数の少ない漢字フォントというのは当時はたいへん貴重なものでした。

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

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

 当クラブではDMシステム2のフォントドライバにて対応した実績がありますが、その開発中に用いた解析資料がこの度見つかりましたので、作者のごりぽんさんの許可を得て当ブログにて公開するものです。なお、最近の動作検証で判明した事実に関しては赤字で追記してゆきます。

0.初めに

 このデータは,ごりぽんが独自に漢字BASIC等を解析した結果に加え2021年10月に実施したさらなる検証を追加した結果によるものです.松下電気産業への問い合わせはご遠慮ください.

0.1.対応ハードウェア

 松下仕様の12ドット漢字ROMを搭載しているハードウェアは以下のものが判明しています。他にもあるかもしれません。

本体内蔵系

  • FS-4600F(MSX2)本体
  • FS-A1FM(MSX2)本体

カートリッジ系

  • FS-CM1 通信モデムカートリッジ

1.I/Oポート

 松下仕様12ドット漢字ROMは,以下のI/Oに接続されています.

I/O R/W 用途
40H R/W 拡張I/Oセレクト
41H R 使徒不明(漢字BASICでは使用されている)
42H W 漢字ROMイネーブル(FS-4600F・FS-A1FM)
bit0 第一水準漢字(ON=1)
bit1 第二水準漢字(ON=1)
47H W 漢字番号上位8bit
48H W 漢字番号下位8bit
49H R フォントデータ

2.フォントデータの読み出し

2.0.ハードウェアの存在確認

カートリッジ系(FS-CM1)の場合

ポート40hに書く数値 読むポート 結果
F7h 40h 第一水準 8=存在する, FFh=存在しない
F7h 41h 第二水準 8=存在する, FFh=存在しない

 ポート40hに F7h を書き込んだあとポート41hを読むと、第二水準のROMが存在する場合は 8 が返りますが、第二水準のROMというものは実在しないようですので、ポート41hのレジスタ不定と思われます(FS-CM1の場合はFFh(255)が返ります)。

本体内蔵系(FS-4600F・FS-A1FM)の場合

 後述の漢字フォントの読み出し手順に準じて、実際にフォントデータが読めるかどうかで存在を確認します。

2.1.漢字フォントの読み出し方

・カートリッジ系(FS-CM1内蔵)の場合

 メーカーコードF7h(松下のメーカーコード08hではありません)の拡張I/Oを選択してから,漢字番号を設定してフォントデータを読み出します.

 この場合,使う前後で拡張I/Oセレクトが変化すると,他の拡張I/Oを使用するプログラムで不都合が生じる可能性があります.必ず拡張I/Oセレクトの値を保存しておき,使い終わったら復帰させるようにしてください.

 なお,割り込み処理中に拡張I/Oが操作される可能性もありますので,アクセスする際には割り込みを禁止したほうが良いでしょう.

・本体内蔵系(FS-4600F内蔵・FS-A1FM内蔵)や第二水準漢字の場合

 メーカーコードF7hの拡張I/Oを選択し,漢字イネーブルビットの第一水準漢字をON(bit0を1)にしてから,漢字番号を設定してフォントデータを読み出します.FS-4600Fでは第二水準漢字のみをON(bit1を1)にしてもイネーブルされません。

 

2.2.漢字番号の計算方法(第一・第二水準共通)

 シフトJISコードから7340hを引いた値が漢字コードになります.半角の場合には半角コードそのまま(0000h~00FFh)が漢字番号になります.

2.3.フォントデータの並び方

 フォントデータの並び方は,全・半角共通で以下のようになっています.半角の場合はフォントの左半分が有効です.

       +---------+----------------+
 1ライン目 |1バイト目のデータ|2バイト目のデータの上位4bit|
       +---------+------+---------+
 2ライン目 |2バイト目のデータの下位4bit|3バイト目のデータ|
       +---------+------+---------+
 3ライン目 |4バイト目のデータ|5バイト目のデータの上位4bit|
       +---------+----------------+
   ・   |             ・            |
   ・   |             ・            |
   ・   |             ・            |
       +--------------------------+

2.4.第一水準漢字ROMのチェック

 第一水準では,漢字番号0000h(半角スペース)の先頭2バイトが00hで,漢字番号0E5Fhの始め8バイトの合計が4Chになるようになっています.

 なお,拡張I/OにメーカーコードF7hの機器が接続されている場合,必ず第一水準漢字が存在しますので,上記のようなチェックは必要ありません.

2.5.第二水準漢字ROMのチェック

 第二水準では,漢字番号255Ehのフォントの先頭2バイトが41H,42Hになっているようです.ただし,これは漢字BASICでチェックされているのを確認しただけであり,現在のところ第二水準の漢字ROMは発見されていません.

4.その他

4.1.漢字ROMのデータの鮮度

 松下仕様12ドット漢字ROMには,罫線などがサポートされたJIS83のJISコードが使用されているようです(8区にJIS罫線が入っています).

4.2.未定義文字コード

 JISコードで定義されていない9区から15区には,横向きフォントやトランプマークなどのフォントが格納されています.12ドット漢字ROM専用ということで構わなければ使用しても問題はないでしょう.

補足

 ここから先は nf_ban が書いています。

 私(nf_ban)がBASICで検証した結果と解析資料とで違いが見られましたので、解析資料に赤字で追記させていただきました。

 松下仕様12ドット漢字ROMは「本体内蔵系(FS-4600F・FS-A1FM)」と「カートリッジ系(FS-CM1・FS-PW1?)」の2系統あるのが現在有力な説となっています。

漢字ROMをイネーブルする方法

  • FS-4600Fではポート40hにメーカーID F7hを書く手順が解析資料には書いてありませんでしたが、FS-4600Fでもポート40hにF7hを書かなければフォントが有効になりませんでした(さらにポート42hに1 or 3を書かないとフォントが有効になりません)。
  • FS-A1FMでもポート42hに1 or 3を書かないとフォントが有効にならない、という情報が入りました。
  • FS-CM1ではポート42hの利用なしにフォントが有効化されますが、ポート42hに0(全部無効)・1(第一水準のみ有効)・2(第二水準のみ有効)・3(両方有効)のどれを書いても第一水準のフォントデータが読み出せるようです。42hを利用してはいけないということではなさそうですし、無視されるだけかもしれません。

FS-4600F、拡張I/Oポート40hと42hに適切に書き込まないと49hの読み出しは0にならないね。存在しない2水のみ(ポート42hに2)ではFFh(255)だ。イネーブルが有効であるときに49hに0が返る、というロジックなのかな? pic.twitter.com/nR7LWD936G — Takashi Kobayashi (@nf_ban) 2021年10月9日

松下製品なのに拡張I/OのメーカーIDが「8」でない混乱

 松下仕様12ドット漢字ROMはMSXの「拡張I/O」に接続されていますが、これが混乱の原因につながっています。

 要因の一つとして、拡張I/Oでは予め割り振られたメーカーIDをポート40hに出力してからポート41h~4Fhで各周辺機器の制御を切り替えるのですが、松下(パナソニック)のメーカーIDが「8」でありながら松下仕様12ドット漢字ROMではメーカーIDに「F7h(247)」が採用されていることです。

 このF7h(247)というIDは、2021年現在に至ってもどのドキュメントにも明記されていませんでしたアスキー刊の公式技術書である「MSX2テクニカル・ハンドブック」「MSX-Datapack」はもとより、海外の同人ハードウェアのI/Oまで網羅しているWebサイトにも明記されていません。

map.grauw.nl

 つまり、メーカーID F7hは空いていると認識したうえで個人やインディーチームが新しいMSX用デバイスハードウェアを開発した際にメーカーID F7hを採用してしまうと、環境によってはI/Oの衝突が発生して誤動作や本体故障の可能性が生まれてしまいます。実際、不具合回収が発生した事例があります。

【不具合のお知らせ】にがHP様より御連絡がありまして「漢字FlashROM」が特定環境にて不具合が発生するとの事です。緊急:漢字FlashROM初回ロット不具合のお知らせ(PDF)https://t.co/zE22Gjsaac にがHP公式ページhttps://t.co/afRxpHo1wC#akiba #MSX pic.twitter.com/5RJxn92elQ — 家電のHRDちゃん4078ヽ(´ー`)ノ (@zan2zanjp) 2021年9月30日

 しかも、指定するメーカーIDの拡張I/Oが実行環境に存在するかを判定する「ポート40hにメーカーIDを書いたうえでポート40を読んだ数値がメーカーIDをビット反転した数値と同じであればそのメーカーIDの拡張I/Oは有効である」という拡張I/Oの仕様に対し、松下仕様12ドット漢字ROM(メーカーID F7h)の場合正しく 8 が返ってくるハードウェアはFS-CM1だけで、他は反転した数値が返ってきません(実際にはFFhが返ってきます)。

 当記事をまとめ始めたきっかけが、この松下仕様12ドット漢字ROMが不具合に影響している疑いがあったためです。皆様もご注意くださいませ。

拡張I/Oの入出力テストの結果

ポート40hに F7h を書いた場合

読むポート 機種 結果 情報源 補足
40h CM1 8 これ
40h PW1 FFh これ
40h 4600F FFh これ
40h A1FM FFh
41h CM1 FFh これ
41h PW1 FFh これ
41h 4600F FFh これ
41h A1FM FFh
49h CM1 0 これ
49h PW1 FFh これ
49h 4600F 0 これ
49h A1FM FFh

 松下仕様12ドット漢字ROMが実行環境に存在するかを判定するには、まずはポート40hに F7h を書き込んだあとポート40hを読んだ結果が「8」であれば拡張I/Oの仕様上それは有効であることが分かるのですが、「8」を返す機器がなんとFS-CM1しか存在しません。

 そこで、ポート49hを読むと何らかのROMが存在する場合は 0 が返る(FS-CM1・FS-4600F)ようなのでROMの有無を判定するフラグに使える?かと思っていたら、FS-PW1・FS-A1FMでは FFh(255)が返ることが判明したため、この判定法はボツとなりました。

 なお、2021年10月20日現在、FS-PW1は松下仕様のROMが載っていない、と推測しています。詳しくはこちらのブログにまとめました。

gigamix.hatenablog.com

ポート40hに 8 を書いた場合

読むポート 機種 結果 情報源 補足
40h CM1 FFh これ
40h PW1 FFh これ
40h 4600F F7h これ 松下仕様漢字として
40h A1FM FFh
40h A1FX/WX/WSX F7h WX WSX 1.5倍速モードとして
41h CM1 FFh これ
41h PW1 FFh これ
41h 4600F FFh これ
41h A1FM FFh
41h A1FX/WX/WSX FBh WX WSX 1.5倍速モードとして
45h CM1 FFh
45h PW1 FFh これ
45h 4600F 0 これ
45h A1FM FFh
45h A1FX/WX/WSX FFh WX WSX
46h CM1 FFh
46h PW1 FFh これ
46h 4600F FEh これ
46h A1FM FFh
46h A1FX/WX/WSX FFh WX WSX

 拡張ポート40hに松下(パナソニック)のメーカーID「8」を書いたうえでポート40hを読み出すと F7h(247)が返るハードウェアは松下(パナソニック)の拡張I/Oが搭載されているハードウェアであると言えますが、MSX2+の1.5倍速モードもFS-4600Fの12ドット漢字ROMもポート40hの読み出し結果が同じ(8)になることには注意が必要です。

実装例・開発方法について

DMシステム2のフォントドライバ

 当クラブのMSXミドルウェア「DMシステム2」にて、松下仕様12ドット漢字ROMに対応した開発事例があります。ソースコードGitHubで公開しています。

github.com

 注意点として、当クラブではFS-A1FMとFS-PW1による動作チェックをしていません。もしかすると、仕様や実装が違うかもしれません。

MSX BASIC

 なお、MSX BASICからFS-4600F・FS-CM1・FS-A1FMのどれでもフォントデータを読み出せることが判明しました。   コメントアウトを取って(ポート40hにF7hを書いて)実行すると、なんかデータが読めました!ってちゃんと読めてるのかなこれ。ビジュアル化しないと分からないですね。 pic.twitter.com/FZUikBKRHX — Takashi Kobayashi (@nf_ban) 2021年10月3日
FS-CM1を使おうとしてポート40hにメーカーID 8を書いても読み出せなくて、なぜかF7hを書くとフォントデータが取り出せる(42hに何か書くのは不要)…なるほど、これが知られざるMSXの松下仕様12ドット漢字ROMなのか!😰 混乱のもとですね… pic.twitter.com/F1BtesP6nX — Takashi Kobayashi (@nf_ban) 2021年10月3日

フォントビュアー(BASICプログラム)

松下仕様の漢字フォントビュアーのプログラムが完成しました。もしお時間ありましたら、FS-PW1やFS-A1FMで表示できるかお試しいただきたく。🙏https://t.co/fCxGtFfyDr — Takashi Kobayashi (@nf_ban) 2021年10月8日
リザルトが0,255なので、たぶん最初の拡張I/Oセレクターに機種コードを渡した後で返ってくる値が機種によって違うのかなー、という気が。チェック部分を削除したこちらではどうでしょう? https://t.co/tOEa05sOyz — EmiCharLounge (@EmiCharLounge) 2021年10月19日

その他の実装例

この解析資料を見るのは初めてです。自分は https://t.co/YixWlCzeiK を再実装するような形でFS-CM1の書体吸い出しツールを作ってみたことがあります。 — SASANO Takayoshi (@uaa) 2021年10月2日

 http://www.msxarchive.nl にて公開中のソースコードがありますので、参考にしてください。

www.msxarchive.nl

ハードウェアの競合について

 FS-4600FやFS-A1FMのスロットへFS-CM1を差すなど「同一拡張I/Oポートのハードウェアが複数同居するケース」は考えられますが、その際の挙動はまだよく分かっていません(どちらもフォントのデザインが全く同じため、見分けが付かない)。普通の漢字ROMと同様に「外付けが優先される」という見解が現在の有力説となっています。

 ただし、FS-CM1とFS-PW1のようにカートリッジ同士を複数同居するケースについては全くの未知数です。拡張I/Oの重複により故障の原因にもなりかねませんので、できることならそもそもそんな環境にしないことをおすすめします。

漢字フォントの互換性について

 MSX標準の漢字ROMと松下仕様12ドット漢字ROMは、ハードウェア上の互換性は全くありません。松下仕様の漢字ROMが利用可能だからと言ってMSX標準の漢字ROMの代用品になっているのではありません。

 MSX標準の漢字ROMと松下仕様12ドット漢字ROMは、同一環境で併用可能でありながら一部の文字コードで互換性が失われています。当ブログの別ページにて検証しています。

gigamix.hatenablog.com

各ハードウェアの中身(部品の確認)

FS-CM1

FS-CM1、開封の儀。部品が色々載っていますね…。ボタン型電池があるけど金具とくっついてみたいで簡単には取れない。裏面はICなし。 pic.twitter.com/Y8IMrxJ9dN — Takashi Kobayashi (@nf_ban) 2021年10月9日

「©MEI 1986 831000-20 354 BA 8644 E01」と書かれたICが松下仕様12ドット漢字ROMと思われます。

「©MEI 1987 831000-20 714 BA 8746 Z00」と書かれたICは内蔵通信ソフトが含まれているのでしょうか?

FS-4600F

usbsecretbase.michikusa.jp

「©MEI 1986 831000-20 354 BA 8705 Z48」?と書かれたICが松下仕様12ドット漢字ROMと思われます(354 BAと書かれた型番のICがFS-CM1にも含まれているため)。

「©MEI 1986 831000-20 340 BA 8709 Z59」と書かれたICは内蔵ワープロソフトが含まれているのでしょうか?

FS-A1FM

usbsecretbase.michikusa.jp

「©MEI 1988 DA53P66220 TC534000P-6622 8809EBI」と書かれたICが、松下仕様12ドット漢字ROMを含む統合ICと思われます。

FS-PW1には搭載されていません

 調査の結果、FS-PW1には松下仕様12ドット漢字ROMは搭載されていませんでした。FS-PW1の解析結果については、こちらの記事で解説しています。

gigamix.hatenablog.com

オリジナルの解析資料

https://www.gigamix.jp/ds2/download/CM1FONT.TXT にあります。(文字コード シフトJIS、タイムスタンプ 1994/04/15 18:31:52)

※このドキュメントはFS-A1FMについての言及がありません。

MSX Disk BASIC環境のソフトウェアをROM化してリリースしたい(妄想編)

 twitterのタイムラインを眺めながらブレインストーミング。思いつき次第、適当に追加してゆきます。

https://p.gigamix.jp/devmsx/cg/disk-to-rom_title.png

きっかけ

dsk2romというMSXのディスクイメージファイルをROMイメージ化できるアプリがあったので自作のソフトを変換してみたのだがROMから起動できなかった。BASICのAUTOEXEC.BASから起動するような同人ソフトには非対応かもね。変換の仕方が悪いのかもしれんけど…DISK BIOS相当の機能が入ってるとは思えない。 pic.twitter.com/0lZ6mpqdcP — Takashi Kobayashi (@nf_ban) 2021年8月6日
ん!?ROMイメージのタイプを「コナミSCC」に変更したら動いたぞ!?どういうこと!? pic.twitter.com/GCPq0Bx1ru — Takashi Kobayashi (@nf_ban) 2021年8月6日

 「dsk2rom」というアプリでMSXフロッピーディスクイメージファイルをメガROMイメージに変換できることを知り、拙作の「クイズ!あたっちゃって25%」というBASIC環境のゲームソフトをROMイメージ化してみたら、あっさり動きました

github.com

 ファーストトライで動かなかったのは、出力するROMイメージのメガROMタイプがデフォルトで「コナミSCC」であることを忘れていたためでした。

あれ!?エミュレータでFDDの機能を切ってる(WebMSXでフロッピーアイコンが無い)のにDisk BASICが動いているではないか。ってことはDISK ROM BIOSを内蔵してるってこと!?んー、Microsoft or アスキー製の互換品なの?ライセンス大丈夫なのか、これ。 pic.twitter.com/i0MqEv3F78 — Takashi Kobayashi (@nf_ban) 2021年8月6日

 どういう仕掛けなのかと思って少し調べてみたら、なんと「ROMイメージ内にMSXのDISK ROM BIOS(とディスクイメージ相当のストレージデータ)を同梱していて、ROM起動なのにDisk BASIC ver.1が利用可能になっていた」のです。BIOSを積んでいるので、FDDを搭載しない(=Disk BASICが起動しない)機種でも、BIOS経由のどんなディスクアクセスでも、基本的にROM内で再現できるはずです。

 ところが、2021年現在ではMSXの各種公式BIOSは元アスキー創業者の西和彦さん率いるMSXライセンシングコーポレーションの著作物となっています。

www.n-and-partners.jp

んー、ですよねー。そりゃそうだ、世の中そんなに甘くないのです。 pic.twitter.com/8yd3U3qkLA — Takashi Kobayashi (@nf_ban) 2021年8月6日

 dsk2romは既存のDISK ROM BIOS(DOS1カーネル)をZ80向けに逆アセンブルしたと思われるソースコードGitHubで公開されていました(dsk2rom向けの改造も施されている可能性もあります)が、MSXライセンシングコーポレーションの承認なしに公開されているのではないか?学術目的とは言えソースコードを公開するのはライセンス違反ではないか?…つまり、現状はこの技術を利用して新作ソフトをリリースすることは著作権的に実現できない、と思うわけです。

 とは言え、この技術は今MSXの界隈で喫緊の課題になっている「製造が停止してしまったフロッピーディスクでなくROMカートリッジで新作ソフトをリリースする手段」を一気に解決できるほどのポテンシャルがあります。FDD搭載機と同じ環境で開発が継続でき、ソフトのリリース時にROMイメージ化してROMへ焼くだけです。新作ソフトはもちろん、過去にリリースされたソフト、リリースが叶わず埋もれてしまったソフトの復刻も容易になります。

オペラハウス(旧ファミリーソフト)公式twitterで新作ソフトの頒布方法についてアンケートを募ったところ、このような結果になっていました。

今求められている技術

  • ファイルストレージとストレージコントローラのような仕掛けがROMにパッケージングされていること
  • ライセンスに違反が発生しないこと
  • 2DDフロッピーディスクの代替という側面から、4Mbit(512KBytes)のメガROMカートリッジと同等規模(やそれ以上)の実装が予想される
  • フロッピーディスクからROMカートリッジへのメディアコンバートが容易であればあるほど良い
  • 変換時の互換性は高いほど良い

イデア①:公式のBIOSをライセンスしてもらいたい

ディスクROMだけ公式ライセンス降ろして貰えれば一発解決なんだけどなー。50円/個とかでできないだろうか。さすがにDisk-Basicの互換品をいまさら作るというのは不毛だ…。 https://t.co/LCX2d38EUe — MSX研究所長 (@yoshimatsuTUQ) 2021年8月6日

 新作ソフトの販売者がdsk2romに同梱するDISK ROM BIOS(DOS1カーネル)に対してMSXライセンシングコーポレーションへBIOSのライセンス料を支払い、正式にライセンスの承認を得ることが可能になれば、dsk2romの技術だけで今すぐ新作ROMソフトが製造・販売できるようになります。

 この手法のメリットは、圧倒的な互換性の高さ。BASIC・マシン語双方のソースコード修正は殆ど不要と思われます。

 メガROMタイプは「コナミSCC」または「ASCII 8K」でイメージ化できます。最近はメガROMコントローラに互換性がある頒布用の新基板がいくつかリリースされていて、組み込み用途にも応じてもらえるようです。

 ハードウェア的には実現可能でも個人製作のソフトに対して公式BIOSのライセンスなんて認証されるのか?これは事例があります。

これ、BIOSのライセンス料がいくら載っているのか…ソフト1本あたりなのか、包括契約的なものなのか…?https://t.co/XW5NukTwdz — Takashi Kobayashi (@nf_ban) 2021年8月7日

 MSX・FAN誌の投稿プログラムコーナー「ファンダム」で一躍有名になったTPM.CO SOFT WORKSさんは、自身のMSX1用ゲームソフト「タロティカ・ブードゥー」を2017年にSteamで配信しました。どう実現しているかと言うと、公式のエミュレータであるMSXPLAYer上に公式BIOSとコンテンツ(ディスクイメージ)を同梱したWindowsアプリに変換(メディアコンバート)しています。

https://p.gigamix.jp/devmsx/cg/disk-to-rom_tarotica_opening.png

 アプリ内にMSXライセンシングコーポレーションのライセンス表記がありますので、これは正式にライセンスが認証されたコンテンツであることが分かります。

store.steampowered.com

 個人やインディーが許諾を得る方法を私は知りませんが、存在すると思いたいです。まぁ、西さんにメールやtwitterへ聞けばいいだけの話かもしれませんが。

 なお、Disk BASICの動作条件として、32KBytes以上のRAMが必要です(MSX-DOS1は64KBytes必須)。これにより、RAMが16KBytes以下のMSX1では動作しません。事実上、MSX2以降の対応品となるでしょうね。

イデア②:Nextorを同梱する

にがさんの似非ROM基板に、NEXTORのカーネルROM書き込んでNEXTORが起動してMSXーDOSアプリが動作するするROMは作成できたので、NEXTOR使ってdsk2romと同じような事はできそうな気がします。 — 超兄貴 〜シン・MSX〜 (@SuperAniki_MSX) 2021年8月6日
Nextorならライセンスの問題はクリアですかね。あれっ、RAMは必要ではなかったでしたっけ。例えばMSX1の16KBのマシンでNextor BASICは動くのだろうか…?🤔 — Takashi Kobayashi (@nf_ban) 2021年8月6日
64KBは必要でしょうね・・・しかしBASICプログラムなら大概そのままROM化できますし、カセットテープやテープ形式の非圧縮音声で配布とか。 — 超兄貴 〜シン・MSX〜 (@SuperAniki_MSX) 2021年8月6日
自分の経験ですと、BASICプログラムが1本のみという製作方法がピンと来なくて、プログラム以外のデータを都度読んでゆくようなファイルシステムというかストレージのような仕掛けが欲しくなるんですよね。なのでdsk2romの可能性には期待していたんです。まぁ作り方でどうにでもなる話かもしれません。 — Takashi Kobayashi (@nf_ban) 2021年8月6日

 「Nextor」はMSX-DOS2の上位互換となる、MSXライセンシングコーポレーション(=西和彦さん)に承認されたかもしれないオープンソースの新しいDOS(Nextor DOS)です。

www.msx.org

 dsk2romはDisk BASIC ver.1(DOS1カーネル)を同梱していましたが、Disk BASIC ver.2の上位互換である「Nextor BASIC」を内包するオープンソースのNextorカーネルへ変更すればライセンスの問題が解決する、かもしれない

 「かもしれない」とあえて強調しているのは、Nextorが本当にMSXライセンスコーポレーションの認証がされていて、本当に無償で利用可能かのエビデンスが存在しないからです。

https://t.co/Au3fpKOtsD MSXVRMSXロゴ許諾についてNEXTOR作者のKonamiman氏が西さんと直接話をしたとあります。NEXTORをオープンソース化するのに問題はないか確認した際にMSXVRについても触れたとのこと。※ただしこれは西さんやMSXライセンシングコーポレーションからの発表ではありません — うにスキー (@uniskie) 2020年11月25日
この時点ではMSXBASIC自体のライセンスはマイクロソフトにあり、1台につき1$のライセンス料が必要とありますね。BASIC以外のシステムロムに関しては西さんのMSXライセンシングコーポレーションが権利を保有するとの事で、MSXDOS2関連を含むNextorのオープンソース化について許諾を得たという話。 — うにスキー (@uniskie) 2020年11月25日
原文では西さんによる「祝福」とあり、「公認」は意訳なので、西さんが「いいね!」しただけなのでは。ともとれるんですよね。NextorなどはMSXDOSコードの再利用について具体的な著作権説明が記載されていますが、MSXVRはそれに該当する物が今の所見つけられてないので、気になっています。#MSXVR — うにスキー (@uniskie) 2020年11月26日
Konamimanさん経由で話が通ったのであれば、その辺のシステムROMの使用については確認取ってそうなものですが、確定できる情報をまだ見つけられてないんですよね~。NextorとMSXVRは別の話ですし、どうなってるんでしょうね。どなたかそのあたりご存じでしょうか?https://t.co/eU7xB7ijyK — うにスキー (@uniskie) 2020年11月26日

 メリットは、ライセンスの問題が解決するかもしれないこと、Disk BASIC ver.1との互換性が一定量は担保されていることです。DOS1からDOS2・Nextorへの乗り換えは若干の修正が必要かもしれません。

 なお、Nextor BASICの動作条件として、64KBytes以上のRAMが必要のようです(未確認。Nextor DOSは256KBytes以上のRAMが必須)。Nextor自体はMSX1で大容量ストレージが制御できる性能があるのにメモリ不足による理由で動作できないのは勿体ない話です。事実上、MSX2以降の対応品となるでしょうね。

イデア③:Disk BASICの代替手段を拡張BASICで提供する

拙作のミドルウェア・DMシステム2 https://t.co/8tfHL2O5JG には CALL LOAD というとにかくRAMやVRAMへガンガン転送するという拡張BASIC命令があったんですけど、コンテンツをROM化するときに自身でBASICを拡張してLOAD命令もRUN命令も代替手段で実現すれば、Disk BASICが不要なんじゃないか?って。 — Takashi Kobayashi (@nf_ban) 2021年8月6日
ROMは4000hから7FFhまで拡張BASICのストレージ制御システムが入ってて、8000hからBFFFhまでメガROMで切り替えてストレージが見えたりして、C000hからRAMが見えてBASICプログラムを転送できたりしたら、16KB RAMのMSX1でファイルシステム持ちながらソフトが動かせるんじゃないの?って。 — Takashi Kobayashi (@nf_ban) 2021年8月6日
2DDで動作するMSX-BASICゲームをRom化する話がTLに流れてましたが、過去作品をROM化する場合と、これから作る場合とで技術的な課題は大きく違いそう。これから作る場合、最初からROM化を前提とした仕組みを用意しておけば敷居が下がると思います。#MSX — HRA! (@thara1129) 2021年8月8日
例えば、_LOADなどの命令を搭載したROMを2種類用意します。両者には命令に互換性がありますが、1つはアクセス対象がディスク上のFAT-FS。もう一つはROM上に形成した簡易的なROMディスク。開発時は前者を使い、ROM化するときは後者を使う。誰かがこのROM開発すれば解決、誰が?🤣 — HRA! (@thara1129) 2021年8月8日
最初に挙げた「敷居」とは、DiskBasicまでまるごとROMに書き込んじゃうと権利問題にぶつかる、という敷居ですね。明確な解決方法が不明なモノなので、かなり高い敷居です。なら、そのアプローチをやめちゃえば一気に解決するのでは?というアイディアを書いたのでした。 — HRA! (@thara1129) 2021年8月8日

 拙作ミドルウェア「DMシステム2」では CALL LOAD というBSAVEヘッダの有無問わずディスク上のファイルをメモリへ転送する命令が搭載されていました。ROMの中にそういうストレージアクセス系の命令を代替する拡張BASICのシステムと仮想ストレージを含んだROMイメージを作成することができれば、Disk BASIC(DOS1カーネル)を使用する必要がなくなり、ライセンスの問題が解消されます。

 ほかのメリットは、Disk BASICではないのでRAM 32KBytes以上必須の条件が撤廃され、RAM 16KBytesのMSX1を動作対象に含めることが可能かもしれません(とは言えさすがに8KBytes機はキツいと思うのですが…)。MSX2等64KBytes以上のRAM搭載機を動作対象とする場合にFDDの接続を切るように起動すればBASICのフリーエリアが約23KBytes(Disk BASIC ver.1)が約28KBytes(Disk BASIC非搭載時のMSX BASIC)へ広がる可能性もあります。

 新規で開発するぶんには良いのですが、完成済みのソフトはBASIC・マシン語ともにソースコードの修正は必須です。過去に作成したソフトだと仕様書や技術資料が残っていないと改修できないかもしれません。

昔の記憶ですと…run,load,bloadは間違いなく使いますね🧐 open,copyは使ったり使わなかったりです。場合によってはsaveとかbsaveも使うかもしれません。(セーブをパスワード式かPACにすれば使わないけど) — hide_san(ヒデ) (@_msx_) 2021年8月6日
情報ありがとうございます。ROM化されたゲームのデータ保存方法は別個で考える必要はありますけど、使う命令としてはそんな感じですよね。拙作DMシステム2だとBLOADはCALL LOADで代替、COPYはBPE圧縮で代替できるので、他のBASICプログラムをRUNする手段を代替できれば、なんかいけそうな気が!? — Takashi Kobayashi (@nf_ban) 2021年8月6日
「自作ゲームをROMにする」というのは、ゲームで育ってきた自分からすると「夢」の一つでもありますので…いけるといいなぁ(*'ω'*) — hide_san(ヒデ) (@_msx_) 2021年8月6日

 うーん、DMシステム2のROM化対応・機能限定版のようなものを作ったほうがいいのかな…。ストレージコントローラ、メモリ操作系の命令、MGSDRV(+タイマー割り込み管理)を実装の最優先にして、余ったメモリに何かをちびちび移植してゆく感じですかなーと思うのですが、16KBytesは狭いなぁ。

www.gigamix.jp

 いずれのアイデアにせよ、RAMは64KBytes欲しくなります。

オマケ①:令和の今、MSXのソフトを販売することに対しての販売者側の権利について

MSXAの中の人として回答しますが、MSX用ソフトの販売に限って言えば、MSXライセシングコーポレーションに許諾を得る必要はありません。VHS規格を参考に1983年の時点で「ソフトは権利者の許諾なく出せる」と決定され、以降変更されていません。この話題はMマガ永久保存版の記事でも掲載していたはず。 — ごりぽん (@goripon_tw) 2021年8月8日
MSXライセシングコーポレーションに許諾が必要なのは分かりやすく言えば「公式のシステムROMを含むMSX本体の販売」です。Mマガ永久保存版の時に「エミュも本体1台と見做す」というルールが明確化されたので当然エミュでもライセンスが適用され、EGGなどはこれに従っている訳です。 — ごりぽん (@goripon_tw) 2021年8月8日

 MSXライセンシングコーポレーションの著作物(公式BIOS、公式エミュレータであるMSXPLAYer等)がコンテンツに含まれない場合は、許諾の必要なしに販売が可能です。

オマケ②:MSXの商標、MSXのロゴの使用について

MSXライセシングコーポレーションというのがあるので、今はMSXの商標やらもろもろを使ったゲームは、そこのOKが出ないと出せなかったりするのか?みたいな疑問です。いや、アレスタ再販できたらどうなの?とかあるじゃん。 — ほりい なおき (@hor11) 2021年8月7日
もし、MSX用のアプリケーションを出す時に、ロゴの使用が自由だと仮定したら、ライセシングコーポレーションとして社にする意味がまるでないんですよねー。これはちょっと怯んでしまう。 — ほりい なおき (@hor11) 2021年8月7日
通りすがりの知的財産権各種研究科ですが、ぶっちゃけ9類1区分のみなので、コンピュータソフトウェア/ハードウェア以外の物品、例えばキーホルダー、アクセサリ、Tシャツ、かばん等であれば不正競争防止法等に留意して使う分には合法かと思われます。 pic.twitter.com/4UhYToKqtN — マツド教授 (@Prof_Matsudo) 2021年8月7日
そこは抜かりが無かった、、、アパレルも鳥坂先輩の着ているプリントTシャツはダメぽいな pic.twitter.com/xi239iZX8m — きんのじ (@v9938) 2021年8月7日
RIPPLE LASER様のMSXキーホルダー入荷しました。勿論許諾品です。ハーフミラーを含めた5種類で展開中ですよ pic.twitter.com/8kPDrd3UJ2 — アキハバラ@BEEP (@BEEP_akihabara) 2016年9月11日
更新:MSX2+用のキーボードカバーが販売中、正式ライセンス品 アクリル製で税込4,300円、MSX turbo R用も (取材中に見つけた○○なもの) https://t.co/uXvAJNhKJG pic.twitter.com/wc7oMjodRc — AKIBA PC Hotline! (@watch_akiba) 2016年2月6日

 2021年現在、MSXの商標はMSXライセンシングコーポレーションが保有しています。MSXのロゴも商標登録されています。

 WiiWiiUバーチャルコンソールプロジェクトEGGなど、近年のMSXレトロゲームソフトのダウンロード配信では各種公式BIOSを同梱しているからなのか、MSXという商標を用いているからなのか…いずれにせよほぼ全ての復刻コンテンツにMSXライセンシングコーポレーションのコピーライト表記が付与されています。

 商標の明記やロゴの使用許諾については商習慣でケースバイケースなので一概には言えません。パートナー契約をすると無料で記述できる権利が得られたり、契約して有償で記述したり、契約しなくても記述すれば黙認されることもあり…。

こちらですかね。もうアーカイブにしか残ってないので、口約束みたいな状況ですが^^;https://t.co/RHm0S4C3h4 — MA-X @ B-Cat Software (@max_2608) 2021年8月7日
営利でソフト出すのはダメって事みたいだし、グッズもお金払ってくれって書いてあるしで、これが前提だといろいろ終了だな。 — ほりい なおき (@hor11) 2021年8月7日

 00年代当時はユーザーの有志(MSXアソシエーションという任意団体)と西さんとの間でこのように決まっていた(で、ソフトウェア以外のグッズとかも出てた)のですが、2021年現在は西さんの会社が取り仕切っているのでこの条件が今もスライドで継続している、とは断言できないと私は思うんですよね…。

 また、過去のMSXアソシエーションの記述を見るに、M2さんの「アレスタ」復刻のような商業活動と個人・同人活動とではライセンスの条件が違う(案件により違う)可能性もあります。

 MSXのコンテンツ復刻でプロジェクトEGGを長らく運営しているD4エンタープライズさんは西さんと長年の付き合い(殆ど師弟関係な)ので包括契約的なものがあるのかもしれません。

 そういえば近年D4エンタープライズさん以外の会社からMSXのコンテンツが復刻されたのは、コナミさんしか存在しないような…

オマケ③:西さんの見解

 【2021.10.2更新】西和彦さんから直接コメントが出ました。

皆んな勝手にやっているみたいです — 西 和彦 (@nishikazuhiko) 2021年9月14日
なるほど、これだと出せませんね(ギギギ — ほりい なおき (@hor11) 2021年9月14日
好き勝手やってますね(何も言ってない)…ですよね。 — ほりい なおき (@hor11) 2021年9月14日
オッケーですよって表明がないと中々やれないですよね。大きな商いになってから何か言われてもこまるし(ほぼほぼならないんですが、可能性としては…ですね)。 — ほりい なおき (@hor11) 2021年9月14日
MSX3を販売を期に申請ができるようにして頂けると信じております。 — nao (@nyaonyao21) 2021年9月14日
互換性のチェックも — 西 和彦 (@nishikazuhiko) 2021年9月14日

 「皆んな勝手にやっているみたいです」…西さんも現状を認識されてはいるようですが、いろんな含みがありますね…

雑感

 今回のまとめ記事を書くにあたり、MSXライセンシングコーポレーションの守備範囲を私が圧倒的に知らなすぎる。皆さんはご存知なのかもしれませんが。詳細な情報がWebでは殆ど辿れなかったので憶測や過去のエビデンスで「○○らしい」とふわふわした根拠しか残らないんです。NDAのようにあえてWebで情報が載らないようになっているのかもしれませんが。

 M2さんはレトロゲームの技術集団ですから公式BIOSなんて不要で何から何まで内製できてしまう(法務も余裕で解決できる)から商業案件はそれはそれで進捗を進めていただくとして、内製できる技術力を持たないので公式BIOSを利用したい個人やインディーの人々にもコンテンツの再販や新規リリースしやすいような環境づくりができればいいな、と思っています。

余談:Disk BASICが不要ならば実現可能らしい

 MSXBAS2ROMは、MSX BASICのプログラムをROM化するツールです。Disk BASICを利用しないのであれば、BASICプログラムのROM化は実現可能かもしれませんね。

MSX共通・漢字ROMの「非漢字部分」のフリーフォント

 MSXの漢字ROMに含まれている「JISの規格外だがMSXの各機種で共通っぽい非漢字部分の文字群」について、旧JISレベルな実機側との互換性をいまさら取るために手描きをしたライセンスフリーフォントです。

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

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

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

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

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

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

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

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

 A to Cさん作のライセンスフリーフォントデータ「漢字ROM image file for msx emulaters」に、MSX共通の非漢字部分データが含まれています。

 このデータで採用されたフリーフォント「jiskan16」の全角文字部分はパブリックドメインです。半角文字と全角非漢字部分のフォントはA to Cさんの手描きで、2021年5月26日、Apache License 2.0の適用となりました。

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

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

16px角ライセンスフリーフォントを使って本物の漢字ROMを作れる「漢字FlashROM」

 当ブログで紹介した「漢字ROM image file for msx emulaters」をFlashROMへ書き込むと漢字ROMカートリッジとして使えるすごい同人ハードウェアが発売になりました!

 メーカーの「にが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日

フォント解説

 非漢字部分はの文字は番号0(G000)から93(G093)まで、全94文字あります。

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

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

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

シフトJIS 非漢字コード 文字の意味
81AD G000
81AE G001
81AF G002
81B0 G003
81B1 G004
81B2 G005
81B3 G006
81B4 G007
81B5 G008
81B6 G009
81B7 G010
81B8 G011
81B9 G012 g(グラム)
81BA G013 m(メートル)
81BB G014
81BC G015
81BD G016
81BE G017
81BF G018
81C0 G019
81C1 G020
81C2 G021
81C3 G022
81C4 G023
81C5 G024
81C6 G025
81C7 G026
81C8 G027
81C9 G028 空白
81CA G029
81CB G030
81CC G031
81CD G032
81CE G033
81CF G034
81D0 G035
81D1 G036
81D2 G037
81D3 G038
81D4 G039
81D5 G040
81D6 G041
81D7 G042
81D8 G043
81D9 G044
81DA G045
81DB G046
81DC G047
81DD G048
81DE G049
81DF G050
81E0 G051
81E1 G052
81E2 G053
81E3 G054
81E4 G055
81E5 G056
81E6 G057
81E7 G058
81E8 G059
81E9 G060 🗀
81EA G061
81EB G062
81EC G063
81ED G064 縦展開の箱の上半分
81EE G065 縦展開の箱の中間部分
81EF G066 縦展開の箱の下半分
81F0 G067 円の上半分
81F1 G068 円の下半分
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
8242 G082
8243 G083
8244 G084 中黒
8245 G085
8246 G086
82F2 G087 斜線1
82F3 G088 斜線2
82F4 G089 点線縦
82F5 G090 点線横
82F6 G091 点線水玉
83B7 G092
83DD G093 網目

BASIC:phpのexplode関数をMSX-BASICでそれっぽく実現する

 忘備録

 phpでいうexplode関数(旧split関数。区切り文字で文字列を分割して配列変数に代入するやつ)に相当する処理をMSX-BASICで実現するのってけっこう面倒臭いですね…。

BASICプログラムコード

100 'text split sub.
110 '[in] A$:separator, B$:string
120 '[out] SP$():array, TA:array count
130 '[use] TA, TI, TA$
140 TA=0:TI=0:TA$=""
150 FOR TI=1 TO LEN(B$)
160  IF MID$(B$,TI,1)=A$ THEN TA=TA+1
170 NEXT
180 IF 9<TA THEN TA=9:'max array No.
190 ERASE SP$:DIM SP$(TA)
200 TA=0
210 FOR TI=1 TO LEN(B$)
220  TA$=MID$(B$,TI,1)
230  IF A$<>TA$ THEN SP$(TA)=SP$(TA)+TA$ ELSE TA=TA+1:IF 9<TA THEN TI=LEN(B$)
240 NEXT
250 RETURN

使い方

A$=":":B$="a:bb:ccc:dddd"
GOSUB <サブルーチンの行番号>

入力

  • A$:区切る文字(1文字)
  • B$:区切られる文字列

出力

  • 配列変数 SP$:分割された文字列が順次格納されます(最大要素数:9)
  • TA:要素数が格納されます(最大:9)