CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

MML処理追加

FM音源ICに対して音程を指定して発音させるドライバはできましたが既存の楽譜データから鳴らすのは結構大変です。
MIDIメッセージで直接制御したりスタンダードMIDIファイルが読み込めるのが目標ですが、その前段階としてMML(ミュージックマクロランゲージ)で演奏してみます
昔、8ビットパソコンのBASICにもMUSIC文とかPLAY文として実装されていて処理は容易そうです。
 
ただここは楽して
http://www.cubeatsystems.com/firmware/tinymml/ で公開されているタイニーMMLパーサ(解析ルーチン)を使わさせてもらいました。ソースコードは全く修正なしでLSIC-86でコンパイルできました。
MMLの文字列を先頭から解釈していきコールバック関数を呼び出すというインターフェースでコールバック関数の中でイベントごとに分岐し、それぞれに相当する音源制御をしてやれば良いことになります
 
例えば「L8O3CDEFGAB>C」という文字列を渡すと以下のようにイベントに分解されます
 
イメージ 1
 
NOTEイベントが来たら、渡されたNOTEナンバーの音程でTicks期間だけOPMを鳴らせばOKです