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

http://wiird.l0nk.org/codetypes.htmlを翻訳したもの。かなりてきとー。
http://wiibrew.org/wiki/GeckoOS#Technical_Jargon PPCわかる人は.sを見たほうが早いかも?GCPAR/PS2AR3+NITROHAX/DSAR見たいな感じ?
#標準ベース,ポインタオフセット=0x80000000


通常書き込み(0x00,0x10,0x02,0x12,0x04,0x14)
パッチ(0x06,0x16)
シリアル(0x08,0x18)
条件判定32bit(0x20~0x26)
条件判定16bit0x28~0x3C)
ベースオフセット(0x40,0x50,0x42,0x52,0x44,0x54,0x46)
ポインタオフセット(0x48,0x58,0x4A,0x5A,0x4C,0x5C,0x4E)
レジスタ(0x80~0x8C)
アセンブリ(0xC0~0xCE)
判定終了(0xE0~0xF0)


[通常書き込みコード]
8bit
00aaaaaa YYYY00VV
ベースオフセット+aaaaaaに値VVをYYYY+1回書き込む

10aaaaaa YYYY00VV
ポインタオフセット+aaaaaaに値VVをYYYY+1回書き込む

18bit
02aaaaaa YYYYVVVV
ベースオフセット+aaaaaaに値VVVVをYYYY+1回書き込む

12aaaaaa YYYYVVVV
ポインタオフセット+aaaaaaに値VVVVをYYYY+1回書き込む

32bits
04aaaaaa VVVVVVVV
ベースオフセット+aaaaaaに値VVVVVVVVをYYYY+1回書き込む

14aaaaaa XXXXXXXX
ポインタオフセット+aaaaaaに値VVVVVVVVをYYYY+1回書き込む


[パッチコード]
06aaaaaa 0000YYYY
d1d2d3d4 d5d6d7d8
....
ベースオフセット+aaaaaaに下記のデータをYYYYバイト分書き込む

16aaaaaa 0000YYYY
d1d2d3d4 d5d6d7d8
...
ポインタオフセット+aaaaaaに下記のデータをYYYYバイト分書き込む


[シリアルコード]
8bit
08aaaaaa 000000WW
0NNNXXXX 000000VV
ベースオフセット+aaaaaaからの値VVをXXXXの間隔でNNN+1回書き込む。
このとき値VVもWWずつ増加する。

18aaaaaa 000000WW
0NNNXXXX 000000VV
ポインタオフセット+aaaaaaからの値VVをXXXXの間隔でNNN+1回書き込む。
このとき値VVもWWずつ増加する。

16bit
08aaaaaa 0000WWWW
1NNNXXXX 0000VVVV
ベースオフセット+aaaaaaからの値VVをXXXXの間隔でNNN+1回書き込む。
このとき値VVVVもWWWWずつ増加する。

18aaaaaa 0000WWWW
1NNNXXXX 0000VVVV
ポインタオフセット+aaaaaaからの値VVVVをXXXXの間隔でNNN+1回書き込む。
このとき値VVVVもWWWWずつ増加する。

32bit
08aaaaaa WWWWWWWW
2NNNXXXX VVVVVVVV
ベースオフセット+aaaaaaからの値VVVVVVVVをXXXXの間隔でNNN+1回書き込む。
このとき値VVVVVVVVもWWWWWWWWずつ増加する。

18aaaaaa WWWWWWWW
2NNNXXXX VVVVVVVV
ポインタオフセット+aaaaaaからの値VVVVVVVVをXXXXの間隔でNNN+1回書き込む。
このとき値VVVVVVVVもWWWWWWWWずつ増加する。


[32bit条件判定コード]
aaaaab=aaaaaa|0x1
32bit一致
20aaaaaa YYYYYYYY
ベースオフセット+aaaaaaにある値がYYYYYYYYの時下のコードを実行する。

20aaaaab YYYYYYYY
直前の判定をとじてから、ベースオフセット+aaaaaaにある値がYYYYYYYYの時下のコードを実行する。

30aaaaaa YYYYYYYY
ポインタオフセット+aaaaaaにある値がYYYYYYYYの時下のコードを実行する。

30aaaaab YYYYYYYY
直前の判定をとじてから、ポインタオフセット+aaaaaaにある値がYYYYYYYYの時下のコードを実行する。

32bit不一致
22aaaaaa YYYYYYYY
ベースオフセット+aaaaaaにある値がYYYYYYYYでない時下のコードを実行する。

22aaaaab YYYYYYYY
直前の判定をとじてから、ポインタオフセット+aaaaaaにある値がYYYYYYYYでない時下のコードを実行する。

32aaaaaa YYYYYYYY
ポインタオフセット+aaaaaaにある値がYYYYYYYYでない時下のコードを実行する。

32aaaaab YYYYYYYY
直前の判定をとじてから、ポインタオフセット+aaaaaaにある値がYYYYYYYYでない時下のコードを実行する。

32bit比較小
26aaaaaa YYYYYYYY
ベースオフセット+aaaaaaにある値がYYYYYYYYより小さい時下のコードを実行する。

26aaaaab YYYYYYYY
直前の判定をとじてから、ベースオフセット+aaaaaaにある値がYYYYYYYYより小さい時下のコードを実行する。

36aaaaaa YYYYYYYY
ポインタオフセット+aaaaaaにある値がYYYYYYYYより小さい時下のコードを実行する。

36aaaaab YYYYYYYY
直前の判定をとじてから、ポインタオフセット+aaaaaaにある値がYYYYYYYYより小さい時下のコードを実行する。

32bit比較大
24aaaaaa YYYYYYYY
ベースオフセット+aaaaaaにある値がYYYYYYYYより大きい時下のコードを実行する。

24aaaaab YYYYYYYY
直前の判定をとじてから、ベースオフセット+aaaaaaにある値がYYYYYYYYより大きい時下のコードを実行する。

34aaaaaa YYYYYYYY
ポインタオフセット+aaaaaaにある値がYYYYYYYYより大きい時下のコードを実行する。

34aaaaab YYYYYYYY
直前の判定をとじてから、ポインタオフセット+aaaaaaにある値がYYYYYYYYより大きい時下のコードを実行する。


[16bit条件判定コード]
#ZZZZ=FF00で8bit判定,???? & 0xFF
16bit一致
28aaaaaa ZZZZYYYY
ベースオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYと一致する時下のコードを実行する。

28aaaaab ZZZZYYYY
直前の判定をとじてから、ベースオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYと一致する時下のコードを実行する。

38aaaaaa ZZZZYYYY
ポインタオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYと一致する時下のコードを実行する。

38aaaaab ZZZZYYYY
直前の判定をとじてから、ポインタオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYと一致する時下のコードを実行する。

不一致
2Aaaaaaa ZZZZYYYY
ベースオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYと一致しない時下のコードを実行する。

2Aaaaaab ZZZZYYYY
直前の判定をとじてから、ベースオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYと一致する時下のコードを実行する。

3Aaaaaaa ZZZZYYYY
ポインタオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYと一致しない時下のコードを実行する。

3Aaaaaab ZZZZYYYY
直前の判定をとじてから、ベースオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYと一致しない時下のコードを実行する。

比較小
2Eaaaaaa ZZZZYYYY
ベースオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYより小さい時い時下のコードを実行する。

3Eaaaaaa ZZZZYYYY
ポインタオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYより小さい時下のコードを実行する。

2Eaaaaab ZZZZYYYY
直前の判定をとじてから、ベースオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYより小さい時下のコードを実行する。

3Eaaaaab ZZZZYYYY
直前の判定をとじてから、ベースオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYより小さい時下のコードを実行する。

比較大
2Caaaaaa ZZZZYYYY
ベースオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYより大きい時下のコードを実行する。

3Caaaaaa ZZZZYYYY
ポインタオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYより大きい時下のコードを実行する。

2Caaaaab ZZZZYYYY
直前の判定をとじてから、ベースオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYより大きい時下のコードを実行する。

3Caaaaab ZZZZYYYY
直前の判定をとじてから、ベースオフセット+aaaaaaにある値と否定ZZZZとの論理積がYYYYより大きい時下のコードを実行する。


[ベースオフセットコード]
ベース読込
40TYZ00N XXXXXXXX
40000 アドレスXXXXXXXXにある値を読み込む
40010 ベースオフセット+XXXXXXXXにある値を読み込む
50010 ポインタオフセット+XXXXXXXXにある値を読み込む
4000100N レジスタN+XXXXXXXXにある値を読み込む
4001100N ベースオフセット+レジスタN+XXXXXXXXにある値を読み込む
5001100N ポインタオフセット+レジスタN+XXXXXXXXにある値を読み込む
40100000 ベースオフセット += [XXXXXXXX] 読んだあと+?
40110000 ベースオフセット += [ベースオフセット+XXXXXXXX]
50110000 ベースオフセット += [ポインタオフセット+XXXXXXXX]
4010100N ベースオフセット += [レジスタN+XXXXXXXX]
4011100N ベースオフセット += [ベースオフセット+レジスタN+XXXXXXXX]
5011100N ベースオフセット += [ポインタオフセット+レジスタN+XXXXXXXX]


ベース代入
42TYZ00N XXXXXXXX
42000 ベースオフセット = XXXXXXXX
42010 ベースオフセット = ベースオフセット+XXXXXXXX
52010 ベースオフセット = ポインタオフセット+XXXXXXXX
42001 ベースオフセット = レジスタN+XXXXXXXX
42011 ベースオフセット = ベースオフセット+レジスタN+XXXXXXXX
52011 ベースオフセット = ポインタオフセット+レジスタN+XXXXXXXX
42100 ベースオフセット += XXXXXXXX
42110 ベースオフセット += ベースオフセット+XXXXXXXX
52110 ベースオフセット += ポインタオフセット+XXXXXXXX
42101 ベースオフセット += レジスタN+XXXXXXXX
42111 ベースオフセット += ベースオフセット+レジスタN+XXXXXXXX
52111 ベースオフセット += ポインタオフセット+レジスタN+XXXXXXXX


ベース保存
440YZ00N XXXXXXXX
44000 [XXXXXXXX]=ベースオフセット
44010 [XXXXXXXX+ベースオフセット]=ベースオフセット
54010 [XXXXXXXX+ポインタオフセット]=ベースオフセット
44001 [XXXXXXXX+レジスタN]=ベースオフセット
44011 [XXXXXXXX+ベースオフセット+レジスタN]=ベースオフセット
54011 [XXXXXXXX+ポインタオフセット+レジスタN]=ベースオフセット


[ポインタオフセットコード]
ポインタ読込
48TYZ00N XXXXXXXX :
48000 ポインタオフセット = [XXXXXXXX]
48010 ポインタオフセット = [ベースオフセット+XXXXXXXX]
58010 ポインタオフセット = [ポインタオフセット+XXXXXXXX]
48001 ポインタオフセット = [レジスタN+XXXXXXXX]
48011 ポインタオフセット = [ベースオフセット+レジスタN+XXXXXXXX]
58011 ポインタオフセット = [ポインタオフセット+レジスタN+XXXXXXXX]
48100 ポインタオフセット += [XXXXXXXX]
48110 ポインタオフセット += [ベースオフセット+XXXXXXXX]
58110 ポインタオフセット += [ポインタオフセット+XXXXXXXX]
48101 ポインタオフセット += [レジスタN+XXXXXXXX]
48111 ポインタオフセット += [ベースオフセット+レジスタN+XXXXXXXX]
58111 ポインタオフセット += [ポインタオフセット+レジスタN+XXXXXXXX]


ポインタ代入
4ATYZ00N XXXXXXXX :
4A000 ポインタオフセット = XXXXXXXX
4A010 ポインタオフセット = ベースオフセット+XXXXXXXX
5A010 ポインタオフセット = ポインタオフセット+XXXXXXXX
4A001 ポインタオフセット = レジスタN+XXXXXXXX
4A011 ポインタオフセット = ベースオフセット+レジスタN+XXXXXXXX
5A011 ポインタオフセット = ポインタオフセット+レジスタN+XXXXXXXX
4A100 ポインタオフセット += XXXXXXXX
4A110 ポインタオフセット += ベースオフセット+XXXXXXXX
5A110 ポインタオフセット += ポインタオフセット+XXXXXXXX
4A101 ポインタオフセット += レジスタN+XXXXXXXX
4A111 ポインタオフセット += ベースオフセット+レジスタN+XXXXXXXX
5A111 ポインタオフセット += ポインタオフセット+レジスタN+XXXXXXXX


ポインタ保存
4C0YZ00N XXXXXXXX
4C000 [XXXXXXXX]=ポインタオフセット
4C010 [XXXXXXXX+ベースオフセット]=ポインタオフセット
5C010 [XXXXXXXX+ポインタオフセット]=ポインタオフセット
44001 [XXXXXXXX+レジスタN]=ポインタオフセット
44011 [XXXXXXXX+ベースオフセット+レジスタN]=ポインタオフセット
54011 [XXXXXXXX+ポインタオフセット+レジスタN]=ポインタオフセット


[レジスタコード]
レジスタ代入
80SY000N XXXXXXXX :
8000 レジスタN = XXXXXXXX
8001 レジスタN = XXXXXXXX+ベースオフセット
9001 レジスタN = XXXXXXXX+ポインタオフセット
8010 レジスタN += XXXXXXXX
8011 レジスタN += XXXXXXXX+ベースオフセット
9011 レジスタN += XXXXXXXX+ポインタオフセット


レジスタ読み込み
82UY000N XXXXXXXX :
8200 レジスタN = 8bits [XXXXXXXX]
8201 レジスタN = 8bits [XXXXXXXX+ベースオフセット]
9201 レジスタN = 8bits [XXXXXXXX+ポインタオフセット]
8210 レジスタN = 16bits [XXXXXXXX]
8211 レジスタN = 16bits [XXXXXXXX+ベースオフセット]
9211 レジスタN = 16bits [XXXXXXXX+ポインタオフセット]
8220 レジスタN = 32bits [XXXXXXXX]
8221 レジスタN = 32bits [XXXXXXXX+ベースオフセット]
9221 レジスタN = 32bits [XXXXXXXX+ポインタオフセット]


レジスタ保存
84UYZZZN XXXXXXXX:
8400 8bits書き込み レジスタN ZZZ+1回  [XXXXXXXX]
8401 8bits書き込み レジスタN ZZZ+1回  [XXXXXXXX+ベースオフセット]
9401 8bits書き込み レジスタN ZZZ+1回  [XXXXXXXX+ポインタオフセット]
8410 16bits書き込み レジスタN ZZZ+1回  [XXXXXXXX]
8411 16bits書き込み レジスタN ZZZ+1回  [XXXXXXXX+ベースオフセット]
9411 16bits書き込み レジスタN ZZZ+1回  [XXXXXXXX+ポインタオフセット]
8420 32bits書き込み レジスタN ZZZ+1回  [XXXXXXXX]
8421 32bits書き込み レジスタN ZZZ+1回  [XXXXXXXX+ベースオフセット]
9421 32bits書き込み レジスタN ZZZ+1回  [XXXXXXXX+ポインタオフセット]


レジスタ即値演算
86TY000N XXXXXXXX
86T0 レジスタN = (レジスタN ? XXXXXXXX)
86T1 レジスタN = ([レジスタN] ? XXXXXXXX)
86T2 レジスタN = (レジスタN ? [XXXXXXXX])
86T3 レジスタN = ([レジスタN] ? [XXXXXXXX])

? = T :
0 加算 (+)
1 乗算 (*)
2 論理和 (|)
3 論理積 (&)
4 排他的論理和 (^)
5 左シフト (<<)
6 右シフト (>>)
7 左回転
8 算術右シフト
A 単精度浮動小数加算
B 単精度浮動小数乗算


レジスタ同士での演算
88TY000N 0000000M
88T0 レジスタN = (レジスタN ? レジスタM)
88T1 レジスタN = ([レジスタN] ? レジスタM)
88T2 レジスタN = (レジスタN ? [レジスタM])
88T3 レジスタN = ([レジスタN] ? [レジスタM])

? = T :
0 加算 (+)
1 乗算 (*)
2 論理和 (|)
3 論理積 (&)
4 排他的論理和 (^)
5 左シフト (<<)
6 右シフト (>>)
7 左回転
8 算術右シフト
A 単精度浮動小数加算
B 単精度浮動小数乗算


メモリコピー
8AYYYYNM XXXXXXXX
レジスタNからレジスタM+XXXXXXXXにYYYYバイト分コピーする

8AYYYYNF XXXXXXXX
レジスタNからベースオフセット+XXXXXXXXにYYYYバイト分コピーする

9AYYYYNF XXXXXXXX
レジスタNからポインタオフセット+XXXXXXXXにYYYYバイト分コピーする


メモリコピー2
8CYYYYNM XXXXXXXX
レジスタN+XXXXXXXXからレジスタMにYYYYバイト分コピーする

8CYYYYFM XXXXXXXX
ベースオフセット+XXXXXXXXからレジスタMにYYYYバイト分コピーする

9CYYYYFM XXXXXXXX
ポインタオフセット+XXXXXXXXからレジスタMにYYYYバイト分コピーする


[特殊判定コード]
レジスタN,Mが0xFの場合、ベース/ポインタオフセット+aaaaaaaが使われる。
16bit一致
A0aaaaaa NM00YYYY
"[レジスタN]と否定YYYYの論理積"と"[レジスタM]と否定YYYYの論理積"が一致する時以下のコードを実行する。

A0aaaaab NM00YYYY
直前の判定をとじてから"[レジスタN]と否定YYYYの論理積"と"[レジスタM]と否定YYYYの論理積"が一致する時以下のコードを実行する。


16bits不一致
A2aaaaaa NM00YYYY
"[レジスタN]と否定YYYYの論理積"と"[レジスタM]と否定YYYYの論理積"が一致しない時以下のコードを実行する。

A2aaaaab NM00YYYY
直前の判定をとじてから"[レジスタN]と否定YYYYの論理積"と"[レジスタM]と否定YYYYの論理積"が一致しない時以下のコードを実行する。


16bits比較小
A6aaaaaa NM00YYYY
"[レジスタN]と否定YYYYの論理積"より"[レジスタM]と否定YYYYの論理積"小さい時以下のコードを実行する。

A6aaaaab NM00YYYY
直前の判定をとじてから"[レジスタN]と否定YYYYの論理積"より"[レジスタM]と否定YYYYの論理積"小さい時時以下のコードを実行する。


16bits比較大
A4aaaaaa NM00YYYY
"[レジスタN]と否定YYYYの論理積"より"[レジスタM]と否定YYYYの論理積"大きい時以下のコードを実行する。

A4aaaaab NM00YYYY
直前の判定をとじてから"[レジスタN]と否定YYYYの論理積"より"[レジスタM]と否定YYYYの論理積"大きい時以下のコードを実行する。


[アセンブリコード]
アセンブリ実行
C0000000 NNNNNNNN
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ
4E800020 00000000
次のNNNNNNNN行分のアセンブリコードが挿入される。最後はblr (0x4E800020)で閉じる必要がある。 (挿入場所は不明、たぶんHOOKの最後?)。


アセンブリ挿入
C2aaaaaa NNNNNNNN
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ
60000000 00000000
ベースオフセット+aaaaaaaに0x800029**あたりにジャンプするようbranchが自動挿入され、そこからNNNNNNNN行分のアセンブリコードが挿入される。 最後の00000000 の箇所が"b ベースオフセット+aaaaaaa+4"になるので,00000000で閉じる必要がある(無い時はnop 60000000を入れる)。

D2XXXXXX NNNNNNNN
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ 00000000
ポインタオフセット+aaaaaaaに、0x800029**あたりにジャンプするようbranchが自動挿入され、そこからNNNNNNNN行分のアセンブリコードが挿入される。 最後の00000000 の箇所が"b ポインタオフセット+aaaaaaa+4"になるので,00000000で閉じる必要がある(無い時はnop 60000000を入れる)。


ジャンプ挿入
C6aaaaaa YYYYYYYY
aaaaaa+ベースオフセットからYYYYYYYYへジャンプするようbranchを書き込む。 aaaaaa+ベースオフセットに"b YYYYYYYY"が挿入される。

D6aaaaaa YYYYYYYY
aaaaaa+ポインタオフセットからYYYYYYYYへジャンプするようbranchを書き込む。 aaaaaa+ポインタオフセットに"b YYYYYYYY"が挿入される。

オン・オフスイッチ
CC000000 00000000
条件判定コードの途中に挿入され、コードを切り替える


アドレス範囲チェック
CE000000 XXXXYYYY = ベースオフセットが0xXXXX0000;0xYYYY0000の範囲のとき
CE000001 XXXXYYYY = ベース判定の終了
DE000000 XXXXYYYY = ポインタオフセットが0xXXXX0000;0xYYYY0000の範囲のとき
DE000001 XXXXYYYY = ポインタ判定の終了
#XXXX>=YYYYのときコードは実行されない。


[判定終了コード]
Full Terminator
E0000000 XXXXYYYY
すべてのフラグをリセットする
XXXXが0以外のとき, ベースオフセットが0xXXXX0000になる
YYYYが0以外のとき, ポインタオフセットが0xYYYY0000になる


Endif (+else)
E20000VV XXXXYYYY
Applies VV endifs.
XXXXが0以外のとき, ベースオフセットが0xXXXX0000になる
YYYYが0以外のとき, ポインタオフセットが0xYYYY0000になる

E21000VV XXXXYYYY = endifs + else
Applies VV endifs, and inverse the code execution status (="else").
If XXXX!=0, ベースオフセット = 0xXXXX0000
If YYYY!=0, ポインタオフセット = 0xYYYY0000


[開始コード]
00D0C0DE 00D0C0DE
GCTファイルの最初に挿入され、コードの開始を表す。

[終端コード]
F0000000 00000000
GCTファイルの末尾に挿入され、コードの終了を表す。


Gecko 1.8以降
ASM挿入 16-bit XORチェックサムあり
F2XXXXXX YYZZZZNN
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ 00000000

F4XXXXXX YYZZZZNN
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ 00000000

サーチコード
F60000NN XXXXYYYY
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ

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