ラズパイでゲーム機を
2019/03/09
スーファミが壊れた(物理)
  • 私の家族は、あるスーファミの特定ゲームタイトルで遊んでいることが多く、そのためにスーファミ互換機を使っていたのですが、先日その上に物を落として破損させてしまったらしく、ついにご臨終となりました。

  • そこで、新しい互換機を購入しようとしましたが、その際
    「昔やっていた、あれはどこにいったかな...」
    「あれは、カセットが割れて使えなくなったよね」
    「またやりたいな...」
    というやり取りがありました。

  • 過去購入したゲームのROM及びISOデータはファイルサーバに保管してあるため、エミュレータで遊べるのですが
    「パソコン? 触ったことないよ」
    と言う機械オンチ(*1)の家族に向かって
    「パソコンONして、ログインして、エミュレータ起動して、遊び終わったらシャットダウン」
    を説明しても、何も良いことが無いのは明白なので、別のアプローチを取ることにしたのです。
ゲーム専用コンピュータを作ろう
  • 任天堂からクラシックミニシリーズが出ていますよね。更にSONYからもプレイステーション クラシックが出ました。最近のシングルボードコンピュータなら、この程度のエミュレーションはできることを意味しています(*2)

  • つまり「最新のラズパイでエミュレータマシンを作れば良い


    Fig.1 Raspberry Pi 3 Model B+ (公式サイトより)

    と思ったのですが...単にラズパイにRaspbianを入れて、その上でエミュレータを動かすだけではパソコンと変わりません。

  • 機械オンチの人が従来のスーファミと同じ感覚で、ゲーム専用コンピュータを使うには
    1. 電源ONで自動的にログインし、エミュレータが起動する
    2. 電源OFFでシャットダウン動作後、本当に電源OFF
    の条件を満たす必要があるでしょう。

  • 同じことを考えている人が多いせいか、条件1はあっさりクリアできました。エミュレータとRaspbianの組み合わせOSイメージそのものがありました。RetroPieです。サイトからイメージファイル(Raspberry Pi 2/3用)(*3)をダウンロードし、SDカードに入れるだけです。


    Fig.2 RetroPieダウンロードページ(オレンジ枠からダウンロード)

  • 次は条件2です。ラズパイはGPIOの観測と制御がシェルスクリプトで簡単にできるので、GPIOを観測して
     sudo shutdown -h now : OFF
     sudo shutdown -r now : 再起動
    をするだけです。要はケースの電源/リセットボタンと、ラズパイのGPIOが接続されていれば何とかなります。

  • 上記を頭に入れつつ、良さげなケースを探したところRetroflagを見つけました。


    Fig.3 Retroflag SUPERPi CASE-J

    見た目はまんまミニサイズのスーファミケースです。しかもこのケース、先程挙げたGPIO制御のスクリプトも提供してくれています。条件2もあっさりクリアです。

  • Retroflagのサイトに説明はありますが、要はラズパイにログインした状態で
    $ wget -O - "https://raw.githubusercontent.com/RetroFlag/retroflag-picase/master/install.sh" | sudo bash
    とコマンド入力すれば、ケースボタン監視スクリプトのインストールと自動起動設定までやってくれます。

それでは実際に作ってみよう
  • まずは物品購入です。ケースはRetroflagを使うので、セットではなく部品を個別に購入します。「Amaz○nで探しやすい」ことを考慮し、一部キーワードをカタカナにしています。
    • microSDカード 32GB (*4)
    • Raspberry Pi 3 Model B+ マザーボード
    • Raspberry Pi 3 Model B+ USB電源アダプター 5V 2.5A (*5)
    • ラズベリーパイ3 ヒートシンク
    • ラズベリーパイ3 冷却ファン
    • Retroflag superpi

  • モノを揃えたら次は、SDカードの準備とRetroPieのセットアップですが、これは多くの方がまとめてくれています。私は説明が親切な下記サイトを参考にしました。ブログのオーナーさんに感謝です。

  • ただし、一つだけセットアップで異なる点があります。上記サイトの「part.3【設定編(後編)】」の冒頭で説明されている「パッケージのアップデート」は実施しませんでした。恐らくRetroPieのRevisionに依存すると思うのですが、コントローラのConfig設定が効かなくなるため、RetroPieがリリースしているイメージデータを軸にしました。

  • あとは、追加のセットアップ項目です。
    • 日本語フォントのインストール
      ラズパイにログインして下記を実行。全角日本語のファイル名が表示できるようになります。
      $ sudo apt-get update
      $ sudo apt-get install fonts-droid-fallback

    • Retroflagケースの電源/リセットボタン設定
      先も書きましたが、ラズパイにログインして下記を実行。電源ボタンでシャットダウンできるようになります。
      $ wget -O - "https://raw.githubusercontent.com/RetroFlag/retroflag-picase/master/install.sh" | sudo bash

エミュレータ個別に少しだけ
  • セットアップ終了段階で遊ぶことができます。ROMデータはSamba(*6)かSFTPで置きましょう。ファミコン(NES)/スーパーファミコン(SNES)は全く問題なく使えます。

  • N64のFPS表示
    • N64については、デフォルトで何かしらのデバッグ設定が残っているのか、FPSがずっと表示されています。
      これを消すには
       /opt/retropie/configs/n64/mupen64plus.cfg の中で
        ShowFPS = True → Falseへ変更
      とすれば良いように思えますが、実はこの記述はエミュレータの起動スクリプトで上書きされています。

    • そのため、エミュレータ起動スクリプト
       /opt/retropie/emulators/mupen64plus/bin/mupen64plus.sh の中で
        257行: iniSet "ShowFPS " "False" ← "True" を "False" に変更
      とすれば、ようやく消えてくれます。

  • Playstation1のCD交換
    • PSX2PSPを使用してマルチディスクのイメージを作成します。使い方は、こちらが参考になります。

    • 遊んでいる最中の仮想的CD交換は、こちらのYouTube動画の3:30〜4:40がわかりやすいです。
      Disk Cycle Tray Status って蓋の開け閉めがトグルで変わることを意味しているのか...

サーバ用途もいけるかな?
  • 今回「ゲームなら途中で止まっても良いだろう」という気持ちでラズパイを使いましたが、エミュレーションという負荷のかかる状況で一日使っても特に問題ありませんでした。

  • これならいろんな個別サーバを作っても良いかなと思え始めてきました。
Notes
  • パソコンが自宅に置かれてから30年経ちます。それほど筋金入り。
  • PCならCore2Duoぐらいのイメージかと。
  • ファイルサイズは700MB弱くらいあります。
  • FAT32フォーマット制限があるので32GBが良いかと。私はTranscendを購入しました。
  • 2.5A以上出力のアダプタは少ないです。スマホ用は2.4A以下がほとんど。
  • コピーが途中で止まる場合SMBのタイムアウトエラーが起きています。ラズパイに限った話ではありません。無線LAN経路が絡むので、うまくいかないときはSFTPを使いましょう。
2019-03-09 : 初版
2020-07-12 : 日本語フォントインストール方法アップデート
Copyright(C) 2019 Altmo
本HPについて