Gigamix Online

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

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

 2020年8月頃は物凄く限定的な条件下で利用可能なようでしたが、2020年12月現在、敷居がグッと下がりました!

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

ちなみにMGSDRVの概要・ダウンロードは、こちらのリンクからどうぞ。 www.gigamix.jp

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

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

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

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

  • FM音源MSX-MUSIC)とSCC音源
  • MSX標準漢字ROM ※MGSEL.COMの日本語表示機能として
  • MSXView 漢字ROMカートリッジ ※MGSEL.COMの日本語表示機能として

 つまり、初代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の曲を聞く手順

 MGSDRV形式楽曲データ(拡張子.MGS)を再生するアプリの利用が、いま最もカンタンな方法です。

MGSP・MGSP v2(再生アプリ)で聴く

 MGSPは、以下の2種類が存在します。

  • MGSP ver.1:コマンドラインから再生する簡易再生アプリ
  • MGSP ver.2:オーディオビジュアライザー搭載の万能再生アプリ

10/23 昼の作業 MGSPコーディング(1) 一部の漢字(
もう一つ、MGSPは漢字ROMを持たないMSX1,MSX2でも漢字混じりで曲名表示できるのが他のプレイヤーにはない優位点ですね。MSX1のMX-101でちゃんと動くのです。 — HRA! (@thara1129) 2020年10月21日

 どちらもHRA!さん(twitter@thara1129)が開発しています。バージョンアップと有志によるデバッグが活性化しています。ありがとうございます。現在のおすすめアプリは「MGSP ver.2」です

 MGSPのダウンロードは、MGSDRVのページから。→ https://www.gigamix.jp/mgsdrv/

https://t.co/LiYNNUiFvs MGSP v1.0 に仕立て上げました。コマンドラインオプションが付いたのと、BGMとして演奏できるようにしました。FS-A1GT + MegaFlashROM で動くのを簡単に確認#MSX #MGSDRV — HRA! (@thara1129) 2020年9月17日
おおぉ。MGSP、動きました。実機に持っていってみよう!#MSX #MGSDRV pic.twitter.com/xfBLgXYk7R — Takashi Kobayashi (@nf_ban) 2020年9月18日

 コマンドライン版の「MGSP ver.1」はMGSDRVを組み込み利用するアプリの開発サンプルコードとしても便利です。MGSP ver.1はMGSDRVを常駐した状態で利用するため、MSX1ではNextor DOSの実行環境が必須です。

MGSQCで聴く

MGSQC

 MGSQCは、DOSコマンドラインからMGSDRV形式楽曲データを再生・停止するアプリです。コマンドライン(文字入力)で命令するだけなので、MSX1のスクリーンモードでも利用できます。

mgsqc <filename> /P ←MGSデータの再生
mgsqc /S ←MGSデータの停止

 MGSQCはMGSDRVを常駐した状態で利用するため、MSX1では Nextor DOSの実行環境が必須です。

 MGSQCのダウンロードは、MGSDRVのページから。→ https://www.gigamix.jp/mgsdrv/

DMシステム2(BASIC環境)で聴く

DMシステム2

 拙作ミドルウェア「DMシステム2」はMGSDRV(機能限定版)を搭載しており、MSX1のBASIC環境でもMGSDRVのデータ再生が行えます。

 DMシステム2「簡易BGMプレイヤー」のダウンロードはこちら。→ https://www.gigamix.jp/ds2/ds2bgm.html

こぼれ話

 ちなみに…DMシステム2も元々はMSX2以降を想定したミドルウェアであり、MSX1は非推奨です。MSX2以降の機能を利用した拡張BASIC命令をMSX1で実行するとエラーや誤動作が発生します。

 詳しくは後述しますが、MSX1でDMシステム2のインストールを試みた当初は、以下の通り散々な結果でした。

WebMSXでMSX1+DMシステム2の動作テストをやり始めているのだけれど、昨日はできたのに今日はインストールに失敗(フリーズ)するんですよね… https://t.co/M5tl3panBP — Takashi Kobayashi (@nf_ban) 2020年9月6日

  • マッパーRAM 128KB以上の環境下では、DMシステム2のインストール処理でフリーズしました。※512KBでテスト実施
  • 標準RAM 64KBの環境下では、DMシステム2はインストール可能でした。
  • 標準RAM 32KB以下の環境下では、DMシステム2はインストールできません(仕様です)。

MSX1+マッパRAMの環境でDMシステム2のインストールに失敗する報告を過去にツイートしたのですが、HRA!さんのMGSPに付属するMAINROMPを実行してからDMシステム2のインストールを行ったら成功しました(かもしれない)。失敗の原因特定か!?DM-System2 works on MSX1 + Mapped RAM + Nextor environment pic.twitter.com/YnVaaypuoa — Takashi Kobayashi (@nf_ban) 2020年10月13日

 技術確認したところ、MGSDRVもDMシステム2も、MSX2以降で利用できるワークエリア参照(FFF7h)がMSX1では利用できないことが判明し、これが誤動作の原因であったことが判明しました。MSX1の場合、DMシステム2のインストール前に以下のBASICコマンドを実行しておく必要がありました。

POKE &HFFF7,PEEK(&HFCC1)

MGSC(MMLコンパイラアプリ)でMMLコンパイルして聴く

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

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

MSXplayでソースコードを公開しているものを、WebMSX上で聞く手順を簡単にまとめておきます(ちょくちょく地雷があったので、その点の解説も含め)。以下に続けていきます。 — らいきんぐ! (@liking_birds) 2020年9月5日

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

 MSXplay.com はこちら → https://msxplay.com/

(続き)※ちなみに環境はWindowsとします。1. MSXplayで目的のソースコードを表示させます。2. そのコードをExport→MML形式でダウンロードを選択して保存するか、テキストエディタで保存します (このファイル名を仮に「A.MUS」とします)。 — らいきんぐ! (@liking_birds) 2020年9月5日
[手順追加(仮)] ※一部足らなかったので追加2-A. 手順2でファイルを保存する際、改行コードを「CR+LF」にして保存をします。直接ダウンロードした場合は、各種テキストエディタ等で、改行コードをCR+LFにして上書き保存します。 — らいきんぐ! (@liking_birds) 2020年9月5日

 ブラウザ上からMMLファイルをエクスポートします。

ありがとうございます。問題対処のレイヤー分けとしてはおっしゃる通りと思います〜。MMLのエンコードはよくお気づきで...‼︎ こちらは実機でコンパイルはまぁかなりレアな用途かなと思い、グローバル対応なUTF8を選んでいました。 — DSA (@ym2413) 2020年11月6日

 MSXplayでMMLをエクスポートし、実機のMGSCでコンパイルする際の注意事項として、MSXplayでエクスポートされるMMLファイルの文字コードUTF-8なため、実機で利用するにはエンコードシフトJIS(Shift-JIS)へ変換したほうが安全です。特に曲のタイトル・作者名・コメントなどMML内に日本語が含まれる場合はUTF-8のままでは確実に誤動作します。

(続き)3. コマンドプロンプトを起動し「copy /a A.MUS A1.MUS」を実行します。これは、テキストの末尾に「0x1A(CP/Mでのテキスト終端コード)」を付加するためのおまじないです。 — らいきんぐ! (@liking_birds) 2020年9月5日
(続き)4. 「MSXDOS.SYS」「COMMAND.COM」「MGSC.COM」「MGSDRV.COM」「A_.MUS (末尾に0x1aをつけたやつ)」を用意します。5. WebMSXを起動し、4.のファイル5つを「Import Files to Disk」で追加します。 — らいきんぐ! (@liking_birds) 2020年9月5日

 実機上でMMLのテキストデータを編集する際は、末尾に「0x1A」を付加することをお忘れなく。

(続き)6. WebMSX右下のギヤマークから「Select Machine」→「MSX Japan (NTSC)」を選択します。7. もう一度ギヤマークから「Konami SCC+」と「MSX-MUSIC」を有効にします(赤いマークが付くと有効)。 — らいきんぐ! (@liking_birds) 2020年9月5日
(続き)8. webMSXを起動し、MSX-DOSを起動させます。9. DOSプロンプトが表示されたら「mgsc a_.mus -p -n」を実行します(-pは再生のスイッチ、-nはMGSファイルを生成しないスイッチです)。10. 問題なければ音楽が再生されます。(これでおしまい) — らいきんぐ! (@liking_birds) 2020年9月5日
地味に面倒なのが「テキスト末尾に0x1aを付加する (copy /a)」ですかねぇ。最初これにハマり、コンパイルできずに悩みました…。 — らいきんぐ! (@liking_birds) 2020年9月5日

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

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

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

 さらに、スロット節約の流れで、1つのカートリッジに複数の機能を持たせる「多機能カートリッジ」というジャンルが生まれました。海外発のプロダクトがいくつか発売され、2020年現在の人気アイテムとなっています。

MegaFlashROM SCC+SD

MegaFlashROM SCC+SD(いわゆるMFR512)が届きました!仕事も家事もてんてこ舞いで全然触れなくてつらい。今更知ったことだけどmicroSDスロットだったのか。とりあえずMSXの実機で通電、MM英語版の内蔵を確認。 pic.twitter.com/JkH6eUx2F3 — Takashi Kobayashi (@nf_ban) 2020年10月21日

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

www.msx.org

Carnivore2

先月届いたMSXの多機能カートリッジCarnivore2をようやくセットアップ。512MBのCFカードはWindowsで初期化。懐かしのSunrise IDE互換I/Fだから、NextorのシステムファイルをCFへコピーするだけであっさり簡単に起動する!しかもMegaSCSIと共存できるから過去資産の移動も簡単だ!いい買い物をした。 pic.twitter.com/QPS9lDc6iD — Takashi Kobayashi (@nf_ban) 2020年6月7日

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

www.msx.org

Nextor(ネクストル)という新OSの台頭

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

www.msx.org

 Nextorを動作するためには本体RAMをマッパーRAM 128KB以上へ増設する必要があるため、Nextorの利用を前提とした大容量ストレージカートリッジは概ね増設用マッパーRAM(やオマケ要素の各種音源)も搭載しています。こういった多機能カートリッジをMSX1で利用することで、MSX1でもSDカードをストレージドライブに設定できたり、SCC音源・FM音源による音楽再生を楽しめることが可能になりました。

MEGAFLASHROM SCC+でNextorが立ち上がっているという事は、.fdsイメージを登録して起動できるのでした^^;MSX-DOS1とhttps://t.co/bz7u3wF2Sq、https://t.co/rMxrvrvZ6K、takeback.musを入れた.fdsを登録して起動してみました。とりあえず鳴りましたー(^^)/ pic.twitter.com/BtV3uDgMFq — ひぽぽ(ファミコンGimmick!👍 (@koichironakaza1) 2020年9月5日
MSX1で.mgs再生の件、SNACHERサウンドカートリッジを使わず、MEGAFLASHROM SCC+の音源だけ繋いだ方が、少々ノイジーだけど音量と低音が楽しい感じです。スマホ直撮りでは分からないですね^^; pic.twitter.com/55nESjEBNi — ひぽぽ(ファミコンGimmick!👍 (@koichironakaza1) 2020年9月5日

MSX1「再活用」の課題

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

Nextor=DOS2 ではない

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

メインROMスロット番号の参照先がMSX1では不定値のために動作しないケース ※MGSDRVが該当します

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

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

mgsdrv /ZはMSX1のMX-10では暴走します。MSX2のF1XDではinstalledと出て、mgsc takeback.mus -p -nとすると再生出来ました。^_^; pic.twitter.com/rkw0n709fx — ひぽぽ(ファミコンGimmick!👍 (@koichironakaza1) 2020年9月5日

 この頃は原因が分かっていませんでしたが、マッパーRAMが搭載されていたMX-10はMSX1なのでワークエリアFFF7hが不定値のため暴走、F1XDはMSX2なのでワークエリアFFF7hが正しいため動作可能、ということが後々判明しました。

MSX1で.MGSを再生する件、MEGAFLASHROM SCC+と拡張RAMの組合せで起動確認しました。結果512KB RAMを内蔵しないMFRから起動せず、MSX1でMAPPER をサポートするRAMが必要と思われます。MSX1対応が謳われていない16MBカセットでも要RAM32KBのテープソフトは起動しました。(MSXのRAM構成上、当然?!^^;) pic.twitter.com/sWf8ZavnFV — ひぽぽ(ファミコンGimmick!👍 (@koichironakaza1) 2020年9月13日

 ちなみに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

原因判明までの経緯

初代MSX(MSX1)+NextorでMGSDRVの楽曲データを再生する方法がようやく俺も掴めてきた。WebMSXならこの手法でOKだけど実機+多機能カートリッジでは問題がでるかも?という話ですかね。本当はMSX1用のMGS音楽プレイヤーを用意できるのが一番良いのだろうけど… pic.twitter.com/gL5RqEe8Vc — Takashi Kobayashi (@nf_ban) 2020年9月13日
 WebMSX+MSX1+Nextorの実行環境ではMGSDRVを常駐インストールできる

   ↓

OpenMSXでの実験ですがMX-101+Carvonire2(CFカード)+Nextor2.1.0fでMGSDRV304からMGSDRV320に変更したところ、Installedでフリーズしました。今度は、dskイメージファイルをNextorのemufileでマウントして起動(MSX-DOS1環境になります)で実行するとInstall~演奏まで出来ました。#MSX pic.twitter.com/JipjYzp0mk — うにスキー (@uniskie) 2020年9月14日
 実機(カシオ MX-101)を再現したOpenMSX+Carnivore2+Nextor+MGSDRV 3.20の実行環境ではインストール時にフリーズする(3.04ではフリーズしない)

   ↓

https://t.co/ezJxL62fj2 問題の箇所を修正してみたのですが、この修正で大丈夫でしょうかね……。MGSDRV 3.4.0MGSDRV.COM$1FE4: $F7→$C1$1FE5: $FF→$FC — うにスキー (@uniskie) 2020年9月14日
 調査の結果、MSX1では未定義のFFF7hを参照しているMGSDRV 3.20のコードが原因であることが判明する

   ↓

もしかしたら、MainROM が slot0 に無い機種 (バージョンアップアダプタとか) に配慮したとか? (^^;@goripon_tw さんが理由を知ってたりしないですかね・・(^^; — HRA! (@thara1129) 2020年9月14日
 MGSDRVのバージョンを3.04から3.20へ上げたことでフリーズする原因は、MSX2バージョンアップアダプタによるMSX2実行環境に対応したためである可能性が指摘される

   ↓

FFF7hの方は当然MSX1では初期化されていないので、内容によっては暴走するでしょうね。なるほど。こんなところでMSX2以降縛りを発生させていたとは(汗)。MSX1ならFCC1hからメインROMスロットを取るようにすれば問題無くなりますが…うーむまさかのバージョンアップ対応?(苦笑) — ごりぽん (@goripon_tw) 2020年9月14日

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

   ↓

https://t.co/Yo4X4NbuwJMSSDRV 3.2.0がMSX1+RAM64K+Nextorで動作する非公式パッチMGSDRV3.2PFFF7hの参照箇所をFCC1hに変更しただけ。MSX2バージョンアップアダプタでも、FCC1hがVUアダプタのスロット番号になるからOKらしい。(※スロット0拡張フラグが強制で1になる)(未保証)#MSX — うにスキー (@uniskie) 2020年9月15日

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

   ↓

Uniskie Serv'n†Low様のツイート通り https://t.co/igaZOHB3LR バージョン3.20の$1FE4: $F7→$C1$1FE5: $FF→$FCとすることでCASIO MX-10でもNextor上でMGSDRV /Zの常駐に成功しました!感謝!!(^^)v — ひぽぽ(ファミコンGimmick!👍 (@koichironakaza1) 2020年9月15日
 実機(カシオ MX-10)+MegaFlashROM SCC+SD+Nextorの実行環境で、常駐インストールが可能になる →不具合の原因が確定する

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

 FCC1hとFFF7hについては「MSX2バージョンアップアダプタ」への対応でそれぞれのメモリ参照が必要となるものです。詳しくは以下のtwitterのツリーをご参照ください。

MGSDRVのトップページ → https://www.gigamix.jp/mgsdrv/