アットウィキロゴ

MXDRVデータ資料

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

タグ:

+ タグ編集
  • タグ:
最終更新:2011年02月02日 21:44
ツールボックス

下から選んでください:

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