※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※
MSX-AUDIOでは、アプリケーションソフトウェア用のサービスルーチンとして、拡張BIOSとMBIOS(Music BIOS)コールを用意しています。拡張BIOSコールにより、アプリケーションソフトウェアはそのスロットアドレスやアドレスなどの位置を調べ、インタースロットコールなどを使って、ジャンプテーブルを経由して呼び出します。
高速処理を必要とする場合は、あらかじめスロットをイネーブルしておき、直接コールすることも出来ます。この章では、MSX-AUDIO拡張BIOSを使用するのに必要な、拡張BIOSコールの方法と各BIOSの機能について解説します。
1.ジャンプテーブルアドレスの取得
アプリケーションは、まず以下の拡張BIOSコールにより、MSX-AUDIO拡張BIOSの存在するスロットとジャンプテーブルの先頭アドレスを調べなければなりません。
拡張BIOSの存在するスロットとジャンプテーブルの先頭アドレスは、以下のようにして求めます。
- RETURN情報エリア用のワークエリア(64バイト)を取る
- 以下の設定を行い、FFCAH番地をコールする
D デバイス番号 (10)
MSX-AUDIO拡張BIOSのデバイス番号は10
E 機能番号 (0)
B RETURN情報エリアのスロットアドレス
スロットアドレスは、システムワークエリアに保存されている
HL RETURN情報エリアの先頭アドレス
RAMのスロットアドレスは以下のワークエリアに保存されています。このワークエリアはディスクが接続されているシステムで有効です。ディスクが接続されていないシステムではRAMのスロットアドレスを探す場合は、サンプルプログラムの「RAMSRCH.MAC」や「AUDIO.MAC」を参照して下さい。
表7.58 RAMスロットアドレス
ページ | ワークエリアのアドレス |
0 | F341H |
1 | F342H |
2 | F343H |
3 | F344H |
B 次のRETURN情報エリアのスロットアドレス
HL 次のRETURN情報エリアの先頭アドレス
F
RETURN情報はアプリケーションが指定した領域に次のように格納されます。
MSX-AUDIOが無いときは、BレジスタとHLレジスタの内容が変わらずに帰ってきます。
スロットアドレスの表現はMSX共通で以下の通りです。
拡張BIOSを使用する場合は、この拡張BIOSコールで得られたジャンプテーブルをインタースロットコールなどにより呼び出し、目的のBIOSを使用します。
MSX-AUDIOの仕様では、1つのMSXシステムに同時に2つのMSX-AUDIO LSIが実装されている場合があります。そのため、MSX-AUDIOが幾つあるかを調べます。
D デバイス番号 (10)
E 機能番号 (1)
A 0
A MSX-AUDIOの数
0 MSX-AUDIOカートリッジは存在しない
1 MSX-AUDIOカートリッジは1つ
2 MSX-AUDIOカートリッジは2つ
BC,DE,HL以外
MSX-AUDIO拡張BIOSは以下に示すジャンプテーブルを持っています。アプリケーションプログラムはインタースロットコールなどで、各エントリを呼び出すことにより、拡張BIOSの各機能を利用できます。
先頭からのオフセット(バイト) | 名称 | 機能 |
0 | VERSION | ソフトウェアのバージョン番号(現在、3バイトとも0) |
3 | MBIOS | MBIOS(Music BIOS)の呼び出し |
6 | AUDIO | MSX-AUDIOの初期化 |
9 | SYNTHE | 付属アプリケーションプログラムの呼び出し |
12 | PLAYF | PLAY文の動作状態の獲得 |
15 | BGM | BGMモードの設定/解除 |
18 | MKTEMPO | MK(Music Keyboard)再生/記録のテンポの設定 |
21 | PLAYMK | MK演奏の再生 |
24 | RECMK | MK演奏の記録 |
27 | STOPM | MKの再生/記録、ADPCM記録/再生、PLAY文の停止 |
30 | CONTMK | MK再生記録の継続 |
33 | RECMOD | MK記録モードの設定 |
36 | STPPLY | PLAY文の停止 |
39 | SETPCM | ADPCM/PCM領域確保 |
42 | RECPCM | ADPCM/PCMの録音 |
45 | PLAYPCM | ADPCM/PCMの再生 |
48 | PCMFREQ | ADPCM/PCM再生周波数の変更 |
51 | MKPCM | MK用ADPCMデータの設定/解除 |
54 | PCMVOL | ADPCM/PCM再生音量の設定 |
57 | SAVEPCM | ADPCM/PCMデータのセーブ |
60 | LOADPCM | ADPCM/PCMデータのロード |
63 | COPYPCM | ADPCM/PCMデータの転送 |
66 | CONVP | ADPCMデータをPCMデータに変換 |
69 | CONVA | PCMデータをADPCMデータに変換 |
72 | VOICE | FM音源データの設定 |
75 | VOICECOPY | FM音源データの移動 |
- AUDIO 6
└───────ジャンプテーブル先頭からのオフセット
└───────拡張BIOSの名称
└───────機能の概略です。
└───────その拡張BISOを使用するに当たって、準備する手順です。。
└───────拡張BIOSをコールしたことによる結果です。
└───────その拡張BIOSの機能を詳しく解説します。
└───────注意すべき点を解説します。
MSX-AUDIOの拡張BIOSコールでは、特に断りが無い限り、すべてのレジスタは保存されません。
- AUDIO 6
MSX-AUDIOを初期化します。
【BUF(F55EH)】に以下のパラメータを設定します。
BUF | PLAY文で使用するFM音源用文字列の数(0〜9) |
+1 | モードスイッチ* |
+2 | インスツルメントに使用するFM音源の数(0〜9) |
+3 | PLAY文第1文字列で使用するFM音源の数(0〜9) |
+4 | PLAY文第2文字列で使用するFM音源の数(0〜8) |
+5 | PLAY文第3文字列で使用するFM音源の数(0〜7) |
+6 | PLAY文第4文字列で使用するFM音源の数(0〜6) |
+7 | PLAY文第5文字列で使用するFM音源の数(0〜5) |
+8 | PLAY文第6文字列で使用するFM音源の数(0〜4) |
+9 | PLAY文第7文字列で使用するFM音源の数(0〜3) |
+10 | PLAY文第8文字列で使用するFM音源の数(0〜2) |
+11 | PLAY文第9文字列で使用するFM音源の数(0〜1) |
bit0 | 0 | リズムを使用しない |
| 1 | リズムを使用する |
bit1 | 0 | PLAY文でADPCMを扱わない |
| 1 | PLAY文でADPCMを扱う |
bit2 | 0 | MSX-AUDIOをCMSモードにしない |
| 1 | MSX-AUDIOをCMSモードにする |
入力パラメータに誤りがあるとキャリーフラグを立てて戻り、初期化は行われません。
MSX-AUDIOシステムを初期化します。「SYNTHE」と「MBIOS」を除く全ての機能はこの初期化をした後、使用できます。
FM音源の総数はリズムを使用しないときは9まで、使用するときは6までです。
- SYNTHE 9
付属アプリケーションプログラムを呼び出します。
なし
なし
付属アプリケーションプログラムに制御を移します。もし、以前にAUDIOが呼ばれていると、なにもせずにリターンします。
BASICでCLEAR文を実行した後には、付属のアプリケーションプログラムは起動しないでください。最悪の場合、暴走する可能性があります。
- SETPCM 39
ADPCM/PCMの音声ファイルを初期化します。
【BUF(F55EH)】に以下のパラメータを設定します。
BUF | 音声ファイル番号(0〜15) |
+1 | デバイス番号(0〜5、ただし4を除く) |
+2 | モード(0か1) |
+3 | デバイス番号によって異なる |
+4 | デバイス番号によって異なる |
+5 | 長さの下位8ビット |
+6 | 長さの上位8ビット |
+7 | サンプリング周波数の下位8ビット |
+8 | サンプリング周波数の上位8ビット |
+9 | チャンネル番号(0か1) |
BUF+3とBUF+4のパラメータはデバイス番号によって以下のように異なります。
デバイス番号0か2のとき(外部RAM)
+3 | 設定する必要はない |
+4 | 設定する必要はない |
デバイス番号1か3のとき(外部RAM)
デバイス番号5のとき(外部RAM)
+3 | VRAMアドレスの下位8ビット |
+4 | VRAMアドレスの上位8ビット |
入力パラメータに誤りがあるとキャリーフラグを立てて戻り、設定は行われません。
デバイス番号4(CPU)は使用できません。
- RECPCM 42
音声を音声ファイルに録音します。
【BUF(F55EH)】に以下のパラメータを設定します。
BUF | 音声ファイル番号(0〜15) |
+1 | SYNC(0か1) |
+2 | オフセットの下位8ビット |
+3 | オフセットの上位8ビット |
+4 | 長さの下位8ビット |
+5 | 長さの上位8ビット |
+6 | サンプリング周波数の下位8ビット |
+7 | サンプリング周波数の上位8ビット |
+8 | チャンネル番号(0か1) |
長さ、サンプリング周波数にSETPCMで設定した値を使用するときは、各パラメータに0FFFFHを設定してください。
チャンネル番号SETPCMで設定した値を使用するときは、チャンネル番号に0FFHを設定してください。
入力パラメータに誤りがあるとキャリーフラグを立てて戻り、録音は行われません。
- PLAYPCM 45
音声ファイルを再生します。
【BUF(F55EH)】に以下のパラメータを設定します。
BUF | 音声ファイル番号(0〜15) |
+1 | REPEAT(0か1) |
+2 | オフセットの下位8ビット |
+3 | オフセットの上位8ビット |
+4 | 長さの下位8ビット |
+5 | 長さの上位8ビット |
+6 | サンプリング周波数の下位8ビット |
+7 | サンプリング周波数の上位8ビット |
+8 | チャンネル番号(0か1) |
長さ、サンプリング周波数にSETPCMで設定した値を使用するときは、各パラメータに0FFFFHを設定してください。
チャンネル番号SETPCMで設定した値を使用するときは、チャンネル番号に0FFHを設定してください。
入力パラメータに誤りがあるとキャリーフラグを立てて戻り、再生は行われません。
- PCMFREQ 48
再生周波数を変更します。
ローカルモード再生中にサンプリング主は数を変えます。再生中でないと効果はありません。
BC 第1チャンネルのサンプリング周波数
DE 第2チャンネルのサンプリング周波数
範囲は1800〜49716で、単位はHzです。
第2チャンネルがないときは、DEレジスタにBCレジスタと同じ値を設定して下さい。
入力パラメータに誤りがあるとキャリーフラグを立てて戻り、サンプリング周波数の変更は行われません。
- PCMVOL 54
ADPCM/PCM再生音量を設定します。
BC 第1チャンネルの再生音量
DE 第2チャンネルの再生音量
範囲は0〜63で、63が最大音量です。
第2チャンネルが存在しないときは、DEレジスタにBCレジスタと同じ値を設定して下さい。初期値はADPCMでは63、PCMでは32です。
入力パラメータに誤りがあるとキャリーフラグを立てて戻り、音量設定は行われません。
- SAVEPCM 57
ADPCM/PCM音声ファイルをフロッピーディスクへセーブします。
A 音声ファイル番号
HL ファイル名のあるアドレス
ファイル名はDISK BASICのファイルスペックに適合する文字列の前後にダブルクオート(22H)を置き、最後に0を置きます。
FILENAME: DB 22H,"A:VOICE.PCM",22H, 0
音声ファイル番号が正しくないときはキャリーフラグを立てて戻り、セーブは行われません。
ファイル名が正しくなかったり、ディスクが入っていないなどのエラーが起きるとBASICインタープリタのエラー処理ルーチンに制御が移ります。これを避けるためには、【H.ERRO(FFB1H)】というフックを設定して、ユーザープログラム側でエラー処理を行って下さい。
フロッピーディスク以外のデバイス名を指定しても正しい動作は行われません。
■音声ファイルのフォーマット
音声ファイルは3つのブロックからなります。最初は7バイトのヘッダブロックです。
これはBSAVEステートメントでセーブされるでーたの先頭と同じで、音声ファイルをBLOAD文でロードできるようになっています。次は8バイトのインフォーメーションブロックです。ここには、せー宇されているADPCM/PCMデータについての情報が書かれています。最後が実際のADPCM/PCMデータです。
- LOADPCM 60
ADPCM/PCM音声ファイルをフロッピーディスクからロードします。
A 音声ファイル番号
HL ファイル名のあるアドレス
ファイル名はDISK BASICのファイルスペックに適合する文字列の前後にダブルクオート(22H)を置き、最後に0を置きます。
FILENAME: DB 22H,"A:VOICE.PCM",22H, 0
音声ファイル番号が正しくなかったり、SAVEPCMでセーブされたファイルでないファイルをロードしようとしたときは、キャリーフラグを立てて戻り、ロードは行われません。
ファイル名が正しくなかったり、フロッピーディスクが入っていないなどのエラーが起きるとBASICインタープリタのエラー処理ルーチンに制御が移ります。これを避けるためには、【H.ERRO(FFB1H)】というフックを設定して、ユーザープログラム側でエラー処理を行って下さい。
フロッピーディスク以外のデバイス名を指定しても正しい動作は行われません。
- COPYPCM 63
ADPCM/PCMのデータを音声ファイル間で転送します。
【BUF(F55EH)】に以下のパラメータを設定します。
BUF | ソース音声ファイル番号 |
+1 | デスティネーション音声ファイル番号(0〜15) |
+2 | ソースオフセットの下位8ビット |
+3 | ソースオフセットの上位8ビット |
+4 | 長さの下位8ビット |
+5 | 長さの上位8ビット |
+6 | デスティネーションオフセットの下位8ビット |
+7 | デスティネーションオフセットの上位8ビット |
+8 | ソース指定(0か1) |
入力パラメータに誤りがあるとキャリーフラグを立てて戻り、データの転送は行われません。
- CONVP 66
PCM形式のデータをADPCM形式のデータに変換します。
【BUF(F55EH)】に以下のパラメータを設定します。
BUF | ソース音声ファイル番号(0〜15) |
+1 | デスティネーション音声ファイル番号(0〜15) |
入力パラメータに誤りがあるとキャリーフラグを立てて戻り、データの転送は行われません。
- CONVA 69
ADPCM形式のデータをPCM形式のデータに変換します。
【BUF(F55EH)】に以下のパラメータを設定します。
BUF | ソース音声ファイル番号(0〜15) |
+1 | デスティネーション音声ファイル番号(0〜15) |
入力パラメータに誤りがあるとキャリーフラグを立てて戻り、データの転送は行われません。
- MKTEMPO 18
ミュージックキーボード演奏記録、再生速度とメトロノーム機能の速度を設定します。
DE テンポ
範囲は25〜360で、単位は1分間あたりの四分音符の数です。
入力パラメータに誤りがあるとキャリーフラグを立てて戻り、設定は行われません。
- MKPCM 51
ミュージックキーボードで演奏するADPCM音声ファイルを音声ファイル番号で指定します。
A 音声ファイル番号
範囲は0〜15です。演奏を止めるには0FFHを指定します。
入力パラメータに誤りがあるとキャリーフラグを立てて戻り、指定は行われません。
ローカルモード以外の音声ファイルを指定した場合、演奏されません。
■ミュージックキーボード演奏の記録、再生
ミュージックキーボード(MK)演奏は以下の形式でメモリに記録します。
キーが押されたときのデータ(3バイト)
オフセット | 内容 |
0 | ディレイバイト(0〜255) *1 |
1 | ビット7 キーオンID(1) |
| ビット6〜0 キーコード番号(1〜125) *2 |
2 | ベロシティ(0〜15) *3 |
キーが離されたときのデータ(2バイト)
オフセット | 内容 |
0 | ディレイバイト(0〜255) *1 |
1 | ビット7 キーオフID(0) |
| ビット6〜0 キーコード番号(1〜125) *2 |
ノーオペレーション(2バイト) *4
オフセット | 内容 |
0 | ディレイバイト(0〜255) *1 |
1 | ノーオペレーションID(0か127) |
終了マーク(2バイト)
オフセット | 内容 |
0 | ディレイバイト(0〜255) *1 |
1 | 終了ID(126) |
キーが押されたり離されたりすることをイベントと呼びますが、ディレイバイトとは前のイベントが起きてから今回のイベントが青着るまでの経過時間で、MKTEMPOによりMSX-AUDIO LSIに設定されたタイマ割り込みの回数が書かれています。
キーコードは音程を指定するコードで中央Cが60です。
ベロシティはキーを押した速度を意味します。現在のMSX-AUDIOでは速度検出型の鍵盤をサポートしていないので、あらかじめ設定されたベロシティが書かれます。
これは拡張BASICではCALL MKVELで、MBIOSではSM_MKで設定します。
ディレイバイトにより記憶できるイベントの経過時間はタイマ割り込みの回数で255までです。よって、それ以上の時間イベントがないときに書かれるデータがノーオペレーションデータです。
- PLAYMK 21
MK記録を再生します。
BC MK演奏記録データの開始番地
DE MK演奏記録データの最終番地
なし
- RECMK 24
MK演奏を記録します。
BC MK演奏記録データの開始番地
DE MK演奏記録データの最終番地
なし
- CONTMK 30
STOPMによって停止していたMK再生/記録を継続します。
なし
なし
- RECMOD 33
MK記録の記録モードを設定します。
A モード
0 ミューティング(記録しない)
1 MK演奏を記録
2 MK再生を記録
3 MK演奏と再生を両方とも記録
入力パラメータに誤りがあるとキャリーフラグを立てて戻り、設定は行われません。
- MBIOS 3
MBIOSを呼び出します。
MBIOSのエントリアドレスをHLレジスタに設定します。またほかのレジスタはMBIOSの各ルーチンによって設定が異なります。IXレジスタとIYレジスタはインタースロットコールに使われるため、そのままでは渡すことができません。したがって、【BUF(F55EH)】に以下のように設定します。
BUF | IXレジスタの下位8ビット |
+1 | IXレジスタの上位8ビット |
+2 | IYレジスタの下位8ビット |
+3 | IYレジスタの上位8ビット |
MBIOSの各ルーチンによって異なります。MBIOSについては「4.4 MBIOS」をご覧下さい。
- PLAYF 12
PLAY文の動作状態を調べます。
A PLAY文のチャンネル番号
範囲は1〜PLAY文が現在使用できるチャンネル番号です。ただし0も指定でき、このときは全てのチャンネルの指定となります。
HL 0 指定されたチャンネルが演奏中ではない
FFFFH 指定されたチャンネルが現在演奏中
全てのチャンネルが指定されたときは、どれか1つのチャンネルでも演奏中ならば0FFFFHが、そうでなければ0が返ります。
- BGM 15
バックグラウンド処理を行うかどうかを指定します。
A 0 バックグラウンド処理を行わない
1 バックグラウンド処理を行う
AUDIOを呼びだすと、バックグラウンド処理を行うモードに初期設定されます。
なし
次の機能はバックグラウンド処理ができます。
- PLAY文による演奏
- ローカルモードのADPCM録音再生
- アドレス指定によるMKの記録再生
- STOPM 27
MKの記録再生、ADPCM録音再生、PLAY文の演奏などを中止させます。
なし
なし
MKの記録再生、ADPCM録音再生、PLAY文の演奏などを停止させます。MKの記録再生はCONTMKで継続することができます。
- STPPLY 36
PLAY文の演奏だけを停止させます。
なし
なし
- VOICE 72
FM音源の各チャンネルに音色を設定します。
【BUF(F55EH)】に以下のパラメータを設定します。
BUF | ボイスパラメータブロック1 |
+4 | ボイスパラメータブロック2 |
+8 | ボイスパラメータブロック3 |
| : |
| : |
+(n-2)×4 | ボイスパラメータブロックn-1 |
+(n-1)×4 | ボイスパラメータブロックn |
+n×4 | エンドマーク(0FFH) |
各ボイスパラメータブロックは4バイトで構成されています。このパラメータは2種類の指定方法があります。
1つはシステムに備えられている音色データを指定する場合で、以下のようなパラメータブロックで指定します。
+0 | FM音源のチャンネル番号(0〜8) |
+1 | 必ず0を設定 |
+2 | 音色ライブラリの音色番号(0〜63) |
+3 | 必ず0を設定 |
もう1つはユーザーが用意した音色データを指定する場合で、以下のようなパラメータブロックで指定します。
+0 | FM音源のチャンネル番号(0〜8) |
+1 | 必ず0FFHを設定 |
+2 | 音色データのあるアドレスの下位8ビット |
+3 | 音色データのあるアドレスの上位8ビット |
入力パラメータに誤りがあるとキャリーフラグを立てて戻り、設定は行われません。
FM音源の各チャンネルに音色を設定します。1度に9チャンネルまでの設定が出来ます。
- VOICECOPY 75
FM音源データを転送します。
【BUF(F55EH)】に以下のパラメータを設定します。
パラメータの指定には以下の方法があります。
1. システム音色ライブラリの0〜63のうちの1つをシステム音色ライブラリの32〜63のどれかに転送するもので、以下のパラメータを指定します。
BUF | 0 |
+1 | ソース音色ライブ雷の音色番号(0〜63) |
+2 | 0 |
+3 | 0 |
+4 | 0 |
+5 | 0 |
+6 | デスティネーション音色ライブ雷の音色番号(32〜63) |
+7 | 0 |
+8 | 0 |
+9 | 0 |
2. システム音色ライブラリの0〜63のうちの1つをユーザーのデータ領域に転送するもので、以下のパラメータを指定します。
BUF | 0 |
+1 | ソース音色ライブ雷の音色番号(0〜63) |
+2 | 0 |
+3 | 0 |
+4 | 0 |
+5 | 0FFH |
+6 | ユーザーデータ領域のアドレスの下位8ビット |
+7 | ユーザーデータ領域のアドレスの上位8ビット |
+8 | 0 |
+9 | 0 |
3. ユーザーのデータ領域からシステム音色ライブラリの32〜63のどれかに転送するもので、以下のパラメータを指定します。
BUF | 0FFH |
+1 | ユーザーデータ領域のアドレスの下位8ビット |
+2 | ユーザーデータ領域のアドレスの上位8ビット0 |
+3 | 0 |
+4 | 0 |
+5 | 0 |
+6 | デスティネーション音色ライブラリの音色番号(32〜63) |
+7 | |
+8 | 0 |
+9 | 0 |
4. システム音色ライブラリの32〜63のすべてをユーザーのデータ領域に転送するもので、以下のパラメータを指定します。
BUF | 0 |
+1 | 0FFH |
+2 | 0 |
+3 | 0 |
+4 | 0 |
+5 | 0FFH |
+6 | ユーザーデータ領域のアドレスの下位8ビット |
+7 | ユーザーデータ領域のアドレスの上位8ビット |
+8 | ユーザーデータ領域の長さの下位8ビット |
+9 | ユーザーデータ領域の長さの上位8ビット |
5. ユーザーのデータ領域からシステム音色ライブラリの32〜63のすべてに転送するもので、以下のパラメータを指定します。
BUF | 0FFH |
+1 | ユーザーデータ領域のアドレスの下位8ビット |
+2 | ユーザーデータ領域のアドレスの上位8ビット |
+3 | ユーザーデータ領域の長さの下位8ビット |
+4 | ユーザーデータ領域の長さの上位8ビット |
+5 | 0 |
+6 | 0FFH |
+7 | 0 |
+8 | 0 |
+9 | 0 |
添付のフロッピーディスクに「AUDIO.MAC」という拡張BIOSコールの実行プログラムが入っています。このプログラムには、以下のBASICプログラムと同等の働きをします。
10 PRINT "Go synthesizer (y for yes) ?";
20 A$=INPUT$(1)
30 IF A$="y" or A$="Y" THEN CALL SYNTHE
40 CALL AUDIO(1,3,1,1,1)
50 END
アセンブルはMSX-DOS上で
A>M80 =SAMPLE.MAC
リンクは
A>L80 /P:100,SAMPLE,SAMPLE.BIN /N /E
として下さい。
BASICで
BLOAD "SAMPLE.BIN".R
とすると、プログラムが実行できます。