オレ仕様のゲーム機を作ろう(その30)

前回は MC68000 MPU を搭載した MPU 基板を作成し,68000 コードを実行できるようになりました。

今回は,前回の予告通り,画面出力信号周りの基板を作っていきたいと思います。

基本的には「鶏八」の時に作った基板と回路構成は同じです。

作成した基板

(クリックで拡大します)

この基板も,いつものように,ロジック IC と SRAM のみで回路が構成されています。

機能としては,BG 画面とスプライト画面を,優先順位に従って画面合成を行い,画面出力するドットの色をパレットで色変換して,左下のコネクタからアナログ RGB 信号として出力します.

画面の合成

今回の画面構成(各プレーン)は以下のようになります。

  • BG 画面 0
  • BG 画面 1
  • BG 画面 2
  • BG 画面 3
  • スプライト画面

「鶏八」と比較してチョットだけ機能アップしている感じです。

BG は最大で 4 面ありますが,これらの表示優先順は固定です。

BG 画面 3 >BG 画面 2 >BG 画面 1 >BG 画面 0

となっています。

スプライトは,画面全体に 160 枚表示できる予定ですが,スプライト全体で 1 プレーンと考えて,表示優先順は専用レジスタ書き込みによって,4 面ある BG 画面のどこに挟むかを指定できるようにしました。

それぞれの BG 画面どれかの前面になるように指定できます。

また,このレジスタで,それぞれの BG 画面,スプライト画面の表示オンオフもできるようにしました。(あまり使わないかもしれませんが…)

カラーパレット

カラーパレットは,「鶏八」とほぼ同じで,パレット 1 本に付き,R:G:B = (5:5:5) を 16 色定義できます。

これらのパレットを以下のように割当可能です。

  • BG 画面 0(パターンごとに 8 本中 1 本)
  • BG 画面 1(パターンごとに 8 本中 1 本)
  • BG 画面 2(パターンごとに 8 本中 1 本)
  • BG 画面 3(パターンごとに 8 本中 1 本)
  • スプライト画面(1枚に付き 16 本中 1 本)

全部で 16 色のパレットが 48 本あります。

「鶏八」のときは,このパレットデータをセットするメモリ(パレット RAM)は,原則 VBLANK 中しかアクセスできませんでした。これは,画面表示中に表示回路がパレット RAM のデータを参照する必要があるため,MPU からはアクセスできないためです。

今回はこのパレット RAM を 2 段にして,MPU からの設定用 RAM と,画面に表示する時の参照用 RAM を別で用意しました。

MPU は,設定用 RAM に(ほぼ自由に)読み書きでき,VBLANK に入ったタイミングで,設定用 RAM から表示用 RAM にバックグラウンドで自動でコピーされ,表示用回路はこの表示用 RAM を参照して画面に色を表示する仕組みです。

コピーされるタイミングが VBLANK 開始時に固定されますが,裏で DMA 転送(みたいに)される感じです。

1 クロックで 1 ワード転送し,概ね 3 ラインくらいで転送完了します。そこそこ高速だと思います。

この間,MPU は設定用 RAM にはアクセスできませんが,MPU 自体の動作は止まりませんので他の処理をすることはできます。

この DMA 転送の有効化と,転送中ステータスは,専用のレジスタで設定,確認可能です。

ただ,MPU から設定したパレットデータが表示パレットデータに反映されるのが,VBLANK 開始時という仕様なので,画面表示中に(ブランキング期間以外に)表示パレットデータを変更することができないんですよね。

これだと,画面表示の途中でパレットを変更して,あるところを境に全体の色を変えるということができないので,設定用 RAM と表示用 RAM それぞれを2バンクに分割して,どちらかのバンクをアクティブにするようにしました。(容量が余っていてもったいないから…というのが正しいかも)

このバンク設定も専用のレジスタ書き込みで設定できるので,例えば,特定の走査線で割り込みをかけて,このバンクレジスタを変更することで,表示画面の途中で全体の色を一括変更できたりします…多分(笑)。

基板を接続

さらに上に積む形で接続してみました。

いつものように動作テスト

「鶏八」のときもそうでしたが,BG もスプライトもまだ表示できないので,バックドロップカラーの設定で動作確認してみます。

基本的に各パレットの 0 番のカラーは透明色になっていますが,48 本ある 16 色パレットの 0 本目の 0 番のカラー(一番先頭のカラー)がバックドロップカラーに割り当てられています。

このカラーの RGB 値を設定することで画面のバックドロップカラーが変更できるはずなのでテストプログラムを作ってみました。

…が,まったく意図通りに動いてくれません。

簡易 DMA 機能を追加したので,それがうまく動いていないんだろう…と思っていましたが,原因は MPU 基板でのパレット RAM のアドレスデコードが間違っていたためでした。

回路図をよく見直せば原因は特定できそうなのですが,結局,いろんな信号の波形をチェックして,やっと割り当てているアドレス範囲が間違っていることに気づきました。

なかなかこのあたりは,経験値は稼いでもレベルは上がらないものですね…。

何事も,全体の設計をしっかりやってから作る…というのがとても大切なんだというのがよくわかりました(笑)。

テストプログラムは,なんとか,うまく動いているので,多分,他の場所のカラー設定も大丈夫だと思います。

今回はここまでです。

次回は,BG 画面を表示する基板を作成したいと思います。

これも「鶏八」と機能的には変わらないので,うまく行くはず…だといいなぁ(笑)。

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

コメントを残す

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

CAPTCHA