HP(゚∀゚) > KAIZO(´∀`) > KAISEKI(^w^)

CWCWIKIを訳したもの

*==IJIROCONVETOR対応
連続書き込み*(0x0,0x1,0x2)
シリアル*(0x4,0x8)
加減算*(0x3)
判定(0xD)
複数行判定(0xE,0xD)
論理演算*(0x7)
ポインタ*(0x6)
ANDパッド*(0xD)
コピー*(0x5)
ストッパー(0xC)
タイム(0xB)
多重ポインタ*(FC専用,0x6)
サブルーチン+暗号(CMF専用,0xF)
復元*(CMF専用,0xC|TEPMPARAUTOOFF専用)
0x3FFCパッド(CWC/FC伊次郎専用,0xD)
単精度浮動小数加算(FC伊次郎専用,0x3060)
コードフリーク専用(M)
コードフリークバイナリ構成(UTF16BE)
#PSPエミュレーターJPCPSSVNソースに書いてあります,0x8はコード処理が間違っており使えません,シリアル分解するかEMUHASTEを使ってください
うpでーとでだいたい対応したっぽい,ポインタオプションがだめだけど。
追記;emuhateがJPCPSに対応したのでこちらを使ってもCWCコードが使えるようです,PSPARならプラグインをDLして入れて下さい。

[連続書き込みコード]
8-bit連続書き込み REALCWC
0x0aaaaaaa 0x000000dd
アドレスaaaaaaa+0x8800000に値ddを書き込み続ける

16-bit連続書き込み REALCWC
0x1aaaaaaa 0x0000dddd
アドレスaaaaaaa+0x8800000に値ddddを書き込み続ける

32-bit連続書き込み REALCWC
0x2aaaaaaa 0xdddddddd
アドレスaaaaaaa+0x8800000に値ddddddddを書き込み続ける


[加減算コード]
8-bit加算 REALCWC
0x301000nn 0x0aaaaaaa
アドレスaaaaaaa+0x8800000の値にnn加算し続ける

8-bit減算 REALCWC
0x302000nn 0x0aaaaaaa
アドレスaaaaaaa+0x8800000の値にnn減算し続ける

16-bit加算 REALCWC
0x3030nnnn 0x0aaaaaaa
アドレスaaaaaaa+0x8800000の値にnnnn加算し続ける

16-bit減算 REALCWC
0x3040nnnn 0x0aaaaaaa
アドレスaaaaaaa+0x8800000の値にnnnn減算し続ける

32-bit加算 REALCWC
0x30500000 0x0aaaaaaa
0xnnnnnnnn 0x00000000
アドレスaaaaaaa+0x8800000の値に符号拡張されたnnnnnnnnで加算し続ける

32-bit減算 REALCWC
0x30600000 0x0aaaaaaa
0xnnnnnnnn 0x00000000
アドレスaaaaaaa+0x8800000の値に符号拡張されたnnnnnnnnで減算し続ける


[判定コード]
16-bit一致 REALCWC
0xDaaaaaaa 0x0000dddd
アドレスaaaaaaa+0x8800000の値がddddと一致するとき実行する

16-bit不一致 REALCWC
0xDaaaaaaa 0x0010dddd
アドレスaaaaaaa+0x8800000の値がddddと一致しないとき実行する

16-bit比較小 REALCWC
0xDaaaaaaa 0x0020dddd
アドレスaaaaaaa+0x8800000の値がddddより少ないとき実行する

16-bit比較大 REALCWC
0xDaaaaaaa 0x0030dddd
アドレスaaaaaaa+0x8800000の値がddddより大きいとき実行する

8-bit一致 REALCWC
0xDaaaaaaa 0x200000dd
アドレスaaaaaaa+0x8800000の値がddと一致するとき実行する

8-bit不一致 REALCWC
0xDaaaaaaa 0x201000dd
アドレスaaaaaaa+0x8800000の値がddと一致しないとき実行する

8-bit比較小 REALCWC
0xDaaaaaaa 0x202000dd
アドレスaaaaaaa+0x8800000の値がddより少ないするとき実行する

8-bit比較大 REALCWC
0xDaaaaaaa 0x203000dd
アドレスaaaaaaa+0x8800000の値がddより大きいとき実行する


[複数判定コード、nnn=1の時は0xDと同じ]
16-bit一致 REALCWC
0xE0nndddd 0x0aaaaaaa
アドレスaaaaaaa+0x8800000の値がddddと一致するとき下のnnn行分のコードが実行される

16-bit不一致 REALCWC
0xE0nndddd 0x1aaaaaaa
アドレスaaaaaaa+0x8800000の値がddddと一致しないとき下のnnn行分のコードが実行される

16-bit比較小 REALCWC
0xE0nndddd 0x2aaaaaaa
アドレスaaaaaaa+0x8800000の値がddddより少ないとき下のnnn行分のコードが実行される

16-bit比較大 REALCWC
0xE0nndddd 0x3aaaaaaa
アドレスaaaaaaa+0x8800000の値がddddより大きいとき下のnnn行分のコードが実行される

8-bit一致 REALCWC
0xE1nn00dd 0x0aaaaaaa
アドレスaaaaaaa+0x8800000の値がddと一致するとき下のnn行分のコードが実行される

8-bit不一致 REALCWC
0xE1nn00dd 0x1aaaaaaa
アドレスaaaaaaa+0x8800000の値がddと一致するとき下のnn行分のコードが実行される

8-bit比較小 REALCWC
0xE1nn00dd 0x2aaaaaaa
アドレスaaaaaaa+0x8800000の値がddより少ないとき下のnn行分のコードが実行される

8-bit比較大 REALCWC
0xE1nn00dd 0x3aaaaaaa
アドレスaaaaaaa+0x8800000の値がddより大きいとき下のnn行分のコードが実行される

アドレス比較一致 REALCWC
0xDaaaaaaa 0x4bbbbbbb
0x000000nn 0x0000000Y
アドレスaaaaaaa+0x8800000にある値とアドレスbbbbbbbに値を比較する?一致n =行数  Y =0(8bit), 1(16bit), 2(32bit)

アドレス比較不一致 REALCWC
0xDaaaaaaa 0x5bbbbbbb
0x000000nn 0x0000000Y
アドレスaaaaaaa+0x8800000にある値とアドレスbbbbbbbに値を比較する?不一致 n =行数  Y =0(8bit), 1(16bit), 2(32bit)

アドレス比較小 REALCWC
0xDaaaaaaa 0x6bbbbbbb
0x000000nn 0x0000000Y
アドレスaaaaaaa+0x8800000にある値とアドレスbbbbbbbに値を比較する?少ないn =行数  Y =0(8bit), 1(16bit), 2(32bit)

アドレス比較大 REALCWC
0xDaaaaaaa 0x7bbbbbbb
0x000000nn 0x0000000Y
アドレスaaaaaaa+0x8800000にある値とアドレスbbbbbbbに値を比較する?大きい n =行数  Y =0(8bit), 1(16bit), 2(32bit)

[論理演算コード]
8-bit OR REALCWC
0x7aaaaaaa 0x000000vv
アドレスaaaaaaa+0x8800000の値とvvの論理和を書き込む

8-bit AND REALCWC
0x7aaaaaaa 0x000200vv
アドレスaaaaaaa+0x8800000の値とvvの論理積を書き込む

8-bit XOR REALCWC
0x7aaaaaaa 0x000400vv
アドレスaaaaaaa+0x8800000の値とvvの排他的論理和を書き込む

16-bit OR REALCWC
0x7aaaaaaa 0x0001vvvv
アドレスaaaaaaa+0x8800000の値とvvvvの論理和を書き込む

16-bit AND REALCWC
0x7aaaaaaa 0x0003vvvv
アドレスaaaaaaa+0x8800000の値とvvvvの論理積を書き込む

16-bit XOR REALCWC
0x7aaaaaaa 0x0005vvvv
アドレスaaaaaaa+0x8800000の値とvvvvの排他的論理和を書き込む


[ポインタコード] REALCWC
8-bit書き込み
0x6aaaaaaa 0x000000vv
0x00000001 0xiiiiiiii
アドレスaaaaaaa+0x8800000に入ってる値を基準アドレスとし値vv
を基準アドレス+iiiiiiiiに書き込む
※基準アドレスが00000000の場合実行されない。

16-bit書き込み
0x6aaaaaaa 0x0000vvvv
0x00010001 0xiiiiiiii
アドレスaaaaaaa+0x8800000に入ってる値を基準アドレスとし値vvvv
を基準アドレス+iiiiiiiiに書き込む

32-bit書き込み
0x6aaaaaaa 0xvvvvvvvv
0x00020001 0xiiiiiiii
アドレスaaaaaaa+0x8800000に入ってる値を基準アドレスとし値vvvvvvvv
を基準アドレス+iiiiiiiiに書き込む

8-bit書き込み(オフセマイナス)
0x6aaaaaaa 0x000000vv
0x00030001 0xiiiiiiii
アドレスaaaaaaa+0x8800000に入ってる値を基準アドレスとし値vv
を基準アドレス-iiiiiiiiに書き込む

16-bit書き込み(オフセマイナス)
0x6aaaaaaa 0x0000vvvv
0x00040001 0xiiiiiiii
アドレスaaaaaaa+0x8800000に入ってる値を基準アドレスとし値vvvv
を基準アドレス-iiiiiiiiに書き込む

32-bit書き込み(オフセマイナス)
0x6aaaaaaa 0xvvvvvvvv
0x00050001 0xiiiiiiii
アドレスaaaaaaa+0x8800000に入ってる値を基準アドレスとし値vvvvvvvv
を基準アドレス-iiiiiiiiに書き込む

追加オプション
0x6aaaaaaa 0xvvvvvvvv
0xqqqtnnnn 0xiiiiiiii
0x00000000 0x00000000
nnnn>1のときポインタアドレスをqqq*4分ずらす,基準アドレスn=[aaaaaaa+0x8800000+4(nnnn-1)*qqq]となる。 nnnnアドレス分実行される。

0x6aaaaaaa 0xvvvvvvvv
0xqqqtnnnn 0xiiiiiiii
0x9sssssss 0xwwwwwwww
nnnn>1のときオフセットiiiiiiiiからssssss*4(32bit以外は他のシリアルと同じ)
ずつずらしながら書き込む。vvvvvvvvもwwwwwwww分ずつ増加して書き込まれる。

0x6aaaaaaa 0xvvvvvvvv
0xqqq00002 0xiiiiiiii
0x1sssssss 0x00000000
基準アドレス1(=[aaaaaa+0x8800000])+iiiiiiiiにある値を
基準アドレス2(=[aaaaaa+0x8800000+qqq*4])+ssssssssに
vvvvvvvv分だけコピー
※CMFのみ基準アドレスが00000000の場合フリーズする

多重ポインタ
0x6aaaaaaa 0xvvvvvvvv
0xqqqt000n 0xzzzzzzzz
0xSiiiiiii 0xSjjjjjjj
....
0xSsssssss 0x00000000
aaaaaaa+0x8800000=ポインタアドレス、第1ベースアドレスがあるところ,qqq*4=ポインタオフセット
t=最後に書き込むbit数、CWC参照
n=追跡する回数、ベースアドレスを読み込む回数
vvvvvvvv=書き込む値
S=オフセットの+/- 2でプラス、3でマイナス
iiiiiii=第1ベースに+/-するオフセット
jjjjjjj=第2ベースに+/-するオフセット
sssssss=第(nn-1)ベースに+/-するオフセット
....
zzzzzzzz=最後+/-するオフセット(tに依存)

第1ベースアドレス=aaaaaaa+0x8800000にある値
第2ベースアドレス=第1ベースアドレス+/-iiiiiiiにある値
第3ベースアドレス=第2ベースアドレスから+/-jjjjjjjにある値
.....
最終書込アドレス=最後に来た第nベースアドレス+/-zzzzzzzzになる
FCと違い追跡先でシリアルやコピーバイトは使用できないOTL
CMFとFCにはバグがあるので注意

[パッドコード]
0xD00000dd 0x1nnnnnnn REALCWC
メモリPADとnnnnnnnの論理積を計算し計算結果がnnnnnnnと一致する場合dd+1行分実行される。nnnnnnnはパッドの合計値(論理和OR)
#XORとの違いは指定したnnnnnnnn+αなんでもおしてもおkという感じ。ただし0判定が0+なんでもおkで常に適用になるので0判定は使用できない,CWCは3PAD制限有り

0xD00000dd 0x3nnnnnnn REALCWC
メモリPADとnnnnnnnの論理積を計算し計算結果がnnnnnnnと一致する場合dd+1行分コードが無効になる。

[コピーバイト] REALCWC
0x5aaaaaaa 0xnnnnnnnn
0xbbbbbbbb 0x00000000
アドレスaaaaaaa+0x8800000からbbbbbbbbbにnnnnnnnnバイト分コピーする

[シリアル(圧縮)コード]
32-bitシリアル REALCWC
0x4aaaaaaa 0xXXXXyyyy
0xdddddddd 0xIIIIIIII
アドレスaaaaaaa+0x8800000からXXXX個のアドレスになるように
yyyy*4アドレスずつずらしながら値ddddddddを書き込む
ddddddddもIIIIIIII分ずつ増加して書き込まれる

16-bitシリアル CWCASM1 CWCASM2
0x8aaaaaaa 0xXXXXyyyy
0x1000dddd 0x0000IIII
アドレスaaaaaaa+0x8800000からXXXX個のアドレスになるように
yyyy*2アドレスずつずらしながら値ddddを書き込む
ddddもIIII分ずつ増加して書き込まれる

8-bitシリアル CWCASM1 CWCASM2
0x8aaaaaaa 0xXXXXyyyy
0x000000dd 0x000000II
アドレスaaaaaaa+0x8800000からのXXXX個アドレスになるように
yyyyアドレスずつずらしながら値ddを書き込む
ddもII分ずつ増加して書き込まれる


[コードストッパー] REALCWC
0xCaaaaaaa 0xvvvvvvvv
アドレスaaaaaaa+0x8800000の値がvvvvvvvv以外のときコードが停止する、Eを全コードに付加するような感じ?

[タイムコード] CWC専用 REALCWC
0xB0000000 0xnnnnnnnn
コード実行をnnnnnnnnだけ遅らせる(0x100で1秒)、1回だけしか使えない
0xB0000000 0x10000000でループ?


SCMMODでの違い
16bit書き込み時&0xFFFFFFE,32bit書き込み時 &0xFFFFFFC
$0000 $ $(XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX)や
$0000 $ $XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX)
は1行分としてカウントされる,FREECHEATはCWCと同じ
ポインタコード=通常ポインタ(nnnn=1)でも90000000 00000000を足す必要がある
ポインタ加減算 使うときあるのか不明?やってみたけど使えなかった?
DAAAAAAA OKKKKKKK
P00TVVVV SSSSSSSS
NNNNNNNN MMMMMMMM
AAAAAAA=ポインタアドレス
O=4で加算?、6で減算?
K=パッドコード
P=ポインタの種類,CWC参考0~5かな
V=増減数値
S=差分、オフセット
N=最小値
M=最大値

FREECHEATでの違い
16bit書き込み時&0xFFFFFFE,32bit書き込み時 &0xFFFFFFC
パッドコード=dd+1でなくてdd行
8-bit OR
0x7aaaaaaa 0x000000vv
8-bit AND
0x7aaaaaaa 0x000400vv
8-bit XOR
0x7aaaaaaa 0x000200vv
16-bit OR
0x7aaaaaaa 0x0003vvvv
16-bit AND
0x7aaaaaaa 0x0001vvvv
16-bit XOR
0x7aaaaaaa 0x0005vvvv
ポインタコード=通常ポインタ(nnnn=1)でも90000000 00000000を足す必要がある←最近のは不要
CWC多重ポインタにオフセットが含まれてると上手く実行されない
CWCポインタオプションや32bit加減算は_N2 └(ひだりした)を足さないと上手く読み込めない。
要修正
_L 0x30500000 0x0aaaaaaa
_L 0xvvvvvvvv 0x00000000

_L 0x30500000 0x0aaaaaaa
_N2 └
_L 0xvvvvvvvv 0x00000000

_L 0x6aaaaaaa 0xvvvvvvvv
_L 0x000t0003 0x0000zzzz
_L 0x200iiiii 0x2000jjjj

_L 0x6aaaaaaa 0xvvvvvvvv
_L 0x000t0003 0x0000zzzz
_N2 └
_L 0x200iiiii 0x2000jjjj
追記:論理バグはぱっちにて修正可能です


CMFusionRR15TEST専用
多重ポインタ
0x6aaaaaaa 0xvvvvvvvv
0x000200nn 0x0000iiii
0x0000jjjj 0x0000kkkk
....
0x0000zzzz 0x00000000
aaaaaaa=ポインタアドレス、第1ベース
vvvvvvvv=書き込む値
nn=追跡する(ベース値を読み込む)回数
iiii=第1ベースに足すオフセット
jjjj=第2ベースに足すオフセット
kkkk=第3ベースに足すオフセット
....
zzzz最後に足すオフセット

第1ベースアドレス=aaaaaaa+0x8800000にある値
第2ベースアドレス=第1ベースアドレス+iiiiにある値
第3ベースアドレス=第2ベースアドレスから+jjjjにある値
....
最終書込アドレス=第nnベースアドレス+zzzzになる
#ポインタシリアルとコピーバイト併用が出来なくなる。

RR16以降より廃止,CWCと同じ形式


FREECHEAT080323版以降専用
多重ポインタ
0x6aaaaaaa 0x00000000
0x000u0000 0xiiiiiiii
0x60000000 0x00000000
0x000u0000 0xjjjjjjjj
0x60000000 0x00000000
0x000u0000 0xkkkkkkkk
....
0x60000000 0xvvvvvvvv
0xqqqt0001 0xzzzzzzzz
0x90000000 0x00000000 ←オプションを入れることが可能。
aaaaaaa+0x8800000=ポインタアドレス、第1ベース
t=書き込むbit数、CWC参照
vvvvvvvv=書き込む値
u=オフセットの+/- 6でプラス、7でマイナス
iiiiiiii=第1ベース+/-するオフセット
jjjjjjjj=第2ベース+/-するオフセット
kkkkkkkk=第3ベース+/-するオフセット
....
zzzzzzzz=最後+/-するオフセット(tに依存)

第1ベースアドレス=aaaaaaa+0x8800000にある値
第2ベースアドレス=第1ベースアドレス+/-iiiiiiiiにある値
第3ベースアドレス=第2ベースアドレスから+/-jjjjjjjjにある値
.....
最終書込アドレス=最後に来たベースアドレス+/-zzzzzzzzになる
シリアルやコピーバイトも追跡先で使用できる。qqq*4=ポインタオフセット最後でしか使えない?


CMFusion専用格式
サブルーチン+暗号コード(R19D~)
0xFXXXXXnn 0xYYYYYYzz
0xbbbbbbbb 0xbbbbbbbb
0xbbbbbbbb ..........
......... ..........
次のnn行のサブルーチンコードを実行する、暗号の詳細は不明ソースみるとコードブレーカーらしい,XYはダミーで意味が無い。zz=00 無暗号,01と02の暗号もーど
TMPAR専用コードになりますがTEMPARのページで暗号解除できるようです。
PSPLINKを使っても復元したサブルーチンコードを取得できます。
暗号コードを作成したい場合MKVIPSで作成できます。

復元コード(R20~)
0xCaaaaaaa 0xbbbbbbbb
基本的に32bit書き込みと同様ですが、空きメモリにONにするまえの値を一時退避しておき、OFFの時もとにもどします。 CWC用に直すには0xCを0x2にかえればおk、ASMコードだkらコード切っても戻らなくなるけど。変換鶴 OFFにすれば戻るのでASM(プログラム)コードによく使われる。
追記;変換面倒な人はぱっち伊次郎の32bit化で通常0x2コードと判断されます。
TEMPAR AUTOOFF使用時はnitePRのように0x2,0x1,0x0が自動的に復元コードになります
※ほかにはPMETANが特殊ヘッダで対応しています。


CWC/FC伊次郎専用格式
0x3FFCパッド
0xD0003FFC 0x0000nnnn
メモリのPAD値がnnnnと完全一致する場合,次のコードを実行する
0xD0003FFC 0x0010nnnn
メモリのPAD値がnnnnと完全一致する場合,次のコードをスキップする

単精度浮動小数加算
0x30600000 0x0aaaaaaa
0xnnnnnnnn 0x00000000
アドレスaaaaaaa+0x8800000の単精度浮動小数値に単精度浮動小数nnnnnnnnで加算し続ける
#32bit減算=32bit加算のnnnnnnに符号拡張値を入れれば代替可能


CODEFREAKの(M)コード
AAAAAAAA AAAAAXYZ
A=GAMEIDを文字コードにしたもの
X=0:CF暗号コード使用時(アドレス部 XOR 0xD6F73BEE),暗号コードを復元するには
RITZCODE(通常の12345678 12345678) CWCREMOVER(CWC風_L 0x付きのもの) CF2TXT(バイナリをTXTに変換)
にある鶴などを使ってください
X=8:CWC生コード使用,暗号コードと一緒には使えない
Y=0:通常のゲーム
Y=1:マルチブート対応
Y=2:要求OFW6.10以上のゲーム
Y=3:要求OFW6.10以上のゲーム+マルチブート対応
Z=0~7:フックタイプ変更?

CODEFREAK修正用
ポインタのみ要修正
6aaaaaaa vvvvvvvv
000t0001 0000zzzz

//基準アドレス0回避
E0020000 1aaaaaaa
6aaaaaaa vvvvvvvv
000t0001 0000zzzz

//基準アドレス>0x8800000 ポインタ修正鶴
E0020880 3aaaaaaα α=a+2
6aaaaaaa vvvvvvvv
000t0001 0000zzzz

//基準アドレス0回避
20003FFC 00000000
Daaaaaaa 50003FFC
00000002 00000002

6aaaaaaa vvvvvvvv
000t0001 0000zzzz

//基準アドレス>0x8800000
20003FFC 08800000
Daaaaaaa 70003FFC
00000002 00000002

6aaaaaaa vvvvvvvv
000t0001 0000zzzz

#パッドコードで回避
nnnn=L+R(0300),R+上(0210),R+下(0240)
D0000001 1000nnnn
6aaaaaaa vvvvvvvv
000t0001 0000zzzz

#ポインタオプション全部動作不可
//ポインタシリアル
ASMでなくても分解+ポインタ修正を使えば動くかも
6aaaaaaa vvvvvvvv
000t00nn 0000zzzz
9000ssss 0000000

//ポインタコピー
6aaaaaaa 0000000v
00000002 0000zzzz
1000ssss 0000000

//2重ポインタ(S=2 or3)
6aaaaaaa vvvvvvvv
000t0002 0000zzzz
S000iiii 00000000

//3重ポインタ(S=2 or3)
6aaaaaaa vvvvvvvv
000t0003 0000zzzz
S000iiii S000jjjj

未対応のものは別途ASMコードに変換する必要あり、変換例
ポインタコピーASM ポインタシリアルASM 多重ポインタASM

おまけ;CF.datバイナリ構成判明,読み込み用VBSRC
C#用UTF16BEすとりんぐぱーさー
ヘッダ役割構成
0x\0A0A,U+0A0A(ਊ)各構造の区切りに使われてる,インド文字のグルムキーらすい?WIKI
G&H20,U+4720(䴠)ゲームタイトルUTF16ビッグエンディアン
M&H20,U+4D20(䜠)Mコード、詳細UTF16ビッグエンディアンX8
D&H20,U+4420(䐠)コード名UTF16ビッグエンディアン
C&H20,U+4320(䌠)コード内容UTF16ビッグエンディアンX8
#コードフリーク専用CF.DATをTXTに戻したい場合はCDECFDAT2TXTで対応したみたのでそれを使ってください

HP(゚∀゚) > KAIZO(´∀`) > KAISEKI(^w^)
  プロフィール  PR:無料HP  合宿免許 二輪  Webデザイン 学校  WPサスペンション  中古ホイール 沖縄  タイヤ エリシオン 新品  自動車整備 専門  IKD  特殊免許 取得  水晶  宮城 合宿免許  音楽 専門学校 福岡  タイヤ 取付 神戸市  中古マンションをリノベする