Ich über gerade ein Rom zu erweitern, damit mehr Text reinpasst. Ich habe zum üben Chrono Trigger genommen, da bei diesem Rom ja keine Probleme mit den normalen Pointern sind. Also ich nehme den Textblock, der sich unter 001EE500 befindet und weiß ich nicht wie lang geht (so lange bis eine kurze Lücke da ist). Dann erweitere ich das Rom und teste ob es noch klappt. Das geht. Dann nehme ich diesen oben genannten Textblock und füge den unter 0041E500 wieder ein, da das Spiel nur 2 Byte Pointer benutzt, und somit die Textpointer direkt richtig sind. Ich habe dann auch mit der Pointer auf... anzeige von SnesEdit getestet. Geht.
Nun kommt ja der Teil an dem ich dem Rom sagen muss, das er die neue Stelle nehmen muss. Deswegen rechne ich von 001EE500 den 3 Byte Pointer aus (ist ein High Rom):
1EE500
- 200
-------
1EE300
+C00000
--------
DEE300
Dann mach ich das selbe mit der neuen Stelle(0041E500):
41E500
- 200
-------
41E300
+C00000
-------
01E300
Wobei beim zweiten das ganze ja "überläuft".
So. Jetzt suche ich nach dem ersten (DEE300) im ganzen Rom, und finde auch eine Stelle. Eigentlich müsste die das ja sein, denn es kann ja kein zufall sein das ausgerechnet das einmal vorkommt. Dann änder ich diese Stelle aber in 01E300 und starte das Rom. Dann geh ich an die Stelle wo der Text aus diesem Block vorkommt. Ok. Der Text ist normal. Muss er ja auch. Aber dann änder ich aus dem neuen Block eine Stelle, und geh zu dieser Stelle im Spiel, und der zeigt trotzdem den normalen Text.
Habe ich irgendetwas vergessen oder so? Ich hoffe jemand kann mir helfen.
ROm vergrössern Problem
Moderator: DarkZero
-
LavosSpawn
- Beiträge: 110
- Registriert: Mo Nov 29, 1999 1:01 am
ROm vergrössern Problem
Du hast den 24 Bit Zeiger falsch berechnet.
Erstens bist du wahrscheinlich von der falschen Adresse ausgegangen - ich denke, der 24 Bit Zeiger zeit auf die Tabelle mit den 16 Bit Zeigern und nicht auf den Text und zweitens werden die Werte als Little Endian abgelegt, das heißt, dass du die Byte umdrehen mußt.
Im Falle deiner Rechnung (bei der ich mir aber nicht sicher bin, ob sie richtig ist, aus zuvor genanntem Grunde) mußt du also nicht nach DEE300 suchen, sondern nach 00E3DE.
Ausserdem gibt es diese Zufälle sehrwohl, wie dein Fall ja auch beweist.
Und dass das Spiel immer noch den alten Text angezeigt hat, liegt einfach daran, dass es noch den alten Block benutzt hat und nicht den neuen, an der Position, an die du den Block kopiert hast. Eben wegen dieser falschen Zeiger.
Cya!
LavosSpawn.
P.S.: Was den Zufall angeht... rein stochastisch gesehen, müßte jeder drei-Byte Wert mit einer Wahrscheinlichkeit von ¼ im Rom vorkommen... Also stehen die Chancen für so einen Zufall gar nicht schlecht.
[ 16. August 2001: Beitrag editiert von: LavosSpawn ]
Erstens bist du wahrscheinlich von der falschen Adresse ausgegangen - ich denke, der 24 Bit Zeiger zeit auf die Tabelle mit den 16 Bit Zeigern und nicht auf den Text und zweitens werden die Werte als Little Endian abgelegt, das heißt, dass du die Byte umdrehen mußt.
Im Falle deiner Rechnung (bei der ich mir aber nicht sicher bin, ob sie richtig ist, aus zuvor genanntem Grunde) mußt du also nicht nach DEE300 suchen, sondern nach 00E3DE.
Ausserdem gibt es diese Zufälle sehrwohl, wie dein Fall ja auch beweist.
Und dass das Spiel immer noch den alten Text angezeigt hat, liegt einfach daran, dass es noch den alten Block benutzt hat und nicht den neuen, an der Position, an die du den Block kopiert hast. Eben wegen dieser falschen Zeiger.
Cya!
LavosSpawn.
P.S.: Was den Zufall angeht... rein stochastisch gesehen, müßte jeder drei-Byte Wert mit einer Wahrscheinlichkeit von ¼ im Rom vorkommen... Also stehen die Chancen für so einen Zufall gar nicht schlecht.
[ 16. August 2001: Beitrag editiert von: LavosSpawn ]
ROm vergrössern Problem
Also erstmal vielen Dank für die hilfe. Dann: Ich habe auf die 2 Byte Pointer Tabelle berechnet und nicht auf den Text. Mein Fehler lag warscheinlich daran, das ich so blöd war den Pointer nicht umzudrehen. Das habe ich jetzt mal gemacht (00E3DE) und dann fand ich 33 Stellen im Rom. Die muss ich morgen mal alle ausprobieren.
-
LavosSpawn
- Beiträge: 110
- Registriert: Mo Nov 29, 1999 1:01 am
ROm vergrössern Problem
Die mußt du nicht alle ausprobieren...
Chrono Trigger hat ja mehrere 16-Bit Zeiger-Tabellen, die auf Text zeigen.
Diese 24-Bit Zeiger müßten wieder eine Tabelle formen, wobei jeder davon auf eine der 16-Bit Zeiger Tabellen zeigt.
Du mußt einfach nur gucken, bei welchem deiner 33 Resultate andere 24-Bit Zeiger auf andere 16-Bit Zeiger-Tabellen darum herum liegen.
Anmerkung: Es kann sein, dass die 24 Bit Zeiger als 32 Bit gespeichert sind. Dann ist das eine Byte, das eigentlich überflüssig ist, mit 'ner Null gefüllt oder so ähnlich. Mußt du mal gucken..
Chrono Trigger hat ja mehrere 16-Bit Zeiger-Tabellen, die auf Text zeigen.
Diese 24-Bit Zeiger müßten wieder eine Tabelle formen, wobei jeder davon auf eine der 16-Bit Zeiger Tabellen zeigt.
Du mußt einfach nur gucken, bei welchem deiner 33 Resultate andere 24-Bit Zeiger auf andere 16-Bit Zeiger-Tabellen darum herum liegen.
Anmerkung: Es kann sein, dass die 24 Bit Zeiger als 32 Bit gespeichert sind. Dann ist das eine Byte, das eigentlich überflüssig ist, mit 'ner Null gefüllt oder so ähnlich. Mußt du mal gucken..
ROm vergrössern Problem
Hm. OK. DAnke für den Tip
Edit: Das ist jetzt irgendwie komisch. Ich habe jetzt mal zum Spaß alle 00E3DE Werte mit 00E301 überschrieben und danach das Rom gestartet (zum Glück ist es nicht kaputt). Dann bin ich zu dieser Stelle hingegangen wo eigentlich was anderes stehen sollte, und da stand das normale.
[ 17. August 2001: Beitrag editiert von: SvenRech ]
Edit: Das ist jetzt irgendwie komisch. Ich habe jetzt mal zum Spaß alle 00E3DE Werte mit 00E301 überschrieben und danach das Rom gestartet (zum Glück ist es nicht kaputt). Dann bin ich zu dieser Stelle hingegangen wo eigentlich was anderes stehen sollte, und da stand das normale.
[ 17. August 2001: Beitrag editiert von: SvenRech ]