Gigamix Online

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

MGSDRV:仕様?バグ?未確認情報まとめ

随時更新中

 MGSDRVに関する既知のバグ情報、バグなのか仕様なのか分からないような未確認情報をまとめました。ご迷惑をおかけします。

 バグ情報・不具合情報をお待ちしております。当チーム @nf_ban(主宰) または @goripon_tw(プログラム担当) までお寄せください。

https://p.gigamix.jp/mgsdrv/cg/buglist.png

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

未解決・未調査の情報

L128を指定するとテンポがずれる?

twitter.com

コメント行が256文字を超えると演奏されない現象が発生する?

MGSDRVなのかMSXplayなのか切り分けられてないけど、コメント行が256文字を超えると、コンパイルは成功している風なのだけど演奏がされない現象が発生しますね。。。長いMMLコメントアウトしたら急に音が鳴らなくなって焦りました😅 — drm (@NudiDrm) 2021年4月7日

 MSXが現役だった頃は性能不足によりテキストエディタ側が長い行に対応できないといった都合が多々あり、横80文字程度の長さで改行を入れることがマナーだったり癖が付いたりしたため、昨今までこのような現象が見逃されていました。

 現状は、適度な長さで改行を入れることで対応してください。よろしくお願いします。

kf→koの切り替え前後に共通したリズム楽器が指定されている場合、そのリズム楽器が発声されない?

kf→koの切り替え前後に共通したリズム楽器が指定されている場合、そのリズム楽器が発声されない。(y14,32を間に記入することで回避できます。) https://f.msxplay.com/?id=d92848c3 #MGSDRV https://t.co/BrQnU2GnlW?amp=1 — Pt.Macumba (@Pt_Macumba) 2021年2月23日

 詳細不明ですが、回避策はあります。

vbの相対指定を使用すると他のリズム楽器も巻き込まれて音量が変化する?

vbの相対指定を使用すると他のリズム楽器も巻き込まれて音量が変化する。(vの相対指定と同じ動作をする。) https://f.msxplay.com/?id=9180ce68 #MGSDRV https://t.co/0o47EgjZDx?amp=1 — Pt.Macumba (@Pt_Macumba) 2021年2月23日

 詳細不明です。

opll_tuneで指定した値によっては音程が意図しない高さになる?

opll_tuneで指定した値によっては音程が意図しない高さになることがある。トラック1(音階指定,opll_tune使用)→トラック2(opll_tuneで指定した値と同じ値をyコマンドで書き込み)→トラック1&2同時再生 https://f.msxplay.com/?id=02a58331 #MGSDRV https://t.co/1tDPCaykZP?amp=1 — Pt.Macumba (@Pt_Macumba) 2021年2月23日
opll_tuneの指定値が171以下の場合にこの仕様が発動する。F-Numberの値は344-(171-opll_tune指定値)になり、Blockが-1される。(o1の場合はオーバーフローします。) — Pt.Macumba (@Pt_Macumba) 2021年2月23日

 詳細不明ですが、回避策はあります。

machine_id の使い方が不明?違いはあるのか?問題

研究いただいてありがとうございます。m(_ _)mmachine_idについて、既存データにmachine_idを付加するツールを使った事があるのですけど、私も違いが分かりませんでした^^;MSXメーカーや機種毎にカートリッジスロット部の抵抗値に違いがありますが、抵抗値を変更するしか特効薬は無い様ですね。 — ひぽぽ(ファミコンGimmick!👍 (@koichironakaza1) 2020年7月23日
machine_idの違いがわからないのは自分だけではないということで安心しました(おぃ 機種毎の音量違いはMMLのボリューム値を変えただけではなかなか対処できないのでほんとに厄介です。なので今作っているグラディウスの曲は機種による音の違いが出ないようSCCのみで作っているのですが・・・ — ぱるぷ (@parupu_x_nagae) 2020年7月23日
machine_idの挙動について昔ain氏に聞いたことがあるんですが、MGSCでは単純にIDの記録をしているだけで、実際の音量の調整はMGSELで再生時に行っていると聞いた記憶があります。動作は3音源の最大音量を下げて調整だったかと。なのでMGSDRV単体でのプレイでは反映されない…はず(記憶あやふやです — たかを (@takawo_n) 2020年12月31日
MSXplayのチップ毎の音量バランスは実機が基準ではありません。計算が軽いバランスになっています(確かvgmplayと同じにしたはず)。ただ、FS-A1STの実機で作ったデータを再生した際に、極端に違和感がないようなバランスにはなっているはずです。 — DSA (@ym2413) 2021年1月1日
 私(nf_ban)も調査を進めていますが、今のところ machine_id に対応するアプリは MGSEL のみ、machine_id の違いを定義する仕様書の類も存在しない、という状況です。

バグではなく仕様の情報

移調するコマンドは存在しない

Unfortunately there is no real transpose command. But, if needed, you can change the #psg_tune and transpose the entire song (I think I remembering seeing this technique from gyabuneko) https://t.co/9WWKFE6jnw — Xyz (@XyzGonGivItToYa) 2021年5月14日

 #psg_tune はPSG音源全体の音程の元となるデータを変更する命令で、これを用いれば移調も再現可能ですが、特定のタイムラインや特定のチャンネルだけ移調するようなケースは想定されていません。

SCCI(スナッチャー付属サウンドカートリッジ)に対応している?

 コナミの各種ゲームカートリッジに内蔵されていたSCC音源はチャンネル4とチャンネル5を共通の波形でしか利用することができないハードウェア仕様でしたが、「スナッチャー」の付属サウンドカートリッジ(通称:「SCCI」「SCC-I」「SCC+」)はチャンネル4とチャンネル5を独立して利用できるハードウェア仕様となっています。

 ですが、MGSDRVではSCC-Iに現状非対応です(SCCと同じ振る舞いを行います)。SCCIのチャンネル4とチャンネル5は共通の波形で動作します。今後対応できるかもしれませんが、開発機材=実物(カートリッジ)の確保が急務。

あれ?mgsdrvってSCC+の4/5チャンネルの独立音色モードって対応ってしてたっけ。なんか昔対応してない、という話になったような記憶が...。— DSA (@ym2413) January 21, 2020
MGSDRVバージョンアップするとして。MSX1を想定した件の修正と、可能ならSCC+対応(4/5チャンネルの個別音色指定)はやりたいな。あとはバグ修正だけど…ややこしいのばっかりだからなー。むぐぐ。 — ごりぽん (@goripon_tw) 2020年9月15日

 SCC-I対応を行うにはドライバの新設計が必要との見解です。現状はペンディングです。

SCC+対応、そういえば似非SCCはSCC+相当で動作してるんだっけか…。うへぇ。判定できるのかな? — ごりぽん (@goripon_tw) 2020年9月15日
4チャンネルの波形メモリに書き込んで5チャンネルの波形メモリを読んで変化があれば似非とかなら判定できるかなと考えてますが…。 — ごりぽん (@goripon_tw) 2020年9月25日
mgsフォーマット自体にフラグを持たせて、mgscに#scc_type みたいなコマンドを拡張する感じではないでしょうか。既存のデータでも誤って4/5チャンネルに別音色を指定してしまっているものがありそうな気がするので、自動判定は難しそうな気がします。 — DSA (@ym2413) 2020年9月25日

音ずれが発生する

MGSDRVのバグで1つ思い出したのは、(発生条件が判らないのですが)「1音目の発音音階が化ける(別の音になる)」というやつです。 なので、今でもMGSDRVのデータは、全chでv0のダミー発音データを入れてます。 MSXplayの「Arabiyaan」にも入ってるw https://t.co/hbhre3y9G0 https://t.co/jtIlJiiwo1 pic.twitter.com/of5MZ7JkI7 — Wiz.@「ペンゴ!オンライン」2曲「キャラバンブーマー」1曲作編曲担当 (@WizardOfPSG) November 17, 2019
あー…想像以上にずれてますね。 流石にこれはMGSDRVのバグっぽいですね。 他にもいくつかバグがあったような。 https://t.co/zWQFTcM8a1 — Wiz.@「ペンゴ!オンライン」2曲「キャラバンブーマー」1曲作編曲担当 (@WizardOfPSG) November 17, 2019
いやぁ…どうでしょう?w 拙者は音を敷き詰めて曲を作るタイプなので、メロだけ浮かせて静かな音色でモーフィング掛けると目立つ…のかもしれません。 もしかすると、MGSDRVの作者の方が、何等かの対処をしてそうな気もしますが。 https://t.co/pcwrvxh9UC — Wiz.@「ペンゴ!オンライン」2曲「キャラバンブーマー」1曲作編曲担当 (@WizardOfPSG) November 23, 2019
Webの「MML Editor」に読み込ませた.MUSの演奏時間を拡張するコマンドがあったのか!MGSCの取説に載ってなかったような?やり方は、.MUSの冒頭に「;[duration=600s]」を書き込んでコンパイルすると、演奏時間が600秒に拡張される。コマンド内の「600s」の値を変更すれば、任意の演奏時間に変更可。 https://t.co/mznphNGJNh — ぎゃぶねこ (@gyabuneko) December 4, 2019

E+ と E が同じ音階になる

 一般的にMML表記の「E+」は「F」の音階または相当の音階になるようですが、MGSDRV(MGSC)では「E」になります。方言となりますのでご注意ください。

ぎゃー24行目に打込みミス発見・・!CDE [[BAEF+4E+4B] [AG+F+D4F+G+A]] [BAEF+4E+4BAG+F+D4F+G+A] 「E+4」の部分がそれです。幸い、音自体は「E」の音で鳴ってくれてました。てっきり「F」音が鳴るものと・・焦った~ — K.H.(焼飯太郎)@モーメントに作品まとめてます (@Yakimeshi_Taroh) October 15, 2020
厳密に言うとMGSDRVではなく、MGSCの仕様と思います。基本的には E+ = E で扱われることはないと思います。E+ = F で演奏するか、E+ と F を微妙に違う周波数で演奏するかは、調律や楽器によるかなと思います。 — DSA (@ym2413) October 16, 2020

@eエンベロープで音色を切り替えると音がおかしくなる現象

 MGSDRVの @e コマンドは「現在の音色にエンベロープをコピー」という意味です。 @ コマンドで一度も音色を指定していない状態で @ e コマンドを使うと、音が出なかったり変な音が出たりします。

 特に曲の冒頭で音がおかしくなる場合が目立つのは、キーオンから @e が適用されるまで一瞬だけ別の音色が適用されているから。バグとも言えるかもしれませんが、ver.3シリーズにおいては仕様となります。

MGSDRV、@ e エンベロープで音色を切り替えると特に曲の冒頭で音がおかしくなることが多いですが、これはキーオンから @ e が適用されるまで一瞬だけ別の音色が適用されているからです。 — DSA (@ym2413) February 18, 2020
英語では何度かツイートしましたが、MGSDRVの @ e コマンドは「現在の音色にエンベロープをコピー」という意味です。 @ コマンドで一度も音色を指定していない状態で @ e コマンドを使うと、音が出なかったり変な音が出たりします。 — DSA (@ym2413) February 18, 2020

@コマンドで一度も音色を指定せずに音を鳴らすと最初の1音だけ「ビ〜〜ッ」っという謎の音が入り、以降の音は鳴らなくなる現象

 エレキベースの音が一瞬鳴った後、空のユーザー定義音色(すべての音色パラメータが0)に切り替わったことによって出る異音、とのこと。発音前に音色指定を必ず行ってください。

重箱の隅をひとつ。MGSDRVは一度も@コマンドで音色を指定せずに音を鳴らそうとすると、最初の1音だけ「ビ〜〜ッ」っという謎の音が鳴ります。それ以降の音は鳴りません。この最初の1音は一体なんの音でしょうか(続)https://t.co/5Ef76dRFJ3 — DSA (@ym2413) 2021年3月3日

実はこれ、エレキベースの音が一瞬鳴った後、空のユーザー定義音色(すべての音色パラメータが0)に切り替わったことによって出てしまった音です(続) — DSA (@ym2413) 2021年3月3日

結果としてエレキベースから→音色番号0番へのキーオン中の音色切り替えが発生します。この時点では、音色番号0番はADSRがすべ0初期化されたユーザー音色になっています。したがって、本来、何も音がでないはずですが、アタック部分だけ一瞬エレキベースになるので音が出てしまうのです(続) — DSA (@ym2413) 2021年3月3日

さて1音目はこのようにして音が出ましたが、2音目以降は、キーオン前から1音目で指定された音色番号0番になっています。したがって音色の切り替えは発生せず、何も音がでない、というわけです(終) — DSA (@ym2413) 2021年3月3日

@コマンドを指定せずに @eコマンドを利用すると演奏結果が不定になる

これは @ コマンドを指定せずに @e コマンドを使うと、演奏結果が不定になる(環境によってどんな音が出るか分からない)という現象ですね。MGSDRVの仕様です。この曲のイントロについては353行目から360行目の @e コマンドの前に @ コマンド(例えば11番あたり)を入れてやると直ると思います。 - DSA (@ym2413) 2021年3月2日

「9音リズムモード」でHチャンネルの音量が全く反映されない

試行錯誤して、9音リズムモード (FGHチャンネルにリズム使用) で、Hチャンネルに音量が全く反映されていない事に気づいた。多分、ハードウェア的な仕様だよなぁ。でもなぜかソフトエンベロープ(@e)指定だと、固定の音量に下がる挙動になる不思議。多分、v と@eで内部処理が違うんだろうな。#MGSDRV — たかを (@takawo_n) 2021年2月23日

 本来設定できない「9音リズムモード」。特殊な環境なのでバグなのか仕様なのか分かりにくいのですが、OPLLの仕様のようです。

レジスタ構成の関係でHチャンネルはvがシンバルの音量、音色番号がタムの音量(14,13,12...,0,15の順で音が大きくなります)になります。例えば H y14,32 q8 v8@14 c4 でシンバルが音量8、タムが音量0で鳴ります。G チャンネルだとvがスネアの音量、音色番号がハットの音量になります。 — DSA (@ym2413) 2021年2月23日
作る側の夢としては、9音リズムモードなる opll_mode 2 を用意してもらって、そのモードではFGHチャンネルのリズム音源に指定したMMLが思い通りに音に反映される動作…という感じになるのでしょうか — たかを (@takawo_n) 2021年2月23日

 こちらは新バージョンへの要望。

半角スペースの入れ方に注意

ちょいと所用でMGSDRVをいじってるんですが、「音階と音長の間」の半角スペースは無視されるけど、「マクロ種別と数値の間に半角スペースを入れるとエラーになる」のね…知らなかった。例)〇a8〇a 8〇*b8×*b 8…って、こんな書き方しようとしてるのは拙者だけかもしれませんがw — Wiz.@「ペンゴ!オンライン」2曲「キャラバンブーマー」1曲作編曲担当 (@WizardOfPSG) 2020年12月6日
MGSDRV自体はコンパイルされたバイナリデータを再生するので、どちらかというとMGSCの仕様ですね。MGSCもソースが失われていて復旧もされていないので手を加えられないのですよ。 https://t.co/PnLQ1eFXX1 — ごりぽん (@goripon_tw) 2020年12月7日
 twitter@Wiz.さんの報告。「音階と音長の間」の半角スペースは無視される、マクロ種別と数値の間に半角スペースを入れるとエラーになる。バグとも言えるかもしれませんが、ver.3シリーズにおいては仕様となります。

MGSCNV: ver.2→ver.3への変換の違いについて

ver2をver3にツールで自動変換した.mgsファイルを、MSXplayの逆コンパイル機能で変換したMMLを解析してみたのですが、違いがあったのは・・・・データの冒頭で「machine_id」と「alloc」が追加されている・テンポが1/2になっていて、MMLの音長も1/2にされている続きます — ぱるぷ (@parupu_x_nagae) 2020年7月23日
検証に使用したファイルも自前のレンタル鯖に置いておきますね。ver2のBASICファイルhttps://t.co/TCWPNj2dcrver2をver3に自動変換して、MSXplayで逆コンパイルしたテキストhttps://t.co/l1CJ99vwbY — ぱるぷ (@parupu_x_nagae) 2020年7月23日
 変換後のテンポと音調が1/2になるのはバグとも言えるかもしれませんが、ver.3シリーズにおいては仕様となります。

プライマリのマッパーRAMへしか常駐できない?

MGSDRV ですが、PrimaryMemoryMapper にしかインストールできないみたいですね。プライマリを消費し尽くしてから常駐させて、MGSPから曲を読み込んだら、漢字RAMのときと同じ理由で死ぬかなと、テストを試みたのですが、そもそも MGSDRV がプライマリしかダメでした (^^;#MSX #MGSDRV — HRA! (@thara1129) October 19, 2020
常駐部分の簡略化とスロット切替のコストを嫌ってのことですね。基本的にDOS2でマッパ使って常駐するものには要プライマリマッパってのが多いような? https://t.co/YWxDBHOJIo — ごりぽん (@goripon_tw) October 19, 2020
 各種拡張メモリカートリッジをスロットに差すような「マッパーRAMが複数ある状態」の場合でも、MGSDRVではプライマリのマッパーRAMでしか常駐できません。turboR規格の場合は本体内蔵RAMが自動的にプライマリになります(A1ST 256KB、A1GT 512KB)。

任意のアドレスへ移動(リロケート)ができない?

制作しているメガROMゲームにMGSDRV実装案もありまして、自己書き換えやっているのでRAMのどこに置いたらいいかと、PAGE1ですかねぇ・・・? — むらかたとうじ/村方凍二 (@ipheion78) 2020年12月7日
mgsdrv.com を丸ごとROMにおいて、+0010h~(だったかな?)を RAMのpage1の 6000h~ にコピーして使えばよいと思います。そこにおかれる前提でアドレスが設定されてるので。 — HRA! (@thara1129) 2020年12月7日
元々がPage1(確か6000h~)で動作しているのでリロケートしないと他には置けないですね。ドライバのサイズは8KB上限と定められていたかと思いますが…ワークRAM込みだったかな?やっぱりROM組み込める版が必要か…。 — ごりぽん (@goripon_tw) 2020年12月7日
仕様書を見ると、一時期 MGSDRV.REL というものが公開されていて、それは L80. COM でアドレス再配置できたようですが、いまはCOMしか見あたらないので 残念ながら6000h固定ですね😅4000h~5fffhは自由に使って良いようです。 — HRA! (@thara1129) 2020年12月7日
以前はMGSDRV.RELが公開されてたのか。まさにMGSDRV.REL公開できないかなと考えてたところなので…仕様書読んでみるかー。 — ごりぽん (@goripon_tw) 2020年12月7日
 MGSDRV本体はリロケータブルではありません。ただし過去にMGSDRV.RELというファイルがパソコン通信ネットで流通していて、MSX-L80を用いて再構成することで任意のアドレスへ移動が可能だったようです。

 当クラブではMGSDRV.RELを入手および管理していません。もし今でも関連ファイル・アーカイブをお持ちの方がいらっしゃいましたらぜひご連絡ください。

管理者は見ている

2桁年ぶりにMGSDRVをバージョンアップするかもと言う話になってるんだけども。最新版って3.20で合ってるよね?(汗)(苦笑)何せ2桁年経ってると手元の物が最新かどうかも微妙なうえ、もうちょっとバージョンが上がってたような気もするので…。 — ごりぽん (@goripon_tw) September 14, 2020

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