I've been talking to CMX on IRC lately, and he's been telling me bunches about the CBDS
.
Code:
Some code types are 5-bits each, so some bitwise arithmetic will be required to "build" certain codes. (Like 32-bit increment codes, for example.)
---------------------------------------
Auto Game Recognizer With Encryption (Code Type 0x0000)
---------------------------------------
0000YYYY XXXXXXXX
YYYY = Game's Header CRC16
XXXXXXXX = Game's Nintendo ID
---------------------------------------
Auto Game Recognizer Without Encryption (Code Type 0x8000)
---------------------------------------
8000YYYY XXXXXXXX
YYYY = Game's Header CRC16
XXXXXXXX = Game's Nintendo ID
-------------------------------------
8-Bit Constant Write (Code Type 0x00)
-------------------------------------
0XXXXXXX 000000YY
00 = Code Type Or Byte
XXXXXXX = Address
YY = 8-bit Value
--------------------------------------
16-Bit Constant Write (Code Type 0x10)
--------------------------------------
1XXXXXXX 0000YYYY
10 = Code Type Or Byte
XXXXXXX = Address
YYYY = 16-bit Value
--------------------------------------
32-Bit Constant Write (Code Type 0x20)
--------------------------------------
2XXXXXXX YYYYYYYY
20 = Code Type Or Byte
XXXXXXX = Address
YYYYYYYY = 32-bit Value
---------------------------------------------
8/16-Bit Increment/Decrement (Code Type 0x30)
---------------------------------------------
3XXXXXXX 000UYYYY
30 = Code Type Or Byte
XXXXXXX = Address
U = Bit-type Write, 0 for 8-Bit & 1 for 16-Bit
YYYY = 8/16-bit Value to increment by
NOTE: YYYY is signed so it can do increment and decrement
-------------------------------------------
32-Bit Increment/Decrement (Code Type 0x38)
-------------------------------------------
3XXXXXXX YYYYYYYY
38 = Code Type Or Byte
XXXXXXX = Address
YYYYYYYY = 32-bit Value to increment by
NOTE: YYYYYYYY is signed so it can do increment and decrement
---------------------------------------------
Serial Repeat Constant Write (Code Type 0x40)
---------------------------------------------
4XXXXXXX TWWWZZZZ
YYYYYYYY VVVVVVVV
40 = Code Type Or Byte
XXXXXXX = Address
T = Bit-type Write, 0 for 32-Bit, 1 for 16-Bit & 2 for 8-Bit
WWW = Number of times to repeat
ZZZZ = Increase Address by (Multiply by data size (1 << (2 - T)))
YYYYYYYY = Start Value
VVVVVVVV = Increase Value by
Example: This code:
42010000 00050001 <-- 0001 * 4 = 0004 to Increase Address by
63636363 00000000
Is the same as:
22010000 63636363
22010004 63636363
22010008 63636363
2201000C 63636363
22010010 63636363
---------------------------
Copy Bytes (Code Type 0x50)
---------------------------
5XXXXXXX YYYYYYYY
ZZZZZZZZ 00000000
50 = Code Type Or Byte
XXXXXXX = Address to copy to
YYYYYYYY = Number of bytes to copy
ZZZZZZZZ = Address to copy from
-----------------------------
Pointer Code (Code Type 0x60)
-----------------------------
6XXXXXXX YYYYYYYY
ZZZZZZZZ BCTUVVVV
60 = Code Type Or Byte
XXXXXXX = Pointer Address
YYYYYYYY = 8/16/32-Bit Value
ZZZZZZZZ = Offset to add to the Pointer Address
B = Bit-type Write, 0 for 8-bit, 1 for 16-Bit & 2 for 32-Bit
C = Condition Enabled, 0 for disabled, 1 for enabled
T = Condition type to check against
0 = If equal to VVVV
1 = If not equal to VVVV
2 = If lesser than VVVV
3 = If greater than VVVV
4 = If AND VVVV equal to 0000
5 = If AND VVVV not equal to 0000
6 = If AND VVVV equal to VVVV
7 = If AND VVVV not equal to VVVV
U = Bit-type Load, 0 for 8-Bit & 1 for 16-Bit
VVVV = Conditional Value to check against
-----------------------------------------------
8/16-Bit Special Bitwise Write (Code Type 0x70)
-----------------------------------------------
7XXXXXXX 00TBYYYY
70 = Code Type Or Byte
XXXXXXX = Address
T = Operation type, 0 for OR, 1 for AND, 2 for XOR
B = Bit-type Write, 0 for 8-Bit & 1 for 16-Bit
YYYY = 8/16-Bit Value
----------------------------------------------
32-Bit Write On Bootup-Hook 1 (Code Type 0xA0)
----------------------------------------------
AXXXXXXX YYYYYYYY
A0 = Code Type Or Byte
XXXXXXX = Address
YYYYYYYY = Value
----------------------------------------------
32-Bit Write On Bootup-Hook 2 (Code Type 0xA8)
----------------------------------------------
AXXXXXXX YYYYYYYY
A8 = Code Type Or Byte
XXXXXXX = Address
YYYYYYYY = Value
-----------------------------------------
16-Bit Conditional Check (Code Type 0xD0)
-----------------------------------------
DXXXXXXX ZZTUYYYY
D0 = Code Type Or Byte
XXXXXXX = Address
ZZ = Lines to skip, 00 means 01 by default
T = Condition type to check against
0 = If equal to YYYY
1 = If not equal to YYYY
2 = If lesser than YYYY
3 = If greater than YYYY
4 = If AND YYYY equal to 0000
5 = If AND YYYY not equal to 0000
6 = If AND YYYY equal to YYYY
7 = If AND YYYY not equal to YYYY
U = Bit-type Load, 0 for 16-Bit & 1 for 8-Bit
YYYY = Conditional Value to check against
-----------------------------------
Enable Code-Hook 1 (Code Type 0xF0)
-----------------------------------
FXXXXXXX TYYYYYYY
F0 = Code Type Or Byte
XXXXXXX = Hook Address
T = Type of Hook to use
0 = Hook almost any 2 opcodes, LDR PC,=
1 = Hook almost any BL opcode, BL function
2 = Hook almost any .long address, DC.D ADDR ; BX
3 = Hook almost any BX Register opcode, BX Ry
YYYYYYY = Cheat Engine Address
-----------------------------------
Enable Code-Hook 2 (Code Type 0xF8)
-----------------------------------
FXXXXXXX TPPPPPPP
F8 = Code Type Or Byte
XXXXXXX = Cheat Engine Hook Address
T = Type of Hook to use
0 = Hook almost any 2 opcodes, LDR PC,=
1 = Hook almost any BL opcode, BL function
2 = Hook almost any .long address, DC.D ADDR ; BX
3 = Hook almost any BX Register opcode, BX Ry
PPPPPPP = Parameters that will be used later