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(デフォルト)

 Ain.さんが開発したミュージックドライバです。OPLL・PSG・SCCの計17音同時発声が可能で、ゲームミュージックから歌謡曲まで豊富なジャンル(のデータ)が日本のMSX系パソコン通信ネットで多数公開されていました。

 現在では当クラブがMGSDRVの保守サポートを担当しています。MGSDRVについて詳しくはこちら→ MGSDRVの配布サイト

 MGSDRVはDMシステム2のBGMドライバのデフォルト設定となっています。

※DMシステム2版のMGSDRVは正式公開版からのサブセットとなります。カラオケ機能およびMGSARCによる圧縮データに対応しません。正式版をDMシステム2で利用することはできません。

2.1.2 MuMAKA (MuSICA互換)

 M.K Softが開発したミュージックドライバで、アスキー刊「MSXマガジン」が発表したミュージックドライバ「MuSICA」とデータの上位互換性があります。OPLL・PSG・SCCの17音同時発声が可能で、トランスポーズ機能等が追加されています。エディタの快適さには定評が有り、今でも人気があるドライバの一つです。

 Syntaxさんの「NVマガジン」「R-SYSTEM」等のソフトウェアでMuMAKAが採用されています。

※DMシステム2版のMuMAKAは正式公開版からのサブセットとなります。MuMAKAはM.K Softの著作物で、商利用にはM.K Softの許可が必要です。正式版をDMシステム2で利用することはできません。

2.1.3 FM-BIOS

 MSX-MUSICのBIOSに内蔵されているBGM再生ルーチンです。

 FM-BIOSの利点は処理の「軽さ」です。他のBGMドライバは多くの機能を実現する為に割り込み処理に時間を要しますが、FM-BIOSは最低限の演奏しかできないかわりに割り込み処理にほとんど時間をかけません。処理速度を確保したいケースで最適です。

Download driver at Github BGM-BIOS.LZH

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)
+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してください。

  • MGSDRV形式ではデータ先頭の "MGS"という文字列で判別しています。
  • MuSICA(MuMAKA)形式ではデータ先頭の1バイトが00h及び01hで判断しています。

 タイマーフックへの接続はシステム側で行われるため、ドライバ側が処理する必要はありません。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:なし)
[Back]トップページへ