CBM-Bus

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
CBM-Bus-Anschluss an einem Commodore 64

Der CBM-Bus ist ein von Commodore für seine Heimcomputer-Serie entwickelter serieller Bus.

Er ist eine proprietäre serielle Variante des IEEE-488-Busses und dient zum Anschließen von Peripheriegeräten (hauptsächlich Diskettenlaufwerke und Drucker). Der Bus fand sich in den 6502-basierten Commodore-Heimcomputern vom VC 20 bis zum C128, während die professionellen PET/CBM-Rechner den genormten parallelen IEEE-488-Bus verwendeten. Die Rechner der Commodore-Amiga-Serie verwendeten keine derartige Schnittstelle, stattdessen kam Anschlüsse für externe Diskettenlaufwerke, ein Parallelport ähnlich dem der IBM-kompatiblen PCs und bei größeren bzw. schnelleren Modellen (A3000 und A4000T) der SCSI-Bus zum Einsatz.

Der CBM-Bus wurde in der Literatur der 1980er-Jahre oft auch als (serieller) IEC-Bus bezeichnet. Dies ist aber nicht korrekt, da der CBM-Bus nicht durch die International Electrotechnical Commission standardisiert war.

Kennzeichnung[Bearbeiten | Quelltext bearbeiten]

Im Unterschied zu IEEE 488 (amerikanisch) oder dem IEC-625-Bus (international) erfolgt die Datenübertragung beim CBM-Bus seriell. Dadurch werden weniger Signalleitungen erforderlich, so dass Einsparungen bei den Ein/Ausgabe-Chips als auch an den Kabeln und den zugehörigen Steckverbindern möglich wurden. Zusätzlich werden beim CBM-Bus einige Funktionen, für die bei IEEE 488 eigene Steuerleitungen vorgesehen sind, als speziell formatierte Dateninhalte über die normale Datenleitung übertragen. Letztlich werden somit nur 5 statt der 24 Leitungen des IEEE-488-Standardsteckers gebraucht. Das Busprotokoll ist aber bei beiden Bussen sehr ähnlich.

Anzahl der nutzbaren Geräte[Bearbeiten | Quelltext bearbeiten]

Theoretisch können bis zu 31 Geräte angeschlossen werden (wobei jedes Gerät ab dem zweiten kettenartig an das jeweils vorige angeschlossen wird), das Betriebssystem nutzte davon 27 Geräteadressen (4 bis 30, 31 ist für untalk/unlisten reserviert) aus. Praktisch liegt die Obergrenze jedoch bei etwa 8 Geräten, was sich aus der möglichen Stromstärke der Ausgangstreiber-Bausteine und dem Strombedarf der Eingangstreiber ergibt. Die Anzahl war üblicherweise völlig ausreichend.

Üblicherweise wurden die Adressen 4 und 5 für Drucker verwendet, 6 für Plotter, und 8 bis 11 für Laufwerke. Diese Zuordnung ist dem Computer selbst jedoch nicht bekannt; so war es etwa durchaus möglich, den Computer anzuweisen, ein Programm auf den Drucker zu "speichern", was zum Ausdruck eines "Zeichensalats" führte.

Die Nummern 0 bis 3 waren für "unintelligente" Peripheriegeräte ohne eigene CPU reserviert, die nicht über den CBM-Bus angeschlossen wurden: 0 für die Tastatur, 1 für die Datasette, 2 für Modems und andere über RS-232 angeschlossene Geräte und 3 für den Bildschirm. Das Betriebssystem sendet daher diese Gerätenummern nicht auf den Bus, sondern verwendet die jeweiligen internen Zugriffsroutinen, wenn die üblichen Datei-I/O-Funktionen verwendet werden. Für Programmierer, die direkt die Betriebssystemroutinen für die Ansteuerung des seriellen Busses aufrufen, ist es aber auch möglich, Geräte mit den Nummern 0 bis 3 am seriellen Bus zu adressieren.

Anschluss[Bearbeiten | Quelltext bearbeiten]

Pinnummern
Pinout[1]
Pin Name Function
1 /SRQIN Service-Request-Eingang für Peripherie-Anfrage an Host (C64), beim C128 für schnelle Übertragung verwendet.[2]
2 GND Masse[1]
3 /ATN Serial ATN Ein-/Ausgang. Vom Host aus Masse gezogen beim Begin einer seriellen Datenübertragung.[2]
4 /CLK Serial CLK Ein-/Ausgang für Software-Handshake.[2]
5 /DATA Serial DATA Ein-/Ausgang, bitweise Datenübertragung.[2]
6 /RESET Reset für Peripherie und ältere C64.[2]

Steuerchip MOS 6522[Bearbeiten | Quelltext bearbeiten]

Erkauft wird der Preisvorteil des seriellen Aufbaus durch eine stark verringerte Übertragungsgeschwindigkeit. Da der verwendete Steuerchip MOS Technology VIA (MOS 6522) sich kurz vor dem Verkaufsstart des VC-20 als fehlerhaft in der Serialisierungs- und Parallelisierungseinheit herausstellte, musste diese Aufgabe durch eine in kürzester Zeit "zusammengeflickte" und suboptimal programmierte Firmware vom Prozessor mittels Bit-Banging übernommen werden, wodurch die Geschwindigkeit nochmals stark absank. Durch den kleinen Speicher dieses Rechners und die dementsprechend geringe Größe seiner Programme fiel die niedrige Ladegeschwindigkeit jedoch beim VC-20 noch nicht so stark ins Gewicht. Für damalige Drucker ist die Geschwindigkeit ohnehin mehr als ausreichend.

Steuerchip MOS CIA[Bearbeiten | Quelltext bearbeiten]

Obwohl der C64, im Unterschied zum VC-20, die in dieser Hinsicht fehlerfreien CIA-Chips (MOS 6526) verwendete, wurde aus Gründen der Rückwärtskompatibilität zum VC-20 und zu dessen Floppy VC1540, von der noch große Lagerbestände vorhanden waren, weiter die suboptimale Softwareversion des Busses verwendet. Auch wurde im speziell für den C64 geschaffenen Diskettenlaufwerk VC1541 weiterhin nicht der CIA, sondern der billigere, aber fehlerhafte VIA-6522-Chip verbaut. Da beim C64, anders als beim VC-20, der Prozessor vom Videochip einmal je Textzeile für jeweils 40 Taktzyklen angehalten wird, musste die Busgeschwindigkeit im Vergleich zum VC-20 sogar noch weiter abgesenkt werden, damit der C64 während dieses Haltezustandes kein Bit verpassen konnte. Im Zusammenhang mit dem sehr viel größeren Speicher dieses Rechners stiegen die Ladezeiten für umfangreiche Programme in den Bereich mehrerer Minuten an.

Geschwindigkeit[Bearbeiten | Quelltext bearbeiten]

Variante Geschwindigkeit Effektive Bitrate
Commodore 64 + 1541 0400 byte/s 03.200 bit/s
Commodore 64 + 1541 mit Schnelllader 2.560 byte/s[3] 20.480 bit/s
Commodore 128 + 1571 5.200 byte/s[4] 41.600 bit/s
Theoretischer 20-µs-Takt 6.250 byte/s 50.000 bit/s

Turbotreiber[Bearbeiten | Quelltext bearbeiten]

Es wurden diverse externe Turbo-Lösungen zur schnellen Floppy-Ansteuerung beim C64 über seine CIA-Chips populär. Diese verwenden entweder zusätzliche Hardware (Parallelkabel) oder stark optimierte Busprotokolle auf der vorhandenen Hardware, wobei gleichzeitig die GCR-Dekodierung der Daten, die Datenflusskontrolle und die softwaremäßige Serialisierung und Deserialisierung verbessert waren. Indem bei diesen sogenannten Schnell-Ladern stets der Computer statt des jeweils sendenden Partners den Bustakt vorgab, entfiel auch das Problem der im Haltezustand verpassten Bits.

Die meisten kommerziellen Programme verwendeten eine Vorgehensweise, bei der zunächst ein kleines Beschleunigerprogramm mit der Standardmethode geladen wurde, welches dann in den RAM-Speicher von Computer und Laufwerk zueinander passende Routinen zum schnelleren Busbetrieb ablegte. Anschließend konnte das eigentlich gewünschte Programm mit hoher Geschwindigkeit geladen werden. Da viele Programme sich nur durch den Reset des Computers beenden ließen, musste das Beschleunigerprogramm häufig neu geladen werden, was zusammen mit dem Diskettenwechsel den Zeitvorteil deutlich reduzierte.

Es gab auch Dauerlösungen, die auch bei eigenen Programmen ohne weitere Arbeit ein schnelles Laden ermöglichten. Oft waren diese in Form eines Steckmoduls für den Computer realisiert; dies enthielt direkt die computerseitige Routine für den schnellen Busbetrieb, während die laufwerksseitige Routine jeweils vor dem Laden automatisch an das Laufwerk übermittelt wurde. Andere Lösungen verwendeten auf beiden Seiten um entsprechende Routinen erweiterte ROMs, welche direkt in Computer und Laufwerk eingebaut wurden, und teilweise zusätzlich ein paralleles Kabel zwischen dem Userport des Rechners und einigen ansonsten ungenutzten Pins eines Chips im Laufwerk. Laufwerksseitig wurde meist ein zusätzlicher DIP-Sockel mit angelötetem Kabel unter diesen Chip eingebaut, zusätzlich musste eine Öffnung in das Laufwerksgehäuse geschnitten werden, um das Kabel hindurchzuführen. Diese Lösungen waren aufwendiger, erreichten aber die beste Leistung. Gängige Hardware-Lösungen waren z. B. SpeedDOS, DolphinDOS und JiffyDOS.

Frühe Schnell-Lader erreichten ca. fünffache Ladegeschwindigkeiten, raffiniertere spätere Varianten schafften bis zum 25- oder 30-fachen der normalen Geschwindigkeit.

Der schnelle CBM-Bus auf dem C128[Bearbeiten | Quelltext bearbeiten]

Erst auf dem C128 wurde endlich die lange geplante hardwaremäßige Serialisierung genutzt und somit die Busgeschwindigkeit bereits ab Werk auf einen erträglichen Wert gesteigert. Voraussetzung ist die Verwendung der speziellen C128-Laufwerke VC1570, VC1571 oder VC1581, da bei diesen auch auf Laufwerksseite der fehlerfreie CIA-Chip zum Einsatz kommt.

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. a b C64 Serial I/O pinout and wiring @ old.pinouts.ru. 16. Dezember 2013. Abgerufen am 2. April 2016.
  2. a b c d e C-64 Workshop / Pin Connections. 10. Dezember 2005. Abgerufen am 2. April 2016.
  3. Design case history: the Commodore 64. 1985. Abgerufen am 2. April 2016: „Programming tricks used by Epyx have yielded transfer rates of up to 2.5 kilobytes per second.“
  4. Commodore 1571 disk drive specifications. Commodore Business Machines, Inc.. Abgerufen am 27. April 2016.