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 » 8. Dezember 2012, 18:12

Stunde 15
Disassembled: 1.965 / 1.048.576 Bytes (0,187%)
Gehört: Tomas Dvorak - Machinarium OST (+ Bonus EP)


Noch ne Stunde, heute. Ich mach noch das zweite Promill. Vielleicht schaff ich ja heute noch die verbliebene(n) Subroutine(n). Auf auf.

~~~
Datei geöffnet, da fällt mir an: Mensch, ich sollte mal anfangen auszulagern. :D
~~~
Habe mal ein wenig ausgelagert, mache weiter, sobald ich, äh, Kapazitäten habe.
~~~

Code: Alles auswählen

	FragMich:
	LDA $4212.w
	LSR a
	BCS Fragmich	
Eine verblüffend einfache Art zu gucken, ob das Joypad-Autoread fertig ist.
~~~
Woozah, auf ganz einfache Art und Weise die Subroutine gefunden, in der die Daten ausgelesen werden, welche Buttons gehalten werden und welche frisch neu gedrückt wurden. Mit dem Befehl "BIT", den ich auch erst noch einmal mir neu anlesen muss. Auf jeden Fall habe ich jetzt wieder zwei (bzw. vier) neue Variablen erkannt, und dieses neue Wissen werde ich jetzt zunächst eintragen und dann auf Alt-Disassembletes anwenden.
~~~
Gut, weil ich jetzt weiterkommen will, werde ich jetzt nicht über den "BIT"-Befehl weiter nachdenken. Ich verstehe nicht, wie er in diesem Kontext funktioniert, aber ich verstehe, welchen Sinn er hier verfolgt. Soetwas wie ein AND, nur ohne "bleibenden Schaden am Akkumulatorinhalt". So what.
~~~

Stunde rum, Resümee:
Hm.
Wieder quasi nix geschafft.
Weder zweites Promill, noch ansich richtig was.
Ich habe die Controller-Auslese gefunden, okay. Aber ansonsten.
Hmpf.
Da muss ich wohl heut' noch ne Stunde ran...!

Ansonsten bin ich gern offen für bessere Vorschläge, wie ich das mit dem Subroutinen-Auslagern übersichtlicher gestalten kann. Falls irgendwer mit dieser Art nicht zurecht kommt.
Dateianhänge
Stunde 15.rar
(10.26 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 » 8. Dezember 2012, 19:23

Stunde 16
Disassembled: 2.124 / 1.048.576 Bytes (0,202%)
Gehört: Red Hot Chili Peppers - Californication


Noch ne Stunde, heute. Ich mach noch das zweite Promill. Ich glaubs nicht. ~_~

~~~
Warum zum Geier wird bei diesem Spiel der zweite Controller getestet? Oh, oh, oh-oh-oh. Finde ich jetzt was raus, was den ChronoMoogle freuen wird? ;)
~~~
Gut, die Geschichte mit dem zweiten Controller ist, äh, vernachlässigbar. Ich könnte mich jetzt im Einlesen in Dokumentationen verlieren, was die unteren vier Bit im Low Byte eigentlich bedeuten. Ist mir egal. Ich mach weiter.
~~~
Du liebe Zeit, jetzt fangen die hier noch irgendwas mit den NES-Style-Joypad-Access-Registern an... und die Subroutine scheint kein Ende zu nehmen...
~~~
So. Ich breche das hier ab. Ich habe keine Ahnung, was das für eine Funktion ist. In jedem Fall ist sie *sehr, sehr lang*. Ich schätze mal nicht, dass es da darum geht, einen "Please don't plug in a Super Scope"-Screen anzuzeigen. Keine Ahnung. Vielleicht interpretiere ich das alles auch falsch. Ich will mich damit nicht auseinandersetzen, ich will den Kram doch nur übersetzen, eigentlich. >_<
Ich mach mich jetzt ans Kompilieren und will gucken, ob das eine mit dem anderen übereinstimmt, und erwarte einen Schmerz im Schließmuskel, was den Abgleich anbelangt. Sofern ichs überhaupt noch kompiliert kriege.
~~~
Kompilieren klappte auf Anhieb. O_O Ich bin beeindruckt!
~~~
Gah, das ist das erste Mal, dass die Stunde um ist, und ich noch nicht mal mit dem Bug-Fixen durch bin. Das heißt: Einiges meines späteren Codes dieser Subroutine ist auch noch falsch. Super. Spitze. Klasse. Grumpf.

Stunde rum, Resümee:
Also.
Wer will, kann sich das ja mal genauer angucken, der Kram beginnt ab $3D5B und ist irgendwie wirr. Ob was ist oder nicht, lässt sich wahrscheinlich auf der echten Konsole mit einem zweiten SNES-Controller wesentlich schneller herausfinden als im Sourcecode. Zumindest für mich.
Ich bin über diese "Entdeckung" keinesfalls euphorisch, wird wohl nichts großes sein. Ich bin gerade genervt darüber, weil wieder irgendwas komplizierter ist, als es sein muss, und ich dementsprechend immer noch auf der Stelle trete. Manno.
Dateianhänge
Stunde 16.rar
(10.75 KiB) 116-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 » 8. Dezember 2012, 21:22

Stunde 17
Disassembled: 2.296 / 1.048.576 Bytes (0,219%)
Gehört: Invalids - Eunoia


Zweiter Controller, zweiter Teil. Ich will das Kapitel abschließen.

~~~
Okay, nach zwanzig Minuten bin ich mit der restlichen Subroutine fertig und habe auch alles wie in der Original-ROM. Das ist das Gute. Das schlechte ist: Die nächste Subroutine scheint auf die vorherige aufzubauen. ~_~
Da fällt mir ein: Ich hatte doch vorhin eine Subroutine, die einen bestimmten Wert in A übernimmt. Wo ich gehofft hatte, in der nachfolgenden Subroutine zu sehen, wozu man das braucht. In dem Fall wurde der Inhalt von A bei der nächstbesten Gelegenheit einfach überschrieben. "Versuchen Sie es zu einem späteren Zeitpunkt noch einmal". >_<
~~~
Äh, schön. Einen besseren Punkt, um Feierabend zu machen, könnte ich gar nicht finden.
Es wird eine Subroutine aufgerufen, in Abhängigkeit von X. Und X ist ein umgemodelter Wert aus einer Variable. Das heißt, ich muss erst gucken, was in die Variable gespeichert wurde, ob und wie sie eventuell variiert wurde, und dann gucke ich, wo der Sprung hingegangen sein kann. Oh yeah.

Stunde rum, Resümee:
Ich bin ein wenig demotiviert. Ich schätze, zuletzt geschildertes Problem werde ich erst einmal versuchen damit zu lösen, dass ich davon ausgehe, dass die Variable $00 enthält. Es ist egal. Alternativ könnte ich auch noch schauen, wo gewisse Bezüge in diesen mir suspekten Subroutinen für den zweiten Controller hinführen. Morgen. Vielleicht.
Dateianhänge
Stunde 17.rar
(11.06 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
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 » 8. Dezember 2012, 21:33

Ich denke teilweise hilft es auch immens zu wissen, was Controllereingaben im Spiel bewirken koennen. Ich hoffe du hast das Spiel zumindest mal bis zum Ende des 1. Kapitels gespielt, denn dann hat man die wenigen Interaktionsmoeglichkeiten im Prinzip alle gesehen ( das Spiel macht recht viel automatisch, z.B. muss man ein Item nur ausruesten und wenn man an der richtigen Stelle etwas anspricht, wird es ohne besondere Eingabe von alleine eingesetzt).
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 » 8. Dezember 2012, 21:38

ChronoMoogle hat geschrieben:Ich denke teilweise hilft es auch immens zu wissen, was Controllereingaben im Spiel bewirken koennen. Ich hoffe du hast das Spiel zumindest mal bis zum Ende des 1. Kapitels gespielt, denn dann hat man die wenigen Interaktionsmoeglichkeiten im Prinzip alle gesehen ( das Spiel macht recht viel automatisch, z.B. muss man ein Item nur ausruesten und wenn man an der richtigen Stelle etwas anspricht, wird es ohne besondere Eingabe von alleine eingesetzt).
Die Problematik ist hier eine ganz andere. Es ist ersichtlich, dass normalerweise eine Art und Weise der Eingabeverarbeitung genutzt wird, mit der ich umgehen kann. Nur bei dieser Sonderfunktion gehen bei mir ziemlich schnell die Lichter aus, weil sie auf sehr wirre Art und Weise arbeitet. Übrigens sieht es nicht so aus, dass hier überhaupt schon irgendetwas an Bilddaten des Spiels übertragen wurden.

Wobei ich da mir nicht so sicher bin. Vielleicht habe ich etwas dergleichen übersehen. Gespielt habe ich es seit ich die ROM habe nicht mehr.
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
Redscorpion
snesfreaks.com-Team
snesfreaks.com-Team
Beiträge: 1739
Registriert: 18. November 2007, 13:08
+Positive Tradingpoints+: 85 von 85
Wohnort: Halle
Kontaktdaten:

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von Redscorpion » 9. Dezember 2012, 01:45

Hab bisher alles durch. Dank der guten Erklärung ist das alles eigentlich gut nachvollziehbar...

Wie es dann mit der Übertragung auf ein anderes Game ist... Mal schauen! ;D

Gruß

red

P.S. Mach weiter so! :D
<--- SNES USB PAD Fertig 100% --->
<--- Custom SNES Mod + 60 hz 100% --->

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 » 9. Dezember 2012, 10:02

Stunde 18
Disassembled: 2.296 / 1.048.576 Bytes (0,219%)
Gehört: Tomas Dvorak - Machinarium OST (+ Bonus EP)


So. Auf der Suche nach $90.

~~~
Gut, wie ich es mir dachte. $90 wird ein fester Wert in dem ganzen Definitionsbla vor der JSL-Anhäufung zugewiesen. Und: Es ist nicht #$00, sondern #$10. Jetzt werde ich schauen, ob der Inhalt in all diesen jenen Subroutinen verfremdet wird, und wenn nicht, weiß ich, wo ich schauen muss.
~~~
Öhm. Gut. Ich hätte nicht gedacht, dass ich in 10 Minuten dieses Durchsuchen abgeschlossen habe. :oops:
Also, ich habe nichts gesehen, Folglich gehe ich mal von $10 aus.
~~~
HA! hahaHAAH! Ich hatte REEECHT!
Ich bin nicht diesem flexiblen Jump-Befehl gefolgt, sondern bin "dem Hauptarm des Programmflusses" gefolgt. Es folgen noch drei JSLs, danach wird always-gebrancht. Und wohin?! Naaa!? Naaaaaa!? Röchtöch! Zu dem SEP weiter oben, was ich vor tausend Jahren (öh... zehn Arbeitsstunden?) als potentiellen Übergang zwischen Init und Intro markiert habe...
... und intelligenterweise auch schon vorab die Hexadresse in der ROM als Kommentar hinterlegt habe. ^.^ Manchmal liebe ich meinen Job.
Und darum, hier meine nächste Prognose aus meiner Glaskugel (die leider Milchglas ist, aber finde mal ein Deodorant mit einer klaren Kugel...!):
Dieser flexible Jumpbefehl, der mich gestern motivert hat, aufzuhören, wird vermulich auf einen Haufen von Jump-Befehlen führen. So kann man vielfach Branchen und muss nur eine kleine Variable mit neuem Wert versehen.
~~~
Die letzten zwanzig Minute habe ich das WDC-Handbuch zum 65816 bzgl. des Jump-Befehls befragt (um genau zu sein: Befehl $FC, Jump to Subroutine absolute indexed indirect).
Ich wusste nicht, ob auf die absolute Adressangabe X addiert wird und dort dann weitergemacht wird, oder ob man *den Inhalt der absoluten Adresse* nimmt und dadrauf X haut und das als Weitermach-Adresse erwählt. Ersteres ist der Fall. Und das ist nicht schön, weil dort viel Code kommt, der mir nicht gefällt (Stack-relativer Kram und so; das sind derart traumatische Sachen für mich, dass ich in Verdrängungsmanöver verfalle... "Nein, *schniff*, das kann nicht sein. Das DARF nicht sein, buhu...").
Aber ich bin schonmal einen Schritt weiter. "One step closer..."
"... to the edge..." o_O
"... and I'm abouta break." o_O
Ach ja, das waren noch Zeiten... an sowas denkt man wehmütig zurück, wenn "Burn it down" läuft. Aber, egal, ich schweife ab... RTI. :D
~~~
Ah, aaah... Pure Madness.
Es scheint doch so zu sein, was ich oben sagte. Mehr oder weniger. Und so, wie ich mir das vorstelle, scheint es dann auch im Handbuch dargestellt zu sein. Aber bevor ich an dieser Baustelle weitermache, möchte ich da die Antwort von einem Fachkundigen haben (ikari? d4s? ramsis? LostTemplar? byuu? :( ):

Absolute Indexed Indirect funktioniert, meinem Verständnis nach, so:
Ich drück dir was in X rein und gebe dir eine Adresse.
Du nimmst Adresse und addierst drauf.
Das nimmst du als neue Adresse.
Dort gehst du hin und nimmst, was du da findest, als neue Adresse, wo du weiterzumachen hast.

Das sieht für mich so aus. Ich bitte da aber um ein Statement... andernfalls werde ich mich jetzt erstmal um die restlichen "fixen" JSLs kümmern.


Stunde rum, Resümee:
Dieses Mal kann ich mir den Upload sparen, ich habe nur eine Subroutine ausgelagert und ein bisschen kommentiert. Dann werde ich mich gleich erstmal um andere Dinge kümmern. In dieser Stunde habe ich nämlich nur den Wert der Variable $90 herausgesucht und danach mich in der Handbuch-Recherche verloren.
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 » 9. Dezember 2012, 11:07

Stunde 19
Disassembled: 2.342 / 1.048.576 Bytes (0,223%)
Gehört: Tomas Dvorak - Machinarium OST (+ Bonus EP)


Es stehen noch drei JSLs im Main Program Loop aus.

~~~
Das zweite von den drei JSLs geht auf Bank 10; ich gehe davon aus, dass dort Musik geladen werden wird. Reine Vermutung, dass sie alles SPC-Betreffende dorthin ausgelagert haben.
~~~
So. Da ich so gerne Übersichtsdateien schreibe, schreibe ich noch eine. "Clues to Unknown Variables". Ich weiß nicht, ob das sinnvoll ist, oder einfach noch eine Möglichkeit, den Zeitverbrauch in die Höhe zu treiben, aber zumindest nimmt es mir ein wenig Angst vor der Masse an Variablen.
~~~
Woah, eine der Variablen dort brauche ich gar nicht eintragen, sie ist nicht "Unknown".
Ich bin gerade bei der Subroutine "IntroSpriteDeactivator". Ich verstehe was sie macht (deswegen konnte ich sie auch benennen): Es werden einige Sprites deaktiviert. Ich verstehe nicht, was die Startbedingungen sind (noch nicht. ;) ).
Es ist in Abhängigkeit von $90, von dem ich mal behaupte, es ist der Intro-Szenen-Ansager-
-... oh, die nicht-"Unknown" Variable ist doch "Unknown". Habe ein E für eine 4 gehalten. :oops:
~~~
Hah, coole Sache. Mittels ".DW IntroSpriteActivator" kann ich, wie er hofft, die Adresse des Labels direkt als Hex-Zahl in die ROM schreiben lassen. Das wird mir bei dem Absolute-Indexed-Indirect-Befehl helfen.
~~~
Ich mache dann jetzt mal einen Abgleich zwischen meiner ROM und der Original-ROM, auch, um den Soundkram hinauszuschieben. ;)
~~~
Abgleich funktioniert, Abgleich ergab: Alles takko.
Und da ich noch ein wenig Zeit hatte, habe ich mal 2 x 32 Byte nachgebaut, die in der Originalrom dort einfach so herumlagen: 32 mal "$00", 32 mal "$FF". Endlich war der ".REPT"-Befehl von WLA mal zu was nütze. ;)

Stunde rum, Resümee:
Eine der drei Subroutinen konnte ich lösen, als nächstes steht mit großer Wahrscheinlichkeit eine Sound-Routine an, vor der es mich ein wenig graust. Aber, wenn man einmal vom Pferd gefallen ist...
Dateianhänge
Stunde 19.rar
(12.06 KiB) 110-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
ikari_01
snesfreaks.com-Team
snesfreaks.com-Team
Beiträge: 441
Registriert: 15. Juni 2010, 23:19
+Positive Tradingpoints+: 6 von 6
Wohnort: Wunstorf

Re: Disassemble Blog: Ihatovo Monogatari

Beitrag von ikari_01 » 9. Dezember 2012, 12:06

lytron hat geschrieben:Stunde 18
Absolute Indexed Indirect funktioniert, meinem Verständnis nach, so:
Ich drück dir was in X rein und gebe dir eine Adresse.
Du nimmst Adresse und addierst drauf.
Das nimmst du als neue Adresse.
Dort gehst du hin und nimmst, was du da findest, als neue Adresse, wo du weiterzumachen hast.
Bestätige April, Kampfbereitschaftsphase Eins! Hoch damit, und raus mit .... moment.

Ja, das ist richtig. JSR (addr, X). Damit kann man an der Position addr eine Tabelle mit Adressen (von ganz vielen verschiedenen Subroutinen!!1) ablegen und X als "Routinennummer" benutzen. Je nach X springt die CPU dann an die Routine, die an der entsprechenden Position in der Tabelle bei addr steht.
Entsprechend nennt man eine solche Tabelle auch Jump table oder Sprungtabelle.
sd2snes news: https://sd2snes.de

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 » 9. Dezember 2012, 12:30

Stunde 20
Disassembled: 2.465 / 1.048.576 Bytes (0,235%)
Gehört: (Suffer Like G Did - Orange EP, Raspberry EP, Reno Dakota - Popularity EP) x2


Weiter im Text, auf zu Bank 10, wir haben Sound zu erzeugen.

~~~
Okay, ich komme auf Bank 10 direkt auf einen Jump, das hatte ich schon erwartet. Dort, wo ich hinjumpe, komme ich zu einer weiteren "Verzweigung": Sechs Subroutinene werden aufgerufen. Alle recht kurz, aber trotzdem gehe ich von einem längeren Aufenthalt aus. :/
~~~
Okay, diese Weggabelungs-Subroutine ist ansich sehr überschaubar, jetzt gehe ich dann mal eine Ebene tiefer.
Ich sollte mal schauen, ob diese Variablen auch im Init mit Werten besetzt werden oder nicht.
Und, oh, ich sollte mal die ROM Map aktualisieren.
~~~
Ich denke, das Bild eines "Sumpfes" ist sehr passend, wenn ich überall zwei Zwei-Byte-Befehle habe und dann jeweils ein RTS.
~~~
Ich sollte mir die SPCIntro-Sachen noch einmal genauer anschauen, speziell auch im Abgleich mit der SPC-Übertragungsroutine, die ja "open source" ist. Wenn ich es nämlich gerade richtig sehe, werden diese Funktionen, die ich zuallererst auseinandergenommen habe, auch im Nachhinein noch genutzt, um die Sounddaten zu übertragen. Es werden wohl nur Variablen zuvor bearbeitet, die mit in den Übertragungsprozess hineinspielen und damit das Endergebnis variieren.
Lose Vermutung, nichts festes.
Wenn, dann sollte ich das heute machen, sonst wird das vorm nächsten Wochenende nichts. ;)
~~~
So. Bevor jemand verwirrt ist: Ich habe die "Haupt-Sequenz", also alles in der Bank 0 ab 0000, in die Datei "BANK_00" ausgelagert. Eigentlich wollte ich da alles rein schmeißen, was auf die Bank gehört, aber ich glaube, das gäbe Probleme mit den Sections für WLA. Selbiges mache ich auch mit Bank 10. Könnte am Anfang etwas unübersichtlich sein. Wenn ihr das aus eurer Erfahrung heraus nicht für praktikabel haltet, sagt bescheid. Noch kann ich es einfach ändern. ;)

Stunde rum, Resümee:
Das wird noch ein, zwei Stunden dauern, bis ich da durch bin, schätze ich. Es ist sehr fein verästelt; damit meine ich: Viele kurze Befehle, mit vielen Abfragen und dementsprechendem Branching. Spannend ist es allemal, weil ich mir gerade noch Hoffnungen mache, da mal durchzusteigen. ;)
Dateianhänge
Stunde 20.rar
(13.41 KiB) 110-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 » 9. Dezember 2012, 12:32

ikari_01 hat geschrieben:Bestätige
Ich liebe dich.
ikari_01 hat geschrieben: Bestätige April, Kampfbereitschaftsphase Eins! Hoch damit, und raus mit .... moment.
Ich liebe dich.
ikari_01 hat geschrieben: Ja, das ist richtig. JSR (addr, X). Damit kann man an der Position addr eine Tabelle mit Adressen (von ganz vielen verschiedenen Subroutinen!!1) ablegen und X als "Routinennummer" benutzen. Je nach X springt die CPU dann an die Routine, die an der entsprechenden Position in der Tabelle bei addr steht.
Entsprechend nennt man eine solche Tabelle auch Jump table oder Sprungtabelle.
[/quote][/quote]

Super, danke dir! Dann weiß ich jetzt, wie ich weitermachen kann. :)

Edit: Whoupsa! Tippfehler im Rausch der Gefühle...
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 » 9. Dezember 2012, 14:28

Stunde 21
Disassembled: 2.563 / 1.048.576 Bytes (0,244%)
Gehört: (Suffer Like G Did - Orange EP, Raspberry EP, Reno Dakota - Popularity EP) x2

So. Danke (nochmal) an ikaris Support. Trotzdem werde ich erstmal die SPC-Subroutine fertig machen. Der Übersicht halber.

~~~
Die ganzen Mini-SRs habe ich abgehandelt, es sind "wesensähnliche" Subroutinen, die die Variablen um $F5 herum verändern, bevor die in der "Main-SR" der Reihe nach in die vier APU-Register gespeichert werden.
Jetzt gerade mache ich ein Update der ROM Map. Warum schreibe ich eigentlich überall ein Semikolon vor jede Zeile...?
~~~
Ich frage mich, wie es kommt, dass alles, was mit Sound zu tun hat, immer erst auf den Anfang von Bank $0A verweist, und von dort direkt an eine andere Stelle jumpt. Meine Theorie ist: Eine Schnittstellensache von Team hector. So im Sinne von "Ich verweise auf $0000 auf Bank $0A, dann soll Sound aus sein, ich verweise auf $0003, dann soll das Lied abgespielt werden", und die im "Sound Engineering Department" durften sich dann auf "ihrer" Bank austoben, wie sie wollten, solange sie sich an diese Absprachen hielten.
Aber vielleicht geht hier auch nur meine Fantasie mit mir durch. ;)

Stunde rum, Resümee:
Es... geht vorwärts. Sagte ich das schon einmal? Es wird auf jeden Fall von mal zu mal wahrer. ;)
Ich konnte eben schonmal eine erste von diesen Jump-Table-Subroutinen bearbeiten. Diese gliedert sich wieder in neue Subroutinen (wie das nun mal so ist), aber dafür wird da mit einigen mir bekannten Variablen gearbeitet, nämlich die, die sich um die Bildschirmeinstellungen kümmern.
Ich werde schauen, ob ich heute noch dazu kommen werde, weiterzumachen (ein Kumpel hat mich auf ne Runde Minecraft angehaun, yeah!). Auf jeden Fall liegt es nicht an Desinteresse, wenn ich heute nicht mehr weitermachen sollte. :)
Dateianhänge
Stunde 21.rar
(14.01 KiB) 108-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 » 9. Dezember 2012, 21:12

Stunde 22
Disassembled: 2.677 / 1.048.576 Bytes (0,255%)
Gehört: Meinen Kumpel via Skype


Weiter! Weiter! Immer weiter!

~~~
Ich lerne gerade den "MVN"-Befehl kennen, und habe jetzt erst einmal ganz, ganz viel im Handbuch zu lesen. :D
~~~
Woah, MVN ist ja böööse. O_O
Ein Mini-DMA. Aber, hm, es läuft halt über den Prozessor. :-/
Gibt es da irgendwelche Erfahrungswerte, wozu sich sowas besonders gut eignet?
~~~
Okay, die Subroutine, die ich "MoveNegative" genannt habe, holt scheinbar was von Bank 4 und speichert es in den RAM ab $0800. Theoretisch. Ich bin mir nicht ganz sicher, weil die beiden Argumente, die mit MVN mitgegeben werden (Source und Destination Bank), beim Disassemblen gedreht werden. Soll heißen: "$54 $00 $04" ergibt "MVN $04,00". Und da weiß ich jetzt nicht, ob sich die Angabe "Src bnk, dst bnk" auf das Disassemblete oder auf den Hexcode bezieht. ;)
Aaaber... aus reiner Neugier schau ich mal in den Hexeditor, was das überhaupt für Daten auf Bank 4 sind. ^.^
~~~
Hm, nope, auch mit Tilemolester erkenne ich da nichts, das wie Grafiken aussieht. Mal schauen. :)
~~~
So wird ein Schuh draus:
Es wird ein zweites Mal MVN angewandt, in einer zweiten Mini-Subroutine. Und die geht von $0800 zu $0A00. Und $0A00 ist laut meiner ROM Map der CG RAM TEMP. Also: Farben, is.
~~~
Okay. Ich habe mal die ROM kopiert und ein bisschen in diesen 64 Byte herumgestochert, einfach wahllos Werte auf null gesetzt.
Das Ergebnis (vorher, nachher):
01.png
01.png (20.37 KiB) 3065 mal betrachtet
Wohl offensichtlich die Farben. ;D
Und damit sind wieder 64 Bytes "disassembled", hah! :> ;)

Stunde rum, Resümee:
So lieb ich das! Herrlich motivierend, wenn man mit ein wenig Arbeit, aber doch ohne "Setbacks" sich etwas erschließen kann.
Ich wüsste noch tausend Dinge zu tun, aber leider ist das Wochenende ja bereits vorbei... :(
Ich bin in jedem Fall gespannt, wie es weitergehen mag. Und das ist schon mal ein guter Anfang! Zumal gerade dieser Paletten-Edit einen sichtbaren Beweis gibt, wie nah ich gerade daran bin, zu den "richtigen Daten" zu kommen. Nächste Woche um diese Zeit sind wir ein großes Stück weiter. :)
Dateianhänge
Stunde 22.rar
(14.42 KiB) 108-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 » 9. Dezember 2012, 21:54

Und jetzt, nach all der harten Arbeit, mein liebster Spaß:

Statistiken! ^.^
Dateianhänge
Stat.png
Stat.png (20.69 KiB) 3063 mal betrachtet
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 » 10. Dezember 2012, 12:00

Ich habe gerade dieses Spielzeug zum Online-Erstellen von Baumdiagrammen gefunden.

Damit konnte ich mal alle Subroutinen darstellen:

Code: Alles auswählen

[ Reset-Vektor
 [ Start_($0000:0000)
  [ Jump Bank 10_($0005:0000)
   [ MITTEBNKZEHN_($0005:1F64) 
    [ SPCIntro1_($0005:1E7B) ]
    [ SPCIntro2_($0005:1F77) ]
   ]
  ]
  [ ClearOAMTemp_($0000:0CBC) ]
  [ OAM CG DMA_($0000:0B3C) ]
  [ CheckSRAM_($0000:C3E9) 
   [ CalcChecksum_($0000:4474) ]
  ]
  [ FirstBigMainLoop_($0000:022B)
   [ QuestionableSR1_($0000:078D) ]
   [ OAM CG DMA_($0000:0B3C) ]
   [ SetScreenOptions_($0000:0C46) ]
   [ VRAM DMA_($0000:0AA2) ]
   [ Flexi VRAM DMA_($0000:1570) ]
   [ Single VRAM DMA_($0000:1690) ]
   [ SetBGScroll_($0000:0BFD) ]
   [ CounterOrWhat_($0000:0779) ]
   [ QuestionableSR2_($0000:080D) ]
   [ JoyPadMainSR_($0000:3E91) 
    [ UpdateJoypadData_($0000:3D3E) ]
    [ SecondJoyPad_($0000:3D5B)
     [ ????_($0000:7F84) ]
    ]
    [ SecondSRSecondController_($0000:3E1D) ]
   ]
   [ IntroJumpMap_($0000:038E)
    [ NextStep_($0000:4F75)
     [ MoveNegative_($0000:0DCC) ]
     [ MVNToCGRAM TEMP_($0000:0F0D) ]
     [ ??? ($0000:3578) ]
    ]
   ]
   [ IntroSpriteDeactivator_($0000:0671) ]
   [ ??? ($0000:04E4) ]
   [ Dritter Jump Bank 10_($0005:0006)
    [ DerSoundBrei_($0005:1EB7)
     [ WorkingWithF7_($0005:1F3B) ]
     [ WorkingWithF7 1114 Zero_($0005:1F27) ]
     [ WorkingWithF7 Twostep_($0005:1F1D) ]
     [ WorkingWithF7 Fourstep_($0005:1F11) ]
     [ WorkingWithF5_($0005:1EF2) ]
     [ F7 And 2143_($0005:1EFE) ]
    ]
   ]
  ]
 ]
]
Das Ganze sieht dann so aus:
stgraph_svg.png
stgraph_svg.png (99.72 KiB) 3046 mal betrachtet
Und mit Paint konnte ich dann auch einzeichnen, wo ich weitermachen muss (rot) und welche ich disassembled, aber deren Nutzen noch nicht verstanden habe (gelb):
stgraph_svg - Kopie.png
stgraph_svg - Kopie.png (244.11 KiB) 3046 mal betrachtet
Boah, ich liebe sowas. ^.^

Wobei ich gerade beim Erstellen dieses Dings auf "SPCIntro1" geschaut habe und deren Sinn erkannte: Zu schauen, ob der SPC700 fertiggebootet ist. Na ja, heute abend, dann...
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