2020年8月頃は物凄く限定的な条件下で利用可能なようでしたが、2020年12月現在、敷居がグッと下がりました!
- そもそも論:MGSDRVの動作環境のおさらい
- 初代MSX(MSX1)での利用条件(2020.12.09現在)
- MSX1でMGSDRVの曲を聞く手順
- いま流行の「多機能カートリッジ」
- Nextor(ネクストル)という新OSの台頭
- MSX1「再活用」の課題
- MSX1+マッパーRAM+Nextor環境下における対処法
- 原因判明までの経緯
ちなみにMGSDRVの概要・ダウンロードは、こちらのリンクからどうぞ。 www.gigamix.jp
そもそも論:MGSDRVの動作環境のおさらい
MSXのミュージックドライバ「MGSDRV」の動作環境は以下の条件に合致するのものを推奨しています。
- MSX2(VRAM64KB)以上 ※MGSEL.COMの動作条件として必要
- MSX-DOS2 ※MGSDRVの通常利用の条件として必要
- RAM 128KB以上 ※マッパーRAM準拠。DOS2が128KB以上必要なので
あれば嬉しいものは以下の通り
つまり、初代MSX(MSX1)はそもそも非推奨です。もの凄く頑張ればMSX1+「MSX2バージョンアップアダプタ」+「FM-PAC」+「SCCカートリッジ」+「フロッピーディスクドライブ」+「MSX-DOS2カートリッジ」というような鬼の本体拡張を行えば可能かもしれませんが…MSX turbo R(FS-A1GT)ならSCCカートリッジ以外は全部入りですので、MGSDRVはMSX turbo Rでの利用が前提のDOSアプリなのです。
初代MSX(MSX1)での利用条件(2020.12.09現在)
- 本体RAMは、内蔵RAM 64KB(MSX-DOS利用時)または マッパーRAM(メモリマッパ)128KB以上(Nextor利用時)。
- Carnivore2、MegaFlashROM SCC+SD のような、ストレージドライブ・Nextorカーネル・マッパーRAM・音源チップを兼用する海外製の「多機能カートリッジ(後述)」のご利用がおすすめです。
- MSX1のマッパーRAM利用におけるMGSDRV側の初期化処理に不具合があることが判明しています。ご利用の実行環境でフリーズする場合は MSX1+マッパーRAM+Nextor環境下における対処法 で解決するかもしれませんのでぜひご覧ください。
MSX1でMGSDRVの曲を聞く手順
MGSP・MGSP v2(再生アプリ)で聴く
MGSDRV形式データ(拡張子.MGS)を再生するアプリの利用が、いま最もカンタンな方法です。
簡易再生アプリの「MGSP ver.1」およびMGSELライクのオーディオビジュアライザー搭載「MGSP ver.2」が存在します。どちらもHRA!さん(twitter@thara1129)が開発しています。バージョンアップと有志によるデバッグが活性化しています。ありがとうございます。現在のおすすめアプリは「MGSP ver.2」です。
MGSPのダウンロードはこちら → https://hra1129.github.io/software/mgsp_body.html
コマンドライン版の「MGSP ver.1」はMGSDRVを組み込み利用するアプリの開発サンプルコードとしても便利です。
DMシステム2(BASIC環境)で聴く
拙作ミドルウェア「DMシステム2」はMGSDRV(機能限定版)を搭載しており、MSX1のBASIC環境でもMGSDRVのデータ再生が行えます。
MSX1の場合、DMシステム2のインストール前に以下のBASICコマンドを実行しておく必要があります。
POKE &HFFF7,PEEK(&HFCC1)
DMシステム2「簡易BGMプレイヤー」のダウンロードはこちら。→ https://www.gigamix.jp/ds2/ds2bgm.html
ちなみにDMシステム2も元々はMSX2以降を想定したミドルウェアであり、MSX1は非推奨です。MSX2以降の機能を利用した拡張BASIC命令をMSX1で実行するとエラーや誤動作が発生します。
詳しくは後述しますが、MSX1でDMシステム2のインストールを試みた当初は、以下の通り散々な結果でした。
- マッパーRAM 128KB以上の環境下では、DMシステム2のインストール処理でフリーズしました。※512KBでテスト実施
- 標準RAM 64KBの環境下では、DMシステム2はインストール可能でした。
- 標準RAM 32KB以下の環境下では、DMシステム2はインストールできません(仕様です)。
技術確認したところ、MGSDRVもDMシステム2も、MSX2以降で利用できるワークエリア参照(FFF7h)がMSX1では利用できないことが判明し、これが誤動作の原因であったことが判明しました。
MGSC(MMLコンパイラアプリ)でMMLをコンパイルして聴く
MGSDRV形式のMMLデータ(拡張子.MUS)を用意し、MGSC.COMでMMLをコンパイルして聴く方法です。
らいきんぐ!さん(twitter@liking_birds)がまとめてくださりました。ありがとうございます。
MSXplayとは、PCやスマートフォンのWebブラウザ上でMGSDRV形式のMMLをエディット、コンパイルして音楽再生、MGSDRV形式データへのエクスポート、MMLのシェアリングができる便利なWebサービスです。今回はMSXplayでシェアリングされているMMLを取り出し、MSX1の実機で演奏までもってゆく方法を解説しています。
MSXplay.com はこちら → https://msxplay.com/
ブラウザ上からMMLファイルをエクスポートします。
MSXplayでMMLをエクスポートし、実機のMGSCでコンパイルする際の注意事項として、MSXplayでエクスポートされるMMLファイルの文字コードはUTF-8なため、実機で利用するにはエンコードをシフトJIS(Shift-JIS)へ変換したほうが安全です。特に曲のタイトル・作者名・コメントなどMML内に日本語が含まれる場合はUTF-8のままでは確実に誤動作します。
実機上でMMLのテキストデータを編集する際は、末尾に「0x1A」を付加することをお忘れなく。
いま流行の「多機能カートリッジ」
令和のいま流行しているMSXのトレンドって何言ってるんだよお前は、って話はあるのですが。
フロッピーディスクが死滅しつつある現状でMSXにおけるストレージの問題を解決すぺく、現在普及しているストレージをMSXで利用できるようにするカートリッジというものが生まれました。
さらに、スロット節約の流れで、1つのカートリッジに複数の機能を持たせる「多機能カートリッジ」というジャンルが生まれました。海外発のプロダクトがいくつか発売され、2020年現在の人気アイテムとなっています。
MegaFlashROM SCC+SD
Carnivore2
- CompactFlashカードスロット(Sunrise IDE互換品)
- 増設RAM 1MB (マッパーRAM)
- Nextor(DOS2上位互換のDOS)カーネル
- MSX-MUSIC(互換品)
- SCC音源(互換品)
- Pana Amusement CartridgeのSRAMバックアップ(互換品, 要改造)
Nextor(ネクストル)という新OSの台頭
最近の大容量ストレージを扱うにあたりMSX-DOSにつきまとうFAT12(最大容量32MBytes)の制限を突破する必要があり、MSX-DOS2の上位互換品である「Nextor(ネクストル)」が開発されました。NextorはFAT16対応(最大容量2GBytes)で、ストレージのカートリッジに含まれることでユーザーは快適に利用できるようになりました。
Nextorを動作するためには本体RAMをマッパーRAM 128KB以上へ増設する必要があるため、Nextorの利用を前提とした大容量ストレージカートリッジは概ね増設用マッパーRAM(やオマケ要素の各種音源)も搭載しています。こういった多機能カートリッジをMSX1で利用することで、MSX1でもSDカードをストレージドライブに設定できたり、SCC音源・FM音源による音楽再生を楽しめることが可能になりました。
MSX1「再活用」の課題
ただし、多機能カートリッジでMSX1を「再活用」することで問題が見つかることがあります。
Nextor=DOS2 ではない
NextorはMSX-DOS2の上位互換品として開発されていますが、DOS2との完全互換ではありません。DOS2で動作するコマンドアプリがNextorで動作するかはアプリの実装次第ですので、やってみなければ分かりません。
メインROMスロット番号の参照先がMSX1では不定値のために動作しないケース ※MGSDRVが該当します
64KB以上のRAMアクセスを仕様化した「マッパーRAM(メモリマッパー)」のマッパーBIOSはMSX2の時代に実装されています。MSX1の時代には無かった概念です。よってMGSDRVを含む「マッパーRAMを利用するコマンドアプリ」や「MSX2以降での利用を想定したコマンドアプリ」がMSX1+マッパーRAM+Nextorの環境下では動作しない報告が度々上がっています。
MGSDRVは元々MSX2以降の規格での利用を想定しており、メインROMスロット番号の参照をMSX2以降で新設されたワークエリア FFF7h(MINROM)から参照していました。FFF7hはMSX1では使用されない(不定値となる)ため、MSX1の実行環境では正しいスロット番号が参照できないためにMGSDRVの常駐処理でフリーズが発生していた模様です。
この頃は原因が分かっていませんでしたが、マッパーRAMが搭載されていたMX-10はMSX1なのでワークエリアFFF7hが不定値のため暴走、F1XDはMSX2なのでワークエリアFFF7hが正しいため動作可能、ということが後々判明しました。
ちなみにDOS2互換を謳うNextorですが、マッパーRAM制御機能がDOS2の挙動と少し違うという話もあるようです。
古いアプリはNextor対応への修正がされにくい
そもそも作者さんが不明、作者さんが居たとしても現在のMSX1ないしNextorをとりまく環境を再整備することができずにソフトウェアの修正が行えない場合が多々あります。
MSX1+マッパーRAM+Nextor環境下における対処法
MGSDRV本体に限らず、MSX2以降での動作を前提としていたMSX1で動作しない各種DOSアプリケーションにおいても、以下の手順を先行追加することでMSX1+マッパーRAM+Nextor環境で利用できる可能性が高まることのようです。
- FCC1h(EXPTBL)からメインROMスロット番号を参照するようにプログラムを修正する
- プログラムでワークエリア FFF7h(MINROM)が参照される前にあらかじめ FCC1h(EXPTBL)の内容をFFF7hへコピーしておく
2020年12月9日現在、HRA!さん開発のMGSDRV音楽プレイヤーアプリ「MGSP」はこの問題を解消するプログラムが実装されています。そして現在最も簡単な解決方法は、該当アプリ実行前にHRA!さん開発の「MAINROMP.COM」を先に実行しておくことです。上記ワークエリア値の変更を実現し、ワークエリア参照の問題を解決します。
MSX1用再生アプリ「MGSP」および「MAINROMP.COM」はHRA!さんのWebサイトにてダウンロードできます。→ https://hra1129.github.io/software/mgsp1_body.html
原因判明までの経緯
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の実行環境で、常駐インストールが可能になる →不具合の原因が確定する
皆さんの情報提供があってフリーズの原因が判明しました。ありがとうございます。
FCC1hとFFF7hについては「MSX2バージョンアップアダプタ」への対応でそれぞれのメモリ参照が必要となるものです。詳しくは以下のtwitterのツリーをご参照ください。
(´・ω・`)ショボーン https://t.co/T28RT2qVaB pic.twitter.com/tK9bL9KYJD
— ぱるぷ (@parupu_x_nagae) 2020年12月8日
MGSDRVのトップページ → https://www.gigamix.jp/mgsdrv/