【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で配る
- Tablacus DISK ROM Liteとは
- できること
- 複数のデータを内包するコンテンツのROM化に向いている
- 対応するBASIC命令
- 対応しないBASIC命令
- 対応するコンテンツ量
- MSXの標準機能を使うよりも便利?な機能
- 今後の課題。過去の同人ソフトのROM化に失敗した事例
- ROM化の他の手段
- コンテンツのROM化における注意点
- 参考:デバッグ完了の不具合報告
フロッピーディスクが手に入らない!だからROMで配る
MSXによるアマチュアクリエイトが全盛だった'90年代、フロッピーディスクはMSXの同人ソフトを安く手軽に配る手段にもってこいのメディアでした。が、2024年の今ではメディアもドライブも製造中止となり、入手困難で期待できないブツになってしまいました。過去のソフトについてはカビや磁気の劣化によるデータ損失という時間的な課題も解決しなければなりません。
一方で、昔ながらの製造技術で作られていたROMカートリッジは2024年の今では技術の進化により個人規模で小ロットの生産が可能になり、今後のMSXシーンにおけるソフトウェア提供手段としてのROMカートリッジが再び注目されています(ということにしてください)。
ROMカートリッジ向けのソフトはオールマシン語での開発が一般的ですが、MSX BASICで開発したコンテンツもフロッピーディスクのような感覚でROM化できるとなれば…創作の敷居はもっと下がると思いませんか?Tablacus DISK ROM Liteなら、それが実現できるかもしれません。
Tablacus DISK ROM Liteとは
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非搭載機)でも利用できます。
できること
- 生成した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>")
- LOAD
- 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イメージも作成可能です。
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がほぼ上限値となります。
対してFDDが利用可能な状態で起動する「MSX Disk BASIC」は、ストレージ制御のためROM BASICよりフリーエリアが4~5kB程度減少します(約23kB)。
Tablacus DISK ROM LiteはDisk BASICを利用しないROM BASIC上で動作するため、フリーエリアはROM BASIC並の28KB(HIMEM値 F280h)まで確保しています。
Tablacus DISK ROM LiteはROM上の仮想ファイルストレージへ高速アクセスできるため、最大28KBのメモリを確保しながらファイルストレージからのロードが可能になります。メモリと利便性のいいとこ取り、なのです!
参考:Disk BASICではどのくらいフリーエリアが減少するか
Disk BASIC ver.1(MSX-DOS1環境)では、ROM BASICと比べフリーエリアが約5kB減少します。この減少幅はFDDが1台構成の場合で、ストレージドライブが増えれば増えるだけフリーエリアがどんどん減少してゆきます。
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ディスク)より速いのです。
と言うのも、Disk BASICでのファイルロード処理はRAMのバッファエリアを経由して指定アドレスへ転送されるのですが、Tablacus DISK ROM Liteでのファイルロード処理はROMのストレージから指定アドレスへ直接転送されるので、バッファエリアへの経由処理が無いぶんDisk BASICよりも転送速度が速くなる構造になっています。これは実機はもとより、ファイル転送速度を極力減らせる各種エミュレータの動作でも体感できるほど変わります。
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化にも利用できます。
カセットテープのコンテンツを自動起動するには、データ読み込みを行うためのBASICプログラム「AUTOEXEC.BAS」を別途作成する必要があります。
なお、Tablacus DISK ROM Liteのバージョンが上がるにつれて機能と互換性が向上する一方でフリーエリアは減少します。ver.0.7.3.2の時点で、フリーエリアは約27727バイトです。もし最新のバージョンでは動作しないのにメモリ不足の問題で過去のバージョンではコンテンツが動作するのであれば、過去のバージョンを採用するのも検討材料です。
階層ディレクトリが使用できる
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のROM化では実行できます。ブートセクタのプログラム処理に期待している他のプログラム(コンテンツ本体)も正常に動作できます。
「似非DOS for MSX」の併用で、MSX-DOSの外部コマンドもメガROMイメージで実行可能
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に関する特集記事を書きましたので、興味ある方はぜひお読みください。
似非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-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-DOS・CP/Mと互換性のあるライセンスフリーなDOSなのですが、このフォーマットのディスクイメージを用いると、1バイトのファイルで消費するストレージ容量は最小256バイトとなります。
お気づきになられましたか。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でディスク操作を独自拡張しているコンテンツ
コンテンツが独自に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命令なども現在未実装です。ランダムアクセスの代替手段を考えねばなりませんね。
もしコンテンツがRAM64KB以上必要 かつ 裏RAM(0000~7FFFh)を使用しないのであれば、拙作DMシステム2を導入するとTablacus DISK ROM Liteでランダムアクセスに似た処理を記述することは可能です。
フロッピーディスクにデータファイルを作成するコンテンツ
ゲームのセーブデータなどのデータファイルやテンポラリファイルを、コンテンツが格納されているフロッピーディスクそのものへ作成するケースが意外と多いようです。フロッピーディスクのライトプロテクトノッチを開けたままにしないとゲームが進行できない…
Tablacus DISK ROM LiteはROM BASICで起動するため、フロッピーディスクへアクセスできません。よってデータファイルを作成・保存することもできません。コンテンツをROM化するにあたり、頭を悩ませるポイントの一つが「フロッピーディスクへ保存していた各種データを今後はどこに保存すべきか」です。
MSX-DOS2のRAMディスク(ドライブH)をテンポラリストレージとして使用するコンテンツ
ゲームソフトのクイックセーブデータやキャッシュデータなどのテンポラリファイルをMSX-DOS2(Disk BASIC ver.2)のRAMディスク(ドライブH)へ作成するケースが意外と多いようです。Tablacus DISK ROM LiteはROM BASICで起動するためDOS2のRAMディスク機能を使用できません。
なお、テンポラリファイルをどうしても保存したい場合は、低容量であれば、MSX2(MSX BASIC ver.2.x)以降で利用可能な「RAMディスク機能(CALL MEMINI、通称:MEMディスク)」を用いることは可能です。Tablacus DISK ROM LiteではMEMディスクへの読み書きは可能になっています。
とは言え、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-DOS・CP/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・MSX2・MSX2+での処理速度を前提に開発されたコンテンツをMSX turbo Rで起動すると、処理速度が速すぎて操作できないような問題が発生することがあります。
ディスクイメージ(フロッピーディスク)ではフォーマットした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の有無関係なく利用可能になり、A1GTのような最強環境でもMSX1のチープな機種でも等しくカートリッジを差すことができてしまいます。
見向きされなかった旧機種は機能的にチープであることが明白で、規格はMSX1でRAM搭載容量は16KBが多く、カシオの機種においてはさらに少ない8KBという環境も有り得ます。Disk BASICでは32KBないし64KBのRAMで開発できたため、Disk BASICの動作環境を前提したコンテンツをROM化した場合に旧機種で起動するとBASICのメモリ不足で起動できなかったり不具合が発生するという問題が発生する場合があります。
不具合の内容で本体を破壊するような事態は発生しない…と思いたいのですが不具合は無いことに越したことはありません。コンテンツの起動前に、コンテンツが推奨する動作環境を満たしていない場合は事前に警告を表示して終了するような安全対策を追加したほうが良いケースがあるかもしれません。
コンテンツ起動前に確認しておきたい動作環境
- MSXの規格(MSX1・MSX2・MSX2+・MSX turbo R・MSX0 Stack)
- RAM容量(8KB・16KB・32KB・64KB・256kB・512kB等)
- CPU(Z80・R800)
- MSX-MUSIC(FM音源)の有無
- 漢字ROMの有無
- Pana Amusement Cartridge(PAC)の有無 ※ゲームのセーブデータ保存等
参考:デバッグ完了の不具合報告
こちらに上がっている報告は、最新版では修正されています。
COPY命令(矩形画像ファイル)が正しく読み込めない
BLOAD命令のオフセット指定
RAM16KB以下のMSX1で中間言語形式のBASICプログラムのロードに失敗する
中間言語形式で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プログラムに含まれる絶対アドレス指定を動作環境ごとにアドレス移動しなければ正しくロードできなくなります。
このロードできない不具合はのちのアップデートで解決されるのですが、元々は不具合ではなく仕様(ROM BASICでは中間言語形式は非対応)だったのです。とどのつまり、Talbacus DISK ROM Liteのシステムが中間言語形式かつBOTTOMが8000hでない場合は絶対アドレスの移動を行う処理を追加したことによってロードできない不具合が解決した、ということになります。
独自のIPL(イニシャルプログラムローダ)で起動するコンテンツ
コンテンツが独自のIPLで起動し何らかの処理を行ったのちにBASICへ遷移するケース。IPLは起動するファイルを独自に指定できるため、AUTOEXEC.BASが存在しないコンテンツも存在します。Tablacus DISK ROM Liteでは当初対応できませんでしたが現在は対応済みです。
MKI$・CVI
MKI$が原因で動かなかったのですが、v0.7.3.2 で解消しました。