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

28. March 2024, 12:02:17

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,653
  • Total Topics: 1,328
  • Online today: 80
  • Online ever: 1,724
  • (16. January 2020, 00:18:45)
Users Online
Users: 1
Guests: 115
Total: 116

115 Guests, 1 User
HAL6128

WinAPE: Breakpoints bei Diskettenzugriffen?

Started by dettus, 24. October 2020, 10:53:34

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
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
Computer science is not about using a computer. It is about unleashing its power.

almasys

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.

dettus

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?
Computer science is not about using a computer. It is about unleashing its power.

dettus

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?
Computer science is not about using a computer. It is about unleashing its power.

almasys

Eine Beschreibung der Firmware-Calls findest Du im Schneider CPC Systembuch. 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.

dettus

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.

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

TFM

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.  :)
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

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.
Computer science is not about using a computer. It is about unleashing its power.

TFM

Ja, so ein Memory Dump ist hilfreich. Hat sonnst wohl keiner.  :(
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)