| 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 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.
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 |
| 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 | offset | BEQ r0, r0, offset |
| BAL | offset | BGEZAL r0, offset |
| LI | rt, imm | ORI rt, r0, imm (if imm is 16 bit) |
| S.S | ft, offset(base) | SWC1 ft, offset(base) |
| L.S | ft, 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. :)
|
|