はじめに
N64(ニンテンドー64)を代表する歴史的名作『スーパーマリオ64』。ファン有志による逆コンパイルプロジェクトの成果により、現在ではPCをはじめ、PS Vita、PSP、PS2など様々なプラットフォームへの非公式移植版が存在します。
今回紹介するのは、その中でも少し珍しいPlayStation 3(PS3)向けの移植版「sm64-ps3-port」です。
今回使用するリポジトリは、GitHub上で公開されている sdiraimondo/sm64-ps3-port です。本プロジェクトは現在も開発途上であり、公式READMEにも動作上の不具合が発生する可能性がある旨が記載されています。また、ビルドには所有している実機ゲームROMからアセット(素材)を抽出する必要があります。
Windows PC上にPS3向けの複雑なCross-SDK開発環境を直接構築するのは手間がかかるため、今回はSynology NASの「Container Manager(Docker)」を利用し、コンテナ内でスマートにビルド〜PKG化までを行う手順を詳しく解説します。
1. PS3版スーパーマリオ64「sm64-ps3-port」の概要

リポジトリと対応リージョン
「sm64-ps3-port」は、スーパーマリオ64の逆コンパイルコードをベースに、PS3用のグラフィックリファインやコード追加が行われた非公式移植プロジェクトです。
ソースコード内の Makefile では、以下のリージョン指定が定義されています。
VERSION=jp
VERSION=us
VERSION=eu
VERSION=sh
日本版ROM(VERSION=jp)を使用する場合、ビルドコマンドは以下のようになります。
make VERSION=jp
日本版としてビルドされた成果物は、プロジェクト内の build/jp_ps3 フォルダへ出力されます。
Dockerビルド環境の利点
PS3向けのHomebrew(自作ソフト)をビルドするには、本来PS3 SDKやPSL1GHTといった特殊なツールチェーンが必要です。
しかし、本プロジェクトではDockerによるビルドに対応しており、Docker HubにはPS3用ビルド環境がまとめられたDockerイメージ markstreet/sm64:ps3 が公開されています。
Synology NASの「Container Manager」上でこのイメージを実行すれば、NASやPCの環境を汚すことなくコンテナ内で完結してビルドを行えます。
2. 開発環境と事前準備(ディレクトリ構成)
ビルドを始める前に、Synology NAS上に必要なプロジェクトフォルダ構造を作成します。
NASの共有フォルダ docker/ 配下に sm64-ps3/ を作成し、以下のようなディレクトリ構成を目指します。
docker/
└─ sm64-ps3/
├─ actors/
├─ asm/
├─ assets/
├─ bin/
├─ data/
├─ include/
├─ levels/
├─ lib/
├─ ps3/
├─ src/
├─ text/
├─ tools/
├─ Makefile
├─ README.md
├─ baserom.jp.z64 <-- 所有する日本版ROMファイル
└─ docker-compose.yml <-- 設定ファイル
ポイントは、PS3ブランチのソースコード一式と日本版ROM(baserom.jp.z64)を同じディレクトリに配置することです。
3. ソースコードと日本版ROMの配置
① PS3ブランチのソースコードを取得
sm64-ps3-port 公式GitHubリポジトリ にアクセスします。
ブランチ選択画面で ps3 ブランチ を指定した状態で、「Download ZIP」をクリックしてダウンロードし、解凍した中身をNASの docker/sm64-ps3/ 内に配置します。
② 日本版ROMのファイル名変更と配置
自身で所有するスーパーマリオ64(N64日本版)のROMデータを用意します。
ファイル名を正確に baserom.jp.z64 へ変更し、docker/sm64-ps3/ 直下へ配置してください。
注意: ファイル名が異なると、ビルド時に
Failed to open baserom.jp.z64!というエラーが発生して失敗します。VERSION=jpの指定時はこのファイル名が厳密にチェックされます。
4. docker-compose.yml の作成とコード修正の自動化
docker/sm64-ps3/ ディレクトリ直下に docker-compose.yml を新規作成し、以下の内容を記述します。
services:
sm64-ps3-build:
image: markstreet/sm64:ps3
container_name: sm64-ps3-build
working_dir: /sm64
volumes:
- ./:/sm64
command:
- sh
- -c
- |
sed -i 's/rsxSetZControl/rsxSetZMinMaxControl/g' src/pc/gfx/gfx_ps3_rapi.c
make clean
make VERSION=jp pkg -j2
設定内容の解説
image: markstreet/sm64:ps3
PS3向けのコンパイルツールチェーンが含まれたプリビルドDockerイメージです。volumes: - ./:/sm64
NAS上の作業フォルダをコンテナ内の/sm64にマウントします。これによりコンテナ内で生成されたbuild/jp_ps3/以下の成果物を、NAS側から直接取り出せます。sedによるソースコード修復
現在リポジトリにあるsrc/pc/gfx/gfx_ps3_rapi.cの一部コードにおいて、PSL1GHT側のグラフィックAPI関数名との不整合(rsxSetZControl)が存在します。そのままビルドするとエラーになるため、ビルド前にsedコマンドで正しい関数名(rsxSetZMinMaxControl)へ自動置換しています。make VERSION=jp pkg -j2
日本版として2スレッド並列でビルドを行います。NASのCPU負荷を抑えるために-j2に設定していますが、高スペックなNASであれば-j4などに変更可能です。
5. Synology Container Managerでのビルド実行
ここからは Synology DSM(WEB画面)上での操作手順です。
① プロジェクトの作成
- DSMで Container Manager を開きます。
- 左メニューの「プロジェクト」を選択し、「作成」をクリックします。
- 以下の項目を設定します:
- プロジェクト名:
sm64-ps3(任意の名称) - パス:
/docker/sm64-ps3
- プロジェクト名:
- 既存の
docker-compose.ymlを使用するか訊かれるので、そのまま「OK」をクリックします。
- 全般設定が表示され、「次へ」をクリックします。

- Webポータル設定はスキップして、「次へ」をクリックします。

- 「完了」をクリックします。

② ビルドの開始と成果物の確認
設定完了後、プロジェクトが自動的に開始されます。
初回起動時はDockerイメージ(markstreet/sm64:ps3)のダウンロードが行われた後、コンテナ内で sed 置換 ➔ make clean ➔ make が順次自動実行されます。ROMからのアセット抽出とPS3向けコンパイルが進み、正常に完了するとコンテナが停止します。
(厳密には、python2.7の関係で、途中でエラーで終了します)
ビルドが完了すると、NAS上の以下のパスにファイルが生成されます。
docker/sm64-ps3/build/jp_ps3/pkg/USRDIR
この中に作成されている EBOOT.BIN(BINファイル)が今回のコアとなる成果物です。
6. PKG用フォルダを構成する
生成された EBOOT.BIN をPS3で読み込めるPKG形式へ変換するためのディレクトリ構造をPC上で準備します。
ディレクトリ構造とリネーム
PC上の任意の場所に作業フォルダ(例:SM64PS301)を作成し、以下のようなフォルダ構造を作成します。
SM64PS301/
├─ PARAM.SFO
├─ ICON0.PNG
└─ USRDIR/
└─ EBOOT.BIN
重要: PS3のアプリケーション構造上、実行ファイルである
EBOOT.BINは必ずUSRDIRフォルダの配下 に配置してください。
- 生成された
EBOOT.BINを、USRDIR/フォルダ内へ配置します。 - ゲーム情報(タイトル名やTITLE_ID)を定義する
PARAM.SFOを作成・配置します。- TITLE:
スーパーマリオ64 - TITLE_ID:
SM64PS301 - CATEGORY:
HG
(既存のPS3 Homebrew用PARAM.SFOをWeb-SFO-Editor等のツールで編集して流用するとスムーズです)
- TITLE:
- PS3のXMB(クロスメディアバー)上で表示されるアイコン画像として、
ICON0.PNG(320×176ピクセルのPNG画像)を、背景画像として、PIC1.PNG(1920×1080ピクセルのPNG画像)を配置しておくと見栄えが良くなります。
7. PS3 Game ExtractorによるPKG化とPS3へのインストール
① PKGファイルの生成
PC上で PS3 Game Extractor を起動します。
作成した SM64PS301 フォルダを指定し、PKGパッキング機能(Pack folder in PKG)を実行します。
※ PS3 Game Extractorの詳しい使用手順については、こちらの記事をご参照ください。
② PS3実機へのインストール
- 完成した
.pkgファイルを以下のいずれかの方法でPS3から認識できる場所に配置します。
USBメモリを使用する場合:FAT32形式でフォーマットしたUSBメモリの直下(ルート階層)にコピーし、PS3本体の右側のUSBポートに接続します。
FTP転送を使用する場合:FTPクライアントソフトを使い、PS3の内蔵HDD内にある/dev_hdd0/packages/フォルダへ転送します。 - PS3のXMBメニューから 「★パッケージマネージャー」を選択します。
- 「★パッケージファイルをインストールする」 > 「スタンダード」(USBメモリの場合)または 「PS3本体ストレージ」(FTPの場合)を選択します。
- 表示された
を選択してインストールを開始します。.pkgファイル
- インストール完了後、XMB上に『スーパーマリオ64』のアイコンが表示され、起動可能になります。

おわりに
今回は、PS3向けの非公式スーパーマリオ64移植版 「sm64-ps3-port」 を、Synology NASのContainer Manager(Docker)を活用してビルドし、PKG化するまでの手順を紹介しました。
PS3のHomebrew開発環境はPC上に構築しようとすると依存関係のエラーに悩まされがちですが、「Synology NAS + Container Manager + Dockerイメージ(markstreet/sm64:ps3)」 という構成をとることで、自前のPC環境を汚すことなく非常にクリーンにビルドを完結させることができます。
一度コンテナ環境を用意してしまえば、
- 生成された
sm64.jp.f3dex2e.selfを取得 EBOOT.BINにリネームしてUSRDIR/内に配置PARAM.SFOやICON0.PNGとともにPKG化
というシンプルなステップで実機用パッケージを作成可能です。
NASの活用例としても非常に面白い題材ですので、PS3実機やNASを所有している方はぜひチャレンジしてみてください。なお、PS3移植版は現在も開発途中のため、実機での挙動や安定性についてはバージョンによって異なる場合がある点をご理解の上お楽しみください。
コメント