C 64/VC 20
Kurs: Speicherlandschaft

Memory Map mit Wandervorschlägen (Teil 16)

Heute beschäftigen wir uns mit Speicherzellen, die ausnahmslos etwas mit der im C 64 beziehunqsweise VC 20 integrierten RS232-Schnittstelle zu tun naben.

Wir haben schon früher Speicherzellen besprochen, die mit der RS232-Schnittstelle zu tun haben, ohne die letztere dabei genauer zu betrachten. Da der heutige Teil des Kurses jedoch die zehn wichtigsten Speicherzellen behandelt, welche diese Schnittstelle betreffen, komme ich nicht umhin, näher auf sie einzugehen. Ich tue das mit voller Absicht, obwohl dadurch die erklärenden Texteinschübe mehr Platz einnehmen als die Besprechung der Speicherstellen selbst. Falls Sie mit Schnittstellen des Computers nicht vertraut sind, sollten Sie zuerst den Texteinschub »Schnittstelle und Port« anschauen, mit dem ich die gängige Begriffsverwirrung klären möchte.

Adresse 659 ($293)

RS232-Steuerregister

Jeder OPEN-Befehl, mit dem bekanntlich eine Datei (File) eröffnet wird, kann neben File-Nummer und Geräte-Nummer auch einen File-Namen haben. Der File-Namen einer RS232-Schnittstelle hat maximal nur vier Zeichen. Das erste Zeichen wird in diese Speicherzelle 659 gebracht und steuert dort Übertragungsgeschwindigkeit, die Wortlänge und die Anzahl der Stopp-Bits. Die nähere Bedeutung dieser Fachwörter können Sie dem Texteinschub »Die Elemente der RS232-Schnittstelle« entnehmen. Tabelle 1 zeigt die Bedeutung jedes einzelnen Bits dieser Speicherzelle.

BINÄR BITWERT STEUERFUNKTION
Bit 0 bis 3 steuern die Übertragungsgeschwindigkeit
xxxx0000 0 (siehe 1)
xxxx0001 1 50 bit/s
xxxx0010 2 75 bit/s
xxxx0011 3 110 bit/s
xxxx0100 4 134,5 bit/s
xxxx0101 5 150 bit/s
xxxx0110 6 300 bit/s
xxxx0111 7 600 bit/s
xxxx1000 8 1200 bit/s
xxxx1001 9 1800 bit/s
xxxx1010 10 2400 bit/s
die Werte 11 bis 15 sind nicht belegt
Bit 4 ist nicht belegt
Bit 5 und 6 steuern die Wortlänge
x00xxxxx 0 8 Bit-Wort
x01xxxxx 32 7 Bit-Wort
x10xxxxx 64 6 Bit-Wort
x11xxxxx 96 5 Bit-Wort
Bit 7 steuert die Stopp-Bits
0xxxxxxx 0 1 Stopp-Bit
1xxxxxxx 128 2 Stopp-Bit
Tabelle 1. Die Bedeutung der einzelnen Bit im RS232-Steuerregister

Die praktische Anwendung dieser Bit-Werte innerhalb eines OPEN-Befehls ist ausführlich im Texteinschub »Die Programmierung der RS232-Schnittstelle« beschrieben.

Adresse 660 ($294)

RS232-Befehlsregister

In diese Speicherzelle wird, ähnlich wie bei der Zelle 659, das zweite Zeichen des File-Namens gebracht. Die einzelnen Bits steuern das Handshake-Protokoll (3-/X-Leitung), den Duplex-Modus (Halb-/Voll-Duplex) und die Parity-Prüfung (keine, gerade, ungerade). Die nähere Bedeutung dieser Fachwörter können Sie dem Texteinschub »Die Elemente der RS232-Schnittstelle« entnehmen. Tabelle 2 zeigt die Bedeutung jedes einzelnen Bits dieser Speicherzelle.

BINÄR BITWERT STEUERFUNKTION
Bit 0 steuert den Handshake-Typ
xxxxxxx0 0 3-Leitung
xxxxxxx1 1 X-Leitung
Bit 1 bis 3 sind nicht belegt
Bit 4 steuert den Duplex-Modus
xxx0xxxx 0 Voll-Duplex
xxx1xxxx 16 Halb-Duplex
Bit 5 bis 7 steuern den Paritäts-Test
000xxxxx 0 keine Parität
001xxxxx 32 ungerade (1)
010xxxxx 64 keine Parität
011xxxxx 96 gerade (1)
100xxxxx 128 keine Parität
101xxxxx 160 Parität = 1 (2)
110xxxxx 192 keine Parität
111xxxxx 224 Parität = 0 (2)
Tabelle 2. Das R$232-Befehlsregister im einzelnen

Wenn Sie sich für die praktische Anwendung dieser Bit-Werte innerhalb eines OPEN-Befehls interessieren, dann verweise ich auf den Texteinschub »Die Programmierung der RS232-Schnittstelle«.

Adresse 661 bis 662 ($295 bis $296)

RS232 frei wählbare Übertragungsgeschwindigkeit

Es war ursprünglich vorgesehen, durch entsprechende Wahl des dritten und vierten Zeichens im File-Namen beliebige Übertragungsgeschwindigkeiten einzustellen. Die jeweiligen Werte sollten die Speicherzellen 661 und 662 enthalten. Diese Möglichkeit wurde aber nicht eingebaut. Der Grund dafür dürfte wohl der sein, daß die wählbaren Übertragungsgeschwindigkeiten aller Geräte auf bestimmte Werte normiert sind.

Adresse 663 ($297)

RS232-Statusregister

Genauso wie in der Speicherzelle 144 der Status aller Ein- und Ausgabe-Operationen angezeigt wird, werden alle Fehler der RS232-Schnittstelle in der Speicherzelle 663 angezeigt. Die Bedeutung der einzelnen Bits, wenn sie auf 1 gesetzt sind, zeigt Tabelle 3.

BIT BIT-WERT BEDEUTUNG
0 1 Fehler bei Paritäts-Test
1 2 Fehler in der Bit-Folge
2 4 Überlauf des Eingabepufferspeichers
3 8 Eingabepufferspeicher ist leer
4 16 das Clear-To-Send-(CTS-)Signal (Handshake) fehlt
5 32 nicht belegt
6 64 das Data-Set-Ready-(DSR-)Signal (Handshake) fehlt
7 128 Übertragung ist unterbrochen
Tabelle 3. Das RS232-Status-Register

Der Status wird nicht automatisch angezeigt, sondern muß vom Programm abgefragt werden. Abfragen können Sie sowohl durch PEEKen der Speicherzelle 663 als auch durch Aufrufen der Statusvariablen ST. Die Variable ST, die normalerweise den Inhalt der Zelle 144 wiedergibt, schaltet nach dem Eröffnen eines RS232-Kanals durch OPEN 1,2 auf die Speicherzelle 663 um. Jedoch ist Vorsicht geboten, da durch Aufruf von ST der Inhalt von 663 gelöscht wird. Es ist ratsam, den Wert von ST erst einer anderen Variablen zuzuordnen, wenn sie mehrfach verwendet werden soll. Falls das Status-Register einen Fehler anzeigt, muß das Programm entsprechende Konsequenzen ziehen. Wenn zum Beispiel Bit 0 oder Bit 1 gesetzt sind, ist es angebracht, das letzte Daten-Byte noch einmal zu übertragen. Wenn Bit 2 gesetzt ist, heißt dies, daß der GET#-Befehl den Eingabepufferspeicher nicht schnell genug entleert. Falls die Übertragungsgeschwindigkeit von 300 bit/s, die maximal mit einem Basic-Programm erreichbar ist, nicht ausreicht, muß entweder der Sender langsamer eingestellt werden, oder Sie schreiben das Programm in Maschinensprache.

Adresse 664 ($298)

Anzahl der zu übertragenden Bits

Diese Speicherzelle wird verwendet, um festzustellen, mit wievielen Nullen das zu übertragende Zeichen aufgefüllt werden muß, um die in Speicherzelle 659 (Bit 5 und 6) ausgewählte Wortlänge herzustellen (siehe auch Speicherzellen 168 und 180).

Adresse 665 bis 666 ($299 bis $29A)

Zeit, die zum Übertragen eines Bit gebraucht wird

Sobald ein RS232-Kanal eröffnet worden ist, berechnet das Betriebssystem einen Wert, der die Zeitdauer eines Bits festlegt. Da die Übertragungsrate in Speicherzelle 659 einstellbar ist, hängt diese Bit-Dauer von der gewählten Übertragungsgeschwindigkeit ab. Die Bit-Dauer errechnet sich aus der Systemfrequenz (985,25 KHz) geteilt durch die Übertragungsgeschwindigkeit. Dieser Wert steht in Low/High-Byte-Darstellung in diesen beiden Speicherzellen, von wo aus er vom Betriebssytem abgerufen wird.

Adresse 667 ($29B)

Index auf das Ende des Eingabepufferspeichers

Dieser Index wird verwendet, um Daten in den Eingabepufferspeicher zu schreiben. Wenn man ihn nämlich zum Inhalt der Speicherzelle 247/248 addiert, erhält man die Adresse des zuletzt in den Eingabepufferspeicher eingegebenen Bytes.

Adresse 668 ($29C)

Index auf den Anfang des Eingabepufferspeichers

Dieser Index wird verwendet, um Daten aus dem Eingabepufferspeicher auszulesen. Wenn man ihn nämlich zum Inhalt der Speicherzelle 247/248 addiert, erhält man die Adresse des ersten in den Eingabepufferspeicher eingegebenen Bytes.

Adresse 669 ($29D)

Index auf den Anfang des Ausgabepufferspeichers

Dieser Index wird verwendet, um Daten aüs dem Ausgabepufferspeicher auszulesen. Wenn man ihn nämlich zum Inhalt der Speicherzelle 249/250 addiert, erhält man die Adresse des ersten in den Ausgabepufferspeicher eingegebenen Bytes.

Adresse 670 ($29E)

Index auf das Ende des Ausgabepufferspeichers

Dieser Index wird verwendet, um Daten in den Ausgabepufferspeicher zu schreiben. Wenn man ihn nämlich zum Inhalt der Speicherzelle 249/250 addiert, erhält man die Adresse des zuletzt in den Ausgabepufferspeicher eingegebenen Bytes.

Adresse 671 bis 672 ($29F bis $2A0)

Zwischenspeicher für den IRQ-Vektor während Kassetten-Ein/Ausgabe

Die Routinen des Betriebssystems, die Daten auf, beziehungsweise von Kassette ein- und ausgeben, werden durch die Interrupt-Routine gesteuert. Diese Routine unterbricht normalerweise 60mal in der Sekunde alle Aktivitäten des Computers, um diverse »Hausaufgaben« (Uhr weiterschalten, STOP-Taste abfragen und so weiter) auszuführen. Bei Kassetten-Ein-/Ausgaben ist diese Interrupt-Routine jedoch abgeschaltet. Dies wird dadurch erreicht, daß der Vektor in Speicherzelle 788/789, der auf die Anfangsadresse der Interrupt-Routine zeigt, auf eine Adresse der Kassetten-Routine gesetzt wird. Um nach der Kassettenoperation weitermachen zu können, wird der »alte« Interrupt-Vektor in dieser Speicherzelle 671/672 gespeichert.

Adresse 673 ($2A1)

bei C 64: Flagge für RS232-Interrupt
bei VC 20: frei verfügbar

Diese Speicherzelle enthält den Wert des Interrupt-Steuerregisters 56589, das die RS232-Schnittstelle steuert. Die Bedeutung der einzelnen Bits, wenn sie auf 1 gesetzt sind, zeigt Tabelle 4. Diese Flagge kann zu Steuerzwecken abgefragt werden. Um beispielsweise ein Programm warten zu lassen, bis der Ausgabepufferspeicher geleert ist, gibt man die Anweisung 100 IF (PEEK(673) AND 1) THEN 100 die das Programm so lange aufhält, bis die Übertragung abgeschlossen und Bit 0 der Flagge gelöscht ist. Damit sind alle Speicherzellen, welche die RS232-Schnittstelle steuern, behandelt. Das nächste Mal kommen wir zuerst zu einem großen, frei benutzbaren Speicherbereich, danach zu einer Reihe von Sprung-Vektoren.

(Dr.H.Hauck/ah)
Bit 0 (Bitwert 1) Daten werden gesendet
Bit 1 (Bitwert 2) Daten werden empfangen
Bit 4 (Bitwert 16) Schnittstelle wartet auf Daten vom Sender
Tabelle 4. Flagge für den RS232-Interrupt
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →