GamePi20を「物理”TIC-80”ゲーム機」にする

2020まとめも書いてしまった後ですが、ちょっと記事を書きたくなっちゃいました。

 

縁あってレビューした、下記記事のGamePi20というゲーム機ですが、これを使って Fantasy Computerである「TIC-80」のゲームを動かす方法が分かったので、紹介していこうと思います。

inajob.github.io

 

TIC-80って?

実はTIC-80については、ずいぶん前に記事を書いたことがありました。

inajob.hatenablog.jp

要は、レトロ風ゲーム実行環境です。実際のレトロゲームは「専用ハード」があり、そこで動くゲームでしたが、TIC-80などのFantasy Computerと呼ばれる仮想のゲーム機は、本体を持たず、PCなどで遊ぶことが前提とされています。

 

この手の仮想ゲーム機で最も有名なものは PICO-8 Fantasy Consoleです。ブラウザでゲームを遊ぶのは無料でできますが、ゲーム開発や、ネイティブアプリでの実行に関しては有料のソフトウェアです。

f:id:inajob:20201229164543p:plain

一方、TIC-80 tiny computerオープンソースで開発されており、特にお金を払うことなく開発・実行ができます。

 

GamePi20って?

こちらは自分が書いた下記レビュー記事を見て欲しいのですが、ざっくりいうとRaspberry Pi Zeroを内蔵したポータブルゲーム機です。

inajob.github.io

もともと、このゲーム機はファミコンや、メガドライブなど、レトロゲームエミュレータを動作させるためのものですが、この記事では、仮想ゲーム機であるTIC-80のゲームを動かす方法を紹介していきます。

 

ゲームエミュレータ用OS 「Recalbox」とは?

f:id:inajob:20201229164140p:plain

GamePi20のようなLinuxを基にしたゲームエミュレータ専用機というのは、ほかにもたくさん存在し、世界中に愛好者がいます。

そのため、このようなLinuxマシンを簡単にセットアップするためのLinuxディストリビューションも存在しています。この手のOSでは、メニューなどの操作をすべてゲーム用コントローラで操作できたり、簡単にROMファイルをゲーム機に転送するための仕組みが用意してあったりと、ゲームエミュレータ利用者が欲しい機能が一通り実装されています。

 

そのようなOSとしてメジャーなものとしてRetroPieRecalboxがあります。

実はこのRecalboxのバージョン6.1から TIC-80のゲームが実行できるようになったのです。

 

ということで、この記事では最新のRecalboxをGamePi20に導入する方法を紹介していきます。

 

GamePi20とRecalbox

GamePi20には公式で提供されるRecalboxと RetroPieのOSイメージが存在します。

しかし、Recalboxのバージョンが6.0と古く、前述したTIC-80には未対応のものとなっています。

という事でGamePi20の公式イメージに頼らず、Recalboxの最新版(Version 7.1.1-Reloaded)をセットアップする必要があります。

 

大まかな流れはGamePi20のWikiに書いてあるので、それに従っていきます。

GamePi20 - Waveshare Wiki

必要なもの

これからの作業を実施するにあたり必要なものは下記です。(リンクは参考です、自分の環境では家に合ったテキトーな機材を使っています。)

 (上記はAmazonですが、Banggoodだともっと安いですよ!)

  • mini-HDMI - HDMI ケーブル(またはアダプタとケーブル)
  • USB-OTGアダプタ
iBUFFALO USB(microB to A)変換アダプター ブラック BSMPC11C01BK

iBUFFALO USB(microB to A)変換アダプター ブラック BSMPC11C01BK

  • 発売日: 2011/11/01
  • メディア: エレクトロニクス
 
  • USB接続のキーボード

SDカードへのイメージの書き込み

ここではWindowsを使ってセットアップを行う方法を紹介していきます。

まずは16GB程度のSDカードを用意します。

下記からRaspberry Pi Imagerをダウンロードします。

Raspberry Pi OS – Raspberry Pi

Raspberry Pi Imagerをセットアップしたら、SDカードにRecalboxをインストールします。

f:id:inajob:20201229165806p:plain
OS一覧にRecalboxがあるので、選択して、SDカードへの書き込みボタンを押すだけで、後は勝手にやってくれます。

f:id:inajob:20201229165819p:plain



HDMIの出力を一番安心なものにする

このSDカードをGamePi20に挿入して起動!と行きたいところなのですが、HDMIの出力設定を変更しておきます。

もしかしたらこの手順無しでもうまく動くかもしれませんが、モニタとの相性などでうまく映らないことがあるので、設定することを勧めます。

 

前節で書き込んだSDカードをPCに挿入すると/bootの内容にアクセスすることが出来るので、そこに存在するconfig.txtを編集し

hdmi_safe=1

という行を有効にします(もともとコメントアウトされているはずです)

これで一番コンサバな設定でHDMI信号が出力されるようになります。

SDカードを挿入

GamePi20のねじを外して、分解します。

f:id:inajob:20201229165917p:plain

メイン基板からピンヘッダで接続されているRaspberry Pi Zeroを分離します。この際、基板を傷つけないように気を付けてください。(結構外しづらいです。)

f:id:inajob:20201229165939p:plain

分離したRaspberry Pi Zeroに元々挿入されているSDカードを抜いて、先ほどセットアップしたSDカードに差し換え、GamePi20を再び組み立てます。

 

(ここで横着して、ケースに入れず続きの作業を行うのは推奨しません。基板が金属に触れて故障したり、HDMI端子やUSB端子に斜めに力がはいって「もげる」こともあります)

初回ブート

初回ブート前に、必要な配線を行います。

初期ブート時は内蔵の液晶モニタや、キーパッドが利用できないので、下記のようにモニタとキーボードを接続します。

  • HDMIケーブル(HDMI Mini - HDMI)でモニタと接続
  • USB-OTGアダプタ経由でキーボードを接続

電源を入れるとHDMIケーブルで接続されたモニタにスプラッシュ画面が表示されます。電源を入れてからしばらく(2分くらい?)時間がかかるので気長に待ってください。その後ローディング画面でまた3分ほど待ちます。

 

WiFiの設定

次にWiFiの設定を行います。これにより以降、sshで接続したり、Samba経由でファイルを編集したりできるようになります。

 

まずEnterキーでメニューを表示します。上下キーで「NETWORK SETTINGS」を選択し「A」キーで決定します。

次に「ENABLE WIFI」で「A」キーを押します。「Connecting to WIFI...」と表示されるのでしばらく待ちます。

そして「WIFI SSID」で接続したいAPを選択して「A」キーで決定します。

最後に「WIFI KEY」で接続パスワードを入力します。(ここはキーボードでパスワードを入力します。

 

接続ができると「IP ADDRESS」の欄にIPアドレスが表示されるので、内容を控えておいてください。

SSH接続して続きの設定を行う

下記のようにしてログインします。ユーザ名は"root"、パスワードは"recalboxroot"です。

$ ssh root@192.168.X.X  # 上記で確認したIPアドレス

Recalboxではシステムファイルは編集できないようにReadOnlyでマウントされているため、編集できるようにマウントしなおします。

# mount -o remount, rw /boot
# mount -o remount, rw /

/etc/modules.conf にフレームバッファ関係のカーネルモジュールの設定を追記します。

# vim /etc/modules.conf

以下の内容を追記します(もともと書かれている内容はそのままにしておいてください)

flexfb
fbtft_device

次にSPIを有効にするために/boot/config.txtを編集します。

# vim /boot/config.txt

以下の内容を追記します(もともと書かれている内容はそのままにしておいてください)

 dtparam=spi=on

続いて、/etc/modprobe.d/fbtft.confというファイルを作成し、液晶画面の初期化方法などの設定を行います。

# vim /etc/modprobe.d/fbtft.conf

内容は下記です。(この部分、公式Wikiの値が間違っています。下記が正しいです。)

options fbtft_device name=flexfb gpios=reset:27,dc:25,cs:8,led:24 speed=96000000 bgr=1 fps=60 custom=1 height=240 width=320
options flexfb setaddrwin=0 width=320 height=240 init=-1,0x11,-2,120,-1,0x36,0xA0,-1,0x3A,0x05,-1,0x21,-1,0x2A,0x00,0x01,0x00,0x3F,-1,0x2B,0x00,0x00,0x00,0xEF,-1,0xB2,0x0C,0x0C,0x00,0x33,0x33,-1,0xB7,0x35,-1,0xBB,0x1F,-1,0xC0,0x2C,-1,0xC2,0x01,-1,0xC3,0x12,-1,0xC4,0x20,-1,0xC6,0x0F,-1,0xD0,0xA4,0xA1,-1,0xE0,0xD0,0x08,0x11,0x08,0x0C,0x15,0x39,0x33,0x50,0x36,0x13,0x14,0x29,0x2D,-1,0xE1,0xD0,0x08,0x10,0x08,0x06,0x06,0x39,0x44,0x51,0x0B,0x16,0x14,0x2F,0x31,-1,0x29,-3

ここまで出来たらリブートします。

# reboot

しばらく待って、再びSSHで接続します。

/dev/fb1が存在することを確認します。

# ls /dev/fb*
/dev/fb0  /dev/fb1

このfb1が内蔵液晶用のフレームバッファです。(fb0はHDMI接続されたモニタのためのフレームバッファです)

 

再び設定ファイルを編集するので、マウントしなおします。

# mount -o remount, rw /boot
# mount -o remount, rw /

/etc/init.d/rcSに下記を追記します。

fbcp &

このfbcpというツールはfb0の内容をfb1にコピーするというもので、これにより次回に起動したときは、内蔵液晶モニタにもHDMI接続されたモニタと同じものが表示されるようになります。(Recalboxにもfbcpの設定があるようなのですが、正しく設定する方法がわからず、ここでは強引にブート時にfbcpが起動するように設定しています。)

 

次にrecalbox.confを編集します。

# vim recalbox.conf

ディスプレイの設定を下記のように設定します。(該当部分の設定を下記のように変更します。ほかの部分はそのままにしておいてください。)

global.videomode=default
global.ratio=4/3

次にコントローラの設定を行います。

GamePi20はコントローラの各ボタンがRaspberr Pi ZeroのGPIOに接続されているので、そのピンを列挙する形で設定します。

controllers.gpio.enabled=1
# controllers.gpio.args=map=1,2  # この行はこのようにコメントアウトする
controllers.gpio.args=map=5 gpio=12,20,21,13,26,16,23,4,6,17,22,5,16

最後にconfig.txtでtftディスプレイとスピーカの設定を行います

# vi /boot/config.txt

下記を追記します。

hdmi_force_hotplug=1
hdmi_cvt=640 480 60 1 0 0 0
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
dtoverlay=pwm

ここまで設定出来たら、再びrebootします。

# reboot

BGMがスピーカーから鳴り、液晶とキーパッドが正しく動くことを確認します。

 

ここまでで普通にRecalboxが動くようになりました。HDMIを抜いても普通に遊ぶことができます。

f:id:inajob:20201229163543p:plain

プラスアルファの設定 - ゲーム一覧の文字サイズを大きくする

ここまでの状態だと、ゲーム一覧の文字が小さすぎて、液晶だと読めないです。

# mount -o remount, rw /
# vim /etc/emulationstation/themes/recalbox-next/theme.xml

設定のうちの下記部分のfontSizeを0.05に変更します。

 <textlist name="gamelist">
<fontPath>./data/arts/Exo2-BoldCondensed.otf</fontPath>
<fontSize>0.025</fontSize>
<forceUppercase>1</forceUppercase>
</textlist>

 プラスアルファの設定 - 不要なサービスを停止する

Recalboxのデフォルトで起動している仮想ゲームパッドと、Web経由での設定変更をするためのマネージャは利用しないので停止しておきます。

# vim recalbox.conf
system.virtual-gamepads.enabled=0
system.manager.enabled=0

ゲームを転送する

ゲームを転送するためには、Samba経由でアクセスするのが簡単です。

Windowsの場合はエクスプローラに、「\\192.168.X.Y\share\roms\」と入力することで、GamePi20のファイルにアクセスすることが出来ます。

TIC-80のゲームの場合は拡張子がticのファイルを入れればOKです。

 

転送後は STARTボタンメニューの「UPDATE GAMELISTS」を実行しないとゲームが表示されないので注意が必要です。

 

ゲーム中にRecalboxのメニューに戻る

HotKey + START を押すことで、Recalboxのメニューに戻ります。

このHotKeyはここまでの設定で「SELECT」ボタンに割り当ててあります。

他にもこのHotKeyを使うことでスクリーンショットを撮ったりもできますので、説明書で確認してください。

 

During the game - Documentation

 

TIC-80のゲーム

TIC-80 tiny computer から選び放題です。ブラウザでも遊べますが、各ページの「download cartridge」からticファイルをダウンロードすることができ、これをGamePi20に転送することで、GamePi20でも遊ぶことが出来ます。

ただし、TIC-80のゲームの中にはCPUパワー要求するものもあるため、GamePi20では処理落ちしてしまうものも多いです。

 

手元でちょっと調べた中だと、下記の「STELE」などはGamePi20でもキビキビ動いていい感じでした。

tic80.com

まとめと宣伝

ということで、GamePi20に最新のRecalboxをインストールして、TIC-80のゲームが遊べるようになりました!

 

GamePi20は本来レトロゲームエミュレータを遊ぶためのガジェットとして作られたものですが、仮想ゲーム端末である「TIC-80の物理端末」としても活用法も面白いと感じました。

 

GamePi20は汎用Linuxマシンなので、TIC-80はもちろんですが、Webサーバやファイルサーバ、プレゼンテーションなど様々なソフトウェアを持ち歩くことが出来ます。

ポケットからさっと取り出したマシンから直接プレゼンテーションをするなどは、なかなか面白い使い方だと感じます。

 

皆さんもこのGamePi20の使い道を考えてみてはどうでしょう?

 

そんなGamePi20ですが、Banggoodで購入する方にはクーポンがあるので、ぜひ下記ページを参照してクーポンコードをゲットして購入してください。

クーポンの有効期限は2021/01/31までなので、欲しいと思ったら即ポチることをお勧めします!

 

inajob.github.io