MMLの全体的な構文は、`#'で始まる定義&疑似命令及び、
データ(エンベロープパターン、シーケンスデータ)を記述する記述ブロックで構成されます。
MMLコンパイラは、ASCIIコード0x00〜0x20(改行、TAB、スペース等)を無視します。
曲や効果音の設定・記述をするためのコマンド群です。
Command | Contens |
---|---|
#include "filename" | 外部ファイルを呼び込みます。 |
#bgm n | BGMの曲数を設定します。(Default: n = 1) |
#se n | SE の曲数を設定します。(Default: n = 0) |
#timebase n | 以降のBGM, SE, Subブロックの四分音符の分割数を設定します。(Default: n = 24) 何度でも指定可能であり、各BGM, SE, サブルーチン毎に設定することもできます。 MMLコンパイラの疑似命令です。 |
#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) |
#offsetPCM address | 儕CMを配置するアドレスを指定します。(Default: address = $10000(儕CM無し)) シーケンスデータはこのコマンドで指定したアドレス-1の領域まで使えます。 NSF music formatを出力する場合は、このアドレスよりΔPCMの実体が配置されます。 アセンブリ言語ソースを出力する場合は、リンカー"ld65.exe"のコンフィグファイルにて、 "#segmentPCM"コマンドで指定したセグメントの配置アドレスと、同じアドレスに設定して下さい。 |
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のモジュレータ側(LFO)の波形データ定義の記述ブロックです。 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 } | シーケンス用のマクロ定義です。 nameは、`$'から、キャラクターコード0x00〜0x20の文字か`{'が来るまでをマクロ名として認識します。 |
;comments | 1行コメントです。改行までの記述を無視します。 (各記述ブロック内でも有効です) |
//comments | 1行コメントです。改行までの記述を無視します。 (各記述ブロック内でも有効です) |
/*comments*/ | 範囲コメントです。 /* と */ の間の記述を無視します。 (各記述ブロック内でも有効です) |
NSF music format用の設定コマンドです。
多くのコマンドは、NSFへビルドする際に、NSFヘッダーに設定されます。
Command | Contens |
---|---|
#title "strings" | タイトル名を設定します。NSFビルド時にヘッダーに埋め込まれます。 |
#composer "strings" | 作曲者を設定します。NSFビルド時にヘッダーに埋め込まれます。 |
#copyright "strings" | 著作権者を設定します。NSFビルド時にヘッダーに埋め込まれます。 |
#code "name" | リンクするNSF用のROMコードを指定します。(Default: name = `nsd.bin') コンパイルオプション`-l'でROMコードの指定がある場合は、コンパイルオプションを優先します。 各ROMコードの詳細は、各.lib/.binの仕様を参照ねがいます。 |
#External n | NSFのヘッダーに設定する拡張音源フラグを、この値に書き換えます(初期値は各.binで異なります)。 |
#Bank | 儕CMのバンク切り替えに対応した.bin(nsd_all.bin, nsd_all2.bin)をリンクする場合に、各コマンドを記述する前に必ず指定してください。 |
アセンブリ言語ソースにて出力する際の設定コマンドです。
主に、6502開発環境"cc65"に付属の、アセンブラ"ca65.exe"用の疑似命令の出力を制御します。
ユーザー・アプリケーションに組み込む場合に、設定して下さい。
Command | Contens |
---|---|
#segment "name" #segmentSEQ "name" |
曲、効果音、エンベロープ、音色データ等(儕CM以外)を配置するセグメント名を指定します。(Default: name = `RODATA') これらのデータは、アセンブリ言語ソースにて、『.segment "name"』とセグメント名が指定されます。 複数のMMLファイルから生成したアセンブリ言語ソースを、同一のファイルにリンクする場合、 異なるセグメント名("ld65.exe"のコンフィグファイルにて異なるバンクマッピングされた)に設定することで、 バンク(32kByteを超える容量)に対応したNESファイルはもちろん、NSFを生成する事も可能です。 |
#segmentPCM "name" | 儕CMの実体を配置するセグメント名を指定します。(Default: name = `PCMDATA') 儕CMの実体を出力する際は、アセンブリ言語ソースにて、『.segment "name"』とセグメント名が指定されます。 このセグメントは、リンカー"ld65.exe"のコンフィグファイルにて、 #offsetPCMコマンドで設定したアドレスと、同じアドレスに設定して下さい。 名前を""(何も無し)に設定した場合は、儕CMの実体をアセンブリ言語ソースへ出力しません。 これは、同一の儕CMを使用する複数のMMLファイルから生成したアセンブリ言語ソースを、 同一のファイルにリンクする場合において、どれか1つのMMLのみ、儕CMの実体を出力すればよいためです。 |
#label "name" | ラベル名(シンボル名)の先頭に付与する文字列を指定します。(Default: name = `_nsd_') Cコンパイラは、C言語で記述されたラベル(シンボル)名の先頭に`_'を付加します。 従い、C言語から曲データを参照する場合、MML側で設定するラベル名は先頭に`_'を追加してください。 複数のMMLファイルから生成したアセンブリ言語ソースを、同一のファイルにリンクする場合は、 必ず、各MMLファイル中で異なるラベル名を設定して下さい。 |
複数のMMLから変換したアセンブリ言語ソースを、同一のプロジェクト・ファイルにリンクしてビルドする場合でも、
エンベロープ定義、音色定義、凾oCMの定義は、各MMLファイル毎に設定して下さい(異なる設定も可能です)。
曲・効果音は、以下の手順で再生して下さい。
データの再生中は、シーケンスデータが常時6502のメモリ空間に存在している必要はありません。
nsd_main()関数を呼び出す際に、
6502のメモリ空間に再生するデータがあるバンクをマッピングし、
呼び出した後はバンクを切り替えても問題ありません。
但し、儕CMを使用する場合は、儕CMの実体が存在するバンクは常時6502のメモリ空間にマッピングして下さい。
0〜9で始まる数値は、10進数とみなします。
$で始まる数値は、16進数とみなします。
%で始まる数値は、2進数とみなします。