RS-232

Aus C64-Wiki
Zur Navigation springenZur Suche springen
RS232-Interface für den Userport

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]

http://gglabs.us/node/530 Sprache:englisch

GLINK-232T[Bearbeiten | Quelltext bearbeiten]

  • max. 230400 baud

http://gglabs.us/node/2048 Sprache:englisch

Link232[Bearbeiten | Quelltext bearbeiten]

http://www.go4retro.com/projects/link232/ Sprache:englisch

EZ-232[Bearbeiten | Quelltext bearbeiten]

SwiftLink kompatibel

Silversurfer[Bearbeiten | Quelltext bearbeiten]

http://wiki.icomp.de/wiki/Silversurfer Sprache:englisch

HART[Bearbeiten | Quelltext bearbeiten]

http://mikenaberezny.com/hardware/c64-128/hatronics-hart-rs-232/ Sprache:englisch

DUART[Bearbeiten | Quelltext bearbeiten]

http://www.ide64.org/duart.html Sprache:englisch 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]

WP-W11.png Wikipedia: RS-232
WP-W11.png Wikipedia: Baud
WP-W11.png Wikipedia: V.24
WP-W11.png Wikipedia: V.28
WP-W11.png Wikipedia: TTL

Quellen

  1. Mapping the Commodore 64 bei zimmers.net Sprache:englisch
  2. Datenblatt des MOS 6552 ACIA bei 6502.org Sprache:englisch
  3. Datenblatt des CMOS ACIA 6551 von WDC Sprache:englisch
  4. Posting in USENET-Newsgroup comp.sys.cbm von Andreas Boose: Schaltung für die Pegelanpassung Sprache:englisch
  5. Texas Instruments MAX232 Datenblatt (PDF) Sprache:englisch