オレ仕様のゲーム機を作ろう(その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 基板」の紹介になります。

それでは,次回に続きます…。

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA