PICでSSG音源を(YMZ294)

ファミコン時代の懐かしい音を再現すべくいろいろ画策しているのだが、ソフト音源ではなくMIDIを使用したハードウエア音源をつくりたい!ということで秘蔵していたYMZ294を動かしてみることにした。

MIDIメッセージの解析と音源チップの制御はPIC16F690で行い、とりあえず2個のYMZ294で6音ポリの音源にしてみた。

回路図がこれ。

F690などの20ピンPICは、8ビットまとめてポートを使うときに18ピンのPICより都合がよい。日本では未だに18ピンの使用例をよく見かけるけど、重要機能がポートBに割り当てられているので使いにくい。一刻も早くF84の呪縛から解けることをおすすめする。

それはさておき、これをとりあえず仮組み立てと言うことでブレッドボードに組んでみたのがこれ。

とりあえず実験用にアンプとスピーカを実装してある。MIDI Outは実装していない。

プログラムはC言語で組み、20年前にMIDIソフトを作っていた頃のMIDI解析ルーチンをPICに移植した。

MIDI解析は割り込みで受け取ったデータをMIDIイベントリングバッファに入れ、メインループで取り出しながらNote Onの処理を行っている。和音の処理は後発優先で、6音鳴っているときに新しい音が来たら古い音から消えてゆく。2つの音源チップへの割り振りは特に優先順位など無く、6音分の1チップと同じように処理している。この方式により、チップを増やせばPICの処理が追いつく限り簡単に増やせる。あまり意味は無いと思うが・・・。なにせ、音数が少なかった頃の音を再現するのだから、1音1音大事に使うことがデフォルトなので、むしろ同時発音数を下げてスロット毎に音色など細かくコントロールした方が良いと思う。

現時点のソフトではNote On/Offの処理しかしていない。スロット毎にMIDIチャンネルを分けてチップ特有のコントロールをするようにするのが良いと思う。どのコントロールコードに何を割り当てるかがミソだけどw、良いアイデアを考案中。

ということで、SSG690 Ver.0.91のバイナリがこれ。

mid690.hex(拡張子がdocになっているのでhexに変えて保存してください)

しかし、これ需要あるのか?

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。