Benötige Hilfe mit CP/M Images (mit Skew >1)

  • Der Bootloader liest die Systemspuren mit Skew=3, das BIOS mit Skew=5.

    Hatte ich zuerst missverstanden. Ich dachte es gäbe 5 verschiedene Skew bei den Daten.

    Und was meinst Du jetzt mit Skew? Den physischen oder den logischen Sektorversatz? Da Du die Systemspuren anführst gehe ich davon aus, dass es sich um den Physischen handelt.


    Bei UCSD werden, wie bei manchen CP/M-Formaten, die Sektoren logisch versetzt (bei CP/M mit SECTRAN). Beim UCSD gibt es keine SECTRAN, sondern Allgorithmen die Anhand der Tracknummer einen bestimmten Sektorversatz berechnen. Dies ist offenbar von Hersteller zu Hersteller verschieden.



    Ich finde in "The Programmers CP/M Handbook" ist der SKEW schön erläutert.

    Die Funktionsweise ist ja bekannt, es ging nur um die unterschiedliche Bezeichnung für einen physischen und einen logischen Sektorversatz. In dem Buch wird noch ein weiterer Begriff ins Spiel gebracht ... Interlace


    Grüße, PAW

  • Und was meinst Du jetzt mit Skew? Den physischen oder den logischen Sektorversatz? Da Du die Systemspuren anführst gehe ich davon aus, dass es sich um den Physischen handelt.

    Skew, wie oben erklaert. Also die Umrechnung des logischen zum physikalischen Sektor durch SECTRANS.


    Da Du die Systemspuren anführst gehe ich davon aus, dass es sich um den Physischen handelt.

    Nee, ich habe auch noch kein Formatierprogramm unter CP/M gesehen, welches einen Interleave generiert, also eine nichtlineare physikalische Sektorreihenfolge erzeugt.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Skew, wie oben erklaert. Also die Umrechnung des logischen zum physikalischen Sektor durch SECTRANS.

    Habe mir jetzt nochmals ein Image von Vector Graphics CP/M-Diskette angesehen. Ist hard sektoriert, somit kein physischer Sektorversatz.


    Hat zwei Bootspuren, wo ich aber Aufgrund der Daten einen Sektorversatz nicht überprüfen kann. Das CP/M-Verzeichnis liegt am Track 2 (also 3. Spur). Beginnt bei Sektor 0, Fortsetzung bei Sektor 5, usw. was einen Versatz um 5 Sektoren bedeutet. Das ist aber nichts besonderes, da alle CP/M-Datenspuren (nicht Systemspuren) den gleichen Versatz und somit die gleiche SECTRAN haben. handelt sich also nicht um den von mir gemeinten logischen, trackabhängigen Sektorversatz.


    Zitat
    Zitat von PAW
    Zitat
    Zitat von robert_99 Das mit Trackabhängigem Skew könnte ich mir ansehen wenn ich mehr Beispieldateien hätte.
    Gibt's bei UCSD-Betriebssystem, nicht bei CP/M.

    Nicht bei CP/M kann ich nicht bestätigen.

    Vector Graphics hat unterschiedliche Skews benutzt, ich meine 3 für die Systemspuren und 5 für die Datenspuren.

    Kann man in meinen Sourcen aus Post #4 sehen.

    Aber es ist wirklich eine Ausnahme.

    Ich kenne kein CP/M-Format, wo sich der logische Sektorversatz innerhalb der CP/M-Daten (also ab dem Verzeichnis) ändert. Somit wird auch nur eine SECTRAN gebraucht. Dies gilt ja wohl auch für Vector Graphics CP/M-Disketten.



    Nee, ich habe auch noch kein Formatierprogramm unter CP/M gesehen, welches einen Interleave generiert, also eine nichtlineare physikalische Sektorreihenfolge erzeugt.

    Unter DOS mit 22DISK lassen sich CP/M-Disketten mit einer nichtlinearen physikalische Sektorreihenfolge erzeugen. Dazu gibt es in 22DISK den Parameter SKEW ...

    Zitat von 22DISK Handbuch

    SKEW specifies the physical interleaving of sectors.


    ...

    SIDE1, ... CP/M 2.2 allows a software interleave of sectors on a diskette; the terms given here reflect that interleave.


    Gruß, PAW

  • Ich kenne kein CP/M-Format, wo sich der logische Sektorversatz innerhalb der CP/M-Daten (also ab dem Verzeichnis) ändert. Somit wird auch nur eine SECTRAN gebraucht. Dies gilt ja wohl auch für Vector Graphics CP/M-Disketten.

    Das ist richtig.

    Bei mir ist der unterschiedliche Skew aufgeschlagen, weil ich aus den Vector Grafic Images Binaerdateien (ohne irgendeinen Versatz) machen wollte. Nach dem ersten Skew passten die anderen Daten aber trotzdem nicht.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Unter DOS mit 22DISK lassen sich CP/M-Disketten mit einer nichtlinearen physikalische Sektorreihenfolge erzeugen.

    Ich habe aber von Formatierprogrammen unter CP/M gesprochen und nicht von DOS Programmen, die versucht haben die CP/M Disketten zu lesen.

    Das es geht, daran besteht kein Zweifel.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Das sind keine speziellen Disketten.

    Der Floppycontroller sucht den angeforderten Sektor und liest/schreibt die Daten. Jeder Sektor hat ja seinen Header, unabhängig ob ohne oder mit Interleave.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Das war zu erwarten, aber was passiert, wenn Interleave und Skew zusammen kommen? Unter ungünstigen Umständen dauert dann das Lesen/Schreiben einer Diskette sehr langsam, weil pro Umdrehung nur ein Sektor gelesen werden kann, weil sie bedingt durch Interleave+Skew nicht weit genug hintereinander liegen.

    1ST1

  • Ich habe jetzt folgenden Ansatz gewählt:

    Für CP/M mit einem Software Versatz (nennen wir es einmal skew) habe ich ein script geschrieben dass mir den skew herausrechnet (ab einer Adresse) und ein neues File produziert in dem man dann das Template laufen lassen kann.

    Das script heisst: UnSkew_Image.1sc und ist ab sofort im Repository zu bekommen.


    Zwei weitere scripte welche Daten aus Imagedisk und Samdisk files extrahieren gibt es auch (Imagedisk_Export.1sc und Samdisk_Export.1sc).

    Auf den extrahierten files kann man dann wieder das Template (RetroDrive.bt) laufen lassen.


    Für alles andere kann man das Template direkt ausführen und die variante auswählen (wenn implementiert).

    Das Template versteht sich als Gerüst rel. einfach weitere Filestrukturen zu implementieren.

    Derzeit ist folgendes implementiert:

    FLEX1 und FLEX2: fixe Rootdir Einträge mit Größe != Sector und verkettete Datenblöcke,

    es65: fixe Rootdir Einträge, Datenblöcke sind in einer map zu finden,

    CP/M: fixe Rootdir Einträge, Datenblöcke sind in einer tabelle im Eintrag zu finden,

    FDOS: fixe Rootdir Einträge, Datenblöcke sind ab einem Startsektor einfach hintereinander,

    CP68: fixe Rootdir Einträge, Datenblöcke sind ab einem Startsektor einfach hintereinander,

    DOS68: verkettete Rootdir Einträge und verkettete Datenblöcke.

    Das sollte eine rel. große Anzahl an Filesystemen bereits abdecken. Alles weitere ist nur Parameter ändern und Codeblöcke kopieren.


    Ich bin sehr interessiert an "schrägen" Filesystemen. Falls jemand etwas kennt bitte posten.

    Danke.

  • Ohne die Diskussion ums Interleave neu zu beleben, aber ich fand gerade diese Seite zum Interleave in eine Western Digital Datenbuch von 1986.



    Und die Grafik ist auch nicht schlecht.

    Viel Spass damit.

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)

  • Skew, wie oben erklaert. Also die Umrechnung des logischen zum physikalischen Sektor durch SECTRANS.


    Da Du die Systemspuren anführst gehe ich davon aus, dass es sich um den Physischen handelt.

    Nee, ich habe auch noch kein Formatierprogramm unter CP/M gesehen, welches einen Interleave generiert, also eine nichtlineare physikalische Sektorreihenfolge erzeugt.

    ... ich schon. Natürlich gab es unter CP/M Formatierprogramme, die einen Interleave geschrieben haben. Da die Formate der ersten CP/M Rechner herstellerspezifisch waren und meist auch das einzig unterstützte, war es in "Tüftlerkreisen" durchaus beliebt, da mit speziell formatierten Floppys zu experimentieren - oft durchaus erfolgreich.

    Gruß, Schufti

    P.S.: und wie man sieht, wurde das von WD später in "moderneren" (leider nur) HDD-Versionen des Controllers sogar eingebaut - wir mussten das noch in mühsamer Kleinarbeit dem 17xx trickreich unterjubeln ;)