Saturn Ring Library でプログラムをビルドしてエミュレータを用いて動作確認するまでの手順のメモ.
確認環境
- CPU: Apple M4
- macOS: 26.5.2
- SRL commit: d4cd4a131cbf80ad0308a4b990d36582aeea899a
- Mednafen: 1.32.1
- Japanese Saturn BIOS: sega_101.bin
- SHA-256: dcfef4b99605f872b6c3b6d05c045385cdea3d1b702906a0ed930df7bcb7deac
開発環境のセットアップ
必要なツールのインストール(入ってなければ)
brew install make wget sox xorrisounzipも必要だが、通常はmacOSに標準で入っている. 確認する場合:
command -v unzipエミュレータと BIOS の準備
brew install mednafen
mkdir -p ~/.mednafen/firmware
cp /BIOSがある場所/sega_101.bin ~/.mednafen/firmware/sega_101.binは、日本版セガサターンから取得したBIOSを使用する.
SaturnRingLibrary のセットアップ
git clone --recurse-submodules https://github.com/ReyeMe/SaturnRingLib.git
cd SaturnRingLib
./setup_compiler.batテストビルド
cd Samples/TestProject
./compile.batBuildDrop/TestProject.cue と BuildDrop/TestProject.bin が生成されればビルド成功.
Mednafenを日本リージョンへ固定
手持ちの日本版 BIOS で起動するため、 ~/.mednafen/mednafen.cfg を次の設定にする.
ss.region_autodetect 0
ss.region_default jpこれは自動判定を無効にし、日本リージョンへ固定する設定. 将来PAL版を確認するときは別設定が必要になる.
TestProject 実行時の問題と回避策
今回使用した SRL リビジョンと Mednafen 環境では、TestProject に二つの独立した停止要因があった.
- TLSF使用時にSEGAロゴで停止する
SRL_MALLOC_METHOD = TLSF では SEGA ロゴから先へ進まず、 main() まで到達しなかった.
TestProject の makefile を次のように変更する.
-SRL_MALLOC_METHOD = TLSF # Allocation method: TLSF or SIMPLE are supported.
+SRL_MALLOC_METHOD = SIMPLE # Allocation method: TLSF or SIMPLE are supported.SRL では TLSF 有効時の不具合が報告され、SIMPLE が暫定的な回避策として案内されていた.
関連するメモリ初期化および SGL ワークエリアの修正は SRL 本体へマージ済みだが、今回使用したリビジョンと Mednafen 環境では、 TLSF 使用時に SEGA ロゴで停止した.
SIMPLE へ変更すると SEGA ロゴを通過して main() に到達したため、現状は SIMPLE を使用する.
- DateTime::Now()で起動後に停止する
SIMPLE へ変更すると SEGA ロゴは通過したが、 DateTime::Now() の呼び出しで処理が停止した.
TestProject の src/main.cxx を次のように変更する.
- DateTime time = DateTime::Now();
- SRL::Debug::Print(1,1, "%d:%d:%d %d.%d.%d ", time.Hour(), time.Minute(), time.Second(), time.Day(), time.Month(), time.Year());
+ SRL::Debug::Print(1,1, "TestProject running");これは DateTime 機能の修正ではなく、TestProject の描画・テクスチャ読み込みなど、ほかの基本機能を確認するために時刻取得処理を外す回避策.
修正後のビルドと起動
./compile.bat
./run_with_mednafen.bat赤系の背景、3個の図形、矩形のテクスチャ、および TestProject running が表示されれば動作確認成功.