Gigamix Online

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

MGSDRVの音楽データをMSX1で聴きたい!

随時更新中。2020年8月頃は物凄く限定的な条件下で利用可能なようでしたが、少し敷居が下がりました!

MSX1+NextorでMGSDRVをインストール

初代MSX(MSX1)での利用条件(2020.9.18現在)

  • 本体RAMは、内蔵RAM 64KB(MSX-DOS利用時)または マッパーRAM 128KB以上(Nextor利用時)。
  • Carnivore2、MegaFlashROM SCC+SD のような、ストレージドライブ・Nextorカーネル・マッパーRAM・音源チップを兼用する海外製の多機能カートリッジのご利用がおすすめです。
  • Nextorの利用時、MSX1のマッパーRAMにおけるMGSDRV側の初期化処理に問題があり、ご利用の実行環境でフリーズする場合は後述の非公式パッチを利用することで解決できるようです。

MSX1でMGSDRVの曲を聞く手順

MGSP(再生アプリ)

MGSDRVをNextor(DOS2の上位互換OS)上で常駐し、MGSDRV形式データ(拡張子.MGS)を再生する方法です。

HRA!さん(twitter@thara1129)が作成してくださりました。ありがとうございます。

MGSC(MMLコンパイラアプリ)

MGSDRV形式のMMLデータ(拡張子.MUS)を用意し、MGSC.COMでMMLコンパイルして聴く方法です。

らいきんぐ!さん(twitter@liking_birds)がまとめてくださりました。ありがとうございます。

MSXplayとは、Webブラウザ上でMGSDRV形式のMMLをエディット、コンパイルして音楽再生、MGSDRV形式データへのエクスポート、MMLのシェアリングができる便利なWebサービスです。今回はMSXplayでシェアリングされているMMLを取り出し、MSX1の実機で演奏までもってゆく方法を解説しています。

そもそも論(MGSDRVの動作環境のおさらい)

gigamix.hatenablog.com

 MSXのミュージックドライバ「MGSDRV」の動作環境は以下の条件に合致するのものを推奨しています。

  • MSX2(VRAM64KB)以上 ※MGSEL.COMの動作条件として必要
  • MSX-DOS2 ※MGSDRVの通常利用の条件として必要
  • RAM 128KB以上 ※マッパーRAM準拠。DOS2が128KB以上必要なので

 あれば嬉しいものは以下の通り

  • FM音源MSX-MUSIC)とSCC音源
  • 漢字ROM ※MGSEL.COMの日本語表示機能として

 MSXturboRならSCC以外は全部入りですのでほぼturboRでの利用が前提なのですが、それ以下の規格ですと本体拡張が必要です。MSX-DOS2カートリッジを挿したり、FM-PACを挿したり…

 つまり、初代MSX(MSX1)は非推奨です。もの凄く頑張れば「MSX2バージョンアップアダプタ」+「FM-PAC」+「SCCカートリッジ」+「フロッピーディスクドライブ」+「MSX-DOS2カートリッジ」…鬼のような拡張を行えば可能かもしれませんがスロットが圧倒的に足りません。

いま流行の「多機能カートリッジ」

 令和のいま流行しているMSXのトレンドって何言ってるんだよお前は、って話はあるのですが。

 フロッピーディスクが死滅しつつある現状でMSXにおけるストレージの問題を解決すぺく、現在普及しているストレージをMSXで利用できるようにするカートリッジというものが生まれました。

 さらに、スロット節約の流れで、1つのカートリッジに複数の機能を持たせる「多機能カートリッジ」というジャンルがあり、海外発のプロダクトがいくつか発売されています。

MegaFlashROM SCC+SD

www.msx.org

  • SDカードスロット(MegaSCSI・MegaSD互換品)
  • RAM 512KB 拡張
  • Nextor(DOS2上位互換のDOSカーネル
  • SCC音源(互換品)

Carnivore2

www.msx.org

  • CompactFlashカードスロット(Sunrise IDE互換品)
  • RAM 1MB拡張
  • Nextor(DOS2上位互換のDOSカーネル
  • MSX-MUSIC(互換品)
  • SCC音源(互換品)
  • Pana Amusement CartridgeのSRAMバックアップ(互換品, 要改造)

 最近の大容量ストレージを扱うにあたりMSX-DOSにつきまとうFAT12(最大容量32MBytes)の制限を突破する必要があり、MSX-DOS2の上位互換品である「Nextor」が開発されました。NextorはFAT16対応(最大容量2GBytes)で、ストレージのカートリッジに含まれることでユーザーは快適に利用できるようになりました。

www.msx.org

 そしてこういった多機能カートリッジをMSX1で利用することで、MSX1でもSDカードをストレージドライブに設定できたり、SCC音源を利用できたりすることが可能になりました。

MSX1「再活用」の課題

 ただし、多機能カートリッジでMSX1を「再活用」することで問題が見つかることがあります。

Nextor=DOS2 ではない

 NextorはMSX-DOS2の上位互換品として開発されていますが、DOS2との完全互換ではありません。DOS2で動作するコマンドアプリがNextorで動作するかは、やってみなければ分かりません。

マッパーRAMへのアクセス方法がMSX1で怪しい(私がよく分かっていないだけかもしれません)

 64KB以上のRAMアクセスを仕様化した「マッパーRAM(メモリマッパー)」のマッパーBIOSMSX2の時代に実装されています。MSX1の時代には無かった概念です。よってマッパーRAMを利用するDOS2のコマンドアプリがMSX1+Nextorでは動作しない報告が上がっています。

 MGSDRVはMSX-DOS2環境下に「常駐(メモリに配置し続ける)」することを通常の利用方法としています。Nextorを含む多機能カートリッジではMSX1のマッパーRAMにも標準的に対応していました。

 ですが、MGSDRV 3.20では元々MSX2以降の規格での利用を想定しており、メインROMスロット番号の参照をMSX2以降で新設されたワークエリア FFF7h(MINROM)から参照していました。MSX1ではFFF7hが使用されないため内容と不定となっていました。このためMSX1の実行環境では正しいスロット番号が参照できないためにMGSDRVの常駐処理でフリーズが発生していた模様です。

 よって、MSX1においては以下のような手順を追加することで不具合が解決できることのようです。

  • FCC1h(EXPTBL)からメインROMスロット番号を参照するようにプログラムを修正する
  • プログラムで FFF7h(MINROM)が参照される前にあらかじめ FCC1h(EXPTBL)の内容をFFF7hへコピーしておく

 拙作DMシステム2でもMGSDRVを搭載していますのでMSX1でDMシステム2が動作するのであればMGSDRVのデータ再生がBASICから行えるのでは?と考え、MSX1でDMシステム2のインストールを試みました。

 が、RAMが64KBのままならインストール可能ですがマッパーRAM 512KB搭載の状態ではフリーズします。WebMSXだからの現象なのか、実機ではまた別の挙動をするのか…?もしかすると前述のスロット番号参照先が合っていないのかもしれません。

www.gigamix.jp

古いアプリはNextor対応への修正がされにくい

 そもそも作者さんが不明、作者さんが居たとしても現在のMSX1ないしNextorをとりまく環境を再整備することができずにソフトウェアの修正が行えない場合が多々あります。

原因判明までの経緯

WebMSX+MSX1+Nextorの実行環境ではMGSDRVを常駐インストールできる

   ↓

実機(カシオ MX-101)を再現したOpenMSX+Carnivore2+Nextor+MGSDRV 3.20の実行環境ではインストール時にフリーズする(3.04ではフリーズしない)

   ↓

調査の結果、MSX1では未定義のFFF7hを参照しているMGSDRV 3.20のコードが原因であることが判明する

   ↓

MGSDRVのバージョンを3.04から3.20へ上げたことでフリーズする原因は、MSX2バージョンアップアダプタによるMSX2実行環境に対応したためである可能性が指摘される

   ↓

FFF7hはMSX2以降で新設されたメインROMスロット番号のワークエリアでありMSX1では初期化されないため、内容によってはRAMへのアクセスが正常に行えずフリーズする可能性があることが判明する

   ↓

FFF7hの参照箇所をFCC1hに変更する、MSX1+RAM64K+Nextorで動作する非公式パッチが開発される

   ↓

実機(カシオ MX-10)+MegaFlashROM SCC+SD+Nextorの実行環境で、常駐インストールが可能になる →不具合の原因が確定する

皆さんの情報提供があってフリーズの原因が判明しました。ありがとうございます。