PIC32MZ PROJECT(8)
更新日:2023年11月4日

PIC32MZ PROJECT 小型化とMONSTER HOUSE 2023公開
久しぶりの一年以上ぶりの登場です。今回自作ゲーム機「PIC32MZ PROJECT SYSTEM」の小型化を行いました。合わせて新作ゲーム「MONSTER HOUSE 2023」が完成しましたので公開いたします。今までこのゲーム機の情報を都度分けて発信していましたので、今回まとめとして記載しました。興味のある方は見ていって下さい。不明点などあればメール頂けると幸いです。(メールアドレスはPIC32MZ PROJECTのタイトルページに記載しています)
まずは完成した姿をご覧ください。小型モニターに接続しています。
(最新のPIC32MZ PROJECT SYSTEM)
自作ゲーム機の特徴を記します。
・メインマイコンにPIC32MZを使用。
・640x480ドットの解像度でVGAモニタに表示。
・CPLDと高速SRAMでビデオバッファを構成。
・512色から16色を選ぶインデックスカラー方式。
・1画面の描画時間は19msecで高速。
・サブマイコンにPIC24Fを使用して8bit 8kbps 2chのPCMサウンド搭載。
・メインマイコンとサブマイコンはカード化して取り換え可能。
・操作キーは最大7キーまで。
・電源はDC5V。USB-AのDC5V出力あり。
・サウンドはモノラル内蔵スピーカー出力、又はφ3.5mmオーディオ端子出力。
システムの構成を示します。VGAモニタに出力して内蔵スピーカーで音を鳴らします。
(PIC32MZ PROJECT SYSTEM 1構成)
CPLDにはMAX2:EPM240T100を使用します。かなり前のトランジスタ技術の付録に付いていたものです。今でもアリエクなどで入手出来ます。一応流通はしていますので、ご安心下さい。SRAMは16bitバスの2Mbitで高速タイプのCY7C1011DV33です。これもアリエクで入手出来ます。アリエクには偽物もあるみたいですが、私が入手したのでは本物でした。CPLDは100MHzで動作させるので100MHzの水晶発振器もアリエクで入手しました。
CPLDと高速SRAMで構成したビデオバッファの回路図を示します。また電源回路とVGA出力回路、更に今回周辺回路を同一基板化したのでEEPROMの回路もあります。CPLDの書き込み端子は過去のトランジスタ技術の付録に付いていた基板のピン配置と同じにしていますので、書き込む際は注意して下さい。
(CPLDと高速SRAMの周辺回路図)
CPLDの内部構成図を示します。CPLDの役目は
・PIC32MZから送られてくる16bit幅の画像データをSRAMに順次格納。
・SRAMから順次画像データを読み出しVGA出力。
・SRAMに書き込むタイミングと読み出すタイミングをコントロール
(CPLDの内部構成)
内部のモジュールは7種類でVHDLで記述しています。モジュール間の配線は後の図を見て下さい。全体のソースファイルは公開出来ませんが、VHDLのソースファイルは公開出来ますので、興味のある方は参考にして下さい。
VHDLのソースはこちら
(データ16bit幅の横640ドット表示のタイミングチャート)
画面構成として8bitで2ドットを表示します。従って1ドットに使える色は黒を含めて16色です。16色はPIC側で自由に作ることが出来ますが、CPLDのVGA出力は512色の表示能力ですので、ある程度近似してVGA出力します。さて上図のタイミングチャートですが、SRAMから4ドット分(16bitデータ)を読み出してラッチします。ラッチしたデータは4bit毎に4ドット分をVGA出力します。ラッチ後はPIC32MZからの読み込みモードとなりSRAMにデータを書き込みます。この処理を横160回、縦480回繰り返して一画面表示となります。PIC32MZからのデータ出力はCPLDからの信号を待ってから行うように当初は設計していましたが、画面描画速度が低下したので、今はその待ちをしていません。それでも画面表示は正しく行われています。CPLD内ではSRAMのアドレス管理は細かくコントロールされています。hsyncvsyncsysnext2addr640480set16bit2.vhdのモジュールがCPLDシステム全体をコントロールしています。
(CPLD内部のモジュール間配線)
CPLDのピン配置は過去に基板化する時に最適アサインとなるようにしていますので、下図を参照して下さい。すみませんが、上図のピン配置は最適化前のものです。
(CPLDのピンアサイン)
ゲーム機として一枚基板とするために、オーディオ回路も組み込んでいます。その回路図を示します。2chのサウンドは内蔵スピーカーからはミックスしてモノラル出力となります。外部出力する時はLRに分けて2ch出力となります。USB-AのDC5V出力は外部機器(VGA-HDMI変換など)の電源として使用します。私の場合は複数の外部機器を接続するのでそのためのHUBの電源に使っています。サウンド出力はオーディオケーブルを差し込むことで内蔵スピーカーから切り離されます。
(サウンド周辺回路)
オーディオアンプにHT82V739を使用しました。DIPタイプは入手不可ですが、SOPタイプを変換基板に実装などして使って下さい。
基板のパターン設計にはKiCad 5.1を使っています。私にとってはこのバージョンで充分です。基板サイズは基板メーカーのサイズに収まるように100x100mm以内のギリギリの設計です。でも何かとうまく配線出来ましたね。正直この時間が一番楽しいかも。
(PIC32MZ PROJECT SYSTEMの基板パターン図)
今回も基板はPCBWAYさんにお願いしました。ガーバーデータをアップロードしてから安定の一週間程度で基板到着しました。毎回本当にありがとうございます。流石に円安なんでそう多くは基板試作出来ませんけど。
(PIC32MZ PROJECT SYSTEM基板)
全て手付ではんだ付けしています。以前に別の基板でリフローしましたが、結局はんだがうまく乗らず苦労しましたので。勿論手付の苦労もあるのですが、なんとか上手く動きました。
(部品実装基板を背面側から)
背面側になる部分は上の写真左側からDC5V入力、DC5V出力、VGA出力、オーディオ出力のコネクタを配置しています。
(部品実装基板を前面側から)
左側面側にマイコンカードを差し込むコネクタを配置しています。前面側は操作キーを接続するためのコネクタを配置しています。このコネクタはLANコネクタを使用してLANケーブルで接続します。
(部品実装基板を天面側から)
上図の左上部分が電源回路になります。LCフィルターを沢山入れています。コネクタ群から考えるとこれ以上の小型化は困難かもです。うまく部品配置出来たと思っています。
(PIC32MZ+PIC24Fのマイコンカード回路図)
マイコンカードは以前に作ったものをとりあえず使います。まだ基板の縮小化が可能と思われます。PIC32MZ2048EFG100がメインマイコンでPIC24FJ128GA202がサブマイコンです。PIC32MZマイコンは既に秋月さんでは買えない状況になっています。私は手持ちがあるので使いましていますが、新規に購入される方はPIC24Fも含めてMOUSERなどで購入が可能です。でも値段は高いですね。
(PIC32MZマイコンのポート割り付け)
今回のソフトから乱数の発生方法を変更しました。内部標準関数を使います。しかしながら電源ONと同時に毎回同じ乱数から発生すると思われるので少し工夫をします。
(Harmony3でのコンポーネント設定)
RTCC(リアルタイムクロック)を組み込みました。何に使う?と思われるかもしれません。これは乱数の種に使います。RTCCは電源が入っている時にしか動かないので、電源ON時には必ず同じ日時からスタートします。しかしゲームをしていると経過時間がその都度異なるはずです。そこでゲームオーバー時に時間を読み出しその要素を使用して次に電源をONした時の乱数の種としています。これで電源ON時の状況が毎回変わるようになります。EEPROMを接続しているので種はそこに記憶しておきます。
(RTCCの設定)
日付と時間の初期設定は極めて適当です。あくまでもそこからの経過時間が重要なのです。内部標準関数の乱数を使用したことで、敵の動きも偏ることが無くなったように思います。
(PIC24Fのポート割り付け)
フラッシュROM容量の大きいPIC24Fを選定していますので、PCM音源は2ゲーム分を入れることが出来ます。このチップには前に発表したPLANET PILOT 2022 のデータも入っています。まあ共用で使っている音源もありますけど。
(MONSTER HOUSE 2023の効果音)
1ゲームについて15種類の効果音を発生出来ますが、さすがに容量不足となってこのゲームは13種類です。2ch同時発生が可能ですが、同じチャンネルから発生する音は後からの音が優先されます。PCM音源なのでリアルな音を楽しむことが出来ます。
(マイコンカードにゲーム名をラベリング)
PIC32MZマイコンは大容量なのでフラッシュ領域はスカスカです。ただRAMは半分くらい使用しています。本当は複数のゲームを入れたいのですが、まだ実現途中です。コネクタは40pinもありますので、本体への抜き差しは少し苦労します。左側の10pinコネクタはPICのライタを接続するコネクタです。5pinづつ、PIC32MZとPIC24Fに割り当てています。比較的簡単にプログラムを書き換えることが出来るのでゲームのチェンジは簡単です。
(2mmの透明樹脂板で挟みこんでゲーム機らしく)
ゲーム機として持ち運び易くするために透明樹脂板でケースもどきとしました。マイコンカードを挿すコネクタはケースから飛び出ないようにしています。
(背面のコネクタ群)
それぞれのコネクタにラベルを貼り付け。大変良く出来ました。
(内蔵スピーカーの配置)
内蔵スピーカーはケース下側から音が出るように配置しました。薄型を目指したのでスピーカーから出る音は小さいです。外部スピーカーアンプを使うと良いと思います。
今回のゲームはMONSTER HOUSE 2023 です。今まで320x200ドットの液晶を使った自作ゲーム機で小型版を作りました。画面が上下左右スクロールする画期的(?)なゲームだったのですが、見通せる範囲が少なくイマイチ盛り上がりに欠けるものでした。今回は画面サイズを大きくして動く範囲を広く取りました。画面構成は下図の通りです。今風太としてPC-8001mk2用のゲームソフトで発表したものより迫力が大きいです。
(MONSTER HOUSE 2023の画面構成)
ここから画面キャプチャーを使っていくつか説明します。自作ゲーム機の為、完全な自己満足の世界のことですので、流し見でお願いいたします。ゲームを作るのも楽しむのも自分自身のみです。今回面数は25面まで揃えました。モンスターのデザインとか、かなり力を入れています。まあそこまで行くことはまず不可能ですが。
(タイトル画面です)
ハイスコアのベスト5を表示してゲーム開始を待っています。モンスターは所狭しと画面を走り回っています。
(ROUND 01)
ゲーム開始です。プレイヤーはRED EGGを操作してハウス内のフルーツ(野菜)を全て食べる(?)とラウンドクリア。ハウス内にはモンスターが走り回っていますので、EGG MISSを発射してモンスターをいじけさせるとその間はモンスターを通り抜けられる。その後モンスターは蘇ります。
(NEXT STAREへ)
決して敵を倒すゲームではありません。あくまでもいじけさせるのです。
(ROUND 02)
モンスターを3体以上いじけさせると、ハウス内のどこかにBIG EGGが発生。BIG EGGが消えるまでに食べるとMISS EGGが20発増えます。MISS EGGは最大99発まで。ハウス内のフルーツ(野菜)を残しながらモンスターのいじけを連続して続けることでSCOREはどんどん増加。ゲーム終わらない?でもやられてしまいます。
(ROUND 04)
モンスターの種類は4種類。ただ走り回るだけのもの。爆弾を通路に置くもの。いじけミサイルを発射してくるもの。ミサイルを発射してくるもの。特にミサイルを発射するモンスターはRED EGGが見えた方向に撃ってくるので、ひたすらMISS EGGで反抗するか、当らないように逃げ込むしかない。但しモンスターがミサイルを発射してくる面ではRED EGGも交差点から4方向ミサイルを発射出来る。上図はその時の画面。
(ROUND 05)
通路に爆弾を置かれた時はMISS EGGで反攻して突破。又は近づかないこと。爆弾は時間が経つと消滅。また別の所に発生の可能性。
(GAME OVER)
RED EGGがセロになるとゲームオーバー。RED EGGは5面クリア毎にひとつ増える。又はBIG EGGを3回取得でもひとつ増えます。
(ROUND 17)
ROUNDは25まであります。ゲーム開始前にある操作をすることで任意の面からゲームスタートが可能。これは勿論デバッグ用。でもゲームにも採用。初心者でも全ての面が体験出来る素晴らしさよ。まあ自作ゲーム機用のソフトなんで自己満足だけのことですが。
(EEPROMに記憶しているデータの割り付け)
ハイスコアなどはEEPROMに記録していますので、電源を切っても覚えています。
(VGAモニタと外部スピーカーアンプを組み合わせる)
(PIC32MZ PROJECT SYSTEM 2構成)
外部スピーカーアンプにダイソーの物を使用することで音の迫力が増します。このシステムがイチオシかな。
(VGA-HDMIアダプターを接続してHDMIモニタと組み合わせ)
(PIC32MZ PROJECT SYSTEM 3構成)
大画面で楽しむならこの組み合わせ。HDMIからモニタから音が出ます。
如何でしたでしょうか。久しぶりの自作ゲーム機の記事でした。説明不足の内容もあるかと思いますので、他のページの記事も参照頂けると幸いです。
これらの内容はあくまでも私が楽しんでいるだけのものを、皆さんのクリエイトの参考にして頂きたいと思って公開しているものです。ディスコンの部品を使用しているとか、内容が古すぎるとかとは言わないで下さいね。これからもPIC32MZ PROJECTをよろしくお願いいたします。

「PIC32MZ PROJECTの表紙」へ戻る