2005/03/02 Text=Imaha486

プレイステーション2のBIOSを吸い出す


わーいわーい

・今回の記事に関連するサイト
PCSX2 プレイステーション2エミュレータ・DumpBios(詳細は後述)を公開

PS2DEV PS2 Programming (PS2Link / Bios dump util公開元)

oopo.net (PS2ClientのWin32ビルドexe公開元)

メモリジャグラーUSB(メモカブート環境構築のために使用)

Studio KAZAMA (PSUファイル編集ツール PSU File Manager作者様サイト)

0xd6.org (projects->PS1DRV "Independence" Exploit->Jules: Using the PS1DRV exploit with nPort)


概要

現在、最も有力(というよりもほぼ独擅場状態…)とされているPS2エミュレータ PCSX2。
このエミュレータはVer0.6まで互換BIOSを内蔵しており、実機BIOS無しでも簡単な動作確認程度は
行うことが出来たのですが、Ver0.7では項目が消滅してしまいました。

そのほうが作者としてはある程度の(迷惑な訪問者に対する)フィルタリングが可能ですし、
エミュレーション精度・速度の向上が可能なので都合が良いと思われますが、
恐らく今現在、各所エミュレータ解説サイトはその手の質問で困り果てているでしょう。

前置きはともかく、PCSX2で認識できる形式のBIOSを生成する方法の解説です。

大まかな手順

今回のPS2BIOS吸出し手順は、以下のような流れになります。

1.メモリジャグラーUSBとPCをリンクし、BIDATA-SYSTEMのイメージを吸い出す。
2.titlemanでTITLE.DBを生成してPSU File ManagerでPSUファイルに書き込み。
3.PS2LINKのIPCONFIG.DATを編集した後、PS2LINK.ELFをBOOT.ELFにリネームし、
 PSU File Managerで必要ファイル全てを書き込み。
4.メモカブートでPS2を立ち上げ、PS2LINKが通信待ちでストップした状態で、
 PCとLANケーブルで接続してPINGなどで通信を確認。
5.PC側でPS2Clientを実行し、dumpbios(pukko.elf)をPS2へ転送。
6.下位フォルダ tmp にbios.bin(4,194,304バイト)が生成されたら成功。
 PCSX2のbiosフォルダにコピーしてExecuteで動作を確認する。

1〜4の手順はSwapMagicを所有している方はメモリジャグラーUSBが無くとも、
CD-Rでブートすれば同じことができますが、私がSM持ってませんので。
またSCPH-50000以降の特定ロットは脆弱性が修正されておりメモカブートできません。
根性と気合とガッツでCD-Rから起動させてください。

BIOS吸出し成功報告リスト

SCPH-10000 「名も無き人」さん報告。PCカード型ネットワークユニット+CD-Rブート。
SCPH-18000 「Rare」さん報告。PCカード型ネットワークユニット+メモリジャグラーUSB使用メモカブート。
         また、PCSX2オフィシャルで公開されているDumpBios(mirror)での動作報告も頂きました。
SCPH-30000 「Az」さん報告。
SCPH-39000 「私」。エクスパンション・ベイ型ネットワークユニット+メモリジャグラーUSB使用メモカブート。
SCPH-50000 「PSxLP」さん報告。根性と気合とガッツでCD-Rブート。
SCPH-70000 「ひいろ」さん報告。SwapMagic3.3でCD-Rブート。内蔵LANボードでOK。

1.メモカブート版PS2Linkの構築

まず、適当にPS2側でフォーマットしたメモリーカードのBIDATA-SYSTEM(あなたのシステム設定ファイル)を
メモリジャグラーUSBで吸出し、ファイル名を BIDATA.PSU とでも付けて保存します。
0xd6.orgのUsing the PS1DRV exploit with nPortのページからWin32 Binary(titleman-win32.zip)を
ダウンロードして展開、titleman.exeが出力されることを確認。
パスの通ったフォルダへtitleman.exeをコピーして、コマンドプロンプト(DOS窓)を開いたら

>titleman -c
を実行するとカレントフォルダへ TITLE.DB というファイルが出力されます。
次にメモカブートのキーとなるPS1用ゲームソフトを適当に用意したら、
ゲームのパッケージの背の一番下もしくはCDのPSロゴ付近にある4文字+5文字の英数字を控えます。
(例えばASCIIのMOONの場合は SLPS01031 )
再びコマンドプロンプトで TITLE.DB へナンバーを書き込むコマンドを入力します。

>titleman -a SLPS_010.31
上記コマンドはMOONの例ですが、自身のキーディスクのナンバーに読み替えてください。
なおアンダーバーとドットの挿入を忘れず、英字部分がSLPSとは限らないことに注意しましょう。
心配な方はPS1のCDをPCのドライブに挿入すればメインプログラム名が大抵そのままなので、
プログラム名をコピペしても構わないでしょう。
この TITLE.DB はBIDATA.PSUと同じフォルダにコピーしておいてください。

続いてPS2DEVからPS2LINK(ps2link_1.24.zip)をダウンロードして展開し、
その中のISOイメージは無視してbinフォルダを開きましょう。
9つのファイルがありますが、extraとsystemを除いた、
IOMANX.IRX IPCONFIG.DAT PS2DEV9.IRX PS2IP.IRX PS2LINK.ELF PS2LINK.IRX PS2SMAP.IRX
の7つのファイルを吸い出したBIDATA.PSUと同じフォルダにコピーし、
PS2LINK.ELFをBOOT.ELFにリネームしてください。
また、BOOT.ELFは必ず半角英字大文字にしましょう(boot.elfのように小文字が入ると確実に失敗します)。
続いて、IPCONFIG.DATをメモ帳で開きましょう。

192.168.0.10 255.0.0.0 192.168.0.1
mc0:conf.dat

最初の1行の3つは単純にIPアドレス、サブネットマスク、ゲートウェイの3つですので、
環境に合わせて書き替えてください。
(うちの場合であればPCのIPアドレスが192.168.1.2なのでPS2側を192.168.1.10に変更。
サブネットマスクは255.255.255.0に変更)
2行目は特に変更しなくても問題は無いようです。

これらの手順でメモカブートとPS2LINKの実行に必要なファイルが揃いましたので、
次はBIDATA.PSUへ必要ファイル全てを書き込みます。
Studio KAZAMA様からPSU File Managerをダウンロードして同フォルダにコピーしてください。
コマンドプロンプトから下記コマンドを実行してください。

>psu a BIDATA.PSU TITLE.DB BOOT.ELF IOMANX.IRX IPCONFIG.DAT PS2DEV9.IRX PS2IP.IRX PS2LINK.IRX PS2SMAP.IRX
なが〜〜〜いコマンドですが一発で打ちきってください(むしろコピペで…)。
これでPSUファイルへメモカブート用のTITLE.DBとPS2LINKが書き込まれますので、
メモリジャグラーUSBでBIDATA.PSUをメモリーカードに書き込み、
PS2実機でメモカブートの起動確認を行ってください。
黒背景に白文字でコマンドが表示されたままストップすれば成功です。
PS2LINK
2.PC-PS2間 通信の確認とBIOS吸出しプログラムの転送

クロスケーブルもしくはハブ経由でPCとPS2を繋いだら、
コマンドプロンプトからPINGを飛ばして通信を確認してください。

>ping 192.168.0.10
(IPCONFIG.DATがデフォルトの場合)

これで

Reply from 192.168.0.10: bytes=32 time<10ms TTL=64
Reply from 192.168.0.10: bytes=32 time<10ms TTL=64
Reply from 192.168.0.10: bytes=32 time<10ms TTL=64
Reply from 192.168.0.10: bytes=32 time<10ms TTL=64
のメッセージようにReplyが返ってくれば正しく通信が行われています。
もしもtime outが発生してしまった場合は、環境を見直してください。

続いてoopo.netのconsoledevに ps2client.exe (win32) という名称で、Windows版の
PS2Clientが公開されていますのでこちらをダウンロードします。
他にも同様のツールで InLink という通信ツールがありますが、環境によっては、
さっぱり使えない(起動した瞬間強制終了する)ようで、私も直撃でした。

さらにPS2DEVからBios dump util(dumpbios.zip)…を、落としてもソースコードだけです。
PS2DEVをちゃんと目を通せば開発環境を構築できるので気合でコンパイルしてください、
…と言いたいところですが、コンパイル済みpukko.elfを用意しましたのでこちらを使ってください。
なお、元のpukko.cは出力フォルダ作成に失敗してコケる現象が見られたので、
実行フォルダ上へBIOSを出力するように修正しています。

コマンドプロンプトで今回の作業用のディレクトリに移動して、下記コマンドを入力してください。
(IPアドレスの値は言うまでも無く、環境に合わせて変更してください)。

>ps2client -h 192.168.0.10 execee host:pukko.elf
これでPS2側へpukko.elfが転送され、LAN経由でbios.binを吸い出します。
余談ですが、PS2LINKにはメモリダンプ機能があるようなので、
>ps2client -h 192.168.0.10 dumpmem host:bios.bin 0xbfc00000 0x400000
でもうまくいける気がしたんですが、サッパリ駄目でしたねぇ。

とりあえず吸い出している間のPS2側はこんな表示です。
biosdump
しばらくしてサブフォルダ c に生成された bios.bin が4,194,304バイトになり、
Bios dumpのステータスが Done. になれば完了です。
PS2の電源を落とし、コマンドプロンプトを閉じて終了してください。
(LANボードの設定次第では数十分かかることがありますが正常であれば十数秒で終わります)。

2005/03/02追記〜PCSX2オフィシャルサイトで公開されているDumpBios(mirror)の場合

ダウンロード後に展開してから、pukko.elfと同様に

>ps2client -h 192.168.0.10 execee host:dumpbios.elf
これでプログラムが転送されます。
吸出しのときのPS2本体の出力映像は、
DUMPBIOS画面
このような感じです。
ただし、pukko.elfと違い吸出しが完了しても制御が戻りません。
PS2側が上画像のように全て「Complete ok」になっていれば吸出しは終わっていますので、
PS2ClientはCTRL+CもしくはDOS窓を閉じて終了し、PS2は電源を切ってください。

この作業で以下のファイルが作成されます。
SCPH-39000_BIOS_V7_JAP_160.BIN…BIOSイメージ:4,194,304バイト
SCPH-39000_BIOS_V7_JAP_160.EROM…EROM(拡張データ):1,835,008バイト
SCPH-39000_BIOS_V7_JAP_160.NVM…NVM(ユーザ設定情報):1,024バイト
SCPH-39000_BIOS_V7_JAP_160.ROM1…ROM1(機種固有情報):262,144バイト
SCPH-39000_BIOS_V7_JAP_160.ROM2…ROM2(未使用?):262,144バイト
今後、PCSX2でこれらの情報を使用することでエミュレーション精度が向上する可能性があります。
pukko.elfは使われなくなるかもしれません。

3.チェックする

BIOSが正常にダンプされたかをチェックするツールも存在しているのですが、
せっかくですからPS2エミュレータで動作チェックです。
PCSX2のサブフォルダ bios へ吸い出した bios.bin をコピーしてから起動し、
Configのbios欄へ自分のPS2の型番が表示されているか確認しましょう。

正しく表示されていればそのまま選択して他のプラグインも設定し、
メニューから Run→Execute を選びましょう。
起動ロゴがPC上で再現される様子は圧巻ですよ〜♪
ブート画面

ちなみに、ほんの少しですがPCSX2での動作不具合を修正するパッチファイルを、
[Downloads]/PS2のコンテンツで公開していますので、そちらもご覧下さいな。

吸い出すだけでは満足できない方へ

ノーサポートではありますが、DCエミュレータChankast用改造コードサーチツール DreamHaste の
サーチエンジンを応用(99%流用)して、暫定的にPCSX2用改造コードサーチツールを作りました。
>>PCSX2サーチツールPhaste(PlayHaste)

BIOSを吸い出すほどのチャレンジャーであれば説明することは何もありません。
ひたすらサーチできるゲームを探してみてください。
(「もじぴったん」「グラディウスIII & IV」でのサーチ成功を確認済み)

↓グラディウスIIIで、プレイヤーパワーメーターをサーチした様子
グラディウスIII改造

なお、PCSX2 Ver0.6でも動きますがHLE BIOSではサーチできませんでした。
(BIOSを読み込んだ際のヘッダ領域を基準にサーチするので当然ですが)。

最後に

最後に言うのも何ですが、当テキストはPCでPS2のゲームをやりたい人を対象に書いていません。
現状のPS2エミュレータは発展途上であり「動かす」ことが目的です。
BIOSイメージを吸い出した後にどうするか?を考えてから試すことをオススメします。

でもまあ、私のようにBIOSブート画面が見れるだけでワクワクする人ならば、
きっと満足することでしょう。