Schneider / Amstrad CPC Forum

Amstrad / Schneider CPC => Emulatoren => Topic started by: dettus on 24. October 2020, 10:53:34

Title: WinAPE: Breakpoints bei Diskettenzugriffen?
Post by: dettus on 24. October 2020, 10:53:34
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
Dabei benutze ich sehr viel WinAPE.

Ich bin schon in der Lage, von einem .DSK file ueber das CPM-Filesystem Dateien zu extrahieren, allerdings weiss ich noch nicht ganz genau, welche Datei genau was macht.
Ich wuerde daher gerne einen Breakpoint auf die Stellen setzen, wo eine Datei geladen wird, damit ich sehen kann was dabei genau passiert.
Und ob die hinerher irgendwie decrypted/entpackt oder aehnliches werden.

Weiss jemand, die das geht?

Thomas
Title: Re: WinAPE: Breakpoints bei Diskettenzugriffen?
Post by: almasys on 24. October 2020, 11:29:44
Indem Du Breakpoints an den für das Einlesen einer Datei zuständigen Vektoren setzt, als das wären

&BC77 DISC IN OPEN
&BC7A DISC IN CLOSE
&BC7D DISC IN ABANDON
&BC80 DISC IN CHAR
&BC83 DISC IN DIRECT

Dazu einfach im Debugger-Fenster mit der Maus in die Leiste links der Mnemonics klicken.
Title: Re: WinAPE: Breakpoints bei Diskettenzugriffen?
Post by: dettus on 24. October 2020, 11:34:48
super!
Das ist schonmal ein Schritt weiter fuer mich.
Weisst du zufaellig noch, wie ich dann an die gerade aktuellen Dateinamen komme?

Sprich: Was die ABI fuer diese System Calls ist?
Title: Re: WinAPE: Breakpoints bei Diskettenzugriffen?
Post by: dettus on 24. October 2020, 11:46:03
http://www.cpcwiki.eu/index.php/BIOS_Function_Summary
Schon gut. Ich habs gefunden.

Leider, wenn ich auf BC77 einen Breakpoint setze, um zu gucken welche Datei er aufmacht, wird dieser nicht bei jedem Diskettenzugriff getroffen.

Gibt es auf dem CPC noch eine andere moeglichkeit, Daten von einer Diskette zu lesen?
Title: Re: WinAPE: Breakpoints bei Diskettenzugriffen?
Post by: almasys on 24. October 2020, 12:12:07
Eine Beschreibung der Firmware-Calls findest Du im Schneider CPC Systembuch (http://little-bat.de/cpc). Dass da die Kassettenroutinen beschrieben sind ist egal, AMSDOS patcht diese und sie sind genauso zu behandeln.

An &BC77 CAS IN OPEN wird die Länge des Dateinamens in Register B, die Adresse des Strings in HL übergeben.

Anschließend kann die Datei Byte für Byte mit &BC80 CAS IN CHAR eingelesen oder am Stück mit &BC83 CAS IN DIRECT gelesen werden.

Da AMSDOS immer nur jeweils eine Datei zum Lesen und eine zum Schreiben geöffnet haben kann, gehen diese Zugriffe immer auf die zuletzt geöffnete Datei.

Selbstverständlich könnte man am Betriebssystem vorbei direkt auf die Diskette zugreifen, so bietet AMSDOS die Möglichkeit, einzelne Sektoren zu lesen.
Title: Re: WinAPE: Breakpoints bei Diskettenzugriffen?
Post by: dettus on 24. October 2020, 12:32:44
Quote
Selbstverständlich könnte man am Betriebssystem vorbei direkt auf die Diskette zugreifen, so bietet AMSDOS die Möglichkeit, einzelne Sektoren zu lesen.
Ich vermute, dass genau das bei dem Spiel passiert.

Jetzt suche ich einen Weg, herauszufinden wie das geht. Und wie ich die Stelle im Code mit dem Emulator finde.

Title: Re: WinAPE: Breakpoints bei Diskettenzugriffen?
Post by: TFM on 25. October 2020, 18:09:47
Persönlich gefällt mir der WinCPC am besten zum debuggen etc. WinApe ist mMn nicht so toll. Der JavaCPC kann wohl noch mehr, aber ich muss mir das erst noch ansehen.  :)
Title: Re: WinAPE: Breakpoints bei Diskettenzugriffen?
Post by: dettus on 31. October 2020, 15:16:18
Ich bin am Ende beim caprice gelandet. Der lies sich sogar auf meinem OpenBSD-System compilieren.
In der Datei z80.cpp  habe ich sogar eine Moeglichkeit gefunden unter bestimmten Umstaenden einen Memorydump zu triggern. Damit konnte ich nachvollziehen was sich zwischen verschiedenen Ereignissen geaendert hat.
Title: Re: WinAPE: Breakpoints bei Diskettenzugriffen?
Post by: TFM on 03. November 2020, 15:24:48
Ja, so ein Memory Dump ist hilfreich. Hat sonnst wohl keiner.  :(