ゲーム

自作でゲーム機を作ったエンジニアが製作手順や回路図を公開


エミュレータのようにPC上でゲーム機のシステムを疑似的に再現するのではなく、ゲーム機ごとのシステムをダウンロードしてカスタマイズすることが可能な携帯ゲーム機「Gameslab」をソフトウェアコンサルタントのクレイグ・ビショップ氏が開発しています。Gameslabがどのような構成で設計されているのか、実際にどのように組み立てたのかをビショップ氏のブログで公開されています。

Gameslab project overview · Craig J. Bishop
https://craigjb.com/2019/11/26/gameslab-overview/

◆Gameslabとは?
ビショップ氏によると、GameslabはオープンソースのKiCadで設計された、ARMベースプロセッサのソフトウェアプログラマビリティと、FPGAのハードウェアプログラマビリティを組み合わせたSoCZynq-7000をベースにしたゲームコンソールとのこと。Gameslabの特徴は、各ゲームやアプリのプラットフォームに合わせたシステムをダウンロードすることで、ゲーム機本体の仕様をカスタマイズしてゲームを遊ぶことができるという点です。たとえば、2Dのスクロールシューティングゲームを遊ぶ場合は、ゲームに適した画面上のスプライト描画設定やアニメーションの高速化処理を実装したシステムをダウンロードすることができます。ほかにも、ゲームボーイのソフトを遊ぶのであれば、エミュレータのようにゲームボーイのCPUと周辺機器をソフトウェアで疑似的に再現するのではなく、FPGAにゲームボーイの仕様をダウンロードして、Gameslabにゲームボーイのシステムそのものを搭載することができるそうです。


◆Gameslabの構成
以下の画像はGameslabの基板です。Gameslabは約360個の部品で構成されています。


GameslabにはMicroUSBから充電するリチウムポリマー電池が搭載されています。バッテリーを管理するICチップであるBQ24250によって、USBからシステム実行中でもシステムに電力を供給することができるとのこと。

以下の画像はGameslabの回路図です。バッテリーの低い側(IBAT)にバッテリー残量ゲージSTC3115が接続されています。なお、記事作成時点で、以下の回路図はテスト前のものであるため「まねしないでください」とビショップ氏は述べています。回路図の一番上には、メインシステムレール用の電流センスアンプがあり、すべてのコンバータに接続されています。


BQ24250のレールはLDOを駆動して、STM32L073のシステム監視プログラム、1.0V/1.5V/1.8V/3.3Vレール用の4つの個別スイッチングレギュレータ、LCDバックライトドライバ、および5V USB昇圧コンバータに電力を供給します。

システム監視プログラムを担うMCUであるSTM32L073は、I2C接続でBQ24250を管理し、各レールの電圧と電流の測定と、各レールのFPGAを立ち上げる役割を果たします。STM32L0シリーズのマイクロコントローラは低電力であるため、Gameslabのようなアプリケーションに最適であるとビショップ氏は述べています。

Zynq FPGAのサブシステムには、512MBのDDR3 DRAMを備えたZynqパーツが含まれています。DDR3 RAMは最大533MHzで動作し、データラインあたり最大1066Mbit/sのスループットを実現します。ここでは、合計2132MB/sの帯域幅に16本のデータラインが使用されています。なお、これは実際の帯域幅ではなく、あらゆる負荷の下で最適とされる、80~90%ほどの効率となる帯域幅となっています。


Zynqは、32MBのSPIフラッシュであるS25FL256Sから起動します。ZynqはI2CおよびUARTによってSTM32L073のシステム監視プログラムにも接続されているため、U-bootおよびLinuxコンソールをUSBからダンプできます。

Gameslabの液晶ディスプレイ(LCD)は、5インチ(800×480)のTFT液晶で、その上にマルチタッチパネルが搭載されています。カラーは8bit/チャンネルのRGBが24bit、垂直同期ライン、水平同期ラインがあります。LCDラインは、3.3V LVCMOSのFPGA I/Oポートから直接駆動されます。バックライトは、LED全体を駆動するのに高い電圧を生成するドライバーを必要とするため、複雑な構成になっているとのこと。マルチタッチインターフェイスは、I2C接続でZynqのARM Cortex-A9サブシステムに接続されています。


Gameslabには、右側に4つの色付きボタン、左側に4つの灰色の方向ボタン、左右のショルダーボタン、および2つのスティックがあります。


Gameslabのサウンドシステムは、ヘッドホンアンプを内蔵したステレオコーデックと、2つのスピーカーを駆動するクラスDアンプが搭載されています。I2S接続でコーデックに出力する前に、派手なサウンドエフェクトやミキシングをFPGA側で行います。


◆Gameslabの組み立て
Gameslabをプリント基板から設計する作業は「忍耐力のある試みだった」とビショップ氏は語っています。中でも、プリント基板に正確に部品を固定することは、非常に重要な工程とのこと。ビショップ氏は、2つのL字ブラケットとテープを使って、プリント基板をまったく動かないように固定しています。


基板の上にメタルマスクを置き、注射器のようなものからメタルマスクにはんだペーストを載せているとのこと。ビショップ氏は、いらなくなったカードを使ってはんだペーストを塗っているそうです。


ビショップ氏は、基板に部品を置いた後、はんだのリフローにオーブントースターを使用しています。一度に4枚までのパンを焼くことができるオーブントースターなので、大きなプリント基板にも適しているそうです。


右隣にあるのはビショップ氏が自作した、熱電対でオーブンをモニターし、PID制御でオーブンのオン/オフを切り替えるリフロー用のオーブンコントローラーです。オーブントースターでのリフローは、0.5mmピッチのLCDコネクタにいくつかブリッジが発生したものの、すべて問題なく動作したとのこと。


その後、RustによるSTM32L073での基本ファームウェアのセットアップが行われました。U-bootを構成して移植し、開発ボードのプロトタイプからLinuxデバイスツリーを再構成してLinuxをブートしています。「Gameslabが初めてLinuxを起動したときには驚きました」とビショップ氏は語っています。


Gameslabの中身がどうなっているのかは、以下のムービーからも確認できます。

Gameslab case in detail - YouTube

この記事のタイトルとURLをコピーする

・関連記事
自動戦闘するロボットのAIを書き換えて戦わせ合うフリーゲーム「Bot Land」を遊んでみた - GIGAZINE

無料ゲームを25年以上も続く自作ゲーム公開プラットフォーム「DigitalMZX」でプレイしてみた - GIGAZINE

過去に遊んだレトロゲームに新たな発見と冒険を生むMOD「ランダマイザー」とは? - GIGAZINE

無料で2500本以上ものMS-DOSの名作ゲームがブラウザからプレイ可能に、インターネットアーカイブが公開 - GIGAZINE

PS4/Nintendo Switch/Xbox Oneを全部載せな究極のゲーミングPC「Big O」 - GIGAZINE

最高のパフォーマンスを発揮する自作PCパーツを予算内で自動的に選ぶ「Automated PC recommender」 - GIGAZINE

in ソフトウェア,   ハードウェア,   動画,   ゲーム, Posted by log1m_mn

You can read the machine translated English article here.