Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
z9001:software:v24 [2025/08/04 10:54] – [per Software] volkerpz9001:software:v24 [2025/08/04 14:43] (aktuell) – [User-Port] volkerp
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 |}}+  * {{ :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 +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   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! 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 ==== ==== Hardware ====
Zeile 63: Zeile 70:
 {{:z9001:software:ring_buffer.svg.png?200|}}\\ Bild:https://de.wiktionary.org/wiki/Ringpuffer {{:z9001:software:ring_buffer.svg.png?200|}}\\ Bild:https://de.wiktionary.org/wiki/Ringpuffer
  
-Der Ringpuffer (s. [[wp>Warteschlange_(Datenstruktur)Wiki]]) 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).+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. 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!+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.1754304892.txt.gz
  • Zuletzt geändert: 2025/08/04 10:54
  • von volkerp