MSX Datapack wiki化計画

4.3 MSX-AUDIO 拡張BIOS

※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※
← 4.2 拡張BASIC  4.4 MBIOS

 4.3.1 はじめに

MSX-AUDIOでは、アプリケーションソフトウェア用のサービスルーチンとして、拡張BIOSとMBIOS(Music BIOS)コールを用意しています。拡張BIOSコールにより、アプリケーションソフトウェアはそのスロットアドレスやアドレスなどの位置を調べ、インタースロットコールなどを使って、ジャンプテーブルを経由して呼び出します。
高速処理を必要とする場合は、あらかじめスロットをイネーブルしておき、直接コールすることも出来ます。この章では、MSX-AUDIO拡張BIOSを使用するのに必要な、拡張BIOSコールの方法と各BIOSの機能について解説します。

 4.3.2 拡張BIOSの呼び出し

1.ジャンプテーブルアドレスの取得
アプリケーションは、まず以下の拡張BIOSコールにより、MSX-AUDIO拡張BIOSの存在するスロットとジャンプテーブルの先頭アドレスを調べなければなりません。
拡張BIOSの存在するスロットとジャンプテーブルの先頭アドレスは、以下のようにして求めます。

    1. RETURN情報エリア用のワークエリア(64バイト)を取る
    2. 以下の設定を行い、FFCAH番地をコールする
 コール手順 
D  デバイス番号 (10)
   MSX-AUDIO拡張BIOSのデバイス番号は10
E  機能番号 (0)
B  RETURN情報エリアのスロットアドレス
   スロットアドレスは、システムワークエリアに保存されている
HL RETURN情報エリアの先頭アドレス 

RAMのスロットアドレスは以下のワークエリアに保存されています。このワークエリアはディスクが接続されているシステムで有効です。ディスクが接続されていないシステムではRAMのスロットアドレスを探す場合は、サンプルプログラムの「RAMSRCH.MAC」や「AUDIO.MAC」を参照して下さい。

表7.58 RAMスロットアドレス

ページワークエリアのアドレス
0F341H
1F342H
2F343H
3F344H

 戻り値 
B    次のRETURN情報エリアのスロットアドレス
HL   次のRETURN情報エリアの先頭アドレス
 変更レジスタ 
F

RETURN情報はアプリケーションが指定した領域に次のように格納されます。


図7.33 RETURN情報の形式

MSX-AUDIOが無いときは、BレジスタとHLレジスタの内容が変わらずに帰ってきます。
スロットアドレスの表現はMSX共通で以下の通りです。


図7.34 スロットアドレスの形式

拡張BIOSを使用する場合は、この拡張BIOSコールで得られたジャンプテーブルをインタースロットコールなどにより呼び出し、目的のBIOSを使用します。

 4.3.3 MSX-AUDIOの数のチャンネル獲得

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以外

 4.3.4 拡張BIOSジャンプテーブルの獲得

MSX-AUDIO拡張BIOSは以下に示すジャンプテーブルを持っています。アプリケーションプログラムはインタースロットコールなどで、各エントリを呼び出すことにより、拡張BIOSの各機能を利用できます。

  • 表7.59 ジャンプテーブル*
先頭からのオフセット(バイト)名称機能
0VERSION ソフトウェアのバージョン番号(現在、3バイトとも0)
3MBIOS MBIOS(Music BIOS)の呼び出し
6AUDIO MSX-AUDIOの初期化
9SYNTHE 付属アプリケーションプログラムの呼び出し
12PLAYF PLAY文の動作状態の獲得
15BGM BGMモードの設定/解除
18MKTEMPO MK(Music Keyboard)再生/記録のテンポの設定
21PLAYMK MK演奏の再生
24RECMK MK演奏の記録
27STOPM MKの再生/記録、ADPCM記録/再生、PLAY文の停止
30CONTMK MK再生記録の継続
33RECMOD MK記録モードの設定
36STPPLY PLAY文の停止
39SETPCM ADPCM/PCM領域確保
42RECPCM ADPCM/PCMの録音
45PLAYPCM ADPCM/PCMの再生
48PCMFREQ ADPCM/PCM再生周波数の変更
51MKPCM MK用ADPCMデータの設定/解除
54PCMVOL ADPCM/PCM再生音量の設定
57SAVEPCM ADPCM/PCMデータのセーブ
60LOADPCM ADPCM/PCMデータのロード
63COPYPCM ADPCM/PCMデータの転送
66CONVP ADPCMデータをPCMデータに変換
69CONVA PCMデータをADPCMデータに変換
72VOICE FM音源データの設定
75VOICECOPYFM音源データの移動

 4.3.5 表記法

AUDIO         6

            └───────ジャンプテーブル先頭からのオフセット
 └───────拡張BIOSの名称

機能
 └───────機能の概略です。
コール手順
 └───────その拡張BISOを使用するに当たって、準備する手順です。。
戻り値
 └───────拡張BIOSをコールしたことによる結果です。
解説
 └───────その拡張BIOSの機能を詳しく解説します。
注意
 └───────注意すべき点を解説します。

MSX-AUDIOの拡張BIOSコールでは、特に断りが無い限り、すべてのレジスタは保存されません。

AUDIO          6
機能

MSX-AUDIOを初期化します。

コール手順

【BUF(F55EH)】に以下のパラメータを設定します。

BUFPLAY文で使用する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)
+10PLAY文第8文字列で使用するFM音源の数(0〜2)
+11PLAY文第9文字列で使用するFM音源の数(0〜1)

  • モードスイッチ
bit00リズムを使用しない
1リズムを使用する
bit10PLAY文でADPCMを扱わない
1PLAY文でADPCMを扱う
bit20MSX-AUDIOをCMSモードにしない
1MSX-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)

+3 ROM音声ファイル番号
+4 必ず0

デバイス番号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データです。
 

図7.35 音声ファイルのフォーマット

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)

  • 1 ディレイバイト

キーが押されたり離されたりすることをイベントと呼びますが、ディレイバイトとは前のイベントが起きてから今回のイベントが青着るまでの経過時間で、MKTEMPOによりMSX-AUDIO LSIに設定されたタイマ割り込みの回数が書かれています。

  • 2 キーコード

キーコードは音程を指定するコードで中央Cが60です。

  • 3 ベロシティ

ベロシティはキーを押した速度を意味します。現在のMSX-AUDIOでは速度検出型の鍵盤をサポートしていないので、あらかじめ設定されたベロシティが書かれます。
これは拡張BASICではCALL MKVELで、MBIOSではSM_MKで設定します。

  • 4 ノーオペレーション

ディレイバイトにより記憶できるイベントの経過時間はタイマ割り込みの回数で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)】に以下のように設定します。

BUFIXレジスタの下位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つはシステムに備えられている音色データを指定する場合で、以下のようなパラメータブロックで指定します。

+0FM音源のチャンネル番号(0〜8)
+1必ず0を設定
+2音色ライブラリの音色番号(0〜63)
+3必ず0を設定

もう1つはユーザーが用意した音色データを指定する場合で、以下のようなパラメータブロックで指定します。

+0FM音源のチャンネル番号(0〜8)
+1必ず0FFHを設定
+2音色データのあるアドレスの下位8ビット
+3音色データのあるアドレスの上位8ビット
戻り値

入力パラメータに誤りがあるとキャリーフラグを立てて戻り、設定は行われません。

解説

FM音源の各チャンネルに音色を設定します。1度に9チャンネルまでの設定が出来ます。

VOICECOPY          75
機能

FM音源データを転送します。

コール手順

【BUF(F55EH)】に以下のパラメータを設定します。
パラメータの指定には以下の方法があります。

1. システム音色ライブラリの0〜63のうちの1つをシステム音色ライブラリの32〜63のどれかに転送するもので、以下のパラメータを指定します。

BUF0
+1 ソース音色ライブ雷の音色番号(0〜63)
+2 0
+3 0
+4 0
+5 0
+6 デスティネーション音色ライブ雷の音色番号(32〜63)
+7 0
+8 0
+9 0

2. システム音色ライブラリの0〜63のうちの1つをユーザーのデータ領域に転送するもので、以下のパラメータを指定します。

BUF0
+1 ソース音色ライブ雷の音色番号(0〜63)
+2 0
+3 0
+4 0
+5 0FFH
+6 ユーザーデータ領域のアドレスの下位8ビット
+7 ユーザーデータ領域のアドレスの上位8ビット
+8 0
+9 0

3. ユーザーのデータ領域からシステム音色ライブラリの32〜63のどれかに転送するもので、以下のパラメータを指定します。

BUF0FFH
+1 ユーザーデータ領域のアドレスの下位8ビット
+2 ユーザーデータ領域のアドレスの上位8ビット0
+3 0
+4 0
+5 0
+6 デスティネーション音色ライブラリの音色番号(32〜63)
+7
+8 0
+9 0

4. システム音色ライブラリの32〜63のすべてをユーザーのデータ領域に転送するもので、以下のパラメータを指定します。

BUF0
+1 0FFH
+2 0
+3 0
+4 0
+5 0FFH
+6 ユーザーデータ領域のアドレスの下位8ビット
+7 ユーザーデータ領域のアドレスの上位8ビット
+8 ユーザーデータ領域の長さの下位8ビット
+9 ユーザーデータ領域の長さの上位8ビット

5. ユーザーのデータ領域からシステム音色ライブラリの32〜63のすべてに転送するもので、以下のパラメータを指定します。

BUF0FFH
+1 ユーザーデータ領域のアドレスの下位8ビット
+2 ユーザーデータ領域のアドレスの上位8ビット
+3 ユーザーデータ領域の長さの下位8ビット
+4 ユーザーデータ領域の長さの上位8ビット
+5 0
+6 0FFH
+7 0
+8 0
+9 0

 4.3.6 サンプルプログラム

添付のフロッピーディスクに「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

とすると、プログラムが実行できます。

← 4.2 拡張BASIC  4.4 MBIOS