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

28. March 2024, 23:08: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,655
  • Total Topics: 1,329
  • Online today: 113
  • Online ever: 1,724
  • (16. January 2020, 00:18:45)
Users Online
Users: 3
Guests: 86
Total: 89

86 Guests, 3 Users
Swoop4711, Doc schneider, xesrjb

Wie Directory eines DSK auslesen

Started by oobdoo, 10. June 2020, 14:21:23

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

oobdoo

Im "Das grosse Floppy Buch" von Data Becker wird auf Seite 216/217 die Directory Größe mit 2048 Bytes
angegeben, das Directory (D-Format) soll dabei die Sektoren &C1-&C5 belegen (5x512=2560 Bytes).
Was stimmt denn nun?  :gruebel:

Bisher ist es mir nicht gelungen das Directory vollständig richtig einzulesen.  :(

CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

TrebleAlex

Hallo! :-)

Das Directory liegt beim DATA-Format in den ersten 4 Sektoren, d.h. &C1-&C4.
512 Bytes pro Sektor*4=2048 Bytes.
Ab &C5 liegt schon die erste Datei.

Evtl. kommt der Anzeigefehler zu Stande, weil Du auch den Sektor &C5 mit einliest und den Inhalt ausgibst (Steuerzeichen etc.)

Viele Grüsse,

Alex

oobdoo

Ok, dann steht im Data Becker Buch was falsches. Trotzdem habe ich weiterhin ein Problem.
Sektor &42 gehört zum Directory. Wenn ich da mit einem Hexmonitor reinschaue dann scheint
da teilweise dummes Zeug zu stehen, z.B. "123456789" oder "@ABCDEFGHI", siehe Bild.
Das DSK wird von anderen Tools aber sauber ausgelesen.
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

TrebleAlex

Hmmm.... Du darfst das DATA-Format (Sektor ID &C0) nicht mit dem SYSTEM-Format verwechseln! (Sektor ID &40)!

Beim System-Format sind die ersten beiden Spuren für CP/M reserviert, d.h. das Directory beginnt dort an Track 2 Sektoren &41-&44 !

Gruß,
Alex

oobdoo

#4
Das weiß ich. Dachte ich zumindest. Dank Dir weiß ich jetzt das in meinem Source da tatsächlich noch ein Zahlendreher drin war.  :smiley027:

Nachtrag:

Endlich.  :00008351:

Nun hat auch das Einlesen vom Directory vollständig geklappt.
Nachdem ich den vertikalen Scrollbalken dazu geschaltet hatte,
war auch erkennbar das das Verzeichnis vollständig in der Textbox
vorhanden war. Vorher konnte ich nur die letzten Einträge sehen,
die waren aber ohne Inhalt. Das zu finden hat mich locker 2h gekostet.  :banghead:

Ab morgen kommt endlich das Einlesen einzelner Dateien...  :jubelaola:
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

mv

Mit DSK-Auslesen habe ich mich vor ein paar Tagen auch noch mal beschäftigt.
Dazu eine alte Perl-Version als Vorlage genommen, und in JavaScript umgeschrieben:
https://github.com/benchmarko/CPCBasic/blob/master/DiskImage.js
Im Moment nur für Lesen.

oobdoo

#6
Bin kurz davor ein File aus einem DSK raus zu holen. Dazu habe ich mit zwei anderen Tools zusätzlich gearbeitet.
Das blöde dabei, ManageDsk macht es scheinbar richtig  und CPCDiskXP falsch.  :(
AMSDOS1.COM scheint die richtigen Inhalte zu haben, AMSDOS2.COM die falschen. :gruebel
Beide Tools haben natürlich auf das selbe DSK zugegriffen.
Kann das mal einer prüfen?



CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

TFM

Und auch hier ist es wieder wichtig zu prüfen, ob eine Datei einen 128 Byte Header hat oder nicht.
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)

oobdoo

Ich gehe davon aus das die beiden Tools das machen werden.
Mein Programm ist noch lange nicht so weit. Ich kann aktuell die
richtigen Blöcke raus bekommen, habe es aber noch nicht geschafft
die Formel zur Umrechnung nach Track/Sektor zum Laufen zu bekommen.   :(

Das DSK Auswerten scheint in meinen 35 Jahren als Hobby Programmierer
die härteste Nuss zu sein.  :'(
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

TFM

Diese ganzen Sachen stehen unter FutureOS als Funktionen zur Verfügung, falls da Interesse besteht stehe ich gerne mit Rat und Tat zur Verfügung, steht aber auch alles im Handbuch.

Blocks auf Track, Sektorumrechnung ist an sich linear aufsteigend, beginnend mit dem DIR Blöcken, nummeriert ab 0.
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)

oobdoo

Guter Tip mit dem FOS Handbuch. Mal schauen ob ich da Denkanregungen für mich finden kann.  :zunge0020:

Den Hinweis mit dem Header hatte ich nicht sofort verstanden.  :gruebel:

Das passierte erst als ich Nachts im Bett lag.  :D

Ich war fest davon ausgegangen das beide Programme das gleiche Verhalten bei einem Export der Datei zeigen würden.
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

TFM

K.A. wie die beiden Programme funktionieren, aber ich kann mich glaube ich auch an Probleme erinnern.

Eine Text-Datei braucht ja keinen Header, denn es ist ja nur Text.

BASIC und MC Programme (also Binärdateien) brauchen den Header um der Firmware zu sagen, wohin sie geladen werden sollen, wie lange sie sind, und ob / bzw. an welcher Adresse der Autostart Einsprung erfolgen soll. Ja, der Header ist da auch beschrieben.
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)

oobdoo

Eben hinbekommen das ich die ersten 128 Bytes einer Datei von einem DSK richtig auslesen konnte.  :00008351:

Der Code war weitgehend richtig, aber wenn man die eigenen Funktionen mit der falschen Sektorgröße und
MaxSektoren füttert dann kann nur dummes Zeug bei raus kommen.  :banghead:
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

oobdoo

Und wieder ein Verständnisproblem.  :(

Die Datei AMSDOS.COM einer CP/M Diskette hat eine Größe von 1024 Byte. DataBlock wird
nur einer benötigt, weil 1 Block = 8 Record (1 Record = 128 Byte), also 8 x 128 = 1024 Byte.

Angegeben wird DataBlock mit 2. Das bedeutet Track 3 und Sektor 4 bzw. 2 und 3 wenn man
von Null zählt. Die Sektor-ID ist &43.

Damit kann ich nur 50% der Datei lesen, weil ein Sektor ja nur 512 Bytes hat.
Woher weiß ich welches den nächste Sektor ist, wo die anderen 50% von der Datei liegen?  :gruebel:
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

oobdoo

Nächste Frage.  :(

Wie kann ich feststellen ob eine Datei einen Header hat oder nicht?
Die Auswertung des Dreizeichen-Filetyps kann es nicht sein, das
kann man ja willkürlich festlegen.
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088