Amend special notes list formatting. Also use the en-dash where appropriate and remove unnecessary spaces before an ending parenthesis
parent
e4df9a6388
commit
f01b30912b
|
@ -10,21 +10,23 @@ By kenobi & Parasyte
|
|||
## Special Notes
|
||||
|
||||
1. All addresses MUST be compatible with the data size you want the codes to be using. That means ANY address can be used for BYTE reading.writing. If you don't follow these rules, then the codes won't work (or the AR might crash).
|
||||
- Addresses MUST be a multiple of 2 for HALFWORD reading/writing (last hex number of the address must be either: 0, 2, 4, 6, 8, A, C, E).
|
||||
- Addresses MUST be a multiple of 4 for WORD reading/writing (last hex number of the address must be either: 0, 4, 8, C).
|
||||
- Addresses MUST be a multiple of 2 for HALFWORD reading/writing (last hex number of the address must be either: 0, 2, 4, 6, 8, A, C, E).
|
||||
- Addresses MUST be a multiple of 4 for WORD reading/writing (last hex number of the address must be either: 0, 4, 8, C).
|
||||
|
||||
2. All codes are formatted like so: XXXXXXXX YYYYYYYY. Where the address is XXXXXXXX, and the value is YYYYYYYY.
|
||||
|
||||
3. The GCN memory range is 0x80000000 - 0x817FFFFF cached, and 0xC0000000 - 0xC17FFFFF uncached.
|
||||
3. The GCN memory range is 0x80000000–0x817FFFFF cached, and 0xC0000000–0xC17FFFFF uncached.
|
||||
|
||||
4. The codes type numbers I give after a code name is a number created like so:
|
||||
- For "Type zX" codes, the number X is AAA (3 most significant bits of the code's "VALUE")
|
||||
- For normal codes, the number in parenthesis after the name of the code is:
|
||||
AAABBCC (7 most significant bits of the code's "ADDRESS")
|
||||
AAA – type bits.
|
||||
BB – subtype bits.
|
||||
CC – value bits.
|
||||
- You can use these as reference, or just ignore them…
|
||||
- For "Type zX" codes, the number X is AAA (3 most significant bits of the code's "VALUE")
|
||||
- For normal codes, the number in parenthesis after the name of the code is:
|
||||
|
||||
AAABBCC (7 most significant bits of the code's "ADDRESS")
|
||||
AAA – type bits.
|
||||
BB – subtype bits.
|
||||
CC – value bits.
|
||||
|
||||
- You can use these as reference, or just ignore them…
|
||||
|
||||
5. Any "unused" data could be filled with random numbers to create a "unique encryption", which could "sign" your codes. I randomly explained how it works. It might not work with every code. This feature isn't really interesting, but I felt like it should be known.
|
||||
|
||||
|
@ -219,7 +221,7 @@ Size = (Address >> 25) AND 0x03.
|
|||
Pointer Address = [Word stored at Address].
|
||||
```
|
||||
|
||||
This code will make the AR load the word stored at the address provided in the code, (also called the "Pointer Address"), and check if it's a valid address (e.g. if it's in the 80000000~81800000 range). If it is one, it will add an offset to it, and it will write the data provided in the code to this new address.
|
||||
This code will make the AR load the word stored at the address provided in the code, (also called the "Pointer Address"), and check if it's a valid address (e.g. if it's in the 80000000–81800000 range). If it is one, it will add an offset to it, and it will write the data provided in the code to this new address.
|
||||
|
||||
- If Size = 0 [40]:
|
||||
- AR will write the byte Y4 at [Pointer Address + Y1Y2Y3].
|
||||
|
@ -253,7 +255,7 @@ The first line will write '7FC39C9C' to 80002F0C. Then, the other lines will wri
|
|||
|
||||
The advantage of this code, over a TLB (m) code, is that it only needs a 1 lines enabler, it is compatible with all games and all ARs, and it allows you to use 8/16/32-bit RAM write.
|
||||
|
||||
The downside is that if you point to an invalid address, the GC will just crash. If you're not sure that you'll point to a valid address, you can use this combination of code to check it manually (in this example, I make sure that the address is in the 0x80000000~817F0000 range):
|
||||
The downside is that if you point to an invalid address, the GC will just crash. If you're not sure that you'll point to a valid address, you can use this combination of code to check it manually (in this example, I make sure that the address is in the 0x80000000–817F0000 range):
|
||||
|
||||
```
|
||||
74XXXXXX 80000000 <- If value > 0x80000000
|
||||
|
@ -337,7 +339,7 @@ Size = (Address >> 25) AND 0x03.
|
|||
|
||||
- Y4 = Master Code Number.
|
||||
- 0x00: executed only once, just before the game boot-up. Only one (m) code can have the '00' number (the others will be skipped), and it must be the very one in the (m) code list (else it'll be skipped).
|
||||
- 0x01~0x0F: executed continuously during the game execution. (2 (or more) master codes that have the same Master Code number can't be executed correctly if they are put one just after another. Only the first one will be executed, the other(s) will be skipped).
|
||||
- 0x01–0x0F: executed continuously during the game execution. (2 (or more) master codes that have the same Master Code number can't be executed correctly if they are put one just after another. Only the first one will be executed, the other(s) will be skipped).
|
||||
|
||||
- Y3 = number of codes to execute each time the AR has control.
|
||||
|
||||
|
@ -351,7 +353,7 @@ Note: Putting random numbers in Y1 should change the encryption, thus "signing"
|
|||
|
||||
Note: Don't use the Type 1 alone with a Master Code Number greater than zero, otherwise the AR will backup its own hook, and enter an infinite loop. So put a conditional code type make that this code isn't executed more than once.
|
||||
|
||||
##### If (Size = 3) AND ((address AND 0x01FFFFFF ) < 0x01000000)
|
||||
##### If (Size = 3) AND ((address AND 0x01FFFFFF) < 0x01000000)
|
||||
|
||||
Writes a half-word to CCXXXXXX (C6XXXXXX Y1Y2Y3Y4)
|
||||
|
||||
|
@ -360,7 +362,7 @@ Stores the half-word Y3Y4 at the address.
|
|||
|
||||
Note: Putting random numbers in Y1Y2 should change the encryption, thus "signing" your code (untested).
|
||||
|
||||
##### If (Size = 3) AND ((address AND 0x01FFFFFF ) >= 0x01000000)
|
||||
##### If (Size = 3) AND ((address AND 0x01FFFFFF) >= 0x01000000)
|
||||
|
||||
Writes a word to CDXXXXXX (C7XXXXXX Y1Y2Y3Y4)
|
||||
|
||||
|
|
Loading…
Reference in New Issue