Renegade64 - The Psycho's N64 Tool
Disclaimer
Version History
Features
Code Searcher Info
Code Porter Info
Disassembler Usage/Syntax Notes
ROM Code 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.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.
Code Searcher
R4300i Disassembler
ROM Code Patcher
Code Porter
Patch('50') Code Expander
Goldeneye 007 Target Time Calculator
Byteswap Tool


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.


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.


Disassembler Usage/Syntax Notes
General Notes
My disassembler is sort of a cross between Niew and PS2DIS. You'll notice if you change the hex value in the edit box the assembly changes accordingly, just like Niew. Something other disassemblers seem to lack. A couple of notes...
  • All values used in your routines must be Hexadecimal, with the exception of shift ops (SRA $AT,$V0,5).
  • 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

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

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
base = 5-bit value
imm = 16 bit immediate value
offset = 16 bit branch displacement or address displacement
target = 26 bit jump target address
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
BoffsetBEQ r0, r0, offset
BALoffsetBGEZAL r0, offset
LIrt, immORI rt, r0, imm (if imm is 16 bit)
S.Sft, offset(base)SWC1 ft, offset(base)
L.Sft, offset(base)LWC1 ft, offset(base)


ROM Patcher Info
The ROM patcher reads a text file of codes in what's basicly PEC 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 a few more code types. Suggestions are welcome. One idea I'm considering is something for modifiers, where the user would set a value/choose an option upon selecting the code for patching. I think PEC or PJ64 does something like this.

Currently Supported Code Types:
00aaaaaa 000000xx - 8-Bit Write
10aaaaaa 000000xx - 16-Bit Write
20aaaaaa 000000xx - 32-Bit Write


Credits/Contact
Written by Viper187 of GSCentral 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. :)