User Tag List

Results 1 to 7 of 7

Thread: How Jokering Works

  1. #1
    How Jokering Works

    User Info Menu

    How Jokering Works

    Made by TheEliteOne.

    Loading and storing:


    Loading:
    Moves data into a register, this data can be a value, address, offset, or pointer.

    Storing:
    Moves the contents of a register into a address, offset, or pointer.
    Definitions On Commands Used In Jokers:


    Lui - Load Upper Immediate
    Loads 16 Bits into a register
    Example: Lui t0 $1234
    Loads the value 1234 into the register t0

    Addiu - Add Immediate Unsigned
    Adds the contents of a register to a value and stores the result into another register
    Examplte: Addiu t0 t1 $1234
    Adds 1234 to the contents of t1 and stores the result into t0

    Lw - Load Word
    Loads up to 32 Bits into a register
    Example:
    Lui t0 $1234
    Lw t1 $5678(t0)
    Loads 12345678 into t0, they (t0) says to load the contents of t0 also

    Sw - Store Word
    Stores the contents of a register into a offset, or address
    Example:
    Lui t0 $1234
    Lw t0 $5678(t0)
    Lui t1 $1337
    Sw t0 $1337(t1)
    Stores the value 12345678 into the address 13371337

    Nop - No Operation
    Kills space, this is needed after a jump.
    Example: Nop

    J - Jump
    Jumps to a address
    Example: J $08801234
    Jumps to the address 00001234

    Jr ra - Jump register Return Address
    Returns the address's values back to there original state, turning routines off.
    Example: Jr ra

    Bne - Branch If Not Equal
    Jumps to the target address if two registers are not equal
    Example: Bne t0 t1 $08801234
    Jumps to the address 00001234 if t0 doesn't equal t1

    Beq - Branch If Equal
    Jumps to the target address if two registers are equal
    Example: Beq t0 t1 $08801234
    Jumps to the address 00001234 if t0 doesn't equal t1
    And please note the the register "zero" always holds the value 0.

    So here is the tempalte made by Sly XRoss:


    Lui t0 $XXXX
    Lui t1 $XXXX
    Lw t1 $XXXX(t1)
    Addiu t2 zero $XXXX
    Addiu t3 zero $XXXX
    Lui t4 $XXXX
    Addiu t5 t4 $XXXX
    Lui t6 $XXXX
    Addiu t6 t6 $XXXX
    Bne t1 t2 $XXXXXXXX
    Nop
    Sw t5 $XXXX(t0)
    Bne t1 t3 $XXXXXXXX
    Nop
    Sw t6 $XXXX(t0)
    Jr ra
    All the X's are things you are supposed to fill in, so here is how the joker works:


    Lui t0 $Loads the first 16 Bits of are Code address +0880 into t0, Negative Rule
    Lui t1 $Loads the first 16 Bits of are Controller address +0880 into t1
    Lw t1 $Loads the last 16 Bits of are controller address into t1(t1)
    Addiu t2 zero $Adds the button to turn your hack on to zero and stores the result into t2
    Addiu t3 zero $Adds the button to turn your hack off to zero and stores the result inot t3
    Lui t4 $Loads the first 16 Bits are hacked value into t4, Negative Rule
    Addiu t5 t4 $Adds the last 16 Bits of are hacked value to the contents of t4 and stores the result into t5
    Lui t6 $Loads the first 16 Bits of are default value into t6, Negative Rule
    Addiu t6 t6 $Adds the last 16 Bits of are defualt value to the contents of t6 and stores the result into t6
    Bne t1 t2 $Branches to the next bne, so if t1 doesn't equal t2 it jumps to the next bne
    Nop
    Sw t5 $Stores the contents of t5 to the last 16 Bits of the Code address(t0)
    Bne t1 t3 $Branches to the jr ra, so if t1 doesn't equal t3 it jumps to the jr ra
    Nop
    sw t6 $Stores the contents of t6 to the last 16 Bits of the Code address(t0)
    Jr ra
    J $Jumps to the start of are routine, this is what keeps are subroutine on after the jr ra has taken place
    So some people might not get that that well, all I can say to those people is read this more and try and understand it the best you

    can, here is some information on what is going on:


    Lui t0 $XXXX
    This makes t0 now hold the first 16 Bits of are Code address +0880

    Lui t1 $XXXX
    This makes t1 now hold the first 16 Bits of are Controller address +0880

    Lw t1 $XXXX(t1)
    This makes t1 now hold the full Controller address

    Addiu t2 zero $XXXX
    This makes t2 hold the button value to turn your hack on

    Addiu t3 zero $XXXX
    This makes t3 hold the button value to turn your hack off

    Lui t4 $XXXX
    This makes t4 hold the first 16 Bits of are hacked value

    Addiu t5 t4 $XXXX
    This makes t5 hold the full hacked value

    Lui t6 $XXXX
    This makes t6 hold the first 16 Bits of are default value

    Addiu t6 t6 $XXXX
    This makes t6 hold the full default value

    Bne t1 t2 $XXXXXXXX
    This is here so if the Controller Address doesn't equal the button to turn are hack on it jumps to the next bne

    Nop
    This is needed after a jump, like bne

    Sw t5 $XXXX(t0)
    This stores the contents of t5 to the second half of the code address and to the contents of (t0) Which is the first half of the code

    address. So if the bne t1 t2 doesn't jump the routine will read this and it will change the current value of the address to the

    hacked value, but if the branch does jump it will skip this part.

    Bne t1 t3 $XXXXXXXX
    If the first bne does jump it will go here, if the button you said to use to turn off are hack it will jump to the jr ra which will

    end are routine

    Nop
    This is needed after a jump

    Sw t6 $XXXX(t0)
    Stores the contents of t6 to the second half of the code address and to the contents of (t0) which is the first half of the code

    address. This will turn are hack off.

    Jr ra
    This returns the address's values back to there default values making are joker turn off

    J $XXXXXXXX
    This is are hook, it's used to jump back to the top of are joker, keeping are joker on (Read on the Jr ra to know why it was "off")

    and able to turn are hack on or off at any time.
    I hope this helps any one who needed it

  2. #2
    How Jokering Works

    User Info Menu

    Re: How Jokering Works

    Do you know how to incorporate the command "or" into making a joker routine?

  3. #3
    How Jokering Works

    User Info Menu

    Re: How Jokering Works

    Quote Originally Posted by 1st-Hokage View Post
    Do you know how to incorporate the command "or" into making a joker routine?
    Btw I made this a long time ago when I didn't know anything, and do you mean like this C++ code:

    Code:
    if (controllerAddresss == L || controllerAddress == R)
    {
    some code;
    }
    ? If so no, but I was wondering.

    If you have an idea on a PSP related program that is ran on Windows PM me with some information on your idea please.

  4. #4
    How Jokering Works

    User Info Menu

    Re: How Jokering Works

    Yea but I just wanted to know if you could do it in mips. Not that it really matters but I was just using it to learn some new commands.

    I am using a joker addy from ftb3 but my joker routine is different from the rest of the jokers that you see today. It maybe to small to read but hopefully you get it. If not then just download it or I can explain what I did.

  5. #5
    How Jokering Works

    User Info Menu

    Re: How Jokering Works

    I figured out a way but it doesn't use the or/ori command:

    Code:
    lui t0, $Upper controller
    lh t0, $Lower controller(t0)
    addi t1, zero, $Button value one
    addi t2, zero, $Button value two
    bne t1, t0, $To next bne
    nop
    /* Make code activate */
    bne t2, t0, $To jr ra
    nop
    /* Make code activate */
    jr ra
    nop
    Basically like this in C++:

    Code:
    if (controllerAddress == L)
    {
    0xADDRESS 0xVALUE;
    }
    else if (controllerAddress == R)
    {
    0xADDRESS 0xVALUE;
    }
    Performs two checks to activate the code.

    If you have an idea on a PSP related program that is ran on Windows PM me with some information on your idea please.

  6. #6
    How Jokering Works

    User Info Menu

    Re: How Jokering Works

    Quote Originally Posted by TheEliteOne View Post
    I figured out a way but it doesn't use the or/ori command:

    Code:
    lui t0, $Upper controller
    lh t0, $Lower controller(t0)
    addi t1, zero, $Button value one
    addi t2, zero, $Button value two
    bne t1, t0, $To next bne
    nop
    /* Make code activate */
    bne t2, t0, $To jr ra
    nop
    /* Make code activate */
    jr ra
    nop
    Basically like this in C++:

    Code:
    if (controllerAddress == L)
    {
    0xADDRESS 0xVALUE;
    }
    else if (controllerAddress == R)
    {
    0xADDRESS 0xVALUE;
    }
    Performs two checks to activate the code.
    Yea but I know you already know how todo that but i wanted to know if you could use the command "or" in your routine....

  7. #7
    How Jokering Works

    User Info Menu

    Re: How Jokering Works

    Quote Originally Posted by 1st-Hokage View Post
    Yea but I know you already know how todo that but i wanted to know if you could use the command "or" in your routine....
    I know how to, but don't think I can in jokering.

    If you have an idea on a PSP related program that is ran on Windows PM me with some information on your idea please.

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •