RS-232
RS-232 - heute als EIA-232 bezeichnet - ist ein Standard für eine serielle Schnittstelle, die in den frühen 1960er Jahren von einem US-amerikanischen Standardisierungskomitee eingeführt wurde. Sie ist ebenso hinsichtlich der Funktion als ITU-T Empfehlung V.24 standardisiert und bekannt. Diese Schnittstelle wird vor allem für Modems und Akustikkoppler, aber auch für manche Drucker und andere Geräte (z.B. Eprommer) verwendet.
Der VC-20, der C64 und der C128 bieten eine solche Schnittstelle über den Userport an (Signal-Belegung siehe dort), wobei allerdings die dort verwendeten TTL-Pegel durch eine externe Schaltung an die V.28-Pegel angepasst werden müssen (z.B. mit Steckmodul VC-1011A für den VC-20). Aus Softwaresicht emulieren[1] diese Rechner einen MOS 6551[2][3] ACIA Schnittstellenbaustein, wie er etwa im CBM-II und Plus/4 zum Einsatz kommt. Die Emulation (die Routinen befinden sich im KERNAL-ROM) arbeitet allerdings nicht so schnell wie ein echter 6551-Chip, maximal sind darüber 2.400 Baud (statt der 19.200) möglich. Der 6551 hat drei wichtige Register, eine Steuerregister, ein Befehlsregister und ein Statusregister. Die gewünschten Werte für die ersten beiden Register, die nur geschrieben werden können, werden der Emulation als CHR$-Codes im (Pseudo-)Dateinamen (hier max. 4-stellig) des OPEN-Befehls für die Schnittstelle mitgeteilt. Das Statusregister kann nur gelesen werden, wozu die Systemvariable ST dient (siehe Details unten).
C64 zu RS232-Schnittstelle[Bearbeiten | Quelltext bearbeiten]
Gemäß Andreas Booses News-Posting in comp.sys.cbm[4] mit der Schaltung für die Pegelkonvertierung von 0 V und 5 V bei Ausgänge auf praktisch ca. -8 V und +8 V (von theoretischen Werten -12 V und +12 V) bei Eingängen werden die Pegel bis -30 bzw. +30 V akzeptiert und auf die entsprechenden TTL-Pegel umgewandelt.[5]
Userport C64 C64 RS232 (Platinenstecker) (DB25-Stecker) _________ Datenflussrichtung | | PA2 M-----------11-| |-14------------ TXD (2) -> PB1 D-----------10-| |--7------------ RTS (4) -> PB6 K-----------12-| MAX 232 |-13------------ CTS (5) <- FLAG2 B---+--------9-| |--8------------ RXD (3) <- PB0 C---| | |--3--|+-| VCC 2-----------16-| |--1-----| GND N------+----15-| | |--|+-2-| |--5--|+-| |--+|-6-|_________|--4-----| | |--------------------------------- GND (7) -|+- Kondensator 22µF/16V - + Polung
Belegung:
Signal | Userport-Anschluss | C64-Signal |
---|---|---|
TXD | M | PA2 |
RXD | C | PB0 |
B | FLAG2 | |
RTS | D | PB1 |
DTR | E | PB2 |
RING | F | PB3 |
DCD | H | PB4 |
CTS | K | PB6 |
DSR | L | PB7 |
GLINK-LT-A00[Bearbeiten | Quelltext bearbeiten]
GLINK-232T[Bearbeiten | Quelltext bearbeiten]
- max. 230400 baud
Link232[Bearbeiten | Quelltext bearbeiten]
http://www.go4retro.com/projects/link232/
EZ-232[Bearbeiten | Quelltext bearbeiten]
SwiftLink kompatibel
Silversurfer[Bearbeiten | Quelltext bearbeiten]
http://wiki.icomp.de/wiki/Silversurfer
HART[Bearbeiten | Quelltext bearbeiten]
http://mikenaberezny.com/hardware/c64-128/hatronics-hart-rs-232/
DUART[Bearbeiten | Quelltext bearbeiten]
http://www.ide64.org/duart.html zweimal bis zu 115.200 bps
Steuerregister (Kontrollregister)[Bearbeiten | Quelltext bearbeiten]
Bit 0 bis 3[Bearbeiten | Quelltext bearbeiten]
Hier wird die Übertragungsgeschwindigkeit in "Bits pro Sekunde" (bps bzw. Baud bei Übertragungseinheit von 1 Bit) eingestellt.
Dezimalwert | Übertragungsgeschwindigkeit [Bit/s] |
---|---|
0 | - |
1 | 50 |
2 | 75 |
3 | 110 |
4 | 134,5 |
5 | 150 |
6 | 300 |
7 | 600 |
8 | 1.200 |
9 | 1.800 |
10 | 2.400 |
Bit 4[Bearbeiten | Quelltext bearbeiten]
Nicht benutzt.
Bit 5 bis 6[Bearbeiten | Quelltext bearbeiten]
Dezimalwert | Anzahl der Datenbits |
---|---|
0 | 8 |
32 | 7 |
64 | 6 |
96 | 5 |
Bit 7[Bearbeiten | Quelltext bearbeiten]
Dezimalwert | Anzahl der Stoppbits |
---|---|
0 | 1 |
128 | 2 |
Befehlsregister (Kommandoregister)[Bearbeiten | Quelltext bearbeiten]
Bit 0[Bearbeiten | Quelltext bearbeiten]
- 3-Draht-Modus (Software-Handshake-Protokoll):
- Die Datenflusskontrolle, also ob z.B. die gesendeten Daten vom Empfänger übernommen werden können, muss durch spezielle, im Datenstrom eingeflochtene Steuercodes realisiert werden (XON/XOFF-Codes: XON=$11, XOFF=$13).
- Empfänger und Sender müssen sich über die Flusskontrolle einig sein bzw. überhaupt implementieren. XON/XOFF-Codes haben spezielle Bedeutung und können als Wert nicht unmittelbar transportiert werden.
- Eine Verbindungskabel kommt mit 3 Adern aus.
- X-Draht-Modus (Hardware-Handshake-Protokoll):
- Durch zusätzliche Hardware-Leitungen, zumindest RTS (PB1) und CTS (PB6), erfolgt die Flusskontrolle. Das Verhalten der Leitungen und welche weiteren Signale erforderlich sind, ist in realen Implementierungen nicht einheitlich.
- Mindestens ein 5-adriges Kabel ist für die Verbindung notwendig.
Dezimalwert | Handshake-Art |
---|---|
0 | 3-Draht-Modus (Software-Protokoll) |
1 | X-Draht-Modus (Hardware-Protokoll) |
Bit 1 bis 3[Bearbeiten | Quelltext bearbeiten]
Nicht benutzt.
Bit 4[Bearbeiten | Quelltext bearbeiten]
- Vollduplex: Daten können gleichzeitig empfangen und gesendet werden, also der Datentransfer kann in beiden Richtungen (auch mit unterschiedlichen Geschwindigkeiten) passieren. (Standard)
- Halbduplex: Hier werden die Daten zu einem Zeitpunkt entweder nur empfangen oder gesendet, also immer nur in eine Richtung übertragen.
Dezimalwert | Übertragungsart |
---|---|
0 | Vollduplex |
16 | Halbduplex |
Bit 5 bis 7[Bearbeiten | Quelltext bearbeiten]
Dezimalwert | Paritätsprüfung |
---|---|
0, 64, 128, 192 | keine |
32 | ungerade |
96 | gerade |
160 | mark (Paritätsbit immer 1) |
224 | space (Paritätsbit immer 0) |
Statusregister[Bearbeiten | Quelltext bearbeiten]
Das Statusregister (Systemvariable ST) hat bei der RS-232-Übertragung eine andere Bedeutung als sonst üblich.
Es kann in BASIC abgefragt werden, jedoch wird es bei jedem Lesen gelöscht! Daher sollte es in einer anderen Variable zwischengespeichert werden, um es später für mehrfache Abfragen nutzen zu können.
Bit-Nr. | Bedeutung |
---|---|
0 | Paritätsfehler |
1 | Rahmenfehler (Start-/Stoppbit) |
2 | Empfängerpuffer voll |
3 | Empfängerpuffer leer |
4 | CTS-Signal fehlt |
5 | unbenutzt |
6 | DSR-Signal fehlt |
7 | BREAK-Signal empfangen |
Programmierung in BASIC[Bearbeiten | Quelltext bearbeiten]
Die Programmierung der Schnittstelle erfolgt in BASIC mit den üblichen Ein/Ausgabe-Befehlen (OPEN, CLOSE, PRINT#, CMD, GET#, INPUT#) sowie der Systemvariable ST. Dabei sind allerdings einige Dinge zu beachten:
- Der OPEN-Befehl legt am oberen Ende des Variablenspeichers zwei je 256 Byte große Datenpuffer (einer für Ausgabe, einer für Eingabe) an. Implizit wird gleichzeitig ein CLR-Befehl ausgeführt, d.h. alle Variablen sind anschließend gelöscht. Sollten darüber hinaus weniger als 512 Byte Variablenspeicher vorhanden sein, wird der obere Teil des BASIC-Programms kommentarlos überschrieben.
- Durch CLOSE werden die beiden Puffer wieder entfernt und wie bei OPEN der Variablenspeicher gelöscht. Befinden sich noch Daten im Ausgabepuffer, werden diese nicht mehr geschrieben, sondern sofort entfernt. Daher sollte vor dem Schließen geprüft werden, ob der Ausgabepuffer leer ist.
- Eine Verwendung von INPUT# ist nicht zu empfehlen, da bei Empfangsproblemen das Programm blockiert ist und nur mehr durch RUN/STOP +RESTORE beendet werden kann.
Die entsprechende Unterstützung ist im KERNAL gegeben, aber bei Betriebssystemvarianten von Hardware-Schnellladern fehlen diese mitunter, da der entsprechende ROM-Platz für die Routinen der Disk-Unterstützung verwendet wird.
Beispiel
10 REM *************** EINSTELLUNGEN STEUERREGISTER 15 : 20 BR=6: REM 300 Baud 30 DB=0: REM 8 Datenbits (davon 1 Paritätsbit, siehe Zeile 80) 40 SB=0: REM 1 Stopp-Bit 45 : 50 REM *************** EINSTELLUNGEN BEFEHLSREGISTER 55 : 60 HS=1 : REM X-Draht 70 UA=0 : REM Vollduplex 80 PA=160 : REM Mark-Parität (8.Datenbit immer 1) 90 : 100 REM ************** EINSTELLUNGEN ALLGEMEIN 105 : 100 LF=2 : REM logische Dateinummer (frei wählbar) 110 GA=2 : REM Geräteadresse der RS-232-Schnittstelle 120 SA=0 : REM Sekundäradresse 125 : 200 OPEN LF,GA,SA, CHR$(BR+DB+SB) + CHR$(HS+UA+PA)
Danach kann man mit folgenden Befehlen fortfahren:
Weblinks[Bearbeiten | Quelltext bearbeiten]
Wikipedia: RS-232 |
Wikipedia: Baud |
Wikipedia: V.24 |
Wikipedia: V.28 |
Wikipedia: TTL |
Quellen
- ↑ Mapping the Commodore 64 bei zimmers.net
- ↑ Datenblatt des MOS 6552 ACIA bei 6502.org
- ↑ Datenblatt des CMOS ACIA 6551 von WDC
- ↑ Posting in USENET-Newsgroup comp.sys.cbm von Andreas Boose: Schaltung für die Pegelanpassung
- ↑ Texas Instruments MAX232 Datenblatt (PDF)