alexfree
Developer
This was a project I came up with initially in 2023. I was inspired by the insane Super Mario 64 GameShark codes of all things from James S Kingdom: https://sites.google.com/site/james...s-s/super-mario-64-codes/sm64-n64-spawn-codes. This guy wrote his own new functionality complete with custom in-game HUD menus using just some very, very long GameShark codes to spawn any object anywhere in the game.
So, I had a thought, why not use GameShark codes to write a bit of a MIPS assembly binary that tells the CPU to load a soft-mod loader from a Memory Card? My first attempt at this worked. I would find some random function in the game that triggered early and jumped to a specific address. And then through trial and error, if overwriting that RAM address the function jumped to with a ton of GameShark codes didn't crash the game (keep in mind each GameShark code can write 2 bytes of the payload into a specified RAM location) the game would end up loading a soft-mod from a file on the Memory Card!
This is useful mainly for the 'GameShark Lite' and 'GameShark v3.3', the first CD based GameSharks introduced after the removal of the parallel IO port in the later SCPH-9000 series consoles. GameShark v2-v3.2 were all cartridges that plugged into that port, and included a back-door for booting backups. If you were to boot a Tonyhax International Boot CD first with said backdoor you get soft-mod level compatibility: https://github.com/alex-free/tonyhax/blob/master/boot-cd.md. Those first GameShark CDs though? No backdoor! Same with GameShark 1.x cartridges AFAIK. Funny enough, Datel brought the backdoor back in GameShark 4/5 CDs for PS1.
@MottZilla when I brought him this mentioned something similar was done for the GameCube homebrew back in the day. He explained how instead of trashily overwriting existing functions and hoping for the best, you could rewrite the actual assembly into a JumpAndLink or Jump instruction to go to an unused RAM location, and then store the entire memory card soft-mod loader there safely. So that's how GSHAX Tool v2.0+ works.
MottZilla also helped reverse engineer how the GameShark Lite CD generated save files. This GameShark version accepted save files on a standard PS1 memory card, no obscure dongle required like the GameShark v3.3 CDs. So GSHAX can ouput a GameShark Lite CD save file with the code already entered!
GSHAX Tool (Generates Codes): https://github.com/alex-free/gshax-tool
Tonyhax International GSHAX Setup: https://github.com/alex-free/tonyhax/blob/master/gameshark-code.md
Example GSHAX code for Parasite Eve USA Disc 1/Disc 2 attached. Press start after the intro FMV to boot the Tonyhax International v1.5.9 soft-mod.
So, I had a thought, why not use GameShark codes to write a bit of a MIPS assembly binary that tells the CPU to load a soft-mod loader from a Memory Card? My first attempt at this worked. I would find some random function in the game that triggered early and jumped to a specific address. And then through trial and error, if overwriting that RAM address the function jumped to with a ton of GameShark codes didn't crash the game (keep in mind each GameShark code can write 2 bytes of the payload into a specified RAM location) the game would end up loading a soft-mod from a file on the Memory Card!
This is useful mainly for the 'GameShark Lite' and 'GameShark v3.3', the first CD based GameSharks introduced after the removal of the parallel IO port in the later SCPH-9000 series consoles. GameShark v2-v3.2 were all cartridges that plugged into that port, and included a back-door for booting backups. If you were to boot a Tonyhax International Boot CD first with said backdoor you get soft-mod level compatibility: https://github.com/alex-free/tonyhax/blob/master/boot-cd.md. Those first GameShark CDs though? No backdoor! Same with GameShark 1.x cartridges AFAIK. Funny enough, Datel brought the backdoor back in GameShark 4/5 CDs for PS1.
@MottZilla when I brought him this mentioned something similar was done for the GameCube homebrew back in the day. He explained how instead of trashily overwriting existing functions and hoping for the best, you could rewrite the actual assembly into a JumpAndLink or Jump instruction to go to an unused RAM location, and then store the entire memory card soft-mod loader there safely. So that's how GSHAX Tool v2.0+ works.
MottZilla also helped reverse engineer how the GameShark Lite CD generated save files. This GameShark version accepted save files on a standard PS1 memory card, no obscure dongle required like the GameShark v3.3 CDs. So GSHAX can ouput a GameShark Lite CD save file with the code already entered!
GSHAX Tool (Generates Codes): https://github.com/alex-free/gshax-tool
Tonyhax International GSHAX Setup: https://github.com/alex-free/tonyhax/blob/master/gameshark-code.md
Example GSHAX code for Parasite Eve USA Disc 1/Disc 2 attached. Press start after the intro FMV to boot the Tonyhax International v1.5.9 soft-mod.