Software

Der C 128 am Telefon

Über Akustikkoppler oder Modem mit Mailboxen in Verbindung treten. Das kann der Commodore 128 auch!

Im C 64-Modus behandelt der Commodore 128 den User-Port und damit die RS232-Schnittstelle wie gewohnt. Gute Bekannte wie das Datenfernübertragungs-Programm »Proterm 64« (64'er Sonderheft 7/1985) versehen einwandfrei ihren Dienst. Wie aber verhält sich der User-Port im 128-Modus?

Der User-Port des C 128 wird vorwiegend für den Druckeranschluß oder für den Anschluß eines Akustikkopplers genutzt. Dazu wird entweder eine parallele oder serielle Schnittstelle am User-Port simuliert. Um Daten mit dem Telefon zu übertragen, ist meist die serielle RS 232-Schnittstelle erforderlich. Mit dieser Schnittstelle werden acht Byte nicht gleichzeitig nebeneinander, sondern Bit für Bit hintereinander gesendet. Dadurch wird zwar die Geschwindigkeit wesentlich geringer als bei der parallelen Datenübertragung, aber man kommt mit viel weniger Leitungen aus. Und gerade im Telefon-Verkehr ist die serielle Übertragung die einzig mögliche.

Der Commodore 128 ist von Haus aus im Betriebssystem mit der erforderlichen Software zum Betrieb einer seriellen RS232-Schnittstelle ausgerüstet. Die RS232-Schnittstelle selbst muß noch mit einem Modul hardwaremäßig am User-Port simuliert werden. Dazu gibt es in der 64'er, Ausgabe 3/85 einen kleinen Bausatz für 25 Mark, der den Normpegel am User-Port (TTL-Pegel von +5V) auf den RS232-Pegel (±3V bis ±15V) umwandelt.

Die RS232-Schnittstelle hat im C 128 die Geräteadresse 2 bekommen. Dadurch wird diese Schnittstelle wie ein Floppy-Laufwerk oder ein Drucker angesprochen.

Eröffnet man beim Commodore 128 ein User-Port-File mit der OPEN-Anweisung, so legt der C 128 zwei Daten-Buffer von je 256 Byte an. In den Eingabebuffer, der ab der Adresse $0C00 Hex liegt, werden alle über die RS232-Schnittstelle hereinkommenden Daten gesammelt. Der Ausgabebuffer ab der Adresse $0D00 nimmt die an die RS232-Schnittstelle auszugebenden Daten auf.

Um die Datenübertragung zu organisieren gibt es zwei spezielle Register: das Kontrollregister und das Befehlsregister. Diese werden automatisch mit der Eröffnung des logischen Files (Geräteadresse 2) definiert.

Das Befehlsregister bestimmt die Übertragungsart, die Parität und die Art der Verbindung (Handshake). Im Kontrollregister wird die Baud-Rate definiert und die Anzahl der Daten- und Stop-Bits.

Die Datenübertragungsrate beträgt bei den meisten C 64-Mailboxen 300 Baud bei sieben Daten-Bits und einem Stop-Bit. Das Stop-Bit kennzeichnet das Übertragungsende von Daten-Bits. Die Baud-Rate darf beim C 128 den Wert von 2400 nicht übersteigen, da die interne Software des C 128-Betriebssytems nicht schneller arbeitet.

Alle Parameter werden in der OPEN-Anweisung übergeben. Die Syntax für den OPEN-Befehl lautet: »OPEN Filenummer, Geräteadresse, Sekundäradresse, Kontrollregister, Befehlsregister«. Eine Eröffnung des Datenkanals mit allen Parametern sieht beispielsweise folgendermaßen aus:

»OPEN 2,2,0,CHR$ (6+32+0)+ CHR$(0+0+0)«

Damit haben wir folgende Parameter programmiert:

Wie man sieht, wird das Befehls- und Kontrollregister mit dem OPEN-Befehl definiert. Dazu haben wir nach der Adreß-Definition zwei Byte mit Hilfe der CHR$-Anweisung übergeben.

Einige Bits dieser beiden Register haben wichtige Funktionen. Die ersten vier Bit des Kontrollregisters bestimmen die Baud-Rate, Bit 5 und 6 die Anzahl der Datenbits und Bit 7 die Anzahl der Stop-Bits (siehe Tabelle 1).

Bit 3 2 1 0 dezimal Baud-Rate
0 0 0 0 0 Anwender-Baud-Rate,
0 0 0 1 1 50
0 0 1 0 2 75
0 0 1 1 3 110
0 1 0 0 4 134.5
0 1 0 1 5 150
0 1 1 0 6 300
0 1 1 1 7 600
1 0 0 0 8 1200
1 0 0 1 9 1800
1 0 1 0 10 2400
1 0 1 1 11 3600
1 1 0 0 12 4800
1 1 0 1 13 7200
1 1 1 0 14 9600
1 1 1 1 15 19200
Bit 6 5 dezimal Anzahl der Datenbits
0 0 0 8 Bit
0 1 32 7 Bit
1 0 64 6 Bit
1 1 96 5 Bit
Bit 7 dezimal Anzahl der Stoppbits
0 0 1 Stoppbit
1 128 2 Stoppbit
Tabelle 1. Die Bit-Funktionen des Kontrollregisters

Das zweite Byte wird in das Befehlsregister geschrieben und bestimmt mit Bit 0 die Art des Handshake-Betriebs. Die darauffolgenden drei Bit sind von untergeordneter Bedeutung. Mit Bit 4 wird die Übertragungsart und über die Bits 5,6 und 7 die Parität bestimmt (siehe Tabelle 2).

Bit 0 dezimal Handshake
0 0 3-Draht-Handshake
1 1 X-Draht-Handshake
Bit 4 dezimal Übertragungsart
0 0 Vollduplex
1 16 Halbduplex
Bit 7 6 5 0 Paritätsprüfung
X X 0 0 keine Paritätsprüfung
kein 8. Datenbit
0 0 1 32 ungerade Parität
0 1 1 96 gerade Parität
1 0 1 160 8. Datenbit immer 1
keine Paritätsprüfung
1 1 1 224 8. Datenbit immer 0
Tabelle 2. Bit-Belegung des Befehlsregisters

Selbstverständlich können bei der Datenübertragung mit der RS 232-Schnittstelle Fehler vorkommen. Dafür gibt es das sogenannte Status-Register, das allerdings nach dem Auslesen sofort gelöscht wird. Man sollte diese Statusvariable ST immer in einer Variablen ablegen. Die Bedeutung der einzelnen Bits der Statusvariablen ST sind der Tabelle 3 zu entnehmen.

Bit Beschreibung
0 Paritätsfehler
1 Rahmenfehler
2 Empfängerbuffer voll
3 Empfängerbuffer leer
4 CTS (Clear To Send) Signal fehlt
5 unbenutzt
6 DSR (Data Set Ready) Signal fehlt
7 Break-Signal empfangen
Tabelle 3. Die Statusvariablen ST

Das Kontrollregister, das Befehlsregister und die Statusvariable kann man auch direkt aus der Zeropage auslesen. Für die RS232-Schnittstelle sind die Adressen $0A0F Hex bis $0A1B Hex wichtig (siehe Tabelle 4).

Hex Dezimal Bedeutung
0A0F: 2575 RS-232
NMI Status Register
0A10: 2576 RS-232
Kontrollregister
0A11: 2577 RS-232
Kommandoregister
0A12: 2578 – 2579 RS-232
Benutzer Baud-Rate
0A14: 2580 RS-232
Statusregister
0A15: 2581 RS-232
Anzahl der zu sendenden Bits
0A16: 2582 – 2583 RS-232
Baud-Rate: Full Bit Time (in µs)
0A18: 2584 RS-232
Index auf den Anfang des Eingabepuffers
0A19: 2585 RS-232
Index auf das Ende des Eingabepuffers
0A1A: 2586 RS-232
Index auf den Anfang des Ausgabepuffers
0A1B: 2587 RS-232
Index auf das Ende des Ausgabepuffers
Tabelle 4. RS232-Adressen in der Zeropage

Daß ein Programm für die RS232-Schnittstelle nicht umfangreich sein muß, beweist unser kleines C 128-Terminalprogramm (siehe Listing). Mit ihm kann mit jeder Mailbox kommuniziert werden.

Leider ist der Basic 7.0 Interpreter etwas langsamer als der Dateneingang über die RS232-Schnittstelle. Wenn kontinuierlich Daten hereinkommen, läuft der Datenpuffer nach einiger Zeit über, weil der Computer mit dem Auslesen nicht mehr nachkommt. Die Folge ist, daß der Text plötzlich unleserlich wird. Erst wenn der Partnercomputer eine Pause macht, kann die Basic-Routine nach einem Moment wieder »vernünftigen« Text liefern.

Wesentlich mehr Komfort und Geschwindigkeit bringen in Maschinensprache geschriebene Terminalprogramme. Da nur kleine Änderungen der Speicheradressierung vorzunehmen sind, wird sicherlich demnächst mit mehreren Datenfernübertragungsprogrammen zu rechnen sein, die auch im C 128-Modus des Commodore 128 laufen. Nur steht diesen dann wesentlich mehr Speicherplatz für die Protokollführung zur Verfügung. Dann kann man sich mit dem C 128 Programme übertragen lassen, für die der Speicher des C 64 zu klein war.

(zu)

Quelle: Commodore 128 Intern von Data Becker, ISBN 3-89011-098-3
Das Commodore 128 Handbuch von Markt&Technik Verlag, ISBN 3-89090-171-9

1 open 2,2,0,chr$(6+32+0)+chr$(0+0+0):get#2,a$
2 printchr$(14);"{clr}{down}  Datenfernuebertragung mit dem C 128{down}"
3 geta$:ifa$=""then7
4 c%=0:d%=asc(a$):ifd%<91andd%>64thenc%=32
5 ifd%=20thend%=8
6 d%=d%+c%:print#2,chr$(d%);
7 get#2,b$:ifb$=""then3
8 c%=0:d%=asc(b$):ifd%<91andd%>64thenc%=128
9 ifd%>96thend%=d%-32
10 if d%=8thend%=20
11 d%=d%+c%:printchr$(d%);:goto3
Listing. Ein Terminalprogramm für den C 128
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →