AFC, Auto-Flow-Control, automatische Datenflusssteuerung

Vorab:

Twister (Twister1200 oder auf Unity) ist unseres Wissens nach die einzige serielle Schnittstellenkarte auf dem Amiga die neben den üblichen Verfahren AFC anbietet. Warum das so wichtig ist, wird im Folgenden erklärt.

Etwas Historie und Hintergrundinformation:

Der Amiga war früher dafür bekannt, dass er einen Grossteil seiner Leistung nicht mit dem Hauptprozessor geboten hat, sondern mit seinem Chipsatz. Dieser hat eigenständig Tonerzeugung, Grafik und einiges mehr zur Verfügung gestellt. Leider mussten die Ingeneure damals aus Kostengründen darauf verzichten u.a. die Serielle Schnittstelle mit derartiger Eigenständigkeit auszustatten. Die serielle Schnittstelle besteht daher einmal aus einer Baugruppe im innern des Chipsatzes und zusätzlich aber auch aus einem sogennaten CIA oder Portbaustein (CBM8520). Dieser Baustein wurde bereits etwas verändert im C64 eingesetzt und ist für den Vorgänger des 68000er Prozessors gebaut worden. Der 68000er im Amiga muss beim Zugriff auf diese Chips auf 1/10 seiner Geschwindigkeit abgebremst werden.

In den frühen Jahren des Amiga fielen die Mängel durch sehr langsame Modems nicht auf. Wenn sogenannte Nullmodems betrieben wurden, waren die Probleme, die dann auftraten, bereits ein Ärgernis. Während der Chipsatz die Daten liefert, macht der Portbaustein das Handshake. Er sagt also wann neue Daten kommen, und wann die Gegenstelle einen Moment warten muss. Beim genauen Hinsehen hakt es hier recht deutlich. Der Chipsatz bietet immer nur je Platz für je ein zu empfangenes und abzusendendes Zeichen. Wäre hier nicht die Zweiteilung der Schnittstelle, könnte der Chipsatz eigenständig die Daten abholen und absenden. Genau das geht leider nicht! Es ist Software nötig (ein sogenannter Interrupt-Handler) die jedes Zeichen von der Schnittstelle abholt bzw. dort anliefert und nach Bedarf auch der Gegenstelle mitteilt, dass das System derzeit zu beschäftigt ist, und einen Moment mit Senden gewartet werden muss. Hier entstehen Probleme:

  1. Der Prozessor für jedes Zeichen seinen normalen Arbeitsablauf unterbrechen. Dies ist selbst für eine moderne CPU mit einem sehr hohen Aufwand verbunden, da der innere Zustand der CPU gesichert werden muss und z.B. auch der Cache verloren geht. Bei 57.600 BPS in nur eine Richtung (beim Surfen ist das bereits mehr!) passiert diese Unterbrechung fast 6.000 mal pro Sekunde. Solche Interruptlast "verbrennt" jede Prozessorleistung.

  2. Da für das Handshake Software eingesetzt wird, ist es zwingend nötig, dass diese Software binnen einer 6.000tel Sekunde anspringen kann oder das empfangene Zeichen binnen dieser Zeit abgeholt wurde. Beim schlanken Konzept des Amiga ist das sogar oft möglich diese sogenannte Latenzzeit einzuhalten. Wohl jeder User dürfte allerdings bereits in Terminalprogrammen die Fehlermeldung "Hardwarepuffer übergelaufen" oder ähnlich beobachtet haben. Das ist genau das, was passiert, wenn die CPU eben nicht rechtzeitig das Zeichen abholen oder eine Pause signalisieren konnte. Es kam ein Zeichen an, was in der Hardware nicht gespeichert werden konnte und daher verworfen wurde.

  3. Dieser Punkt müsste eigentlich 2b heissen...:Zu diesen alten Problemen kommt ein weiteres dazu: Ein gut konzipierter Computer, der auch der Amiga mal war, benutzt die sogenannte Interrupts nur zur Signalisierung. Es gilt eine Konvention wonach jegliche Interrupt-Service-Routine nur eine minimale Unterbrechungszeit verursachen darf. Das Verschieben von Datenströmen läuft über DMA, den direkten Speicherzugriff der Erweiterung, ab.Leider ist das Mainboard eines jeden Amiga stark veraltet bzw. unpässlich geworden. Durch Chipsatzfehler und ungeeignetes Aufrüsten der Maschinen ist die Möglichkeit verloren gegangen, Zusatzkarten zu realisieren, die ebenfalls selbständig auf Daten aus dem Hauptspeicher zugreifen können. Dies ist besonders für Erweiterungen unglücklich, die einen konstanten Datenstrom benötigen, wie z.B. jegliche Soundkarten. Damit eine Soundkarte unterbrechungsfrei spielen kann, muss sie zwangsläufig den Interrupt zum "Datenschaufeln" einsetzten. Das hat aber zur Folge, das andere Erweiterungen, die ebenfalls konstante Datenraten erfordern, insofern darunter leiden, das die Reaktionsverzögerung auf Interrupt- Anforderungen deutlich ansteigt. Im Amiga, bei dem unnötigerweise extrem hohe Anforderungen durch die serielle Schnittstelle gestellt werden, ist es letztlich unzweckmässig eben diese Schnittstelle überhaupt zu nutzen, da es zwangsläufig zu erheblichen Fehlerraten kommen muss.

In Hinsicht auf diese schweren Probleme ist es fast schon nebensächlich, wie hoch die BPS-Raten sind, die die Schnittstelle bieten kann. Als realer Durchsatz ist sowieso nur ein Bruchteil erzielbar. Bei dem verwendeten Leitungstreiber ist nach Norm nicht mehr als 115.200 möglich.

Was bieten heutige Schnittstellenbausteine?

Für den Amiga gibt es serielle Schnittstellenkarten, die die geschilderten Probleme unterschiedlich effektiv beheben können. Alle neueren Erweiterungen nutzen die Familie 16Cx50 und lassen sich somit gut vergleichen. Eine grössere Zahl für das X erweiterte Fähigkeiten bedeutet, die man nutzen kann, aber nicht muss. Bekannte Bausteine sind der 450, 550, 650, daher wird der 16450 der hier mal Generation 1 genannt.

  1. Generation: Der 450 ist in alten PCs im Einsatz, bei denen man sich beim PC wundert, warum trotz 115.200 BPS nur die Daten mit 10% der möglichen Bandbreite durch das Kabel tröpfeln. Ein nicht besonders attraktiver Chip.

  2. Generation: Der 550 bietet je 16 Zeichen Puffer zum Senden und Empfangen. Wenn man ihn denn voll nutzen könnte, bräuchte die CPU nur noch für alle 16 Zeichen einmal im Arbeitsablauf unterbrochen werden. Zumindest beim Senden funktioniert das auch gut. Beim Empfangen machte man jedoch die Erfahrung, dass man letztlich wieder fast jedes Zeichen einzeln abholen muss, damit auch die Puffer-Überlauf-Fehler im Rahmen bleiben. Natürlich sollte die Serielle nun ja auch schneller betrieben werden, als alte Lösungen. Die CPU-Last erweist sich schon beim Surfen mit einem einfachen Modem als noch immer sehr hoch.

  3. Generation: Mit diesen Erkenntnissen wurde der 650er Baustein gebaut. Erstmals in dieser Serie waren Sende und Empfangspuffer hardwaremässig mit den Handshakeleitungen der Schnittstelle verbunden. Weiterhin wurde die Grösse des Puffers auf je 32 verdoppelt. Wenn der Chip bemerkt, dass er keine Zeichen mehr empfangen kann, kann er der Gegenstelle unmittelbar eine Pause signalisieren. Die Arbeit der CPU und Software beschränkt sich darauf zu warten, dass Sende- bzw. Empfangspuffer mittels Interruptanforderung einen bestimmten Füllstand über- bzw. unterschreiten und dann Daten zu verschieben. Das Verfahren nennt sich automatic data flow control oder auf deutsch: automatische Datenflusssteuerung. Während die Bufferung nun optimal und mit minimaler CPU-Last funktionerte, wurde ein weiteres Problem bemerkt. Gegenstellen, die ihr Handshake sehr langsam machen (z.B. ein DSP in einem Modem, der das nebenbei macht) verursachen unnötige Pausen im Datenstrom. Dieses wiederum setzt die Gesamtübertragungsleistung herab. Wenn eine höhere BPS-Rate angewählt werden kann, lässt sich das oft verschmerzen, da der erwünschte Durchsatz erreicht wird. Manchmal geht das aber eben z.B. bedingt durch das Modem nicht.

  4. Generation: Wiederum aus diesen Erfahrungen wurde der 750 konzipiert. Neben der Verdopplung der Puffer auf je 64 Zeichen ist bei diesem Baustein das Auto-Flow so erweitert worden, dass letztlich eine Anpassung an die Gegenstelle möglich ist. Das Resultat ist ein gleichmässigerer Datenstrom. Nicht im Amiga verwendet, da wenige DM teurer.

  5. Generation: Der 850 stellt das derzeitige Flaggschiff der Familie da. Allerdings wurde lediglich die Grösse des Buffers nochmals auf je 128 Zeichen verdoppelt. Der Grund dafür war der Bedarf die Last, die die IRDA-Schnittstelle, die beim 750 eingebaut wurde, nochmals zu reduzieren. Das Autoflow Konzept funktioniert perfekt und lässt sich wohl nichtmehr verbessern. Aus Kostengründen nicht nicht im Amiga verwendbar.

Was bietet welche Amiga-Karte?

Dazu wollen wir uns nicht mehr äussern, da es viel Geschrei darum gab. Festzustellen bleibt nur, dass Twister die einzige Erweiterung ist, die wenigstens sowohl den 16C650 einsetzt, als auch Treibersoftware besitzt, die die Auto-Flow-Fähigkeiten auch aktiviert. Zusätzlich besitzt sie wie nur eine deutlich teurere Karte einen Leitungstreiber, der typisch 691.200 BPS sicher überträgt. Da dem einfachen User die Notwendigkeit von Autoflow offenbar nicht klar ist, und somit ein höherer Preis zum Verkaufsnachteil wird, musste auf den Einsatz des 750 und 850 bislang leider verzichtet werden, da er die Karten um weitere 10,- DM verteuert. Wie bereits angedeutet, kann es bedingt durch ein langsames Modem dazu kommen, dass die Übertragungsleistung zu wünschen übrig lässt. In diesem Fall kann man mit einem Tool Auto-Flow ausschalten. Im Genuss des grossen Pufferspeichers, verglichen mit dem 550, bleibt man dennoch.

Ein Blick zu anderen Computern:

Wer erwartet, dass andere Computersysteme moderne Chips als Hardware nutzen, wird zumindest beim heutigen PC eines Besseren belehrt. Es gab zwischenzeitlich tatsächlich mal Geräte, die den Chip benutzen, den auch Twister benutzt (16C650). Da ein normaler User das offensichtlich mangels Kenntnis preislich nicht würdigt, sind gute Lösungen nur noch als teure Zusatzkarten erhältlich, die bei Profi-Usern sehr beliebt sind, weil fast beliebig viele Ports stabil und mit relativ wenig Systemlast betreibbar sind. Die Macs haben seit den ca. 1991 Bausteine im Einsatz, die eigenständig die Daten in den Hauptspeicher transportieren. In den PowerMacs waren so störungsfreie Übertragungsleistungen mit 230.400 BPS bis hoch auf knapp 1.000.000 BPS bei sehr hohem Nutzungsgrad möglich (heute ist dort nur noch USB on Board).