第1章 概要
1.1 BGMドライバとは
1/60秒単位でBGM(Background Music)を演奏するマシン語のルーチン群です。
DMシステム2の環境下においてはBGMドライバも他のドライバと同様に差し替え可能ですが、DMシステム2対応ソフトの設定を変更する「ユーティリティーディスク」との整合性を保つため、「ユーティリティーディスク」内の付属ツールではBGMドライバを変更できません。対応ソフト個々でBGMドライバを変更してください。
updated:
1/60秒単位でBGM(Background Music)を演奏するマシン語のルーチン群です。
DMシステム2の環境下においてはBGMドライバも他のドライバと同様に差し替え可能ですが、DMシステム2対応ソフトの設定を変更する「ユーティリティーディスク」との整合性を保つため、「ユーティリティーディスク」内の付属ツールではBGMドライバを変更できません。対応ソフト個々でBGMドライバを変更してください。
この章ではDMシステム2で対応するドライバ及び、今後対応が予定されているドライバを紹介します。
下線の引いてあるドライバ名をクリックすると.LZH形式のファイルを転送します。
MGSDRVは、Ain.氏が提唱したミュージックドライバです。フリーソフトウェアとして日本のMSX系パソコン通信ネットワークで普及しました。OPLL・PSG・SCCの計17音同時発声が可能で、ゲームミュージックから歌謡曲まで豊富なジャンルの楽曲データがパソコン通信の頃から現在に至るまで多数出回っています。
※DMシステム2版MGSDRVは原版(MSX-DOS2アプリ)からのサブセットとなります。簡略化のため「圧縮形式(MGSARC)」と「カラオケ機能(MGSELの歌詞機能)」はサポートしません。また、16KBを超えるBGMデータは再生できません。
MuMAKAは、M.K Softが開発したミュージックドライバで、アスキー刊「MSXマガジン」が提唱したミュージックドライバ「MuSICA」と上位互換性があります。OPLL・PSG・SCCの17音同時発声が可能で、トランスポーズ機能等が追加されています。
※DMシステム2版MuMAKAは「NVマガジン」収録の正式版からのサブセットとなります。簡略化のため一部機能はサポートしません。また、MuMAKAはM.K Softの著作物で、商利用にはM.K Softの許可が必要です。
MSXのFM音源機能「MSX-MUSIC」に内蔵されているBGMの演奏ルーチンです。FM-BIOSの利点は「処理の軽さ」で、対応する音源はOPLLのみです。OPLLによる最低限の演奏しかできない代わりに割り込み処理にはほとんど時間をかけません。とにもかくにも速度が欲しいアクション性の高いソフトに最適です。
※このBGMドライバはPSG音源・SCC音源の演奏に対応していません。
なると氏が2025年5月にリリースしたPSG特化のミュージックドライバです。任意のチャンネルにリズム音を自動的に割り込ませて発音できたり、ハードエンベロープのループ波形を用いた疑似ノコギリ波や疑似三角波(ブザーエフェクト)を手軽に鳴らせたり…などMSXのPSG音源IC「AY-3-8910」の性能を存分に発揮できます。対応する音源はPSGのみです。
※このBGMドライバはFM音源・SCC音源の演奏に対応していません。
当クラブによるリリース予定はありません。
詳しくは、ドライバについて の 第2章 ドライバのインストール方法 をご覧ください。
BGMドライバの利用領域は、0400h~21FFhの7.5K(7680)バイトです。
ヘッダは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の演奏
[in] | HL | BGMデータの開始アドレス |
---|---|---|
A | ループ回数(0:無限) ※MGSDRVでは無効 | |
[out] | A | 演奏状態 (0:正常 nz:BASICでのエラーコード) |
演奏の準備をします。
このエントリで、BGMドライバとBGMデータの形式が一致しているかどうかを調べてください。もしBGMデータの形式が一致しない場合は、Aレジスタに0以外の数値(エラー番号)を代入してからretしてください。
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はタイマーフックへの接続を行わずにテキストの実行を中断します。
[in] | なし |
---|---|
[out] | なし |
演奏を終了します。
このエントリで、BGM演奏を終了する為の処理のみを行ってください。(音源の初期化など)
タイマーフックの切り離しはシステム側で行われるため、ドライバ側が処理する必要はありません。DMシステム2は演奏ルーチンをタイマーフックから切り離した後、このルーチンをコールします。
[in] | なし |
---|---|
[out] | なし |
ポーズ状態を切り替えます。
演奏中ならポーズ、ポーズ中なら再開、というようにトグル式にします。
[in] | なし |
---|---|
[out] | なし |
テンポを設定します。が、BGMのテンポ変更はシステム側の内部処理で実現できてしまった為、このエントリーは今のところ使用していません。
今後新しいエントリーが必要になった時の為の予約としておきます。実際は即retするだけで構いません。
[in] | A | 8bitの2の補数(-128~127) |
---|---|---|
[out] | なし |
トランスポーズ(転調)を設定します。
トランスポーズ機能が無いドライバでは即retするだけで構いません。
[in] | A | マスターボリューム(0(小)~15(大)) |
---|---|---|
L | OPLLの音量相対値 (-15~15) | |
E | PSGの音量相対値 (-15~15) | |
C | SCCの音量相対値 (-15~15) | |
[out] | なし |
マスターボリュームと音源毎の音量バランスを設定します。
音量設定機能が無いドライバでは即retするだけで構いません。
[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するだけで構いません。
[in] | なし |
---|---|
[out] | なし |
BGMデータを演奏します。
DMシステム2はタイマー割り込み内からこのルーチンをコールします。
OPLLレジスタの書き換えには、DMシステム2のWRTOPLを推奨します。このエントリーはDMシステム2のインストール時に機種に適したルーチンへと書き換えられますので、安心して利用できます。
[in] | A | レジスタ番号 |
---|---|---|
E | データ | |
[out] | なし |
復帰後は常にEI状態となります。
DMシステム2のインストール時にSCCが接続されていれば自動的にオープンしますので、BGMドライバではオープン処理の必要がありません。OPLLとSCCの存在するスロットはDMシステム2のインフォメーションエリアに格納されています。
SLTOPL (4300h+16) | FM音源のあるスロット (255:なし) |
---|---|
SLTSCC (4300h+17) | SCC音源のあるスロット (255:なし) |
機能概要 | テスト内容 | テスト実行命令 |
---|---|---|
_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(ページ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 |