MXDRVデータ資料

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

(1)MXDRV現役の頃にYURAYSAN氏により書かれたドキュメントです。調査・資料化に感謝いたします。


*
* 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ファイル名の直後を新たに始点とする。
以後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

$7f
r%1

r%128
休符


$80 %1

$df %1
o0d+%(%1 + 1)

o8d%(%1 + 1)
音符

%1 = $ff のとき、音長は256clock
$e0

$e6
未定義


$e7 拡張コマンド定義。続く1バイトでコマンド確定
$e7 $01 %1 $FO%1 フェードアウト
$e8 #EX-PCMモードの宣言
編集中・・・
ツールボックス

下から選んでください:

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