オレ仕様のゲーム機を作ろう(その25)
前回は「スプライト基板」3枚を作って,大きさ可変,160 枚同時表示できるスプライト機能を実装しました。
オレ仕様のゲーム機を作ろう(その24)
なんか,それから2ヶ月以上経ってしまいましたが,今回は,サウンド周りの基板を作りたいと思います。
この基板の追加で,オレ仕様のゲーム機「鶏八」(ToriHachi)は完成となる予定です。
サウンド機能の仕様
当初の予定では,ヤマハ製 FM 音源の YM2151 と,モノラルの PCM 音源を 2チャンネル搭載…と言った感じでした。
これらは予定通り搭載しますが,加えて,スピーチシンセサイザ(?)と言われる ADPCM の LSI チップを搭載することにしました。
FM 音源であるヤマハ製の YM2151(通称 OPM)は,いろいろなアーケードゲームにも搭載されていましたし,X68000 や X1turboZ,MSX の音源カートリッジでも有名なので,このサイトをご覧になっている皆さん(笑)なら,ご存知だと思います。
4 オペレータ,8 チャンネルステレオ…云々は,ウィキペディア に詳しく書いてありますので,詳細は省略します(笑)。
アナログ音声信号を直接出力していないので,加えて専用の DAC であるYM3012 が必要になります。(別に YM3012 以外でも,信号を変換できれば音は出ると思います)
モノラルの PCM 音源は,リニア PCM を ROM から再生する回路をロジック ICの組み合わせで 2 チャンネル分作ってみました。
ADPCM 音源は,NEC の UPD7759 というチップを使ってみました。これを搭載したアーケードゲームも結構あり,音声の再生とかに使われていたような気がします。
作成した基板
今回は,2 枚の基板から構成されています。
まずは,「リニア PCM 基板」です。
74 ロジック IC と ROM で構成されています。
回路は意外と単純で,ROM に入っている波形データを,クロックを入れたカウンタの組み合わせで一定タイミングで順次拾ってきて再生しています。(いわゆる垂れ流し再生です)
リニア PCM なので,ROM に入っているベタの波形データをそのまま再生します。
再生周波数をレジスタに設定できるようにしてあるので,周波数を変更すると,ROM からデータを取り出すタイミングを変更し,音階をつけて再生することができるので,音楽の再生もできます。
周波数に加えて,内部ボリュームレジスタにも CPU から音量を設定できるようにしてあります。
それとは別に,物理的に各チャンネルにボリュームつまみを付けたので,チャンネルごとに独立して音量調整ができるようにしました。(…と言っても,FM 音源との音量バランス用で,一度ボリュームを決めたら,その後は,いじらないと思います)
次は,「サウンド基板」です。
サウンドを制御する 3 つめの 「Z80」がサウンド CPU として搭載されています。
このサウンド CPU を含めて,全体で,Z80 が 3 つ搭載されているので,「鶏八」(ToriHachi)と言うんですね(笑)。
回路としては,他に YM2151 と,UPD7759 が載っていて,手前部分のアナログ回路で,上記の「リニア PCM基板」からの信号もあわせて音声信号をミックス&フィルタリングして,外部にアナログ音声として出力します。
ボリュームつまみが 2 つありますが,ミックスした音声の左右出力それぞれの音量調整ができるようにしました。…が,基板上のボリュームつまみの右と左の位置を間違えてしまいました(笑)。
外部からの制御としては,メイン CPU からサウンド CPU に対して割り込みを掛けることができ,また,8bit のレジスタにデータを書き込むことができます。このデータを受け取ってサウンドを再生します。よくあるやつですよね(笑)。
あとは,UART でホスト PC からプログラムを送信したりとか,NMI スイッチで,ノンマスカブル割り込みをかけられるのは,他の CPU 基板と同じです。
基板を接続してみる
基板を 2 枚追加したので,12 階建てになりました。
使用したロジック IC やメモリ,CPU,音源などの DIP 部品は,全部で 601 個になりました。
一つの平均を 50 円としても,DIP 部品だけで,3 万円以上になるんですね…。
かなり重いので持ち運びが大変です(笑)。
動作テストしてみる
今回,サウンド再生ができるようになったので,「固定 BG 画面」,「スクロール BG画面」,「スプライト画面」,「FM 音源」,「リニア PCM 音源」,「ADPCM 音源」,すべて使用したサンプルプログラムを作ってみました。
皆さんご存知,コナミのアーケードゲーム「グラディウス II ゴーファーの野望」のオープニングからゲームプレイに入るまでを,それっぽく作ってみました。
サンプルプログラムでは,「YM2151」 で,BGM 再生と効果音再生,「リニア PCM 2 チャンネル」で,主にドラムパート音再生,「スピーチシンセサイザ」で,「ですとろいぜもーる!」を再生しています。
また,「固定 BG 画面」は,文字の表示,「スクロール BG0」 は,主に背景表示,「スクロール BG1」 は,デモ画面の西暦年のマスク表示,「スプライト」は,デモ画面のビックバイパー,ロードブリティッシュ,,オプション,要塞,ゼロスフォースの表示,パワーメーターセレクト画面の表示に使っています。大きなスプライトも 1 枚のスプライトで表示しています。
「メイン CPU」 で全体の制御,「サブ CPU」 で画像データの VRAM への圧縮データ展開,「サウンド CPU」 で BGM と効果音の再生…と 3 つの Z80 CPU をフル稼働させてみたのですが,実は,この段階で,スプライトの表示にノイズが乗るようになってしまいました。
今までは,適当に都合の良いテストプログラムしか動かしていなかったので,気付かなかっただけかもしれませんね…。
このスプライト基板のノイズの調査にかなりの時間を取られ,サウンド基板が完成しているにも関わらず,全体の完成には至っていなかったのでした。
現段階で,なんとかノイズをごまかして表示はできていますが,結局,根本的な解決には至っていないので,これは,今後の課題とします。
今回のサンプルプログラム,実際のゲームプレイができないのが,残念ですが,今後,気が向いたときに続きが作れたらなぁ…と思います。…が,そう言うときは絶対にやらないですよね(笑)。
グラディウス II ゴーファーの野望
この「グラディウス II ゴーファーの野望」ですが,確か,大学生のときにゲームセンターで稼働した記憶があり,その後の自分の人生にとても影響を与えたゲームでもあります(ちょっと大げさですかね…?)
もちろん,シリーズ前作の「グラディウス」や「沙羅曼蛇」,後に出た「グラディウス III 伝説から神話へ」「グラディウス IV 復活」や「パロディウスだ!」も含め,アーケード版のシリーズすべて大好きなのですが,この「ゴーファーの野望」はとてもやり込んだ記憶があります。
家庭用版も,アーケード版と内容はさほど変わらないのに,サターン版や,X68000 版,STEAM 版,アーケードアーカイブス版など,出るたびに買っていました。
そして,こちらが,今回のサンプルプログラム作成の参考にした(笑),Nintendo Switch アーケードアーカイブス版の「グラディウス II ゴーファーの野望」です。
©Konami Digital Entertainment
そんな,自分の人生に影響を与えた(?)「ゴーファーの野望」ですが,意外と「それっぽく」再現できたような気がしているので,自分としては満足しています。
そして「鶏八」完成
さて,12 枚もある各基板にいろいろと修正は入っていますが,「オレのオレによるオレのためのゲーム機」そして,「オレの理想とする Z80 ゲーム機」を目指して作成した「鶏八」はこれでひとまず完成としたいと思います。
思えば,学生時代,X68000 が欲しくてたまらなかった自分は,セットで 50 万円近くする高級パソコンは買えなかったわけで,MSX TurboR を買い,次世代の MSX3 に期待していました。
結局,期待した MSX3 は,当時,世に出ませんでしたが,この「鶏八」の制作には,その時の「こんな Z80 コンピュータがあったらなぁ…」という思いが多少込められていたような気がしますし,X68000 のスペックはそれなりに意識して作ったような気がします(笑)。
当時の自分に,今くらいのスキルがあったらなぁ…とは思ったりしますが,「やっぱり,それなりに頑張って努力しないと,スキルって身につかないしなぁ」…とは,改めて思ったりします(笑)。
その X68000 はというと,社会人になってから,ようやく手に入れたのですが,その後,関連雑誌の Oh!X は休刊となり,そこから,純国産のパソコンは淘汰され,DOS/V の時代に入っていったのでした…。
X68000 を意識していたと言いつつ,実は,アーケード版「グラディウス II ゴーファーの野望」は,MC68000 が 2 つ,Z80 が 1 つ搭載されている,通称「Twin16」というアーケード基板です。ネーミングからおわかりかもしれませんが,この基板も結構意識して作りました(笑)。PCM 基板の仕様は,実は,「Twin16」基板に載っている,コナミの「K007232」という PCM チップのなんちゃって互換だったり,YM2151 はもちろんのこと,NEC の uPD7759 も「Twin16」に搭載されていたりします。
解像度も,「Twin16」と同じ,320×224 ですし…。
実は,CPU は Z80 だけど,「グラディウス II」を,まんま再現してみたい!…という目標もあったのでした。(まぁ,時間がなくて無理なんですけど…)
ネーミングも,最初は,「Twin16」にならって,「Triplet80」だったのは,内緒です(笑)。
ただ,「鶏八」は,画面表示回路のほとんどを,74 ロジック IC で作りましたが,「Twin16」は,PCM チップに加え,スクロール BG 画面,スプライト,パレットと画面合成は,ほぼ専用のカスタムチップが使われています。
この頃から,アーケード基板は,QFP のカスタムチップが多く搭載されたものが主流となり,集積度があがるとともに小型化されていったと思います。
さて,今回の「鶏八」の完成で,「(Z80 を使った)オレ仕様のゲーム機シリーズ(?)」はひとまず完了となります。
ただ,電子工作は今後も続けていきたいのですが,Z80 は,なんとなくお腹いっぱいになったので(笑),次回は,16bit CPU を扱った工作に挑戦したいなぁ…と思っています。
それには,まずは,16bit CPU の勉強からですけどね。
…とういわけで,「オレ仕様のゲーム機」は,今後も続く…かもしれません(笑)。
それでは,次回に続きます。