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.69 | 11/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.68b | 11/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.68 | 5/8/07 |
Changes:
- Added support for NeoPop/Neo Geo Pocket hacking and cheating.
- Minor update to the Code Formatter.
|
Version 1.67 | 4/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.666 | 4/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.65 | 3/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.64 | 3/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.63 | 3/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.62 | 2/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.61 | 2/22/07 |
Changes:
- Renegade can attach to PCSX v1.5 now.
- Added support for PS2 codes in the code assembler and disassembler.
|
Version 1.6 | 10/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.59 | 10/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.58 | 9/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.57 | 9/19/06 |
Changes:
- Added a memory editor to the code searcher.
|
Version 1.56 | 9/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.55 | 9/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.54 | 9/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.53 | 9/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.52 | 5/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.51 | 5/17/06 |
Changes:
- Fixed a bad bug in the new search results display.
|
Version 1.5 | 5/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.41 | 5/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.4 | 5/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.3 | 5/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.2 | 5/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.1 | 4/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.0 | 4/18/06 |
Another batch of small fixes.
|
Version 0.99 BETA 2 | 4/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 BETA | 4/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 |
OPcode | Arguments | Assembles To |
NOP | | ADDIU R0,R0,0000 or SLL r0, r0, 0 (Short/Long) |
MOVE | rd, rs | ADD rd, r0, rs |
NEG | rd, rt | SUB rd, r0, rt |
NEGU | rd, rs | SUBU rd, r0, rs |
BNEZ | rs, offset | BNE rs, r0, offset |
BNEZL | rs, offset | BNEL rs, r0, offset |
BEQZ | rs, offset | BEQ rs, r0, offset |
BEQZL | rs, offset | BEQL rs, r0, offset |
B / BR / BRA | offset | BEQ r0, r0, offset |
BAL / BRL / BRAL | offset | BGEZAL r0, offset |
LI | rt, imm | ORI rt, r0, imm (if imm is 16 bit) or LUI rt, high_16 ORI rt, rt, low_16 (if imm is 32 bit) |
S.S | ft, offset(base) | SWC1 ft, offset(base) |
L.S | ft, offset(base) | LWC1 ft, offset(base) |
LBI / LBA | rt,offset[(base)] | Note 1 |
LBIU / LBAU | rt,offset[(base)] | Note 1 |
LDI / LDA | rt,offset[(base)] | Note 1 |
LDLI / LDLA | rt,offset[(base)] | Note 1 |
LDRI / LDRA | rt,offset[(base)] | Note 1 |
LHI / LHA | rt,offset[(base)] | Note 1 |
LHIU / LHAU | rt,offset[(base)] | Note 1 |
LLI / LLA | rt,offset[(base)] | Note 1 |
LLDI / LLDA | rt,offset[(base)] | Note 1 |
LWI / LWA | rt,offset[(base)] | Note 1 |
LWLI / LWLA | rt,offset[(base)] | Note 1 |
LWRI / LWRA | rt,offset[(base)] | Note 1 |
LWIU / LWAU | rt,offset[(base)] | Note 1 |
DDIVHI | rd,rs,rt | DDIV rs,rt MFHI rd |
DDIVLO | rd,rs,rt | DDIV rs,rt MFLO rd |
DDIVUHI | rd,rs,rt | DDIVU rs,rt MFHI rd |
DDIVULO | rd,rs,rt | DDIVU rs,rt MFLO rd |
DMULTHI | rd,rs,rt | DMULT rs,rt MFHI rd |
DMULTLO | rd,rs,rt | DMULT rs,rt MFLO rd |
DMULTUHI | rd,rs,rt | DMULTU rs,rt MFHI rd |
DMULTULO | rd,rs,rt | DMULTU rs,rt MFLO rd |
MULTHI | rd,rs,rt | MULT rs,rt MFHI rd |
MULTLO | rd,rs,rt | MULT rs,rt MFLO rd |
MULTUHI | rd,rs,rt | MULTU rs,rt MFHI rd |
MULTULO | rd,rs,rt | MULTU 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 |
LAC1 | fd,offset[(base)] If no base, $K1 is used | LUI base, high_16 LWC1 fd,low_16(base) |
LFC1 / LFTC1, LFP | fd,[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 Write | Writes value YY to adddress XXXXXX. The 'A0' prefix does the same thing here. |
80XXXXXX 00YY |
16-Bit Write | Writes 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 Write | Writes value YY to adddress XXXXXX when the GS button is pressed. |
88XXXXXX 00YY |
16-Bit GS Button Write | Writes 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 Activator | Execute 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 Activator | Same as above but checks a 16-bit value. |
D1XXXXXX YYYY ZZZZZZZZ ZZZZ |
8-Bit Not Equal To Activator | Execute 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 Activator | Same 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/Repeater | Patch 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 Write | Writes value YY to adddress XXXXXX. The 'A0' prefix does the same thing here. |
30XXXXXX 00YY |
16-Bit Write | Writes 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 Activator | Execute 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 Activator | Same as above but checks a 16-bit value. |
D0XXXXXX YYYY ZZZZZZZZ ZZZZ |
8-Bit Not Equal To Activator | Execute 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 Activator | Same 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/Repeater | Patch 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 Write | Writes value YY to adddress XXXXXXX. The 'A0' prefix does the same thing here. |
0XXXXXXX 000000YY |
16-Bit Write | Writes value YYYY to adddress XXXXXXX. The 'A1' prefix does the same thing here. |
1XXXXXXX 0000YYYY |
32-Bit Write | Writes value YYYYYYYY to adddress XXXXXXX. |
2XXXXXXX YYYYYYYY |
Keyboard Activator | Execute 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 Activator | Execute 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 Activator | Same as above but checks a 16-bit value. |
DXXXXXXX 0000YYYY ZZZZZZZZ ZZZZZZZZ |
8-Bit Not Equal To Activator | Execute 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 Activator | Same as above but checks a 16-bit value. |
DXXXXXXX 0010YYYY ZZZZZZZZ ZZZZZZZZ |
8-Bit Less Than Activator | Execute 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 Activator | Same as above but checks a 16-bit value. |
DXXXXXXX 002?YYYY ZZZZZZZZ ZZZZZZZZ |
8-Bit Greater Than Activator | Execute 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 Activator | Same as above but checks a 16-bit value. |
DXXXXXXX 003?YYYY ZZZZZZZZ ZZZZZZZZ |
Patch/Repeater | Patch 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 Bytes | Copies 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 Write | Writes value ZZ to adddress stored at XXXXXXX + offset (YYYYYY). |
7XXXXXXX 00YYYYYY 000000ZZ 00000000 |
16-Bit Pointer Write | Writes value ZZZZ to adddress stored at XXXXXXX + offset (YYYYYY). |
7XXXXXXX 10YYYYYY 0000ZZZZ 00000000 |
32-Bit Pointer Write | Writes value ZZZZZZZZ to adddress stored at XXXXXXX + offset (YYYYYY). |
7XXXXXXX 20YYYYYY ZZZZZZZZ 00000000 |
8-Bit Increment | Adds YY to the value at adddress XXXXXXX. |
301000YY 0XXXXXXX |
8-Bit Decrement | Adds YY to the value at adddress XXXXXXX. |
302000YY 0XXXXXXX |
16-Bit Increment | Adds YYYY to the value at adddress XXXXXXX. |
3010YYYY 0XXXXXXX |
16-Bit Decrement | Adds YYYY to the value at adddress XXXXXXX. |
3020YYYY 0XXXXXXX |
8-Bit Bitwise | AND/OR/XOR(Z=0-2) YY to the value at adddress XXXXXXX. |
307Z00YY 0XXXXXXX |
16-Bit Bitwise | AND/OR/XOR(Z=0-2) YYYY to the value at adddress XXXXXXX. |
308ZYYYY 0XXXXXXX |
32-Bit Slide Write | 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:
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 Write | Writes value ?? to adddress XXXX. |
0000XXXX 00?? |
16-Bit Write | Writes value ???? to adddress XXXX. |
1000XXXX ???? |
File Patching Code Types (All Systems) |
8-Bit Write | Writes value ?? to adddress XXXXXX. |
00XXXXXX 000000?? |
16-Bit Write | Writes value ???? to adddress XXXXXX. |
10XXXXXX 0000???? |
32-Bit Write | Writes value ???????? to adddress XXXXXX. |
20XXXXXX ???????? |
16-Bit Equal To Check | In 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 Check | 32-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. :)
|
|