Tut made by TheEliteOne

Okay, well the negative rule is this:

If the SECOND half of the address/values is 8000 or more you MUST add 1 to the FIRST half
Why do we do this?

Here is the Medal of Honor Heroes 2 Co-ordiante Pointer:

Cheat Addressing: 006286DC
True Addressing: 08E286DC
So, if I wanted to load them you would do some thing like this:



So t1 holds the full pointer. But do you see this:



The 1 on the bottom is supposed to be a 2. If the second half of the pointer was under 8000 that would not happen, look at this (This is NOT the real pointer, I edited the second half of the pointer.)



The second half of the value is 7FFF, that is 8000 - 1. Do you see how the 1 is now a 2 in the LW
line? This is proof that we only need to use the negative rule when the second half of the address or value is 8000 or more. So here is how to fix it:



So if we where going to branch with the pointer or some thing you would use t1, not t0. t1 now holds the real pointer. If you don't do this you WILL freeze. If you write a subroutine and it freezes instantly check for this.

Information on ADDIU and ORI:

Addiu and Ori - Basically do the same thing, don't think that they DO though.

Addiu - Needs the Negative Rule
Ori - Doesn't need the Negative Rule