Guide:Writing pnach files

Revision as of 21:48, 6 April 2023 by TheOnlyZac (talk | contribs) (Added pnach documentation)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

This article contains documentation on how to write patches in pnach files.

8-bit constant write 0aaaaaaa 000000vv Constantly writes an 8-bit value @v to the address @a.


16-bit constant write 1aaaaaaa 0000vvvv Constantly writes a 16-bit value @v to the address @a.


32-bit constant write 2aaaaaaa vvvvvvvv Constantly writes a 32-bit value @v to the address @a.


Increment / Decrement 8-bit increment 300000vv 0aaaaaaa

8-bit decrement 301000vv 0aaaaaaa

16-bit increment 3020vvvv 0aaaaaaa

16-bit decrement 3030vvvv 0aaaaaaa

32-bit increment 30400000 0aaaaaaa vvvvvvvv 00000000

32-bit decrement 30500000 0aaaaaaa vvvvvvvv 00000000

Increments/decrements the value at address @a by the value @v.


32-bit constant serial write 4-aaaaaaa nnnnssss vvvvvvvv iiiiiiii

Starting with address @a, this code writes the 32-bit value @v to @n addresses.

In each cycle, the address is incremented by @s * 4 and the value is incremented by @i.


Copy bytes 5-sssssss nnnnnnnn 0ddddddd 00000000

Copies a block of @n bytes from source address @s to destination address @d.


Pointer write 8-bit pointer write 6-aaaaaaa 000000vv 0000nnnn iiiiiiii pppppppp pppppppp # 1st. extra pointer line, required if ........ ........ @n > 1 pppppppp pppppppp # N-th. extra pointer line, required if @n > ((N << 1) - 1)

16-bit pointer write 6-aaaaaaa 0000vvvv 0001nnnn iiiiiiii pppppppp pppppppp ........ ........ pppppppp pppppppp

32-bit pointer write 6-aaaaaaa vvvvvvvv 0002nnnn iiiiiiii pppppppp pppppppp ........ ........ pppppppp pppppppp

This code reads a pointer address @a and follows it @n pointers deep. This is how it does it: Loads the 32-bit pointer base from address @a Add offset @i to it to get either: If @n is 1, the final address. Skip to step 5. If @n > 1, a new pointer location. Continue to step 3. Load the 32-bit pointer address from the address computed at the previous step and add offset @p to it. Keep doing this until all (@n - 1) offsets @p have been processed Constantly write the value @v to the final address.


Boolean Operations 8-bit OR 7-aaaaaaa 000000vv

16-bit OR 7-aaaaaaa 0010vvvv

8-bit AND 7-aaaaaaa 002000vv

16-bit AND 7-aaaaaaa 0030vvvv

8-bit XOR 7-aaaaaaa 004000vv

16-bit XOR 7-aaaaaaa 0050vvvv

Performs a bitwise logical operation between the value @v and the value stored at address @a.


8-bit / 16-bit constant serial write 8-bit write 8-aaaaaaa nnnnssss 000000vv 000000ii

16-bit write 8-aaaaaaa nnnnssss 1000vvvv 0000iiii

Starting with address @a, this code type will write the value @v to @n addresses.

In each cycle, the address is incremented by @s or @s * 2 and the value is incremented by @i.


32-bit do all following codes if equal to C-aaaaaaa vvvvvvvv

All following codes will be executed only if 32-bit value at address @a is equal to the value @v.


Do multi-lines if conditional 16-bit test D-aaaaaaa 0000vvvv

8-bit test D-aaaaaaa 000000vv

Compares value at address @a to value @v, and executes next 1 code lines if the value is equal


Do multi-lines if conditional 16-bit test E-0nnvvvv taaaaaaa

8-bit test E-1nn00vv taaaaaaa

Compares value at address @a to value @v, and executes next @n code llines only if the test condition @t is true. Values for @t are: 0 equal 1 not equal 2 less than 3 greater than 4 NAND 5 AND 6 NOR 7 OR