オレ仕様のゲーム機を作ろう(その12)
前回は,「オレ仕様ゲーム機を作ろう」と言いつつ,MSX プログラミングについての話だったので,趣旨から少し脱線してしまいました。
オレ仕様のゲーム機を作ろう(その11)
さて,今回から,自分の理想とする Z80 ゲーム機に近づけるために,オレ仕様ゲーム機をバージョンアップしたものを作っていきたいと思います。
どんな機能アップをするか?
いきなり理想の形を作ろうとすると,必ず失敗するので,段階を踏んで進めたいと思います。
ユニバーサル基板で作った時の,今後の予定にも挙げていましたが,今回挑戦したいことはどういうものがあるかと言うと…
- マルチ CPU
- 複数枚の BG 画面
- スプライトの横並び枚数増加
- カラーパレットの色数増加
- 複数音源
予定に挙げていた項目を,予定通り,全部実装したいと思います。
マルチ CPU
二つの Z80 CPU の搭載です(そのまんまですね)。
並行して動作しても問題ない処理を,それぞれの CPU に処理を振り分け,負荷分散できたらいいなぁ…なんて考えています。
実際に思ったとおりになるかどうかはわかりませんが(笑)。
当然,それぞれの CPU にそれぞれのバスがあり,ROM 領域と,RAM 領域もそれぞれのアドレスマップにあります。
ただ,それだけでは,別々のプログラムが独立して動くだけになってしまいますので,それぞれの CPU で互いに共有するメモリ領域を用意して,そのメモリを介してデータのやり取りができるようにしたいと思います。
複数枚の BG 画面
これは,意外と簡単です。
同じ回路を二つ用意して,出力を合成すればいいんです。
共有できる回路はあるのですが,面倒なので,同じ回路を用意するこの方法で行きます(笑)。
当然,基板面積が 1 枚の時の倍になります。
以前までは,横 2 画面分の領域を縦横スクロール可能としていましたが,縦 2画面,横 2 画面分の広さ(512 x 512 ドット)を持たせることにしました。
パターンは,2 つの BG 共通で,1024 パターンを定義できます。
スプライトの横並び枚数増加
これも,理屈は案外簡単です。
処理するクロックを倍にすれば,いいんです。
なので,FPGA など,そこそこの速度のクロックでも動作する場合は,特に大きな問題はありません。
ただ,オレ仕様ゲーム機は,可能な限り入手しやすい 74 ロジック IC(HC タイプ)と DIP のメモリチップを中心として作りますので,どうしても,動作クロックの限界があります。…ので,この方法では(私の今の実力では)実現不可能です。
基本的な回路は,前回ユニバーサル基板で作成した,スプライト回路を基本としますが,倍で処理させる部分をなんとかしなければなりません。
今回は,使用する部品が多くなってしまいますが,同じ回路を二つ並列に動作させて,倍の処理を行うことで,この辺りをクリアしたいと思います(これしか,方法が浮かばなかった)。
結果として,16 x 16 ドットのスプライトを,1 画面中に 128 枚同時表示,1 水平ライン上に 32 枚まで表示可能とします。
なお,パターンは,512 種類まで定義できます。
カラーパレットの色数増加
前回,ユニバーサル基板で作ったものは,全体で 256 色中,16 色までしか,色を定義できませんでした。
しかも,BG は,8×8 ドットのパターンごとに 2 色,スプライトは,単色でした。(これはこれで,味があって好きなんですけどね)
今回,BG,スプライトともに,パターンごとに 4 色(うち 1 色は透明色)にして,16 個あるパレットから 1 つ(4 色のセット)を割り当てる形にします。
4 色×16 個,それぞれの色は,RGB 各 4bit で定義するので,全体で,4096色中,64 色使用できることになります。
複数音源
前回の基板では,YMZ294 という,PSG(互換)音源を搭載しましたが,今回は,これを 2 つ載せてみようと思います。出力をミックスするだけなので,そんなに大きな違いはありません。
複数音源と言っても,同じ種類の音源を複数載せるだけですね。
試作は FPGA で
いつものように,試作版を予め VHDL で作成し,FPGA 上で動かしてみました。
このステップを踏むことで,今後の試行錯誤がかなり減ります。
事前に回路の動作確認ができるので,あとはいかにして VHDL ソースを実回路で再現するかということに集中できます。
便利な世の中ですね,ホント。
サンプルプログラムということで,どっかで見たことのあるキャラが表示されていますが,権利を侵害するつもりはありませんので,どうかご容赦ください(笑)。
2 つの BG とスプライトの表示優先順位は固定で,2 つの BG の間にスプライトが入ります。
また,任意の走査線で Z80 に割り込みを掛けられるようにしたので,そのテストとして,全ての走査線で割り込みを入れ,スクロールレジスタを設定してラスタースクロールをさせてみました。
基板はプリント基板で
FPGA で動作させることはできましたが,上記のとおり,実際に基板を作るとなると,部品がかなり増えることになるので,今回はプリント基板で作成します。
今まで,結構小さめのプリント基板しか作ったことがないので,昔のアーケード基板のような大きなプリント基板に挑戦してみようと思います。
さて,主にオレ仕様ゲーム機の改良点を挙げてみましたが,次回は,最初の基板,「CPU 基板」の紹介になります。
それでは,次回に続きます…。