Gigamix Online

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

Tablacus DISK ROM Lite MSX BASICのディスクソフトをROMカートリッジへ変換!

https://p.gigamix.jp/devmsx/cg/tablacus-disk-rom-lite_title.png

【2024.09.09更新】「似非DOS for MSX」対応に関する解説、対応するBASIC命令を追加しました。

【2023.08.20更新】初版公開

 これから新たにMSX BASICで趣味のソフトをリリースしたかったり、過去にMSX BASICで制作したソフトを現在に再配布したいようなニーズ、ありますよね(あるってことにしてください)。

 今や入手困難なフロッピーディスクで開発・配布していたMSX BASICのデジタルコンテンツを今からリリースするなら、フロッピーからROMへのメディアコンバートが今後重要となります。

 そして、こんな辺境なブログを見ている読者の皆様にぜひ知っていただきたい技術が、今回採り上げるTablacus DISK ROM Liteです。MSX BASICで作成したコンテンツのROM化を過去類に無い敷居の低さで実現するものです。

フロッピーディスクが手に入らない!だからROMで配る

 MSXによるアマチュアクリエイトが全盛だった'90年代、フロッピーディスクMSXの同人ソフトを安く手軽に配る手段にもってこいのメディアでした。が、2024年の今ではメディアもドライブも製造中止となり、入手困難で期待できないブツになってしまいました。過去のソフトについてはカビや磁気の劣化によるデータ損失という時間的な課題も解決しなければなりません。

 一方で、昔ながらの製造技術で作られていたROMカートリッジは2024年の今では技術の進化により個人規模で小ロットの生産が可能になり、今後のMSXシーンにおけるソフトウェア提供手段としてのROMカートリッジが再び注目されています(ということにしてください)。

 ROMカートリッジ向けのソフトはオールマシン語での開発が一般的ですが、MSX BASICで開発したコンテンツもフロッピーディスクのような感覚でROM化できるとなれば…創作の敷居はもっと下がると思いませんか?Tablacus DISK ROM Liteなら、それが実現できるかもしれません。

Tablacus DISK ROM Liteとは

純正のDISK ROM不要で動作するLite版ができました。まだまだ課題が多いので何か情報がありましたら……https://t.co/s87Y71nKjH pic.twitter.com/8FnlDqSTn1 — Gaku (@tablacus) 2023年6月11日

 MSX BASICのプログラムと各種データ(いわゆるデジタルコンテンツ)を含んだMSX向け「ディスクイメージ」を、「ROMイメージ」や「メガROMイメージ」へ簡単に変換できるツールです。

↓ Tablacus DISK ROM LiteのWebページはこちら ↓ github.com

 2024年9月9日現在の最新版は、ver.0.7.3.2 です。

 ROMへ変換できるコンテンツ量は最小32KB(いわゆるSimple ROM形式)から。コンテンツ量に合わせてMSXのメガROM形式で変換することもできます。変換後のROMイメージは、Tablacus DISK ROM Liteのシステム本体(8KB)とディスクイメージをバイナリ合体したものとなります。このROMイメージを各種エミュレータで利用したり、実際のROMや各種Flashカートリッジへ書き込んでMSXの実機で利用します。

 変換したROMを起動すると、ROMカートリッジ(ROMイメージ)内に仮想ストレージドライブが配置され、MSX BASIC上からROM内の仮想ストレージドライブへファイルアクセスが可能になります。しかもROMなので、ファイルのロード時間はフロッピーディスクと比べたら爆速です。

 フロッピーディスクの制御に用いるDisk BASICの一部の命令をTablacus DISK ROM Liteのシステムがエミュレートしており、本体にDISK BIOSを搭載しない機種(FDD非搭載機)でも利用できます

MSX FAN誌からROMカートリッジ化 2本。Tablacus ROM BIOS for MSX v0.1.3.0のお陰様でKONAMI4互換4Mbitカートリッジでhttps://t.co/opUJtovhjo様のGREY COLLEAGUEとまものクエストを2in1化。GEN様のorderとU-BALLは2本マージしても16KBに収まったのでSimpleCartridgeで2in1化しました(^^)v pic.twitter.com/y4YT5yEL9O — ひぽぽ (ファミコンGimmick!👍) (@koichironakaza1) 2023年7月2日
容量が32KB ROMっていうことは書き込みも容易なんでしょうか?ちなみに今開発中のゲームはTablacus DISK ROM Liteで問題なくにROM化できました🙌 これをメガロムに焼けるんでしょうか?ディスクアクセスが無くて最高😭(笑) — hide_san(ヒデ) (@_msx_) 2023年7月4日

できること

  • 生成したROMイメージ内の仮想ストレージドライブにBASICからファイルアクセス可能
  • 最小構成のMSX1(RAM 8KB)から使用可能
  • 物理的なFDD・FDCの存在有無を問わない
  • AUTOEXEC.BASによる自動起動が可能
  • BASICのフリーエリアがDisk BASICより広い(最大28KB)ので、フロッピーディスクだけでなくカセットテープからのメディアコンバートにも適している
  • 4種類のメガROMタイプに対応(ASCII 8K、ASCII 16K、KONAMI SCC、シンプルROM)
  • 生成したROMイメージは各種エミュレータでの使用、各種似非RAM・Flashカートリッジへ書き込み可能
  • 読み込み属性(ReadOnly)・隠し属性(Hidden)のファイルに対してもアクセス可能
  • MSX-DOS2の階層化ディレクトリに対応
  • 仮想ストレージドライブ(ドライブA)をMSX-DOS2のRAMディスク(ドライブH)にミラーリングする「フェイクRAMディスク機能」搭載
  • 「似非DOS for MSX」の併用で、MSX-DOSの外部コマンドもメガROMイメージで実行可能(要・本体RAM 64KB)
  • MSX-DOSフォーマットよりメモリ効率が最大4倍高い「LSX-Dodgers」フォーマットのディスクイメージを利用可能
  • ROM化への組み込みライセンスフリー(MIT Lisence)
  • MSX Licensing Corporationが著作権を所有する「MSX DISK BIOS」および「MSX Disk BASIC」を一切使用しない(公式BIOSの組み込み不要)

複数のデータを内包するコンテンツのROM化に向いている

 さきほどから「コンテンツ」や「デジタルコンテンツ」という書き方をしているのですが。

 MSXのBASICプログラム1本だけのROM化であればTablacus DISK ROM Lite以外にも各種ツールによるROM化の手段が色々あります。が、画像や音楽など…BASICプログラムに付随して利用する各種データファイルの集合体、いわゆる「デジタルコンテンツ」をROM化する手段はこれまで殆どありませんでした。

 Tablacus DISK ROM Liteはそういった複数のデータを内包する創作物のROM化に、特に向いています。例えば…

  • 1本ないし複数のBASICプログラムと複数のデータファイルを内包する創作物
  • MSX・FAN誌の投稿作品コーナー「ファンダム」一般部門・D部門くらいの規模の創作物
  • 過去に「同人ソフト」としてフロッピーディスクやカセットテープでリリースしていた創作物
  • 過去に「フリーソフト」としてPMAやLZHアーカイブをリリースしていた創作物
  • これから新規開発してROMカートリッジの形でリリースしたい創作物

 フロッピーディスクMSX-DOSフォーマットで管理されたファイルシステムをそのままROM化できるので、これまでの知識と資産をそのまま活かせます。

対応するBASIC命令

  • RUN(RUN "<filename>")
    • ,R オプション(オープン済ファイルをクローズせずロード後実行)対応
    • 中間言語形式・アスキーセーブ形式 両対応
  • LOAD
    • ,R オプション(オープン済ファイルをクローズせずロード後実行)対応
    • 中間言語形式・アスキーセーブ形式 両対応
  • BLOAD
    • ,R オプション(ロード後実行)対応
    • ,S オプション(VRAM転送)対応
      • SET PAGEのアクティブページへの転送に対応
    • オフセット指定オプション 対応
  • FILES
  • COPY(矩形画像のロード)※MSX2以降
    • ページ指定に対応
  • MAXFILES=
  • OPEN "<Drive><filename>" FOR INPUT(入力用のOPEN宣言)
    • バイス名及びドライブレターを指定しない場合は CAS: が優先されます
  • INPUT #(ファイルからの入力)
  • LINE INPUT #(ファイルからの1行入力)
  • CLOSE
  • EOF
  • LOC
  • LOF
  • CVI(v0.7.3.1より対応)
  • MKI$(v0.7.3.2より対応)
  • DSKF(v0.7.3.1より対応。どのドライブに対しても常に 0 を返す)

Disk BASIC ver.2(MSX-DOS2モード)の命令

  • CALL CHDIR("<Directory>") サブディレクトリの移動
  • CALL CHDRV("<Drive>") カレントドライブの変更(A: または H: のみ有効のダミー命令。カレントドライブは変更されない)
  • CALL RAMDISK(n) RAMディスクの作成(DOS2モードの有無判定に利用されるダミー命令。RAMディスクは作成されない)

DMシステム2のインストール時に有効化する命令

  • CALL CHGDRV([drive_No.][,変数]) カレントドライブの変更・獲得(1 または 8 のみ有効のダミー命令)
  • CALL FSIZE("<Filename>",変数) ファイルサイズの取得
  • CALL LOAD("<Filename>",<Address>[,長さ][,offset]) ファイルのベタ読み込み

対応しないBASIC命令

  • ストレージへの書き込みに関する全て
    • SAVE
    • BSAVE
    • COPY "" TO ""(ファイルコピーをしないがエラーも出ないダミー命令になります)
    • OPEN "<filename>" FOR OUTPUT(出力用のOPEN宣言)
    • FIELD(データ分割)
    • PRINT #(ファイルへの出力をしないがエラーも出ないダミー命令になります)
    • NAME
    • KILL
  • ランダムアクセス
    • LSET、RSET
    • GET、PUT
  • 変数変換
    • CVD、CVS
    • MKD$、MKS$
  • その他
    • INPUT$
    • LFILES
    • MERGE
    • VARPTR

※カセットテープへの書き込み(CSAVE命令・SAVE命令(cas:)等)は利用できます。

対応するコンテンツ量

  • 32KB(いわゆるSimple ROM)
  • 128KB(1Mbit メガROM)
  • 256kB(2Mbit メガROM)
  • 512kB(4Mbit メガROM)
  • 1MB(8Mbit メガROM)
  • 2MB(16Mbit メガROM)
  • 4MB(32Mbit メガROM)※ASCII16形式

 2DDのディスクイメージ(720kB)をそのままROMイメージへ変換した場合、それを内包できるメガROMカートリッジ側の容量は最低1MB(8Mbit)が必要となります。1DDのディスクイメージ(360kB)の場合は、512kB(4Mbit)です。ですので、ROM化した際のコンテンツ量を減らしたいと思ったら、できるだけ小さいディスクイメージを採用して変換するのが得策です。

 なお、コンテンツ量を調節しやすいROM変換専用のディスクイメージも公開されています(後述)。これを用いると、シンプルな32KBのROMイメージも作成可能です。

Tablacus DISK ROM Lite for MSX v0.1.4.1でスロット切り替え時のスタックなどの処理を調整しました。GREY COLLEAGUEが32KBのROMで動作するようになりました。実質23KBでもこれだけできるんですね。 pic.twitter.com/phVWChScLJ — Gaku (@tablacus) 2023年7月7日

MSXの標準機能を使うよりも便利?な機能

 Tablacus DISK ROM Liteは、通常のMSXシステムを利用してROM化するよりも高機能で便利になる要素があります。

RAM 8KBのMSX1から利用可能

 MSX Disk BASICは高機能ではありますが、Disk BASICを動作させるためには本体RAMが32KB以上必須となっています。また、MSX-DOSは本体RAMが64KBが必須です。よって、FDD搭載機(=Disk BASICを利用できる環境)で動作するコンテンツは事実上64KB以上のRAM搭載を前提にして開発されています。

 対してROMカートリッジの利用が主となるMSXユーザーの所有機種は、規格はMSX1、本体RAMは16KB(最低限の8KBもある)といった状況すら十分に考えられます。

 Tablacus DISK ROM Liteを用いると、Disk BASICでは必須となっていた本体RAM 32KB以上という条件が撤廃され、最低限の8KB RAMでもBASICコンテンツが起動可能になります。カシオPV-7のような環境でも動作可能なBASICコンテンツをROM媒体で供給できるわけです。

BASICフリーエリアが広がる

 FDDが搭載されていなかったり利用不可の状態では、ストレージはカセットテープのみ利用可という素のBASIC…いわゆる「ROM BASIC」が起動します。このときのフリーエリアは最大約28KB(RAM搭載量により可変)で、どんなにRAMを増設しようがMSX BASICではこの28KBがほぼ上限値となります。

https://p.gigamix.jp/devmsx/cg/tablacus-disk-rom-lite_freearea_fig_1.png

 対してFDDが利用可能な状態で起動する「MSX Disk BASIC」は、ストレージ制御のためROM BASICよりフリーエリアが4~5kB程度減少します(約23kB)。

 Tablacus DISK ROM LiteはDisk BASICを利用しないROM BASIC上で動作するため、フリーエリアはROM BASIC並の28KB(HIMEM値 F280h)まで確保しています。

https://p.gigamix.jp/devmsx/cg/tablacus-disk-rom-lite_freearea_fig_4.png

 Tablacus DISK ROM LiteはROM上の仮想ファイルストレージへ高速アクセスできるため、最大28KBのメモリを確保しながらファイルストレージからのロードが可能になります。メモリと利便性のいいとこ取り、なのです!

参考:Disk BASICではどのくらいフリーエリアが減少するか

https://p.gigamix.jp/devmsx/cg/tablacus-disk-rom-lite_freearea_fig_2.png

 Disk BASIC ver.1(MSX-DOS1環境)では、ROM BASICと比べフリーエリアが約5kB減少します。この減少幅はFDDが1台構成の場合で、ストレージドライブが増えれば増えるだけフリーエリアがどんどん減少してゆきます。

https://p.gigamix.jp/devmsx/cg/tablacus-disk-rom-lite_freearea_fig_3.png

 Disk BASIC ver.2(MSX-DOS2環境)では、ROM BASICと比べフリーエリアが約3kB減少します。Disk BASIC ver.1よりは減少幅が少なくなっており、ドライブが増えてもフリーエリアの減少が発生しないようになりました。

 とは言え、MSX-DOS2の利用条件が本体RAMが128KB以上必須となっており、turbo R規格は標準装備されていますがそれ以外の多くの機種ではハードウェアの拡張が必要になるため、利用シーンは限られていると言えます。

ファイル転送速度が通常より速い

 Tablacus DISK ROM Liteのファイルロード速度の速さは本当に魅力です。Disk BASIC ver.2(MSX-DOS2)で利用できるHDDやSDカード等の最新ストレージはおろか、ドライブH(RAMディスク)より速いのです。

Tablacus DISK ROM Lite for MSX v0.1.2.1試してみました。R800だからかもしれないですけど画像のロード時間が想像以上に速くなって、これは良い意味で思わぬ副産物です!この速さがあれば今春に流行ったSCREEN2やSCREEN3アニメーションがBLOAD命令(ブロック転送)だけで実現できるかもしれません。 pic.twitter.com/BmHk7YDNCS — Takashi Kobayashi (@nf_ban) 2023年6月28日

 と言うのも、Disk BASICでのファイルロード処理はRAMのバッファエリアを経由して指定アドレスへ転送されるのですが、Tablacus DISK ROM Liteでのファイルロード処理はROMのストレージから指定アドレスへ直接転送されるので、バッファエリアへの経由処理が無いぶんDisk BASICよりも転送速度が速くなる構造になっています。これは実機はもとより、ファイル転送速度を極力減らせる各種エミュレータの動作でも体感できるほど変わります。

メガROM(1Mbit)☞ https://webmsx.org/?MACHINE=MSX2J&ROM=https://p.gigamix.jp/devmsx/cg/20230818_bload-offset-sample_2.rom シンプルROM(32KB)☞ https://webmsx.org/?MACHINE=MSX2J&ROM=https://p.gigamix.jp/devmsx/cg/20230818_bload-offset-sample_2_32kb.rom メガROMのほうが画像の転送速度が速い、気がする。 - Takashi Kobayashi (@nf_ban) 2023年8月18日
8KバンクのメガROMはページ1だけROMにすればOKなのに対しSimple-32K及び16KバンクのメガROMはページ2も使う必要があるのでスロット切り替えとページ2に被った際のスタックポインタの処理のオーバーヘッドがある分等で転送速度が変わってくるのだと思います。 - Gaku (@tablacus) 2023年8月18日
後はある程度大きいサイズのファイルを扱う場合、クラスタサイズが大きい方がオーバーヘッドが少ないので1セクタ256バイトの512KBより、1セクタ1024バイトの720KBのディスクの方が速くなります。細かいファイルの場合はそんなに差が出ないと思います。
 - Gaku (@tablacus) 2023年8月18日

 ROMイメージへの変換方法の違いでもデータ転送速度が変わるようです。とは言えこのへんの話はROMとメガROM、そして容量によってROMカートリッジの製造コストが可変する問題に繋がりますので、ケースバイケースです。

AUTOEXEC.BASによる自動起動ができる

 Disk BASICでは自動起動のための専用ファイル名「AUTOEXEC.BAS」が利用できましたが、ROM BASICでは自動起動の手段がありません。ユーザーが必ずCLOAD命令等をキーボードで入力し、カセットテープ等からプログラムをロードしなければなりませんでした。

 Tablacus DISK ROM LiteはROM BASIC上で起動するのにAUTOEXEC.BASによる自動起動に対応しています。ROM化する際にAUTOEXEC.BASをディスクイメージへ放り込んでおくだけでOK。

カセットテープのコンテンツも利用可能

 RAM32KB以上のMSX1のROM BASIC(利用可能な最大メモリ容量28KB)上で動作する「カセットテープで供給されたコンテンツ」が、BASICフリーエリア約23KBのDisk BASIC上ではメモリ不足のためロードできないといったケースが度々発生します。23KB以上のプログラムをDisk BASIC上で強引にロードするとMSXのシステムワークエリアを破壊するため、誤動作やフリーズといったトラブルを引き起こします。

 Tablacus DISK ROM Liteはフリーエリアの最大値がROM BASICから128バイト減少しただけの28KBに近い状態(HIMEM値 F280h)を保てますので、Disk BASICで発生するシステムワークエリア破壊のリスクがほぼありません。フロッピーディスクからのメディアコンバートだけでなく、カセットテープで提供されたコンテンツのROM化にも利用できます。

フルーツフィールドが動かなかったのは自分のミスでしたm(_ _)m Tablacus DISK ROM Lite for MSX v0.1.4.4にて、フルーツフィールド(PIO) 特別編超難解版テセウス(LOGIN) SUPER ILEVAN(POPCOM)が、MX-10(+16KB RAM)実機で起動することを確認しました。
(^^)v — ひぽぽ (ファミコンGimmick!👍) (@koichironakaza1) 2023年7月17日
雑誌掲載のプログラムそのままですが、機械語プログラムの場合は、AUTOEXEC.BASに BLOAD

 カセットテープのコンテンツを自動起動するには、データ読み込みを行うためのBASICプログラム「AUTOEXEC.BAS」を別途作成する必要があります。

 なお、Tablacus DISK ROM Liteのバージョンが上がるにつれて機能と互換性が向上する一方でフリーエリアは減少します。ver.0.7.3.2の時点で、フリーエリアは約27727バイトです。もし最新のバージョンでは動作しないのにメモリ不足の問題で過去のバージョンではコンテンツが動作するのであれば、過去のバージョンを採用するのも検討材料です。

階層ディレクトリが使用できる

Tablacus DISK ROM Lite for MSX v0.2.0.0アップしました。階層化ディレクトリに対応しました。もちろんMSX1でも動作します。複数のディスクをまとめる際にフォルダで分けるとファイル名の被りを考えなくても良くなります。 pic.twitter.com/c412XXNdEW — Gaku (@tablacus) 2023年7月28日

 MSX-DOSフォーマットの2DDフロッピーディスクは、コンテンツ量に関わらず最大112ファイルまでしか保存できない仕様上の制限がありますが、Disk BASIC ver.2(MSX-DOS2)で採用されたサブディレクトリをディスク内に作成することで112ファイルの制限を超えてファイルを保存することができます。

 カレントディレクトリの移動は、Disk BASIC ver.2と同様の「CALL CHDIR」命令を用います。

 サブディレクトリの作成はBASICの「CALL MKDIR」命令やDOS2の「mkdir」コマンドを用いて実機のフロッピーディスクやディスクイメージ内に予め実行しておく必要があります。

Tablacus DISK ROM Lite v0.2.0.0でサブディレクトリに対応したと聞き、ファイルパスの処理が面倒くさそうなBASICプログラムを作ってみた。さて、ROM化したらどうなるか… ※この2本はMSX Disk BASIC ver.2(MSX-DOS2)環境では正常に動作します pic.twitter.com/zMnOiIFrwn — Takashi Kobayashi (@nf_ban) 2023年7月30日
Tablacus DISK ROM Liteの実行結果、素晴らしいディレクトリ遷移!「.\(自分自身)」の指定でエラーが出るけどわざわざやる必要ないからこのままでヨシ。どノーマルMSX1(RAM16KB・FDD無)でのコンテンツの切り分け実行にも十分使えまっせ!👍 pic.twitter.com/SUwJ4Jtl2e — Takashi Kobayashi (@nf_ban) 2023年7月30日

 テストの実行結果は良好!カレントディレクトリ自身を表す「.\」の指定ではエラーが出ていましたが、最新版では対応しています。

ブートセクタに書かれたプログラムも実行可能に

結論は、フロッピーのブートセクタに仕掛けがある。ブート時にF6キーが任意の文字列に書き換えてからBASICのAUTOEXEC.BASが起動するから、正規版のソフトを持ってる人は問題なく起動する。ただ、Tablacus DISK ROM LiteでROM化するとFDDのブート処理がなくなるのでソフトが起動しない。なるほど~ — Takashi Kobayashi (@nf_ban) 2023年7月29日
BASIC上では気付かないけどフロッピーのブートセクターに何らかの処理を混ぜる手法は地味に有効だ。Ctrl+STOPの無効化とか、VDPを非表示にして起動するとか、コピープロテクトもそう。パソコン通信時代にブートセクタで制御するフリーソフトも公開されていた。ROM化する際の今後の課題になると思う。 pic.twitter.com/DA09r1876T — Takashi Kobayashi (@nf_ban) 2023年7月30日

 フロッピーディスク(やディスクイメージ)のブートセクタに特定のプログラムが書かれている場合でも、Tablacus DISK ROM LiteのROM化では実行できます。ブートセクタのプログラム処理に期待している他のプログラム(コンテンツ本体)も正常に動作できます。

「似非DOS for MSX」の併用で、MSX-DOSの外部コマンドもメガROMイメージで実行可能

Tablacus Disk Rom Lite v0.7.0.0アップ! DISK ROM無しで動くLite版でもMSX-DOS互換OSの似非DOSが動作するようになりました。MSX版LSX-Dodgersの存在価値がほぼなくなったよ https://github.com/tablacus/TablacusDiskRomLite/releases pic.twitter.com/u7JkSsMAIA — Gaku (@tablacus) 2024年8月29日

 MSX-DOSと互換性があるライセンスフリーMSX対応互換DOS「似非DOS for MSX(以後、似非DOS)」が、Tablacus DISK ROM Lite ver.7.0.0.0よりブート可能となりました。つまり…MSX-DOSの外部コマンド(と各種ファイル)もメガROMイメージへ変換可能であり、FDD非搭載機でもDOSの外部コマンドが実行可能になるのです。

 似非DOSはTablacus DISK ROM Liteと同じ作者のGakuさんによるプロダクトです。当ブログで似非DOSに関する特集記事を書きましたので、興味ある方はぜひお読みください。

gigamix.hatenablog.com

 似非DOSはAUTOEXEC.BATによる自動起動にも対応しています。DOSのコンテンツもROM化ですぐに実行できます。

 似非DOSを併用する場合、本体要求スペックが要・本体RAM 64KB以上へ上がります。これはMSX-DOSの動作条件と同じです。MSX2以降であれば64KB以上のRAM搭載が仕様で保証されていますが、64KB未満のMSX1の機種では似非DOSは動作しません。

MSX-DOSより効率が良い、LSX-Dodgersのディスクイメージ

 MSX-DOSフォーマットの2DDフロッピーディスクは、1バイトのファイルを保存しようとするとストレージは1024バイト消費してしまいます。

多分いつか来た道になると思うので先に書いておくのだけれど…MSXの場合2DDフロッピーディスクの空き容量は730112バイトですが、ここに1バイトのファイルを保存すると空き容量は729088に減る。そうです…1バイトのデータを保存すると実際は1024バイト(1KB)も空き容量が減っている。 pic.twitter.com/eAPZ33Sj5x — Takashi Kobayashi (@nf_ban) 2023年6月29日

 これは、MSX-DOSの2DDフロッピーディスクが1クラスタ1024バイト(1セクタ512バイト×2)のフォーマットとなっているからです。

 Tablacus DISK ROM Liteは、MSX-DOSフォーマットのほかに1クラスタ256バイト・512バイトの「LSX-Dodgers」フォーマットが利用可能です。LSX-Dodgersとは、主にシャープX1・MZシリーズ、NEC PC-8801等のZ80 CPUで動作するMSX-DOSCP/Mと互換性のあるライセンスフリーDOSなのですが、このフォーマットのディスクイメージを用いると、1バイトのファイルで消費するストレージ容量は最小256バイトとなります。

Tablacus ROM BIOS for MSX v0.1.3.0で1クラスタのサイズが256バイトのディスクに対応しました。ブランクディスクはこちらhttps://t.co/rAVewvMgsw — Gaku (@tablacus) 2023年6月30日

 お気づきになられましたか。1クラスタの使用量が下がるということは、MSX-DOSフォーマットよりもストレージの容量効率が最大4倍高くなるのでMSX-DOSフォーマットよりデータをより多く保存できる、ということです。

 クラスタサイズが小さくなることで細かなディスクアクセスが増える(=ロード時間が延びる)かも…は実機のFDDでファイルの断片化が激しければまぁ有り得ますが、これはROMなので問題ありません。爆速です。

 ROMイメージ化専用のブランクディスクイメージも公開されています。現在は32KBから4MBまでダウンロード可能です。LSX-DodgersフォーマットのディスクイメージはMSXの実機やエミュレータでは利用できませんが、ROMイメージ化の直前に使用するディスクイメージと割り切れば便利に使えそうです。

イメージ名 ROM容量 ディスク容量 1クラスタ 備考
td24kb.dsk 32KB 24kB 256B Simple ROM
td120kb.dsk 128KB 120kB 256B 1Mbit メガROM
td248kb.dsk 256kB 248KB 256B 2Mbit メガROM
td504kb.dsk 512kB 504kB 256B 4Mbit メガROM
td1mb.dsk 1024kB 1016KB 256B 8Mbit メガROM
td2mb.dsk 2048KB 2040kB 512B 16Mbit メガROM
td4mb.dsk 4096kB 4088KB 1024B 32Mbit, ASCII16形式
td120b.dsk 128KB 120kB 512B 1Mbit, DOS2の1D
td248b.dsk 256kB 248KB 512B 2Mbit, DOS2の1DD
td504b.dsk 512kB 504kB 512B 4Mbit, DOS2の2DD

↓ダウンロードはこちら↓ github.com

 表の下から3件についてはMSX-DOS2で読み書き可能なディスクイメージです(DOS1では認識できない)。1Dは1Dフォーマットが可能な機種のみ対応。DOS2で認識できる反面クラスタが256バイトから512バイトに増えているのでLSX-Dodgersフォーマットよりディスク効率は下がります。

今後の課題。過去の同人ソフトのROM化に失敗した事例

 '90年代から入手していた手持ちのMSX向け同人ソフトでROM化を試していますが、残念ながらROM化に失敗したり断念せざるを得ないケースというものが見えてきました。

DOSフォーマットでない・BASIC言語を用いないコンテンツ

 オールマシン語で自らコンテンツ管理を行い、セクタアクセスを前提にしたソフトウェアはTablacus DISK ROM Liteでは対応できません。

非対応の命令が利用されているコンテンツ

 Tablacus DISK ROM Liteで非対応の命令を利用するコンテンツは、エラーが発生したりフリーズするなどの不具合が発生します。

拡張BASICでディスク操作を独自拡張しているコンテンツ

ディスクからのデータ読込みを独自拡張してるっぽいのでNGなようです。BASIC部分はAUTOEXEC.BAS一本だけ!自然画モードを使用するのでMSX2+用かと思いきやBASICではSCREEN12へ遷移してなくて、実は色化けしながらMSX2でもSCREEN8で動くっぽい。そういうこともあるのか。うーん残念。 — Takashi Kobayashi (@nf_ban) 2023年8月4日
Tablacus DISK ROM Lite v0.2.0.2でF-nano2'をROM化。ブートセクタの処理がROM化でも機能することを確認(F6キーが変わってる)。Syntax errorは…ソフト内に実装されたファイル読込の拡張BASICが原因かな…。拙作DMシステム2同様、このような拡張があると残念ながらROM化では対応できません。 pic.twitter.com/gej8Cv7tcR — Takashi Kobayashi (@nf_ban) 2023年8月3日

 コンテンツが独自にBASICを拡張し、オリジナルのCALL命令やCMD命令でファイルロードするケース。Tablacus DISK ROM Liteは既存のDisk BASICの命令に対して処理をエミュレーションするため、独自拡張の命令は対応できません。

 なお、当クラブのミドルウェア「DMシステム2」にてCALL拡張したファイルロード関連命令(CALL LOAD等)については、作者様のご好意によりTablacus DISK ROM Liteで対応していただきました。本当に有り難いことです…

↓ DMシステム2のWebページはこちら ↓ www.gigamix.jp

 DMシステム2は64KB以上のRAM搭載環境が前提となります。MSX1でも動作可能ですがMSX1の多くの場合は本体へのメモリ増設が必要になります。

OPEN命令でファイルを開いているコンテンツ

 OPEN命令は利用シーンが多岐にわたる命令の一つです。ROM BASIC・Disk BASICの双方で利用可能です。

OPEN "GRP:" FOR OUTPUT AS #1 ←グラフィック画面に文字を記載する宣言として使用
OPEN "CAS:hoge" FOR INPUT AS #1 ←カセットテープのデータを読み込むために使用

①デバイス名称を省略しているので動作しない

 OPEN命令で開くファイルのデバイス名称を、ROM BASICではデバイス名称を省略できない仕様でしたが、Disk BASICでは省略が可能でした(省略するとカレントドライブのドライブレターを充当)。しかし、Tablacus DISK ROM LiteはROM BASICで起動するため、Disk BASICで省略可能だったデバイス名称(ドライブレター)を意識的に明示する必要があります

OPEN "hogehoge.dat" AS #1
      ↓
OPEN "A:hogehoge.dat" AS #1

 Tablacus DISK ROM Liteではドライブレター「A:」またはデバイス名称「ROM:」をファイル名の先頭に付けてOPEN命令を実行するよう、BASICプログラムを修正する必要があります。

 過去の同人ソフトの多くはOPEN命令のデバイス名称(ドライブレター)がほぼほぼ省略されていました。過去のコンテンツをTablacus DISK ROM LiteでROM化して途中でプログラムが停止するといった不具合の大半は、OPEN命令のデバイス名称省略によるものです。

 Disk BASICでは省略できる仕様ですし、FDDを複数台搭載する機種の場合はカレントドライブがA:にならないケースも想定されるのでBASICプログラムで「A:」を記述するのもそれはそれで問題がありますし、複数台に対応する処理をBASICで真面目に記述するのはそれなりにコストがかかる処理ですし、そもそも複数台搭載の実機がレアケースですし…デバイス名称を付けずに組まれたBASICプログラムが数多く出回る背景はやむを得ないところもあるかもしれません。

②LEN= でレコード長を指定しているので動作しない(ランダムアクセス)

10 OPEN "A:hogehoge.dat" AS #1 LEN=128
20 FIELD #1,128 AS A$
30 FOR I=1 TO 5:GET #1,I:PRINT A$:NEXT

 上記サンプルプログラムはデバイス名称を付けてOPEN命令を実行していますが、レコード長を指定するとシーケンシャルアクセスでなくランダムアクセスとなり、Tablacus DISK ROM Liteではランダムアクセスが現在未実装のため動作しません。ROM BASICでは「LEN=xxx」が解釈できず、Syntax errorで停止します。

 ランダムアクセスを行うためのFIELD命令やGET命令なども現在未実装です。ランダムアクセスの代替手段を考えねばなりませんね。

よって、OPEN命令によるファイルアクセスが含まれるMSXの過去コンテンツをTablacus DISK ROM LiteでメガROM化の際はBASICプログラムの修正が必要。特にランダムアクセスは大幅書き換えが必要かも?もし拙作DMシステム2を併用できる環境なら、このように組み換えれば一応それっぽく動きます。 pic.twitter.com/ZbZegaHyjN — Takashi Kobayashi (@nf_ban) 2024年9月9日

 もしコンテンツがRAM64KB以上必要 かつ 裏RAM(0000~7FFFh)を使用しないのであれば、拙作DMシステム2を導入するとTablacus DISK ROM Liteでランダムアクセスに似た処理を記述することは可能です。

フロッピーディスクにデータファイルを作成するコンテンツ

 ゲームのセーブデータなどのデータファイルやテンポラリファイルを、コンテンツが格納されているフロッピーディスクそのものへ作成するケースが意外と多いようです。フロッピーディスクのライトプロテクトノッチを開けたままにしないとゲームが進行できない…

 Tablacus DISK ROM LiteはROM BASICで起動するため、フロッピーディスクへアクセスできません。よってデータファイルを作成・保存することもできません。コンテンツをROM化するにあたり、頭を悩ませるポイントの一つが「フロッピーディスクへ保存していた各種データを今後はどこに保存すべきか」です。

gigamix.hatenablog.com

MSX-DOS2のRAMディスク(ドライブH)をテンポラリストレージとして使用するコンテンツ

 ゲームソフトのクイックセーブデータやキャッシュデータなどのテンポラリファイルをMSX-DOS2(Disk BASIC ver.2)のRAMディスク(ドライブH)へ作成するケースが意外と多いようです。Tablacus DISK ROM LiteはROM BASICで起動するためDOS2のRAMディスク機能を使用できません

若干脳がバグるスクショ。Tablacus DISK ROM Liteを使用したMSXはROM BASICが起動してるのにDOS2のCALL RAMDISKはOKが返る。けどHドライブは実在しない(DSKFが0で返る)。CALL MEMINI(通称MEMディスク)は使えるのでゲームのクイックセーブなど少量のTEMPデータならデータ保存はできる。 pic.twitter.com/1PB8dpgtrp — Takashi Kobayashi (@nf_ban) 2024年9月8日

 なお、テンポラリファイルをどうしても保存したい場合は、低容量であれば、MSX2MSX BASIC ver.2.x)以降で利用可能な「RAMディスク機能(CALL MEMINI、通称:MEMディスク)」を用いることは可能です。Tablacus DISK ROM LiteではMEMディスクへの読み書きは可能になっています。

DOS2のRAMDISK使う環境だとさすがにDISK BIOS入ってそうなので通常版のTablacus DISK ROMを使ったROM化で良いのでは…… - Gaku (@tablacus) 2023年8月19日

 とは言え、DOS2のRAMディスク機能を用いるということは事実上MSX turbo R専用コンテンツであると言えます。MSX turbo R専用コンテンツという位置づけで問題ないということであれば、今回のLite版ではなく通常版の「Tablacus DISK ROM(後述)」を利用すべきです。

ROM化の他の手段

より互換性が高いFDD搭載機向けROM化(Tablacus DISK ROM)

 フロッピーディスクドライブ(FDD)の搭載機種が対象となるROMイメージ変換ツールの「Tablacus DISK ROM」が先行リリースされています。今回の記事で取り上げたLite版よりも高い動作互換性を持っています。特にMSX turbo R専用コンテンツのROM化に便利です。

↓ Tablacus DISK ROMのWebページはこちら ↓ github.com

 Tablacus DISK ROMは本体にDISK BIOSが接続された機種(=FDD搭載機種)で仮想ストレージドライブを有効化するツールなため、DISK BIOSが存在しない機種(=FDD非搭載機種)ではROMが起動できません

MSX-DOS用コンテンツのROM化(LSX-Dodgers)

 MSX BASICではなくMSX-DOSのコンテンツをメガROMイメージへ簡単に変換できるツール「LSX-Dodgers」がリリースされています。LSX-DodgersはMSX-DOSCP/Mと互換性のあるZ80 CPU向けのライセンスフリーDOSですが、なぜかMSX実機向けにもリリースされており、MSX向けはTablacus DISK ROMのように仮想ストレージドライブを内包したメガROMイメージを作成できます。

↓ LSX-DodgersのWebページはこちら ↓ github.com

 LSX-DodgersはMSX-DOSとの互換性維持のため64KB以上のRAM搭載環境が前提となります。MSX1でも動作可能ですがMSX1の多くの場合は本体へのメモリ増設が必要になります。

 とは言え、LSX-Dodgersよりも互換性が高い「似非DOS」がTablacus DISK ROM Lite の ver.0.7.0.0 から起動可能となったため、今あえてLSX-Dodgersを利用する目的が失われています。

コンテンツのROM化における注意点

 ディスクイメージ(フロッピーディスク)のROMカートリッジ化により動作対象が幅広くなることで、これまで想定しなくてよかった事象に対してもケアが必要になってきました。

turbo Rで起動すると処理速度が速すぎる問題

 過去のコンテンツであるほど最新機種での高速処理を想定していません。MSX1・MSX2MSX2+での処理速度を前提に開発されたコンテンツをMSX turbo Rで起動すると、処理速度が速すぎて操作できないような問題が発生することがあります。

ブートセクタについては、turbo RをR800モードで起動するにはMSX-DOS2でフォーマットする必要があります。逆にturbo RをZ80モードで起動するにはDOS1でフォーマットする必要があります。turbo R以外は正直どっちでもいいです。MSX0も同様です。ブートセクタを自作できる人はご自由にどうぞ。 — Takashi Kobayashi (@nf_ban) 2023年3月20日
ディスクイメージでは発生しなかったがROMイメージ化した際に問題が一つ生まれた。DOS1モードで初期化したフロッピーはturboRではZ80モードで動作する…という仕様を前提にゲームスピードを決め打ちするソフトはROM化によってCPUモード変更がスルーされて常にR800モードで起動するため常に爆速… — Takashi Kobayashi (@nf_ban) 2023年7月9日

 ディスクイメージ(フロッピーディスク)ではフォーマットしたDOSのバージョンによって制作者が意識的にCPU処理速度を選択可能でした(DOS1ではZ80モード、DOS2ではR800モード)。Tablacus DISK ROM LiteでROM化するとこの処理がキャンセルされ、常にR800モードで動作します

 コンテンツの起動前に、turbo Rで起動している場合はZ80モードに変更する等の初期化処理を追加したほうが良いケースがあるかもしれません。

MSX1のチープ環境でも起動できてしまう問題

 同人ソフトが全盛だった1990年代は主に「FDDを搭載するMSX2+やturbo R」での動作を前提としてコンテンツが開発・供給されていたため、かつての規格である「MSX1かつFDD非搭載の機種」向けにコンテンツを作成するような動きは皆無でした。ROMカートリッジを個人で製造するのはとても難しく、MSX1にFDDを搭載して活用し続けるユーザーも殆ど居ませんでした。

 しかし2010年代頃より小ロットでROMカートリッジを生産できる技術や体制が確立するのと平行してレトロゲームブームが世界的にじわじわ広がる状況も相まって、かつて見向きされなかった「MSX1かつFDD非搭載の機種」がコンテンツ再生マシンとして見直されるようになってきました。

また、ROMカートリッジはどの機種でも差して試すことができ、FDD搭載機=事実上のMSX2以降という動作環境の決め打ちもできなくなるため、動作しない機種(例えばRAM16KBのMSX1等)向けの警告メッセージや前述のCPUモード変更等の処理を行うAUTOEXEC.BASを自作して 都度組み込まないとダメかもしれん。 — Takashi Kobayashi (@nf_ban) 2023年7月9日
あっ…RAMの容量チェックも必要だ。 このソフトはRAM8KBでは動作しません、とか… ※Tablacus DISK ROM LiteはRAM8KBの機種から利用可能だがBASICプログラムが32KB前提で組まれてると動かない ※LSX-DodgersはMSX-DOS互換のためRAM64KBが必須 — Takashi Kobayashi (@nf_ban) 2023年7月10日

 媒体がROMカートリッジに変換されているのでFDDの有無関係なく利用可能になり、A1GTのような最強環境でもMSX1のチープな機種でも等しくカートリッジを差すことができてしまいます。

 見向きされなかった旧機種は機能的にチープであることが明白で、規格はMSX1でRAM搭載容量は16KBが多く、カシオの機種においてはさらに少ない8KBという環境も有り得ます。Disk BASICでは32KBないし64KBのRAMで開発できたため、Disk BASICの動作環境を前提したコンテンツをROM化した場合に旧機種で起動するとBASICのメモリ不足で起動できなかったり不具合が発生するという問題が発生する場合があります。

 不具合の内容で本体を破壊するような事態は発生しない…と思いたいのですが不具合は無いことに越したことはありません。コンテンツの起動前に、コンテンツが推奨する動作環境を満たしていない場合は事前に警告を表示して終了するような安全対策を追加したほうが良いケースがあるかもしれません。

コンテンツ起動前に確認しておきたい動作環境

  • MSXの規格(MSX1・MSX2MSX2+MSX turbo R・MSX0 Stack)
  • RAM容量(8KB・16KB・32KB・64KB・256kB・512kB等)
  • CPU(Z80R800
  • MSX-MUSIC(FM音源)の有無
  • 漢字ROMの有無
  • Pana Amusement Cartridge(PAC)の有無 ※ゲームのセーブデータ保存等

参考:デバッグ完了の不具合報告

 こちらに上がっている報告は、最新版では修正されています。

COPY命令(矩形画像ファイル)が正しく読み込めない

今日もROM化のテスト。サークル名のロゴ表示にCOPY命令(による矩形画像ファイルの読み込み)を使用していたためBad file nameエラーが出てしまうパズルゲーム発見。ワンポイントのCGがある場合はBLOAD命令でなくCOPY命令で必要な部分のみ矩形で保存・転送するような運用、意外と多いのかしら? pic.twitter.com/lWDM9CMVMB — Takashi Kobayashi (@nf_ban) 2023年7月10日

BLOAD命令のオフセット指定

とりあえずバイナリデータを作る(スクショ1枚目。読める文字列は+10hから16文字)→B000hから始まるBSAVEヘッダを付ける(2枚目)→Disk BASICでSWEETと同じオフセットを付けてバイナリをロードしてみる(3枚目)→Tablacus DISK ROM LiteでROM化すると結果が違う(4枚目)。オフセットが無視されている? pic.twitter.com/5bR4G1hiqZ — Takashi Kobayashi (@nf_ban) 2023年8月17日

RAM16KB以下のMSX1で中間言語形式のBASICプログラムのロードに失敗する

ROM化したAUTOEXEC.BASのリスト化け(一部消失) MSX1とRAM16KB以下(32KB以下?)と中間言語形式のAUTOEXEC.BASの組み合わせで発生する事案らしい。RAM64KBなら中間言語形式でもリストが切れない。アスキーセーブなら16KBでもリストが切れない。なんだろうこれ… — Takashi Kobayashi (@nf_ban) 2023年8月13日
これ。MSX1のCF-2000(RAM16KB)で発見。RAM64KB搭載のMSX1なら中間言語形式とアスキーセーブのどちらでも問題なし。MSX2以降も同様に問題なし。 pic.twitter.com/LvWtWLzBoX — Takashi Kobayashi (@nf_ban) 2023年8月13日

 中間言語形式でBASICプログラムが保存できる機能はDisk BASICにしか備わっていません。ROM BASICはカセットテープによる保存なためアスキーセーブ形式だけで、中間言語形式での保存機能がありません。

 中間言語形式のBASICプログラムは保存したデータに絶対アドレスの指定が含まれます。Disk BASICの仕様で本体RAM 32KB以上搭載が確定するため、BASICフリーエリアの先頭アドレス(ワークエリアのBOTTOM(FC48h)に記載されるアドレス)は8000h以外に有り得ないので、データ保存時の絶対アドレス指定は8000hからの開始が基準となっています。

 ところが、Tablacus DISK ROM Liteの動作環境は本体RAM 8KBでも動作可能なため、BOTTOMはC000h(RAM 16KB)やE000h(RAM 8KB)も有り得るわけです。となると、中間言語形式のBASICプログラムに含まれる絶対アドレス指定を動作環境ごとにアドレス移動しなければ正しくロードできなくなります。

DISK-BASICではその辺りの命令がDISK対応に動作が変わる(素のBASICではどちらもテープに対するASCII形式命令)なので、その辺りの影響じゃないでしょうか? TublcusがDISK-BASICまでは完全模倣出来てないなら、素のBASICの動作の上に入出力だけDISKにすげ替えているのかと思われます — qajinMSX(小島英彰) (@QajinMSX) 2023年8月13日
拝見しました。BASICプログラムを一度実行して行番号でなくリンクポインタ化したプログラムの中間言語形式セーブデータを独自の処理でロードする場合 16KB環境などで$8000ではなく$C000に読み込んだらアドレス変更の対応が必要なんですねぇ… — うにの助うに太郎(うにスキー) (@uniskie2) 2023年8月15日
なるほど…だからMSX1でしか再現しない不具合だったのですね。地味に手間かかってますね。実機を持っていないので試せませんがPV-7のような8KB機でも処理されるんでしょうね。 — Takashi Kobayashi (@nf_ban) 2023年8月15日

 このロードできない不具合はのちのアップデートで解決されるのですが、元々は不具合ではなく仕様(ROM BASICでは中間言語形式は非対応)だったのです。とどのつまり、Talbacus DISK ROM Liteのシステムが中間言語形式かつBOTTOMが8000hでない場合は絶対アドレスの移動を行う処理を追加したことによってロードできない不具合が解決した、ということになります。

独自のIPL(イニシャルプログラムローダ)で起動するコンテンツ

今夜Tablacus DISK ROM Liteのテストに使った昔の同人ソフト「名探偵ぬまりん2」。ブートセクタから謎のIPLでフォントを変更してからBASICへ遷移するような特殊な制御をしていたのでAUTOEXEC.BASはあるけどROM化できなかった残念。MSXのフロッピーは遅いからROM化できたら快適になるだろうなぁ… pic.twitter.com/yD3IdeYN0V — Takashi Kobayashi (@nf_ban) 2023年8月14日

 コンテンツが独自のIPLで起動し何らかの処理を行ったのちにBASICへ遷移するケース。IPLは起動するファイルを独自に指定できるため、AUTOEXEC.BASが存在しないコンテンツも存在します。Tablacus DISK ROM Liteでは当初対応できませんでしたが現在は対応済みです。

MKI$・CVI

「百鬼夜行」という1991年にアスキーネットMSXで発表されたコンピレーションアルバムをTablacus DISK ROM LiteでROM化してみたらエラー発生。リストを見たらMKI$…この命令を見るの久しぶりだ😅ちなみにディスク起動だとおしゃれな画面と共にFM音源が楽曲を奏でます。 pic.twitter.com/mSp7FZ9wMH — Takashi Kobayashi (@nf_ban) 2023年8月16日
今宵はBASICで動く某えっちゲームのROM化をついうっかり試したけど断念です。OPENで開くがMAXFILES=2だったりFIELDで区切ってGETでデータ拾ったり至る所にVARPTRとCVIが出てきたり…Disk BASICのお手本と思うくらい当面無理な感じでした。ROM化したらロード時間が短くなって快適そうだけど… — Takashi Kobayashi (@nf_ban) 2023年8月18日

 MKI$が原因で動かなかったのですが、v0.7.3.2 で解消しました。