Die Verwendung des "Zero Register"
==================================

Das Zero Register ist ein kurzer und einfacher Weg, um einen Wert auf Null zu setzen.
Übliche Anwendungen wären "Sudden Death", "Immer guter Grip",
"Immer Erster" (falls Position 1 als Null gezählt wird) oder PALPAR2.


Ein Beispiel für "Immer Erster":
--------------------------------

Das gewählte Beispiel ist "4X4 World Trophy PAL".
Glücklicherweise zählt das Programm so: 1. Position=$00, 2. Position=$01 etc.
Suche die Positions-Adresse mit dem XLINK Trainer und gebe die Adresse in den Breakpoint Editor ein.
Mache einen "Break On Write" und "Jump PC".
Du kommst zu dieser Adresse:

80023084: a0510242 sb $s1,0x0242($v0)

Vor dem Breakpoint ist ein komplexer Algorithmus, der die Rennposition ermittelt.
Das Ergebnis wird im Register "$S1" gespeichert.
Schau den rot gefärbten Hex-Wert an. Das ist das Resultat von:
Linkes Register + $20 * rechtes Register.
Die Werte für die Register kannst du der untenstehenden Tabelle entnehmen.
Wir wollen nun das Register $S1 durch das Zero-Register $ZR ersetzen.
Wir berechnen: $ZR + $20 * $V0 = $40.
Nun sieht die Disassembly wie folgt aus:

80023084: a0400242 sb $zr,0x0242($v0)

Das ergibt den Xploder Code:

"4X4 World Trophy PAL"
Immer Erster
$30023086 0040

Einen "Sudden Death" oder "Immer guter Grip" Code kann man genauso machen.


Ein Beispiel für PALPAR2 alias GetVideoMode()
---------------------------------------------

Nehmen wir wieder "4X4 World Trophy PAL".

Führe den Befehl PALPAR2 SLES_020.17 aus.
PALPAR2 schlägt folgenden CAETLA Code vor:
900649E8 24020000

In Xploder Notation:
$500649E8 0004
$00000224 C0DE

Schauen wir in die Disassembly:

800649E4: 3C028008 LUI $v0,0x8008
800649E8: 8C42C284 LW $v0,0x3D7C($v0)
; 2+2*$20=$42

Wir wollen:

800649E8: 8C40C284 LW $zr,0x3D7C($v0)

Das ergibt den Xploder Code:

"4X4 World Trophy PAL"
PAL2NTSC
$300649EA 0040

============================================================================
HEXCODES & REGISTER

00 ZR
01 AT
02 V0
03 V1
04 A0
05 A1
06 A2
07 A3
08 T0
09 T1
0A T2
0B T3
0C T4
0D T5
0E T6
0F T7
10 S0
11 S1
12 S2
13 S3
14 S4
15 S5
16 S6
17 S7
18 T8
19 T9
1A K0
1B K1
1C GP
1D SP
1E S8
1F RA

Dieses FAQ wurde geschrieben von Nachbrenner