SIO Geschwindigkeit


SIO Geschwindigkeit

von wwl » Sa 31. Aug 2013, 15:43
Ich habe eine Frage:

Angenommen man hat zwei Diskettenlaufwerke am SIO-Bus. Eines ist original, das zweite mit einer 1050 Turbo, die mit 70000 Baud laufen kann. Bremst das langsamere Laufwerk das schnellere aus? Es kann ja nur eine Busgeschwindigkeit geben?

Re: SIO Geschwindigkeit

von GoodByteXL » Sa 31. Aug 2013, 16:12
wwl hat geschrieben:Ich habe eine Frage:

Angenommen man hat zwei Diskettenlaufwerke am SIO-Bus. Eines ist original, das zweite mit einer 1050 Turbo, die mit 70000 Baud laufen kann. Bremst das langsamere Laufwerk das schnellere aus? Es kann ja nur eine Busgeschwindigkeit geben?

Bei deiner Beispielkonfiguration ist das kein Problem, weil der Treiber für die Turbo nach $0100 oder $0600 geladen wird (alternativ bei TuboDOS XL/XE nach $0400) und der Betrieb mit einer nicht aufgerüsteten Floppy keine Probleme macht. Sie wird weiter über den Handler (Treiber) im OS wie sonst auch angesprochen. Kann man sehr schön verfolgen beim Betrieb mit AspeQt am PC, wie die SIO-Speed jeweils umgeschaltet wird. Anders sieht es bei gemischtem Betrieb mit unterschiedlichen Speedern aus.

Wenn es das DOS managen kann, die verschiedenen Treiber zu verwalten, ist ein Mischbetrieb kein Problem. Im Falle der 1050 Turbo bleibt dann wahrscheinlich nur TurboDOS XL/XE 2.1 übrig. Es kann die 1050 Turbo, Happy-und Speedy-kompatible Laufwerke sowie die XF551 unter einen Hut bringen.

Re: SIO Geschwindigkeit

von wwl » Sa 31. Aug 2013, 17:47
Das heißt doch dann aber, daß die Geschwindigkeit erst dann umgeschalten wird, wenn klar ist, welches Gerät angesprochen ist, oder? Wie wird die jeweils geltende Busgeschwindigkeit kommuniziert?

Re: SIO Geschwindigkeit

von Sven » So 1. Sep 2013, 13:59
Keine Gewähr auf Richtigkeit:

Eine richtige Kommunikation der Geschwindigkeit gibt es eigentlich nicht.
Der ATARI fragt per Status-Abfrage ab, ob ein Device HighSpeed kann. In der Regel ist dies vermutlich der eigentliche Pokey-Divisor (0=maxSpeed 115k). Kann ein Gerät mehr als 19k, antwortet es darauf und der ATARI gibt dann die Speed vor und versucht mit dem Gerät in Highspeed zu kommunizieren.
Nun ist es am Gerät, die richtige Geschwindigkeit zu verwenden oder ggf. wieder auf 19k zurückzufallen. Hierfür sendet der ATARI deine Kommandos mehrfach, wenn er keine gültige Antwort erhält. Alle anderen Geräte verwerfen diese Informationen, bzw. können sie erst überhaupt nicht interpretieren.

Die eigentlich sinnige Implementierung habe ich bisher beim SIO2USB gesehen, wonach die Geschwindigkeit anhand der Frequenzmessung des Clock-Signals am SIO-Bus bestimmt wird und danach auf die gemessene Speed umgeschaltet wird.

Vermutlich ist das Problem, dass es im laufe der Zeit so viele verschiedene Speeder gab die nicht vom Original-OS unterstützt werden, das man kein allgemeingültiges Protokoll dafür entwickeln konnte.

Um auf deine Frage zurückzukommen... Der ATARI ist bei der SIO immer der Master. Daher regelt die Software, mit welcher Speed der ATARI mit welchem Device kommuniziert. Daher ist es möglich, mit einem Diskdevice 70k zu übertragen, während auf dem gleichen Bus ein anderes Device mit 19k überträgt.
Da die SIO-Geräte nicht untereinander direkt kommunizieren ist es nicht weiter schlimm ;)

Korrekturen meiner Aussagen sind willkommen :P

Re: SIO Geschwindigkeit

von wwl » Mo 2. Sep 2013, 10:37
So richtig klar ist mir das nicht.

Ich stelle mal konkretere Fragen:

Was genau ist die Standard Geschwindigkeit auf dem SIO?

Bei einem Takt von 1,79 MHz (1,78979 ?) ergibt sich bei einem Divisor von 40 19040 Baud und bei einem Divisor von 39 19454 Baud. Bei einem Takt von 1,77MHz (wie ist der genaue Wert?) hat man dagegen bei einem Divisor von 40 18830Baud und bei einem Divisor von 39 19239 Baud. Das sieht aus, als ob unterschiedliche Pokey-Divisoren benutzt würden, je nach dem, ob es sich um ein PAL oder ein NTSC System handelt?

Ist es richtig, daß zunächst über die Standardgeschwindigkeit kommuniziert wird?

Werden im High-Speed Fall alle Divisoren durchprobiert? Wie bestätigt das High-Speed Gerät die zutreffende Baudrate?

Ab wann wird dann über die höhere Baudrate kommuniziert?

Es gab mal eine Doku http://www.atari-history.com/archives/SIOspecs.pdf und http://ftp.pigwa.net/stuff/collections/ ... %2520Info/.
Beide kann ich nicht mehr finden. Weiß jemand eine Quelle?

Re: SIO Geschwindigkeit

von HiassofT » Mo 2. Sep 2013, 15:19
Hi!

wwl hat geschrieben:Was genau ist die Standard Geschwindigkeit auf dem SIO?

Standard Geschwindigkeit ist Divisor 40. Zwischen PAL und NTSC Geräten gibt's dadurch einen kleinen Unterschied, das macht aber in der Regel nichts aus, da er sich innerhalb der erlaubten Toleranzen ist (Ausnahme ist wohl IIRC die XF551, da haben die Entwickler was verbockt - evtl auch nur bei den ersten Versionen).

Ist es richtig, daß zunächst über die Standardgeschwindigkeit kommuniziert wird?

Ja, genau.

Werden im High-Speed Fall alle Divisoren durchprobiert? Wie bestätigt das High-Speed Gerät die zutreffende Baudrate?

Der Großteil der Geräte / SIO Emulatoren verwendet das Ultra Speed Protokoll, und diese Geräte unterstützen das SIO Kommando "Get Speed Byte" ($3F). Damit kann der Atari (in Standard Geschwindigkeit) direkt abfragen mit welcher Geschwindigkeit die Highspeed Kommunikation ablaufen kann - oder feststellen, daß das Gerät kein Ultra Speed unterstützt. Durchprobieren muß der Atari dabei nichts.

Anders sieht's bei den anderen Highspeed Protokollen aus (XF551, Warp Speed, 1050 Turbo). Hier muß der Atari ausprobieren ob das Gerät das Protokoll unterstützt. Das geht am einfachsten in dem der Atari ein harmloses Kommando wie "Get Status" im jeweiligen Modus schickt und dann überprüft ob die Floppy korrekt geantwortet hat. In diesen Modi wird der Command Frame jeweils in Standard Geschwindigkeit gesendet und an einem gewissen Punkt auf Highspeed umgeschaltet (XF551 und Warp verwenden Divisor 16, Turbo Divisor 6). Das durchprobieren hält sich da also auch in Grenzen.

Für den Atari ist die Sache also recht einfach, beim ersten Zugriff wird gecheckt ob und wenn ja welche Highspeed Variante zum Einsatz kommen kann, danach können die weiteren Zugriffe mit der zuvor ermittelten Variante stattfinden. Probleme gibt's dadurch aber natürlich, wenn man im laufenden Betrieb zB eine XF551 gegen eine Speedy tauscht - sowas soll man aber eh nicht machen :)

Aufwändiger ist die Sache aber für die SIO Geräte, gerade beim Ultra Speed Protokoll (bei dem auch der Command Frame in Highspeed gesendet wird) müssen sie damit klarkommen, daß sie evtl "Blödsinn" empfangen. Das Gerät muß da tunlichst auf alle möglichen Fehler checken und auf jeden Fall stillhalten wenn irgendwas nicht passt - es könnte ja sein, daß der Atari ein anderes Gerät am Bus anspricht. Sendet ein 2. Gerät plötzlich Daten (und wenn's nur ein Command NAK ist), wird die Kommunikation gestört.

IIRC hat Walter mal geschrieben, daß die Speedy da gerne mal gepatzt hat. Ich selber hatte das Problem bisher noch nicht, bin aber drübergestolpert, daß sich die UARTs im PC zum Teil "weghängen" können, wenn sie Daten mit der "falschen" Geschwindigkeit empfangen.

Es gab mal eine Doku http://www.atari-history.com/archives/SIOspecs.pdf und http://ftp.pigwa.net/stuff/collections/ ... %2520Info/.
Beide kann ich nicht mehr finden. Weiß jemand eine Quelle?

Frag einfach mal google nach siospecs.pdf, dann findest Du zB das hier: http://spiflash.org/atari/siospecs.pdf

Zu den Highspeed Modi findest Du darin aber nichts, da werden (nur) die Grundlagen der SIO erklärt. Ist aber trotzdem gut wenn man das PDF mal gelesen hat, damit wird vieles klarer.

Wenn Du Interesse an weiteren Infos zu Highspeed SIO hast, lies einfach mal das README.txt zu meinem Highspeed SIO Patch, das sollte alle offenen Fragen beantworten :)
http://www.horus.com/~hias/atari/#hipatch

so long,

Hias

Re: SIO Geschwindigkeit

von GoodByteXL » Mo 2. Sep 2013, 17:26
Danke Hias für die ausführliche Erläuterung. Ergänzend möchte ich noch hinzufügen, dass der Zeitpunkt des Umschaltens auf High Speed das eigentliche Problem ist, wenn man im System einen Mischbetrieb verschiedener HS-fähiger SIO-Geräte betreibt. Bei US im Command Frame, bei XF & Indus nach der Bestätigung des Kommandos und bei der Turbo bevor ein Kommando bestätigt wurde. Und die Speedy reagiert relativ empfindlich auf Speeder, die eine andere Baudrate fahren; z.B. US-Doubler, AspeQt (je nach Chipsatz im PC verändert die sich sogar im laufenden Betrieb durch Belastungs- und/oder Taktveränderung). Das macht es bunt :wink: .

Trotzdem konnte ich mit der Speedy als alleiniges FDD Backups auf AspeQt ziehen bei Pokey Divisor 4.

Re: SIO Geschwindigkeit

von wwl » Mo 2. Sep 2013, 23:37
Vielen Dank für die Erklärungen!

Es gibt ja jetzt einige Geräte, die mit möglichst hoher Geschwindigkeit arbeiten werden (SIO2SD, SIO2USB, SIO2PC, usw.). Hat sich da mittlerweile so eine Art Standardvorgehen etabliert? Ich nehme an, das $3F Kommando, oder?

Gruß, Wolfgang

Re: SIO Geschwindigkeit

von HiassofT » Di 3. Sep 2013, 14:49
wwl hat geschrieben:Es gibt ja jetzt einige Geräte, die mit möglichst hoher Geschwindigkeit arbeiten werden (SIO2SD, SIO2USB, SIO2PC, usw.). Hat sich da mittlerweile so eine Art Standardvorgehen etabliert? Ich nehme an, das $3F Kommando, oder?

Genau so ist es.

Einige der Geräte unterstützen zusätzlich auch noch andere Varianten, zB kann man bei der aktuellen SIO2SD Firmware auch ein Turbo-Protokoll aktivieren, die SIO2PC Emulatoren unterstützen zum Teil auch den XF551 Modus, aber all das verwendet so gut wie keiner mehr.

Alles ausser dem Ultra Speed Protokoll ist eigentlich nur mehr aus historischer Sicht interessant. Für die meisten "richtigen" Floppy Laufwerke gibt's auch alternative ROMs bzw Erweiterungen mit denen Ultra Speed unterstützt wird (zB das Hyper XF OS für die XF551, Happy/Speedy für die 1050), somit kommt man i.A. mit einem DOS aus das eine Ultra Speed SIO Routine eingebaut hat (das ist auch eine Frage des Speicherplatzes, alle Modi zu unterstützen bläht die SIO Routine ziemlich auf).

so long,

Hias