Gigamix DM-SYSTEM2

BGMドライバ

updated:

第1章 概要

1.1 BGMドライバとは

 1/60秒単位でBGM(Background Music)を演奏するマシン語のルーチン群です。

 DMシステム2の環境下においてはBGMドライバも他のドライバと同様に差し替え可能ですが、DMシステム2対応ソフトの設定を変更する「ユーティリティーディスク」との整合性を保つため、「ユーティリティーディスク」内の付属ツールではBGMドライバを変更できません。対応ソフト個々でBGMドライバを変更してください。


第2章 各種ドライバの紹介

 この章ではDMシステム2で対応するドライバ及び、今後対応が予定されているドライバを紹介します。

 下線の引いてあるドライバ名をクリックすると.LZH形式のファイルを転送します。

2.1 利用可能なドライバ

2.1.1 MGSDRV(デフォルト設定)

 MGSDRVは、Ain.氏が提唱したミュージックドライバです。フリーソフトウェアとして日本のMSX系パソコン通信ネットワークで普及しました。OPLL・PSG・SCCの計17音同時発声が可能で、ゲームミュージックから歌謡曲まで豊富なジャンルの楽曲データがパソコン通信の頃から現在に至るまで多数出回っています。

  • DMシステム2ではMGSDRVを標準でインストールしています。MGSDRV形式の楽曲データをメモリに配置するだけでそのまま再生できます。
  • 現在では作者のAin.氏に代わり、当クラブがMGSDRVのサポートを担当しています。→MGSDRVのページ https://www.gigamix.jp/mgsdrv/
  • DMシステム2におけるこのBGMドライバの管理IDは、0です。

※DMシステム2版MGSDRVは原版(MSX-DOS2アプリ)からのサブセットとなります。簡略化のため「圧縮形式(MGSARC)」と「カラオケ機能(MGSELの歌詞機能)」はサポートしません。また、16KBを超えるBGMデータは再生できません。

Download driver at Github BGM-MGS.ZIP

2.1.2 MuMAKA (MuSICA互換)

 MuMAKAは、M.K Softが開発したミュージックドライバで、アスキー刊「MSXマガジン」が提唱したミュージックドライバ「MuSICA」と上位互換性があります。OPLL・PSG・SCCの17音同時発声が可能で、トランスポーズ機能等が追加されています。

  • DMシステム2ではこのBGMドライバを手動でインストールすることで、楽曲データを再生できます。
  • MuSICAはかつてソフトベンダーTAKERUで販売されていましたが、2025年現在は入手が非常に困難です。また、MuSICA本体の配布・組み込みライセンスが現在も一切不明な状態です。
  • MuSICAの権利関係を回避した互換ドライバが複数存在します。互換ドライバの一つであるMuMAKAはSyntaxさんの「NVマガジン」「R-SYSTEM」等のソフトウェアで採用されています。DMシステム2ではMuMAKAの移植対応版を用意しています。
  • DMシステム2におけるこのBGMドライバの管理IDは、1です。

※DMシステム2版MuMAKAは「NVマガジン」収録の正式版からのサブセットとなります。簡略化のため一部機能はサポートしません。また、MuMAKAはM.K Softの著作物で、商利用にはM.K Softの許可が必要です。

Download driver at Github BGM-MK.ZIP

2.1.3 FM-BIOS(OPLDRV)

 MSXのFM音源機能「MSX-MUSIC」に内蔵されているBGMの演奏ルーチンです。FM-BIOSの利点は「処理の軽さ」で、対応する音源はOPLLのみです。OPLLによる最低限の演奏しかできない代わりに割り込み処理にはほとんど時間をかけません。とにもかくにも速度が欲しいアクション性の高いソフトに最適です。

  • DMシステム2ではこのBGMドライバを手動でインストールすることで、楽曲データを再生できます。
  • DMシステム2におけるこのBGMドライバの管理IDは、2です。

※このBGMドライバはPSG音源・SCC音源の演奏に対応していません。

Download driver at Github BGM-BIOS.ZIP

2.1.4 NDP

 なると氏が2025年5月にリリースしたPSG特化のミュージックドライバです。任意のチャンネルにリズム音を自動的に割り込ませて発音できたり、ハードエンベロープのループ波形を用いた疑似ノコギリ波や疑似三角波(ブザーエフェクト)を手軽に鳴らせたり…などMSXのPSG音源IC「AY-3-8910」の性能を存分に発揮できます。対応する音源はPSGのみです。

  • DMシステム2ではこのBGMドライバを手動でインストールすることで、楽曲データを再生できます。
  • DMシステム2におけるこのBGMドライバの管理IDは、3です。

※このBGMドライバはFM音源・SCC音源の演奏に対応していません。

Download driver at Github BGM-NDP.ZIP

2.2 現在開発中および対応を検討中のドライバ

 当クラブによるリリース予定はありません。


第3章 ドライバの利用方法

 詳しくは、ドライバについて第2章 ドライバのインストール方法 をご覧ください。


第4章 BGMドライバの作り方

 BGMドライバの利用領域は、0400h~21FFhの7.5K(7680)バイトです。

4.1 ヘッダ

 ヘッダは0400hから開始する全72バイトです。

先頭からのオフセット バイト数 内訳
+ 0~+39 40 ドライバ名称(空白は20hで埋める)
+40 1 EOFコード (1Ah)
+41 1 ドライバ種別番号 (03h:BGMドライバ)
+42 1 演奏データ形式 (0:MGSDRV, 1:MuMAKA, 2:FM-BIOS, 3:NDP)
+43~+47 5 未使用
+48~+50 3 コールエントリ BGMON へのコール先(JP xxxxh)
+51~+53 3 コールエントリ BGMOFF へのコール先(JP xxxxh)
+54~+56 3 コールエントリ BGMPAU へのコール先(JP xxxxh)
+57~+59 3 コールエントリ BGMTMP へのコール先(JP xxxxh)
+60~+62 3 コールエントリ BGMTRS へのコール先(JP xxxxh)
+63~+65 3 コールエントリ BGMVOL へのコール先(JP xxxxh)
+66~+68 3 コールエントリ PSGCHN へのコール先(JP xxxxh)
+69~+71 3 コールエントリ BGMINT へのコール先(JP xxxxh)
+72~ - ドライバ本体

※対応するドライバがありましたらご連絡ください。順に番号を割り振らさせていただきます。

サンプルコード

        ORG     0400h

0400    DEFM    'ドライバ名称を漢字20文字に収めます。  '      ;余白は20hで
0428    DEFB    1ah     ;EOF
0429    DEFB    03h     ;BGMドライバの意
042A    DEFB    00h     ;演奏データ形式
042B    DEFS    5       ;未使用
0430    JP      BGMON   ;BGMの演奏準備とデータ形式のチェック
0433    JP      BGMOFF  ;BGMの演奏停止
0436    JP      BGMPAU  ;ポーズとその解除
0439    JP      BGMTMP  ;テンポの設定
043C    JP      BGMTRS  ;トランスポーズの設定
043F    JP      BGMVOL  ;音量の設定
0442    JP      PSGCHN  ;PSGのチャンネルのon/off
0445    JP      BGMINT  ;1/60秒毎にコールされる、実際のBGMの演奏

4.2 コールエントリ

+48 BGMON(0430h) BGMの演奏準備とデータ形式のチェック

[in] HL BGMデータの開始アドレス
A ループ回数(0:無限) ※MGSDRVでは無効
[out] A 演奏状態 (0:正常 nz:BASICでのエラーコード)

 演奏の準備をします。

 このエントリで、BGMドライバとBGMデータの形式が一致しているかどうかを調べてください。もしBGMデータの形式が一致しない場合は、Aレジスタに0以外の数値(エラー番号)を代入してからretしてください。

【参考】BGMドライバによるデータ形式判別処理の違い
MGSDRV(BGM-MGS) データ先頭の "MGS"という文字列で判別しています
MuMAKA(BGM-MK) データ先頭の1バイトが00h及び01hで判断しています
FM-BIOS(BGM-BIOS) データを一切判別しません(判別仕様なし)
NDP(BGM-NDP) データを一切判別しません(判別仕様なし)

 タイマーフックへの接続はシステム側で行われるため、ドライバ側が処理する必要はありません。DMシステム2はこのルーチンをコールした後、演奏ルーチン(後述)をタイマーフックへ接続します。

 エラー番号はMSX-BASICのERR関数相当にしていただければ幸いです。ちなみに当クラブ製作のBGMドライバでは「13(Type Mismatch)」を設定しています。

 エラー番号が返された場合は、DMシステム2はタイマーフックへの接続を行わずにテキストの実行を中断します。

+51 BGMOFF(0433h) BGMの演奏停止

[in] なし
[out] なし

 演奏を終了します。

 このエントリで、BGM演奏を終了する為の処理のみを行ってください。(音源の初期化など)

 タイマーフックの切り離しはシステム側で行われるため、ドライバ側が処理する必要はありません。DMシステム2は演奏ルーチンをタイマーフックから切り離した後、このルーチンをコールします。

+54 BGMPAU(0436h) ポーズとその解除 ※トグルで切替

[in] なし
[out] なし

 ポーズ状態を切り替えます。

演奏中ならポーズ、ポーズ中なら再開、というようにトグル式にします。

+57 BGMTMP(0439h) テンポの設定

[in] なし
[out] なし

 テンポを設定します。が、BGMのテンポ変更はシステム側の内部処理で実現できてしまった為、このエントリーは今のところ使用していません。

 今後新しいエントリーが必要になった時の為の予約としておきます。実際は即retするだけで構いません。

+60 BGMTRS(043ch) トランスポーズの設定

[in] A 8bitの2の補数(-128~127)
[out] なし

 トランスポーズ(転調)を設定します。

 トランスポーズ機能が無いドライバでは即retするだけで構いません。

+63 BGMVOL(043fh) 音量の設定

[in] A マスターボリューム(0(小)~15(大))
L OPLLの音量相対値 (-15~15)
E PSGの音量相対値 (-15~15)
C SCCの音量相対値 (-15~15)
[out] なし

 マスターボリュームと音源毎の音量バランスを設定します。

 音量設定機能が無いドライバでは即retするだけで構いません。

+66 PSGCHN(0442h) PSGのチャンネルのon/off

[in] L b7~b3 未使用
b2 PSGチャンネルC(0:off 1:on)
b1 PSGチャンネルB(0:off 1:on)
b0 PSGチャンネルA(0:off 1:on)
[out] なし

 PSGの占有と開放を設定します。ビットが1の時BGMドライバが占拠します。

 チャンネル設定機能が無いドライバでは即retするだけで構いません。

+69 BGMINT(0445h) 1/60秒毎にコールされる、実際のBGMの演奏

[in] なし
[out] なし

 BGMデータを演奏します。

DMシステム2はタイマー割り込み内からこのルーチンをコールします。

4.3 注意

 OPLLレジスタの書き換えには、DMシステム2のWRTOPLを推奨します。このエントリーはDMシステム2のインストール時に機種に適したルーチンへと書き換えられますので、安心して利用できます。

WRTOPL (4028h) OPLLのレジスタに値を書き込む

[in] A レジスタ番号
E データ
[out] なし

 復帰後は常にEI状態となります。

 DMシステム2のインストール時にSCCが接続されていれば自動的にオープンしますので、BGMドライバではオープン処理の必要がありません。OPLLとSCCの存在するスロットはDMシステム2のインフォメーションエリアに格納されています。

SLTOPL (4300h+16) FM音源のあるスロット (255:なし)
SLTSCC (4300h+17) SCC音源のあるスロット (255:なし)

【参考】BGMドライバの動作テスト チェックリスト

_BGMONの再生前および_BGMOFFの停止後の動作テスト項目
機能概要 テスト内容 テスト実行命令
_BGMTMP(テンポ変更) 予めデフォルト(100)以外の値に設定してからBGMONするとテンポが変更された状態で再生開始するか _BGMTMP(80):_BGMON(ad)
_BGMTRS(移調) 予めデフォルト(0)以外の値に設定してからBGMONすると移調した状態で再生開始するか _BGMTRS(-3):_BGMON(ad)
_BGMVOL(マスターボリューム) 予めデフォルト(15)以外の値に設定してからBGMONすると音量が変更された状態で再生開始するか _BGMVOL(10):_BGMON(ad)
_BGMVOL(各音源の音量オフセット) 各音源の音量オフセットを変更してからBGMONすると音量が変更された状態で再生開始するか _BGMVOL(,-3,-3,-3):_BGMON(ad)
BGM演奏中確認フラグ BGM再生していないときインフォメーションエリアのBGFLAG(4300h+15)のbit0が0になっているか _PEEK(&H4300+15,A):PRINT A AND 1
_BGMONで再生中の動作テスト項目
機能概要 テスト内容 テスト実行命令
_BGMON(ページ0のデータ再生) RAMのページ0(3000h~3FFFh)に配置した曲データを再生できるか _BGMON(&H3000) ※データ容量4KB以内
_BGMON(ページ2のデータ再生) RAMのページ2(8000h~BFFFh)に配置した曲データを再生できるか CLEAR 100,&HA000:_BGMON(&HA000)
_BGMON(ページ3のデータ再生) RAMのページ3(C000h~FFFFh)に配置した曲データを再生できるか CLEAR 100,&HC000:_BGMON(&HC000)
_BGMON(ページまたぎのデータ再生) RAMのページ2とページ3をまたいで配置した曲データを再生できるか CLEAR 100,&HBC00:_BGMON(&HBC00)
_BGMON(演奏の上書き) 再生中に別アドレス指定による新たな_BGMONで新曲が再生開始するか _BGMON(ad')
_BGMON(ループ回数指定) 指定したループ回数を再生したのち停止するか _BGMON(ad,2)
_BGMON(データ形式の判別) BGMONの指定アドレスと実際のデータ配置アドレスが違った場合、エラーで終了するか _BGMON(ad+1)
_BGMTMP(テンポ変更) デフォルト(100)で再生したのちテンポが変更できるか _BGMTMP(80) _BGMTMP(120)
_BGMTRS(移調) デフォルト(0)で再生したのち移調が変更できるか _BGMTRS(-3) _BGMTRS(3)
_BGMVOL(マスターボリューム) デフォルト(15)で再生したのち音量が変更できるか _BGMVOL(10)
_BGMVOL(各音源の音量オフセット) 各音源の音量オフセットをデフォルト(0)で再生したのち音量が変更できるか _BGMVOL(,-3,-3,-3):_BGMON(ad)
_BGMWAIT(再生の一時停止) 再生が一時停止するか _BGMWAIT
_BGMWAIT(一時停止からの復帰) 一時停止した状態で_BGMWAITで復帰するか _BGMWAIT
_BGMOFF(再生の停止) 再生が即停止するか _BGMOFF
_BGMOFF(フェードアウト) 再生がフェードアウト停止するか _BGMOFF(30)
BGM演奏中確認フラグ 再生中はインフォメーションエリアのBGFLAG(4300h+15)のbit0が1になっているか _PEEK(&H4300+15,A):PRINT A AND 1
BGM停止中確認フラグ 再生終了後はインフォメーションエリアのBGFLAG(4300h+15)のbit0が0になっているか _PEEK(&H4300+15,A):PRINT A AND 1
_STATUS(ドライバ配置確認) ドライバ名称が正常に表示できているか _STATUS
[Back]トップページへ