- 05
PSPにセーブステート・ロードステートの機能をつけるTeamM33製プラグイン、PspStates Experiment v2。
長いreadmeでは恒例の翻訳企画です。
なかなか使えそうなプラグインなのでまた別に「活用講座」として解説しようと思います。
※意訳・および原文にはない見栄え上の装飾などが多数あります。
※丁寧に訳したつもりですが誤訳もあると思いますので、目安としてお使いください。
※原文についてはスペースの都合上掲載できません。プラグインに同梱のものをご覧ください。
原文の文面等の著作権についてはTeamM33に帰属します。
(翻訳にも発生するのかな……?一応私にあるのか?)
PspStates Experiment for PSP SLIM
Dark_AleX.org
PspStates Experiment v2 for PSP SLIM
■V2での更新内容
- インタースレッドコードの重要な不具合を修正
(信号が中断の不具合によってウェイトしなかった問題)
特定の場合においてロードステートが完全に読み込みできない不具合が修正されます。
この不具合ではロード後にブラックスクリーン(ステートをセーブしない限り、ステートはRAMに保存されます)が発生したり、さらには中途半端なロードによりゲームが動作しない可能性があります。- ゲームの基礎部分に関するステートを追加しました。
これの制御は少し異なり、従来の制御はゲームのローカルのセーブステート/ロードステートをしますが、新たにSELECTボタンを追加することでグローバルステートを読み込むようになります。詳しくは下へ。- すぐに通常のスリープモードが発生する不具合を修正しました。
- UMDディスクのゲームやUMDモードでのNo-UMD機能に対応しました。
ただし、空の状態のumdcacheを必要とするため、1ファイルをPSP本体に書き込む必要があります。
注意:前のバージョンのものが全体的なものであり、追加された機能はSELECTボタンで実行する必要があります。
また、前のバージョンでセーブされたステートのロードをする際、新バージョンのRAM内のプラグインが古いファイルを読み込むことになります。
ですから、古いセーブステートは削除することを推奨します。
プラグインを使い始める前にこのreadmeをよく読んでください。
このバージョンのreadmeには前回のものと若干異なる部分があります。
注意:開発者は、このソフトによって被った、いかなるユニットやデータの消失(ゲームデータの消失を含む)においても、その責任を負うことはありません。
これはフリーソフトとして私が配布するすべてのソフトにおいて言えることですが、今回はこうしてわかりやすく示しておきたいと思います。
プラグインを使用する前に、重要なデータの消失に備え、使用するPSPのNANDとメモリースティック内の重要なデータのバックアップを行うことを強く推奨します。
明確にしておきますが、この機能はM33 CFWの機能の一部とはならず、プラグインとしてのみリリースする予定です。
このソフトは実験的なものであり、正常に動作しなかったりまったく動作しないことがあります。
■必要なこと
- 4.01 M33(1or2)がインストールされていること
- より上質なメモリースティックの使用を推奨します。
劣悪なメモリースティックでは、本当に、ステートのロードやセーブが遅くなります。
■インストール
同梱のsepluginsフォルダをms0:/にコピーしてください。
(SAVESTATEフォルダは空ですが、ソフト側で自動生成しないため、一緒にコピーしてください)
リカバリーメニューでプラグインを有効にします。
このプラグインは現在GAME内でのみ動作します。POPSやVSH(XMB)では使用しないでください。
もしこのプラグインをUMDゲームやノーマルモードのNo-UMD機能時に使用する場合は、
同梱のumdcache.prxをflash0:/kd/に書き込む必要があります。
XMB内の「UMDキャッシュ」機能はおそらくちゃんと動作しないので、このファイルを書き込んだ方が安全です。
もちろんUMDキャッシュ機能は使用できなくなります。
なお、このファイルはSONYのファイルと同じ名前なだけのただのダミーのモジュールですので、権利等は発生しません。
■セーブステートの使用方法
- ステートをセーブするには、ゲーム中でHOMEボタンを押し、終了メニューが表示されているときに、Rトリガーと十字キー上下左右、□△×○、STARTボタンのいずれかのボタンを同時に押します。
それぞれのボタンは「スロット」とみなされますので、最大で9つのステートを保存することが出来ます。- 前のバージョンとは違い、今回は「ローカル」のステートと「グローバル」のステートが存在します。
ローカルのステートはそのセーブしたゲームでのみロードすることが出来ますが、グローバルステートはハードウェア上可能な限り(UMDスロットに同じディスクが入っている、またはアドレスが同じISOである)他のどのゲームでもロードすることが出来ます。
- ローカルステート:(通常の操作)終了メニュー画面中にRトリガー+任意のスロットボタンを押します。
- グローバルスロット:終了メニュー画面中にRトリガー+SELECTボタン+任意のスロットボタンを押します。
- このとき、PSPは自動的にスリープモードになります。
- スリープモードから復帰した際、数秒間画面が真っ暗になりますが、あせらずに解けるまで待ってください。
ブラックスクリーン復帰までの時間はゲームやCPUの速度に影響されます。
(このときプログラムはRAMをある場所から別の場所にコピーしています。)- 画面が再び付いたとき、数秒間にわたりメモリースティックのアクセスランプが点滅します。
(ファイルを書き込んでいます。メモリースティックが上質ならば、これはすぐに終了します。)- ステートがセーブされ、ゲーム中や後で同じゲームを起動したときに読み込むことが出来ます。
(もしメモリースティックが同じまたは似た内容であった場合は、ゲーム起動中に他のステートを読み込むことも出来ます。)
ステートは以下のファイルのうちいずれかに保存されます
・グローバルステート
ms0:/seplugins/SAVESTATE/globalstate_u.bin …… 十字キー上
ms0:/seplugins/SAVESTATE/globalstate_d.bin …… 十字キー下
ms0:/seplugins/SAVESTATE/globalstate_l.bin …… 十字キー左
ms0:/seplugins/SAVESTATE/globalstate_r.bin …… 十字キー右
ms0:/seplugins/SAVESTATE/globalstate_q.bin …… □
ms0:/seplugins/SAVESTATE/globalstate_t.bin …… △
ms0:/seplugins/SAVESTATE/globalstate_x.bin …… ×
ms0:/seplugins/SAVESTATE/globalstate_c.bin …… ○
ms0:/seplugins/SAVESTATE/globalstate_s.bin …… START
・ローカルステート
ローカルステートの場合、UMDやISO起動時にはゲームコード、
自作アプリであれば自作アプリのフォルダ名の頭から9文字がファイル名に付与されます。
例:
ms0:/seplugins/SAVESTATE/ULES00818_u.bin …… 十字キー上
……
ms0:/seplugins/SAVESTATE/ULES00818_s.bin …… START
ステートファイルのサイズは、ゲームによって大きく変化します。(36MBの圧縮された展開ファイルです)
テストの結果では、およそ10〜20MBの大きさになることが多いようです。
プラグインが空きスペースをチェックすることはありませんので、自分で確保しておいてください。
ローカルステートとグローバルステートは同じ形式です。
ローカルとグローバル間の変換は、ちゃんとしたファイルネームにリネームするだけで行えます。
■ロードステートの使用方法
- ロードステートを使用するときは、ゲーム中にHOMEボタンを押し、終了メニューが表示された後、
ローカルステートであればL+スロットのボタン、グローバルステートならばL+SELECT+スロットのボタンを押します。- このとき、メモリースティックのアクセスランプが点滅します。上質なメモリースティックであればこの時間は短縮されます。
- この操作の後、PSPは一度スリープモードになり、すぐに自動で復帰します。
- 画面が真っ暗になりますが、ステートのセーブ時よりは早く復帰します。
- 画面がもとにもどると、プラグインがうまく動作すれば、ステートセーブ時の状態になるでしょう。
■コメント
- 現在のリリースは4.01 M33専用です。
プラグインのアップデートがない限り、これは将来のファームウェアでは動作しないでしょう。
(そのファームウェアの構造が4.01とよく似ている場合は別ですが)- より速い動作のため、VshMenuかリカバリーメニューでゲーム中のCPU速度を333MHzにすることを推奨します。
- グローバルステートでは、ステートを他のUMDやISO、自作アプリから読み込むことが出来ますが、
ISOが同じメモリースティックに入っている、もしくは似たようなパスである必要があります。UMDの場合は、同じディスクである必要があります。
ステートセーブ後は、ISOや自作アプリのファイル名・フォルダ名などを変更しないでください。- ロードステートは[保存時のすべての状態]を読み込もうとします。
たとえば、プラグインXを有効、プラグインYを無効にし、March33モードでISOをプレイ中にステートをセーブしたとします。
その後、プラグインXを無効、プラグインYを有効にし、NP9660モードで同じゲーム(違うゲームでもかまいませんが)をプレイしています。
この状態でセーブしたステートをロードすると、ロードステートは保存されたときと同じMarchM33モードやプラグインの状況をも読み込みます。
ステートのロード時にはこのプラグイン自身も再読み込みの対象になるので、古いバージョンで保存していた場合は「プラグインの自動ダウングレード」が発生します。
この問題に関しては後ほど再び触れます。- このプラグインは、新型PSPの拡張メモリを使用するすべての自作アプリ・プラグインと互換性をもちません。
このプラグイン自体は拡張メモリ使用時でも使用できますが、そのようなアプリ・プラグインは使用しないことを強く推奨します。
■互換性について
※PSP表裏オリジナル図です
- システムソフトウェア自体のバージョン間互換:
技術的な問題から対応することはできません。将来、たとえば4.10 M33のステートプラグインで4.01 M33のセーブステートを読み込もうとすると、たとえプラグインが4.10に対応していてもロードに失敗するでしょう。- 同じバージョンでの、M33ファームウェアのナンバリング間互換(4.01 M33-1,M33-2,M33-3間など):
特に問題はありません。ちなみに、古いバージョンでのステートをロードすると、XMBに戻るまでの間、RAM上で一時的なダウングレードが行われます。- プラグインのバージョン間互換:
まだ実験段階のプラグインなので、将来ステートのデータ形式を変更する可能性があります。
また、たとえ形式が変わらなくても、「プラグイン自動ダウングレード」問題が発生します。
(v1で保存したステートをv2でロードしても、ロード後のRAM上のプラグインはv1に戻ってしまいます)- PSPの本体間互換:
おそらく、別のPSPでステートを読み込むことは避けた方がいいと思います……本体が間違った動作をしたり、データが失われる可能性があるからです。
開発中に行ったテストでは、PSP-a(TA-085)でセーブしたステートを別のPSP-b(TA-085v2)で読み込むと、一見通常通り動作しているかのように見えましたが、アナログパットでの操作がうまく動作しませんでした。
この問題が基盤の違いによるものなのかほかのまだわからない原因によるものなのかはわかりません。
自分でより動作確認をしてみたいという方は自己責任においてやっていただいてかまいませんが、以下のことに注意してください:
- 機能的な問題
本体を出来るだけセーブ時と同じ状況にしてください。
ISOや自作アプリは同じファイル名・同じパスにし、セーブ時に有効にしていないプラグインは使用しないでください。- プライバシー問題
現在、セーブデータは普通のテキスト形式か、WEPキーやWPAキーで圧縮された状態になっています。
また、もしXMBがRAMをちゃんと開放していない場合、保存したステートが余計な情報(XMB上で再生したコンテンツのファイル名や、バイナリデータなど)を含む可能性があります。
この情報はコンピュータ上のツールを使って再現することが出来るものです。- 法的問題
セーブしたステートはSONYのカーネル情報やゲームのコードなどを含んでいますので、ネット上に公開したりして共有することは違法となります。
■FAQ
Q. なぜ新型PSP専用なんですか
A. 現在のプラグインでは、新型PSPの拡張メモリを使用しています。
ステートを読み込む前にファイルの読み込みが行われているとき、その間はファイルの書き込みが遅延されます。
これは、本体のカーネルが使用されていない状況で使えるような優秀なメモリースティックのドライバが存在しないためおこります。
DCで使用されているような(これはかなり動作が遅いのですが)メモリースティックのドライバがあれば、もちろん旧型で使用できるようにします。
メモリースティックのDMAコードが解析されるまでは、旧型PSPで使用することはで来ません。
Q. ステートセーブ後に音声がでなくなりました
A. たった今セーブしたばかりのステートをもう一度読み込んでみてください。
これはいくつかのゲームで発生するようで、確信を持っては言えませんが、
テスト結果から見るにおそらくファイルの書き込み時に原因があるようです。
現在のものでは、プラグインによるスリープモードコードから復帰した際にステートのセーブを行い(RAMから一時的なファイルに)、
その後通常のスリープモードが実行されます。そして、システムが安定したときにファイルが書きこまれます。
どうやら、ゲームやSONYのコードの中にそのように大きなファイルを書き込むのに不都合なものがあるようで、
それが実行されることによるものであるようです。
模試いつか、メモリースティックドライバのDMAコードが解析されれば、この問題も解消されるでしょう。期待しててください^^
Q. もし存在しないステートをロードしようとするとどうなりますか?
A. もしロードするファイルが存在しない場合、最後に読み込んだステートか現在の状態が、RAMに残ったままの状態であったようにロードされます。
もしそれ以前にステートをロードしたりセーブしたりしていない場合は、画面が真っ暗になります。
■サードパーティライセンス
このプログラムは、MITライセンスでリリースされているFastLZライブラリを使用しています。
このライブラリのライセンスはfastlz_licenseフォルダ内で確認できます。
コメント
コメントの投稿
トラックバック
- トラックバックURL
- http://winterwind.blog119.fc2.com/tb.php/205-2970a898
- クイックトラックバック(FC2ブログ)
カテゴリ:

















