![]() |
VOOZH | about |
Die serielle Schnittstelle des C64 ist für den Anschluss von Peripheriegeräten, insbesondere für Floppylaufwerke und Drucker gedacht. Technisch handelt es sich um eine spezielle serielle Commodore-Variante des parallelen IEEE-488/IEC-625-Busses, weswegen er häufig auch als IEC-Bus oder CBM-Bus erwähnt wird. Diese Schnittstellenvariante ist nicht kompatibel mit der RS-232, die im PC-Bereich unter der Bezeichnung "serielle Schnittstelle" läuft.
Während serielle Schnittstellen meist nur für die Verbindung zwischen zwei Geräten eingesetzt werden (z.B. RS-232), handelt es sich beim IEC-Bus um einen seriellen Bus. Es kann also mehr als nur ein Gerät gleichzeitig an den Rechner angeschlossenen werden, die meisten Commodore-Peripheriegeräte haben zu diesem Zweck Durchschaltbuchsen. Theoretisch sind bis zu 31 Geräte möglich (Gerätenummern 0 bis 30, Nummer 31 ist reserviert für UNTALK/UNLISTEN), das Betriebssystem des C64 kann allerdings nur Geräte mit den Gerätenummern 4 bis 30 an diesem Bus nutzen, da die Nummern 0 bis 3 intern reserviert sind. Praktisch liegt die Obergrenze jedoch bei etwa 8 Geräten. Das liegt daran, dass die Ausgänge des im Gerät eingebauten Chips (invertierender Treiber 7406) mit einem maximalen Strom von ca. 40 mA belastet werden können. Jedes Gerät das am seriellen Bus angeschlossen ist, erzeugt eine Last von ca. 5 mA.
Die Auswahl, mit welchem Gerät nun Daten ausgetauscht werden, erfolgt über die dem Gerät zugeordnete Gerätenummer. Diese Nummer, im Bereich von 0 bis 30 (nutzbar sind nur 4 bis 30) muss am Gerät eingestellt sein, und darf nur einmal vorkommen. Die Standardnummer für den ersten Drucker ist 4 und für das erste Floppylaufwerk 8.
Ein PC mit entsprechendem Kabel (siehe X1541) kann mit einer Floppy verbunden werden und mit entsprechender Datenübertragungs-Software von Diskette lesen und auf Diskette schreiben. Diese Datenübertragungs-Software benutzt dann ein Datenübertragungsprotokoll, das vom Timing her recht gutmütig ist. Das Zeitverhalten des IEC-Busses ist im allgemeinen jedoch sehr zeitkritisch. Zum Beispiel kann ein PC unter Multitasking-Betriebssystemen (Windows, Linux...) gegenüber dem C64 keine Floppy emulieren, da die nötigen maximalen Latenzzeiten von wenigen Mikrosekunden (insbesondere bei Schnellladern) von PC-Seite aus nicht einzuhalten sind. Software wie 64HDD, 1541EMU, Server64 oder 1541 läuft deswegen prinzipiell nur unter DOS.
Im Normalbetrieb (LOAD, unmodifizierte KERNAL-Routinen) schafft die serielle Schnittstelle ca. 400 Byte/Sekunde mit einer 1541 und ca. 650 Byte/s mit einem SD2IEC. Mit JiffyDOS und einer 1541 werden etwa 2,4 kByte/Sekunde übertragen, mit einem SD2IEC etwa 8,6 kByte/Sekunde. Das theoretische Maximum beträgt etwa 20 bis 25 kByte/Sekunde[1].
Die serielle Schnittstelle ist eine 6-polige DIN-Buchse (DIN 45322).
Die Signalrichtung in der folgenden Tabelle gilt aus Sicht des Computers.
| Pin | Bezeichnung | Signalrichtung | Bemerkung |
|---|---|---|---|
| 1 | SERIAL SRQ | IN | Serial Service Request In, beim C128 "Fast Serial Clock" |
| 2 | GND | - | Ground, Signalmasse (0 V) |
| 3 | SERIAL ATN | OUT | Attention, für die Auswahl eines Geräts und Start/Ende einer Übertragung |
| 4 | SERIAL CLK | IN/OUT | Clock, Takt für die Datenübertragung |
| 5 | SERIAL DATA | IN/OUT | Daten |
| 6 | SERIAL RESET | OUT(/IN) | Reset, bei älteren VC 20 unbelegt |
SRQ: Serial Service Request In
Bei der 1541 ist dieses Signal nicht mit der Laufwerkselektronik verbunden.
Beim C64 wird dieses Signal nicht vom KERNAL verwendet, ist aber mit der Leseleitung des Kassettenports verbunden (wobei hier nur negative Signalflanken erkannt werden können und nicht der Signalpegel).
Beim C128 wird das Signal für die "Fast Serial Clock" (bzw. "Burst Mode") der Diskettenlaufwerke 1570/1571/1581 benutzt.
ATN: Serial Attention Out
Sobald der Rechner dieses Signal aktiviert (auf Low zieht), quittieren angeschlossene Geräte es[2] indem sie die DATA-Leitung aktivieren, ggf. gerade ausgeführte Aktivitäten zuende führen und danach die DATA-Leitung wieder deaktiveren. Daraufhin vom Rechner geschickte Bytes werden durch die Laufwerke als Befehle interpretiert, die auch Geräteadresse und ggf. Sekundäradresse beinhalten.
Die Laufwerke können ATN nicht aktivieren, sondern nur lesen.
CLK: Serial Clock In/Out
Dieses Signal ist der Zeittakt für die gesendeten Daten. Der Takt wird immer von dem Gerät erzeugt, das gerade sendet. Bei der steigenden Flanke wird vom Empfänger das Datenbit (DATA) übernommen.
DATA: Serial Data In/Out
Die Daten werden auf dieser Leitung Bit für Bit nacheinander übertragen. Bei einem Byte wird zuerst das niederwertigste Bit 0 (LSB) und am Ende das höchstwertige Bit 7 (MSB) übertragen.
RESET: Serial Reset
Damit wird ein Reset bei den angeschlossenen Geräten ausgelöst. Bei frühen C64-Modellen kann diese Leitung auch als Eingang verwendet werden, um den Computer zurückzusetzen (z. B. Reset-Taster), bei späteren Modellen ist dies nicht möglich. Daher sollte im allgemeinen für Reset-Taster besser die Reset-Leitung am Userport verwendet werden.
Geeignete Kabel verbinden alle Pins und die Schirmung 1:1 durch. Insbesondere darf die Schirmung nicht mit einer der Leitungen gebrückt sein. Die Buchsen der Geräte legen die Schirmung auf GND (Pin 2).
Für Video gedachte Kabel verbinden die Schirmung häufig mit Pin 3, was im Zusammenhang mit IEC zu Problemen führt.
Die Leitungen sind als Open-Collector mit 1kΩ-Pullup-Widerständen ausgelegt. Sowohl im Host (C64/...) als auch in den Laufwerken sind Pullups nach 5 V eingebaut. Daraus ergeben sich unterschiedliche Probleme:
Diese Probleme kann es auch abgestuft geben, z. B. dass bei mehreren Laufwerken am Bus manche Schnelllader nicht mehr funktionieren.
Lösungsansätze
Im Betrieb am C64 werden normalerweise nur die Leitungen Data, Clock und ATN benutzt.
Data und Clock können vom C64 gesetzt und gelesen werden, ATN nur gesetzt.
In BASIC ist die Fehlersuche relativ einfach (Schaltpläne in Artikel Hauptplatine, siehe auch Artikel CIA).
POKE56576,11 sollte ATN Low (<1V) sein (mit Multimeter nachmessen), Clock und Data sollten High (>3V) sein, PRINTPEEK(56576)AND192 sollte eine 192 zurückgeben.POKE56576,19 sollte Clock Low sein (ATN und Data sollten High ausgeben), PRINTPEEK(56576)AND192 sollte eine 128 zurückgeben.POKE56576,35 sollte Data Low sein (ATN und Clock sollten High ausgeben), PRINTPEEK(56576)AND192 sollte eine 64 zurückgeben.| 👁 Image |
Wikipedia: CBM-Bus |