portablegaming.de

portablegaming.de (http://www.portablegaming.de/)
-   Development Abteilung (http://www.portablegaming.de/development-abteilung/)
-   -   Tutorial, Bastel und Hack Projekt (http://www.portablegaming.de/development-abteilung/58472-tutorial-bastel-hack-projekt.html)

Tharo 31.05.2014 11:00

Tutorial, Bastel und Hack Projekt
 
So. Wir hatten lange drüber gesprochen und ich hatte angekündigt, dass ich nach einigen Jahren die wir nun Luft hatten mal wieder etwas pubishen würde.

Tiny Grass is Dreaming

Das ist die URL. Es soll sich dabei ausdrücklich _nicht_ nur um meine Seite handeln, vielmehr will ich jeden einladen der etwas cooles machen will und (hoffentlich) Lehrreich darüber schreiben will. Sprache des Blogs ist Deutsch.

Diskusionen zu den dort geschriebenen Artikeln sollen am besten hier in diesem Forum, diesem Thread stattfinden.

Tharo 01.06.2014 21:44

AW: Tutorial, Bastel und Hack Projekt
 
btw momo? Kennst du einen funktionierenden *2snes? Hab nun eine Weile nach image convertorn gesucht und gelinde gesagt nur shit gefunden. bzw. Programme die abstürzen ..

goldmomo 02.06.2014 13:12

AW: Tutorial, Bastel und Hack Projekt
 
Kenn da auch nichts, ich könnte mal meinen GFX--Convert erweitern ( https://www.dropbox.com/sh/8i5pzlncr...pment/binaries ) damit er auch snes export hat.

Tharo 02.06.2014 14:26

AW: Tutorial, Bastel und Hack Projekt
 
Nahja er muss nix tolles können: 8x8 Tiled bilder in 2,4 oder 8 Bit Farbpaletten als quellcode ausgeben. ASM oder C++.

NICHT die Welt denkt man sich. Gibts/gabs tausende. Irgendwie aber find ich nur tote links oder wie erwähnt Stuff der sofort verreckt

goldmomo 02.06.2014 18:32

AW: Tutorial, Bastel und Hack Projekt
 
Liste der Anhänge anzeigen (Anzahl: 2)
Habe mein Tool mal kompiliert, es kann auch Tile-Modus 8x8 mit 4 und 8 Bit (16/256) Colors.
Kannst mal ausprobieren ...

LGND 02.06.2014 18:32

AW: Tutorial, Bastel und Hack Projekt
 
Was ist btw. aus deinem RPG-Projekt geworden?

Tharo 02.06.2014 20:18

AW: Tutorial, Bastel und Hack Projekt
 
Irgendwann an dem Punkt angekommen, wo ich Betriebsystem-Funktionen die JS fehlerhaft implementiert hat nachgebaut habe. Also Sheduling, Speicher Management und shit. Das neue Chrome von vor einer Woche hat nun extra Funktionen raus gebracht um diese Probleme zu fixen ... Aber was mich angeht hats mir einfach ECHt die Lust genommen. Dh steht im Moment das Modul-Projekt in Reihe 1.


Momo: Irgendwie stimmt der output nicht ..

http://oi39.tinypic.com/o7o7d5.jpg

ist nicht:
Zitat:

; bit width=8 length = 128
word $00 ;at 00000000
word $00 ;at 00000001
word $00 ;at 00000002
word $00 ;at 00000003
word $00 ;at 00000004
word $00 ;at 00000005
word $00 ;at 00000006
word $00 ;at 00000007
word $00 ;at 00000008
word $00 ;at 00000009
word $00 ;at 00000010
word $00 ;at 00000011
word $00 ;at 00000012
word $00 ;at 00000013
word $00 ;at 00000014
word $00 ;at 00000015
word $00 ;at 00000016
word $00 ;at 00000017
word $00 ;at 00000018
word $00 ;at 00000019
word $00 ;at 00000020
word $00 ;at 00000021
word $00 ;at 00000022
word $00 ;at 00000023
word $00 ;at 00000024
word $00 ;at 00000025
word $00 ;at 00000026
word $8F ;at 00000027
word $F7 ;at 00000028
word $00 ;at 00000029
word $00 ;at 00000030
word $00 ;at 00000031
word $00 ;at 00000032
word $00 ;at 00000033
word $00 ;at 00000034
word $70 ;at 00000035
word $07 ;at 00000036
word $00 ;at 00000037
word $00 ;at 00000038
word $00 ;at 00000039
word $00 ;at 00000040
word $00 ;at 00000041
word $00 ;at 00000042
word $70 ;at 00000043
word $07 ;at 00000044
word $00 ;at 00000045
word $00 ;at 00000046
word $00 ;at 00000047
word $00 ;at 00000048
word $00 ;at 00000049
word $00 ;at 00000050
word $70 ;at 00000051
word $07 ;at 00000052
word $00 ;at 00000053
word $00 ;at 00000054
word $00 ;at 00000055
word $00 ;at 00000056
word $00 ;at 00000057
word $00 ;at 00000058
word $70 ;at 00000059
word $07 ;at 00000060
word $00 ;at 00000061
word $00 ;at 00000062
word $00 ;at 00000063
word $00 ;at 00000064
word $00 ;at 00000065
word $00 ;at 00000066
word $70 ;at 00000067
word $07 ;at 00000068
word $00 ;at 00000069
word $00 ;at 00000070
word $00 ;at 00000071
word $00 ;at 00000072
word $00 ;at 00000073
word $00 ;at 00000074
word $70 ;at 00000075
word $07 ;at 00000076
word $00 ;at 00000077
word $00 ;at 00000078
word $00 ;at 00000079
word $00 ;at 00000080
word $00 ;at 00000081
word $00 ;at 00000082
word $70 ;at 00000083
word $07 ;at 00000084
word $00 ;at 00000085
word $00 ;at 00000086
word $00 ;at 00000087
word $00 ;at 00000088
word $00 ;at 00000089
word $00 ;at 00000090
word $70 ;at 00000091
word $07 ;at 00000092
word $00 ;at 00000093
word $00 ;at 00000094
word $00 ;at 00000095
word $00 ;at 00000096
word $00 ;at 00000097
word $00 ;at 00000098
word $8F ;at 00000099
word $F7 ;at 00000100
word $00 ;at 00000101
word $00 ;at 00000102
word $00 ;at 00000103
word $00 ;at 00000104
word $00 ;at 00000105
word $00 ;at 00000106
word $00 ;at 00000107
word $00 ;at 00000108
word $00 ;at 00000109
word $00 ;at 00000110
word $00 ;at 00000111
word $00 ;at 00000112
word $00 ;at 00000113
word $00 ;at 00000114
word $00 ;at 00000115
word $00 ;at 00000116
word $00 ;at 00000117
word $00 ;at 00000118
word $00 ;at 00000119
word $00 ;at 00000120
word $00 ;at 00000121
word $00 ;at 00000122
word $00 ;at 00000123
word $00 ;at 00000124
word $00 ;at 00000125
word $00 ;at 00000126
word $00 ;at 00000127
TOO many zero!

goldmomo 02.06.2014 20:50

AW: Tutorial, Bastel und Hack Projekt
 
Ich merks auch gerade, der TileExport ist kaputt .....
Hab da wohl zu viel an den Linearen Formaten rumgeschraubt (für mein FPGA Projekt), ich schaus mit mal an .. und hänge später ein update dran

Tharo 02.06.2014 20:55

AW: Tutorial, Bastel und Hack Projekt
 
sorry ._.

goldmomo 02.06.2014 21:24

AW: Tutorial, Bastel und Hack Projekt
 
Liste der Anhänge anzeigen (Anzahl: 1)
So die geht jetzt ... hoffe ich 8o
Nich so einfach meinen alten Code zu verstehen ...

Tharo 03.06.2014 20:12

AW: Tutorial, Bastel und Hack Projekt
 
Das ahm, macht schon nen besseren Eindruck. Aber, irgendwie wirkt es nun nicht als würde er eine Palette erstellen, kann das sein? ^^

goldmomo 03.06.2014 20:50

AW: Tutorial, Bastel und Hack Projekt
 
Habe keinen Multiplatten-Support (bei 16 Farben) drin (habe ich nie gebraucht). Da müssten, am Ende, auch drei Dateien rauskommen (GFX, 16x16Palette, TileIndex für Palette). Könnte man sicher einbauen, habe aber gerade keinen Bock :-)

Tharo 06.06.2014 17:16

AW: Tutorial, Bastel und Hack Projekt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Okay kurzes update.
Gut: Die Chips sind da. 10 Stück mit mindestens tausend mal so viel Masse an Verpackung wie Inhalt.
Schlecht: Hab am SNES code selber nichts weiter gemacht. Also immer noch keine funktionierenden Buchstaben Tiles = keine Print Funktion fürs Debugging
Gut: In der Uni gibt es immerhin EINEN, ich wiederhole EINEN fucking logic analysator.
Schlecht: Der ist privatbesitz von nem Prof und ob der mir erlaubt das Ding zu benutzen steht in den Sternen >.<
Schlecht: Mir fehlt noch ein passender Programmer. Wieder 30 Euro wech. Meh.



EDIT:
So. Hab endlich ein gfx Tool gefunden, die grafiken umgewandelt bekommen, die BG-Modes in den Griff bekommen und angefangen eine Print-Funktion zu implementieren. Dabei ist sicher etwas mehr als eine Stunde Zeit dafür drauf gegangen, dass der original Autor des Codes den ich zZ benutze aus IRGEND-EINER-DUMMHEIT raus für die Character Data eine Speichersektion genutzt hat in der System-Register liegen. Mit anderen Worten: Weirder Shit am laufenden Band. Man man man. Also ums kurz zu machen: Code Release + Tutorial gibts erstmal nicht. Nicht, ehe ich die im Moment extrem dumm designten DMA Routinen noch überarbeitet, und ein sauberes "println" implementiert habe.

Aber okay. Ein kleiner Fortschritt. Da geht sie hin, meine SNES Bastelzeit für diese Woche. Hoffentlich schickt Lupi bald mal das Modul los ;)

http://www.portablegaming.de/attachm...1&d=1402081764

Tharo 09.06.2014 15:15

AW: Tutorial, Bastel und Hack Projekt
 
http://tinygrassisdreaming.de/wp-con...4/06/demo2.png

Post ist da.

Habe die Funktion inzwischen in eine "echte" Funktion aufgesplittet, da man ein macro mit labels natürlich nur einmal aufrufen kann .. und es ohnehin eine sauerei ist.

Problem: Ich bekomms nicht mit FAR dara hin. Also Strings aus ner andren Bank. Natürlich ist das nen no-go. Wenn also jemand ne idee hat wie ich print_far zum laufen bekomme: bin für alles offen.

Code:

.MACRO PRINT
    ldx.w #\1    ; set base adress (counter)
    jsr PrintCode
.ENDM

.MACRO PRINT_FAR
    LDA.l \1    ; set base adress (counter)
    TAX
    jsr PrintCode
.ENDM


PrintCode:
    php
    println_loop:
        LDA.l $00,x        ;get letter
     
        CMP #$00        ;is actual letter zero?
        BEQ println_exit
       
        CMP #13            ; is it "new line" ?
        BNE println_out
            SET_16_BIT_A
           
            TYA
            ADC #31
            TAY
            sty VMADDL
           
            SET_8_BIT_A
            INX
        BRA println_loop
       
        ;print letter
        println_out:
            SBC #32        ;TODO: use translation table
            sta VMDATAL
            INX
        BRA println_loop
    println_exit:
    plp
    rts


Tharo 12.06.2014 19:49

AW: Tutorial, Bastel und Hack Projekt
 
Da es zZ an 200 euro für einen logic analyzer mangelt hab ich nun 4 sachen die ich machen könnte. Welche? kA. vllt habt ihr ja nen Rat

1. Einfacher Basic-Interpreter für SNES. Fügt dem Assembler eine Speicherverwaltung (variablen etc) hinzu. Ist sehr flat, also Ideal für schnellen Code
2. Erweiterten dissasembler zum entschlüsseln von spielen. Mit Funktionen, Speichertabellen, Macro erkennung, tables. Shit.
3. CiC Chip und custom card. Auch wenns an HW mangelt- irgendwie weiter frickeln
4. Ich wollte gern einen 100% Secret of Evemore - Mod machen. Wieso gerade das? Weil es eine recht gute Engine hat. Das Original-Spiel wird dabei verschwinden.

goldmomo 12.06.2014 21:24

AW: Tutorial, Bastel und Hack Projekt
 
Habt ihr keine Oszilloskope in der FH, eins mit 4 Kanälen sollte doch für den CIC langen. Wenn du in Bayern wohnst (bzw. in meiner Nähe), könnte ich dir meins evtl. leihen. Du kannst auch mal nach AVR Projekten schauen, da gibt’s einige Logikanalyser Basteleien, da bist mir ca. 50 Euro dabei, oder baust gleich selber. Musst ja keine Gigasamples verarbeiten bei dem CIC :-)

Schau mal hier:
http://www.mikrocontroller.net/topic/277482

Tharo 12.06.2014 21:40

AW: Tutorial, Bastel und Hack Projekt
 
wir haben so uralte analog obzys aus den 80ern. Mit grünem Mono Display und 2 Kanälen. Da kann ich ja auch gleich nen eigenes bauen aus ... kA. Allem? Aus nem Taschenrechner! Das ist wirklich arm >.<

Das 10 Euro Ding wäre indeed ausreichend, wenns denn funktioniert. Joah. Joah joah joah.

3-2-1 meins. Ich nehme mal an, dass du damit sagen wolltest ich solle doch das Modul weiter machen ^^
Bzw dann in 4 Wochen nachdem der (kein scheiß 3 EURO Versand) von singapur aus hier in deutschland angekommen ist.

goldmomo 13.06.2014 13:45

AW: Tutorial, Bastel und Hack Projekt
 
Der CIC ist auf jeden Fall eine Herausforderung, da werden schon einige Leute dran gescheitert sein.

Tharo 15.06.2014 11:34

AW: Tutorial, Bastel und Hack Projekt
 
So Mädels es ist Sonntag. Was gibt es neues?
Nun ich habe mich mal ein wenig in der Welt des Hackings und des disassemblings umgeschaut. Es gibt den schönen "Dispel" decompiler. Die meisten anderen disassembler die im Umlauf sind scheinen mehr oder minder darauf zu basieren und. Well. Der Quelltext ist recht simpel.

Ich werd also die Tage wohl mal damit rum spielen mit dem Ziel einen logic-parser zu implementieren der den code in sinnvolle Häppchen verteilt.

Auf der anderen Seite steht noch der Basic-Interpreter. Leider fehlt mir dafür zZ noch das knowhow über den SNES Speicher. Klingt komisch, aber ich hab WIRKLICH probleme mit dem Ram Management. Ich finde nix gescheites an dem ich erkennen kann welche Speicherbereiche nun wofür zur Verfügung stehen. Ergo weiß ich nicht welche Speicherbereiche ich nun für Speicher Variablen nutzen könnte >.<

Edit: https://bitbucket.org/tharo/grasm
DAS war deutlich einfacher als gedacht.

Zitat:

/* [00:0000] 48 */ pha
/* [00:0001] DA */ phx
/* [00:0002] 8B */ phb
/* [00:0003] 08 */ php
/* [00:0004] E220 */ sep #$20
/* [00:0006] 8E0243 */ stx $4302
/* [00:0009] 8D0443 */ sta $4304
/* [00:000C] 8C0543 */ sty $4305
/* [00:000F] 9C0043 */ stz $4300
/* [00:0012] A922 */ lda #$22
/* [00:0014] 8D0143 */ sta $4301
/* [00:0017] A901 */ lda #$01
/* [00:0019] 8D0B42 */ sta $420B
/* [00:001C] 28 */ plp
/* [00:001D] AB */ plb
/* [00:001E] FA */ plx
/* [00:001F] 68 */ pla
/* [00:0020] 60 */ rts
/* [00:0021] 40 */ rti
/* [00:0022] E230 */ sep #$30
/* [00:0024] A98F */ lda #$8F
/* [00:0026] 8D0021 */ sta $2100
/* [00:0029] 9C0121 */ stz $2101
/* [00:002C] 9C0221 */ stz $2102
/* [00:002F] 9C0321 */ stz $2103
/* [00:0032] 9C0521 */ stz $2105
/* [00:0035] 9C0621 */ stz $2106
/* [00:0038] 9C0721 */ stz $2107
/* [00:003B] 9C0821 */ stz $2108
/* [00:003E] 9C0921 */ stz $2109
/* [00:0041] 9C0A21 */ stz $210A
/* [00:0044] 9C0B21 */ stz $210B
/* [00:0047] 9C0C21 */ stz $210C
/* [00:004A] 9C0D21 */ stz $210D
/* [00:004D] 9C0D21 */ stz $210D
/* [00:0050] A9FF */ lda #$FF
/* [00:0052] 8D0E21 */ sta $210E
/* [00:0055] 8D1021 */ sta $2110
/* [00:0058] 8D1221 */ sta $2112
/* [00:005B] 8D1421 */ sta $2114
/* [00:005E] A907 */ lda #$07
/* [00:0060] 8D0E21 */ sta $210E
/* [00:0063] 8D1021 */ sta $2110
/* [00:0066] 8D1221 */ sta $2112
/* [00:0069] 8D1421 */ sta $2114
/* [00:006C] 9C0F21 */ stz $210F
/* [00:006F] 9C0F21 */ stz $210F
/* [00:0072] 9C1121 */ stz $2111
/* [00:0075] 9C1121 */ stz $2111
/* [00:0078] 9C1321 */ stz $2113
/* [00:007B] 9C1321 */ stz $2113
/* [00:007E] A980 */ lda #$80
/* [00:0080] 8D1521 */ sta $2115
/* [00:0083] 9C1621 */ stz $2116
/* [00:0086] 9C1721 */ stz $2117
/* [00:0089] 9C1A21 */ stz $211A
/* [00:008C] 9C1B21 */ stz $211B
/* [00:008F] A901 */ lda #$01
/* [00:0091] 8D1B21 */ sta $211B
/* [00:0094] 9C1C21 */ stz $211C
/* [00:0097] 9C1C21 */ stz $211C
/* [00:009A] 9C1D21 */ stz $211D
/* [00:009D] 9C1D21 */ stz $211D
/* [00:00A0] 9C1E21 */ stz $211E
/* [00:00A3] 8D1E21 */ sta $211E
/* [00:00A6] 9C1F21 */ stz $211F
/* [00:00A9] 9C1F21 */ stz $211F
/* [00:00AC] 9C2021 */ stz $2120
/* [00:00AF] 9C2021 */ stz $2120
/* [00:00B2] 9C2121 */ stz $2121
/* [00:00B5] 9C2321 */ stz $2123
/* [00:00B8] 9C2421 */ stz $2124
/* [00:00BB] 9C2521 */ stz $2125
/* [00:00BE] 9C2621 */ stz $2126
/* [00:00C1] 9C2721 */ stz $2127
/* [00:00C4] 9C2821 */ stz $2128
/* [00:00C7] 9C2921 */ stz $2129
/* [00:00CA] 9C2A21 */ stz $212A
/* [00:00CD] 9C2B21 */ stz $212B
/* [00:00D0] 8D2C21 */ sta $212C
/* [00:00D3] 9C2D21 */ stz $212D
/* [00:00D6] 9C2E21 */ stz $212E
/* [00:00D9] 9C2F21 */ stz $212F
/* [00:00DC] A930 */ lda #$30
/* [00:00DE] 8D3021 */ sta $2130
/* [00:00E1] 9C3121 */ stz $2131
/* [00:00E4] A9E0 */ lda #$E0
/* [00:00E6] 8D3221 */ sta $2132
/* [00:00E9] 9C3321 */ stz $2133
/* [00:00EC] 9C0042 */ stz $4200
/* [00:00EF] A9FF */ lda #$FF
/* [00:00F1] 8D0142 */ sta $4201
/* [00:00F4] 9C0242 */ stz $4202
/* [00:00F7] 9C0342 */ stz $4203
/* [00:00FA] 9C0442 */ stz $4204
/* [00:00FD] 9C0542 */ stz $4205
/* [00:0100] 9C0642 */ stz $4206
/* [00:0103] 9C0742 */ stz $4207
/* [00:0106] 9C0842 */ stz $4208
/* [00:0109] 9C0942 */ stz $4209
/* [00:010C] 9C0A42 */ stz $420A
/* [00:010F] 9C0B42 */ stz $420B
/* [00:0112] 9C0C42 */ stz $420C
/* [00:0115] 9C0D42 */ stz $420D
/* [00:0118] 58 */ cli
/* [00:0119] 60 */ rts
/* [00:011A] 78 */ sei
/* [00:011B] 18 */ clc
/* [00:011C] FB */ xce
/* [00:011D] C218 */ rep #$18
/* [00:011F] A2FF1F */ ldx #$1FFF
/* [00:0122] 9A */ txs
/* [00:0123] 202280 */ jsr $8022
/* [00:0126] E220 */ sep #$20
/* [00:0128] A900 */ lda #$00
/* [00:012A] 8D2121 */ sta $2121
/* [00:012D] A901 */ lda #$01
/* [00:012F] A22080 */ ldx #$8020
/* [00:0132] A02000 */ ldy #$0020
/* [00:0135] 200080 */ jsr $8000
/* [00:0138] A980 */ lda #$80
/* [00:013A] 8D1521 */ sta $2115
/* [00:013D] A20004 */ ldx #$0400
/* [00:0140] 8E1621 */ stx $2116
/* [00:0143] A901 */ lda #$01
/* [00:0145] 8D1821 */ sta $2118
/* [00:0148] 204E81 */ jsr $814E
/* [00:014B] 4C4B81 */ jmp $814B
/* [00:014E] 08 */ php
/* [00:014F] A900 */ lda #$00
/* [00:0151] 8D0521 */ sta $2105
/* [00:0154] A904 */ lda #$04
/* [00:0156] 8D0721 */ sta $2107
/* [00:0159] 9C0B21 */ stz $210B
/* [00:015C] A901 */ lda #$01
/* [00:015E] 8D2C21 */ sta $212C
/* [00:0161] A9FF */ lda #$FF
/* [00:0163] 8D0E21 */ sta $210E
/* [00:0166] 8D0E21 */ sta $210E
/* [00:0169] A90F */ lda #$0F
/* [00:016B] 8D0021 */ sta $2100
/* [00:016E] 28 */ plp
/* [00:016F] 60 */ rts
/* [00:0170] 48 */ pha
/* [00:0171] DA */ phx
/* [00:0172] 5A */ phy
/* [00:0173] 8B */ phb
/* [00:0174] 08 */ php
/* [00:0175] E220 */ sep #$20
/* [00:0177] 8E0243 */ stx $4302
/* [00:017A] 8D0443 */ sta $4304
/* [00:017D] 8C0543 */ sty $4305
/* [00:0180] A901 */ lda #$01
/* [00:0182] 8D0043 */ sta $4300
/* [00:0185] A918 */ lda #$18
/* [00:0187] 8D0143 */ sta $4301
/* [00:018A] A901 */ lda #$01
/* [00:018C] 8D0B42 */ sta $420B
/* [00:018F] 28 */ plp
/* [00:0190] AB */ plb
/* [00:0191] 7A */ ply
/* [00:0192] FA */ plx
/* [00:0193] 68 */ pla
/* [00:0194] 60 */ rts
/* [00:0195] 40 */ rti
/* [00:0196] 0000 */ brk $00
Zero optcode. Exit.

Tharo 18.06.2014 12:29

AW: Tutorial, Bastel und Hack Projekt
 
Zeit für ein Statusupdate, hm? Ja natüüüürlich ist es Zeit dafür :D

Der "grasm" getaufte snes disassembler wächst langsam vor sich hin. Hier ein aktueller std output im "logic" modus.

Code:

Luigi:
/* [00:8104]        218 */        phx
/* [00:8105]        8 */        php
/* [00:8106]        194 */        rep #$30
/* [00:8108]        226 */        sep #$20
/* [00:810A]        156 */        stz $2121
/* [00:810D]        162 */        ldx #$0100
/* [00:8110]        156 */        stz $2122
/* [00:8113]        156 */        stz $2122
/* [00:8116]        202 */        dex
/* [00:8117]        208 */        bne $0110
/* [00:8119]        40 */        plp
/* [00:811A]        250 */        plx
/* [00:811B]        96 */        rts

BabyLuma:
/* [00:827D]        8 */        php
/* [00:827E]        191 */        lda $000000,X
/* [00:8282]        201 */        cmp #$00
/* [00:8284]        240 */        beq $02A1
/* [00:8286]        201 */        cmp #$0D
/* [00:8288]        208 */        bne $0299
/* [00:828A]        194 */        rep #$20
/* [00:828C]        152 */        tya
/* [00:828D]        105 */        adc #$001F
/* [00:8290]        168 */        tay
/* [00:8291]        140 */        sty $2116
/* [00:8294]        226 */        sep #$20
/* [00:8296]        232 */        inx
/* [00:8297]        128 */        bra $027E
/* [00:8299]        233 */        sbc #$20
/* [00:829B]        141 */        sta $2118
/* [00:829E]        232 */        inx
/* [00:829F]        128 */        bra $027E
/* [00:82A1]        40 */        plp
/* [00:82A2]        96 */        rts

Toad:
/* [00:82A3]        72 */        pha
/* [00:82A4]        218 */        phx
/* [00:82A5]        90 */        phy
/* [00:82A6]        139 */        phb
/* [00:82A7]        8 */        php
/* [00:82A8]        226 */        sep #$20
/* [00:82AA]        142 */        stx $4302
/* [00:82AD]        141 */        sta $4304
/* [00:82B0]        140 */        sty $4305
/* [00:82B3]        169 */        lda #$01
/* [00:82B5]        141 */        sta $4300
/* [00:82B8]        169 */        lda #$18
/* [00:82BA]        141 */        sta $4301
/* [00:82BD]        169 */        lda #$01
/* [00:82BF]        141 */        sta $420B
/* [00:82C2]        40 */        plp
/* [00:82C3]        171 */        plb
/* [00:82C4]        122 */        ply
/* [00:82C5]        250 */        plx
/* [00:82C6]        104 */        pla
/* [00:82C7]        96 */        rts

Mario:
/* [00:80D0]        72 */        pha
/* [00:80D1]        218 */        phx
/* [00:80D2]        8 */        php
/* [00:80D3]        194 */        rep #$30
/* [00:80D5]        226 */        sep #$20
/* [00:80D7]        169 */        lda #$80
/* [00:80D9]        141 */        sta $2115
/* [00:80DC]        162 */        ldx #$1809
/* [00:80DF]        142 */        stx $4300
/* [00:80E2]        162 */        ldx #$0000
/* [00:80E5]        142 */        stx $2116
/* [00:80E8]        134 */        stx $00
/* [00:80EA]        142 */        stx $4302
/* [00:80ED]        169 */        lda #$00
/* [00:80EF]        141 */        sta $4304
/* [00:80F2]        162 */        ldx #$FFFF
/* [00:80F5]        142 */        stx $4305
/* [00:80F8]        169 */        lda #$01
/* [00:80FA]        141 */        sta $420B
/* [00:80FD]        156 */        stz $2119
/* [00:8100]        40 */        plp
/* [00:8101]        250 */        plx
/* [00:8102]        104 */        pla
/* [00:8103]        96 */        rts

Yoshi:
/* [00:82C8]        72 */        pha
/* [00:82C9]        218 */        phx
/* [00:82CA]        139 */        phb
/* [00:82CB]        8 */        php
/* [00:82CC]        226 */        sep #$20
/* [00:82CE]        142 */        stx $4302
/* [00:82D1]        141 */        sta $4304
/* [00:82D4]        140 */        sty $4305
/* [00:82D7]        156 */        stz $4300
/* [00:82DA]        169 */        lda #$22
/* [00:82DC]        141 */        sta $4301
/* [00:82DF]        169 */        lda #$01
/* [00:82E1]        141 */        sta $420B
/* [00:82E4]        40 */        plp
/* [00:82E5]        171 */        plb
/* [00:82E6]        250 */        plx
/* [00:82E7]        104 */        pla
/* [00:82E8]        96 */        rts

Peach:
/* [00:8000]        75 */        phk
/* [00:8001]        171 */        plb
/* [00:8002]        169 */        lda #$5B00
/* [00:8005]        174 */        ldx $1FFD
/* [00:8008]        142 */        stx $4372
/* [00:800B]        174 */        ldx $1FFF
/* [00:800E]        142 */        stx $4374
/* [00:8011]        226 */        sep #$20
/* [00:8013]        194 */        rep #$10
/* [00:8015]        169 */        lda #$8F
/* [00:8017]        141 */        sta $2100
/* [00:801A]        162 */        ldx #$2101
/* [00:801D]        116 */        stz $00,X
/* [00:801F]        232 */        inx
/* [00:8020]        224 */        cpx #$210D
/* [00:8023]        208 */        bne $001D
/* [00:8025]        116 */        stz $00,X
/* [00:8027]        116 */        stz $00,X
/* [00:8029]        232 */        inx
/* [00:802A]        224 */        cpx #$2115
/* [00:802D]        208 */        bne $0025
/* [00:802F]        169 */        lda #$80
/* [00:8031]        141 */        sta $2115
/* [00:8034]        156 */        stz $2116
/* [00:8037]        156 */        stz $2117
/* [00:803A]        156 */        stz $211A
/* [00:803D]        162 */        ldx #$211B
/* [00:8040]        116 */        stz $00,X
/* [00:8042]        116 */        stz $00,X
/* [00:8044]        232 */        inx
/* [00:8045]        224 */        cpx #$2121
/* [00:8048]        208 */        bne $0040
/* [00:804A]        162 */        ldx #$2123
/* [00:804D]        116 */        stz $00,X
/* [00:804F]        232 */        inx
/* [00:8050]        224 */        cpx #$2134
/* [00:8053]        208 */        bne $004D
/* [00:8055]        156 */        stz $213E
/* [00:8058]        156 */        stz $4200
/* [00:805B]        169 */        lda #$FF
/* [00:805D]        141 */        sta $4201
/* [00:8060]        156 */        stz $420B
/* [00:8063]        156 */        stz $420C
/* [00:8066]        156 */        stz $420D
/* [00:8069]        173 */        lda $4210
/* [00:806C]        32 */        jsr $80D0        ;->Mario,
/* [00:806F]        32 */        jsr $8104        ;->Luigi,
/* [00:8072]        156 */        stz $2102
/* [00:8075]        156 */        stz $2103
/* [00:8078]        162 */        ldx #$0080
/* [00:807B]        169 */        lda #$F0
/* [00:807D]        141 */        sta $2104
/* [00:8080]        141 */        sta $2104
/* [00:8083]        156 */        stz $2104
/* [00:8086]        156 */        stz $2104
/* [00:8089]        202 */        dex
/* [00:808A]        208 */        bne $007D
/* [00:808C]        162 */        ldx #$0020
/* [00:808F]        156 */        stz $2104
/* [00:8092]        202 */        dex
/* [00:8093]        208 */        bne $008F
/* [00:8095]        156 */        stz $2181
/* [00:8098]        156 */        stz $2182
/* [00:809B]        156 */        stz $2183
/* [00:809E]        162 */        ldx #$8008
/* [00:80A1]        142 */        stx $4300
/* [00:80A4]        162 */        ldx #$80CF
/* [00:80A7]        142 */        stx $4302
/* [00:80AA]        169 */        lda #$00
/* [00:80AC]        141 */        sta $4304
/* [00:80AF]        162 */        ldx #$0000
/* [00:80B2]        142 */        stx $4305
/* [00:80B5]        169 */        lda #$01
/* [00:80B7]        141 */        sta $420B
/* [00:80BA]        169 */        lda #$01
/* [00:80BC]        141 */        sta $420B
/* [00:80BF]        75 */        phk
/* [00:80C0]        171 */        plb
/* [00:80C1]        88 */        cli
/* [00:80C2]        174 */        ldx $4372
/* [00:80C5]        142 */        stx $1FFD
/* [00:80C8]        173 */        lda $4374
/* [00:80CB]        141 */        sta $1FFF
/* [00:80CE]        107 */        rtl

Das ganze Baby funktioniert intern in den folgenden Schritten:
1.) Disassemble
Der vom dispel übernommene Teil: Der ganze Code wird disassembliert und in eine innere Logik-Struktur übertragen. Weil zumindest in meinen selbst zum Test geschaffenen ROM's extrem viele 0en enthalten waren wurde der Code auf das überspringen von zero-blocks ge-tweaked.

2.) Virtual-Walk
Diese Stelle fehlt noch. Ein mini-emulator soll im 2. Schritt über den Code laufen und Memory-Mapping und Window Instruktionen auswerten. Ziel ist es ungefähr bestimmen zu können WO im SNES sich später code befindet.

Gegenwärtig hab ich das noch nicht implementiert.

3.) Labeling
Alle jump und sub-call Methoden werden gescannt und Labels verteilt. Diese haben zunächst Mario-Namen (die ersten 20 Stück) danach die Namen von Pokemons (770 Stück)

4.) Code-Sektions
Das ist im Grunde eine Funktion mit der ich (zZ basierend auf den Labels) Subourinen erkennen will. Ich klappere alle Einsprünge ab und suche nach dem "return".

5.) Logic
Wäre der nächste Schritt. Dabei gehts darum die ganzen register-Adressen in lesbare Namen (basierend auf einem assembler header file) auszutauschen. Da dem Code dadurch mehr oder weniger auch ein Stückweit der "Inhalt" abzulesen ist könnte man die Code-Sektions umbenennen oder in verschiedene Export-Files auslagern.

6.) Ressouce Detection
Weiß man dann wo z.B. CPU oder DMA copy stattfindet könnte man abermals mit einem Mini-Emulator ermitteln von wo bis wo denn verschiedene Ressourcen gespeichert sind.


Natürlich gibt es tausende nerviger Dinge (die ich mir vorstellen könnte) die bei sowas schief gehen. Aber hey. Der Anfang steht, mal schauen wie man dann beim ersten Test mit einem ECHTEN SNES Spiel klar kommt. Dafür mangelt es vor allem am korrekten erkennen des Headers. Dieser hat eine Vector Tabelle mit einem Entry-Jump in den Code (Reset Vector) - leider passt dieser überhaupt nicht so recht zu der Adresse im Code. Hm!


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:48 Uhr.

Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231