NSDL(NES Sound Driver Library)

MML文法

全体の構文(MML Construction)

MMLの全体的な構文は、`#'で始まる定義&疑似命令及び、 データ(エンベロープパターン、シーケンスデータ)を記述する記述ブロックで構成されます。
MMLコンパイラは、ASCIIコード0x00〜0x20(改行、TAB、スペース等)を無視します。

定義命令の多くは、NSFへビルドする際にNSFヘッダーに設定されます。

共通のコマンド
CommandContens
#include "filename" 外部ファイルを呼び込みます。
#octaveReverse 本コマンドを記述することで、相対オクターブの`<'と`>'を入れ替えます。
#offsetE@ n E@コマンドの引数を指定数値だけずらします。(Default: n = 0)
#offsetEv n Evコマンドの引数を指定数値だけずらします。(Default: n = 0)
#offsetEm n Emコマンドの引数を指定数値だけずらします。(Default: n = 0)
#offsetEn n Enコマンドの引数を指定数値だけずらします。(Default: n = 0)
#bgm n BGMの曲数を設定します。(Default: n = 1)
#se n SE の曲数を設定します。(Default: n = 0)
#offsetPCM address 儕CMを配置するアドレスを指定します。(Default: $10000(儕CM無し))
シーケンスデータはこのコマンドで指定したアドレス-1の領域まで使えます。
NSF music formatでは、このアドレスからΔPCMを配置します。
アセンブリ言語ソースを出力する場合は、"#segmentPCM"コマンドで指定したセグメントについて リンカー"ld65.exe"のコンフィグファイルにて設定した実アドレス指定して下さい。
DPCM{
Delta PCM define
}
儕CM定義の記述ブロックです。
儕CM定義の記述は、儕CM定義(Delta PCM define)の項を参照ください。
FDSC(n){
wave table
}
FDSのキャリア側の波形データ定義の記述ブロックです。
FDSのキャリア側の波形定義の記述は、FDSキャリア波形定義(FDS career wave table)の項を参照ください。
FDSM(n){
wave table
}
FDSのモジュレータ側の波形データ定義の記述ブロックです。
FDSのモジュレータ側の波形定義の記述は、FDSモジュレータ波形定義(FDS modulator wave table)の項を参照ください。
VRC7(n){
VRC7 define
}
VRC7ユーザー音色定義の記述ブロックです。
VRC7ユーザー音色定義の記述は、VRC7 ユーザー音色定義(VRC7 User Instrument define)の項を参照ください。
N163(n){
wave table
}
n163の音色波形定義の記述ブロックです。
n163音色波形定義の記述は、n163音色波形定義(N163 sample wave block)の項を参照ください。
Envelop(n){
Envelop data
}
n番のエンベロープパターン定義の記述ブロックです。
エンベロープパターンの記述は、エンベロープパターン(Envelop pattern)の項を参照ください。
Sub(n){
Sequence data
}
n番のサブルーチンの記述ブロックです。
シーケンスパターンの記述は、シーケンスデータ(Sequence data)の項を参照ください。
BGM(n){
Sequence data
}
n番目のBGMのシーケンスの記述ブロックです。
シーケンスパターンの記述は、シーケンスデータ(Sequence data)の項を参照ください。
番号は0からカウントします。
SE(n){
Sequence data
}
n番目のSE のシーケンスの記述ブロックです。
シーケンスパターンの記述は、シーケンスデータ(Sequence data)の項を参照ください。
番号は0からカウントします。
$name{
Sequence data
}
シーケンス用のマクロ定義です。(未実装)
;comments 1行コメントです。改行までの記述を無視します。
(各記述ブロック内でも有効です)
//comments 1行コメントです。改行までの記述を無視します。
(各記述ブロック内でも有効です)
/*comments*/ 範囲コメントです。 /* と */ の間の記述を無視します。
(各記述ブロック内でも有効です)

NSF music formatを出力する際に有効なコマンド
CommandContens
#code "name" リンクするNSF用のROMコードを指定します。(Default: name = `nsd.bin')
コンパイルオプション`-l'でROMコードの指定がある場合は、コンパイルオプションを優先します。
#title "strings" タイトル名を設定します。NSFビルド時にヘッダーに埋め込まれます。
#composer "strings" 作曲者を設定します。NSFビルド時にヘッダーに埋め込まれます。
#copyright "strings" 著作権者を設定します。NSFビルド時にヘッダーに埋め込まれます。

アセンブリ言語ソースを出力する際に有効なコマンド
CommandContens
#segment "name"
#segmentSEQ "name"
儕CM以外のセグメントを指定します。(Default: name = `RODATA')
#segmentPCM "name" 儕CMのセグメントを指定します。(Default: name = `PCMDATA')
#label "name" ラベル名(シンボル名)の先頭に付与する文字列を指定します。(Default: name = `_nsd_')
Cコンパイラは、C言語で記述されたラベル(シンボル)名の先頭に`_'を付加します。
従い、C言語から曲データを参照する場合、MML側で設定するラベル名は先頭に`_'を追加してください。