協力者求む:Wiiバーチャルコンソール「リブルラブル」解析

Wiiバーチャルコンソールアーケードのラインナップには、ナムコの名作
「リブルラブル」がリリースされています。

Wii NANDをダンプして、U8展開→Title00_bin_LZ.binをDSDecmpでLZ11展開して
得たファイルに対して、毎度おなじみmamedb.comを参照して、
CRCが一致するようにROM Masqueradeで解析すると、
とりあえず下記結果が得られました。

元ROM名 検出ステータス オプション
5b.rom DetectCRC:DA7A93C2 ADR:00020700 SIZE:00004000
5c.rom CRC not found
2c.rom DetectCRC:7C09E50A ADR:00028700 SIZE:00002000
8c.rom DetectCRC:A00CD959 ADR:00000000 SIZE:00004000 Odd
10c.rom DetectCRC:09CE209B ADR:00000000 SIZE:00004000 Even
5p.rom CRC not found
9t.rom CRC not found
lr1-3.1r DetectCRC:F3EC0D07 ADR:00020000 SIZE:00000100
lr1-2.1s DetectCRC:2AE4F702 ADR:00020100 SIZE:00000100
lr1-1.1t DetectCRC:7601F208 ADR:00020200 SIZE:00000100
lr1-5.5l DetectCRC:940F5397 ADR:00020300 SIZE:00000100
lr1-6.2p DetectCRC:A6B7F850 ADR:00020400 SIZE:00000200
lr1-4.3d DetectCRC:16A9166A ADR:00020600 SIZE:00000100

ここで足りない5c.romはアドレスC000より展開されるメインプログラム後半。
5p.romはgfx1(グラフィックROM)、9t.romはgfx2(グラフィックROM2)。

ちなみにWindows版リブルラブルもエミュレータベースですが、
グラフィックROMは既にメモリ空間に展開したフォーマットになっているようで、
サウンドエミュレーションは「WAVEファイル再生」による疑似実装で
ROMイメージを得ることは出来ません。

既に基板そのものが貴重品なので破壊してROMを吸うのは非現実的です。
ここでグラフィックROMを得るアプローチとして考えられるのは…
・Win版リブルラブルのLRCHR.ROMなどをMAMEソースを元にGFX復元するコードを組む
・リブルラブルのジャンク基板をダンプし、それを見比べながらVC版をコンバートする。
のいずれかでしょうか。

とりあえず長いこと解析してみましたが、ウチの技量では基板ナシでは無理っぽいです。
この意志を誰か引き継いでくださいまし…。

3DSクロス開発環境の構築

とりあえず3DS実機での実行環境とプログラミング環境は前回の記事を参照。
下記2つをブックマークに入れておくと幸せになれるかも。

gbatemp : Homebrew Development
3DS開発に関する情報収集はこのスレッドで。

EmuCR : Citra (上ほど最新版)
3DSエミュレータ(homebrew開発向け)の野良ビルド版。
hugefiles.netで”Download using download accelerator”のチェックを外して落とすのが無難。

そして前述のgbatempのスレッド4ページ目にある”3DS_Homebrew_nop90edition.zip”が
入門用としてかなり良い感じのテンプレートになっています。
zipを展開するとこんな感じ↓
nop90bin … ビルド後のhomebrew.elfを格納
lib … ライブラリ
obj … ビルド時のオブジェクトファイル
source … ココのmain.cなどをいじる。

 

とりあえずDevkitProとPythonにパスを通してない場合は build.bat を
テキストエディタで開いて下記の通りに修正
set path=%PATH%;C:\devkitPro\devkitARM\bin;C:\Python27
::python build.py
make
pause

そして、このテンプレートにはキー入力ルーチンも格納されているのでかなり参考になります。
試しにmain.cをテキストエディタで開いてこんな感じ↓に修正しても良いかも。
#include “main.h”
#include “memory.h”
#include “HID.h”
#include “utils.h”
#include “draw.h”
int main(){
  draw_string(“Hello,world!”,0,0,255,255,255, BOTTOM_FRAME0);
  return 0;
}
これで build.bat を実行して”Launcher.dat”が更新されれば成功。


これをSDカードに突っ込んで3DSで実行して、デバッグの都度に電源長押しで…
というのは大変なので、PCのエミュレータで動作検証できるようにしておきましょう。

先ほどのEmuCRで公開されている野良ビルド版『Citra』をダウンロード&展開し”citra_qtRelease.exe”を実行。
File → Load file.. でプログラムをロードするわけですが、Citraのビルドバージョンによっては
Launcher.datがまともに実行出来ないことも多々あります。
その場合はLauncher.dat生成前の homebrew.elf など生のELFイメージを読ませれば…
citra
こんな感じ。