Autor Thema: Wie Directory eines DSK auslesen  (Gelesen 888 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Wie Directory eines DSK auslesen
« am: 10. Juni 2020, 14:21:23 »
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

Offline TrebleAlex

  • Schreibgeschützter
  • *
  • Beiträge: 9
  • Liked: 1
  • Karma: +2/-0
Re: Wie Directory eines DSK auslesen
« Antwort #1 am: 10. Juni 2020, 15:22:31 »
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

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie Directory eines DSK auslesen
« Antwort #2 am: 10. Juni 2020, 15:57:25 »
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

Offline TrebleAlex

  • Schreibgeschützter
  • *
  • Beiträge: 9
  • Liked: 1
  • Karma: +2/-0
Re: Wie Directory eines DSK auslesen
« Antwort #3 am: 10. Juni 2020, 16:05:07 »
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

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie Directory eines DSK auslesen
« Antwort #4 am: 10. Juni 2020, 16:16:50 »
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:
« Letzte Änderung: 11. Juni 2020, 00:31:15 von oobdoo »
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

Offline mv

  • Schreibgeschützter
  • *
  • Beiträge: 9
  • Liked: 15
  • Karma: +3/-0
Re: Wie Directory eines DSK auslesen
« Antwort #5 am: 12. Juni 2020, 14:42:32 »
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.

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie Directory eines DSK auslesen
« Antwort #6 am: 13. Juni 2020, 01:14:07 »
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?



« Letzte Änderung: 13. Juni 2020, 01:34:00 von oobdoo »
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

Offline TFM

  • Administrator
  • CPC 6128+
  • *****
  • Beiträge: 3219
  • Liked: 757
  • Karma: +39/-0
  • Geschlecht: Männlich
  • FutureSoft und CPC - Ein starkes Team!
    • FutureOS
Re: Wie Directory eines DSK auslesen
« Antwort #7 am: 14. Juni 2020, 00:13:52 »
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: 24.11.2020)
http://futureos.cpcwiki.de/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 28.08.2019)

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie Directory eines DSK auslesen
« Antwort #8 am: 14. Juni 2020, 01:43:09 »
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

Offline TFM

  • Administrator
  • CPC 6128+
  • *****
  • Beiträge: 3219
  • Liked: 757
  • Karma: +39/-0
  • Geschlecht: Männlich
  • FutureSoft und CPC - Ein starkes Team!
    • FutureOS
Re: Wie Directory eines DSK auslesen
« Antwort #9 am: 14. Juni 2020, 14:09:36 »
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: 24.11.2020)
http://futureos.cpcwiki.de/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 28.08.2019)

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie Directory eines DSK auslesen
« Antwort #10 am: 14. Juni 2020, 16:55:57 »
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

Offline TFM

  • Administrator
  • CPC 6128+
  • *****
  • Beiträge: 3219
  • Liked: 757
  • Karma: +39/-0
  • Geschlecht: Männlich
  • FutureSoft und CPC - Ein starkes Team!
    • FutureOS
Re: Wie Directory eines DSK auslesen
« Antwort #11 am: 14. Juni 2020, 17:25:05 »
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: 24.11.2020)
http://futureos.cpcwiki.de/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 28.08.2019)

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie Directory eines DSK auslesen
« Antwort #12 am: 14. Juni 2020, 19:00:04 »
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

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie Directory eines DSK auslesen
« Antwort #13 am: 16. Juni 2020, 01:20:44 »
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

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 123
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Wie Directory eines DSK auslesen
« Antwort #14 am: 16. Juni 2020, 02:56:56 »
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