Dies ist eine alte Version des Dokuments!


V24

Der Z9001/KC87 hat in der Grundaustattung keine Möglichkeit, via V24/RS232 zu kommunizieren. Es gibt zwei Möglichkeiten

  1. man nutzt ein Druckermodul
  2. man realisiert V24 in Software

Ein Drucker-Modul enthält eine SIO und wäre damit prädestiniert für V24. Leider gibt es zwei Einschränkungen:

  • es sind nur V24-Ausgabe-Leitungen herausgeführt
  • das Modul kann keine Interrupts erzeugen.

Man kann das Modul umbauen. Eine Beschreibung findet sich hier.

Am User-Port kann eine V24-Kommunikation per Software erfolgen. Die PIO wird im Bitmodus betrieben; ein Bit dient als Sendeleitung, eins als Empfangsleitung. Weitere Bits können zum Handshaking genutzt werden. Die Parallel/Seriell-Wandlung erfolgt per Software. Der Empfang von Zeichen kann mit Polling erfolgen, wenn die Übertragungsprotokolle klar geregelt sind. Für allg. Nutzung ist es besser, wenn der Empfang interruptgesteuert im Hintergrund erfolgt. Die empfangenen Zeichen werden in einem Ringpuffer zwischengespeichert.

Um das Treiberkonzept des Z9001 zu nutzen, ist es sinnvoll, den Empfang als READER-Treiber und den Sender als LIST- und Punch-Treiber bereitzustellen. Dann kann mit dem BAT-Treiber die Konsolenein- und ausgabe auf V24-Empfangen/Senden umgestellt werden (s.a. bat-treiber).

Der physische Treiber ist serialio.asm, mit Ringpuffer und interruptgesteuert serialio3.asm. Das Treiberprogramm „v24“ enthält zwei Treiber V24IN und V24OUT. Diese werden auf READER,PUN,LIST installiert (READER := V24IN, PUNCH = V24OUT; LIST := V24OUT; CONST := CRT). Mit der Zuweisung

ASGN CONST:=BAT

wird auf Terminalbetrieb umgestellt. das funktioniert aber nur bis zum nächsten Warmstart, da dann das OS die ASGN-Zuweisung wieder aufhebt!

Hardware

Die Leitungen B0 und B3 werden zum Senden bzw. Empfangen genutzt. Auf Handshaking wurde verzichtet. Als Bitrate empfiehlt sich der Quasi-Standard 9600 Baud, 8 Bit, Keine Parität, 1 Stopp-Bit (9600 8N1). Zur Verbindung mit dem PC dient ein einfaches USB2TTL-Kabel, dass direkt an den Port angeschlossen wird.

;------------------------------------------------------------------------------
;
;	User-Port-Belegung V24
;
;		A	B	C       		A	B	C
;	---------------------------             ---------------------------
;	1	0	0	-               1	0	0	CTC-C/TRG1
;	2	TxD	-	-               2	B0	B1	B2
;	3	RxD	-	-               3	B3	B4	B5
;	4	-	-	-               4	B6	B7	BRDY
;	5	(+5V)	-	-               5	(+5V)	BSTB	CTC-ZC/TO1
;
;------------------------------------------------------------------------------

; z9001 		PC 	( Nullmodem-Kabel )
; B0	TxD	---->	RxD
; B3	RxD	<----	TxD


;USB2TTL - Adapter
;schwarz GND	A1	0
;weiß	RxD	A2	B0 (Z9001:TxD sendet)
;grün 	TxD	A3	B3 (Z9001:RxD empfängt)

Ringpuffer


Bild:https://de.wiktionary.org/wiki/Ringpuffer

Der Ringpuffer (s. Warteschlange_(Datenstruktur)Wiki) wurde mit drei Variablem implementiert: 2 Zeiger auf die jeweilige Position des nächsten zu lesenden Zeichens bzw. den nächsten freien Platz zum Ablegen des empfangenen Zeichens (RIPUPUTPTR, RIPUGETPTR). Die Anzahl der noch zu lesenden Zeichen steht in RIPUCNT. Zusätzlich gibt es noch die Länge des Ringpuffers RIPULENGTH. Aus Optimierungsgründen für den Maschinencode muss dies ein maskierbarer Wert sein (2er Potenz, z.B. 128).

Wird (per Interrupt) ein Zeichen empfangen, wird an der Position RIPUPUTPTR das Zeichen abgelegt, der Zeiger wird inkrementiert. Beim Überschreiten der höchsten Adresse des Ringpuffers geht es wieder auf die erste Adresse zurück (Adresse modulo RIPULENGTH). Wird nun V24IN mittels Treiber ein Zeichen gelesen, und es gibt Zeichen im Puffer, wird das Zeichen an der Stelle RIPUGETPTR gelesen, der Zeiger erhöht und RIPUCNT vermindert. Andernfalls gibt es einen Fehler (Cy=1). Ein Anwenderprogramm kann dann z.B. warten, bis ein Zeichen empfangen wurde.

Ein Pufferüberlauf beim Lesen wird nicht verhindert! Nicht gelesene Zeichen werden überschrieben!

  • z9001/software/v24.1754300924.txt.gz
  • Zuletzt geändert: 2025/08/04 09:48
  • von volkerp