CPU実験室

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

VGMデータ再生

今年最初のCPUボード動かし初め、何をやろうかと考えていたのですが新年なので歌舞音曲の類が良かろうということでFM音源チップが載っているV50ボードを奥から引っ張り出してきました。

f:id:O3I:20210112221649j:plain

すでにYM2151のレジスタ直叩きで波形が出ること、簡単なMML文字列から楽音が鳴らせることは確認していますがまともに曲を再生するまでには至っていません。当初はMIDIから制御することを考えていたのですが単にデモ的に自動演奏するならばVGM(Video Game Music) データを再生することが手っ取り早いことがわかりました。

VGMフォーマットというのは楽音を鳴らしている音源ICへのコマンドをICの直前でログをとったようなもので、付加された時間情報に従って順番にICにコマンドを書き込めばそのまま楽曲が再生されるというもので、処理は簡単そうです。

 

 まず楽曲の進行の元になるクロックを決定します。VGMの基準クロックはBPMではなく44.1kHz固定となっています。これはVGMが音源ICと一緒にD/Aコンバータも制御してPCM音も再生できるためそのサンプリングクロックに合わせているようです。

システム全体で参照できるカウンタを44.1kHzでインクリメントすればよいのですが、ハードのカウンタは16ビット幅しかないのでタイムアウト割込みで32ビット幅変数cntをカウントアップさせています。ただ割込みのオーバーヘッドがあるのでさすがに44.1kHzの割込みは無理なので、その32分の1、1.378kHzでカウントアップさせました。

 

f:id:O3I:20210112204754j:plain