「MXDRVデータ資料」の編集履歴(バックアップ)一覧はこちら
「MXDRVデータ資料」(2011/02/02 (水) 21:44:30) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
MXDRV現役の頃にYURAYSAN氏により書かれたドキュメントです。
調査・資料化に感謝いたします。
----
#asciiart(){
*
* MXDRV v2.06+16/02EX 内部資料 修正/追加 by YURAYSAN
*
パラメータのbは1バイト、wは2バイト(上位,下位の順)、lは4バイト。
1.MDXデータフォーマット
[データタイトル](サイズ不定) + $0D + $0A + $1A
[PCMファイル名](サイズ不定) + $00
[音色データオフセット](word)
[MMLデータオフセット * 9](word)
音色データ及びMMLデータのベースポインタは音色データオフセットのポインタ。
1.1 音色データフォーマット
以下、データはすべてバイト単位。各パラメータはM1,M2,C1,C2の順。
0:[音色番号]
3:[DT1 & MUL]×4
4:[TL]×4
5:[KS & AR]×4
6:[AME & D1R]×4
7:[DT2 & D2R]×4
8:[D1L & RR]×4
1:[FL & CON]
2:[スロットマスク]
未使用ビットは0とする。また、[FL & CON]のビット6,7は0とする。
注意:実際には番号順に変換される
1.2 MMLデータフォーマット
・休符データ
[$00 ~ $7F] 長さはデータ値+1クロック。
・音符データ
[$80 ~ $DF] + [長さ-1]b 音程は$80がo0d+、$DFがo8d。ChPではデータ番号。
・テンポ設定
[$FF] + [???]b @tコマンド対応
・OPMレジスタ設定
[$FE] + [レジスタ番号]b + [出力データ]b
・音色設定
[$FD] + [???]b @コマンド対応
・出力位相設定
[$FC] + [???]b pコマンド対応
・音量設定
[$FB] + [$00~$15]b vコマンド対応
[$FB] + [$80~$FF]b @vコマンド対応(ビット7無効)
・音量増大
[$FA]
・音量減小
[$F9]
・発音長指定
[$F8] + [$01~$08]b qコマンド対応
[$F8] + [$FF~$80]b @qコマンド対応(2の補数)
・キーオフ無効
[$F7] 次のNOTE発音後キーオフしない
・リピート開始
[$F6] + [リピート回数]b + [$00]b
・リピート終端
[$F5] + [開始コマンドへのオフセット+2]w
・リピート脱出
[$F4] + [終端コマンドへのオフセット+1]w
・デチューン
[$F3] + [???]w Dコマンド対応
・ポルタメント
[$F2] + [変移※1]w
変移 = 1クロックあたりの変化量
・データエンド
[$F1] + [$00]b 演奏終了
[$F1] + [ループポインタ]w ポインタ位置から再演奏
・キーオンディレイ
[$F0] + [???]b kコマンド対応
・同期信号送出
[$EF] + [チャネル番号(0~8)]b
・同期信号待機
[$EE]
・ADPCM/ノイズ周波数設定
チャンネルH
[$ED] + [???]b ノイズ周波数設定。ビット7はノイズON/OFF
ON : 128+周波数
OFF : 0
チャンネルP
[$ED] + [???]b Fコマンド対応
・音程LFO制御
[$EC] + [$80]b MPON
[$EC] + [$81]b MPOF
[$EC] + [WAVE]b + [周期※2]w + [変移※1]w
WAVE0 [ 鋸波 ] : 周期 = 設定値×4 : 変移 = 設定値×周期÷512
WAVE1 [矩形波] : 周期 = 設定値×2 : 変移 = 設定値×256
WAVE2 [三角波] : 周期 = 設定値×2 : 変移 = 設定値×周期÷512
・音量LFO制御
[$EB] + [$80]b MAON
[$EB] + [$81]b MAOF
[$EB] + [WAVE]b + [周期※2]w + [変移※1]w
WAVE0 [ 鋸波 ] : 周期 = 設定値×4 : 変移 = 設定値×周期÷256
WAVE1 [矩形波] : 周期 = 設定値×2 : 変移 = 設定値×256
WAVE2 [三角波] : 周期 = 設定値×2 : 変移 = 設定値×周期÷256
・OPMLFO制御
[$EA] + [$80]b MHON
[$EA] + [$81]b MHOF
[$EA] + [SYNC]b + [WAVE]b + [LFRQ]b + [PMD]b + [AMD]b + [PMS/AMS]b
[SYNC*$40+WAVE]b + [LFRQ]b + [PMD+128]b + [AMD]b + [PMS/AMS}b
・LFOディレイ設定
[$E9] + [???]b MDコマンド対応
・PCM4/8使用宣言
[$E8]
・拡張MMLコマンド
[$E7] + [拡張コマンド]b
+16での拡張
[$00]b ERROR=強制終了
[$01]b + [SPEED]b FADEOUT
+17での拡張
[$02]b + [d0.w] + [d1.l] PCM8を直接ドライブする
[$03]b + [FLAG]b $00=KEYOFFする/$01=KEYOFFしない
[$04]b + [CH]b + [MML]? 他のチャンネルをコントロール
[$05]b + [DATA]b 音長加算する
[$06]b + [FLAG]b まだフラグを使用してない?
・拡張MMLコマンド2 (非公式コマンド)+162EXのみ
[$E6] + [拡張コマンド]b
[$00]b ERROR = 強制終了
[$01]b + [DETUNE]w 相対ディチューン (-32768~32768)
[$02]b + [KEY TRANS]b 移調 (-127~127)
[$03]b + [KEY TRANS]b 相対移調 (-127~127)
※1 変移 1クロック毎に変化させる量。単位はデチューンの1/256。
※2 周期 WAVE = 0 : 1周期のクロック数
WAVE = 1 : 1/2周期のクロック数
WAVE = 2 : 〃
2.PDXデータフォーマット
[ポインタ]l + [$0000]w + [長さ]w ×96
[PCMデータ]
EX-PDXの場合は長さもロングワードとして使える。
3.MXDRV V2.05 ファンクションコール
レジスタにパラメータをセットしてtrap #4を実行。d0はファンクション番号。
リターンd0が正値は正常終了、負数はエラーコード。d0以外は保存。
FUNC$00 UNLINK 演奏を終了して、MXDRVを切り放します
FUNC$01 reserved
FUNC$02 LOADMML MMLデータバッファにデータを転送します
パラメータ: d1.l: データサイズ
a1.l: データアドレス
エラーコードはバッファサイズ+$80000000
FUNC$03 LOADPCM PCMデータバッファにデータを転送します
パラメータ: d1.l: データサイズ
a1.l: データアドレス
エラーコードはバッファサイズ+$80000000
FUNC$04 M_PLAY 演奏を開始します
パラメータ: d1.l: MML番号(現在は無効)
FUNC$05 M_END 演奏を終了します
FUNC$06 M_STOP 演奏を停止します
FUNC$07 M_CONT 演奏を再開します
FUNC$08 MMLNAME MMLデータのタイトルを参照します
パラメータ: d1.l: データ番号(0でいいV2.06)
リターン: d0.l: MMLタイトルのアドレス
FUNC$09 PCMNAME PCMデータ名を参照します
パラメータ: d1.l: データ番号(0でいいV2.06)
リターン: d0.l: PCMデータ名のアドレス
FUNC$0A VOLADD volume加算???
パラメータ: d1.b: volume add data
FUNC$0B PCMCUT ???
パラメータ: d1.b:
FUNC$0C FADEOUT フェードアウト
パラメータ: d1.w: フェードアウトスピード
FUNC$0D AMPLAY AUTO MUSIC PLAYER
パラメータ: d1.b: コマンド(bit15がonで切り放し)
a2.l: ?
a1.l: ?
FUNC$0E CHMASK チャンネルのマスク
パラメータ: d1.w: 各チャンネルのフラグ
<ex> WVUT SRQP HGFE DCBA
move.l #%0000_0000_0000_0000,d1 マスク部を1にする。
FUNC$0F M_PLAY2 チャンネルマスク指定して演奏
パラメータ: d1.w: 各チャンネルのフラグ
FUNC$10 WORKS IMAGE REG の アドレス を 求める
リターン: d0.l: アドレス
FUNC$11 TIMSET
パラメーター: d1.l: 正で書き込み、負で読み出し
リターン: d0.b: tempo
FUNC$12 M_STAT
リターン: d0.w: ?
FUNC$13 KEYBCONT
パラメーター: d1.b: flag
リターン: d0.b: 前回値
FUNC$14 M_STAT2
リターン: d0.w: ?
FUNC$15 EXMODE
パラメータ: d1.b: ?
リターン: d0.b: ?
FUNC$16 TRACEMODE 使用禁止!
パラメータ: d1.b: ?
リターン: d0.b: ?
FUNC$17 TRACESTEP 使用禁止!
実際に1割り込み分演奏します。
FUNC$16で有効にしておいて下さい。
FUNC$18 PCM4WORKS
リータン: d0.l: ワークアドレス
FUNC$19 EXCHWORKS
リータン: d0.l: ワークアドレス
FUNC$1A~$FF reserved
4. MXDRV V2.06+13 追加ファンクション (以下さとやんによる分析結果)
FUNC$0E CHANNEL_MASK チャンネルをマスクします。
パラメータ:
d1.l : チャンネル指定
P HGFE DCBA
move.l #%0000_0000_0000_0000,d1 マスク部を1にする。
FUNC$0C FADE-OUT フェードアウトします。
(その他不明)
5.特別付録
MMLバッファへの転送するさい先頭に付加情報が必要です。データは8バイトいります。
まず、$0000、PCMを使用しない場合は$FFFF、次に音色データオフセットまでのバイト数。
(付加情報の先頭からの物 .W)
この値は偶数でなければならないので奇数ならデータを丸ごとずらします。
そして$0008を書き込みます。
転送サイズも8バイト増えます。
次ぎにPCMバッファ転送のさいの付加情報。
まず、$00000000、次ぎにデータまでのバイト数、$0008です。
(MML同様に偶数。PDXファイル名の次ぎまでの値)
そして、PDXファイル名の転送です。
あと、MMLバッファ先頭アドレスから約-$40からMML,PCMバッファのバイト数、
PCMバッファ先頭アドレス、PCMデータ使用アドレスなどが書かれている。
(正確には分からない)
}
----
(1)MXDRV現役の頃にYURAYSAN氏により書かれたドキュメントです。調査・資料化に感謝いたします。
----
#asciiart(){
*
* MXDRV v2.06+16/02EX 内部資料 修正/追加 by YURAYSAN
*
パラメータのbは1バイト、wは2バイト(上位,下位の順)、lは4バイト。
1.MDXデータフォーマット
[データタイトル](サイズ不定) + $0D + $0A + $1A
[PCMファイル名](サイズ不定) + $00
[音色データオフセット](word)
[MMLデータオフセット * 9](word)
音色データ及びMMLデータのベースポインタは音色データオフセットのポインタ。
1.1 音色データフォーマット
以下、データはすべてバイト単位。各パラメータはM1,M2,C1,C2の順。
0:[音色番号]
3:[DT1 & MUL]×4
4:[TL]×4
5:[KS & AR]×4
6:[AME & D1R]×4
7:[DT2 & D2R]×4
8:[D1L & RR]×4
1:[FL & CON]
2:[スロットマスク]
未使用ビットは0とする。また、[FL & CON]のビット6,7は0とする。
注意:実際には番号順に変換される
1.2 MMLデータフォーマット
・休符データ
[$00 ~ $7F] 長さはデータ値+1クロック。
・音符データ
[$80 ~ $DF] + [長さ-1]b 音程は$80がo0d+、$DFがo8d。ChPではデータ番号。
・テンポ設定
[$FF] + [???]b @tコマンド対応
・OPMレジスタ設定
[$FE] + [レジスタ番号]b + [出力データ]b
・音色設定
[$FD] + [???]b @コマンド対応
・出力位相設定
[$FC] + [???]b pコマンド対応
・音量設定
[$FB] + [$00~$15]b vコマンド対応
[$FB] + [$80~$FF]b @vコマンド対応(ビット7無効)
・音量増大
[$FA]
・音量減小
[$F9]
・発音長指定
[$F8] + [$01~$08]b qコマンド対応
[$F8] + [$FF~$80]b @qコマンド対応(2の補数)
・キーオフ無効
[$F7] 次のNOTE発音後キーオフしない
・リピート開始
[$F6] + [リピート回数]b + [$00]b
・リピート終端
[$F5] + [開始コマンドへのオフセット+2]w
・リピート脱出
[$F4] + [終端コマンドへのオフセット+1]w
・デチューン
[$F3] + [???]w Dコマンド対応
・ポルタメント
[$F2] + [変移※1]w
変移 = 1クロックあたりの変化量
・データエンド
[$F1] + [$00]b 演奏終了
[$F1] + [ループポインタ]w ポインタ位置から再演奏
・キーオンディレイ
[$F0] + [???]b kコマンド対応
・同期信号送出
[$EF] + [チャネル番号(0~8)]b
・同期信号待機
[$EE]
・ADPCM/ノイズ周波数設定
チャンネルH
[$ED] + [???]b ノイズ周波数設定。ビット7はノイズON/OFF
ON : 128+周波数
OFF : 0
チャンネルP
[$ED] + [???]b Fコマンド対応
・音程LFO制御
[$EC] + [$80]b MPON
[$EC] + [$81]b MPOF
[$EC] + [WAVE]b + [周期※2]w + [変移※1]w
WAVE0 [ 鋸波 ] : 周期 = 設定値×4 : 変移 = 設定値×周期÷512
WAVE1 [矩形波] : 周期 = 設定値×2 : 変移 = 設定値×256
WAVE2 [三角波] : 周期 = 設定値×2 : 変移 = 設定値×周期÷512
・音量LFO制御
[$EB] + [$80]b MAON
[$EB] + [$81]b MAOF
[$EB] + [WAVE]b + [周期※2]w + [変移※1]w
WAVE0 [ 鋸波 ] : 周期 = 設定値×4 : 変移 = 設定値×周期÷256
WAVE1 [矩形波] : 周期 = 設定値×2 : 変移 = 設定値×256
WAVE2 [三角波] : 周期 = 設定値×2 : 変移 = 設定値×周期÷256
・OPMLFO制御
[$EA] + [$80]b MHON
[$EA] + [$81]b MHOF
[$EA] + [SYNC]b + [WAVE]b + [LFRQ]b + [PMD]b + [AMD]b + [PMS/AMS]b
[SYNC*$40+WAVE]b + [LFRQ]b + [PMD+128]b + [AMD]b + [PMS/AMS}b
・LFOディレイ設定
[$E9] + [???]b MDコマンド対応
・PCM4/8使用宣言
[$E8]
・拡張MMLコマンド
[$E7] + [拡張コマンド]b
+16での拡張
[$00]b ERROR=強制終了
[$01]b + [SPEED]b FADEOUT
+17での拡張
[$02]b + [d0.w] + [d1.l] PCM8を直接ドライブする
[$03]b + [FLAG]b $00=KEYOFFする/$01=KEYOFFしない
[$04]b + [CH]b + [MML]? 他のチャンネルをコントロール
[$05]b + [DATA]b 音長加算する
[$06]b + [FLAG]b まだフラグを使用してない?
・拡張MMLコマンド2 (非公式コマンド)+162EXのみ
[$E6] + [拡張コマンド]b
[$00]b ERROR = 強制終了
[$01]b + [DETUNE]w 相対ディチューン (-32768~32768)
[$02]b + [KEY TRANS]b 移調 (-127~127)
[$03]b + [KEY TRANS]b 相対移調 (-127~127)
※1 変移 1クロック毎に変化させる量。単位はデチューンの1/256。
※2 周期 WAVE = 0 : 1周期のクロック数
WAVE = 1 : 1/2周期のクロック数
WAVE = 2 : 〃
2.PDXデータフォーマット
[ポインタ]l + [$0000]w + [長さ]w ×96
[PCMデータ]
EX-PDXの場合は長さもロングワードとして使える。
3.MXDRV V2.05 ファンクションコール
レジスタにパラメータをセットしてtrap #4を実行。d0はファンクション番号。
リターンd0が正値は正常終了、負数はエラーコード。d0以外は保存。
FUNC$00 UNLINK 演奏を終了して、MXDRVを切り放します
FUNC$01 reserved
FUNC$02 LOADMML MMLデータバッファにデータを転送します
パラメータ: d1.l: データサイズ
a1.l: データアドレス
エラーコードはバッファサイズ+$80000000
FUNC$03 LOADPCM PCMデータバッファにデータを転送します
パラメータ: d1.l: データサイズ
a1.l: データアドレス
エラーコードはバッファサイズ+$80000000
FUNC$04 M_PLAY 演奏を開始します
パラメータ: d1.l: MML番号(現在は無効)
FUNC$05 M_END 演奏を終了します
FUNC$06 M_STOP 演奏を停止します
FUNC$07 M_CONT 演奏を再開します
FUNC$08 MMLNAME MMLデータのタイトルを参照します
パラメータ: d1.l: データ番号(0でいいV2.06)
リターン: d0.l: MMLタイトルのアドレス
FUNC$09 PCMNAME PCMデータ名を参照します
パラメータ: d1.l: データ番号(0でいいV2.06)
リターン: d0.l: PCMデータ名のアドレス
FUNC$0A VOLADD volume加算???
パラメータ: d1.b: volume add data
FUNC$0B PCMCUT ???
パラメータ: d1.b:
FUNC$0C FADEOUT フェードアウト
パラメータ: d1.w: フェードアウトスピード
FUNC$0D AMPLAY AUTO MUSIC PLAYER
パラメータ: d1.b: コマンド(bit15がonで切り放し)
a2.l: ?
a1.l: ?
FUNC$0E CHMASK チャンネルのマスク
パラメータ: d1.w: 各チャンネルのフラグ
<ex> WVUT SRQP HGFE DCBA
move.l #%0000_0000_0000_0000,d1 マスク部を1にする。
FUNC$0F M_PLAY2 チャンネルマスク指定して演奏
パラメータ: d1.w: 各チャンネルのフラグ
FUNC$10 WORKS IMAGE REG の アドレス を 求める
リターン: d0.l: アドレス
FUNC$11 TIMSET
パラメーター: d1.l: 正で書き込み、負で読み出し
リターン: d0.b: tempo
FUNC$12 M_STAT
リターン: d0.w: ?
FUNC$13 KEYBCONT
パラメーター: d1.b: flag
リターン: d0.b: 前回値
FUNC$14 M_STAT2
リターン: d0.w: ?
FUNC$15 EXMODE
パラメータ: d1.b: ?
リターン: d0.b: ?
FUNC$16 TRACEMODE 使用禁止!
パラメータ: d1.b: ?
リターン: d0.b: ?
FUNC$17 TRACESTEP 使用禁止!
実際に1割り込み分演奏します。
FUNC$16で有効にしておいて下さい。
FUNC$18 PCM4WORKS
リータン: d0.l: ワークアドレス
FUNC$19 EXCHWORKS
リータン: d0.l: ワークアドレス
FUNC$1A~$FF reserved
4. MXDRV V2.06+13 追加ファンクション (以下さとやんによる分析結果)
FUNC$0E CHANNEL_MASK チャンネルをマスクします。
パラメータ:
d1.l : チャンネル指定
P HGFE DCBA
move.l #%0000_0000_0000_0000,d1 マスク部を1にする。
FUNC$0C FADE-OUT フェードアウトします。
(その他不明)
5.特別付録
MMLバッファへの転送するさい先頭に付加情報が必要です。データは8バイトいります。
まず、$0000、PCMを使用しない場合は$FFFF、次に音色データオフセットまでのバイト数。
(付加情報の先頭からの物 .W)
この値は偶数でなければならないので奇数ならデータを丸ごとずらします。
そして$0008を書き込みます。
転送サイズも8バイト増えます。
次ぎにPCMバッファ転送のさいの付加情報。
まず、$00000000、次ぎにデータまでのバイト数、$0008です。
(MML同様に偶数。PDXファイル名の次ぎまでの値)
そして、PDXファイル名の転送です。
あと、MMLバッファ先頭アドレスから約-$40からMML,PCMバッファのバイト数、
PCMバッファ先頭アドレス、PCMデータ使用アドレスなどが書かれている。
(正確には分からない)
}
----
(2)mdxファイル・コマンドフォーマット一覧表
----
・mdxファイル構造
|offset|内容|サイズ|備考|
|$0000|title|不定|終端は $0d $0a $1a|
|- - -|PDX FileName|不定|終端は $00|
|($0000)|BASE POINT||PDXファイル名の直後を新たに始点とする。&br()以後BASE POINTからのoffset|
|($0000)|TONE data offset|2|音色データへのオフセット(big endian)|
|($0002)|Ch.A offset|2|channel.Aのmmlへのオフセット(big endian)|
|($0004)|Ch.B offset|2|channel.Aのmmlへのオフセット(big endian)|
|($0006)|Ch.C offset|2|channel.Aのmmlへのオフセット(big endian)|
|($0008)|Ch.D offset|2|channel.Aのmmlへのオフセット(big endian)|
|($000A)|Ch.E offset|2|channel.Aのmmlへのオフセット(big endian)|
|($000C)|Ch.F offset|2|channel.Aのmmlへのオフセット(big endian)|
|($000E)|Ch.G offset|2|channel.Aのmmlへのオフセット(big endian)|
|($0010)|Ch.H offset|2|channel.Aのmmlへのオフセット(big endian)|
|($0012)|Ch.P offset|2|channel.Aのmmlへのオフセット(big endian)|
|>|>|>| |
|($0014)|Ch.Q offset|2|channel.Aのmmlへのオフセット(big endian)|
|($0016)|Ch.R offset|2|channel.Aのmmlへのオフセット(big endian)|
|($0018)|Ch.S offset|2|channel.Aのmmlへのオフセット(big endian)|
|($001A)|Ch.T offset|2|channel.Aのmmlへのオフセット(big endian)|
|($001C)|Ch.U offset|2|channel.Aのmmlへのオフセット(big endian)|
|($001E)|Ch.V offset|2|channel.Aのmmlへのオフセット(big endian)|
|($0020)|Ch.W offset|2|channel.Aのmmlへのオフセット(big endian)|
|>|>|>| |
|>|>|>|Ch.Q - W のオフセットは EX-PCMモードの時に設けられる|
・mmlバイナリフォーマット
|binary|mml表記|備考|
|$00&br():&br()$7f|r%1&br():&br()r%128|休符&br()&br()&br()|
|$80 %1&br():&br()$df %1|o0d+%(%1 + 1)&br():&br()o8d%(%1 + 1)|音符&br()&br()%1 = $ff のとき、音長は256clock|
|$e0&br():&br()$e6||未定義&br()&br()&br()|
|$e7||拡張コマンド定義。続く1バイトでコマンド確定|
|$e7 $01 %1|$FO%1|フェードアウト|
|$e8||#EX-PCMモードの宣言|
|>|>|編集中・・・|