Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
z9001:software:v24 [2025/08/04 09:10] – angelegt volkerpz9001:software:v24 [2025/08/04 14:43] (aktuell) – [User-Port] volkerp
Zeile 15: Zeile 15:
 Man kann das Modul umbauen. Eine Beschreibung findet sich [[..:drucken#umbau_eine_druckermoduls_als_vollwertiges_v24-_rs232_modul|hier]]. Man kann das Modul umbauen. Eine Beschreibung findet sich [[..:drucken#umbau_eine_druckermoduls_als_vollwertiges_v24-_rs232_modul|hier]].
  
-===== per Software =====+===== User-Port =====
  
 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. 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.
Zeile 21: Zeile 21:
 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. [[.:os:geraetetreiber#bat-treiber|]]). 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. [[.:os:geraetetreiber#bat-treiber|]]).
  
 +  * {{ :z9001:software:v24soft.zip |}} Quellcode, Treiberprogramm
  
 +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!
 +
 +Unter **BASIC** (BASIC86, KC 87.2x) kann man mit Kanal 2 den LIST-Treiber ansprechen und Werte oder Programme übertragen:
 +
 +  PRINT#2...
 +  LIST#2"DUMMY"
 + 
 +
 +
 +==== 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.
 +
 +<code>
 +;------------------------------------------------------------------------------
 +;
 +; 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)
 +</code>
 +
 +====Ringpuffer====
 +
 +{{:z9001:software:ring_buffer.svg.png?200|}}\\ Bild:https://de.wiktionary.org/wiki/Ringpuffer
 +
 +Der Ringpuffer (s. [[wpde>Warteschlange_(Datenstruktur)]]) wurde mit drei Variablen 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 verhindert. Weitere empfangene Zeichen werden verworfen und nicht im Puffer abgelegt!
 +
 +**Achtung**: Damit dem Rechner nach dem Empfang eines Zeichens genügend Zeit bleibt; die Daten auch im Ringpuffer abzulegen, ehe das nächste Zeichen kommt, darf der Code nicht zu aufwändig sein. Bei 9600 Baud stehen hier nur 264 Takte zur Verfügung! Wenn das nicht reicht, sollte der Sender zwei Stopp-Bits senden (8N2), oder aber man verringert die Baudrate.
  
  • z9001/software/v24.1754298626.txt.gz
  • Zuletzt geändert: 2025/08/04 09:10
  • von volkerp