HOME BACK

88PARのススメ
(IEじゃないと何故かtable表示が崩れるようです)
◆ 88PARとは ◆
88PARとは、P88SRの作者であるぶるー氏KAJA氏が提唱したPro Action Replay準拠の改造コードフォーマットで、一般的にはcheat codeなどと呼ばれているものです。
cheat codeというのは、その名の通り「騙す(ズルをする)コード」のことで、これを入力することにより、ROMデータやディスクイメージを改変することなく、ROMのパッチ当て・無敵化・最強化・高速化・プロテクト無効化などを実現することが出来るという優れものです。
原理はコードの規則に則ってメモリを監視し、書き換えるといった単純なものですが、その効力は絶大なものを誇ります。(某○inal ○antasy 8や○○ローグの対MODチッププロテクトもcheat codeで何とかすることも出来てしまう)
cheat codeの歴史は意外と古く、数年前に外国で発売されたAction Replayと呼ばれるATARI用の改造コード入力専用アダプタが最初とも言われていますが、定かではありません。
Action Replayの他にも、Gold FingerX-TERMINATORなどと呼ばれる同様のコードがありますが、日本ではDATEL社Pro Action Replay(以下PAR)用コードが最も一般的であると言えると思います。

さて、ここで88PARの解説に戻ります。88PARコードのフォーマットは、ProActionReplay(1・2)コードと同じく、
命令コード
2文字(1byte)
RAM/ROM選択用コード
2文字(1byte)
対象アドレス
4文字(2byte)
(空白)(1文字)
4文字(2byte)
という16進数の6byte(13文字)から成っています。(99/03/30日現在)
詳しくはP88SRに同梱されているPATCH.DOCを読んでもらうのが一番早いのですが、以下に簡単に各コードの説明をします。




◆ 88PARフォーマット ◆
命令コード
< 8bit命令群 >
コード内容解説
308bit即値書込指定したアドレスに8bitの値(下2桁)を代入し続けます。
108bit加算指定したアドレスに8bitの値(下2桁)を加算し続けます。
118bit減算指定したアドレスから8bitの値(下2桁)を減算し続けます。
E08bit同値比較指定したアドレスの値と8bitの値(下2桁)が同値であった場合、次のコードが有効になります。
E18bit非同値比較指定したアドレスの値と8bitの値(下2桁)が同値でなかった場合、次のコードが有効になります。
E28bit小なり比較指定したアドレスの値が8bitの値(下2桁)より小さい値であった場合、次のコードが有効になります。
E38bit大なり比較指定したアドレスの値が8bitの値(下2桁)より大きい値であった場合、次のコードが有効になります。
< 16bit命令群 >
コード内容解説
8016bit即値書込指定したアドレスに16bitの値(4桁)を代入し続けます。
2016bit加算指定したアドレスに16bitの値(4桁)を加算し続けます。
2116bit減算指定したアドレスから16bitの値(4桁)を減算し続けます。
D016bit同値比較指定したアドレスの値と16bitの値(4桁)が同値であった場合、次のコードが有効になります。
D116bit非同値比較指定したアドレスの値と16bitの値(4桁)が同値でなかった場合、次のコードが有効になります。
D216bit小なり比較指定したアドレスの値が16bitの値(4桁)より小さい値であった場合、次のコードが有効になります。
D316bit大なり比較指定したアドレスの値が16bitの値(4桁)より大きい値であった場合、次のコードが有効になります。

RAM/ROM選択コードアドレス
コードRAM/ROM
00メインRAM
01N88BASIC ROM
02高速RAM
03サブCPU RAM
04サブCPU ROM
05NBASIC ROM
06NBASIC ROM
07N88BASIC ROM
08E0-ROM
09E1-ROM
0AE2-ROM
0BE3-ROM
0C拡張RAM-bank0
0D拡張RAM-bank1
0E拡張RAM-bank2
0F拡張RAM-bank3
範囲
0000-FFFF
0000-5FFF
F000-FFFF
4000-7FFF
0000-1FFF
6000-7FFF
0000-5FFF
6000-7FFF
6000-7FFF
6000-7FFF
6000-7FFF
6000-7FFF
0000-7FFF
0000-7FFF
0000-7FFF
0000-7FFF

任意
(ただし8bit命令は下位8bitのみ)
※比較系コードは、複数の比較条件を設定可能です。
その際、いずれかのコードがマッチしない場合は、代入系コードが現れるまでスキップされます。
例:
D002FE86 0F7A
E100BE10 00C9
3000BF05 0050
E200BE10 00B8
80036000 6F01
80036002 0000
このコードを簡単に示すと以下のようになります
[1]「高速RAM」のアドレス「FE86」の値が「0F7A」であるか?
Yesなら[2]へ Noなら[4]へ
[2]「メインRAM」のアドレス「BE10」の値が「C9」でないか?
Yesなら[3]へ Noなら[4]へ
[3]「メインRAM」のアドレス「BF05」に「50」を代入。
[4]へ
[4]「メインRAM」のアドレス「BE10」の値が「B8」より小さいか?
Yesなら[5]へ Noなら[6]へ
[5]「サブRAM」のアドレス「6000」に「6F01」を代入。
[6]へ
[6]「サブRAM」のアドレス「6002」に「0000」を代入。
[7]へ
[7]コード終了



◆ 88PARコードの発見方法 ◆
これには様々な方法があると思います。PC-98x1/98V等を持っていて、P88SRが使える環境があるならばP88SRのデバッグモードを使うのが最適でしょう。
P88SRのデバッグモードにはメモリダンプ出力機能があるので、HP最大化などはダメージを受ける前と受けた後のダンプをfc /bとでもして比較すれば割合簡単にHPが収められているアドレスが見つかるでしょう。あとはそのアドレスをMAXで固定するように、8000xxxx ffffというかんじのコードを用意すれば良いだけです。簡単ですね:)
もう一つ、パラメータを最大で固定するのではなく、ルーチンを書きかえる無敵化の方法を示します。同様にメモリダンプを出力した後、適当なZ80逆アセンブラにかけます。あとはDEC (HL)などのそれっぽい命令を探しましょう。その命令を潰してもフラグ等の変化が他のルーチンに影響を及ぼさないかどうかを確認したら、そのアドレスをNOPやRETにでもするコードを書けばOKです。こちらも簡単ですね:)
さて、ではP88SRが使えず、Windows環境しかない人はどうしたら良いでしょう。そういう方はデバッグ機能の付いたManuke氏作のX88000を使うのがスマートです。X88000にはダンプ出力機能の他、逆アセンブル機能・トレース機能なども付いてますので、うまく使えば簡単に該当アドレスを見つけ出すことが出来ます。X88000でコードを見つけた後は、W88で動作確認をしましょう。
コードを見つけたら、KAJA氏のサイトに88PARコード登録所がありますので登録しましょう。
さあ、これで君もみんなの人気者ダ!


HOME BACK