Welcome to Schneider / Amstrad CPC Forum. Please login or sign up.

28. March 2024, 15:58:02

Login with username, password and session length

Shoutbox

TFM

2024-01-15, 17:06:57
Momentan billige Farbbänder auf Ebay für PCW

Devilmarkus

2023-07-09, 10:37:40
Zweiter 👋😂🤣

TFM

2023-06-13, 14:21:49
Sommerloch!

TFM

2023-05-30, 17:00:20
Erster ;-)

Recent

Members
Stats
  • Total Posts: 11,654
  • Total Topics: 1,328
  • Online today: 93
  • Online ever: 1,724
  • (16. January 2020, 00:18:45)
Users Online
Users: 0
Guests: 84
Total: 84

84 Guests, 0 Users

Reverse-Engineering Problem: Wie laedt man beim Z80 Assembler Dateien?

Started by dettus, 24. October 2020, 10:49:00

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

dettus

Hallo.

Folgendes: Ich arbeite gerade an einem Reverse-Engineering projekt, um die alten Textadventures von Magnetic Scrolls auf moderner Hardware spielen zu koennen.
Die Homepage findet ihr hier: http://www.dettus.net/dMagnetic

Mittlerweile bin ich in der Lage, aus einem .DSK-Image auf das CPM-Filesystem zuzugreifen und von dort saemtliche Dateien zu extrahieren. Soweit so gut.
Wie ihr an meinem Profilbild erkennen koennt bin ich sogar schon so weit dass ich die Bilder anzeigen kann.


Mein Problem ist jetzt folgendes:
Um fuer alle Plattformen verfuegbar zu sein, wurden solche Spiele damals nicht direkt fuer C64/Amiga/PC/Cray etc geschrieben. Stattdessen gab es eine viruelle Maschine, und Bytecode, der dann interpretiert wurde. So aehnlich ist es ja auch mit Java heutzutage.

Ich bin jetzt auf der Suche nach dem Bytecode. Der ist auf irgendeine Art und Weise verschluesselt/gepackt worden.
Meine Z80-Kentnisse reichen aus, um ein wenig disassemblierten Code zu lesen. Allerdings weiss ich nicht, wie ich rausfinde, wo eine Datei geoeffnet wird und Daten von der Diskette gelesen werden.


Kann mir da jemand einen Tipp geben?


Thomas
Computer science is not about using a computer. It is about unleashing its power.

Devilmarkus

Moin Thomas,

was mir so auf Anhieb einfallen würde, wäre GAC.
https://www.cpc-power.com/index.php?page=detail&num=4943

Allerdings bin ich auch absolut kein "Adventure" Spieler...

GAC gab es aber, meines Wissens, auf diversen Systemen.
https://cpcwiki.de
Dein Deutsches CPCWiki!

dettus

Auch nicht schlecht.
Aber ich will kein Adventure schreiben, ich moechte es nur ausfuehren.

Da fehlt mir noch ein wenig Systemverstaendnis fuer die CPC-Kisten, um einige Zusammenhaenge zu begreifen.

Computer science is not about using a computer. It is about unleashing its power.

dettus

Also, ich bin gerade einen Schritt weitergekommen.
Anscheinend gibt es den Syscalls an Adresse BC77, der eine Datei oeffnet. Der Dateiname liegt dann an (HL).

Leider, wenn ich in WinAPE einen Breakpoint darauf setze, wird dieser nicht bei jedem Diskettenzugriff getroffen.

Gibt es noch eine andere Moeglichkeit, auf dem CPC Daten von der Diskette zu lesen?
Computer science is not about using a computer. It is about unleashing its power.

dettus

Okay... was ich bis jetzt gefunden habe ist das hier:

https://www.cpcwiki.eu/index.php/Programming:Reading_a_sector_from_a_disc

Ich habe schon gemerkt, dass bei dem Spiel, welches ich reverse engineere, anscheinend die Lesezugriffe am BIOS vorbei getaegigt werden.
Ansonsten haette ein Breakpoint auf die entsprechende Funktion getriggert.

Anscheinend ist es wohl so, dass beim Amstrad einige RST Vektoren ueberschrieben werden koennen?
Das geht wohl so:

1. Man laedt die "Nummer"(keine Ahnung wie die Nomenklatur genau ist... sorry) in den speicher. Und legt die Adresse auf diese "Nummer" in das Register HL.
2. Man fuehrt einen CALL BCD4 aus
3. Man erhaelt eine Adresse im Register HL zurueck.
4. Man speichert die drei bytes ab diesem Register an einer anderen Stelle im Speicher, sagen wir 1337.
5. Man fuehrt anschliessend irgendwann spaeter ein RST 3 1337 aus.

Das ruft dann direkt den entsprechenden Interrupt zum Sektorenlesen aus.
Soweit so gut....

NUR: Wo sind diese "Nummern" dokumentiert?
Im Disassembler habe ich folgendes gesehen:


l0040h:
        ld a,040h               ;0040   3e 40   > @
        ld (la127h+1),a         ;0042   32 28 a1        2 ( .
        xor a                   ;0045   af      .
        ld (l0df7h),a           ;0046   32 f7 0d        2 . .
l0049h:
        ld (l0538h),a           ;0049   32 38 05        2 8 .
        ld hl,l0e04h            ;004c   21 04 0e        ! . .
        ld (l0534h),hl          ;004f   22 34 05        " 4 .
        call sub_bb4eh          ;0052   cd 4e bb        . N .
        xor a                   ;0055   af      .
        call 0bd5bh             ;0056   cd 5b bd        . [ .
        ld a,0c3h               ;0059   3e c3   > .
        ld (l0030h),a           ;005b   32 30 00        2 0 .
        ld hl,l093ah            ;005e   21 3a 09        ! : .
        ld (l0030h+1),hl                ;0061   22 31 00        " 1 .
l0064h:
        jr l008eh               ;0064   18 28   . (
        ld hl,l0df8h            ;0066   21 f8 0d        ! . .
        call sub_bcd4h          ;0069   cd d4 bc        . . .
        ld (l0e06h),hl          ;006c   22 06 0e        " . .
        ld hl,l0e08h            ;006f   21 08 0e        ! . .
        ld (hl),c                       ;0072   71      q
        ld c,0c1h               ;0073   0e c1   . .
        ld b,07fh               ;0075   06 7f   . ^?
        di                      ;0077   f3      .
        out (c),c               ;0078   ed 49   . I
        ld de,lfe00h            ;007a   11 00 fe        . . .
        ld hl,l1130h            ;007d   21 30 11        ! 0 .


was machen diese beiden anderen obskuren funktionen bb4e und bd5b?

Weiterhin: In dem Beispiel oben habe ich einen rst 3 gesehen, in meinem Disassemblierten code taucht aber nirgendwo ein RST 3 auf. Was hat es damit auf sich?
Computer science is not about using a computer. It is about unleashing its power.

TFM

Die System Calls sind im Systembuch beschrieben, hier ist irgendwo ein Thread in dem man sich sehr viel Dokum zum CPC als PDF herunterladen kann.

Um Dateien von DSKs zu extrahieren eignet sich z.B. CPCDiskXP oder die Tools des JavaCPC Emulator.
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

dettus

Hallo.

Vielen lieben dank.
Mittlerweile habe ich es hingekriegt und meine Erkenntnisse hier dokumentiert:

https://www.dettus.net/dMagnetic/dMagnetic_datastructures.pdf

Ich bin sogar in der Lage, selbst Dateien von den DSK images zu extrahieren. Die Dokumentationen, die ich hier im Wiki gefunden habe waren da sehr hilfreich. Vielen vielen Dank dafuer!
Computer science is not about using a computer. It is about unleashing its power.

TFM

TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)