スーパーバグファミコン再現したエミュを作成する

Imaha486さんのところでほぼ解析が完了しておりましたので
こちらではざざっと導入方法だけ書いておきます。

スーパーバグファミコンをエミュで再現する | Irregular child 2nd
https://i486.mods.jp/ichild/super_bug_snes

スーファミのエミュといえばSnes9xが有名、ソースコードも公開されているのですがWindows版のコンパイル環境の構築がよくわからないので
https://github.com/snes9xgit/snes9x/wiki/Compiling

ここではAresをいじくることにします。
https://ares-emu.net/

変更箇所は1か所だけ、MSYS2をインストールすることがメインとなります。

※インストール先をCドライブ、「¥」マークが「\」(バックスラッシュ)になっていますが適宜読み替えてください

MSYS2をインストール

Windowsに開発環境を構築するために下記を参考に、MSYS2をインストールする

MSYS2の導入 – 東京大学工学部 精密工学科 プログラミング応用 I・II
http://www.den.t.u-tokyo.ac.jp/ad_prog/msys2/

GitHub – ares-emulator
https://github.com/ares-emulator/ares?tab=readme-ov-file#windows-building

インストールが終わったら複数あるMSYS2の中からMSYS2 MSYS を起動し、

MINGW64の場合は

pacman -S --needed base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-SDL2

CLANG64の場合は

pacman -S mingw-w64-clang-x86_64-toolchain mingw-w64-clang-x86_64-SDL2

をインストール。
両方ともインストールして問題ない。

インストールしたらMSYS2のウィンドウを閉じて、今度はMSYS2からMSYS2 MINGW64又はMSYS2 CLANG64、上でインストールした方を起動

LibrashaderサポートにRustのインストールが必要だが、ここでは無視(makeのオプションにlibrashader=falseを追加で回避)

ソースの取得、編集

aresのリポジトリからソースコードを取得し、

git clone https://github.com/ares-emulator/ares.git

aresフォルダの中(インストール先のC:\msys64\home\アカウント名の中にある)のares\sfc\cpuにあるio.cppをテキストエディタ等で開き42行目の

case 0x4215: return io.rddiv.byte(1); //RDDIVH

case 0x4215: return 0xf0; //io.rddiv.byte(1); //RDDIVH

に書き換える。

又は

書き換え済みのソースコードを取得。

git clone https://github.com/Nekokabu/ares.git

※もしgitがないよ!とエラーが出る場合は
pacman -S git
してインストールする。

コンパイル

cd ares

でディレクトリを移動して

make -j4 librashader=false

※もしxxxxがないよ!とエラーが出る場合は
pacman -S xxxx
してインストールする。

コンパイル済みの実行ファイルは
C:\msys64\home\アカウント名\ares\desktop-ui\out
とかにあるので実行して確認する。

※FF6の戦闘シーン、本来は32の経験値が15728672になってしまうのは
32 = 0x000020
16711712 = 0xFF0020
15728672 = 0xF00020
ゲーム中でどういう計算をしているかまではわかりませんが、割り算した商の上位が入るRDDIVHというレジスタがどんな計算をしていても値が必ず0xF0になってしまう不具合が起こっているようです。

Division – SNESdev Wiki
https://snes.nesdev.org/wiki/Division
IO ポート (メイン)/0x4200-0x421F – SNES Spec – atwiki(アットウィキ)
https://w.atwiki.jp/snesspec/pages/275.html#p4215

※2024/3/20
Imaha486さんからの指摘で値を0xFFから0xF0へ修正しました!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です