2024年03月25日
【ツール制作】MMLコンパイラ(通常版) 第4回
MMLコンパイラ(通常版) 第4回です。
「MMLコンパイラ(通常版)」と「BGM演奏ルーチン(通常版)」のバージョンアップ順調に進んでいます。
今回追加した機能「T」、「V」、「(」、「)」、「S」、「M」、「Z」に対応しました。
「T」、「(」「)」はBASIC部のみでの対応です。
ついでに、今まで1チャンネル分のルーチンが小さかったこともあり、A、B、C、3チャンネル分そのままルーチンを組み込んでいましたが、機能追加で1チャンネル分が大きくなることから、1つのルーチンを3チャンネル分ループさせることにします。
因みにこちらが、今までの「BGM演奏ルーチン」3チャンネル分。
1チャンネル分のルーチンが小さいですが、音を鳴らすだけならこれで十分でした。
「MMLコンパイラ(通常版)」BASIC部。
「簡易MMLコンパイラ」への追加分です。
まずは機能追加した各コマンド「M」(エンベロープ周期)、「S」(エンベロープ波形)、「Z」(ノイズ)、「V」(ボリューム)対応です。
次は「T」(テンポ)対応。
最後に「テンポずれ」しないテンポへの強制変更をしています。(790行〜)
1分間の走査線割り込み発生回数3,600から、テンポを割って求めます。
「付点音符」も4段まで可能とします。
小数点以下を足していき、繰り上がったところで音長に「1」加えます。
テンポへの強制変更データ設定。
A・B・Cチャンネル3チャンネル分ループします。
コンパイル終了後、演奏開始します。
「BGM演奏ルーチン(通常版)」マシン語部。
まずはいつもの走査線割り込み処理。
次に曲を切り替えるための選曲処理。
そして、3チャンネル分ループするよう改良したロジック。
上にある今までの「BGM演奏ルーチン」と比べれば、長くなったのが一目瞭然。
コメントのある場所で、それぞれのコマンドの処理をしています。
最後の音階をPSGに送るとき(680行〜)、同時にボリュームとエンベロープ波形も送ることでエンベロープ対応にしています。
このルーチンならノイズもエンベロープもBGMデータから設定できるので、効果音も自由に鳴らせます。
最後、BGMデータの開始アドレスを格納するワークエリアです。
では、次回公開します。