CPU実験室

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

VGMデータ再生(4)

演奏用のデータファイルの入手ですが”VGM”、”Archive”とかで検索するとゲーム音楽まとめサイトが見つかります。ただ許諾関係が明らかでないので、ここではやってみた・・だけにしておきます。音源としてYM2151のみを使用している曲を選びダウンロードしますがアップされているファイルは”.vgz”という拡張子になっていて圧縮されているようです。これはunzipで解凍できます。

VGMファイルは単発の効果音のような1秒程度のものからオープニングテーマのような1分以上演奏される100kbyteを超えるものまでいろいろあります。

 

まず電源ONでモニタが起動したらVGMプレーヤのプログラム本体を0x2000番地からロードし実行。VGMプレーヤのコマンド待ち状態”]”になったらVGMロードコマンド「L」を実行してターミナルからVGMデータをバイナリモードで0x8000番地へファイル転送します。

f:id:O3I:20210117225119j:plain

 ここでは77296byteのファイル転送していますが、64kbyteを超えるサイズもちゃんとロードできていることがわかります。メモリ上に転送が終わったら、まず先頭4バイトの識別子が”Vgm ”(0x56,0x67,0x6D,0x20)になっていることを確認してからヘッダに含まれるいくつかの情報を表示させています。プロンプトに戻ったらplayコマンド「P」で演奏開始します。

VGMファイルには音源ICにセットされる音色パラメータ(MIDIでいうところのエクスクルーシブデータ)も含まれているため作成者が意図した音色で鳴っていると思われます。8音ポリという限られた資源の中でドラム・ベース・バッキング・リードと良くアレンジされていて感心します。もっとも自分はゲームには全く関心が無く、所謂ゲーセンに行ったことも、家庭用ゲーム機で遊んだこともないので原曲聞いたこともないし、どの程度再現されてるかもわかりません。

 

実行中の状態

f:id:O3I:20210117225837j:plain

 クロックのレゾリューションの問題ですが、いっぺんに大量の音が鳴ったり、曲の途中で音色の入れ替えが行われてそうなところでテンポがもたつく感が多少あります。処理間のインターバルをタイマ計測しているので遅れながらも処理は順次行われ、誤差は累積していく方向です