Disassemble Blog: Ihatovo Monogatari

Sprachbarrieren halten Dich vom Spielen Deines Herzchenspiels ab? Du willst eines Deiner Herzchenspiele Mal ganz neu erleben? Dann bist Du hier genau richtig.

Moderatoren: ikari_01, d4s, Redscorpion

Benutzeravatar
lytron
Code Bro
Code Bro
Beiträge: 2664
Registriert: 12. August 2012, 20:18
+Positive Tradingpoints+: 12 von 12
Wohnort: ハノーファー区
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von lytron » 16. Januar 2013, 05:44

kolwe-x hat geschrieben:Respekt, das Video gefällt mir. Dank dir werde ich wohl doch wieder mit Japanisch anfangen :D
Ich merke auch an allen Ecken und Enden, ohne Japanisch wird sich einem nie die Bandbreite des SNES-Mikrokosmos erschließen. ;)



Übrigens habe ich dank ChronoMoogle jetzt ein Ihatovo Monogatari in OVP.

Und in der Anleitung war ein eindeutiger Hinweis, der mir sofort eine Hilfe für die Zweitcontroller-Subroutine geboten hat...

... aber ich wollte mich absichern, ich sprach mit d4s, ich konsultierte die FullSNES-Doc von nocash...

... und als ich in die ROM schaute, sah ich DAS.
Unbenannt.jpg
Unbenannt.jpg (331.09 KiB) 3537 mal betrachtet
wiki.superfamicom.org führt diese Information, das englische Wikipedia und FullSNES nicht.
pantalytron: ルトロンはくそのディスアセンブラだよ!
Perikles hat geschrieben:Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.

Benutzeravatar
lytron
Code Bro
Code Bro
Beiträge: 2664
Registriert: 12. August 2012, 20:18
+Positive Tradingpoints+: 12 von 12
Wohnort: ハノーファー区
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von lytron » 21. Januar 2013, 09:43

Stunde 71
Disassembled: 145.121 / 1.048.576 Bytes (13,840%)
Gehört: Plaid Dragon - Dog Physics EP, Likes Lions - First the HEad, Later the Tale


Ich weiß gar nicht, ob ich das hier noch kann... :-/

~~~
Mein Anlauf vom letzten Mal ist nicht direkt mit Erfolg gekrönt, also versuche ich es wieder anders:
Ich kommentiere.
Da kommen mir die bisherigen Anläufe auch recht passabel zur Hilfe, denn mit jedem gescheiterten Versuch ist es wenigstens in groben schematischen Zügen jeweils ein bisschen verständlicher geworden.
~~~
INC (ikari_01 hat den Tag gerettet-Counter)
~~~

Stunde rum, Resümee:
Endlich geht es beim "Disassembled"-Counter aufwärts, hah!
Nicht wirklich. Ich habe ja neulich herausgefunden, dass eine der Stellen, an denen ich verzweifle, das Mouse-BIOS ist, und dieses von ASCII-Zeichenketten umrahmt ist, dass man dieses auch im Hexeditor direkt als solches erkennen kann. Diese Zeichenketten habe ich nun eingefügt und so ist diese Erhöhung zustande gekommen.

Ich sitze immer noch, wie seit den letzten zehn, gefühlten fünfzig, Stunden an der Subroutine FischAmHaken und ihren Subsubroutinen. Mittlerweile erstellt sich mir ein Bild bzw. eine Theorie. Scheinbar werden einmal viele Daten in den RAM gewuchtet, und FischAmHaken et al. dienen dazu, aus dem Datenhaufen jeweils $40-Byte-große Einzelteile daraus zu ziehen, die dann im RAM zu einer $800-Byte-großen Tilemap zusammengesetzt und hochgeladen werden.
Das könnte, wenn es stimmt, ein Fortschritt sein, andernfalls das Einschlagen eines Holzwegs. ;)
Dateianhänge
Stunde 71.rar
(142.84 KiB) 128-mal heruntergeladen
pantalytron: ルトロンはくそのディスアセンブラだよ!
Perikles hat geschrieben:Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.

Benutzeravatar
lytron
Code Bro
Code Bro
Beiträge: 2664
Registriert: 12. August 2012, 20:18
+Positive Tradingpoints+: 12 von 12
Wohnort: ハノーファー区
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von lytron » 21. Januar 2013, 16:27

Stunde 72
Disassembled: 158.717 / 1.048.576 Bytes (15,136%)
Gehört: Hiroki Kikuta - Seiken Densetsu 3 OST (ab "Damn Damn Drum")


'nother Try.

~~~
Ah-HAAAAA!
Hatte ich doch richtig in Erinnerung! Bevor FischAmHaken aufgerufen wird und bevor dafür alle Register entsprechend angepasst werden wird in einem Loop von zwei verschiedenen Stellen der ROM $2000 Byte an Daten in den RAM geladen. Ich denke, es ist an der Zeit, dass ich diese zwei mal $2000 Byte aufspüre und in die ROM integriere, nebenbei schaue, ob es wie Tilemap-Einträge aussieht, und ganz nebenbei schon wieder meinen Counter erhöhe! ^.^
~~~
Und wieder ist es so: Wenn gesagt wird, dass $2000 Bytes Daten übertragen werden, sind vielleicht gerade mehr als die Hälfte überhaupt Daten, die hierzugehören. Wahrscheinlich hat man sich das als Puffer immer größer-als-nötiger eingetragen, und am Ende nicht entsprechend angepasst. Weil es ja auch keinen Unterschied machte, da die Ladezeiten wohl gering genug waren.
~~~

Stunde rum, Resümee:
Ja, das ist echt, das ist live, sowas würde keinem Drehbuchschreiber, nech?, im Traume nicht, nein, nech?
Ich habe den Rest der Stunde damit verdaddelt, diese Datenblöcke in meine ROM zu schieben, u. a. auch, weil da einiges bei den alten Datenblöcken etwas schiefgegangen war. Und damit bin ich jetzt schon wieder eine Stunde durch. Die Zeit verpfliegt.
Ja, mit pf.
pantalytron: ルトロンはくそのディスアセンブラだよ!
Perikles hat geschrieben:Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.

Benutzeravatar
lytron
Code Bro
Code Bro
Beiträge: 2664
Registriert: 12. August 2012, 20:18
+Positive Tradingpoints+: 12 von 12
Wohnort: ハノーファー区
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von lytron » 21. Januar 2013, 17:35

Stunde 73
Disassembled: 158.717 / 1.048.576 Bytes (15,136%)
Gehört: Hiroki Kikuta - Seiken Densetsu 3 OST (ab "Delicate Affection")


'nother 'nother Try-try.

~~~
Gut, "DerGeldverbrenner" heißt jetzt "ModulateVar24" und ist damit nur bedingt selbsterklärender.
~~~
Okay, nächster Fortschritt: Es wurden, wie erwähnt, zwei Datenhaufen in den RAM geschmissen.
Genauer gesagt in $7F:1000 - $7F:2FFF und $7F:3000 - $7F:4FFF.
Dabei ist ab $3000 eine Liste, aus der ausgelesen wird, was ab $1000 genommen und für den Transfer vorbereitet werden soll.
~~~
Gerade jetzt erst wird mir bewusst:
Wenn ich $AC lade, auf 16-Bit-Akkumulator umstelle, viermal ASL mache und das Ergebnis dann in $AD (und folglich $AE) speichere...
... dann habe ich einen Byte sauber halbiert, ey.
~~~

Stunde rum, Resümee:
Es wird verständlicher. Ich verstehe es schematisch.
Es liegen besagte Daten im RAM ab $7F:1000.
FischAmHaken ruft zunächst EinsZwoDreiCeh auf. Diese Subroutine errechnet einen Wert.
Danach ruft FischAmHaken SetzMalKaffeeAuf auf, dort wird der berechnete Wert genommen, um von einer Stelle von $7F:3000 zu lesen, welche Daten von $7F:1000 nach $0D00 gespeichert werden.
Danach kopiert FischAmHaken die Daten von $0D00 wieder in den RAM ab $7F:B000 und transferiert sie in den VRAM.
Dateianhänge
Stunde 73.rar
(149.86 KiB) 109-mal heruntergeladen
pantalytron: ルトロンはくそのディスアセンブラだよ!
Perikles hat geschrieben:Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.

Benutzeravatar
lytron
Code Bro
Code Bro
Beiträge: 2664
Registriert: 12. August 2012, 20:18
+Positive Tradingpoints+: 12 von 12
Wohnort: ハノーファー区
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von lytron » 21. Januar 2013, 20:26

Stunde 74
Disassembled: 158.717 / 1.048.576 Bytes (15,136%)
Gehört: Hiroki Kikuta - Seiken Densetsu 2 OST


'nother 'nother 'nother Try-try-try.

~~~
Gut, ich gebe auf. Ich habe vieles durchschaut, aber nicht, weshalb dieser Vorgang mit all diesen Variablen derart verschachtelt ist. Vielleicht macht es irgendwann urplötzlich alles offenkundig Sinn, denn ich denke, ich werde noch oft über diese Subroutine stolpern. Ich habe eine grobe schematische Zeichnung gemacht, die den Zusammenhang der Variablen darstellt.
lastscan.jpg
lastscan.jpg (67.63 KiB) 3503 mal betrachtet
Jetzt werde ich die einzelnen Sprungmarken von ihren Fantasienamen befreien und soweit möglich selbsterklärende Titel ausgeben, und danach werde ich noch meine Erkenntnisse in einem Kommentar zu beginn von FischAmHaken kundtun. Und dann, schätze ich, wird diese Stunde auch schon rum sein.
~~~

Stunde rum, Resümee:
Endlich kann ich diese Subroutine hinter mir lassen. Endlich könnte es mal weitergehen...
... was für ein perfekter Punkt, Feierabend zu machen.
Dateianhänge
Stunde 74.rar
(150.2 KiB) 142-mal heruntergeladen
pantalytron: ルトロンはくそのディスアセンブラだよ!
Perikles hat geschrieben:Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.

Benutzeravatar
lytron
Code Bro
Code Bro
Beiträge: 2664
Registriert: 12. August 2012, 20:18
+Positive Tradingpoints+: 12 von 12
Wohnort: ハノーファー区
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von lytron » 23. Januar 2013, 21:24

Stunde 75
Disassembled: 158.916 / 1.048.576 Bytes (15,155%)
Gehört: Hiroki Kikuta - Seiken Densetsu 2 OST


Ein neuer Anlauf mit neuem Quelltext zu betrachten.

~~~
Gut, versuche ich jetzt noch einmal, die einzelnen Jumptable-Einträge der Reihe nach abzugrasen.
$10 - Hector-Logo wird geladen.
$11 - Hector-Logo bleibt onscreen ($40 Frames lang).
$12 - Hector-Logo fadeout.
$16 - Gedicht wird geladen.
$17 - Gedicht bleibt onscreen. (wird ein Button gedrückt: --> $19)
$18 - Gedicht fadeout.
$54 - Introsequenz-Daten werden übertragen.
~~~

Stunde rum, Resümee:
Ähem.
Bei Jumptable-Eintrag $54 war ich über das gestolpert, was mich die letzten Wochen hier beschäftigt gehalten hat. Das wirre ist, dass der nächste Eintrag $55 ist, und $55 gleichzusetzen ist mit $17. Das heißt, es dreht sich ab da im Kreis.
Also habe ich mir, weil mir das heute abend zu verwirrend ist, lieber Jump Table-Eintrag $19 angeschaut und habe da noch eine Subroutine gefunden, die ich noch nicht disassembled habe. Was ich heute nachgeholt habe.
Ich bin durch die Subroutine noch nicht durch und sie hantiert wieder mit mir unbekannten Variablen. Das ist alles, was ich dazu noch sagen kann.
Dateianhänge
Stunde 75.rar
(150.53 KiB) 120-mal heruntergeladen
pantalytron: ルトロンはくそのディスアセンブラだよ!
Perikles hat geschrieben:Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.

Benutzeravatar
lytron
Code Bro
Code Bro
Beiträge: 2664
Registriert: 12. August 2012, 20:18
+Positive Tradingpoints+: 12 von 12
Wohnort: ハノーファー区
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von lytron » 25. Januar 2013, 18:02

Stunde 76
Disassembled: 159.519 / 1.048.576 Bytes (15,213%)
Gehört: Hajime Mizoguchi - Precious


Schauen wir.

~~~
Stunde rum, Resümee:
Wir schauten.
Diese Fragezeichen-Subroutine habe ich fertig filetiert, sie gab jedoch nicht auf Anhieb ihr Ansinnen preis. Außerdem habe ich noch einen Loop in Jump-Table-Eintrag $19 gefunden, bei dem Grafikdaten (genauer gesagt, eine komplette CGRAM-Ladung Farben) übertragen werden. Diese Grafikdaten habe ich in meine ROM eingebaut und festgestellt, dass ich auch dort beim letzten Mal, als ich Daten in die ROM verräumte, dort einen Fehler gemacht habe. Yay.
Dateianhänge
Stunde 76.rar
(151.16 KiB) 139-mal heruntergeladen
pantalytron: ルトロンはくそのディスアセンブラだよ!
Perikles hat geschrieben:Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.

Benutzeravatar
lytron
Code Bro
Code Bro
Beiträge: 2664
Registriert: 12. August 2012, 20:18
+Positive Tradingpoints+: 12 von 12
Wohnort: ハノーファー区
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von lytron » 26. Januar 2013, 09:51

Stunde 77
Disassembled: 159.539 / 1.048.576 Bytes (15,215%)
Gehört: The Receiving End of Sirens - The Earth sings Mi Fa Mi


Nachdem meine Mentalressourcen aufgefüllt wurden (Schlaf! Schlaaaaaf!), nehme ich dieses Mal einen etwas investigativen Ansatz und prüfe zwei Theorien bzgl. des sich-in-einem-Kreis-drehenden JumpTable-Eintrags.
Theorie 1: Ich habe den falschen JumpTable-Eintrag betrachtet (wäre nicht das erste Mal).
Theorie 2: Bevor diese "Schleife" betreten wird, wird eine entsprechende Variable mit einem Wert befüllt, wodurch nicht mit jedem Durchlauf dieser Schleife komplett dasselbe getan wird.

~~~
Theorie 1 ist widerlegt.
Da die JumpTable-Einträge, und speziell die letzten, ziemlich weit auseinanderlagen, habe ich gerechnet, wo sie hinkommen müssten, und dann mit einem speziellen Befehl von WLA DX diese Einträge an eine festgesetzte Adresse in der ROM gesetzt.
Die Möglichkeit wäre gewesen, dass ich mich dort verrechnet habe. Deshalb habe ich jetzt die Zwischenräume mit Platzhaltern ausgefüllt. Allerdings: Nein, war alles richtig. Mist.
~~~
Hm. Theorie 2 ist, irgendwie, auch widerlegt, ey.
~~~
Gerade nehme ich in JumpTable-Eintrag 19 mal alle Datentransfere auseinander, um wenigstens da ein wenig weiter zu kommen. Hier begegnet mir auch die Subroutine, die ich vor ein paar Tagen auseinandergenommen habe. Die heißt zur Zeit "DieChinesischeMauer". Und scheinbar generiert die eine Tilemap im RAM. Aber für die muss ich mir eine Stunde Zeit nehmen. Gerade wollte ich etwas anderes prüfen.
scr1.jpg
scr1.jpg (138.73 KiB) 3468 mal betrachtet
Aus reinem Interesse wollte ich mal schauen, wie die Palette während der Introsequenz aussieht. Für jede Szene flippt aber die Palette, teilweise.
scr2.jpg
scr2.jpg (105.72 KiB) 3468 mal betrachtet
Wesentlich interessanter fand ich den Titlescreen. Zuerst kommt die Berglandschaft aus dem Dunkeln, danach wird der Schriftzug von komplettem Weiß in seine einzelnen Farbbestandteile "übergeblendet".
scr3.jpg
scr3.jpg (87.1 KiB) 3468 mal betrachtet
Dabei scheinen sie beim Einblenden der Landschaft aus dem Dunkeln nicht (nur?) die Bildschirmhelligkeit zu benutzen, sondern auch unterschiedliche Paletten: Palette $03 bis $08 (die unteren fünf "Background Palettes"). ERRRR. Gerade mit dem ganz wunderbaren VRAM-Viewer von NO$SNS getestet: Nope, an den Paletten ändert sich nichts. Das läuft komplett über die Bildschirmhelligkeit.
Bezüglich der Einblendung des Schriftzugs bin ich ein wenig verwundert. Ich dachte, dass sie entweder die Paletteneinträge im laufenden Betrieb beschreiben würden (so habe ich übrigens bei meiner "Mettbroetchen"-RPG-Engine das Ein- und Ausblenden besorgt), oder die Tiles bearbeiten würden (was ein Riesenaufwand wäre). Nichts von beidem. Also bleibt noch ein Geheimnis zu lüften, für später, so, ne?

Stunde rum, Resümee:
Viel Spielerei, schon ein wenig mehr herausgefunden, gute Basis für künftiges Arbeiten. Zumindest an dieser Stelle. :/
Dateianhänge
Stunde 77.rar
(151.43 KiB) 115-mal heruntergeladen
pantalytron: ルトロンはくそのディスアセンブラだよ!
Perikles hat geschrieben:Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.

Benutzeravatar
lytron
Code Bro
Code Bro
Beiträge: 2664
Registriert: 12. August 2012, 20:18
+Positive Tradingpoints+: 12 von 12
Wohnort: ハノーファー区
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von lytron » 15. Februar 2013, 20:27

No update on disassembling. Yet.

But on the OST: I finally scanned the whole thing and uploaded it at MusicBrainz. Can someone who can read Japanese give a short summary on the booklet notes? I'm really curious about what it might say.
pantalytron: ルトロンはくそのディスアセンブラだよ!
Perikles hat geschrieben:Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.

Benutzeravatar
lytron
Code Bro
Code Bro
Beiträge: 2664
Registriert: 12. August 2012, 20:18
+Positive Tradingpoints+: 12 von 12
Wohnort: ハノーファー区
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von lytron » 16. Februar 2013, 08:50

Stunde 78
Disassembled: 159.548 / 1.048.576 Bytes (15,216%)
Gehört: unununium88 - Shadowrun Revamp / Washed Out - Within and Without


Diesmal mach ich es komplett anders, nämlich so, wie es mir vor Wochen schon empfohlen wird: Ich nehme den Geiger und logge. Jetzt werde ich das mal abgleichen und hoffen, dass ich sehen kann, wie das Programm verfährt, ob es wirklich sich auf dem Jump Table in einer Endlosschleife verfängt.

~~~
Memo an mich selbst:
Der letzte Punkt vor dem großen Fragezeichen ist $00/EFEC, der erste Punkt danach $0A/9EE4.
Hm. Das ist auf der Sound-Bank.
~~~
Okay, das hilft mir nicht.
Zur Erklärung: Der Geiger-Debugger hat "disassembled mitgeschrieben", was er gemacht hat. Er hat in der Reihenfolge, in der er bestimmte Punkte des Programms absolviert hat, alles in eine Textdatei geschrieben. Dabei schreibt er nur die "erste Begegnung" auf, ansonsten würde er jeden Durchlauf einer Schleife separat erfassen, und das würde diese Datei noch mehr ins unleserliche aufblähen.
Der Teil, der hier erschienen ist, ist nur deshalb hier erschienen, weil beim wiederholten Aufruf einer bereits bekannten Funktion mal die Werte anders waren und dann eben nicht sofort gebrancht wurde, sondern noch ein nach-dem-ersten-Branchen-erfolgender Teil ausgeführt wurde. Das hilft nicht weiter, ich würde gern zumindest wissen, bei welcher Subroutine er dann weitermacht, um am Ende mir zusammenreimen zu können, weshalb das funktioniert.
~~~
Und die Lösung lautet: EDF0.
~~~
BÄÄÄM! Und da steht "F0 ED" in der Jump Table! Bei $43A! BÄÄÄM!
~~~
Öh...
die Differenz von $43A und $38E, dem Anfang der Jumptable, sind $AC. Geteilt durch zwei ist das $56. Häää?
Also:
Jump-Table-Eintrag $54 ist noch okay. Da wird hochgezählt um eins, das heißt, Eintrag $55 wird aufgerufen. Eintrag $55 ist aber vom Inhalt identisch mit $17. Also muss ich noch einmal in Eintrag $17 gucken, ob dort ein fester Wert in den Jump-Table-Pointer eingetragen wird, oder einfach nur inkrementiert wird.
Zu meiner Verteidigung: Anfangs hatte ich mir wirklich sowas gedacht, weil es ideal ist, so Subroutinen recyclen zu können. Aber leider hatte ich da dann in Eintrag $17 gesehen (geglaubt), dass dort ein fester Eintrag gemacht wird. Ich... muss nachschauen...
~~~
Um es ein- für allemal deutlich zu machen:
Der Split, ob Button pressed oder nicht, findet in JT17 statt. JT18 ist, wenn nichts gedrückt wird, JT19 ist, wenn gedrückt wird.
~~~
Sprach ich davon, dass sich die Logs "unleserlich aufblähen" würden, wenn man nicht bloß die erste Begegnung mitloggt? Ich habe das gerade gemacht. Fünf Sekunden Intro resultieren in 41 Textdateien mit je 5 MB Größe. Holla, die Waldfee.
~~~
Derselbe Abschnitt mit nur-erste-Begegnung-Loggen resultiert in einer Datei mit 50 KB. Noch Fragen?
~~~
Liebe Kinder, es geht vorwärts! Hah!
Mir ist nämlich einer meiner Fehler aufgefallen!
Im VBLANK selbst ist eine eigenständige Jump Table eingebaut, die ich bisher missachtet habe! Vielleicht liegt darin die Lösung.
Es ist eine... interessante Jump Table. Sie ist 9 Byte groß und enthält vier Einträge, wobei es einen Eintrag 0 gibt und denselben Eintrag für 1 bis 3. Der letzte Byte ist ein einfaches "RTS", was... an dieser Stelle keinen Sinn macht, aber egal, es ist da. Mir kommt sogar schon eine Idee, wofür das Ding gut ist... (*guck*)... Nein, schade, so funktioniert das nicht. Es wird die Variable $0100 genutzt.
Okay, und das ist auch seltsam:

Code: Alles auswählen

	LDA $0100.b
	BMI TakeALongerStayAtVBlank
	STZ $0103.w
	OneExitOfVBlank:
	REP #$38.b
	PLD
	PLB
	PLY
	PLX
	PLA
	RTI
	TakeALongerStayAtVBlank:
	ASL a
	TAX
	LDA #$80.b
	STA $0100.w
	JSR (VeryQuestionableMark, X)
(Wobei die letzte Zeile der Jumptable bezug ist)
Wenn $0100 nicht negativ ist, wird das Ganze beendet ($0103 ist ein Flag für Ende-vom-VBLANK, wenn es $00 ist). Ist $0100 negativ (= $80 bis $FF), wird es ge-ASL-t und in X verschoben, dann wird der Wert in $0100 auf einen negativen Wert gesetzt und schlussendlich die Jump Table benutzt.
Wenn das ge-ASL-t wird, kann ja quasi nur Jump-Table-Eintrag 0 und 2 benutzt werden. Hm. Das würde erklären, weshalb 1 und 3 dasselbe sind: Sie sind wurscht.

Stunde rum, Resümee:
Es gibt einen Ausweg aus der Misere! Vielleicht findet sich so endlich eine Möglichkeit, hier durchzukommen. Klasse! :)
Dateianhänge
Stunde 78.rar
(151.52 KiB) 138-mal heruntergeladen
pantalytron: ルトロンはくそのディスアセンブラだよ!
Perikles hat geschrieben:Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.

Benutzeravatar
lytron
Code Bro
Code Bro
Beiträge: 2664
Registriert: 12. August 2012, 20:18
+Positive Tradingpoints+: 12 von 12
Wohnort: ハノーファー区
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von lytron » 16. Februar 2013, 20:24

Stunde 79
Disassembled: 159.572 / 1.048.576 Bytes (15,218%)
Gehört: ( unununium88 - Shadowrun Revamp ) x 2


On we go.

~~~
o_O
VBLANK-JumpTable-Eintrag 1 lautet SEP #$20, LDA #$00, XBA, RTS.
Das ist 'n bischn wenig, woll?
Eintrag 2 lautet: RTS.
Es ist exakt das "RTS", das am Ende der VBLANK-JumpTable steht.
Kurios. Aber gut, dann lese ich mal die Log weiter.
~~~
Ich sollte demnächst das Maus-BIOS auch als solches kenntlich machen. Allem Anschein nach ist das hier im Main Game Loop drin.
~~~
Okay, *puh*, ich habe es verstanden.
JumpTable-Eintrag #$17 enthält wirklich eine nur-inkrementierenden Bezugnahme auf den JumpTable-Pointer. Das heißt: *alles im Lot*. Ich weiß, wie es weitergeht.
Außerdem sollte ich an dieser Stelle erwähnen, dass hier wieder einmal DP-Register $10 ("BigTimer") der Timer ist, der entscheidet, wann die Szene weitergeschaltet wird. Beim Gedicht am Anfang wird es auf #$1FF gesetzt, jetzt, bei der ersten Zug-Szene, wird es auf nur #$7F gesetzt.

Stunde rum, Resümee:
Ich komme langsam vorwärts, allerdings lief die ROM wieder einmal nicht, als ich sie testen wollte. Ich denke, es gibt noch viele offene Stellen auf Bank $0A. Und um die zu stopfen, sollte ich mal schauen, welche Variablen auf Bank $0A genutzt werden, sollte dann schauen, welche Werte in sie gespeichert werden, und dann dementsprechend diese Werte durchrechnen, um am Ende zu sehen, welche Werte das Ergebnis sind. Oder, ich müsste nochmal gezielt mit dem Geiger loggen.
Dateianhänge
Stunde 79.rar
(151.64 KiB) 139-mal heruntergeladen
pantalytron: ルトロンはくそのディスアセンブラだよ!
Perikles hat geschrieben:Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.

Benutzeravatar
ChronoMoogle
snesfreaks.com-Team
snesfreaks.com-Team
Beiträge: 9895
Registriert: 26. Februar 2007, 14:56
+Positive Tradingpoints+: 98 von 98
Wohnort: Nippon
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von ChronoMoogle » 16. Februar 2013, 20:28

Das Spiel fragt wirklich ab, ob die Maus eingesteckt ist? Ookay...
Schoen wieder ein bisschen Fortschritt zu sehen :)
Bild
| Mein YT Channel | Mein Twitter | Ich suche | Ich verkaufe | Foren SuFu |
...weil Terranigma einfach das Größte ist!

Benutzeravatar
lytron
Code Bro
Code Bro
Beiträge: 2664
Registriert: 12. August 2012, 20:18
+Positive Tradingpoints+: 12 von 12
Wohnort: ハノーファー区
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von lytron » 16. Februar 2013, 20:34

ChronoMoogle hat geschrieben:Das Spiel fragt wirklich ab, ob die Maus eingesteckt ist? Ookay...
Schoen wieder ein bisschen Fortschritt zu sehen :)
Das Spiel ist komplett Maus-supported. Zumindest, wenn ich nach den Screens in der Anleitung gehe (es wird dann ein Steuerkreuz rechts oben eingeblendet; außerdem erklärt es, weshalb das Spiel nur mit zwei Buttons steuerbar ist).
pantalytron: ルトロンはくそのディスアセンブラだよ!
Perikles hat geschrieben:Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.

Benutzeravatar
ChronoMoogle
snesfreaks.com-Team
snesfreaks.com-Team
Beiträge: 9895
Registriert: 26. Februar 2007, 14:56
+Positive Tradingpoints+: 98 von 98
Wohnort: Nippon
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von ChronoMoogle » 16. Februar 2013, 20:48

Ungewoehnliches aber interessantes Feature fuer ein Adventure mit RPG-Ansicht.
Bild
| Mein YT Channel | Mein Twitter | Ich suche | Ich verkaufe | Foren SuFu |
...weil Terranigma einfach das Größte ist!

Benutzeravatar
lytron
Code Bro
Code Bro
Beiträge: 2664
Registriert: 12. August 2012, 20:18
+Positive Tradingpoints+: 12 von 12
Wohnort: ハノーファー区
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von lytron » 17. Februar 2013, 12:42

Stunde 80
Disassembled: 161.721 / 1.048.576 Bytes (15,423%)
Gehört: Carsten Bohn's Bandstand - Brandnew Oldies 1-3 auf Shuffle


Ich könnte mich jetzt um den Soundkram kümmern, wie ich es gestern besprach. Allerdings geht Entertainment vor sinnhaftem Arbeiten, also mache ich mit der Jump Table und ihrem Eintrag #$57 weiter.

~~~
Nebenbei habe ich die Hälfte der Maus-BIOS-Subroutinen umbenannt. Nämlich die Hälfte, deren Funktionsweise ich verstanden habe.
~~~

Stunde rum, Resümee:
Ich war doch sehr erfolgreich.
Innerhalb einer Stunde konnte ich ziemlich genau, außer die Jumpmarken des BIOS umbenennen, den Eintrag #$57 bis auf eine Subroutine disassemblen. Dafür konnte ich aber einen $800-Byte-Klotz isolieren und als Tilemap erkennen, nämlich die Tilemap, die im Intro für den schwarzen Rahmen genutzt wird.
Um das zu testen, habe ich eine Kopie der Original-ROM gemacht und dort einen Eintrag in dem Klotz geändert. Folglich hätte im Intro ein schwarzer Würfel erscheinen müssen. Was er auch tat.
Ihatovo Monogatesttari (J) [h1C] - Kopie_00000.png
Ihatovo Monogatesttari (J) [h1C] - Kopie_00000.png (8.11 KiB) 3408 mal betrachtet
Klasse. Ich find das klasse.
Dateianhänge
Stunde 80.rar
(151.89 KiB) 118-mal heruntergeladen
pantalytron: ルトロンはくそのディスアセンブラだよ!
Perikles hat geschrieben:Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.

Antworten