mp-one hat geschrieben:Jetzt frag' ich mich aber trotzdem, ob es da evtl. doch Unterschiede zwischen den (damaligen) Hispeed-Devices und dem SIO2USB gibt. Es hätte ja sonst schon früher Probleme mit SpartaDos und Hispeed geben müssen. Oder gab es die?
Ob es damals Probleme gab kann ich nicht sagen, ich habe SpartaDos (so gut wie) nie verwendet. Es kann aber durchaus sein, daß es damals keine Probleme gab, die aktuellen SIO2xxx Geräte sind deutlich schneller als die alten Floppies.
Ich weiss, daß einige Highspeed Routinen Probleme mit SIO2PC (bei 56kbit) haben/hatten. Konkret geht es da um 2 kritische Stellen:
1. die Zeit zwischen Command ACK und dem Command Complete (also wenn zB die Floppy zurückmeldet, daß sie den Sektor gelesen hat)
2. die Zeit zwischen den einzelnen Daten Bytes.
Im SIO Standard ist zB für den 1. Punkt ein Minimum von 250µS vorgeschrieben. Zum 2. Punkt gibt es keine Specs, also zumindest bei 19200 bit/sec darf die Floppy die Bytes direkt hintereinander losschicken (ohne Pausen dazwischen). Bei höheren Geschwindigkeiten haben aber einige Routinen Probleme damit, da sie die Bytes nicht schnell genug verarbeiten können und dadurch einzelne Bytes verloren gehen.
In der Praxis habe ich festgestellt, daß viele Routinen mit dem 250µS Delay nicht klarkommen, deshalb verwende ich als Default in AtariSIO 300µS.
Zusätzlich habe ich einen "entspannteren" Highspeed Modus für Problem-Routinen implementiert, der 1000µS wartet und zwischen den Datenbytes jeweils für die Zeit eines Bits pausiert (lässt sich einfach implementieren, man muss nur beim Senden den UART auf 2 Stop-Bits statt einem konfigurieren).
Mit dem "entspannten" Highspeed Modus kommt übrigens auch SpartaDos klar. Genauer: es genügt die Pause zwischen den Datenbytes einzufügen, die Zeit vor dem Command Complete kann auf 300µS belassen werden. Die Routine scheint also einzelne Bytes zu "verlieren", da sie zu schnell daherkommen.
In der Routine von SpartaDos ist aber noch ein weiterer Bug: Eigentlich sollte nach einigen Sekunden ($306 ist auf $0F gesetzt, also ca. 15 Sekunden) der Timeout zuschlagen. Nach ca. 10 Minuten hängt die Routine aber immer noch, einziger Ausweg ist die Break Taste...
so long,
Hias