Renegade64 - The Psycho's N64 Tool
Disclaimer
Version History
Features
Code Searcher Info
Code Porter Info
R4300i Disassembler Usage/Syntax Notes
Trainer/Patcher Info
Credits/Contact


Disclaimer
The author is NOT responsible for any damage caused to you computer by this program, the usage of it, etc. or any damge caused to your brain while trying to understand it. This program in no way encourages piracy and the utilities in the program are intended only for those who have themselves legitimately created archival copies of their own games.

</Obligatory Legal Bullshit>


Version History
Version 1.6911/29/07
Changes:
  • PCSX2 has been added to the emulator attachment list. Note that only the TLB version (pcsx2t.exe) is supported. There's an unknown issue with writing the RAM of the other version.
  • Support for 0,1,2,D, and E code types for PS2 has been added to the Trainer. The 4 code type (serial repeater) is there, but untested.
  • Memory Editor, Search Results, and Code Assembler should be more friendly to higher (PS2) addresses now.
  • Search Results window has a "Remove All" button now for active codes.
Version 1.68b11/6/07
Changes:
  • Minor fix to Code Assembler. Multi-instruction pseudo ops were throwing off the address.
  • Code Disassembler now supports raw PS2 codes.
  • Probably another minor fix or two I forgot to mention..
Version 1.685/8/07
Changes:
  • Added support for NeoPop/Neo Geo Pocket hacking and cheating.
  • Minor update to the Code Formatter.
Version 1.674/15/07
Changes:
  • Code Assembler has a new option (Para's suggestion): Write to emulator. It'll only write if there aren't any warnings.
  • Endian setting in the Code Search window will now lock while attached to an emulator like before.
Version 1.6664/12/07
Changes:
  • Emulators are now supported via emulators.cfg. Theres an example on the first line of the file showing how to add new ones. This change also brings about some minor GUI and logistical changes as well.
  • EmuCheat has a PC codes option now (see below for code types). This is because PC games can easily be added to the emulators.cfg.
  • Results display form the Code Search now has the ability to test results or view in memory editor while attached to the emulator.
  • Code Assembler doesn't go apeshit when tabbed ASM is processed. Comments on .ORG pseudo ops actually work now.
  • Fixed crash when clicking Results button with no search active.
  • Fixed 16-bit Upper/Lower search size, I think.
  • Fixed the problem with code search crashing after 30 searches (hopefully). Limit should now be 75.
Version 1.653/26/07
Changes:
  • The bug with initial dumps in the code searcher has finally been swatted...with a sledgehammer.
  • Fixed a minor bug with code prefixes in the code assembler.
  • The opcode display type setting on the Code Disassembler actually works now. There's also an option to output HTML for FAQ writing.
  • Slightly revamped the internal disassembly code and added the option to prefix hex values with 0x.
  • Added Copy buttons and working CTRL+A keyboard shortcuts ot a few things. It really pisses me off when I hit CTRL+A on something and it doesn't work.
Version 1.643/26/07
Changes:
  • Memory Editor now includes an endian selection box, so we can view it either way. Helps me with ASM hacking on PSX.
  • Code Search now includes the option to set the search range.
  • Code Assembler/Disassembler now has an option for PSX input/output.
Version 1.633/3/07
Changes:
  • The cheat patcher now includes bare bones support for No$GBA NDS cheating -- RAM write (0,1,2) and Pointer (B) code types should work.
  • Squashed a couple of minor GUI bugs (like Show Results crashing when there's 0), as well as enabled copy/pasting into the memory editor address box with the usual keyboard shortcuts.
Version 1.622/26/07
Changes:
  • No$GBA DS hacking support added. Both the memory editor and code searcher should work with No$GBA 2.3d.
  • Fixed an old bug in the endian handling. I added "Little Endian System" to handle things like PSX and DS, as these are different from simply byteswapping all the words in a PJ64 save state.
Version 1.612/22/07
Changes:
  • Renegade can attach to PCSX v1.5 now.
  • Added support for PS2 codes in the code assembler and disassembler.
Version 1.610/17/06
Changes:
  • Renegade can attach to Project64 now. Thank SubDrag for the proper start offset.
  • Code assembler now supports Thumb. Don't hold your breath where ARM is concerned.
  • Fixed a minor annoyance in the Mem Editor. When ReadProcessMemory fails, the auto-refresh timer should now disable itself.
  • You'll also notice I added a couple of somewhat useless tools. One of them converts between plain text and C:|| format, and the other one prints activators for all 4 players based on the P1 address.
Version 1.5910/3/06
Changes:
  • The interface of the Disassembler is completely redone. It now allows for inline assembly and hex editing (think Niew), as well as grabbing emulator RAM.
  • Disassembly search is removed, and those search options are now part of the main Code Searcher.
  • Added "Quick search" keys for the most common search types, for quick comparing.
Version 1.589/29/06
Changes:
  • The whole GUI has been converted to an MDI interface. You'll notice some minor GUI changes in some tools.
  • Changed the patcher to a more useful trainer/patcher combo. See info below for a complete list of supported code types.
  • Added search/mem edit support for Mupen 0.5.1, pSX 1.9, SSSPSX, and No$GBA.
  • Fixed a quark in the assembler error messages.
  • Fixed a value input bug in the code searcher.
Version 1.579/19/06
Changes:
  • Added a memory editor to the code searcher.
Version 1.569/16/06
Changes:
  • Code Porter updated to allow for '0?' in code values. Previously only hex values or ??/XX worked.
  • More bugs in the code searcher rectified. Comparing to previous searches actually works now, among other things. I even figured out why it wasn't letting go of files it had accessed.
  • Added Undo button to the code searcher.
Version 1.559/14/06
Changes:
  • Fixed the results export. There was a faulty IF statement.
  • Fixed comparitive searches with emulator. It wasn't setting up correctly after initial dump.
Version 1.549/13/06
Changes:
  • Reworked the results display to speed it up.
  • Fixed a little typo in the DLL that pretty much broke everything but 8-bit searches.
Version 1.539/12/06
Changes:
  • I think I finally solved that overflow issue with 8 meg files.
  • Added the ability to rip the N64 RAM right from the emulator. The bad news: It doesn't work with PJ64 because it handles the memory weird. Good news is it works on 1964 0.9.9, Mupen 0.4, and Nemu 0.8.
Version 1.525/23/06
Changes:
  • More bug fixes to the search results display. One crash fixed, and the export funtion actually prints all the results to file instead of just the display max.
  • Made it so the search results display closes automaticly when the code searcher is closed.
  • Added an option to output .ORG instruction format in the code disassembler
Version 1.515/17/06
Changes:
  • Fixed a bad bug in the new search results display.
Version 1.55/16/06
Code Search Changes:
  • Search results are now displayed within the program, with the option to export. It shows previous values in the results list now as well.
  • Fixed a bug with unaligned searches. They appeared to work, on the surface, but resuming them or printing results crashed the program.
  • Fixed the Wilcard Value search type. It actually works now. "?" is wildcard.
  • Text searches work better now. "*" is still wildcard, but the size of the text search is actuaully determined by the search size setting, like other searches and the comparison is faster.
  • The options dialog now includes a folder select popup for setting the results path.
Other Changes:
  • Updated a couple pseudo ops, and finally put full list in this readme. Check it out.
  • Some fixes and syntax changes for the code assembler. See usage details below.
  • Added some new options to both the code assembler and code disassembler.
  • Fixed the signing compensation for the 32-bit access search in the ASM searcher.
  • Main window now hides itself when you choose a tool.
Version 1.415/7/06
Changes:
  • Fixed a major bug with the results path on the code search.
  • Fixed a bug with the code disassembler crashing do to bad input.
  • Fixed the code prefixes in the code assembler for when an '80' address is part of the input.
Version 1.45/6/06
Disassembler Changes:
  • Added a form to assemble codes.
  • Added support for more pseudo ops.
  • The ASM Edit dialog has been revamped to allow changing addresses from there and setting data without closing the box. You can press Enter to set the opcode and advance to the next, or Ctrl+Enter to make the change and close the dialog.
  • Added an option to save page/changes/etc as codes.
  • Added an option to undo all unsaved changes.
  • Fixed a few crash bugs due to menu shortcuts being enabled despite the menu items themselves being disabled.
Other Changes:
  • Added Open/Save to the code porter
Version 1.35/5/06
Disassembler Changes:
  • Removed my debug message box that was accidently left enabled in the last build.
  • Fixed the bugs in the saving functions. It was really fucked. :(
  • Export ROM to Text now grabs the regview setting as it should, plus I added a keyboard shortcut for it (Ctrl+E).
  • Added a form to disassemble codes.
Version 1.25/2/06
Code Search Changes:
  • Added 16-Bit Upper/Lower search sizes. Upper being 0,4,8,C addresses nad lower being 2,6,A,E address.
  • Added Known/Not Value List search types. The way they work is you enter a list of calues seperated by commas. It returns all results that are or aren't any of the values.
  • Added the option to change what program the search results are opened with (Notepad is the default).
  • Value box only gets set to 0 now if the search size is set less than the value in the box. It was starting to annoy me, so I changed it.
Disassembler Changes:
  • Added an ASM Search option that has various asm-based search options. See below for more info.
  • Added an option to change the endian being disassembled. (This doesn't effect the file, just what you see).
  • Fixed the bug when opening files in little endian. I'll fix a couple other things that Parasyte mentioned to me in the next version.
Other Changes:
  • Byteswap Tool has a range option and a PJ64->Bin preset now.
  • Added a Clear Input button to the Code Porter.
Version 1.14/29/06
Minor update:
  • 2 Search types added - Active Bits (Any) and Active Bits (All)
  • Fixed branches in disassembler
  • Added an Edit ASM item to the edit menu in disassembler. The keyboard shortcut was always there, I just forgot to mention it. ;)
  • Fixed alignment issues with the Export ROM to Text option, and added the option to include values which was somehow forgotten before.
  • Fixed the crash with the GPR reg view option in disassembler and made it save to the CFG now
  • Fixed the file crash after canceling disassembler close
  • Fixed the exit item on main window menu
Version 1.04/18/06
Another batch of small fixes.
Version 0.99 BETA 24/16/06
I fixed a few bugs, mostly relating to the code searcher, and widened the Disassembly textboxes by a few pixels because certain ops were being cut off.
Version 0.99 BETA4/14/06
Just Getting Started. This ReadMe probably looks like shit, but at least it's not a goddamn text file or one of those fucking built-in compiled help files. Those are bloody annoying. I don't want to create a goddamn database for searching, Shove it up your ass!


Features
You might note that I released some of these items in somewhat sucky standalone versions a while ago. These are entirely redone (with the exception of reusing some functions). In my optinion, they beat the piss out of any of my previous sloppy programs. Check them out.

Current Features:
  • Code Searcher
  • R4300i Disassembler
  • ROM Code Patcher
  • Code Porter
  • Patch('50') Code Expander
  • Goldeneye 007 Target Time Calculator
  • Byteswap Tool
  • Emulator Trainer
  • Memory Editor
  • Probably the only Readme you'll ever see that's valid XHTML 1.1. ;-)

Possible To-Do List:
  • Offset presets on the code porter
  • IPS/APS/PK Patch support
  • Xploder Crypto tool
  • Dexdrive save to emulator mempack/EEPROM converter - If anyone knows the format of .N64 dexdrive files, please fill me in/
  • Inline Assembler

Known Issues:
  • -possibly resolved- Code Search: Searching 8MB+ files tends to cause a stack overflow on 8-bit (and probably unaligned bits) searches. I'm currently unable to resolve this.


Code Searcher Info
If you ever used Cheater64, you'll remember it being somewhat slow, but still pretty powerful. If you've used ViFT you'll remember it being sort of a GODDAMN CONSOLE APP! But it was fast and all-powerful. Well, This search uses all the same functions as ViFT while keeping most of it's steam via the renegade64.dll. So now we have speed and a GUI. Let's just hope the damn thing works.

  • Make sure the searches folder exists or set the results path to another existing folder.
  • ALL values input are assumed hex, EXCEPT for search options with bits or number of addresses being excluded. The GUI tries to filter anyway, so if you can type hex characters, it's hex input.
  • Zip files are NOT supported. I know PJ64 does that by default. There's an option to turn it off though, and I recommend you do so.
  • Some emulators are now supported. If the one you like isn't listed, then I problably couldn't figure out how the process handles its memory (or I didn't get to that platform yet).


Code Porter Info
If you remember my old one, you'll remember it only supported GSC text format. This reincarnation will pretty much port anything you throw at it. Just paste shit into the textbox. Still includes the option to skip activator code types. It should work well with all N64 and even PSX code types.


R4300i Disassembler Usage/Syntax Notes
General Notes
My disassembler is sort of a Win32 style Niew. You'll notice you can edit hex/asm and the opposite changes accordingly. A couple of notes...
  • ALL values used in your routines are expected to be Hexadecimal.
  • Spacing between registers and such, though frowned upon, is generally supported.
  • I noticed that Niew ignores the fact that certain bits are supposed to be empty and shows opcodes from values it shouldn't. I tried to make this check for those empty bits for more accurate output (hopefully). :)
Immediates/Jump Targets
Jumps and other opcodes where you use a value are fairly forgiving on syntax of the value.

Some Examples:
JAL 80000060
J 60
JAL $60
J 0x60
ADDIU $V0,$V0,00FF
ADDIU $V0,$V0,FF
ADDIU $V0,$V0,$00FF
ADDIU $V0,$V0,$FF
ADDIU $V0,$V0,0x00FF

Branches
Branches can be done in 2 ways: by address and by immediate. Anything preceeded by an asterisk (*) is considered an immidiate and will set the lower 16-bits (branch location) to that value.

Examples:
BEQ $V0,$A1,0x80000068
BNE $V1,$S1,*3
BNE $V1,$S1,68

Branches in the Code Assembler can be done using either of methods above, plus with labels.

Examples:
BEQ $V0,$A1,80000068
NOP
BNE $V1,$S1,68
ADDIU $V0,$V0,00FF
LUI $K1,3F80
MTC1 $K1,F2
BNE $V1,$S1,bah
ADDIU $V0,$V0,00FF
LUI $K1,3F80
bah:
MTC1 $K1,F2

Registers
Registers are another thing I tried to make flexible.

Some Examples:
ADDIU $V0,$zero,00FF
ADDIU $V0,zero,00FF
ADDIU $V0,R00,00FF
ADDIU $V0,R0,00FF
ADDIU V0,R0,00FF
ADDIU R3,R0,00FF
ADDIU R03,R0,00FF
LUI $K1,3F80
MTC1 $K1,F2
MTC1 $K1,F02
MTC1 $K1,$F2
MTC1 $K1,FPR2

Code Assembler Specific Notes
Addressing
The default starting address is 0. This can be changed in two ways (both within the ASM textbox). The address MUST be aligned for ASM. This means the address needs to end in 0,4,8 or C. And yes, it has to be Hex!

Method 1: Just use the address on its own line.
80142014
JAL 80000060
ADDIU $V0,$V0,00FF
60
LUI $K1,3F80
JR $RA
MTC1 $K1,F2

Method 2: .ORG Address
.ORG 80142014
JAL 80000060
ADDIU $V0,$V0,00FF
60:
LUI $K1,3F80
JR $RA
MTC1 $K1,F2

Comments
The semi-colon can be used for commenting, either on the end of a line or on a line by itself.

Examples:
ADDIU $V0,$zero,00FF ;V0 will now be 00FF
;Put 3F80 into F2
LUI $K1,3F80
MTC1 $K1,F2



Unsupported Opcodes
The only OP that's not supported at all is CACHE. I couldn't figure out how the hell it's assembled. I was also unsure of some of the Trap OPs. Any of the ones with an Immediate are good, but the ones like TEQ will give you a little warning. I'm not sure if those are right or not.
Supported Pseudo Opcodes
Explanations
rs = 5-bit source register specifier
rt = 5-bit target (source/destination) register or branch condition
rd = 5-bit destination register specifier
fs = 5-bit floating point source register specifier
ft = 5-bit floating point target (source/destination) register or branch condition
fd = 5-bit floating point destination register specifier
float = Float value (32bit)
base = 5-bit value
imm = 16 bit immediate value
offset = 16 bit branch displacement or address displacement
target = 26 bit jump target address [] = Optional argument.
Pseudo OPs List
OPcodeArgumentsAssembles To
NOPADDIU R0,R0,0000
or
SLL r0, r0, 0
(Short/Long)
MOVErd, rsADD rd, r0, rs
NEGrd, rtSUB rd, r0, rt
NEGUrd, rsSUBU rd, r0, rs
BNEZrs, offsetBNE rs, r0, offset
BNEZLrs, offsetBNEL rs, r0, offset
BEQZrs, offsetBEQ rs, r0, offset
BEQZLrs, offsetBEQL rs, r0, offset
B / BR / BRAoffsetBEQ r0, r0, offset
BAL / BRL / BRALoffsetBGEZAL r0, offset
LIrt, immORI rt, r0, imm (if imm is 16 bit)
or
LUI rt, high_16
ORI rt, rt, low_16 (if imm is 32 bit)
S.Sft, offset(base)SWC1 ft, offset(base)
L.Sft, offset(base)LWC1 ft, offset(base)
LBI / LBArt,offset[(base)]Note 1
LBIU / LBAUrt,offset[(base)]Note 1
LDI / LDArt,offset[(base)]Note 1
LDLI / LDLArt,offset[(base)]Note 1
LDRI / LDRArt,offset[(base)]Note 1
LHI / LHArt,offset[(base)]Note 1
LHIU / LHAUrt,offset[(base)]Note 1
LLI / LLArt,offset[(base)]Note 1
LLDI / LLDArt,offset[(base)]Note 1
LWI / LWArt,offset[(base)]Note 1
LWLI / LWLArt,offset[(base)]Note 1
LWRI / LWRArt,offset[(base)]Note 1
LWIU / LWAUrt,offset[(base)]Note 1
DDIVHIrd,rs,rtDDIV rs,rt
MFHI rd
DDIVLOrd,rs,rtDDIV rs,rt
MFLO rd
DDIVUHIrd,rs,rtDDIVU rs,rt
MFHI rd
DDIVULOrd,rs,rtDDIVU rs,rt
MFLO rd
DMULTHIrd,rs,rtDMULT rs,rt
MFHI rd
DMULTLOrd,rs,rtDMULT rs,rt
MFLO rd
DMULTUHIrd,rs,rtDMULTU rs,rt
MFHI rd
DMULTULOrd,rs,rtDMULTU rs,rt
MFLO rd
MULTHIrd,rs,rtMULT rs,rt
MFHI rd
MULTLOrd,rs,rtMULT rs,rt
MFLO rd
MULTUHIrd,rs,rtMULTU rs,rt
MFHI rd
MULTULOrd,rs,rtMULTU rs,rt
MFLO rd
LTC1 / LIC1
(See Note 1)
fd,[rs,],imm
If no rs, $K1 is used
(if imm is 16 bit or lower 16 bits are 0)
LUI rs, imm
MTC1 rs,fd
(if imm is 32 bit)
LUI rs, high_16
ORI rs, rs, low_16
MTC1 rs,fd
LAC1fd,offset[(base)]
If no base, $K1 is used
LUI base, high_16
LWC1 fd,low_16(base)
LFC1 / LFTC1, LFPfd,[rs,],float
If no rs, $K1 is used.
Converts the float to hex and assembles the same as LTC1/LIC1.
Note 1
  • If no base is specified, rt is used.
  • The Load byte/word/etc Immediate/Address OPs assemble to:
LUI base, high_16
Lx rt, low_16(base)

example:
LBI $V0,80000060($AT)
Assembles as:
LUI $AT,8000
LB $V0,0060($AT)

  • The offset need not be the full address. LBI $V0,60($K1) will assemble the same as above. The '8' is implied. LAC1 works this way too.
  • The offset is auto-fixed. WTF does that mean? All Load OPs are signed. 80YYxxxx. If xxxx is greater than 7FFF then 1 must be added to the upper 16 bits for the load to work.

LBI $V0,8014C6D0
Assembles as:
LUI $V0,8015
LB $V0,C6D0($V0)


Trainer/Patcher Info
The trainer/patcher reads a text file of codes in PEC style format. An example game entry is included in the default codes file (n64.ini). I'll update it with a lot more when I get a chance. I also need to add support for more systems. Currently, N64 and PSX are fully supported (with extras). Suggestions are welcome.

N64 Code Types (GS Button == Tilde Key)
8-Bit WriteWrites value YY to adddress XXXXXX. The 'A0' prefix does the same thing here.
80XXXXXX 00YY
16-Bit WriteWrites value YYYY to adddress XXXXXX. The 'A1' prefix does the same thing here.
81XXXXXX YYYY
32-Bit Write (Renegade Only)Writes value YYYYYYYY to adddress XXXXXX.
82XXXXXX YYYYYYYY
8-Bit GS Button WriteWrites value YY to adddress XXXXXX when the GS button is pressed.
88XXXXXX 00YY
16-Bit GS Button WriteWrites value YYYY to adddress XXXXXX when the GS button is pressed.
89XXXXXX YYYY
32-Bit GS Button Write (Renegade Only)Writes value YYYYYYYY to adddress XXXXXX when the GS button is pressed.
8AXXXXXX YYYYYYYY
8-Bit Equal To ActivatorExecute the following code (ZZZZZZZZ ZZZZ) ONLY when the value stored in address XXXXXX is equal to YY.
D0XXXXXX 00YY
ZZZZZZZZ ZZZZ
16-Bit Equal To ActivatorSame as above but checks a 16-bit value.
D1XXXXXX YYYY
ZZZZZZZZ ZZZZ
8-Bit Not Equal To ActivatorExecute the following code (ZZZZZZZZ ZZZZ) ONLY when the value stored in address XXXXXX is NOT equal to YY.
D2XXXXXX 00YY
ZZZZZZZZ ZZZZ
16-Bit Not Equal To ActivatorSame as above but checks a 16-bit value.
D3XXXXXX YYYY
ZZZZZZZZ ZZZZ
8-Bit Less Than Activator (Renegade Only)Execute the following code (ZZZZZZZZ ZZZZ) ONLY when the value stored in address XXXXXX is less than YY.
E0XXXXXX 00YY
ZZZZZZZZ ZZZZ
16-Bit Less Than Activator (Renegade Only)Same as above but checks a 16-bit value.
E1XXXXXX YYYY
ZZZZZZZZ ZZZZ
8-Bit Greater Than Activator (Renegade Only)Execute the following code (ZZZZZZZZ ZZZZ) ONLY when the value stored in address XXXXXX is greater than YY.
E2XXXXXX 00YY
ZZZZZZZZ ZZZZ
16-Bit Greater Than Activator (Renegade Only)Same as above but checks a 16-bit value.
E3XXXXXX YYYY
ZZZZZZZZ ZZZZ
Patch/RepeaterPatch codes, aka Serial Repeaters, are used to make a code string shorter. EG, You have five codes put together to give you "all weapons." Use the patch to shorten it to two codes. XX is the number of addresses to write; YY is the amount (offset) to add to each address; ZZ is the amount to add to each value.
5000XXYY 00ZZ
TTTTTTTT VVVV
Copy Bytes (Renegade Only)Copies YYYY bytes from location XXXXXX to location ZZZZZZ.

Example use would be:
C2040450 0008
80040680 0000
That would copy 8 bytes from 40450 to 40680
C2XXXXXX YYYY
80ZZZZZZ 0000
8-Bit Pointer Write (Renegade Only)Writes value ZZ to adddress stored at XXXXXX + offset (YYYY).
70XXXXXX YYYY00ZZ
16-Bit Pointer Write (Renegade Only)Writes value ZZZZ to adddress stored at XXXXXX + offset (YYYY).
71XXXXXX YYYYZZZZ
8-Bit Pointer GS Button Write (Renegade Only)Writes value ZZ to adddress stored at XXXXXX + offset (YYYY) when GS button is pressed.
78XXXXXX YYYY00ZZ
16-Bit Pointer GS Button Write (Renegade Only)Writes value ZZZZ to adddress stored at XXXXXX + offset (YYYY) when GS button is pressed.
79XXXXXX YYYYZZZZ
Z-Bit Increment (Renegade Only)Adds YY to the value at adddress XXXXXX. Z = 0-2 for 32, 16, and 8 bit in that order.
Z0XXXXXX 00YY
Z-Bit Decrement (Renegade Only)Subtracts YY to the value at adddress XXXXXX. Z = 0-2 for 32, 16, and 8 bit in that order.
Z1XXXXXX 00YY
Z-Bit Bitwise AND (Renegade Only)Value at adddress XXXXXX is changed to value AND YY. Z = 0-2 for 32, 16, and 8 bit in that order.
Z2XXXXXX 00YY
Z-Bit Bitwise OR (Renegade Only)Value at adddress XXXXXX is changed to value OR YY. Z = 0-2 for 32, 16, and 8 bit in that order.
Z3XXXXXX 00YY
Z-Bit Bitwise XOR (Renegade Only)Value at adddress XXXXXX is changed to value XOR YY. Z = 0-2 for 32, 16, and 8 bit in that order.
Z4XXXXXX 00YY
GS Button Z-Bit Increment (Renegade Only)Adds YY to the value at adddress XXXXXX when GS button is pressed. Z = 0-2 for 32, 16, and 8 bit in that order.
Z8XXXXXX 00YY
GS Button Z-Bit Decrement (Renegade Only)Subtracts YY to the value at adddress XXXXXX when GS button is pressed. Z = 0-2 for 32, 16, and 8 bit in that order.
Z9XXXXXX 00YY
GS Button Z-Bit Bitwise AND (Renegade Only)Value at adddress XXXXXX is changed to value AND YY when GS button is pressed. Z = 0-2 for 32, 16, and 8 bit in that order.
ZAXXXXXX 00YY
GS Button Z-Bit Bitwise OR (Renegade Only)Value at adddress XXXXXX is changed to value OR YY when GS button is pressed. Z = 0-2 for 32, 16, and 8 bit in that order.
ZBXXXXXX 00YY
GS Button Z-Bit Bitwise XOR (Renegade Only)Value at adddress XXXXXX is changed to value XOR YY when GS button is pressed. Z = 0-2 for 32, 16, and 8 bit in that order.
ZCXXXXXX 00YY
32-Bit Slide Write (Renegade Only)Writes YY 32-bit values starting at address XXXXXX.

Example:
6000C0F4 00000002
08018090 AFA40000
60060240 00000007
00047600 3C028008
8C429EE0 34013F80
A44100DC A44100E0
0800303F 00000000

This the same as:
8100C0F4 0801
8100C0F6 8090
8100C0F8 AFA4
8100C0FA 0000
81060240 0004
81060242 7600
81060244 3C02
81060246 8008
81060248 8C42
8106024A 9EE0
8106024C 3401
8106024E 3F80
81060250 A441
81060252 00E0
81060254 0800
81060256 303F
60XXXXXX 000000YY
ZZZZZZZZ ZZZZZZZZ
PSX Code Types (GS Button == Tilde Key)
8-Bit WriteWrites value YY to adddress XXXXXX. The 'A0' prefix does the same thing here.
30XXXXXX 00YY
16-Bit WriteWrites value YYYY to adddress XXXXXX. The 'A1' prefix does the same thing here.
80XXXXXX YYYY
32-Bit Write (Renegade Only)Writes value YYYYYYYY to adddress XXXXXX.
A0XXXXXX YYYYYYYY
8-Bit GS Button Write (Renegade Only)Writes value YY to adddress XXXXXX when the GS button is pressed.
38XXXXXX 00YY
16-Bit GS Button Write (Renegade Only)Writes value YYYY to adddress XXXXXX when the GS button is pressed.
88XXXXXX YYYY
32-Bit GS Button Write (Renegade Only)Writes value YYYYYYYY to adddress XXXXXX when the GS button is pressed.
A8XXXXXX YYYYYYYY
8-Bit Equal To ActivatorExecute the following code (ZZZZZZZZ ZZZZ) ONLY when the value stored in address XXXXXX is equal to YY.
E0XXXXXX 00YY
ZZZZZZZZ ZZZZ
16-Bit Equal To ActivatorSame as above but checks a 16-bit value.
D0XXXXXX YYYY
ZZZZZZZZ ZZZZ
8-Bit Not Equal To ActivatorExecute the following code (ZZZZZZZZ ZZZZ) ONLY when the value stored in address XXXXXX is NOT equal to YY.
E1XXXXXX 00YY
ZZZZZZZZ ZZZZ
16-Bit Not Equal To ActivatorSame as above but checks a 16-bit value.
D1XXXXXX YYYY
ZZZZZZZZ ZZZZ
8-Bit Less Than Activator (Renegade Only)Execute the following code (ZZZZZZZZ ZZZZ) ONLY when the value stored in address XXXXXX is less than YY.
E2XXXXXX 00YY
ZZZZZZZZ ZZZZ
16-Bit Less Than Activator (Renegade Only)Same as above but checks a 16-bit value.
D2XXXXXX YYYY
ZZZZZZZZ ZZZZ
8-Bit Greater Than Activator (Renegade Only)Execute the following code (ZZZZZZZZ ZZZZ) ONLY when the value stored in address XXXXXX is greater than YY.
E3XXXXXX 00YY
ZZZZZZZZ ZZZZ
16-Bit Greater Than Activator (Renegade Only)Same as above but checks a 16-bit value.
D3XXXXXX YYYY
ZZZZZZZZ ZZZZ
Patch/RepeaterPatch codes, aka Serial Repeaters, are used to make a code string shorter. EG, You have five codes put together to give you "all weapons." Use the patch to shorten it to two codes. XX is the number of addresses to write; YY is the amount (offset) to add to each address; ZZ is the amount to add to each value.
5000XXYY 00ZZ
TTTTTTTT VVVV
Copy Bytes (Renegade Only)Copies YYYY bytes from location XXXXXX to location ZZZZZZ.

Example use would be:
C2040450 0008
80040680 0000
That would copy 8 bytes from 40450 to 40680
C2XXXXXX YYYY
80ZZZZZZ 0000
8-Bit Pointer Write (Renegade Only)Writes value ZZ to adddress stored at XXXXXX + offset (YYYY).
70XXXXXX YYYY00ZZ
16-Bit Pointer Write (Renegade Only)Writes value ZZZZ to adddress stored at XXXXXX + offset (YYYY).
71XXXXXX YYYYZZZZ
8-Bit Pointer GS Button Write (Renegade Only)Writes value ZZ to adddress stored at XXXXXX + offset (YYYY) when GS button is pressed.
78XXXXXX YYYY00ZZ
16-Bit Pointer GS Button Write (Renegade Only)Writes value ZZZZ to adddress stored at XXXXXX + offset (YYYY) when GS button is pressed.
79XXXXXX YYYYZZZZ
Z-Bit Increment (Renegade Only)Adds YY to the value at adddress XXXXXX. Z = 0-2 for 32, 16, and 8 bit in that order.
Z0XXXXXX 00YY
Z-Bit Decrement (Renegade Only)Subtracts YY to the value at adddress XXXXXX. Z = 0-2 for 32, 16, and 8 bit in that order.
Z1XXXXXX 00YY
Z-Bit Bitwise AND (Renegade Only)Value at adddress XXXXXX is changed to value AND YY. Z = 0-2 for 32, 16, and 8 bit in that order.
Z2XXXXXX 00YY
Z-Bit Bitwise OR (Renegade Only)Value at adddress XXXXXX is changed to value OR YY. Z = 0-2 for 32, 16, and 8 bit in that order.
Z3XXXXXX 00YY
Z-Bit Bitwise XOR (Renegade Only)Value at adddress XXXXXX is changed to value XOR YY. Z = 0-2 for 32, 16, and 8 bit in that order.
Z4XXXXXX 00YY
GS Button Z-Bit Increment (Renegade Only)Adds YY to the value at adddress XXXXXX when GS button is pressed. Z = 0-2 for 32, 16, and 8 bit in that order.
Z8XXXXXX 00YY
GS Button Z-Bit Decrement (Renegade Only)Subtracts YY to the value at adddress XXXXXX when GS button is pressed. Z = 0-2 for 32, 16, and 8 bit in that order.
Z9XXXXXX 00YY
GS Button Z-Bit Bitwise AND (Renegade Only)Value at adddress XXXXXX is changed to value AND YY when GS button is pressed. Z = 0-2 for 32, 16, and 8 bit in that order.
ZAXXXXXX 00YY
GS Button Z-Bit Bitwise OR (Renegade Only)Value at adddress XXXXXX is changed to value OR YY when GS button is pressed. Z = 0-2 for 32, 16, and 8 bit in that order.
ZBXXXXXX 00YY
GS Button Z-Bit Bitwise XOR (Renegade Only)Value at adddress XXXXXX is changed to value XOR YY when GS button is pressed. Z = 0-2 for 32, 16, and 8 bit in that order.
ZCXXXXXX 00YY
32-Bit Slide Write (Renegade Only)Writes YY 32-bit values starting at address XXXXXX.

Example:
6000C0F4 00000002
08018090 AFA40000
60060240 00000007
00047600 3C028008
8C429EE0 34013F80
A44100DC A44100E0
0800303F 00000000

This the same as:
8000C0F4 0801
8000C0F6 8090
8000C0F8 AFA4
8000C0FA 0000
80060240 0004
80060242 7600
80060244 3C02
80060246 8008
80060248 8C42
8006024A 9EE0
8006024C 3401
8006024E 3F80
80060250 A441
80060252 00E0
80060254 0800
80060256 303F
60XXXXXX 000000YY
ZZZZZZZZ ZZZZZZZZ
PC Code Types (Very similar to PS2 code types)
8-Bit WriteWrites value YY to adddress XXXXXXX. The 'A0' prefix does the same thing here.
0XXXXXXX 000000YY
16-Bit WriteWrites value YYYY to adddress XXXXXXX. The 'A1' prefix does the same thing here.
1XXXXXXX 0000YYYY
32-Bit WriteWrites value YYYYYYYY to adddress XXXXXXX.
2XXXXXXX YYYYYYYY
Keyboard ActivatorExecute the following code (ZZZZZZZZ ZZZZZZZZ) ONLY when the keyboard key (YY) is being pressed. Uses standard Virtual Key codes with GetAsyncKeyState(YY). C0 is the Tilde key, for example. Look up the rest.
90000000 000000YY
ZZZZZZZZ ZZZZZZZZ
8-Bit Equal To ActivatorExecute the following code (ZZZZZZZZ ZZZZZZZZ) ONLY when the value stored in address XXXXXX is equal to YY.
DXXXXXXX 100000YY
ZZZZZZZZ ZZZZZZZZ
16-Bit Equal To ActivatorSame as above but checks a 16-bit value.
DXXXXXXX 0000YYYY
ZZZZZZZZ ZZZZZZZZ
8-Bit Not Equal To ActivatorExecute the following code (ZZZZZZZZ ZZZZZZZZ) ONLY when the value stored in address XXXXXX is NOT equal to YY.
DXXXXXXX 101000YY
ZZZZZZZZ ZZZZZZZZ
16-Bit Not Equal To ActivatorSame as above but checks a 16-bit value.
DXXXXXXX 0010YYYY
ZZZZZZZZ ZZZZZZZZ
8-Bit Less Than ActivatorExecute the following code (ZZZZZZZZ ZZZZZZZZ) ONLY when the value stored in address XXXXXX is less than YY. ? is 0 for regular Less Than, 1 for Less OR Equal.
DXXXXXXX 102?00YY
ZZZZZZZZ ZZZZZZZZ
16-Bit Less Than ActivatorSame as above but checks a 16-bit value.
DXXXXXXX 002?YYYY
ZZZZZZZZ ZZZZZZZZ
8-Bit Greater Than ActivatorExecute the following code (ZZZZZZZZ ZZZZZZZZ) ONLY when the value stored in address XXXXXX is greater than YY.
DXXXXXXX 103?00YY
ZZZZZZZZ ZZZZZZZZ
16-Bit Greater Than ActivatorSame as above but checks a 16-bit value.
DXXXXXXX 003?YYYY
ZZZZZZZZ ZZZZZZZZ
Patch/RepeaterPatch codes, aka Serial Repeaters, are used to make a code string shorter. EG, You have five codes put together to give you "all weapons." Use the patch to shorten it to two codes. XXXXXXX is the address to write; YYYY is the number of addresses to write, ZZZZ is the amount (offset) to add to each address; VVVVVVVV is value; IIIIIIII is the amount to add to each value.
4XXXXXXX YYYYZZZZ
VVVVVVVV IIIIIIII
Copy BytesCopies YYYYYYYY bytes from location XXXXXXXX to location ZZZZZZZZ.

Example use would be:
50040450 00000008
00040680 00000000
That would copy 8 bytes from 40450 to 40680
5XXXXXXX YYYYYYYY
ZZZZZZZZ 00000000
8-Bit Pointer WriteWrites value ZZ to adddress stored at XXXXXXX + offset (YYYYYY).
7XXXXXXX 00YYYYYY
000000ZZ 00000000
16-Bit Pointer WriteWrites value ZZZZ to adddress stored at XXXXXXX + offset (YYYYYY).
7XXXXXXX 10YYYYYY
0000ZZZZ 00000000
32-Bit Pointer WriteWrites value ZZZZZZZZ to adddress stored at XXXXXXX + offset (YYYYYY).
7XXXXXXX 20YYYYYY
ZZZZZZZZ 00000000
8-Bit IncrementAdds YY to the value at adddress XXXXXXX.
301000YY 0XXXXXXX
8-Bit DecrementAdds YY to the value at adddress XXXXXXX.
302000YY 0XXXXXXX
16-Bit IncrementAdds YYYY to the value at adddress XXXXXXX.
3010YYYY 0XXXXXXX
16-Bit DecrementAdds YYYY to the value at adddress XXXXXXX.
3020YYYY 0XXXXXXX
8-Bit BitwiseAND/OR/XOR(Z=0-2) YY to the value at adddress XXXXXXX.
307Z00YY 0XXXXXXX
16-Bit BitwiseAND/OR/XOR(Z=0-2) YYYY to the value at adddress XXXXXXX.
308ZYYYY 0XXXXXXX
32-Bit Slide WriteWrites YY 32-bit values starting at address XXXXXX.

Example:
6000C0F4 00000002
08018090 AFA40000
60060240 00000007
00047600 3C028008
8C429EE0 34013F80
A44100DC A44100E0
0800303F 00000000

This the same as:
2000C0F4 08018090
2000C0F8 AFA40000
20060240 00047600
20060244 3C028008
20060248 8C429EE0
2006024C 34013F80
20060250 A44100E0
20060254 0800303F
6XXXXXXX 000000YY
ZZZZZZZZ ZZZZZZZZ
Neo Geo Pcket (NGPx) Code Types
8-Bit WriteWrites value ?? to adddress XXXX.
0000XXXX 00??
16-Bit WriteWrites value ???? to adddress XXXX.
1000XXXX ????
File Patching Code Types (All Systems)
8-Bit WriteWrites value ?? to adddress XXXXXX.
00XXXXXX 000000??
16-Bit WriteWrites value ???? to adddress XXXXXX.
10XXXXXX 0000????
32-Bit WriteWrites value ???????? to adddress XXXXXX.
20XXXXXX ????????
16-Bit Equal To CheckIn the case of file patching, this can be used as a verifier so the code on the next line (ZZZZZZZZ ZZZZZZZ) is only used if the value at address XXXXXX is equal to ????.
D0XXXXXX 0000????
ZZZZZZZZ ZZZZZZZZ
32-Bit Equal To Check32-bit version of the above.
D1XXXXXX ????????
ZZZZZZZZ ZZZZZZZZ


Credits/Contact
Written by Viper187 of Kodewerx and The Snake Pit

Special Thanks To:
Parasyte - His 1337 programming/hacking skills are unmatched. I'm always asking him shit.
HyperHacker - GS hacker and VB6 programmer. :)