When you are playing a game, you will have lives, energy, money, ammo, ...
If you die you will lose a live, so the number of lives will decrease.
The Playstation has to remember all these values, so it uses it's memory to
remember them.
The memory used for storing these values is 0x00000000 - 0x00200000.
With the Xplorer cartridge you can force certain memory locations to
contain another value.
That way you can let the game think you have more lives, more energy,....

All numbers starting with "0x" are hexadecimal. In case you don't know what
hexadecimal is : I am not going to explain it.
ou can use the Windows calculator or the XLink software to convert hex to
dec & dec to hex
Example :
- 0x000A = 10
- 0x000D = 13
- 0x000F = 15
- 0x0FCD = 4045
- 0x6F8B = 28555
All values are stored backwards in the PSX memory (0x46F8B is stored as "8B
6F 04").

Make sure you have connected the Xplorer to your PC, put a disc in your
PSX, turn on the Xplorer, turn on the PSX, start the XLink software and
press "START" on your controller.

Example 1 : Making an "Infinite Lives" code
1. Start the "Game Trainer".
2. Press "V" and enter the current amount of lives. During a search, the
game is frozen until the search is completed.
3. Now you have to change the number of lives in the game, so lose a live
or win a live.
4. Press "V" again and enter the current amount of lives. The Game Trainer
compares the memory locations from the previous search with the new value.
If there are not too many possible results, they will be shown. After each
number, there is something like "80xxxxxx" or "30xxxxxx". The "xxxxxx" is a
memory location which contained the values you were searching for. The "80"
and "30" will be explained later.
5. Repeat steps 3 & 4 until you get as few as possible results. If you are
lucky, you'll get only get 1 result.
6. If you have more than 1 result, then you'll have to certify then
manually. What you have to do is start the "Memory Editor", go to the
memory location for the code you want to check (or press "W" in the Game
Trainer menu), and change the value. Look at the game and see if the number
of lives are changed. If it's still the same, then check the next result
until you find the right memory location for the lives.
7. Now you know the memory location where the lives are stored, but you
need to make a code for the Xplorer. The 2 basic codes are those starting
with a "3" or an "8".

Example 2 : Assigning a button to a code
1. Sometimes you want a code only to activate when you press a button,
that's why there are "7" and "9" codes (explained later).
2. If you press a button, a certain memory location will change accordingly
to the button you pressed.
3. To find this memory location, you can use the "Joypad Trainer".
4. Look up the value for the button(s) that need to be pressed for your
code to activate
5. Make a "skip-if-false" code with the memory location for the joypad you
found with the "Joypad Trainer".

Example 3: Making a code to unlock hidden cars
This example can also be used for characters/tracks/....
How does the game know which cars are unlocked ?
The easiest way is by using 1 bit or 1 byte per car.
Normally you'll get an extra car by winning a race, using a specific word
for your name, pressing a combination of buttons, ...
Let's take a race game with 6 hidden cars as an example.
There are 6 tracks and by winning a race, you can unlock an extra car

a) 1 byte / car
When you start a new game, the following bytes are set to "00".
0x012313 ?? ?? ?? ?? 00 00 00 00 00 00 ?? ?? ?? ?? ?? ??
After winning a race you'll get an extra car, and the appropriate byte is
set to "01".
0x012313 ?? ?? ?? ?? 00 01 00 00 00 00 ?? ?? ?? ?? ?? ??

b) 1 bit / car
When you start a new game, the following byte is set to "00".
0x012313 ?? ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
After winning a race you'll get an extra car, and the appropriate bit is
set to "01".
0x012313 ?? ?? ?? ?? 08 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

After finding the right address, you can experiment by changing these
bytes.
Some games also use this method to unlock cars which are always visible
from the beginning of the game.


Different Codes :

3txxxxxx aayy
Store value yy (byte) at memory address xxxxxx. Value aa is not used.

8txxxxxx yyyy
Store value yyyy (word) at address xxxxxx. You may only use even addresses.

7txxxxxx yyyy (skip-if-false code)
<another code>
Skips the following code if the value at address xxxxxx is not equal to
yyyy. You can only check even address, and you can only check for 16-bit
values (word). When you know the address for the joypad, you can make codes
which are activated when you press certain buttons.

9txxxxxx yyyy (skip-if-true code)
<another code>
Opposite of the "skip-if-false" code.

5txxxxxx yyyy (string code)
<sequence of bytes>
Writes the yyyy bytes after this code to address xxxxxx.

Examples :

301D0FD4 0023
0x1D0FD4 ?? ?? ?? ?? 23 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

3001000F 006C
0x010000 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 6C

801D0FD4 D923
0x1D0FD0 ?? ?? ?? ?? 23 D9 ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

8009442E 978C
0x094420 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 8C 97

80105103 978C
This code is not working properly, the address is not even

70048902 4356
30100320 001F
If
0x048900 ?? ?? 56 43 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
Then
0x100320 1F ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

70048902 4356
70080F42 643D
30100320 001F
If
0x048900 ?? ?? 56 43 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
And
0x080F42 ?? ?? 3D 64 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
Then
0x100320 1F ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

90048902 4356
30100320 001F
If not
0x048900 ?? ?? 56 43 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
Then
0x100320 1F ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

50012349 000D
637DF290 90E4
897C098A 08FC
37000000 0000
0x012340 ?? ?? ?? ?? ?? ?? ?? ?? ?? 63 7D F2 90 90 E4 89
0x012350 7C 09 8A 08 FC 37 ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
