A9VG电玩部落论坛

 找回密码
 注册
搜索
楼主: cusuyu

wii实机玩ngc游戏 用金手指教程

[复制链接]

精华
0
帖子
4309
威望
0 点
积分
5327 点
种子
278 点
注册时间
2004-8-24
最后登录
2024-11-26
发表于 2024-4-4 23:14  ·  河南 | 显示全部楼层
能否麻烦大佬们分享个 NGC游戏(日版+美版)和Wii游戏(日版+美版)的金手指合集?或者说一下在线搜索和下载的链接也行,万分感谢!

精华
0
帖子
4309
威望
0 点
积分
5327 点
种子
278 点
注册时间
2004-8-24
最后登录
2024-11-26
发表于 2024-4-4 23:43  ·  河南 | 显示全部楼层
weiyan2006 发表于 2024-04-04 23:14
能否麻烦大佬们分享个 NGC游戏(日版+美版)和Wii游戏(日版+美版)的金手指合集?或者说一下在线搜索和下载的链接也行,万分感谢!


我主要是用dolphin海豚模拟器来玩 NGC和Wii平台的经典游戏+汉化版游戏。
多谢各位大佬啦!
发自A9VG Android客户端

精华
0
帖子
653
威望
0 点
积分
993 点
种子
608 点
注册时间
2006-2-4
最后登录
2024-10-22
发表于 2024-4-5 21:34  ·  广东 | 显示全部楼层
直接用新版usbloader gx 关聯nintendont 可直接用Wii網上下載金手指
发自A9VG iPhone客户端

精华
0
帖子
2169
威望
0 点
积分
2440 点
种子
198 点
注册时间
2009-7-6
最后登录
2022-2-3
发表于 2024-4-6 10:50  ·  北京 | 显示全部楼层
记忆中漫步 发表于 2024-02-25 14:05
我记得实体NGC原版生化危机1有榴弹255打法,2种榴弹切换,就可以出255弹药,等于无敌了。


日版初版游戏才有此BUG,后期的不行❌
发自A9VG iPhone客户端

精华
0
帖子
3621
威望
0 点
积分
3663 点
种子
170 点
注册时间
2008-5-26
最后登录
2024-11-27
发表于 2024-4-6 15:53  ·  上海 | 显示全部楼层
youngsound 发表于 2024-4-6 10:50
日版初版游戏才有此BUG,后期的不行❌

恩,是的,初版的可以,后面的就取消了。

圣骑士

拳打南山版主 脚踢北海管理员

精华
0
帖子
4294
威望
0 点
积分
4374 点
种子
78 点
注册时间
2012-7-30
最后登录
2024-11-14
发表于 2024-4-7 09:19  ·  江苏 | 显示全部楼层
本帖最后由 子耗胖 于 2024-4-7 09:24 编辑
avin4 发表于 2024-2-28 12:15
Master code 需要加入么?不加入我试了几个游戏作弊码都没效果
但是加入有些游戏会直接黑屏死机无法启动 ...


M码不用,NGC用的是viper码,而wii是gecko,两者并不通用,
只有02和04开头的viper码能直接用在wii上,
你看楼主给的码,都是02/04开头的,所以肯定可用
其他需要转换,怎么转换很复杂,我基本看不懂……



教程如下,对我基本是天书:
用Wii玩GC遊戲時0x90000000區域開始的MEM2是用不著的,所以是用不著42000000 90000000這種密碼的。如果改的是0x81000000到0x81800000區域的地址,以下用來表示地址的aaaaaa的左邊相鄰的那個數字就要加1,比如00aaaaaa就要變成01aaaaaa,AR和Gecko都要遵循這個規則。

直接寫入碼
8bits
00aaaaaa YYYYYYXX
轉換後
00aaaaaa YYYY00XX

AR格式裡YYYYYY的最高兩位一般都是00,不大可能是01以上的數,否則要連續寫入6萬多個字節,遊戲早死機了,所以轉換後就捨去這兩位吧。

16bits
02aaaaaa YYYYXXXX

這個和Gecko格式一樣,不用轉換,直接可用。

32bits
04aaaaaa XXXXXXXX

這個和Gecko格式一樣,不用轉換,直接可用。

壓縮碼
8bits
00000000 80aaaaaa
000000XX VVNNZZZZ
轉換後
08aaaaaa 000000XX
0NNN-1ZZZZ VVVVVVVV

16bits
00000000 82aaaaaa
0000XXXX VVNNZZZZ
轉換後
08aaaaaa 0000XXXX
1NNN-1ZZZZ*2 VVVVVVVV

比如:
00000000 82034920
00000001 03080001
轉換後
08034920 00000001
10070002 00000003

32bits
00000000 84aaaaaa
XXXXXXXX VVNNZZZZ
轉換後
08aaaaaa XXXXXXXX
2NNN-1ZZZZ*4 VVVVVVVV

條件碼
8bits如果等於
08aaaaaa 000000XX
AAAAAAAA BBBBBBBB (被嵌套的密碼)
轉換後
28aaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB (被嵌套的密碼)
E0000000 80008000

Gecko的條件碼可以嵌套不限行數的密碼,所以要在被嵌套的密碼底下加一行E2000001 80008000或E0000000 80008000作結尾,一般用E0000000 80008000可以結束得徹底一些。
由於Gecko的條件碼並沒有8bits的,所以要靠16bits條件碼中的ZZZZ充當掩碼的作用屏蔽不想判斷的那個字節,比如:

0850AC00 00000020
AAAAAAAA BBBBBBBB
轉換後
2850AC00 FF000020
AAAAAAAA BBBBBBBB
E0000000 80008000

這樣50AC01地址上的値就不判斷了。

0850AC01 00000020
AAAAAAAA BBBBBBBB
轉換後
2850AC00 00FF2000
AAAAAAAA BBBBBBBB
E0000000 80008000

這樣50AC00地址上的値就不判斷了。規律就是AR的地址是偶數,轉換後的地址不變,ZZZZ部份塡FF00,YYYY部份不變;AR的地址是寄數,轉換後的地址減1變偶數,ZZZZ部份塡00FF,YYYY部份邏輯左移8bits,卽乘以0x100。

另外由於Gecko的條件碼衹有16bits和32bits的,所以條件碼的地址是偶數。如果是奇數的話那麼上面一定要有另一個條件碼並且那個條件碼不要加E2000001 80008000或E0000000 80008000作結尾,因爲奇數地址的條件碼同時包含了結束上一個條件碼的作用。比如:

0850AC11 00000020
AAAAAAAA BBBBBBBB
0850AC22 00000080
CCCCCCCC DDDDDDDD
0850AC33 000000A0
EEEEEEEE FFFFFFFF
轉換後
2850AC10 00FF2000
AAAAAAAA BBBBBBBB
2850AC23 FF000080
CCCCCCCC DDDDDDDD
2850AC33 00FFA000
EEEEEEEE FFFFFFFF
E0000000 80008000

這3組並列關係的條件碼這樣轉就可以省掉兩行E0000000 80008000了。

48aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
28aaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

轉換細節同上。

88aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
28aaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

轉換細節同上。

C8aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Aaaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

轉換細節同上。

8bits如果不等於
10aaaaaa 000000XX
AAAAAAAA BBBBBBBB
轉換後
2Aaaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
E0000000 80008000

轉換細節同上。

50aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
2Aaaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

轉換細節同上。

90aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Aaaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

轉換細節同上。

D0aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
28aaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

轉換細節同上。

8bits如果小於(無符號)
28aaaaaa 000000XX
AAAAAAAA BBBBBBBB
轉換後
2Eaaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
E0000000 80008000

轉換細節同上。

68aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
2Eaaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

轉換細節同上。

A8aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Eaaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

轉換細節同上。

E8aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Eaaaaaa ZZZZYYYY
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

其它的轉換細節同上。

8bits如果小於(有符號)
18aaaaaa 000000XX
AAAAAAAA BBBBBBBB
轉換後
2Caaaaaa ZZZZYYYY (XX是正數)
66000001 00000000
2Eaaaaaa+1 ZZZZYYYY
AAAAAAAA BBBBBBBB
E0000000 80008000

2Caaaaaa ZZZZYYYY (XX是負數)
2Eaaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
E0000000 80008000

有符號的條件碼就有些複雜了,因爲Gecko的條件碼都是作無符號的比較,所以要看XX本身是正數還是負數,如果是正數的話用並列關係的兩組條件碼,如果是負數的話用嵌套關係的兩組條件碼。比如:

1850AC00 00000020 (20是正數)
AAAAAAAA BBBBBBBB
轉換後
2C50AC00 FF00007F (判斷是否是負數,因爲對於有符號的8bits數來說從80開始以上的都是負數,是的話執行下一行)
66000001 00000000 (如果上面的條件碼滿足條件就跳到AAAAAAAA BBBBBBBB開始執行)
2E50AC01 FF000020 (結束上一個條件碼,並判斷是否是0到1F之間的數,包括0和1F在内,是的話執行下一行)
AAAAAAAA BBBBBBBB
E0000000 80008000

1850AC00 000000E0 (E0是負數)
AAAAAAAA BBBBBBBB
轉換後
2C50AC00 FF00007F (判斷是否是負數,是的話執行下面被嵌套的條件碼)
2E50AC00 FF0000E0 (上面的條件碼滿足條件後判斷是否是80到DF之間的數,包括80和DF在内,是的話執行下一行)
AAAAAAAA BBBBBBBB
E0000000 80008000

58aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
2Caaaaaa ZZZZYYYY (XX是正數)
66000001 00000000
2Eaaaaaa+1 ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

2Caaaaaa ZZZZYYYY (XX是負數)
2Eaaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

轉換細節同上。

98aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Caaaaaa ZZZZYYYY (XX是正數)
66000001 00000000
2Eaaaaaa+1 ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

2Caaaaaa ZZZZYYYY (XX是負數)
2Eaaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

轉換細節同上。

D8aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Caaaaaa ZZZZYYYY (XX是正數)
6600XXXX 00000000(XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
2Eaaaaaa+1 ZZZZYYYY
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

2Caaaaaa ZZZZYYYY (XX是負數)
66100002 00000000 (如果上面的條件碼不滿足條件就跳到E2100001 80008000這行)
2Eaaaaaa ZZZZYYYY
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

轉換細節同上。

8bits如果大於(無符號)
30aaaaaa 000000XX
AAAAAAAA BBBBBBBB
轉換後
2Caaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
E0000000 80008000

轉換細節同上。

70aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
2Caaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

轉換細節同上。

B0aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Caaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

轉換細節同上。

F0aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Caaaaaa ZZZZYYYY
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

其它的轉換細節同上。

8bits如果大於(有符號)
20aaaaaa 000000XX
AAAAAAAA BBBBBBBB
轉換後
2Eaaaaaa ZZZZYYYY (XX是正數)
2Caaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
E0000000 80008000

2Eaaaaaa ZZZZYYYY (XX是負數)
66000001 00000000
2Caaaaaa+1 ZZZZYYYY
AAAAAAAA BBBBBBBB
E0000000 80008000

比如:
2050AC00 00000020 (20是正數)
AAAAAAAA BBBBBBBB
轉換後
2E50AC00 FF000080 (判斷是否是正數,因爲對於有符號的8bits數來說0到7F的都是正數,是的話執行下面被嵌套的條件碼)
2C50AC00 FF000020 (上面的條件碼滿足條件後判斷是否是21到7F之間的數,包括21和7F在内,是的話執行下一行)
AAAAAAAA BBBBBBBB
E0000000 80008000

2050AC00 000000F0 (F0是負數)
AAAAAAAA BBBBBBBB
轉換後
2E50AC00 FF000080 (判斷是否是正數,是的話執行下一行)
66000001 00000000 (如果上面的條件碼滿足條件就跳到AAAAAAAA BBBBBBBB開始執行)
2C50AC01 FF0000F0 (結束上一個條件碼,並判斷是否是80到DF之間的數,包括80和DF在内,是的話執行下一行)
AAAAAAAA BBBBBBBB
E0000000 80008000

60aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
2Eaaaaaa ZZZZYYYY (XX是正數)
2Caaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

2Eaaaaaa ZZZZYYYY (XX是負數)
66000001 00000000
2Caaaaaa+1 ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

轉換細節同上。

A0aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Eaaaaaa ZZZZYYYY (XX是正數)
2Caaaaaa ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

2Eaaaaaa ZZZZYYYY (XX是負數)
66000001 00000000
2Caaaaaa+1 ZZZZYYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

轉換細節同上。

E0aaaaaa 000000XX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Eaaaaaa ZZZZYYYY (XX是正數)
66100002 00000000 (如果上面的條件碼不滿足條件就跳到E2100001 80008000這行)
2Caaaaaa ZZZZYYYY
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

2Eaaaaaa ZZZZYYYY (XX是負數)
6600XXXX 00000000(XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
2Caaaaaa+1 ZZZZYYYY
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

16bits如果等於
0Aaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
轉換後
28aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

16bits的轉換容易多了,地址都是偶數,不用設置掩碼。

4Aaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
28aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

8Aaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
28aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

CAaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Aaaaaaa 0000YYYY
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

16bits如果不等於
12aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
轉換後
2Aaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

52aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
2Aaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

92aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Aaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

D2aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
28aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

16bits如果小於(無符號)
2Aaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
轉換後
2Eaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

6Aaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
2Eaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

AAaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Eaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

EAaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Eaaaaaa 0000XXXX
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

16bits如果小於(有符號)
1Aaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
轉換後
2Caaaaaa 00007FFF (XXXX是正數)
66000001 00000000
2Eaaaaaa+1 0000XXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

2Caaaaaa 00007FFF (XXXX是負數)
2Eaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

5Aaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
2Caaaaaa 00007FFF (XXXX是正數)
66000001 00000000
2Eaaaaaa+1 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

2Caaaaaa 00007FFF (XXXX是負數)
2Eaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

9Aaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Caaaaaa 00007FFF (XXXX是正數)
66000001 00000000
2Eaaaaaa+1 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

2Caaaaaa 00007FFF (XXXX是負數)
2Eaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

DAaaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Caaaaaa 00007FFF (XXXX是正數)
6600XXXX 00000000(XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
2Eaaaaaa+1 0000XXXX
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

2Caaaaaa 00007FFF (XXXX是負數)
66100002 00000000 (如果上面的條件碼不滿足條件就跳到E2100001 80008000這行)
2Eaaaaaa 0000XXXX
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

16bits如果大於(無符號)
32aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
轉換後
2Caaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

72aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
2Caaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

B2aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Caaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

F2aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Caaaaaa 0000XXXX
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

16bits如果大於(有符號)
22aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
轉換後
2Eaaaaaa 00008000 (XXXX是正數)
2Caaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

2Eaaaaaa 00008000 (XXXX是負數)
66000001 00000000
2Caaaaaa+1 0000XXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

62aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
2Eaaaaaa 00008000 (XXXX是正數)
2Caaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

2Eaaaaaa 00008000 (XXXX是負數)
66000001 00000000
2Caaaaaa+1 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

A2aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Eaaaaaa 00008000 (XXXX是正數)
2Caaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

2Eaaaaaa 00008000 (XXXX是負數)
66000001 00000000
2Caaaaaa+1 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

E2aaaaaa 0000XXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
2Eaaaaaa 00008000 (XXXX是正數)
66100002 00000000 (如果上面的條件碼不滿足條件就跳到E2100001 80008000這行)
2Caaaaaa 0000XXXX
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

2Eaaaaaa 00008000 (XXXX是負數)
6600XXXX 00000000(XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
2Caaaaaa+1 0000XXXX
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

32bits如果等於
0Caaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
轉換後
20aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

4Caaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
20aaaaaa XXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

8Caaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
20aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

CCaaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
22aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

32bits如果不等於
14aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
轉換後
22aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

54aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
22aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

94aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
22aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

D4aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
20aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

32bits如果小於(無符號)
2Caaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
轉換後
24aaaaaa FFFFFFFF (XXXXXXXX是正數)
26aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

24aaaaaa FFFFFFFF (XXXXXXXX是負數)
66000001 00000000
26aaaaaa+1 XXXXXXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

6Caaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
24aaaaaa FFFFFFFF (XXXXXXXX是正數)
26aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

24aaaaaa FFFFFFFF (XXXXXXXX是負數)
66000001 00000000
26aaaaaa+1 XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

ACaaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
24aaaaaa FFFFFFFF (XXXXXXXX是正數)
26aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

24aaaaaa FFFFFFFF (XXXXXXXX是負數)
66000001 00000000
26aaaaaa+1 XXXXXXXX
AAAAAAAA BBBBBBBB
EEEEEEEE FFFFFFFF
……
CCCCCCCC DDDDDDDD
E0000000 80008000

ECaaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
24aaaaaa FFFFFFFF (XXXXXXXX是正數)
26aaaaaa XXXXXXXX
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

24aaaaaa FFFFFFFF (XXXXXXXX是負數)
6600XXXX 00000000(XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
26aaaaaa+1 XXXXXXXX
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
EEEEEEEE FFFFFFFF
……
CCCCCCCC DDDDDDDD
E0000000 80008000

32bits如果小於(有符號)
1Caaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
轉換後
26aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

5Caaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
26aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

9Caaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
26aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

DCaaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
26aaaaaa XXXXXXXX
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

32bits如果大於(無符號)
34aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
轉換後
26aaaaaa 00000000 (XXXXXXXX是正數)
66000001 00000000
24aaaaaa+1 XXXXXXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

26aaaaaa 00000000 (XXXXXXXX是負數)
24aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

74aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
26aaaaaa 00000000 (XXXXXXXX是正數)
66000001 00000000
24aaaaaa+1 XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

26aaaaaa 00000000 (XXXXXXXX是負數)
24aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

B4aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
26aaaaaa 00000000 (XXXXXXXX是正數)
66000001 00000000
24aaaaaa+1 XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

26aaaaaa 00000000 (XXXXXXXX是負數)
24aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

F4aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
26aaaaaa 00000000 (XXXXXXXX是正數)
6600XXXX 00000000(XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
24aaaaaa+1 XXXXXXXX
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

26aaaaaa 00000000 (XXXXXXXX是負數)
24aaaaaa XXXXXXXX
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
EEEEEEEE FFFFFFFF
……
CCCCCCCC DDDDDDDD
E0000000 80008000

32bits如果大於(有符號)
24aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
轉換後
24aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
E0000000 80008000

64aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
轉換後
24aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
E0000000 80008000

A4aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
24aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

E4aaaaaa XXXXXXXX
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
轉換後
24aaaaaa XXXXXXXX
6600XXXX 00000000 (XXXX塡本行和E0000000 80008000之間的總行數,總行數不包括本行和E0000000 80008000。作用是如果上面的條件碼滿足條件就跳到E0000000 80008000結束本條件碼)
E2100001 80008000 (如果上面的條件碼不滿足條件就用這行結束上面的條件碼,並把不執行下面的代碼的狀態倒轉成執行下面的代碼)
AAAAAAAA BBBBBBBB
CCCCCCCC DDDDDDDD
EEEEEEEE FFFFFFFF
……
E0000000 80008000

指針碼
8bits
40aaaaaa YYYYYYXX
轉換後
48010000 00aaaaaa (載入aaaaaa上的32bits數作爲指針的基地址)
DE000000 80008180 (檢查基地址是否在80000000到81800000之間。Gecko不像CMF會自動檢查基地址的有效性,所以加入這行可以減少死機的槪率)
10YYYYYY 000000XX (把XX寫入基地址+YYYYYY後的地址)
E0000000 80008000

16bits
42aaaaaa YYYYXXXX
轉換後
48010000 00aaaaaa
DE000000 80008180
1200YYYY*2 0000XXXX
E0000000 80008000

32bits
44aaaaaa XXXXXXXX
轉換後
48010000 00aaaaaa
DE000000 80008180
14000000 XXXXXXXX
E0000000 80008000

32bits的AR指針碼是個雞肋,所以幾乎用不著。

如果有多個指針碼用的是同一個指針地址,轉換後可以組合成一組指針碼減少行數。比如:

4055780C 0005B263
4255780C 015C03E8
4255780C 0231270F
轉換後
48010000 0055780C
DE000000 80008180
100005B2 00000063
120002B8 000003E8 (15C*2=2B8)
12000462 0000270F (231*2=462)
E0000000 80008000

如果有兩組16bits指針碼的YYYY相差1,表示它們的offset是相鄰的,轉換後可以合併成一組32bits的指針碼。比如:

42350B88 030C05F5
42350B88 030DE0FF
轉換後
48010000 00350B88
DE000000 80008180
14000618 05F5E0FF (30C*2=618)
E0000000 80008000

變値碼
8bits
80aaaaaa 000000XX
轉換後
82010000 00aaaaaa (XX是正數)
86000000 000000XX
84010000 00aaaaaa

82010000 00aaaaaa (XX是負數)
86000000 FFFFFFXX
84010000 00aaaaaa

16bits
82aaaaaa 0000XXXX
轉換後
82110000 00aaaaaa (XXXX是正數)
86000000 0000XXXX
84110000 00aaaaaa

82110000 00aaaaaa (XXXX是負數)
86000000 FFFFXXXX
84110000 00aaaaaa

32bits
84aaaaaa XXXXXXXX
轉換後
82210000 00aaaaaa
86000000 XXXXXXXX
84210000 00aaaaaa

84種AR碼的轉換方法終於講解完了,掌握了這些其實已經足夠了,但如果想優化或簡化轉換後的密碼就請繼續看下去。因爲Gecko格式比AR格式齊全,所以能實現AR碼實現不了的修改。

拷貝碼
AR碼裡沒有這個,所以HP不減等密碼通常都把現在値和上限的地址都改成最大,這樣HP槽就不會改爆。用Gecko的拷貝碼就不必把上限也改到最大,衹要把上限上的値拷貝到現在値就行了。比如:

8bits
00aaaaaa 000000XX (現在値)
00bbbbbb 000000XX (上限)
轉換後
82010000 00bbbbbb
84010000 00aaaaaa

16bits
02aaaaaa 0000XXXX
02bbbbbb 0000XXXX
轉換後
82110000 00bbbbbb
84110000 00aaaaaa

32bits
04aaaaaa XXXXXXXX
04bbbbbb XXXXXXXX
轉換後
82210000 00bbbbbb
84210000 00aaaaaa

指針上的上限也同樣可以拷貝到現在値,比如:

426094C0 01B4270F (現在値)
426094C0 01B6270F (上限)
轉換後
48010000 006094C0
DE000000 80008180
92110000 0000036C (1B6*2=36C)
94110000 00000368 (1B4*2=368)
E0000000 80008000

如果遇到把沒有規律的數據寫入一片連續的區域裡,雖然不能用壓縮碼,但可以用字符串代碼縮短密碼的行數。比如:

0423AB30 21080342
0423AB34 90C5B8A0
0423AB38 54B80314
0423AB3C 68100C47
0423AB40 14503570
0423AB44 48048304
轉換後
0623AB30 00000018 (連續寫入24個字節,24=0x18)
21080342 90C5B8A0
54B80314 68100C47
14503570 48048304

如果遇到用Joker Code控制程序碼的開關的可以用開關碼把開和關的兩組Joker Digit合並成一組。比如:

Infinite Health (Z+A On, Z+B Off)
4C5B40F0 00000110 (Z+A的Joker Code)
04201DAC 60000000
04201DB0 60000000
4C5B40F0 00000210 (Z+B的Joker Code)
04201DAC 4800004D
04201DB0 38000001
轉換後
Infinite Health (Z+A On/Off)
205B40F0 00000110
04201DAC 60000000
04201DB0 60000000
CC000000 00000000
04201DAC 4800004D
04201DB0 38000001
E0000000 80008000

這樣按一下Z+A第2、3行起效,程序碼發揮作用;再按一下Z+A第5、6行起效,程序碼還原;再按一下Z+A第2、3行又起效。如此反復切換,就像開關一樣。



隱藏奧義


如果遇到程序碼是跳到空白的區域插入新的指令再跳回到原來的位置,可以用C2開頭的密碼簡化。一定要懂PPC彙編指令的人才看得出哪些程序碼可以簡化,新手切勿隨意嘗試。比如:

0421C930 4BDE65F0 (b 0xFFDE65F0,從8021C930處跳轉到80002F20執行下面插入的新指令。轉換後這條指令可以省略了)
04002F20 38000004
04002F24 981C0034
04002F28 38000000
04002F2C 48219A08 (b 0x219A08,執行完上面的新指令後從80002F2C跳轉回8021C934繼續執行原來的程序段。轉換後這條指令可以省略了)
轉換後
C221C930 00000002 (在8021C930處插入下面2行新增的指令,然後Gecko會自動跳轉回8021C934)
38000004 981C0034
38000000 00000000

把轉好的密碼放到記事本内,再在文本的開頭兩行放遊戲ID和遊戲名保存爲TXT就行了。查遊戲ID可以通過NeoGamma啓動光驅裡的GC遊戲時看到,也可以用DML WAD Creator轉換DML用的ISO時生成的文件夾名字獲得。

教程到此爲止,祝大家玩得愉快。

Action Replay格式(復號化)
直接寫入碼
8bits
00aaaaaa YYYYYYXX
把連續的YYYYYY+1個XX寫入到aaaaaa。

16bits
02aaaaaa YYYYXXXX
把連續的YYYY+1個XXXX寫入到aaaaaa。

32bits
04aaaaaa XXXXXXXX
把XXXXXXXX寫入到aaaaaa。

壓縮碼
8bits
00000000 80aaaaaa
000000XX VVNNZZZZ
把NN個字節的XX寫入aaaaaa,每次aaaaaa遞增ZZZZ,XX遞增VV。

16bits
00000000 82aaaaaa
0000XXXX VVNNZZZZ
把NN個字節的XXXX寫入aaaaaa,每次aaaaaa遞增ZZZZ*2,XXXX遞增VV。

32bits
00000000 84aaaaaa
XXXXXXXX VVNNZZZZ
把NN個字節的XXXXXXXX寫入aaaaaa,每次aaaaaa遞增ZZZZ*4,XXXXXXXX遞增VV。

條件碼
8bits如果等於
08aaaaaa 000000XX
如果aaaaaa上的8bits値等於XX,執行下面的一行代碼,否則下面的一行代碼不執行。

48aaaaaa 000000XX
如果aaaaaa上的8bits値等於XX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

88aaaaaa 000000XX
如果aaaaaa上的8bits値等於XX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。(其實和下面的D0開頭的碼完全一樣)

C8aaaaaa 000000XX
如果aaaaaa上的8bits値等於XX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。(其實和下面的90開頭的碼完全一樣)

8bits如果不等於
10aaaaaa 000000XX
如果aaaaaa上的8bits値不等於XX,執行下面的一行代碼,否則下面的一行代碼不執行。

50aaaaaa 000000XX
如果aaaaaa上的8bits値不等於XX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

90aaaaaa 000000XX
如果aaaaaa上的8bits値不等於XX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。(其實和上面的C8開頭的碼完全一樣)

D0aaaaaa 000000XX
如果aaaaaa上的8bits値不等於XX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。(其實和上面的88開頭的碼完全一樣)

8bits如果小於(無符號)
28aaaaaa 000000XX
如果aaaaaa上的8bits値小於XX,執行下面的一行代碼,否則下面的一行代碼不執行。

68aaaaaa 000000XX
如果aaaaaa上的8bits値小於XX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

A8aaaaaa 000000XX
如果aaaaaa上的8bits値小於XX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。

E8aaaaaa 000000XX
如果aaaaaa上的8bits値小於XX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。

8bits如果小於(有符號)
18aaaaaa 000000XX
如果aaaaaa上的8bits値小於XX,執行下面的一行代碼,否則下面的一行代碼不執行。

58aaaaaa 000000XX
如果aaaaaa上的8bits値小於XX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

98aaaaaa 000000XX
如果aaaaaa上的8bits値小於XX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。

D8aaaaaa 000000XX
如果aaaaaa上的8bits値小於XX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。

8bits如果大於(無符號)
30aaaaaa 000000XX
如果aaaaaa上的8bits値大於XX,執行下面的一行代碼,否則下面的一行代碼不執行。

70aaaaaa 000000XX
如果aaaaaa上的8bits値大於XX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

B0aaaaaa 000000XX
如果aaaaaa上的8bits値大於XX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。

F0aaaaaa 000000XX
如果aaaaaa上的8bits値大於XX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。

8bits如果大於(有符號)
20aaaaaa 000000XX
如果aaaaaa上的8bits値大於XX,執行下面的一行代碼,否則下面的一行代碼不執行。

60aaaaaa 000000XX
如果aaaaaa上的8bits値大於XX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

A0aaaaaa 000000XX
如果aaaaaa上的8bits値大於XX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。

E0aaaaaa 000000XX
如果aaaaaa上的8bits値大於XX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。

16bits如果等於
0Aaaaaaa 0000XXXX
如果aaaaaa上的16bits値等於XXXX,執行下面的一行代碼,否則下面的一行代碼不執行。

4Aaaaaaa 0000XXXX
如果aaaaaa上的16bits値等於XXXX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

8Aaaaaaa 0000XXXX
如果aaaaaa上的16bits値等於XXXX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。(其實和下面的D2開頭的碼完全一樣)

CAaaaaaa 0000XXXX
如果aaaaaa上的16bits値等於XXXX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。(其實和下面的92開頭的碼完全一樣)

16bits如果不等於
12aaaaaa 0000XXXX
如果aaaaaa上的16bits値不等於XXXX,執行下面的一行代碼,否則下面的一行代碼不執行。

52aaaaaa 0000XXXX
如果aaaaaa上的16bits値不等於XXXX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

92aaaaaa 0000XXXX
如果aaaaaa上的16bits値不等於XXXX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。(其實和上面的CA開頭的碼完全一樣)

D2aaaaaa 0000XXXX
如果aaaaaa上的16bits値不等於XXXX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。(其實和上面的8A開頭的碼完全一樣)

16bits如果小於(無符號)
2Aaaaaaa 0000XXXX
如果aaaaaa上的16bits値小於XXXX,執行下面的一行代碼,否則下面的一行代碼不執行。

6Aaaaaaa 0000XXXX
如果aaaaaa上的16bits値小於XXXX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

AAaaaaaa 0000XXXX
如果aaaaaa上的16bits値小於XXXX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。

EAaaaaaa 0000XXXX
如果aaaaaa上的16bits値小於XXXX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。

16bits如果小於(有符號)
1Aaaaaaa 0000XXXX
如果aaaaaa上的16bits値小於XXXX,執行下面的一行代碼,否則下面的一行代碼不執行。

5Aaaaaaa 0000XXXX
如果aaaaaa上的16bits値小於XXXX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

9Aaaaaaa 0000XXXX
如果aaaaaa上的16bits値小於XXXX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。

DAaaaaaa 0000XXXX
如果aaaaaa上的16bits値小於XXXX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。

16bits如果大於(無符號)
32aaaaaa 0000XXXX
如果aaaaaa上的16bits値大於XXXX,執行下面的一行代碼,否則下面的一行代碼不執行。

72aaaaaa 0000XXXX
如果aaaaaa上的16bits値大於XXXX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

B2aaaaaa 0000XXXX
如果aaaaaa上的16bits値大於XXXX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。

F2aaaaaa 0000XXXX
如果aaaaaa上的16bits値大於XXXX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。

16bits如果大於(有符號)
22aaaaaa 0000XXXX
如果aaaaaa上的16bits値大於XXXX,執行下面的一行代碼,否則下面的一行代碼不執行。

62aaaaaa 0000XXXX
如果aaaaaa上的16bits値大於XXXX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

A2aaaaaa 0000XXXX
如果aaaaaa上的16bits値大於XXXX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。

E2aaaaaa 0000XXXX
如果aaaaaa上的16bits値大於XXXX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。

32bits如果等於
0Caaaaaa XXXXXXXX
如果aaaaaa上的32bits値等於XXXXXXXX,執行下面的一行代碼,否則下面的一行代碼不執行。

4Caaaaaa XXXXXXXX
如果aaaaaa上的32bits値等於XXXXXXXX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

8Caaaaaa XXXXXXXX
如果aaaaaa上的32bits値等於XXXXXXXX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。(其實和下面的D4開頭的碼完全一樣)

CCaaaaaa XXXXXXXX
如果aaaaaa上的32bits値等於XXXXXXXX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。(其實和下面的94開頭的碼完全一樣)

32bits如果不等於
14aaaaaa XXXXXXXX
如果aaaaaa上的32bits値不等於XXXXXXXX,執行下面的一行代碼,否則下面的一行代碼不執行。

54aaaaaa XXXXXXXX
如果aaaaaa上的32bits値不等於XXXXXXXX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

94aaaaaa XXXXXXXX
如果aaaaaa上的32bits値不等於XXXXXXXX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。(其實和上面的CC開頭的碼完全一樣)

D4aaaaaa XXXXXXXX
如果aaaaaa上的32bits値不等於XXXXXXXX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。(其實和上面的8C開頭的碼完全一樣)

32bits如果小於(無符號)
2Caaaaaa XXXXXXXX
如果aaaaaa上的32bits値小於XXXXXXXX,執行下面的一行代碼,否則下面的一行代碼不執行。

6Caaaaaa XXXXXXXX
如果aaaaaa上的32bits値小於XXXXXXXX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

ACaaaaaa XXXXXXXX
如果aaaaaa上的32bits値小於XXXXXXXX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。

ECaaaaaa XXXXXXXX
如果aaaaaa上的32bits値小於XXXXXXXX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。

32bits如果小於(有符號)
1Caaaaaa XXXXXXXX
如果aaaaaa上的32bits値小於XXXXXXXX,執行下面的一行代碼,否則下面的一行代碼不執行。

5Caaaaaa XXXXXXXX
如果aaaaaa上的32bits値小於XXXXXXXX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

9Caaaaaa XXXXXXXX
如果aaaaaa上的32bits値小於XXXXXXXX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。

DCaaaaaa XXXXXXXX
如果aaaaaa上的32bits値小於XXXXXXXX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。

32bits如果大於(無符號)
34aaaaaa XXXXXXXX
如果aaaaaa上的32bits値大於XXXXXXXX,執行下面的一行代碼,否則下面的一行代碼不執行。

74aaaaaa XXXXXXXX
如果aaaaaa上的32bits値大於XXXXXXXX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

B4aaaaaa XXXXXXXX
如果aaaaaa上的32bits値大於XXXXXXXX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。

F4aaaaaa XXXXXXXX
如果aaaaaa上的32bits値大於XXXXXXXX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。

32bits如果大於(有符號)
24aaaaaa XXXXXXXX
如果aaaaaa上的32bits値大於XXXXXXXX,執行下面的一行代碼,否則下面的一行代碼不執行。

64aaaaaa XXXXXXXX
如果aaaaaa上的32bits値大於XXXXXXXX,執行下面的兩行代碼,否則下面的兩行代碼不執行。

A4aaaaaa XXXXXXXX
如果aaaaaa上的32bits値大於XXXXXXXX,執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼不執行。

E4aaaaaa XXXXXXXX
如果aaaaaa上的32bits値大於XXXXXXXX,不執行下面的所有代碼(僅限同一組密碼),否則下面的所有代碼執行。

指針碼
8bits
40aaaaaa YYYYYYXX
把XX寫入到aaaaaa上的基地址+YYYYYY後的地址。

16bits
42aaaaaa YYYYXXXX
把XXXX寫入到aaaaaa上的基地址+YYYY*2後的地址。

32bits
44aaaaaa XXXXXXXX
把XXXXXXXX寫入到aaaaaa上的基地址上的地址。(幾乎沒用,因爲沒法指定偏移量,寧可拆成2個16bits的指針碼)

變値碼
8bits
80aaaaaa 000000XX
把aaaaaa上的8bits値增加XX(有符號),如果XX是負數就是作減法,例如:

805A2000 00000020 (+20)
805A2000 000000E0 (-20)

16bits
82aaaaaa 0000XXXX
把aaaaaa上的16bits値增加XXXX(有符號),如果XXXX是負數就是作減法,例如:

825A2000 00000020 (+20)
825A2000 0000FFE0 (-20)

32bits
84aaaaaa XXXXXXXX
把aaaaaa上的32bits値增加XXXXXXXX(有符號),如果XXXXXXXX是負數就是作減法,例如:

845A2000 00000020 (+20)
845A2000 FFFFFFE0 (-20)
Gecko格式
Wii有不同的内存區域,不過衹有2個被遊戲使用(也被金手指使用):

MEM1: 從0x80000000到0x81800000
MEM2: 從0x90000000到0x94000000

然而,MEM2的頂部是無法訪問的(嘗試從那兒讀寫會使Wii死機)。那得取決於遊戲,但似乎你可以自由訪問從0x90000000到0x93400000的區域。
ba:基地址。每次代碼處理器執行後設置在0x80000000。每次基地址會加上一個代碼地址,代碼處理器執行:地址=地址+(基地址&0xFE000000)。你可以更改它,但如果你這麼幹了,別忘了事後還原成它本來的値。

po:指針。每次代碼處理器執行後設置在0x80000000。每次指針會加上一個代碼地址,代碼處理器執行:地址=地址+指針。你可以隨意更改它。

grN:“Gecko寄存器N”。它不是一個眞正的寄存器類似r0或r1。它是個32bits的値,因爲Gecko在内存中保留了一片區域存放N。N可以是0x0到0xF的値。你可以在裡面存儲/載入任意値,但要注意其它的代碼可能會覆蓋你的値。別指望代碼處理器每次也會執行它。如果你希望存儲一個不能被改變的値,嘗試用代碼處理器以外的眞正的地址,或用46/4E結合goto代碼類型。注意grN比gecko/代碼處理器優先被存儲。那意味著它們總是在一個靜態地址上被訪問:0x80001804,[0x80001804]=gr0,[0x80001808]=gr1,……,[0x80001840]=grF。你可以直接訪問它們,例如在插入一個彙編指令時。

bN:“區塊N”。一個區塊由2個32bits的値組成。它們用來存儲重復/返回/轉到/轉到下一子程序代碼的信息。比如b0的數據存儲在0x80001844,b1的在0x8000184C……

CT:代碼類型。範圍從0到7。它是一個代碼的第一個數字的開頭3個bit(譯者按:從最低位數起)。因爲這個你會注意到代碼的所有代碼類型事實上被乘以2:CT 1:2……,CT 2:4……,CT 3:6……,CT 7:E。第4個bit用來告訴代碼處理器使用指針還是基地址。那意味著你可以通過觀察代碼的第一個數字知道基地址是否被使用。如果是偶數就是基地址,如果是奇數就是指針。

CST:代碼子類型。它是一個代碼的第二個數字的開頭3個bit(譯者按:從最低位數起)。因爲這個你會注意到代碼的所有代碼子類型事實上被乘以2:CST1:2……,CST2:4……,CST3:6……,CST7:E。第4個bit事實上是地址 (____)的一部分。

____:它是一些將被使用的代碼的地址部分。它的範圍從0x00000000到0x01FFFFFF。事實上“____”被稱作地址是不完整的,圍繞在“____”周圍的一些數字也是地址的一部分。比如0x00FFFFFF以上的部分,地址會變更代碼子類型中的“look”部分,把它標記成一個奇數。

[]:比如[XXXXXXXX]。括弧把XXXXXXXX定義爲内存區域,不是一個値。所以[XXXXXXXX]表示“存儲在XXXXXXXX上的數據”。無論如何括弧内的値必須是個有效地址,否則Wii會死機。

+=:比如pa+=XXXXXXXX表示pa=pa+XXXXXXXX。

對條件代碼(If……)來說所有的比較都是無符號的,這表示數字範圍是從0x00000000到0xFFFFFFFF,然而遊戲有時會用有符號的數字。比如你在遊戲中的X坐標會從1到0再到-1,在16進制中表示從0x00000001到0x00000000再到0xFFFFFFFF。所以由於代碼處理器使用無符號的數字,在這種情況下你必須先尋找一個“小於”値(從0x00000001到0x00000000),然後才是“大於”値。

你會找到代碼類型盡可能詳細的完整列表。爲了幫助新來的理解代碼類型,有需要時我把類型分成了使用基地址和使用指針的。

做代碼前的一點建議,特別是使用指針時:在寫入你從内存中載入的値到一個地址時確保地址是有效的。代碼處理器不檢查地址範圍的,如果地址是錯的仍會盲目地寫入(接著Wii死機)。 看來Wii的内存是重度的被使用/被塡\充,一個用來存儲地址的地方也會稍後被用來存儲數據。那表示檢查地址是否是00000000的機制並不是一直有效的。

所以在你寫入從内存載入的値到一個地址前你必須確保地址是有效的。可以用CE/DE If……代碼類型來判斷。

舉例:

對MEM1:
CE000000 80008180:檢查基地址是否在[80000000,81800000]範圍内。

DE000000 80008180 :檢查指針是否在[80000000,81800000]範圍内。

對MEM2:
CE000000 90009340:檢查基地址是否在[90000000,93400000]範圍内。

DE000000 90009340:檢查指針是否在[90000000,93400000]範圍内。

如果你想檢查基地址/指針是在MEM1還是MEM2内:
CE000000 80008180:檢查基地址是否在[80000000,81800000]範圍内。
66000001 00000000:如果代碼執行後的狀態是true則跳過下一行。
CE000001 90009340:結束上一個判斷,然後檢查基地址是否在[90000000,93400000]。

DE000000 80008180:檢查指針是否在[80000000,81800000]。
66000001 00000000:如果代碼執行後的狀態是true則跳過下一行。
DE000001 90009340 :結束上一個判斷,然後檢查指針是否在[90000000,93400000]。

那表示你先載入你要的數據,然後用一個(或多個)CE/DE代碼是否是一個有效地址。

同樣的卽使指針有時被某些遊戲重度地使用,有時不可能找到一個穩定的指針。比如《超級馬里奧銀河》,每個角色有他們自己的數據,所有的數據是動態的,不可能找到靜態的地址,在這些特殊的情況下你除了用彙編指令修改外別無選擇。還是在《超級馬銀》中,每個角色有他們自己的AI程序。通過找到你要的角色的程序並hook它,你會得到訪問它的指針(通常存儲在Wii的寄存器中)。你也可以把指針寫入一個已知的、修正的位置,然後用它和別的代碼一起去修改角色的數據,或寫一個起同樣的修改效果的彙編程序。

所以緊記指針是很危險的,人們總是認爲他們找到了衹對自己起效的眞指針但往往是假指針。

確保多測試幾次依賴指針的代碼,必須改變等級、角色的代碼,甚至新建一個存檔來測試。如果效果停止了(卽使沒發生可見的副作用)或在某個點引起死機了,別再使用它了(嘗試去找個新的指針或用彙編修改遊戲)。別發表還沒被重度確認/測試的代碼。

CT0:直接寫入/塡\充到内存

CST0:8bits寫入&塡\充

00______ YYYY00XX:8bits内存寫入&塡\充到(基地址)
把連續的YYYY+1個XX寫入到基地址+地址

10______ YYYY00XX:8bits内存寫入&塡\充到(指針)
把連續的YYYY+1個XX寫入到指針+地址

CST1:16bits寫入&塡\充

02______ YYYYXXXX:16bits内存寫入&塡\充到(基地址)
把連續的YYYY+1個XXXX寫入到基地址+地址

12______ YYYYXXXX:16bits内存寫入&塡\充到(指針)
把連續的YYYY+1個XXXX寫入到指針+地址

CST2:32bits寫入

04______ XXXXXXXX:32bits内存寫入到(基地址)
把XXXXXXXX寫入到基地址+地址

14______ XXXXXXXX:32bits内存寫入到(指針)
把XXXXXXXX寫入到指針+地址

CST3:字符串代碼

06______ YYYYYYYY:把代碼d1d2d3d4 d5d6d7d8……補丁到(基地址)
把d1d2d3d4 d5d6d7d8……寫入到基地址+地址。YYYYYYYY是寫入的字節數。

16______ XXXXXXXX:把代碼d1d2d3d4 d5d6d7d8……補丁到(指針)
把d1d2d3d4 d5d6d7d8……寫入到指針+地址。YYYYYYYY是寫入的字節數。

CST4:壓縮碼

08______ 000000XX:8bits壓縮碼(基地址)
0NNNZZZZ VVVVVVVV
把NNN+1個字節的XX寫入基地址+地址,然後XX+=VVVVVVVV(XX=XX+VVVVVVVV),地址+=ZZZZ(地址=地址+ZZZZ)

18______ 000000XX:8bits壓縮碼(指針)
0NNNZZZZ VVVVVVVV
把NNN+1個字節的XX寫入指針+地址,然後XX+=VVVVVVVV(XX=XX+VVVVVVVV),地址+=ZZZZ(地址=地址+ZZZZ)

08______ 0000XXXX:16bits壓縮碼(基地址)
1NNNZZZZ VVVVVVVV
把NNN+1個雙字節的XXXX寫入基地址+地址,然後XXXX+=VVVVVVVV(XXXX=XXXX+VVVVVVVV),地址+=ZZZZ(地址=地址+ZZZZ)

18______ 0000XXXX:16bits壓縮碼(指針)
1NNNZZZZ VVVVVVVV
把NNN+1個雙字節的XXXX寫入指針+地址,然後XXXX+=VVVVVVVV(XXXX=XXXX+VVVVVVVV),地址+=ZZZZ(地址=地址+ZZZZ)

08______ XXXXXXXX:32bits壓縮碼(基地址)
2NNNZZZZ VVVVVVVV
把NNN+1個四字節的XXXXXXXX寫入基地址+地址,然後XXXXXXXX+=VVVVVVVV(XXXXXXXX=XXXXXXXX+VVVVVVVV),地址+=ZZZZ(地址=地址+ZZZZ)

18______ XXXXXXXX:32bits壓縮碼(指針)
2NNNZZZZ VVVVVVVV
把NNN+1個四字節的XXXXXXXX寫入指針+地址,然後XXXXXXXX+=VVVVVVVV(XXXXXXXX=XXXXXXXX+VVVVVVVV),地址+=ZZZZ(地址=地址+ZZZZ)


CT1 常規條件代碼 (16/32 bits)

CST0:32bits如果等於

20______ YYYYYYYY:32bits如果等於(基地址)
比較[基地址+地址]上的32bits値是否等於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

30______ YYYYYYYY:32bits如果等於(指針)
比較[指針+地址] 上的32bits値是否等於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

20_____1 YYYYYYYY:上一個條件碼的結束行,然後32bits如果等於(基地址)
作爲上一個條件碼的結束行,然後比較[基地址+地址] 上的32bits値是否等於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

30_____1 YYYYYYYY:上一個條件碼的結束行,然後32bits如果等於(指針)
作爲上一個條件碼的結束行,然後比較[指針+地址] 上的32bits値是否等於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CST1:32bits如果不等於

22______ YYYYYYYY:32bits如果不等於(基地址)
比較[基地址+地址]上的32bits値是否不等於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

32______ YYYYYYYY:32bits如果不等於(指針)
比較[指針+地址]上的32bits値是否不等於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

22_____1 YYYYYYYY:上一個條件碼的結束行,然後32bits如果不等於(基地址)
作爲上一個條件碼的結束行,然後比較[基地址+地址] 上的32bits値是否不等於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

32_____1 YYYYYYYY:上一個條件碼的結束行,然後32bits如果不等於(指針)
作爲上一個條件碼的結束行,然後比較[指針+地址] 上的32bits値是否不等於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CST2:32bits如果大於

24______ YYYYYYYY:32bits如果大於(基地址)(有符號)
比較[基地址+地址]上的32bits値是否大於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

34______ YYYYYYYY:32bits如果大於(指針)(有符號)
比較[指針+地址]上的32bits値是否大於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

24_____1 YYYYYYYY:上一個條件碼的結束行,然後32bits如果大於(基地址)(有符號)
作爲上一個條件碼的結束行,然後比較[基地址+地址] 上的32bits値是否大於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

34_____1 YYYYYYYY:上一個條件碼的結束行,然後32bits如果大於(指針)(有符號)
作爲上一個條件碼的結束行,然後比較[指針+地址] 上的32bits値是否大於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CST3:32bits如果小於

26______ YYYYYYYY:32bits如果小於(基地址)(有符號)
比較[基地址+地址]上的32bits値是否小於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

36______ YYYYYYYY:32bits如果小於(指針)(有符號)
比較[指針+地址]上的32bits値是否小於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

26_____1 YYYYYYYY:上一個條件碼的結束行,然後32bits如果小於(基地址)(有符號)
作爲上一個條件碼的結束行,然後比較[基地址+地址] 上的32bits値是否小於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

36_____1 YYYYYYYY:上一個條件碼的結束行,然後32bits如果小於(指針)(有符號)
作爲上一個條件碼的結束行,然後比較[指針+地址] 上的32bits値是否小於YYYYYYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CST4:16bits如果等於

28______ ZZZZYYYY:16bits如果等於(基地址)
比較[基地址+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否等於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。
(譯者按:ZZZZ充當了掩碼,如果用來判斷Joker Adress的話可以用ZZZZ忽略掉不想判斷的Joker Digits。下同。)

38______ ZZZZYYYY:16bits如果等於(指針)
比較[指針+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否等於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

28_____1 ZZZZYYYY:上一個條件碼的結束行,然後16bits如果等於(基地址)
作爲上一個條件碼的結束行,然後比較[基地址+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否等於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

38_____1 ZZZZYYYY:上一個條件碼的結束行,然後16bits如果等於(指針)
作爲上一個條件碼的結束行,然後比較[指針+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否等於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CST5:16bits如果不等於

2A______ ZZZZYYYY:16bits如果不等於(基地址)
比較[基地址+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否不等於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

3A______ ZZZZYYYY:16bits如果不等於(指針)
比較[指針+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否不等於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

2A_____1 ZZZZYYYY:上一個條件碼的結束行,然後16bits如果不等於(基地址)
作爲上一個條件碼的結束行,然後比較[基地址+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否不等於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

3A_____1 ZZZZYYYY:上一個條件碼的結束行,然後16bits如果不等於(指針)
作爲上一個條件碼的結束行,然後比較[指針+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否不等於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CST6:16bits如果大於

2C______ ZZZZYYYY:16bits如果大於(基地址)
比較[基地址+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否大於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

3C______ ZZZZYYYY:16bits如果大於(指針)
比較[指針+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否大於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

2C_____1 ZZZZYYYY:上一個條件碼的結束行,然後16bits如果大於(基地址)
作爲上一個條件碼的結束行,然後比較[基地址+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否大於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

3C_____1 ZZZZYYYY:上一個條件碼的結束行,然後16bits如果大於(指針)
作爲上一個條件碼的結束行,然後比較[指針+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否大於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CST7:16bits如果小於

2E______ ZZZZYYYY:16bits如果小於(基地址)
比較[基地址+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否小於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

3E______ ZZZZYYYY:16bits如果小於(指針)
比較[指針+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否小於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

2E_____1 ZZZZYYYY:上一個條件碼的結束行,然後16bits如果小於(基地址)
作爲上一個條件碼的結束行,然後比較[基地址+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否小於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

3E_____1 ZZZZYYYY:上一個條件碼的結束行,然後16bits如果小於(指針)
作爲上一個條件碼的結束行,然後比較[指針+地址] 上的値同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否小於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

16bits的條件代碼常用來配合Joker Digits當作Joker Code使用,Joker Digits見附1。


CT2 基地址/指針操作碼

CST0:載入到基地址

40TYZ00N XXXXXXXX:
40000:基地址=[XXXXXXXX]
40010:基地址=[基地址+XXXXXXXX]
50010:基地址=[指針+XXXXXXXX]
40001:基地址=[Gecko寄存器N+XXXXXXXX]
40011:基地址=[基地址+Gecko寄存器N+XXXXXXXX]
50011:基地址=[指針+Gecko寄存器N+XXXXXXXX]
40100:基地址+=[XXXXXXXX]
40110:基地址+=[基地址+XXXXXXXX]
50110:基地址+=[指針+XXXXXXXX]
40101:基地址+=[Gecko寄存器N+XXXXXXXX]
40111:基地址+=[基地址+Gecko寄存器N+XXXXXXXX]
50111:基地址+=[指針+Gecko寄存器N+XXXXXXXX]

CST1:設置成基地址

42TYZ00N XXXXXXXX:
42000:基地址=XXXXXXXX
42010:基地址=基地址+XXXXXXXX
52010:基地址=指針+XXXXXXXX
42001:基地址=Gecko寄存器N+XXXXXXXX
42011:基地址=基地址+Gecko寄存器N+XXXXXXXX
52011:基地址=指針+Gecko寄存器N+XXXXXXXX
42100:基地址+=XXXXXXXX
42110:基地址+=基地址+XXXXXXXX
52110:基地址+=指針+XXXXXXXX
42101:基地址+=Gecko寄存器N+XXXXXXXX
42111:基地址+=基地址+Gecko寄存器N+XXXXXXXX
52111:基地址+=指針+Gecko寄存器N+XXXXXXXX

CST2:基地址存儲到

440YZ00N XXXXXXXX:
44000:[XXXXXXXX]=基地址
44010:[XXXXXXXX+基地址]=基地址
54010:[XXXXXXXX+指針]=基地址
44001:[XXXXXXXX+Gecko寄存器N]=基地址
44011:[XXXXXXXX+基地址+Gecko寄存器N]=基地址
54011:[XXXXXXXX+指針+Gecko寄存器N]=基地址

CST3:把下一行代碼所在的位置存儲到基地址

4600XXXX 00000000=基地址會存儲下一行代碼所在位置+XXXX上的値(XXXX是個有符號的16bits値:0xFFFF=-1)。
46000000 00000000=基地址指向下一行代碼的第一個32bits値。
46000004 00000000=基地址指向下一行代碼的第二個32bits値。

CST4:載入到指針

48TYZ00N XXXXXXXX:
48000:指針=[XXXXXXXX]
48010:指針=[基地址+XXXXXXXX]
58010:指針=[指針+XXXXXXXX]
48001:指針=[Gecko寄存器N+XXXXXXXX]
48011:指針=[基地址+Gecko寄存器N+XXXXXXXX]
58011:指針=[指針+Gecko寄存器N+XXXXXXXX]
48100:指針+=[XXXXXXXX]
48110:指針+=[基地址+XXXXXXXX]
58110:指針+=[指針+XXXXXXXX]
48101:指針+=[Gecko寄存器N+XXXXXXXX]
48111:指針+=[基地址+Gecko寄存器N+XXXXXXXX]
58111:指針+=[指針+Gecko寄存器N+XXXXXXXX]

CST5:設置成指針

4ATYZ00N XXXXXXXX:
4A000:指針=XXXXXXXX
4A010:指針=基地址+XXXXXXXX
5A010:指針=指針+XXXXXXXX
4A001:指針=Gecko寄存器N+XXXXXXXX
4A011:指針=基地址+Gecko寄存器N+XXXXXXXX
5A011:指針=指針+Gecko寄存器N+XXXXXXXX
4A100:指針+=XXXXXXXX
4A110:指針+=基地址+XXXXXXXX
5A110:指針+=指針+XXXXXXXX
4A101:指針+=Gecko寄存器N+XXXXXXXX
4A111:指針+=基地址+Gecko寄存器N+XXXXXXXX
5A111:指針+=指針+Gecko寄存器N+XXXXXXXX


CST6:指針存儲到

4C0YZ00N XXXXXXXX:
4C000:[XXXXXXXX]=指針
4C010:[XXXXXXXX+基地址]=指針
5C010:[XXXXXXXX+指針]=指針
44001:[XXXXXXXX+Gecko寄存器N]=指針
44011:[XXXXXXXX+基地址+Gecko寄存器N]=指針
54011:[XXXXXXXX+指針+Gecko寄存器N]=指針

CST7:把下一行代碼所在的位置存儲到指針

4E00XXXX 00000000=指針會存儲下一行代碼所在位置+XXXX上的値(XXXX是個有符號的16bits値:0xFFFF=-1)。
4E000000 00000000=指針指向下一行代碼的第一個32bits値。
4E000004 00000000=指針指向下一行代碼的第二個32bits値。

CT3 重復/轉到/轉到下一子程序/返回碼

CST0:設置重復

6000NNNN 0000000P=設置重復
存儲下一行代碼的地址和NNNN(重復的次數)到區塊P。

CST1:執行重復

62000000 0000000P=執行重復
如果存儲在區塊P内的NNNN>0,它會遞減並且代碼處理器跳到存儲在區塊P内的下一行代碼的地址。

CST2:返回

64000000 0000000P=如果true則返回
如果代碼執行後的狀態是true,代碼處理器跳到存儲在區塊P内的下一行代碼的地址(不涉及NNNN)。

64100000 0000000P=如果false返回
如果代碼執行後的狀態是false,代碼處理器跳到存儲在區塊P内的下一行代碼的地址(不涉及NNNN)。

64200000 0000000P=返回
代碼處理器跳到存儲在區塊P内的下一行代碼的地址(不涉及NNNN),無視代碼執行後的狀態。

CST3:轉到

6600XXXX 00000000=如果true則轉到
如果代碼執行後的狀態是true,代碼處理器跳到(下一行代碼+XXXX行)。XXXX是有符號數。

6610XXXX 00000000=如果false則轉到
如果代碼執行後的狀態是false,代碼處理器跳到(下一行代碼+XXXX行)。XXXX是有符號數。

6620XXXX 00000000=轉到
代碼處理器跳到(下一行代碼+XXXX行)。XXXX是有符號數。

CST4轉到下一子程序

6800XXXX 0000000P=如果true則轉到下一子程序
如果代碼執行後的狀態是true,代碼處理器存儲下一行代碼的地址到區塊P,然後跳到(下一行代碼+XXXX行)。XXXX是有符號數。

6810XXXX 0000000P=如果false則轉到下一子程序
如果代碼執行後的狀態是false,代碼處理器存儲下一行代碼的地址到區塊P,然後跳到(下一行代碼+XXXX行)。XXXX是有符號數。

6820XXXX 0000000P=轉到下一子程序
代碼處理器存儲下一行代碼的地址到區塊P,然後跳到(下一行代碼+XXXX行)。XXXX是有符號數。

CT4 Gecko寄存器操作碼

CST0:設置成Gecko寄存器

80SY000N XXXXXXXX:
8000:Gecko寄存器N=XXXXXXXX
8001:Gecko寄存器N=XXXXXXXX+基地址
9001:Gecko寄存器N=XXXXXXXX+指針
8010:Gecko寄存器N+=XXXXXXXX
8011:Gecko寄存器N+=XXXXXXXX+基地址
9011:Gecko寄存器N+=XXXXXXXX+指針

CST1:載入到Gecko寄存器

82UY000N XXXXXXXX:
8200:Gecko寄存器N=[XXXXXXXX]上的8bits
8201:Gecko寄存器N=[XXXXXXXX+基地址]上的8bits
9201:Gecko寄存器N=[XXXXXXXX+指針]上的8bits
8210:Gecko寄存器N=[XXXXXXXX]上的16bits
8211:Gecko寄存器N=[XXXXXXXX+基地址]上的16bits
9211:Gecko寄存器N=[XXXXXXXX+指針]上的16bits
8220:Gecko寄存器N=[XXXXXXXX]上的32bits
8221:Gecko寄存器N=[XXXXXXXX+基地址]上的32bits
9221:Gecko寄存器N=[XXXXXXXX+指針]上的32bits

CST2: Gecko寄存器存儲到

84UYZZZN XXXXXXXX:
8400:在[XXXXXXXX]處連續寫入ZZZ+1個Gecko寄存器N上的8bits數據
8401:在[XXXXXXXX+基地址]處連續寫入ZZZ+1個Gecko寄存器N上的8bits數據
9401:在[XXXXXXXX+指針]處連續寫入ZZZ+1個Gecko寄存器N上的8bits數據
8410:在[XXXXXXXX]處連續寫入ZZZ+1個Gecko寄存器N上的16bits數據
8411:在[XXXXXXXX+基地址]處連續寫入ZZZ+1個Gecko寄存器N上的16bits數據
9411:在[XXXXXXXX+指針]處連續寫入ZZZ+1個Gecko寄存器N上的16bits數據
8420:在[XXXXXXXX]處連續寫入ZZZ+1個Gecko寄存器N上的32bits數據
8421:在[XXXXXXXX+基地址]處連續寫入ZZZ+1個Gecko寄存器N上的32bits數據
9421:在[XXXXXXXX+指針]處連續寫入ZZZ+1個Gecko寄存器N上的32bits數據

CST3:Gecko寄存器/直接値操作

CST3:Gecko寄存器/直接値操作

86TY000N XXXXXXXX:
86T0:Gecko寄存器N=(Gecko寄存器N?XXXXXXXX)
86T1:Gecko寄存器N=([Gecko寄存器N]?XXXXXXXX)
86T2:Gecko寄存器N=(Gecko寄存器N?[XXXXXXXX])
86T3:Gecko寄存器N=([Gecko寄存器N]?[XXXXXXXX])

?=T:
0:加(+)
1:乘(*)
2:邏輯或(|)
3:邏輯與(&)
4:邏輯非(^)
5:邏輯左位移(<<)
6:邏輯右位移(>>)
7:循環左位移
8:算術右位移
A:單精度浮點加
B:單精度浮點乘

CST4:Gecko寄存器之間的操作

88TY000N 0000000M:
88T0:Gecko寄存器N=(Gecko寄存器N ? Gecko寄存器M)
88T1:Gecko寄存器N=([Gecko寄存器N] ? Gecko寄存器M)
88T2:Gecko寄存器N=(Gecko寄存器N ? [Gecko寄存器M])
88T3:Gecko寄存器N=([Gecko寄存器N] ? [Gecko寄存器M])

?=T:
0:加(+)
1:乘(*)
2:邏輯或(|)
3:邏輯與(&)
4:邏輯非(^)
5:邏輯左位移(<<)
6:邏輯右位移(>>)
7:循環左位移
8:算術右位移
A:單精度浮點加
B:單精度浮點乘

CST5:內存複製1

8AYYYYNM XXXXXXXX
從[Gecko寄存器N]複製YYYY字節到[Gecko寄存器M]+XXXXXXXX,Gecko寄存器M不能爲F。

8AYYYYNF XXXXXXXX
從[Gecko寄存器N]複製YYYY字節到基地址+XXXXXXXX

9AYYYYNF XXXXXXXX
從[Gecko寄存器N]複製YYYY字節到指針+XXXXXXXX

CST6:內存複製2

8CYYYYNM XXXXXXXX
從[Gecko寄存器N]+XXXXXXXX複製YYYY字節到[Gecko寄存器M] ,Gecko寄存器M不能爲F。

8CYYYYFM XXXXXXXX
從基地址+XXXXXXXX複製YYYY字節到[Gecko寄存器M]

9CYYYYFM XXXXXXXX
從指針+XXXXXXXX複製YYYY字節到[Gecko寄存器M]

CT5:特殊條件代碼(16bits)

CT5 第1部分:未知値比較

注意:在第1部分的代碼中,如果N或M=0xF,那麼[地址+基地址/指針]將被用來取代Gecko寄存器F(開頭是A0用基地址取代,B0用指針取代)。

CST0:16bits如果等於

A0______ NM00YYYY:16bits如果等於
比較[Gecko寄存器N] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果是否等於[Gecko寄存器M] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

A0_____1 NM00YYYY:上一個條件碼的結束行,然後16bits如果等於
作爲上一個條件碼的結束行,然後比較[Gecko寄存器N] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果是否等於[Gecko寄存器M] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CST1:16bits如果不等於

A2______ NM00YYYY:16bits如果不等於
比較[Gecko寄存器N] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果是否不等於[Gecko寄存器M] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

A2_____1 NM00YYYY:上一個條件碼的結束行,然後16bits如果不等於
作爲上一個條件碼的結束行,然後比較[Gecko寄存器N] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果是否不等於[Gecko寄存器M] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CST2:16bits如果大於

A4______ NM00YYYY:16bits如果大於
比較[Gecko寄存器N] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果是否大於[Gecko寄存器M] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

A4_____1 NM00YYYY:上一個條件碼的結束行,然後16bits如果大於
作爲上一個條件碼的結束行,然後比較[Gecko寄存器N] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果是否大於[Gecko寄存器M] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CST3:16bits如果小於

A6______ NM00YYYY:16bits如果小於
比較[Gecko寄存器N] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果是否小於[Gecko寄存器M] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

A6_____1 NM00YYYY:上一個條件碼的結束行,然後16bits如果小於
作爲上一個條件碼的結束行,然後比較[Gecko寄存器N] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果是否小於[Gecko寄存器M] 上的値同YYYY(YYYY要先作邏輯非運\算)邏輯與運\算的結果。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CT5 第2部分:16bits計數器校驗

注意:每次遇到條件計數器代碼,代碼處理器按以下的規則執行:

-如果計數器代碼大於等於1則作爲上一個條件碼的結束行。
-校驗了當前的執行狀態後,如果是true計數器加1,如果是false計數器清0。
-最終像執行普通條件碼那樣執行條件技術器代碼!!!

另外如果代碼的第1部分以8(比如沒有作爲上一個條件碼的結束行)或9(作爲上一個條件碼的結束行)結束而不是0或1,當條件計數器代碼的狀態是true時計數器會被清0!!!

計數器存儲在XXXX

CST4:16bits如果計數器的値等於

A80XXXX0 ZZZZYYYY:16bits如果等於
比較XXXX同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否等於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。
(譯者按:常用來延遲別的碼執行的時機,比如《波斯王子 遺忘之沙》的那個防hook死機碼就需要用到它。)

A80XXXX1 ZZZZYYYY:上一個條件碼的結束行,然後16bits如果等於
作爲上一個條件碼的結束行,然後比較XXXX同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否等於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CST5:16bits如果計數器的値不等於

AA0XXXX0 ZZZZYYYY:16bits如果不等於
比較XXXX同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否不等於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

AA0XXXX1 ZZZZYYYY:上一個條件碼的結束行,然後16bits如果不等於
作爲上一個條件碼的結束行,然後比較XXXX同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否不等於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CST6:16bits如果計數器的値大於

AC0XXXX0 ZZZZYYYY:16bits如果大於
比較XXXX同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否大於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

AC0XXXX1 ZZZZYYYY:上一個條件碼的結束行,然後16bits如果大於
作爲上一個條件碼的結束行,然後比較XXXX同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否大於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CST7:16bits如果計數器的値小於

AE0XXXX0 ZZZZYYYY:16bits如果小於
比較XXXX同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否小於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

AE0XXXX1 ZZZZYYYY:上一個條件碼的結束行,然後16bits如果小於
作爲上一個條件碼的結束行,然後比較XXXX同ZZZZ(ZZZZ要先作邏輯非運\算)邏輯與運\算的結果是否小於YYYY。如果是,下面的代碼將被執行(否則下面的代碼不執行)。

CT6 彙編、開關和地址範圍檢查碼

CST0:執行以下的彙編代碼

C0000000 NNNNNNNN:執行ZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ
4E800020 00000000
執行下面的NNNNNNNN行的彙編指令代碼。彙編指令必須以blr(0x4E800020,跳回到lr寄存器存儲的地址)作爲結尾。
(譯者按:其實這個碼可以代替前面所有的碼了,因爲可以用這個碼編寫彙編指令實現和前面的各類碼同樣作用的密碼出來,甚至前面的那些碼實現不了的修改也能用這個碼實現!從老外那裡打聽回來的消息是r0、r3、r5、r9、r10、r11、r12、r14、r17、r18和r19通用寄存器可以在這個碼中隨意調用,f9、f10、f11、f12和f13浮點寄存器也能隨意調用。如果還不夠用的話可以用堆棧指針r1寄存器備份和還原其它寄存器的値,詳見附2)

CST1:在游戲中插入彙編代碼

C2XXXXXX NNNNNNNN:在XXXXXXXX+基地址處插入彙編指令
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ
60000000 00000000
這個代碼會把指向ZZZZZZZZ所在處的分歧指令替換在基地址+XXXXXXXX處。被替換的指令不會保留,代碼作者必須手動把被替換的指令放入到他的代碼中(如果有需要的話)。同樣彙編指令必須以一個00000000作爲結尾,因爲代碼處理器會在那裡添加一個“b (基地址+XXXXXX)”指令。如果你的彙編代碼塡\滿了整行,在下面另起一行添加60000000 00000000(把這行也計入NNNNNNNN的行數內)。
(譯者按:這個碼同剛才那個的區別在剛才那個是用單獨的線程和游戲同步執行的,這個是插入在游戲的線程中的。衹有游戲的程序執行到XXXXXXXX+基地址處,這個碼才會被執行到。下同。)

D2XXXXXX NNNNNNNN:在XXXXXXXX+指針處插入彙編指令
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ 00000000
這個代碼會把指向ZZZZZZZZ所在處的分歧指令替換在指針+XXXXXXXX處。被替換的指令不會保留,代碼作者必須手動把被替換的指令放入到他的代碼中(如果有需要的話)。同樣彙編指令必須以一個00000000作爲結尾,因爲代碼處理器會在那裡添加一個“b (指針+XXXXXX)”指令。如果你的彙編代碼塡\滿了整行,在下面另起一行添加60000000 00000000(把這行也計入NNNNNNNN的行數內)。

CST3:創建一個分歧指令

C6XXXXXX YYYYYYYY:從XXXXXX+基地址處分歧到YYYYYYYY處
在XXXXXXXX+基地址處寫入一個“b YYYYYYYY”指令。
(譯者按:雖然也能用32bits直寫碼寫一個04XXXXXX 48YYYYYY的分歧指令實現同樣的作用,但直寫碼要塡\入的YYYYYYY是從XXXXXX+基地址處到目的地址間的行數,卽(目的地址-(XXXXXX+基地址))/4;而這個碼要塡\入的YYYYYYYY就是目的地址本身。下同。)

D6XXXXXX YYYYYYYY:從XXXXXX+指針處分歧到YYYYYYYY處
在XXXXXXXX+指針處寫入一個“b YYYYYYYY”指令。

CST6:開關碼

CC000000 00000000:開關碼
衹有在上面放置條件碼,這個代碼才起效。每次代碼的執行狀態是從true到false再到true的,一旦遇到開關碼就會變更“開關”。開關在開和關之間來回移動,並且相應地把代碼設置到它的執行狀態。開關値存儲在該代碼中。它不是條件碼,它衹改變當前的代碼執行狀態。

CST7:地址範圍檢查(條件碼)

CE000000 XXXXYYYY:檢查基地址是否在[0xXXXX0000,0xYYYY0000] 範圍内
CE000001 XXXXYYYY:上一個條件碼的結束行,然後檢查基地址是否在[0xXXXX0000,0xYYYY0000] 範圍内
DE000000 XXXXYYYY:檢查指針是否在[0xXXXX0000,0xYYYY0000] 範圍内
DE000001 XXXXYYYY:上一個條件碼的結束行,然後檢查指針是否在[0xXXXX0000,0xYYYY0000] 範圍内

如果XXXX大於等於YYYY,會一直設置代碼執行狀態爲false。

CT7 結束碼,結束所有的條件碼。

CST0:全部終止碼

E0000000 XXXXYYYY:全部終止碼
它將清除代碼的執行狀態。
如果XXXX不等於0,基地址=0xXXXX0000。
如果YYYY不等於0,指針=0xYYYY0000。

CST1:結束條件碼

E20000VV XXXXYYYY:結束條件碼
結束之前的VV個條件碼。
如果XXXX不等於0,基地址=0xXXXX0000。
如果YYYY不等於0,指針=0xYYYY0000。

E21000VV XXXXYYYY = endifs + else
結束之前的VV個條件碼,並且倒轉代碼的執行狀態。
如果XXXX不等於0,基地址=0xXXXX0000。
如果YYYY不等於0,指針=0xYYYY0000。

CST7:結束碼

F0000000 00000000:代碼處理器的結束行
它告訴代碼處理器代碼列表中再沒有別的代碼了,代碼處理器退出。

CT7 (附加)Gecko 1.8以上支持的代碼

CST1/2:ASM Insert With 16bits XOR Checksum

F2XXXXXX YYZZZZNN
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ 00000000
[基地址+XXXXXX]後的第YY個字節上的16bits値(如果YY是正數)或[基地址+ XXXXXX]前的第YY個字節上的16bits値(如果YY是負數)將作邏輯非運\算並且和ZZZZ作比較。如果相等,代碼將被執行。剩下的代碼和C2類型的代碼相同(在游戲中插入彙編代碼),NN 作爲插入的行數。

F4XXXXXX YYZZZZNN
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ 00000000
[指針+XXXXXX]後的第YY個字節上的16bits値(如果YY是正數)或[指針+ XXXXXX]前的第YY個字節上的16bits値(如果YY是負數)將作邏輯非運\算並且和ZZZZ作比較。如果相等,代碼將被執行。剩下的代碼和C2類型的代碼相同(在游戲中插入彙編代碼),NN 作爲插入的行數。

CST3:(條件類)搜索碼

F60000NN XXXXYYYY
ZZZZZZZZ ZZZZZZZZ
ZZZZZZZZ ZZZZZZZZ
創建一個條件碼(所以這個代碼要一個條件碼的結束行),然後在XXXX0000和YYYY0000之間搜索NN行的Z値(如果XXXX是8000,則在80003000和YYYY0000之間搜索)。如果Z値被找到了,把Z値的起始地址(SSSSSSSS)設置成指針並且把F6那行替換成F60003NN SSSSSSSS。如果Z値沒被找到,設置代碼的執行狀態爲false並把F6那行替換成F60001NN XXXXYYYY。爲了防止代碼把游戲變卡,它衹會在代碼處理器第一次執行時搜索(搜索結果存儲到該代碼並循環使用)。
(譯者按:F4碼和F6碼配合使用可以用來修改那些採用動態加載程序模塊的游戲,卽彙編地址本身就是動態的。PSP上也有過這種變態的游戲——《北歐女神 蕾娜斯》,本人也是採用類似的方法做出了CT鎖定爲0的CMF專用密碼並且全版本通用。)
_S ULUS-10107
_G 女神側身像 蕾娜斯
_C0 CT鎖定爲0(L+R)
_L 0xD0000000 0x10000300
_L 0x20000800 0x00000001
_L 0xF0E2B60E 0x25C91102
_L 0xB7B22FAB 0x986556FA
_L 0xD5CA3A94 0x4BFC4A42
_L 0x8C411743 0x48178A9B
_L 0xA72A1682 0x93656719
_L 0x8C411B5A 0x449E8682
_L 0xB73F3231 0x98E7A369
_L 0x8C411F56 0x449E828E
_L 0xB724E031 0x98FC716F
_L 0x0DF34849 0x1E9734A4
_L 0xA091AC3B 0x0DAAADB2
_L 0x6B9D17D6 0xF9E22101
_L 0x2AB6E9A5 0x0A8714FF
_L 0xEA36B9E1 0x4ABCFF63
_L 0xBA1744D5 0x1A11A9C9

以下是幾個F4碼和F6碼配合使用的例子:
超級馬里奧銀河(全版本)

馬里奧體形變更
F6000001 80208030
C03E0024 7C7D1B78
F4000000 04A77303
3FA0XXXX 93BE0024
93BE0028 93BE002C
C03E0024 00000000
E0000000 80008000

3F00 x0.5
3F80 x1.0
3FC0 x1.5
4000 x2.0
4020 x2.5
4040 x3.0

塞爾達傳說 黃昏公主(全版本)

外形變更(C+A)
F6000001 80308040
7C083A78 7D060038
F4000010 F8EEB104
48000005 7CA802A6
90030008 80630000
90650014 48000008
00000000 00000000
F6000001 80008010
801F0618 28000029
F6000001 80108020
38A10010 38E10008
F4000030 06D7CA07
7C0802A6 48000005
7D6802A6 7C0803A6
808BFFC8 2C044800
40820014 808BFFD4
38840064 7C8903A6
4E800420 9421FFE0
60000000 00000000
E0000000 80008000

你初次收集盧比時沒有提示
F6000001 80108020
4800003C 887D092E
14000014 48000010
E0000000 80008000


銀河戰士3 墮落(全版本)

無限體力
F6000001 80108020
90010190 818C0038
F4000010 F824AB03
3C8044BB 38846000
90830004 C0230004
60000000 00000000
E0000000 80008000

赤鋼(全版本)

無限體力
F6000001 80008010
38A00280 38C00168
32000000 38A00280
F6000001 80188028
812A0510 800A0514
F4000078 F8A73D04
81610020 396B03C0
48000005 7C6802A6
9163004C 386107A8
60000000 00000000
F6000001 80008010
FC020000 41820028
F40002C0 0413E305
48000005 7FA802A6
83BD001C 7C1DF800
40820008 38000064
901F0000 48000008
00000000 00000000
E0000000 80008000


附1:Joker Digits
GC手柄 按摸棒 經典手柄
L 0001 L 0001 U+ 0001
R 0002 R 0002 L+ 0002
D 0004 D 0004 Zr 0004
U 0008 U 0008 X  0008
Z 0010 + 0010 A  0010
R 0020 2 0100 Y  0020
L 0040 1 0200 B  0040
A 0100 B 0400 Zl 0080
B 0200 A 0800 R  0200
X 0400 - 1000 +  0400
Y 0800 Z 2000 -  1000
S 1000 C 4000 L  2000
D+ 4000  
R+ 8000  



附2:入棧和出棧的示例:

stwu r1,-80(r1)         # 爲18個寄存器騰出空間
stmw r14,8(r1)         # r14-r31入棧(卽備份r14-r31的値)

# 從這裡開始寫入你的彙編指令
# 你可以放心地用r14-r31了

lmw r14,8(r1)         # r14-r31出棧(卽還原r14-r31的値)
addi r1,r1,80         # 還原堆棧指針r1



圣骑士

拳打南山版主 脚踢北海管理员

精华
0
帖子
4294
威望
0 点
积分
4374 点
种子
78 点
注册时间
2012-7-30
最后登录
2024-11-14
发表于 2024-4-7 09:40  ·  江苏 | 显示全部楼层
火千里 发表于 2024-2-26 19:12
楼主你好,金手指转换软件叫什么名字?

https://www.zeldacodes.org/downloads/code-manager

打开网页后,点击 Click here to download the Code Manager. 下载

精华
0
帖子
81
威望
0 点
积分
82 点
种子
23 点
注册时间
2007-7-25
最后登录
2024-11-27
发表于 2024-4-26 17:01  ·  四川 | 显示全部楼层
楼主,你好,你分享的文件又过期了,能再分享下吗,谢谢!

精华
0
帖子
81
威望
0 点
积分
82 点
种子
23 点
注册时间
2007-7-25
最后登录
2024-11-27
发表于 2024-4-26 17:03  ·  四川 | 显示全部楼层
sneek,就是这个文件又过期了,能不能换个网盘发啊,谢谢!

精华
0
帖子
81
威望
0 点
积分
82 点
种子
23 点
注册时间
2007-7-25
最后登录
2024-11-27
发表于 2024-4-28 10:36  ·  四川 | 显示全部楼层
楼主,你好,你分享的文件又过期了,能再分享下吗,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|A9VG电玩部落 川公网安备 51019002005286号

GMT+8, 2024-11-28 08:49 , Processed in 0.257050 second(s), 16 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部