Userport

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Userport des C64

Der Userport ist eine Schnittstelle, die der Anwender (engl. User) für eigene Zwecke verwenden kann. Er bietet ähnlich dem LPT-/Druckerport bei PCs diverse frei programmierbare Leitungen an. So lassen sich damit selbst gebastelte Steuerungen (z. B. für Spielzeug-Eisenbahn, Hausüberwachungssysteme u. ä.) verwirklichen, die externe Geräte ein- und ausschalten können (Ausgangsmodus). Gleichzeitig können aber auch Daten von externen Geräten oder Schaltungen in den C64 eingelesen und verarbeitet werden (Eingangsmodus). Der Userport hat dazu 8 parallele Datenleitungen, die durch geeignete Softwarebefehle für die jeweilig gewünschte Datenrichtung programmiert werden können. Durch weitere Sonderleitungen, wie zum Beispiel Handshake-Leitungen, kann der Transfer von Daten (z.B. bei Drucker-Interfaces) kontrolliert abgewickelt werden. Der Userport-Anschluss (auch Port genannt) befindet sich auf der Rückseite des C64 und ist identisch mit dem des C128, nicht jedoch mit dem des VC-20 oder dem Userport für den Plus/4.

Erweiterungen[Bearbeiten | Quelltext bearbeiten]

Für den Userport gibt es auch verschiedene Steckmodule, um ihn als RS-232-Schnittstelle oder Centronics-Schnittstelle einzusetzen. Weiterhin gibt es Modems, Relaiskarten, EPROM-Programmiergeräte und zahlreiche Sonderanwendungen, die an den Userport angeschlossen werden. Eine häufige Verwendung war der Anschluss eines Resettasters, welche jedoch mit Aufkommen der Fastload-Module (z.B. Action Replay) zunehmend seltener wurde, da diese einen Resettaster mitbrachten. Spieler benutzen den Userport primär zum Anschluss eines 4-Spieler-Joystick-Adapters. Weiterhin gibt es mit dem WiC64 eine WLAN-Erweiterung für den C64 als quelloffene Hardware.
Bei mehrfacher Nutzung des Userports, typischerweise Parallelkabel für einen Floppyspeeder und ein Drucker-Interface, erspart man sich ein ständiges Umstecken mithilfe eines Userport-Expanders[1].

Im Gegensatz zum Expansionsport stehen Daten- und Adressbus der CPU MOS 6510 am Userport nicht zur Verfügung. Das Einblenden oder automatische Starten von Programmen nur per Modul am Userport ist also nicht möglich. Um den Userport zu benutzen, muss immer manuell das zur Hardware passende Programm z. B. über das Diskettenlaufwerk geladen werden.

Maximalströme[Bearbeiten | Quelltext bearbeiten]

Intern führen die meisten Anschlüsse des Userports an den zweiten der beiden CIA-Bausteine des C64. Die Leitungen der CIA sind als Open Collector mit internen Pullup-Widerständen ausgelegt. Die Pullups erlauben Stromentnahme (Leitung auf High/Ausgang) bis etwa 1 mA pro Leitung; die Treibertransistoren sind für etwa 3 mA spezifiziert (Low/Ausgang). Es darf auf keinen Fall eine Spannung größer 0 V ohne entsprechenden Schutzwiderstand o.ä. angeschlossen werden, da der im Falle des Leitungszustands Low/Ausgang in die CIA fließende Strom den jeweiligen Treibertransistor zerstören würde.
Das Schalten von Pins direkt auf Masse oder gegen eine andere Open-Collector-Leitung dagegen ist problemlos möglich, da der Pullup-Widerstand den fließenden Strom dann begrenzt.

Es empfiehlt sich, zum Schutz des CIA2-Bausteins keine Relais oder LEDs direkt anzuschließen, sondern Treiberstufen zwischen zu schalten. Ein zerstörter CIA-Baustein lässt sich nur mit einigem Kosten- und Zeitaufwand reparieren.

Verwendung als serielle RS-232-Schnittstelle[Bearbeiten | Quelltext bearbeiten]

Der Userport ist als RS-232-Schnittstelle verwendbar. Allerdings müssen die Signalpegel in diesem Fall unbedingt extern invertiert und zugleich vom TTL-Standard (0 V/+5 V) auf den RS232-Standard (+/-12 V) gewandelt werden. Bei direktem Anschluss von RS-232-Pegeln an den Port droht Zerstörung des CIA-Chips. Die genaue Belegung für RS-232 ist im nächsten Abschnitt erklärt.

Anschlussbelegung[Bearbeiten | Quelltext bearbeiten]

Der Userport ist als 24-poliger Platinenstecker ausgeführt, wobei sich je 12 Pole auf der Ober- und Unterseite der Platine befinden. Die Pole auf der Oberseite sind von 1 bis 12 durchnummeriert (beim Blick von außen auf den Port: von links beginnend), die auf der Unterseite tragen die Buchstaben A bis N, wobei die Buchstaben G und I wegen der Verwechslungsgefahr mit den Ziffern 6 und 1 nicht verwendet werden. Zwischen den Pins 1 und 2 und zwischen 10 und 11 hat die Platine Schlitze, die mittels zweier Stege auf der Steckerseite gegen verdrehtes Einstecken schützen. Vorsicht: Nicht alle angebotenen Stecker bieten diesen Verpolungsschutz, beispielsweise die blauen von Conrad.

Außenansicht auf den Stecker


Pin Signal Bemerkung Pin Signal Bemerkung
Oberseite Unterseite
1 GND Masse A GND Masse
2 + 5 V max. 100 mA (s. Hinweis) B FLAG 2 Flag-Signal (CIA 2)
3 RESET Reset C PB 0 CIA 2 Port B Bit 0
4 CNT 1 Zähler-Signal (CIA 1) D PB 1 CIA 2 Port B Bit 1
5 SP 1 Serieller Port (CIA 1) E PB 2 CIA 2 Port B Bit 2
6 CNT 2 Zähler-Signal (CIA 2) F PB 3 CIA 2 Port B Bit 3
7 SP 2 Serieller Port (CIA 2) H PB 4 CIA 2 Port B Bit 4
8 PC2 Port Control (CIA 2) J PB 5 CIA 2 Port B Bit 5
9 SER. ATN IN Serial Attention K PB 6 CIA 2 Port B Bit 6
10 9 V AC max. 100 mA L PB 7 CIA 2 Port B Bit 7
11 9 V AC max. 100 mA M PA 2 CIA 2 Port A Bit 2
12 GND Masse N GND Masse

Hinweise:

  • Ein Strich über dem Signalnamen bedeutet, dass das Signal Aktiv-Low, also beim Pegel von 0 V aktiv ist.
  • Beim SX64 ist Pin 11 (9 V Wechselspannung) mit Pin 12 (GND) kurzgeschlossen. Das ist nicht in den Commodore-Schaltplänen eingezeichnet. Es handelt sich um einen Herstellungsfehler.
  • Die 5V-Leitung ist zwar am gleichen Netzwerk wie z.B. die mit 450 mA angegebene 5V-Leitung am Expansionsport angeschlossen, jedoch mit einer recht dünnen langen Leiterbahn angebunden, woraus sich der geringere Maximalstrom ergibt.
  • Pin 9/Serial Attention ist identisch mit Pin 3 der seriellen Schnittstelle. Entsprechend kann über diesen Pin seriellen Geräten eine ATN-Anforderung gesendet werden oder eine Anforderung seitens des C64 erkannt werden. Eine Signalisierung in Richtung C64 ist jedoch nicht möglich.
  • Gehäuse sind inzwischen schwer zu bekommen, die Gehäuse für 37polige D-Sub-Stecker passen jedoch gerade.[2]

Das angebliche Fehlen der 9 V Wechselspannung am Userport[Bearbeiten | Quelltext bearbeiten]

Durch das Wegfallen des 12-V-Spannungsreglers bei den neuen 250469-Boards wurde in der Zeitschrift 64'er fälschlicherweise geschrieben, der neue SID 8580 würde ausschließlich 5 V= benötigen. Die 9 V Wechselspannung würde daher nicht mehr benötigt und am Userport fehlen. [3] [4] [5]

Diese Aussagen sind schlichtweg falsch. Der neue SID 8580 benötigt zusätzlich zu den 5 V= auch noch 9 V=, die aus den 9 V~ erzeugt wird. Außerdem werden die 9 V~ noch für das Taktsignal (50 Hertz/60 Hertz je nach Netzfrequenz der Stromnetzes) der beiden CIA-Echtzeituhren und für die Motoransteuerung der Datassette benötigt.
Jede C64-Platine hat 9 V Wechselspannung am Userport.

Signalbeschreibung[Bearbeiten | Quelltext bearbeiten]

GND
Die Signalmasse (ground) des C64 bzw. 0 Volt der Spannung. GND ist an allen vier Ecken des Userport-Steckers verfügbar.
+5V
5 Volt Gleichspannung (DC) des C64. (bezogen auf GND)
9V AC
9 Volt Wechselspannung (AC). Gemessen wird zwischen Pin 10 und 11 im Wechselspannungsbereich.
RESET
Beim Einschalten zieht der Rechner diesen Anschluss für eine gewisse Zeit auf Low-Pegel, um einen definierten Ausgangszustand für manche Chips sicherzustellen. Legt man diesen Pol von außen auf Low, führt der C64 einen Reset (Kaltstart) aus. Das RESET-Signal wirkt auch auf die am seriellen Bus und am Expansionsport angeschlossenen Peripherie-Geräte.
CNT 1
Zählereingang des seriellen Ports vom CIA 1.
CNT 2
Zählereingang des seriellen Ports vom CIA 2.
SP 1
Serieller Ein-/Ausgang des Schieberegisters von CIA 1
SP 2
Serieller Ein-/Ausgang des Schieberegisters von CIA 2
PC2
Ausgangs-Handshake-Leitung vom CIA 2. Ein Lesen oder Schreiben auf das Port-B-Datenregister bewirkt eine Aktivierung des Signals für die Dauer eines Taktes.
SER. ATN IN
Dieser Anschluss ist mit der ATN-Leitung (Serial Attention In/Out) verbunden. Mehr dazu siehe serielle Schnittstelle.
FLAG 2
Dieser Eingang reagiert auf negative Flanken und kann als allgemeiner Interrupt-Eingang benutzt werden. Eine negative Flanke setzt das FLAG-Bit im Interrupt-Register (Bit 4 von $DD0D bzw. 56589) von CIA 2. Ist das zugehörige Maskenbit gesetzt (FLAG-Interrupt zugelassen), wird ein NMI ausgelöst. Deswegen wird bei der Verwendung des Userports als RS-232-Schnittstelle hier und an PB0 die RXD-Leitung angeschlossen.
PB0..PB7
Der Port B des CIA-2-Chips ist frei verfügbar. Jedes der 8 Signale kann entweder als Eingabe- oder Ausgabeleitung definiert werden. Bei der Verwendung als RS-232, siehe auch C64-RS-232-Schnittstelle, gilt folgende Belegung:
PB0 = RXD, PB1 = RTS, PB2 = DTR, PB3 = RING, PB4 = DCD, PB5 unbelegt, PB6 = CTS, PB7 = DSR.
RXD muss außerdem auch noch mit FLAG 2 verbunden werden.
PA2
Diese Leitung (Port A des CIA 2, Bit 2) ist wie PB0 bis PB7 einstellbar, und ist bei der Verwendung als RS-232 der TXD-Ausgang.

Programmierung[Bearbeiten | Quelltext bearbeiten]

Der Port B des CIA 2 umfasst 8 Bit. Die Datenrichtung dieser acht Port-Leitungen wird durch das DATA DIRECTION REGISTER BYTE (Datenrichtungs-Registerbyte, DDRB) bestimmt. Dieses liegt bei Adresse 56579 ($DD03). Ist ein Bit im DDRB gesetzt, dann ist das entsprechende Port-Signal eine Ausgabeleitung. Entsprechend wird durch ein gelöschtes Bit, also eine "0", eine Eingabeleitung definiert. Beim Einschalten des C64 sind alle Leitungen Sicherheitshalber als Eingang geschaltet; man darf sie nur auf Ausgang schalten, wenn sichergestellt ist, dass kein Baustein der extern angeschlossenen Schaltung eine Spannung anlegt bzw. dass die oben genannten Maximalströme eingehalten werden, da sonst der CIA-Chip durchbrennen kann.

Beispiel 1: Ein externes Gerät, das an PB0 (Bit 0 des CIA2-Ports) angeschlossen ist, soll eingeschaltet werden. Das Port-Register-Byte (PRB) darf erst "nach" der Wahl der Datenrichtung gesetzt oder gelöscht werden. Dessen Daten entsprechen dann den auf den Ausgängen wiedergegebenen Spannungspegeln.

POKE 56579,1: REM DDRB DATENRICHTUNG FUER BIT 0       hier auf 1 = "Ausgang"
              BINAER "0000 0001"    

POKE 56577,1: REM PRB DATENAUSGABE FUER BIT 0         hier auf 1 = "ein"
              BINAER "0000 0001"

Beispiel 2: Sieben externe Geräte, die an PB0 bis PB6 angeschlossen sind, sollen ausgeschaltet werden.

POKE 56579,127: REM DIE SIEBEN UNTEREN BITS AUF AUSGANG SCHALTEN
                BINAER "0111 1111"   

POKE 56577,0: REM DIE SIEBEN UNTEREN BITS AUF 0 (=AUS) SETZEN
              BINAER "0000 0000"                      ("1000 0000" geht auch für diesen Fall)
 

Will man die einmal gewählte Datenrichtung der einzelnen Bits in 56579 immer beibehalten, genügt es, das Register 56577 einmal zu beschicken. Der C64 merkt sich die Datenrichtung der einzelnen Bits bis auf Widerruf (oder bis zu einem Reset).

Bei der Verwendung als RS-232 (z. B. mit dem Befehl OPEN 2,2,2) werden die Signale automatisch passend auf Ein- und Ausgang geschaltet.

Quellen[Bearbeiten | Quelltext bearbeiten]

  1. Thema: Aktiver Userport-Expander die x-te auf Forum64.de
  2. D-Sub 37 als Gehäuse: Thema: Druckerkabel für den Userport basteln auf Forum64.de
  3. Zeitschrift 64'er Ausgabe 9/87, Seite 9 - Spalte 1
  4. Zeitschrift 64'er Ausgabe 4/89, Seite 26 - Spalte 4
  5. Zeitschrift 64'er Ausgabe 7/92, Seite 23 - Spalte 3

Weblinks[Bearbeiten | Quelltext bearbeiten]

WP-W11.png Wikipedia: Userport