MXDRVデータ資料

「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モードの宣言| |>|>|編集中・・・|

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。