Ocarina of Time - Debug Code/de
Video Gamer X von The Oddesy of Hyrule hat den Debug Code im Mai 1999 veröffentlicht.
Contents |
Anleitung
- Bringe durch Benutzen des Crooked Cartridge-Tricks oder anderen Methoden (siehe Sonstige Pannen) das Spiel zum Absturz.
- Warte ein paar Sekunden bis ein schmaler, gelber Streifen am linken oberen Rand des Bildschirms zu erkennen ist. (Sollte dies nicht der Fall sein, versuche es nocheinmal oder lass das Spiel durch ein andere Methode abstürzen.)
- Gib nun den Debug Code ein:
- L + R + Z
- Steuerkreuz RAUF + C-RUNTER
- C-RAUF + Steuerkreuz RUNTER
- Steuerkreuz LINKS + C-LINKS
- C-RECHTS + Steuerkreuz RECHTS
- A + B + Start
Der Debug Screen wird erst erscheinen, wenn du alle Tasten in der richtigen Reihenfolge eingegeben hast. (Du musst die Kombination auch relativ schnell eingeben.) Z.B.: Im ersten Schritt musst du 'L' gedrückt halten. Während du 'L' gedürckt hältst, drücke 'R' und lasse diese Taste nicht los. Schlussendlich drücke auch 'Z' während du die anderen beiden Tasten gedrückt hältst.
Aufgrund von Unterschieden zwischen der N64- und der GCN-Version, wird der Debug Code für die GCN-Version oder Master Quest von OoT nicht funktionieren.
Debug Code Informationen
Und jetzt eine Interpretation des Debug Bildschirmes, geschildert von dvdmth.
Der Registerinformationsbildschirm
OoT und MM benützen denselben ersten Bildschirm. Dieser ist der wichtigste, weil er Auskunft über die generellen Informationen des Status des Systems am Zeitpunkt des Absturzes gibt. Die meisten (wenn nicht alle) Informationen kommen vom Register. Sie kommen entweder vom System Control Prozessor (oben), der CPU oder vom Floating-Point Unit (unten).
In der oberen linken Ecke befindet sich die ID des fehlerhaften Threads. Oft werden verschiedene Teile des Codes von der CPU benützt, unabhängig davon, welcher Teil des Codes ("Thread" genannt) zum Zeitpunkt des Absturzes angezeigt wurde. Diese Nummer ist in der Regel 4 (was dem Anschein nach als nicht identifizierter Thread anzeigt wird). Ich bin nicht sicher, wo diese Nummer gespeichert ist, vielleicht in einem Register oder irgendwo anders.
Der obere Bildschirmrand zeigt den Typ der Ausnahme, welche die Ursache für den Absturz ist. Jede Ausnahme hat eine zugeteilte Nummer zwischen 0 und 31. Diese werden benützt, um herauszufinden, was genau passiert. Beachte, dass nicht alle Ausnahmen einen Absturz hervorrufen. Ausnahmen sind also ein normaler Teil des Lebens des Systems. Ausnahmen, die den Absturz verursachen, werden "Fatale Ausnahmen" (für offensichtliche Gründe) genannt. Es ist keine fatale Ausnahme, solange der Debugger nicht aufgerufen wird. (Während eine Ausnahme manchmal einen Prozess zum Absturz bringen kann und eine andere unberührt lässt, kann eine andere Ausnahme alles zum Stillstand bringen. Dies macht sich dadurch bemerkbar, dass du noch immer die Hintergrundmusik des Spieles nach einem Absturz hören kannst. In anderen Fällen kannst du sie nicht hören.)
Des weiteren zeigt der Debugger die Werte des dritten Registers des System Control Prozessors (ein Coprozessor, welcher das System verfolgt und grundlegende Systemaufgaben durchführt). Es gibt (mindestens) 32 Register auf diesem Prozessor, aber nur drei davon sind wichtig.
- Exception Program Counter (EPC) - Dies ist ein Zeiger auf die Anweisung, die den Absturz verursacht. (Technisch gesehen speichert der EPC die Werte, welche auf dem Program Counter (PC) zum Zeitpunkt des Absturzes gesetzt waren. Der PC zeigt immer auf die momentan ausgeführte Anweisung.)
- Status Register (SR) - Dieses speichert den Status des Systems, einschließlich die verfügbaren Coprozessoren und ob das System z.B. im 32- oder 64-bit-Modus betrieben wurde.
- Bad Virtual Address (VA) - Dieser Abschnitt zeigt die Speicheradressen, auf welche das Programm zuzugreifen versuchte und daran gescheiert ist (in der Annahme, der Absturz ist aufgrund eines Speicherfehlers aufgetreten). Auf dem N64 variieren die Wertebereiche von $80000000-807FFFFF (mit dem Expansion Pak). Alles außerhalb dieses Bereiches ist schlecht.
Unter diesen drei Registern zeigt der Debugger 30 von insgesamt 35 Registern der CPU. Einige Register (wie z.B. der Stack Pointer (SP)) werden vom Operating System genutzt. Andere werden hingegen vom Programm genutzt. Die Idee ist, die wichtigsten Referenzdaten auf ein Register zu bringen, seit man auf Register mit hoher Geschwindigkeit zugreifen kann (verglichen mit RAM).
Die einzigen zwei Register, die ich in dieser Gruppe identifizieren kann, sind die Stack Pointer (SP), welche auf den Stack zeigen (ein Abschnitt eines Speichers, auf welchem temoräre Daten abgespeichert sind, wie z.B. lokale Funktionsvariablen), und das "LO"-Register (welches in Multiplikationen und Divisionen zur Anwendung kommt).
Schließlich hat die "Floating-Point Unit" (FPU) den letzten Anteil der Register. Das erste gezeigte Register ist das Floating-Point Control/Status Register (FPCSR), welches den Status der FPU verfolgt, sowie alle auftretenden Fehler bei Berechnungen bereitstellt. (Die neuesten Fehler werden auf der rechten Seite der Werte angezeigt, falls diese Funktion andwendbar ist. Beachte, dass dieser Fehler NUR wichtig ist, wenn eine Floating-Point Ausnahme auftritt.)
Die verbleibenden Werte zeigen diverse Floating-Point Nummern, welche gerade auf der FPU abgespeichert sind. Floating-Point Nummern sind Werte, welche einen fraktionierten Teil besitzen, d.h., dass sie einen Dezimalanteil besitzen. Diese werden generell in wissenschatlicher Notierung anzeigt (anstatt der gewöhnlichen Hexadezimalzahlen), es sei denn, die Werte ist vom Typ Integer. Nur die Hälfte der Register werden anzeigt, da diese die einzigen sind, auf denen Daten (aus technischen Gründen) gespeichert wurden. Es liegt am Programm, wie es die Register zu benützen hat.
OoT Debug Screens
Zelda OoTs Debugger hat mehrere zusätzlich aufgelistete Bildschirmanzeigenen abseits des Standardbildschirmes. Die meisten davon sind jedoch nicht hilfreich.
Segment Information - Ich weiß wirklich nicht, worum es in diesem Teil handelt. Vielleicht hat es mit der ROM selbst zu tun oder wie Teile des Codes dividiert wird (oder anderes).
ROM Debug - Dieser Bildschirm existiert in den neuesten Versionen von OoT nicht, da alle Werte Null gesetzt wurden. Während dem Testen könnten die Entwickler möglicherweise diese Werte gesetzt haben, um den Inhalt bestimmter Variablen während des Spiels wiederzugeben. Auf diese Weise waren sie über diese Variablen in der Lage herauszufinden, was während dem Programmabsturz falsch gelaufen sein könnte.
Stack Dump - (BEACHTE: Ich habe darauf geachtet, dass Wort "trace" nicht wie der Debug Screen zu benützen, da es mehr Dump als Trace ist.) Dieser Bildschirm zeigt den Inhalt des Stacks, ein Abschnitt des Speichers, auf welchem die temporären Daten abgespeichert sind. Die linke Spalte zeigt die Adresse im Speicher und die anderen Spalten zeigen, was eigentlich da ist. (Diejenigen, die schon einmal einen Hex-Editor benützt haben, wissen, wie das aussieht.) Desto weiter runter du gehst, desto älter sind die Informationen. (Der Stack Pointer wird immer reduziert, wenn man Sachen hinzufügt, wird aber wieder mehr, wenn man diese Sachen wieder wegnimmt).
PC Dump - Dieser Bildschirm zeigt den Code, welcher zur Zeit des Absturzes ausgeführt wurde. Irgendwo am Bildschirm ist die Anweisung, welche gescheitert ist (und auf welche durch den Exception Program Counter gezeigt wird). Dieser Bildschirm wird genauso wie der vorherige anzeigt.
Actor List - Dies scheint die Liste der "Actors" (dt. Aktoren) zu sein, die momentam im Speicher vorhanden sind. Was genau zu einem "Actor" zählt, ist von Spiel zu Spiel verschieden. Manchmal erscheint ein PC-Wert neben der Liste (höchstwahrscheinlich bezieht es sich auf den Teil des Codes, dass den "Actor" bedient oder der Teil des Codes, der es installiert hat.)
Versionsinformation - Schlussendlich erscheint der berühmteste Bildschirm des OoT Debuggers. Die "I LOVE YOU"-Nachricht ist hier zu sehen, gefolgt von zahlreichen Nullen. Der Tag der Kompilierung ist auch auf dem Bildschirm abgebildet und hilft beim Bestimmen der ROM-Version, die du besitzt. Soweit ich weiß, sind folgende Daten möglich:
- 98-10-21 04:56:31 = Nordamerika (NTSC) 1.0
- 98-10-26 10:58:45 = Nordamerika (NTSC) 1.1
- 98-11-10 14:34:22 = International (PAL)
- 98-11-12 18:17:03 = Nordamerika (NTSC) 1.2
- 98-11-18 17:36:49 = International (PAL)