Hallo Besucher, der Thread wurde 4,7k mal aufgerufen und enthält 21 Antworten

letzter Beitrag von LogicDeLuxe am

[suche] Tracksaver 1541

  • Was ist der Zweck des Dummy-Eintrags?

    Na, ja - irgendwie muß man die Datei ja später wieder finden können. ;)


    "Dummy" deswegen, weil der Directory-Eintrag schon *vor* dem Schreiben der eigentlichen Sektor-Daten angelegt wird, und eben wie oben beschrieben, unvollständig ist; d.h. Eintrag für Startsektor und -track sowie Blocklänge fehlen.


    Edit: hab' noch mal genauer nachgeschaut - tatsächlich wird dieser Teil auf dem Computer ausgeführt und schreibt einfach eine "leere" Datei. Die belegt trotzdem einen Block und definiert damit auch den Starttrack und -sektor. Der Rest, s.u.


    Wie weit verwendest Du für das Schreiben (GCR-Kodierung, Ansteuern des Lese-/Schreibkopfes, Suchen des Sektors, Schreiben der GCR-Daten) eigene Routinen oder Routinen aus dem ROM?

    Ich bin ja jetzt nicht der Autor. Allerdings habe ich mir vor ein paar Jahren mal das Hypra-System für den VC genauer angeschaut, und bei der Gelegenheit auch ein paar offensichtliche Fehler ausgebügelt. Der Code ist jetzt frei verschiebbar und statisch - das Original konnte man nicht in ein ROM für BLK5 (ab $A000) brennen, da selbstmodifizierend ...


    Soweit ich das überblicken kann, wird effektiv nur die Datenübertragung beschleunigt. Und, wie gesagt, die Logik zum Wegschreiben der Sektoren ist auch noch im Floppycode drin. Es ist keine schnellere GCR-Kodierung erkennbar (keine gehörigen Tabellen, etc.) - läuft also wohl über die normalen DOS-Routinen ... mal schauen ...


    Also, das hier sind die JSRs/JMPs in dem Teil vom Floppycode, der nicht für den schnellen Transfer da ist (Kommentare von AAY1541):


    JMP $F969: Error entry disk controller
    JSR $F121: Find and allocate free block
    JSR $F5E9: Calculate parity for data buffer
    JSR $F7A3: Convert 260 bytes to 325 bytes group code
    JMP $F581: Write data block to disk
    JSR $F510: Read block header
    JMP $FE00: Switch to reading
    JSR $F50A: Find start of data block
    JMP $F6C5: Compare written data with data on disk (Einsprung für "write error")
    JSR $F119: Buffer number for BAM
    JSR $D042: Load BAM
    JSR $D107: Open channel for writing
    JMP $CFF8: Write data byte in buffer (Einsprung für "file not open")
    JSR $DE3E: Get track and sector
    JSR $D57D: DOS mismatch error (?)
    JSR $D599: Verify execution
    JMP $DB23: Close file


    ... sieht schon mal wie eine gute Blaupause aus. :D

  • Das Worst-Case-Szenario ist, wenn sich der jeweils nächste Sektor in einer anderen Spur befindet, da dann der Tracklader für jeden Sektor eine ganze Spur laden würde, also viel zu viel Overhead.

    Ein etwas typischerer Worstcase wäre wohl, wenn man es mit lauter Dateien, die nur 1 oder 2 Block groß sind, zu tun hat, und dann erstmal 40 davon am Stück geladen werden sollen. Für diesen Fall ist Most Access richtig gut und hängt sogar mühelos Dolphin DOS ab. Insbesondere, wenn mehrere Dateien hintereinander von der selben Spur geladen werden.