Cobra Girls Vol. 1 disassembled

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:

Cobra Girls Vol. 1 disassembled

Beitrag von lytron » 20. Oktober 2012, 00:55

Nicht schlafen Können ist kacke.

"Cobra Girls Vol. 1" ist eine weitere Public-Domain-ROM, ihrem Änderungsdatum nach vom 08. September 1993. Es handelt sich dabei um einen Intro für eine Hentai-Slideshow. Allerdings ohne die dazugehörige Slideshow.
1.png
1.png (2.37 KiB) 2782 mal betrachtet
Ich habe diese Datei disassembled, weil sie, wie ich festgestellt habe, als ich sie mit einem Hex-Editor untersucht habe, den Text, den sie beim SNES auf den Bildschirm bringt, als ASCII-Text enthält, und es mich interessierte, ob das SNES eine Funktion besitzt, um ASCII-Code anzuzeigen.
2.png
2.png (43.46 KiB) 2782 mal betrachtet
Die traurige Antwort: Nein. Aber es ist sehr einfach erreicht. Der Trick liegt in diesen Zeilen (in der Original-ROM zu finden in $0392 bis $03A2):

Code: Alles auswählen

LDA $83F7.w,x	
AND #$3F	
STA $2118.w	
STZ $2119.w	
INX 		
CPX $0400.w
BNE $8192
Erklärung: X ist der Counter für diese Schleife. Er wird vorher auf 0 gesetzt. Er wird hochgezählt (INX), es wird geguckt, ob er bereits $400 erreicht hat (CPX $0400.w), wenn nicht, wird die Schleife wiederholt (BNE $8192). Damit wäre schonmal die eine, nämlich die zweite Hälfte der Zeilen oben erklärt.
Zunächst wird ein Byte von der Adresse $83F7 + x geladen. Ab $83F7 liegt der ASCII-Text. Der genommene ASCII-Buchstabe wird um einige seiner höchsten Bits gestutzt:
AND #$3F kann man auch schreiben als AND #%00111111.
Das Tolle ist jetzt: Der Buchstabe "A" hat als ASCII-Zeichen den Code #$41 (#%01000001). Wenn man den jetzt ANDet, ist das Ergebnis #%00000001. In eine Tilemap geschrieben bewirkt dass, das ein A angezeicht wird, wenn das Tileset entsprechend ausgerichtet ist, dass Tile 0 leer ist, Tile 1 A ist, Tile 2 B usw. Was wiederum natürlich hier der Fall ist.
3.png
3.png (45.56 KiB) 2782 mal betrachtet
Dieser Wert wird dann in den VRAM übertragen (STA $2118.w / STZ $2119.w). Und, da ja X hochgezählt wird, und X immer auf die #$83F7 draufgerechnet wird, wird damit bewirkt, dass die $400 aufeinanderfolgenden Byte von $83F7 bis $87F6 (in der ROM: $03F7 bis $07F6) so bearbeitet und übertragen werden. Chic, nicht?

Einfach der Vollständigkeit halber noch eine Übersicht über den Aufbau der Original-ROM:
$00000000 bis $000001FF: SMC-Header
$00000200 bis $000003F6: Programm-Code
$000003F7 bis $000005F6: Tileset
$000005F7 bis $00000996: ASCII-Text als (zukünftige) Tilemap
$00000997 bis $00000AF6: -leer- wird aber auch als Tilemap übertragen
$00000AF7 bis $000081BF: -leer-
$000081C0 bis $000081FF: SNES-Header, komplett leer bis auf den RESET-Vektor (auf natürlich $8000 gesetzt)

Der Kram hier kann also von jedem, der will, genutzt werden, um seinen eigenen kleinen blöden Bildschirmtext anzeigen zu lassen. Entweder derjenige ändert den Kram mit einem Hexeditor in der tilemap.inc um und kompiliert das neu, oder er ändert es direkt in der ROM. Derjenige möge aber so lieb sein und dem El Karacho die Ehre geben, erwähnt zu werden. ;)
Dateianhänge
Cobra.rar
(117.8 KiB) 191-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
onkel istvan
SNES-Programmer
SNES-Programmer
Beiträge: 190
Registriert: 10. April 2011, 07:42

Re: Cobra Girls Vol. 1 disassembled

Beitrag von onkel istvan » 20. Oktober 2012, 16:41

Sehr interessant. Danke für die ausführliche Erklärung, Lytron. Kaum zu glauben, für was so'n Slideshow-ROM noch gut sein kann... ;)

Antworten