Breakpoint Codes

Dies ist eine freie Übersetzung des Originals mit freundlicher Genehmigung von GuNdj.
Ich darf und werde diesen FAQ nach eigenem Ermessen verbessern und erweitern.
Falls jemand noch andere Tricks zum Breakpoint Editor hat, her damit!


Dies ist das Breakpoint Editor Fenster, sieh es dir genau an und dann geht es los.



OK, das wichtigste, was du über den Breakpoint Editor wissen mußt, ist,
daß er nur mit V1 und V2 ROMs zusammenarbeitet; aber nicht mit V3 ROMs.
Wenn du ein V3 installiert hast, downgrade auf V2.
Wenn du fertig bist, kannst du wieder auf V3 upgraden.

Anmerkung des Übersetzers:
Ich vermute, daß im V3 ROM der Breakpoint Support fehlt, damit sich der
Xploder vor den neuen PAL Spielen mit Antimodulschutz verstecken kann.
Falls du ein solches Spiel mit einem V2 ROM bearbeiten willst, benutze
einen "Xploder V2 Check" Code, der dem geschützten Spiel das Breakpoint-
Schnüffeln austreibt. Diese Codes funktionieren nur mit originalen CD-ROMs!


Ein großer Vorteil von Breakpoint Codes ist, daß sie meistens in allen
Leveln funktionieren.

Nun sollte ich wohl besser erklären, was Breakpoints überhaupt sind.
Wenn du z.B. einen Bytecode oder einen Wordcode aktivierst, schreibt dieser immer
wieder einen bestimmten Wert an die gewählte Adresse.
Trotzdem kann der Wert während des Spiels fluktuieren.
Das ist so, weil der Xploder den Wert als sogenannten "Hook" alle paar Millisekunden
schreibt.
So kann z.B. ein Gesundheitsbalken kurzfristig runter und wieder raufgehen.
Auch kannst du trotz des Codes durch einen Sturz aus großer Höhe sterben - wie z.B. in
Tomb Raider - weil der Wert direkt auf Null (oder Minus 1) gesetzt wird und Lara tötet.

Der Breakpoint für diesen Code ist der, der dem Programm sagt, daß die Gesundheit
verringert werden soll, wenn du getroffen wirst.
Wenn wir diesen Code finden und deaktivieren, sollte sich die Gesundheit nie ändern.

Nehmen wir als Beispiel "Tomb Raider Deutsch SLES00486":

Über den XLINK Trainer machen wir eine UNGLEICH Suche für den Gesundheitsbalken und
finden in Level 3:
*Das Verlorene Tal
UE Gesundheit
$80194AF6 03E8
Dieser Code hilft aber nicht gegen den Sturz aus großer Höhe.
Jetzt tritt der Breakpoint Editor in Aktion:
1.  Schreibe ins Feld Breakpoint Adresse den Gesundheitscode, also 80194AF6 
2.  Schreibe ins Feld Adresse den Wert 0FFFFFFE (Soll besser als 0FFFFFFC sein)   
3.  Belasse das Feld Break On auf WRITE, weil wir einen Code finden wollen, 
    der die Gesundheitsadresse beschreibt 
4.  Belasse das Feld Break On auf 1 (Dieser Zähler teilt XLINK mit, wie oft 
    der Code geschrieben werden soll, bevor zum Breakpoint gesprungen wird)
5.  Nun drücke OK und der mittlere Balken wird sich bewegen 
6. Nun falle von einer großen Höhe, die für Lara tödlich ist 7. Nun stoppt der mittlere Balken und in jedem Fenster wird ein Wert angezeigt 8. Betrachte den Code 80032808 links oben im Fenster PC (d.h. Program Counter) 9. Drücke den Knopf Jump PC Scrolle im Disassembler rückwärts nach 800327e8. Dort steht: 800327f8 bgtz $v1, 0x800327e8 ; doppelklicke diesen Code Nun steht dort in roter Farbe NOP (No Operation) Der Befehl bgtz ist ein Branch (Verzweigungs)Befehl, der in diesem Falle zur Todesroutine verzweigt 10. Nun stürze nochmal 11. Du wirst es überleben. 12. Merke dir diese Adresse 13. Editiere den XCHEATS.TXT: Falls du noch nie einen $00xxxxxx Code benutzt hast, dies ist der Xploder Doubleword Code. Er eignet sich hervorragend für den NOP Befehl. "Tomb Raider SLES00486" Kein Todessturz $000327e8 0000 "Tomb Raider 2 SLES00720" Kein Todessturz $0003dc60 0000 "Tomb Raider 3 V1.0 SLES01683" Kein Todessturz $0001a2c4 0000 "Tomb Raider 3 V1.1 SLES01683" Kein Todessturz $0001a484 0000
Die häufigsten Assembler Befehle, um etwas zu verringern, sind:
ADDIU 0xFFFFFFFF = addiere -1
SUB 1 = subtrahiere 1
SUBU 1 = subtrahiere 1

Ansonsten Befehle mit NOP ersetzen, die mit dem Buchstaben B wie
branch anfangen und schauen, was passiert.

Wie analysiere ich BPC Patches anderer Leute?

Da der MIPS R3000 ein 32 Bit Prozessor ist, besteht eine Adresse eigentlich aus 4 Bytes!

Man kann entweder den Wert einer arithmetischen Operation ändern, also mit 2x Null löschen
80xxxxx0 0000
80xxxxx4 0000
80xxxxx8 0000
80xxxxxc 0000

oder z.B. einen STORE Befehl mit verschiedenen LOAD Befehlen ersetzen
80xxxxx2 2400
80xxxxx6 2402
80xxxxxa 3c00
80xxxxxe 3c02

Ein BRANCH oder JUMP muß immer mit einem NOP, also 4x Null überschrieben werden,
sonst stürzt das Programm ab! (Es sei denn, man ändert bewußt die Zieladresse,
das ist aber nur was für Eingeweihte)

00xxxxx0 0000 = 80xxxxx0 0000
  80xxxxx2 0000
00xxxxx4 0000 = 80xxxxx4 0000
  80xxxxx6 0000
00xxxxx8 0000 = 80xxxxx8 0000
  80xxxxxa 0000
00xxxxxc 0000 = 80xxxxxc 0000
  80xxxxxe 0000


Dieses FAQ wurde geschrieben von Nachbrenner