----------------------------------------------------------------- | SOFTWARE- | E/A-System | MOS | | DOKUMENTATION | | | |-----------------| Anleitung fuer den |-----------| | 11/87 | Programmierer | OMOS 2.0 | ----------------------------------------------------------------- Programmtechnische Anleitung fuer den Programmierer Beschreibung Teil 3 Ein-/Ausgabesystem MGS K 1600 VEB Robotron-Vertrieb Berlin Dok.-Nr. C 8064-0477-1M2031 Die vorliegende Software-Dokumentation, Anleitung fuer den Programmierer, Teil 3: "E/A-System", entspricht dem Stand von 11/87. Nachdruck, jegliche Vervielfaeltigung oder Auszuege daraus sind unzulaessig. Die Ausarbeitung erfolgte durch ein Kollektiv des VEB Robotron-Vertrieb Berlin. Im Interesse einer staendigen Weiterentwicklung werden alle Leser gebeten, Hinweise zur Verbesserung dem Herausgeber mitzuteilen. Herausgeber: VEB Robotron-Vertrieb Berlin Mohrenstr. 62 PSF 1235 Berlin 1086 (C) Kombinat Robotron 1987 Kurzreferat Mit Teil 3 der "Anleitung fuer den Programmierer" soll dem Anwen- der des Betriebssystems OMOS 1630 eine Anleitung zur Nutzung der E/A-Moeglichkeiten mit Hilfe des physischen E/A-Systems von OMOS 1630 gegeben werden. Der Anwender soll ohne spezielle Kenntnisse der einzelnen physi- schen E/A-Geraete in der Lage sein, durch Nutzung des physischen E/A-Systems von OMOS 1630 seine Ein-/Ausgabeoperationen ueber die gewuenschten Geraete optimal auszufuehren. Dazu enthaelt diese Anleitung eine Beschreibung der allgemeinen E/A-Exekutive-Anweisung (QIO$ bzW. QIOW$), die Beschreibung ver- schiedener Exekutive-Anweisungen, die die Ein-/Ausgabeorganisa- tion wirkungsvoll ergaenzen, und die Beschreibung der Funktion der einzelnen Geraete, die durch entsprechende Driver unterstuetzt werden. Zum Verstaendnis des Teils 3 ist die Kenntnis der Teile 1 und 2 der Anleitung fuer den Programmierer erforderlich. Die angegebenen Zeichencodierungen beziehen sich alle auf den 7-Bit-Code nach TGL 23207/01. Inhaltsverzeichnis ------------------ Seite 1. Systembeschreibung und -benutzung 8 1.1. Einfuehrung 8 1.2. Physische, logische und virtuelle Ein- und Ausgabe 8 1.3. Verwendung logischer Geraetenummern 8 1.4. Nutzung E/A-bezogener Exekutiveleistungen 9 1.4.1. ALUN$ - Zuweisen einer logischen Geraetenummer 10 1.4.2. ASTX$S - Ende einer AST-Bedienung 12 1.4.3. DIR$ - Ausfuehrung einer Anweisung 13 1.4.4. GLUN$ - Uebernehmen der Informationen ueber eine logische Geraetenummer 13 1.4.5. QIO$ - E/A-Exekutive-Anweisung 14 1.4.6. QIOW$ - E/A-Exekutive-Anweisung mit Warten auf Beendigung 15 1.4.7. WTSE$ - Warten auf ein einzelnes Ereignisflag 15 1.5. E/A-Exekutive-Anweisung (QIO$ bzw. QIOW$) 16 1.5.1. Ablauf 16 1.5.2. Aufruf und Parameter 17 1.6. E/A-Standardfunktionen 19 1.6.1. IO.ATT - Anschliessen eines E/A-Geraetes 20 1.6.2. IO.DET - Trennen eines E/A-Geraetes 20 1.6.3. IO.KIL - Annullieren von E/A-Anforderungen 20 1.6.4. IO.RLB - Lesen eines logischen Blockes 21 1.6.5. IO.RVB - Lesen eines virtuellen Blockes 21 1.6.6. IO.WLB - Schreiben eines logischen Blockes 21 1.6.7. IO.WVB - Schreiben eines virtuellen Blockes 21 1.7. Rueckkehrcodes fuer E/A-Exekutive-Anweisungen 21 1.7.1. Direktive-Statuscode 22 1.7.2. E/A-Rueckkehrcode 22 1.8. Beispiele zur Nutzung E/A-bezogener Exekutiveleistungen 22 2. Driver fuer Nullgeraet 27 3. Driver fuer Bediengeraete (Terminals) 28 3.1. Allgemeines 28 3.2. Geraetefunktionen 28 3.2.1. Standardfunktionen 28 3.2.2. Geraetespezifische Funktionen 29 3.2.2.1. Uebersicht 29 3.2.2.2. Subfunktionsbits 31 3.2.2.3. Beschreibung der geraetespezifischen Funktionen 33 3.3. Rueckkehrcodes 46 3.3.1. Rueckkehrcode fuer nichtgrafische Funktionen 46 3.3.2. Rueckkehrcode fuer grafische Funktionen 49 3.4. Informationen des GET-LUN-Makros 51 3.5. Vertikalformatsteuerzeichen 52 3.6. ESCAPE-Folgen 53 3.6.1. Allgemeines 53 3.6.2. Moegliche Driverreaktionen auf ESC-Folgen 53 3.6.2.1. Bearbeitung von ESC-Folgen ohne Driverunter- stuetzung 53 3.6.2.2. Programmgesteuerte ESC-Folgen 54 3.6.2.3. Programmunabhaengige ESC-Folgen 55 3.6.3. Beschreibung der Steueranweisungen 55 3.7. Steuerzeichen und Sondertasten 59 3 Seite 3.8. Automatisch CR/LF 63 3.9. Eingabepufferung in der Nutzertask 64 3.10. Ein-/Ausgabe-Zwischenpufferung im Vollduplexdriver 64 3.10.1. Prinzip 64 3.10.2. "Type-ahead"-Schreibpufferung 65 3.10.3. "Private Buffer Pool" 66 3.10.3.1. Arbeitsweise 66 3.10.3.2. Groesse 66 3.11. Vollduplex-Operationen 67 3.12. Grafikunterstuetzung 67 3.12.1. Allgemeines 67 3.12.2. Bedienungshinweise 67 3.13. Aktivieren des Halbduplex- bzw. Vollduplexdrivers 68 3.13.1. Laden des Halbduplexdrivers 68 3.13.2. ATX und DTX 68 4. Driver fuer Kassettenplattenspeicher 69 4.1. Allgemeines 69 4.2. Geraetefunktionen 69 4.2.1. Standardfunktionen 69 4.2.2. Geraetespezifische Funktionen 70 4.3. Rueckkehrcodes 70 4.4. Informationen des GET-LUN-Makros 71 4.5. Geraeteabhaengige Besonderheiten 71 5. Driver fuer Festplattenspeicher 72 5.1. Allgemeines 72 5.2. Geraetefunktionen 72 5.2.1. Standardfunktionen 72 5.2.2. Geraetespezifische Funktionen 73 5.3. Rueckkehrcodes 73 5.4. Informationen des GET-LUN-Makros 74 5.5. Plattensicherungssystem 74 5.5.1. Allgemeines 74 5.5.2. Prinzipielle Arbeitsweise 75 5.5.3. Generierungshinweise 76 6. Driver fuer Folienspeichereinheit 77 6.1. Allgemeines 77 6.2. Geraetefunktionen 78 6.2.1. Standardfunktionen 78 6.2.2. Geraetespezifische Funktionen 78 6.3. Rueckkehrcodes 79 6.4. Informationen des GET-LUN-Makros 79 6.5. Geraeteabhaengige Besonderheiten 80 7. Driver fuer Magnetbandgeraete 81 7.1. Allgemeines 81 7.2. Geraetefunktionen 81 7.2.1. Standardfunktionen 81 7.2.2. Geraetespezifische Funktionen 82 7.2.3. Beschreibung der geraetespezifischen Funktionen 83 7.3. Rueckkehrcodes 84 7.4. Informationen des GET-LUN-Makros 85 7.5. Programmierhinweise 85 7.5.1. Blockgroesse 85 7.5.2. Setzen der Bandcharakteristika 86 7.5.3. Uebertragung von NUL-Bytes 86 4 Seite 7.6. Geraeteabhaengige Besonderheiten 86 7.6.1. Rettung bei Spannungsausfall am Magnetbandgeraet 86 7.6.2. Wiederholungsfunktionen 86 7.6.3. Wiedererlangen der Bereitschaft 87 8. Driver fuer Kassettenmagnetbandgeraete 88 8.1. Allgemeines 88 8.2. Geraetefunktionen 88 8.2.1. Standardfunktionen 88 8.2.2. Geraetespezifische Funktionen 89 8.3. Rueckkehrcodes 90 8.4. Informationen des GET-LUN-Makros 91 8.5. Programmierhinweise 91 8.6. Geraeteabhaengige Besonderheiten 92 9. Driver fuer Drucker 94 9.1. Allgemeines 94 9.2. Geraetefunktionen 95 9.2.1. Standardfunktionen 95 9.2.2. Geraetespezifische Funktionen 96 9.3. Rueckkehrcodes 96 9.4. Informationen des GET-LUN-Makros 97 9.5. Programmierhinweise 97 9.5.1. Vertikalformatsteuerzeichen 97 9.5.2. Behandlung der Zeichens RUBOUT und NUL 98 9.5.3. Driverreaktion auf Ueberschreiten der Standardzeilenlaenge 98 9.5.4. Taskabbruch 99 9.5.5. Reaktion des Drivers auf ESC-Folgen 99 9.6. Geraetespezifische Besonderheiten 99 9.6.1. Fehlerbedingungen 99 9.6.2. Wiedererlangen der Bereitschaft 99 9.6.3. Verhalten bei automatischem Restart 100 9.6.4. Behandlung von Kleinbuchstaben 100 9.6.5. Einstellvorschrift fuer Drucker der Reihe K 6310 100 10. Driver fuer Lochbandperipherie 101 10.1. Allgemeines 101 10.2. Geraetefunktionen 101 10.2.1. Standardfunktionen 101 10.2.2. Geraetespezifische Funktionen 102 10.3. Rueckkehrcodes 102 10.4. Informationen des GET-LUN-Makros 102 10.5. Programmierhinweise 103 10.5.1. Spezielle Wirkung der Funktionen IO.ATT und IO.DET 103 10.5.2. Lesen nach "END OF TAPE" (Bandende) 103 10.6. Geraeteabhaengige Besonderheiten 103 10.6.1. Fehlerbedingungen 103 10.6.2. Wiedererlangen der Bereitschaft 104 11. Driver fuer Bildspeicher und Gemeinsamen Speicher 105 11.1. Allgemeines 105 11.2. Geraetefunktionen 105 11.2.1. Standardfunktionen 105 11.2.2. Geraetespezifische Funktionen 105 11.2.2.1. Transferfunktionen 105 11.2.2.2. Steuerfunktionen 108 5 Seite 11.3. Rueckkehrcodes 109 11.4. Informationen des GET-LUN-Makros 110 11.5. Programmierhinweise 111 12. Driver fuer Displayprozessor 112 12.1. Allgemeines 112 12.2. Geraetefunktionen 112 12.2.1. Standardfunktionen 112 12.2.2. Geraetespezifische Funktionen 112 12.3. Rueckkehrcodes 113 12.4. Informationen des GET-LUN-Makros 113 13. Driver fuer Grafiksteuerung 114 13.1. Allgemeines 114 13.2. Geraetefunktionen 115 13.2.1. Standardfunktionen 115 13.2.2. Geraetespezifische Funktionen 115 13.2.2.1. Transferfunktionen 115 13.2.2.2. Steuerfunktionen 118 13.3. Rueckkehrcodes 119 13.4. Informationen des GET-LUN-Makros 120 13.5. Programmierhimweise 120 13.6. Geraeteabhaengige Besonderheiten 120 13.6.1. Einschraenkung der Pruefung geraete- und funktionsabhaengiger Parameter 120 13.6.2. Unterdruecken der Funktion IO.SMO 120 13.6.3. Warten auf Uhrunterbrechung beim Schreiben der Videoadresse 121 13.6.4. Auswahl einer beim Initialisieren einzustellenden Betriebsart fuer den TV-Kamera-Anschluss 121 13.6.5. Dynamisches Einstellen der Betriebsart fuer den TV-Kamera-Anschluss 121 14. Driver fuer Rollkugeleinheit 122 14.1. Allgemeines 122 14.2. Geraetefunktionen 122 14.2.1. Standardfunktionen 122 14.2.2. Geraetespezifische Funktionen 122 14.3. Rueckkehrcodes 122 14.4. Informationen des GET-LUN-Makros 123 14.5. Programmierhinweise 123 Anlagen ------- 1: Direktivestatuscodes ($DSW) 124 2: E/A-Rueckkehrcodes 125 Abkuerzungsverzeichnis 128 Sachwortverzeichnis 132 6 Bildverzeichnis --------------- Seite 1: Tabelle der logischen Geraetenummern (LUT) 9 2: Struktur des Kassettenmagnetbandes 92 Tabellenverzeichnis ------------------- Seite 1: Physische Geraete 11 2: Pseudogeraete 11 3: Geraetespezifische Funktionen der Terminaldriver 29 4: Subfunktionsbits fuer Terminaldriver 32 5: Kombinationsmoeglichkeiten geraetespezifischer Funktionen und Subfunktionen bei Terminals 32 6: Informationen der QIO$-Anweisung mit Funktion IO.GTS 37 7: Geraetestatus der BDE K 8911 40 8: Statusinformationen des Druckers 40 9: Charakteristiknamen der Funktionen SF.GMC bzw. SF.SMC beim Terminaldriver 44 10: Rueckkehrcodes fuer Bediengeraete 47 11: Zusaetzliche Rueckkehrcodes fuer RSG K 8917 50 12: Vertikalformatsteuerzeichen fuer Bediengeraete 52 13: Steuerzeichen fuer Bediengeraete 60 14: Rueckkehrcodes fuer Kassettenplattenspeicher 70 15: Rueckkehrcodes fuer den Festplattenspeicher 73 16: Rueckkehrcodes fuer Folienspeicher 79 17: Geraetespezifische Funktionen fuer Magnetband- geraete 82 18: Rueckkehrcodes fuer Magnetbandgeraete 84 19: Geraetespezifische Funktionen fuer Kassettenmagnetbandgeraete 89 20: Rueckkehrcodes fuer Kassettenmagnetbandgeraete 90 21: Rueckkehrcodes fuer Drucker 97 22: Vertikalformatsteuerzeichen fuer Drucker 98 23: Rueckkehrcodes fuer Lochbandgeraete 102 24: Statusbyte fuer Bildspeicher 108 25: Rueckkehrcodes fuer Bildspeicher und Gemeinsamen Speicher 109 26: Rueckkehrcodes fuer Displayprozessor 113 27: Rueckkehrcodes fuer Grafiksteuerung 119 28: Rueckkehrcodes fuer Rollkugeleinheit 123 7 1. Systembeschreibung und -benutzung -------------------------------------- 1.1. Einfuehrung --------------- Unter Steuerung von OMEX 1630 kann eine E/A-Anforderung fuer ein bestimmtes Geraet von einer Task auf zwei verschiedene Arten ausgesendet werden: - Durch Verwendung der Datei-Zugriffsroutinen FCS oder - durch die direkte Nutzung der E/A-Exekutive-Anweisung (QIO$). In dieser Schrift wird nur die E/A-Organisation unter Nutzung der QIO$-Anweisung beschrieben. Jede Task kann den physischen Geraeten eigene logische Geraete- nummern (LUN) zuordnen, ueber die dann die Adressierung der Ge- raete erfolgt. Die E/A-Anweisungen werden in die Warteschlange des zugehoerigen Geraetes eingereiht und entsprechend der Prio- ritaet der aussendenden Task abgearbeitet. Jedes Geraet, das parallel zu anderen arbeiten kann, hat eine eigene Warteschlange. 1.2. Physische, logische und virtuelle Ein- und Ausgabe ------------------------------------------------------- Bei physischer E/A werden direkt die durch die Hardware festge- legten Unterteilungen der Datentraeger angesprochen. Das System unterstuetzt logische E/A mit einer festen Blocklaenge von 256 Worten bei dateistrukturierten Geraeten (z.B. Kassetten- plattenspeicher). Bei vielen Geraeten entsprechen die logischen Bloecke den physischen. Die Numerierung der logischen Bloecke be- ginnt bei allen dateistrukturierten Geraeten mit 0. Die virtuelle E/A bezieht sich auf Dateien. Bei dateistrukturier- ten Geraeten (z.B. Platte) haben virtuelle Bloecke die gleiche Laenge wie logische und beginnen in jeder Datei mit der Nummer 1. Bei nicht dateistrukturierten Geraeten entsprechen die virtuellen Bloecke den logischen. 1.3. Verwendung logischer Geraetenummern ---------------------------------------- Die Zuordnung der logischen Geraetenummern (LUN) zu den physi- schen Geraeten, die fuer jede Task unterschiedlich sein kann, ist in der logischen Geraetetabelle im Taskkopf eingetragen. Jeder LUN sind in der logischen Geraetetabelle (LUT) zwei Worte zuge- ordnet, von denen das erste auf das der LUN zugeordnete physische Geraet zeigt und das zweite fuer eingliederbare Geraete reser- viert ist. Der n-te 2-Worte-Block ist dabei der LUN n zugeordnet. 8 |----------------------------------| LUN | Anzahl der LUN | |----------------------------------| 1 | Zeiger zum UCB des 1. Geraetes | |----------------------------------| | | |----------------------------------| 2 | Zeiger zum UCB des 2. Geraetes | |----------------------------------| | | |----------------------------------| 3 | Zeiger zum UCB des 3. Geraetes | |----------------------------------| | | |----------------------------------| Bild 1 Tabelle der logischen Geraetenummern (LUT) Die bei der Taskbildung standardmaessig festgelegte, moegliche LUN-Anzahl ist 6. Sie kann durch die Taskbilderoption UNITS auf maximal 255 erweitert werden. Die Zuweisung der LUN zu den physischen Geraeten kann der Nutzer auf folgende Arten durchfuehren: 1. Bei der Taskbildung ordnet die Taskbilderoption ASG physi- schen Geraeten logische Geraetenummern zu. Standard ist ASG=SY0:1:2:3:4,TI:5,CL:6 Dabei wird nicht direkt den physischen Geraeten, sondern den mit ihnen korrespondierenden Pseudogeraeten (SY:, TI:, CL:) eine logische Geraetenummer zugeordnet. 2. Mit dem MCR-Kommando REASSIGN kann eine Aenderung der LUN- Zuweisung zu einem anderen Geraet vorgenommen werden, ohne die LUT im Taskkopf zu aendern. 3. Waehrend der Laufzeit der Task kann die Zuordnung zwischen LUN und physischem Geraet dynamisch durch die Exekutive-An- weisung ALUN$ geaendert werden (siehe Abschnitt 1.4.1.). Beachte: Aenderungen der LUN-Zuordnung waehrend der Laufzeit bewirken, dass saemtliche E/A-Anforderungen fuer die alte LUN gestrichen werden, so dass zu sichern ist, dass bis dahin alle betroffenen E/A-Operationen beendet sind. 1.4. Nutzung E/A-bezogener Exekutiveleistungen ---------------------------------------------- Die Exekutive-Anweisungen sind im Programm verfuegbar, wenn die Assembleranweisung .MCALL mit den entsprechenden Systemmakros als Argumenten in das Quellprogramm eingefuegt ist. Das geschieht am Programmanfang (siehe Abschnitt 1.9.). Neben der Funktionsbeschreibung der einzelnen Exekutive-Anwei- sungen enthalten die folgenden Abschnitte die zugehoerigen Anwei- sungsparameterbloecke (DPB) mit den lokalen Symbolen und die aufzufuehrenden Parameter (wahlweise anzugebende Parameter in eckigen Klammern). 9 Der DPB ist ein zusammenhaengender Block fester Laenge, der hauptsaechlich die in der Anweisung genannten Parameter ent- und von der Exekutive zur Ausfuehrung der Anweisung genutzt wird. Die Verwendung der lokalen Symbole ist in Abschnitt 1.9. Beispiel 8 gezeigt. Es gibt im allgemeinen drei Moeglichkeiten einer Exekutive-Anwei- sung: (siehe auch Anleitung fuer den Programmierer, Teil 2) $-Form : - DPB wird waehrend der Assemblierung erstellt - Befehlscode zur Ausfuehrung der Anweisung wird erst durch DIR$-Anweisung gebildet (siehe Abschnitt 1.4.3.) - Anwendung bei haeufiger E/A mit wenig unterschiedli- chen Parametern, bei nicht eintrittsinvarianten Pro- grammen vorteilhaft - Parameter muessen gueltige Operanden fuer die Assemb- leranweisungen .WORD bzw. .BLKW sein $C-Form: - DPB und Code zur Ausfuehrung der Anweisung wird waeh- rend der Assemblierung erstellt - DPB steht im separaten Bereich mit der Adresse $DPB$$ - Zweckmaessig bei einmaliger bzw. seltener E/A - Parameter muessen gueltige Operanden fuer die Assemb- leranweisungen .WORD bzw. .BLKW sein $S-Form: - DPB und Code zur Ausfuehrung der Anweisung werden dynamisch waehrend der Laufzeit gebildet - DPB wird auf dem Stack erstellt - Parameter muessen gueltige Quell-Operanden fuer MOV- bzw. MOVB-Befehle sein - Vorteilhaft bei eintrittsinvarianten Programmen Der Operand err, der in vielen Anweisungen moeglich ist, muss stets wie ein Operand einer CALL- oder JMP-Anweisung formuliert sein (R0 nicht erlaubt). Bei Benutzung der $-Form einer Anweisung wird err in der aktivierenden DIR$-Anweisung angegeben. 1.4.1. ALUN$ - Zuweisen einer logischen Geraetenummer ----------------------------------------------------- Die Zuordnung logischer Geraetenummern zu physischen Geraeten wird durch diese Exekutive-Anweisung festgelegt. Die Ausfuehrung der Anweisung erfolgt waehrend der Laufzeit der Task; diese hat dadurch das Geraet weder belegt, noch eine E/A-Anforderung dafuer ausgesprochen. Aufruf: ------- marke: ALUN$ lun,dev,unt lun - logische Geraetenummer, die dem Geraet zugewiesen werden soll dev - symbolischer Geraetename des physischen Geraetetyps Falls die Unterstuetzung logischer Geraetenamen gene- riert ist, kann dieser Parameter ein logischer Geraete- name sein, der vor Abarbeitung der Task durch das MCR- Kommando ASN (ASSIGN) einem physischen Geraet zugewiesen wurde unt - Geraeteeinheitnummer des angegebenen Geraetetyps 10 Das System kennt folgende physische Geraetenamen, die als Parame- ter dev angegeben werden koennen: Tabelle 1 Physische Geraete symb. Geraetename physisches Geraet ------------------------------------ DY Folienspeicher TT Bediengeraet (BDE K 8911, RSG K 8917) TG Bediengeraet (BDE K 8911, RSG K 8917) CT Kassettenmagnetbandgeraet PR Lochbandleser PP Lochbandstanzer MT 0,5"-Magnetbandgeraet DK Kassettenplattenspeicher DM Festplattenspeicher LP Zeilendrucker TB Rollkugeleinheit GD Grafiksteuerung DD Displayprozessor RM Bildspeicher / Gemeinsamer Speicher Ausserdem sind alle Pseudogeraete gueltige Werte fuer den Parame- ter dev. Mit einem Pseudogeraet kann erst dann eine E/A-Operation vollzogen werden, wenn dieses ueber das MCR-Kommando RED (REDIRECT) auf ein physisches Geraet umgeschaltet wurde; eine Ausnahme bildet TI, das vom System umgeschaltet wird. Programme, die mit Pseudogeraeten arbeiten, haben den Vorteil, dass sie keiner Aenderung beduerfen, falls verschiedene Geraete als Systemgeraet des Nutzers, Systemmitteilungsgeraet usw. verwendet werden. Folgende Pseudogeraete existieren: Tabelle 2 Pseudogeraete Pseudogeraete- Pseudogeraet name ------------------------------------------------- TI Bediengeraet der Task CL Listenausgabegeraet CO Systemmitteilungsgeraet LB Systembibliotheksgeraet SY Systemgeraet des Nutzers Weiterhin wird noch das Nullgeraet vom System unterstuetzt. Der symbolische Geraetename ist NL. 11 Anweisungsparameterblock (DPB) ------------------------------ fuer das Beispiel ALUN$ 6,TT,1 lokale reservierte Bedeutung Symbole Plaetze .BYTE 7 ;Anweisung-Identifikationscode ;(DIC) = 7 .BYTE 4 ;DPB-Laenge = 4 Worte A.LULU: .WORD 6 ;Logische Geraetenummer (LUN) = 6 A.LUNA: .ASCII /TT/ ;Geraetetypname = TT A.LUNU: .WORD 1 ;Geraeteeinheitnummer = 1 1.4.2. ASTX$S - Ende einer AST-Bedienung ---------------------------------------- Diese Anweisung beendet eine AST-Behandlungsroutine. Falls keine weiteren AST in der Warteschlange stehen oder ihre Ausfuehrung verhindert ist, wird die Steuerung an die Task zurueckgegeben. Da der DPB nur die Laenge von einem Wort hat, ist die $S-Form der Anweisung am vorteilhaftesten. Aufruf: ------- marke: ASTX$S [err] err - Bei Angabe dieses wahlweisen Parameters wird zur Adresse err der Fehlerroutine gesprungen, falls die Anweisung abgelehnt wurde Es liegt in der Verantwortlichkeit des Nutzers, alle in der AST- Behandlungsroutine verwendeten Register zu retten und dafuer zu sorgen, dass der Stack vor Aufruf der ASTX$S-Anweisung folgendes Aussehen hat, falls der Rueckkehrstatus nicht veraendert werden soll: SP+6 : Ereignisflag-Maskenwort SP+4 : PS der Task vor dem AST SP+2 : PC der Task vor dem AST SP : DSW der Task vor dem AST Zu diesem Zweck muss bei EA-Beendigungs-AST$ das letzte Wort des Stack (E/A-Statusblockadresse) gestrichen werden (siehe Abschnitt 1.8., Beispiel 7). Makroerweiterung ---------------- fuer folgendes Beispiel : ASTX$S MOV (PC)+,-(SP) ;DIC und DPB-Laenge --> Stack .BYTE 115. ;DIC = 115. .BYTE 1 ;DPB - Laenge = 1 Wort EMT 377 ;Trap zur Exekutive 12 1.4.3. DIR$ - Ausfuehrung einer Anweisung ----------------------------------------- Die DIR$-Anweisung aktiviert die Ausfuehrung einer Anweisung der $-Form. Die DPB-Adresse wird dabei auf den Stack gebracht und ein EMT 377 ausgefuehrt. Aufruf: ------- marke: DIR$ [adr][,err] adr - Die Adresse des DPB muss ein gueltiger Quelloperand eines MOV-Befehls sein. Wird dieser Parameter weggelas- sen, nimmt die Exekutive an, dass sich der DPB oder dessen Adresse bereits auf dem Stack befinden err - Die Angabe dieses Parameters ist wahlweise, er muss ein gueltiger Zieloperand eines JSR-Befehls sein, bei Ableh- nung der Anweisung wird zur angegebenen Adresse im Nut- zerprogramm gesprungen Fuer die DIR$-Anweisung existiert nur diese Schreibweise. Sie ist keine eigenstaendige Anweisung, sondern bezieht sich immer auf einen vorher erstellten DPB; ebenso erscheint kein eigener Rueck- kehrcode (siehe Abschnitt 1.9., Beispiele 1, 2, 6). 1.4.4. GLUN$ - Uebernehmen der Informationen ueber eine logische Geraetenummer ------------------------------------------------------- In einen, im Nutzerprogramm spezifizierten, 6-Worte-Puffer werden beim Aussenden der GLUN$-Anweisung Informationen ueber ein physi- sches Geraet eingeschrieben. Die Auswahl des Geraetes erfolgt ueber die Angabe einer LUN (siehe Abschnitt 1.9., Beispiel 2). Falls das angesprochene Geraet umgeschaltet ist, werden Informa- tionen ueber das aktuelle (neue) Geraet ausgegeben. Aufruf: ------- marke: GLUN$ lun,buf lun - logische Geraetenummer, die dem Geraet, ueber das die Informationen gefordert werden, zugewiesen ist buf - Adresse eines 6-Worte-Puffers in der Nutzertask, in den die Informationen eingeschrieben werden sollen Inhalt des 6-Worte-Puffers -------------------------- (gesetztes Bit des 3. Wortes bedeutet "Ja") Wort 1: Geraetename (2-KOI-7-Bytes) Wort 2, NW-Byte: Geraeteeinheitennummer HW-Byte: 200 (oktal), falls der Driver resident ist. Null , falls der Driver ladbar ist und sich nicht im System befindet. 13 Wort 3: Bit Bele- Bedeutung gung -------------------------------------------------------- 0 0 satzorientiertes Geraet 1 0 vorschubgesteuertes Geraet 2 0 Bediengeraet 3 0 dateistrukturiertes Geraet 4 0 Geraet mit einem Verzeichnis 5 0 Geraet fuer sequentiellen Zugriff 6 0 Massenspeichergeraet 7 0 Unterstuetzung von Nutzer-Geraetetestprogr. 8 0 reserviert 9 0 Geraet ist softwaremaessig schreibgeschuetzt 10 0 reserviert 11 0 reserviert 12 0 Pseudogeraet 13 0 reserviert 14 0 Geraet eingliederbar fuer Dateiformat FM 16 15 0 Geraet eingliederbar (allgemein) Wort 4: undefiniert Wort 5: undefiniert Wort 6: enthaelt die Groesse des Geraetepuffers in Bytes Anweisungsparameterblock (DPB) ------------------------------ fuer das Beispiel GLUN$ 4,puffer lokale reservierte Bedeutung Symbole Plaetze .BYTE 5 ;DIC = 5 .BYTE 3 ;DPB-Laenge = 3 Worte G.LULU: .WORD 4 ;LUN = 4 G.LUBA: .WORD puffer ;Adresse des 6-Worte-Puffers 1.4.5. QIO$ - E/A-Exekutive-Anweisung ------------------------------------- Die Exekutive verwendet die im DPB der Anweisung enthaltenen Informationen, um waehrend der Laufzeit der Task im dynamischen Speicher ein E/A-Paket fuer die entsprechende E/A-Anforderung zu erstellen. Dieses Paket wird entsprechend der Prioritaet der Task in die Geraetewarteschlange des angeforderten physischen Geraetes eingereiht. Anschliessend wird, ohne das Ende der E/A-Operation abzuwarten, die Steuerung an die Task zurueckgegeben (siehe Abschnitt 1.8., Beispiele 3, 5, 6, 8). Genauere Funktions- und Parameterbeschreibungen dieser wichtigs- ten E/A-bezogenen Exekutive-Anweisung enthaelt Abschnitt 1.5. 14 Aufruf: ------- marke: QIO$ fnc,lun,[,efn][,pri][,isb][,ast][,] fnc - Funktionscode der auszufuehrenden E/A-Operation lun - logische Geraetenummer des gewuenschten physischen Ge- raetes efn - Ereignisflag-Nummer pri - Prioritaet; wird ignoriert, muss aber aus Kompatibili- taetsgruenden zu SKR-Systemen vorhanden sein isb - Adresse des E/A-Statusblocks ast - Adresse der AST-Behandlungsroutine prl - Parameterliste der geraete- und funktionsabhaengigen Parameter in der Form Anweisungsparameterblock (DPB) ------------------------------ fuer das Beispiel QIO$ IO.RVB,5,,SB,ASTR, lokale reservierte Bedeutung Symbole Plaetze .BYTE 1 ;DIC = 1 .BYTE 12 ;DPB-Laenge = 12 Worte Q.IOFN: .WORD IO.RVB ;Funktion virtuellen Block lesen Q.IOLU: .WORD 5 ;LUN = 5 Q.IOEF: .BYTE 15 ;Ereignisflag-Nr. = 15 Q.IOPR: .BYTE 0 ;Prioritaet (nicht ausgewertet durch ;OMOS 1630) Q.IOSB: .WORD SB ;E/A-Statusblockadresse Q.IOAE: .WORD ASTR ;Adresse der AST-Routine Q.IOPL: .WORD BUFR ;Datenpufferadresse Q.IOPL+2: .WORD 512. ;Bytezaehler Q.IOPL+4: .WORD 0 ;weitere geraete- und Q.IOPL+6: .WORD 0 ;funktionsspezifische Q.IOPL+10:.WORD 0 ;Parameter der Q.IOPL+12:.WORD 0 ;Anweisung 1.4.6. QIOW$ - E/A-Exekutive-Anweisung mit Warten auf Beendigung ---------------------------------------------------------------- Diese Anweisung entspricht der E/A-Exekutive-Anweisung (QIO$) mit unmittelbar anschliessendem Warten auf ein bestimmtes Ereignis- flag (WTSE$) (siehe Abschnitt 1.4.7.). Das bewirkt, dass die Taskabarbeitung bis zur Beendigung der E/A suspendiert wird. Der Vorteil der QIOW$-Anweisung besteht darin, dass nur ein DPB benoetigt wird. Im Unterschied zur einfachen E/A-Exekutive-Anweisung ist die Angabe des efn-Parameters (Ereig- nis-Flag-Nummer) Pflicht, und DIC ist 3 (siehe Abschnitt 1.8., Beispiel 4) 1.4.7. WTSE$ - Warten auf ein einzelnes Ereignisflag ---------------------------------------------------- Die Taskabarbeitung wird an der Stelle unterbrochen, die diese Anweisung enthaelt, und erst wieder fortgesetzt, nachdem von der Exekutive das angegebene Ereignisflag gesetzt wurde, z.B. nach Beendigung einer E/A-Operation (siehe Abschnitt 1.8., Beispiele 5, 6). 15 Aufruf: ------- marke: WTSE$ efn efn - Ereignisflag-Nummer Anweisungsparameterblock (DPB) ------------------------------ fuer das Beispiel WTSE$ 20. lokale reservierte Bedeutung Symbole Plaetze .BYTE 41. ;DIC = 41. .BYTE 2 ;DPB-Laenge = 2 Worte W.TSEF: .WORD 20. ;Ereignisflag-Nr. = 20. 1.5. E/A-Exekutive-Anweisung (QIO$ bzw. QIOW$) ------------------------------------------------ 1.5.1. Ablauf ------------- Bei der Nutzung der E/A-Exekutive-Anweisung wird die E/A-Anforde- rung, sobald sie ausgesendet ist, in die Warteschlange des Gerae- tes eingereiht, dessen LUN in der Anweisung angegeben ist. Die Abarbeitung der Anforderung erfolgt nach der Prioritaet der an- fordernden Task und parallel zu anderen Systemoperationen. So ist es gegenueber dem direkten Ansprechen der Geraeteregister moeg- lich, die Systemressourcen ueber viele Nutzer oder Tasks effektiv zu verteilen. Ueber die Einreihung der E/A-Anforderung in die Geraetewarte- schlange entscheidet die Exekutive nach Pruefung einiger im Auf- ruf angegebener Parameter. Falls die Anweisung abgelehnt wird, kann mit einem nachfolgenden BCS-Befehl eine Fehler-Routine ge- startet werden (siehe Abschnitt 1.9., Beispiel 3). Der Anwei- sungsstatus (Annahme oder Grund der Ablehnung) wird vom System auf die symbolische Adresse $DSW geschrieben. C-Bit=0 nach der Exekutive-Anweisung bedeutet noch nicht, dass mit Sicherheit ein E/A-Paket in die Geraetewarteschlange einge- reiht wurde. Es ist auch moeglich, dass das Exekutiveprogramm fuer die QIO$-Behandlung bereits einen bestimmten E/A-Rueckkehr- code setzt (siehe Abschnitt 1.8.). Die Beendigung der E/A wird nur abgewartet, falls eine QIOW$- Anweisung verwendet wurde oder an einer bestimmten Programmstelle mit einer WTSE$-Anweisung auf das spezifizierte Ereignisflag des E/A-Rufes gewartet wird. Andernfalls wird die Steuerung, nachdem die Anweisung in die zustaendige Warteschlange eingereiht wurde, sofort an die anfordernde Task zurueckgegeben. 16 1.5.2. Aufruf und Parameter --------------------------- Es existieren alle drei Formen ($,$C,$S) der Exekutive-Anweisung (siehe Abschnitt 1.4.). Der Aufruf im Quellenprogramm erfolgt in folgender Form: QIO$ fnc,lun,efn,pri,isb,ast, Nicht saemtliche Parameter sind fuer alle moeglichen Funktionen unbedingt notwendig; die angegebene Reihenfolge ist jedoch stets einzuhalten. D.h. werden links des zuletzt aufgefuehrten Para- meters Groessen weggelassen, sind die dafuer vorgesehenen Plaetze durch Kommas zu kennzeichnen. Beispiel: QIO$C IO.DET,5,,,IOSB Das System setzt fuer die ausgelassenen Parameter als Standardwert "0". Parameterbeschreibung: ---------------------- fnc: E/A-Funktionscode Dieser Parameter gibt den Funktionscode der auszufuehrenden E/A-Operation in oktaler oder mnemonischer Form an. Der symbolische Funktionsname hat dabei die Form IO.bbb, wobei die drei letzten Buchstaben (bbb) die auszufuehrende Funk- tion spezifizieren. Die Standardfunktionen koennen um gerae- tespezifische Subfunktionen erweitert werden, indem die logische ODER-Verknuepfung der Funktionsnamen mit (generier- baren) geraeteabhaengigen Subfunktionsbits als fnc-Parameter angegeben wird. Die Subfunktionsbits stehen dann in NW-Byte des die Funktion darstellenden Wortes. lun: Logische Geraetenummer Ueber die logische Geraetenummer wird das physische Geraet angegeben, auf das die E/A-Anforderung bezogen ist (siehe Abschnitt 1.3.). efn: Ereignisflag-Nummer Dieser Parameter kann wahlweise angegeben werden. Bei Angabe einer Ereignisflag-Nummer in einer QIO$-Anweisung wird die Taskabarbeitung bis zur E/A-Beendigung suspendiert. Falls bei einer E/A-Exekutive-Anweisung ohne Warten (QIO$) ein Ereignisflag angegeben wurde, verlaeuft die Taskabarbeitung solange parallel zur E/A, bis im Programm mit einer WTSE$- Anweisung auf das Ende der E/A mit dem zugehoerigen Ereig- nisflag gewartet wird (siehe Abschnitt 1.8., Beispiele 5. und 6.). 17 Allgemein bewirken die bei Beendigung einer E/A-Operation auftretenden "Signifikanten Ereignisse" durch folgenden Mechanismus die effektive Reihenfolge der Taskabarbeitung: Bei der Einreihung einer E/A-Anforderung in die Geraetewar- teschlange wird das Ereignisflag, falls angegeben, ge- loescht; bei der Beendigung wieder gesetzt. Der beim E/A- Ende angezeigte Wechsel des Systemzustandes ("Signifikantes Ereignis") veranlasst die Exekutive, die Task zu suchen, die als naechste laufen soll. Dabei wird das Prioritaetsprinzip angewendet, d.h. waehrend der E/A-Operation kann eine Task niedrigerer Prioritaet laufen, wenn die anfordernde Task auf den Abschluss der E/A-Operation warten muss. Die Ereignisflagnummern 1...32 sind lokal, d.h. sie werden nur als Ergebnis der Operation einer bestimmten Task gesetzt oder geloescht. Globale Ereignisflags (33...64) gelten fuer alle Task. Die Verwendung der Flags 25...32 und 57...64 ist der Systemsoft- ware vorbehalten. Im BS OMOS 1630 koennen weitere Ereignisflags definiert werden. Diese Ereignisflags von 65 bis 96 sind innerhalb der Nutzergruppe des UIC gruppen-global, d.h. sie koennen von Tasks, die dieselbe Gruppennummer haben, zur Synchronisation ihrer Aktivitaeten genutzt werden (siehe Anleitung fuer Programmierer, Teil 2). pri: Prioritaet Jede E/A-Anforderung erhaelt automatisch die Prioritaet der zugehoerigen Task. Dieser Parameter wird deshalb von der Exekutive nicht geprueft; sein Platz muss jedoch freigehal- ten werden (Null oder nur Komma), um die Kompatibilitaet der Anweisung mit SKR-Systemen zu gewaehrleisten. isb: Adresse des E/A-Statusblocks Falls der Nutzer am Rueckkehrcode einer E/A-Operation inte- ressiert ist, kann mit diesem Parameter die Adresse eines 2- Worte-Blockes angegeben werden, in den das System diese Informationen dann in folgender Form eintraegt. 1. Wort, NW-Byte: >0 bei erfolgreicher E/A-Beendigung =0 bei noch nicht beendeter E/A-Operation <0 bei fehlerhafter E/A-Beendigung Die Binaerwerte dafuer koennen ueber sym- bolische Namen (siehe Abschnitt 1.7.und Anlage 2) getestet werden, die der Taskbilder interpretiert (siehe Abschnitt 1.8., Beispiel 6). 1. Wort, HW-Byte: Die hier enthaltenen geraetespezifischen Informationen sind unter den jeweiligen Driverbeschreibungen aufgefuehrt (siehe Abschnitt 2. ff.). 2. Wort : Bei Transferfunktionen enthaelt dieses Wort die Anzahl der uebertragenen Bytes. 18 ast: Adresse der AST-Routine Die Angabe dieses wahlweisen Parameters bewirkt, dass die genannte Adresse bei einem asynchronen Systemtrap (AST) nach E/A-Beendigung angesprungen wird. Dabei wird die Prioritaet der Task beibehalten. Allgemein gibt die Exekutive bei Systemtraps die Steuerung an einen anderen, dafuer bestimmten Programmabschnitt. Traps betreffen nur eine bestimmte Task; diese muss zur Nutzung eines Systemtraps die zugehoerige Behandlungsroutine enthal- ten. Es werden zwei Arten von Systemtraps unterschieden: - synchrone Systemtraps treten bei programmbedingten Fehlern waehrend der Taskabarbeitung auf und sind bei gleicher Befehlsfolge auch zeitlich genau reproduzierbar. - asynchrone Systemtraps signalisieren das Eintreten eines externen Ereignisses (z.B. E/A-Beendigung) und koennen zeitlich nicht vorhergesagt werden. Treten waehrend der Bearbeitung einer AST-Routine weitere AST auf, so werden diese nach dem FIFO-Prinzip (first in -first out) in eine Warteschlange fuer die zustaendige Task eingereiht und nacheinander abgearbeitet. Die Nutzung asynchroner System- traps ist bei Echtzeitverarbeitung vorteilhafter als ein- fache Anwendung der QIO$-und WTSE$-Anweisungen, weil da- durch eine Ereignissteuerung mit kuerzeren Antwortzeiten realisiert werden kann. Durch die Anweisungen DSAR$S bzw. ENAR$S kann ueber be- stimmte Programmabschnitte die Unterbrechbarkeit durch AST verhindert werden bzw. wieder erlaubt werden. Die in einer AST-Routine verwendeten Register R0...R5 muss der Nutzer selbst retten. Vor Beendigung der AST-Routine durch die ASTX$S-Anweisung (siehe Abschnitt 1.4.2.) sind die von der Exekutive auf den Stack gebrachten, trapabhaengigen Parameter wieder zu streichen. Bei E/A-Beendigungs-AST ist das die Adresse des E/A-Statusblockes, die das letzte Wort des Stack bildet (siehe Abschnitt 1.9., Beispiel 7). prl: Parameterliste der geraete- und funktionsabhaengigen Parame- ter in der Form . Diese zusaetzlichen Parameter sind unter den jeweiligen ge- raetespezifischen Funktionen in Abschnitt 2.ff. aufgefuehrt. 1.6. E/A-Standardfunktionen --------------------------- Die im folgenden aufgefuehrten E/A-Standardfunktionen koennen als Parameter fnc einer E/A-Exekutive-Anweisung stehen (siehe Ab- schnitt 1.5.2.) Sie werden durch ihren oktalen Funktionscode oder einen symbolischen Namen benannt, der spaeter vom Taskbilder interpretiert wird. Diese Standardfunktionen gelten fuer fast alle Geraete; ihre moeglichen Modifikationen fuer bestimmte Ge- raetetypen sind in den Driverbeschreibungen (siehe Abschnitt 2. ff.) enthalten. 19 1.6.1. IO.ATT - Anschliessen eines E/A-Geraetes ----------------------------------------------- Mnemonischer Fkt.-Code: IO.ATT Oktaler Funktionscode : 001400 Falls ein E/A-Geraet nur einer einzigen Task zur Verfuegung ste- hen soll, muss diese eine E/A-Exekutive-Anweisung mit der Funk- tion IO.ATT aussenden. Die LUN eines angeschlossenen Geraetes kann nicht geaendert wer- den. Waehrend dieser Zeit werden nur E/A-Anforderungen der ange- schlossenen Task aus der Geraetewarteschlange abgearbeitet, so dass eine IO.ATT-Funktion einer anderen Task fuer das gleiche Geraet erst zur Wirkung kommen kann, nachdem das Geraet wieder freigegeben ist. Die Freigabe erfolgt nach folgenden Aktivitaeten: 1. Die anschliessende Task verfuegt das Trennen vom Geraet, d.h. das Aufheben der IO.ATT-Funktion, durch Aussendung einer E/A- Exekutive-Anweisung mit der Funktion IO.DET (siehe Abschnitt 1.6.2.). 2. Die Taskabarbeitung wird beendet oder abgebrochen, ohne dass eine betreffende IO.DET-Funktion das angeschlossene Geraet wieder freigegeben hat. In diesem Fall wird durch die Exeku- tive automatisch die IO.DET-Funktion ausgefuehrt. 1.6.2. IO.DET - Trennen eines E/A-Geraetes ------------------------------------------ Mnemonischer Fkt.-Code: IO.DET Oktaler Funktions-Code: 002000 Diese Funktion verwendet eine Task, um die in Abschnitt 1.6.1. beschriebene IO.ATT-Funktion aufzuheben. 1.6.3. IO.KIL - Annullieren von E/A-Anforderungen ------------------------------------------------- Mnemonischer Fkt.-Code: IO.KIL Oktaler Funktions-Code: 000012 Alle vorher von einer Task ausgesendeten E/A-Anforderungen fuer ein physisches Geraet werden durch diese Funktion annulliert. Falls eine E/A-Operation bereits vom Driver bearbeitet wird, enthaelt der E/A-Statusblock neben den anderen Informationen den Rueckkehrcode IE.ABO (siehe Abschnitt 1.8.). Eine Ausnahme bilden Plattenperationen, die in diesem Falle als NOP-Funktionen gelten und den Rueckkehrcode IS.SUC erhalten. Eine angegebene AST-Be- handlungsroutine wird gestartet. Bei E/A-Anforderungen, die in der Geraetewarteschlange auf Bear- beitung warten, wird kein AST ausgeloest, sondern nur das angege- bene Ereignisflag gesetzt und der E/A-Rueckkehrcode IE.ABO er- zeugt. 20 1.6.4. IO.RLB - Lesen eines logischen Blockes --------------------------------------------- Mnemonischer Fkt.-Code: IO.RLB Oktaler Funktions-Code: 001000 Diese Funktion ermoeglicht einer Task, Daten von einem physischen Geraet in ihren Adressbereich zu lesen. Bei Verwendung dieses Funktionscodes enthaelt Parameter p1 der Anweisung (siehe Abschnitt 1.5.2.) die Pufferanfangsadresse, p2 die Puffergroesse in Bytes und als P3...P6 koennen geraetespezi- fische Parameter stehen. 1.6.5. IO.RVB - Lesen eines virtuellen Blockes ---------------------------------------------- Mnemonischer Fkt.-Code: IO.RVB Oktaler Funktions-Code: 010400 Fuer nicht dateistrukturierte Geraete wird diese Funktion vor ihrer Ausfuehrung in eine IO.RLB-Funktion umgewandelt. Das Lesen eines virtuellen Blockes bezieht sich auf einen Block innerhalb einer Datei. Der Nutzer muss gewaehrleisten, dass die Datei auf dem angegebenen Datentraeger eroeffnet ist. Die Parameter p1...p6 haben die gleiche Bedeutung wie bei der Funktion IO.RLB. 1.6.6. IO.WLB - Schreiben eines logischen Blockes ------------------------------------------------- Mnemonischer Fkt.-Code: IO.WLB Oktaler Funktions-Code: 000400 Durch diese Funktion kann eine Task Daten ueber ein physisches Geraet ausgeben bzw. auf ein physisches Geraet schreiben. Fuer die Parameter gelten die gleichen Vereinbarungen wie bei den Schreibfunktionen. 1.6.7. IO.WVB - Schreiben eines virtuellen Blockes -------------------------------------------------- Mnemonischer Fkt.-Code: IO.WVB Oktaler Funktions-Code: 011000 Eine Task kann durch diese Funktion virtuelle Datenbloecke auf ein physisches Geraet schreiben bzw. ueber ein physisches Geraet ausgeben. 1.7. Rueckkehrcodes fuer E/A-Exekutive-Anweisungen -------------------------------------------------- Von der Exekutive werden drei Moeglichkeiten zur Signalisierung des Bearbeitungsstandes einer E/A-Exekutive-Anweisung benutzt: - Direktivestatuscode in $DSW - zusaetzlich dazu das C-Bit - E/A-Rueckkehrcodes im Statusblock. 21 1.7.1. Direktivestatuscode ($DSW) --------------------------------- Nachdem die Exekutive eine E/A-Anweisung erhalten hat, ueberprueft sie diese auf syntaktische Richtigkeit; untersucht, ob die angegebenen Parameter gueltig sind, und richtet das E/A- Paket ein, wenn alle Voraussetzungen an Speicherplatz usw. erfuellt sind. Verlief die Pruefung erfolgreich, wird der Direktivestatuscode IS.SUC in $DSW eingetragen. Damit ist die E/A-Anweisung in die Warteschlange des betreffenden Geraets eingereiht, aber noch nicht ausgefuehrt. Trat bei der Pruefung ein Fehler auf, wird ein anderer Direktivestatuscode erzeugt (<0), in $DSW eingetragen, ausserdem wird das C-Bit gesetzt. Zur allgemeinen Feststellung, ob eine Direktive von der Exekutive angenommen wurde, ist das Testen des C-Bits ausreichend. Genauere Fehleraussagen enthaelt dann $DSW. Eine Zusammenstellung von Direktivestatuscodes, die bei E/A-Anweisungen auftreten koennen, als mnemonische Werte, die vom Taskbilder erkannt werden, und mit oktaler und dezimaler Repraesentation ist in Anlage 1 gegeben. 1.7.2. E/A-Rueckkehrcodes ------------------------- Nach Ausfuehrung einer E/A-Anweisung uebergibt die Exekutive Informationen in einem Statusblock, dessen Adresse als Parameter isb in der E/A-Exekutive-Anweisung angegeben werden kann (siehe 1.5.2.). In das NW-Byte des ersten Wortes dieses E/A-Statusblocks wird der Rueckkehrcode der E/A-Operation eingetragen. In einigen Faellen (z.B. beim TG-Driver) dient das erste Wort vollstaendig als Rueckkehrcode. Anlage 2 enthaelt eine Zusammenstellung von allgemeinen E/A- Rueckkehrcodes in mnemonischer Form und mit dezimaler und oktaler Repraesentation. Spezielle Bedeutungen bei einzelnen Drivern sind fuer den konkreten Fall im entsprechenden Kapitel dieser Beschreibung aufzusuchen. 1.8. Beispiele zur Nutzung E/A-bezogener Exekutiveleistungen ------------------------------------------------------------ Beispiel 1 - Zuweisung der LUN 3 zum Paralleldrucker 2 - Zuweisung der LUN 14 zum Lochbandstanzer 1 - Zuweisung der LUN 5 zum Kassettenmagnetband 4 - Verwendung aller drei Formen einer Exekutive-Anwei- sung . . .MCALL ALUN$,ALUN$C,ALUN$S,DIR$ ;Assembleranweisung . . MAR: ALUN$ 3,LP,2 ;Erstellen des DPB fuer . ;die ALUN$-Anweisung . STA: . ;Programmstartadresse . DIR$ #MAR ;Ausfuehren der ALUN$- . ;Anweisung . 22 ALUN$C 14 ,PP,1 ;DPB und Code zur Aus- . ;fuehrung der Anweisung . ;erstellen . ALUN$S #5,#CT,#4 ;DPB auf Stack erstellen . ;und Code zur Ausfueh- . ;rung der Anweisung . ;bilden . Beispiel 2 - Einschreiben von Informationen ueber den Lochbandle- ser 2 in den Puffer "POLU" - Verwendung der $-Form der Anweisung . . .MCALL GLUN$,DIR$,ALUN$C ;Assembleranweisung . . GL: GLUN$ 4,POLU ;Erstellen des DPB fuer . ;die GLUN$-Anweisung . . POLU: .BLKW 6 ;Informationspuffer . . STA: . ;Programmstartadresse . ALUN$C 4,PR,2 ;Zuweisen der LUN 4 zum . ;Lochbandleser 2 . DIR$ #GL ;Ausfuehren der GLUN$- . ;Anweisung . Beispiel 3 - Ausgabe der Zeichenfolge im Puffer "AUS" ueber Be- diengeraet 1 ohne Warten auf Beendigung der E/A - Anspringen einer Routine bei Ablehnung der E/A- Exekutive-Anweisung - Verwendung der $C-Form der QIO$-Anweisung . . .MCALL QIO$C,ALUN$C ;Assembleranweisung . . AUS: .ASCII /AUSGABEZEILE/ ;Auszugebende Zeichen- . ;folge (12. Zeichen) . STA: . ;Programmstartadresse . ALUN$C 1,TT,1 ;Zuweisen der LUN 1 zum . ;Bediengeraet 1 . QIO$C IO.WVB,1,,,,, ;E/A-Exekutive-Anweisung . BCS FEH ;Test auf C-Bit . FEH: . ;Fehlerroutine . 23 Beispiel 4 - Ausgabe einer Zeichenfolge einschliesslich "Wagen- ruecklauf","Zeilenschaltung" und "Tabulator" ueber Drucker 2 - Warten auf Beendigung der E/A (Ereignisflag-Nummer 3) - Verwendung der $S-Form der QIOW$-Anweisung . . .MCALL QIOW$S,ALUN$C ;Assembleranweisung . . AUS: .ASCII <15><12><11>/ZEILE/ ;Auszugebende Zeichen- B: .WORD 8 ;folge (8 Zeichen) . STA: . ;Programmstartadresse . ALUN$C 1,LP,2 ;Zuweisen der LUN 1 . QIOW$S #IO.WVB,#1,#3,,,,<#AUS,B> ;E/A-Exekutive-Anweisung . ;mit Warten auf Beendi- . ;gung Beispiel 5 - Durchfuehrung einer Ausgabe ueber Drucker 2 - Eingabe ueber Bediengeraet 0, vor deren Beginn das Ende der Ausgabe abgewartet werden muss (Ereignis- flag-Nummer = 5) - Verwendung der $C-Form der WTSE$-Anweisung . . .MCALL WTSE$C,QIO$C,QIO$S,ALUN$C ;Assembleranweisung . . AUS: .ASCII <15><12>/EINGABEFORDERUNG:/;Auszugebende Zeichen . . EIP: .BLKW 5 ;Eingabepuffer . . STA: . ;Programmstartadresse . ALUN$C 1,LP,2 ;LUN- . ALUN$C 2,TT,0 ;Zuweisungen . . QIO$S #IO.WVB,#1,#5,,,,<#AUS,#19>;Schreib-Anweisung . . WTSE$C 5 ;Warten auf Ende der . ;Schreiboperation . QIO$C IO.RVB,2,,,,, ;10. Bytes in Puffer . ;"EIP" lesen . 24 Beispiel 6 - Anschliessen des Lochbandstanzers 0 an die Task - Angabe eines E/A-Statusblockes - Warten auf E/A-Beendigung mit der $-Form der WTSE$- Anweisung - Anspringen einer Routine bei Ablehnung der E/A- Anweisung bzw. bei E/A-Rueckkehrcode <0 . . .MCALL WTSE$,QIO$C,ALUN$C,DIR$ ;Assembleranweisung . . SB: .BLKW 2 ;E/A-Statusblock . . WT: WTSE$ 5 ;DPB fuer Warten auf . ;Ereignisflag 5 . ;erstellen . STA: . ;Programmstartadresse . ALUN$C 1,PP,0 ;Zuweisen der LUN 1 zum . ;Lochbandstanzer 0 . QIO$C IO.ATT,1,5,,SB ;E/A-Exekutive-Anweisung BCS FEH ;Test auf C-Bit . . DIR$ #WT ;Warten auf Ereignis- . ;flag-Nummer 5 . CMPB #IS.SUC,SB ;Test des E/A-Rueckkehr- . ;codes BNE FEH . FEH: . ;Fehlerroutine . . Beispiel 7 - Nutzung einer AST-Behandlungsroutine, nachdem alle E/A-Anforderungen der Task fuer Lochbandstanzer 0 gestrichen wurden. . . .MCALL ALUN$C,QIO$C,ASTX$S ;Assembleranweisung . . SB: .BLKW 2 ;E/A-Statusblock . . STA: . ;Programmstartadresse . ALUN$C 1,PP,0 ;Zuweisen der LUN 1 zum . ;Lochbandstanzer 0 . QIO$C IO.KIL,1,,,SB,AR ;E/A-Exekutive- ;Anweisung . AR: . ;AST-Behandlungsroutine . 25 TST (SP)+ ;Streichen der trapab- . ;haengigen Parameter vom . ;Stack . ASTX$S ;Beendigung der AST- . ;Behandlungsroutine . . Beispiel 8 - Durchfuehrung mehrerer E/A-Operationen mit nur einem DPB . . .MCALL QIO$,DIR$,ALUN$C ;Assembleranweisung . . Q: QIO$ IO.WVB,5,,,SB,, ;DPB erstellen . . SB: .BLKW 2 ;Gemeinsamer E/A-Status- . ;block . PU1: .ASCII <15><12>/AUSGABE 1/ ;Ausgabepuffer 1 . PU2: .ASCII <15><12>/AUSGABE 2/ ;Ausgabepuffer 2 . PU3: .BLKW 3 ;Eingabepuffer . . STA: . ;Programmstartadresse ALUN$C 5,TT,0 ;LUN-Zuweisungen . ALUN$C 6,LP,1 ;fuer die . ALUN$C 7,PR,2 ;einzelnen Geraete . . DIR$ #Q ;Inhalt von PU1 ueber . ;Terminal 0 ausgeben . MOV #6,Q+Q.IOLU ;LUN im DPB aendern . MOV #PU2,Q+Q.IOPL ;Datenpufferadresse . ;im DPB aendern . DIR$ #Q ;Inhalt von PU2 ueber . ;Drucker 1 ausgeben . MOV #7,Q+Q.IOLU ;LUN im DPB aendern . MOV #IO.RLB,Q+Q.IOFN ;Fkt.-Code im DPB aen- . ;dern . MOV #PU3,Q+Q.IOPL ;Datenpuffer aendern . MOV #6,Q+Q.IOPL+2 ;Bytezaehler im DPB . ;aendern . DIR$ #Q ;6 Bytes ueber Lochband- . ;leser 2 in PU3 einlesen 26 2. Driver fuer Nullgeraet ------------------------- OMEX 1600 unterstuetzt das Nullgeraet bei Vorhandensein der ent- sprechenden Systemoption. Das Nullgeraet hat folgende Charakteri- stika: Geraetefunktion Rueckkehrcode ----------------------------------------- Lesen vom Nullgeraet IE.EOF Schreiben zum Nullgeraet IS.SUC Die angegebene Geraetefunktion wird dabei nicht realisiert. Das Nullgeraet wird hauptsaechlich in Verbindung mit Indirektkom- mandodateien und dem MCR-Kommando ASN verwendet. Durch Zuweisen eines realen Ein- bzw. Ausgabegeraetes zum Nullgeraet wird die E/A an diesem speziellen Geraet unterdrueckt, ohne dass eine Aenderung der Indirektkommandodatei erfolgen muss. Beispiel: Unterdrueckung der Listenausgabe beim Assemblieren >ASN NL:=MP: . . . >MAC @MACCMD Aufbau der Indirektkommandodatei MACCMD.CMD . . . DK:TEST,MP:TEST = DK:[200,10]TEST . . . 27 3. Driver fuer Bediengeraete ---------------------------- 3.1. Allgemeines ---------------- Fuer den Einsatz in dem Mikrorechnergeraetesystem MGS K 1600 ist als Bedieneinheit das Bildschirmgeraet K 8911 bzw. das grafikfaehige Rastersichtgeraet K 8917 vorgesehen, an das ein Drucker als Hard-copy-Einrichtung angeschlossen werden kann. Der Zeichensatz umfasst die Moeglichkeit, neben Sonderzeichen durch Umschaltung lateinische Gross- und Kleinbuchstaben bzw. kyrillische Grossbuchstaben darzustellen. Die Anzeigekapazitaet betraegt 24 Zeilen mit je 80 Zeichen. Das erste Bediengeraet wird ueber das serielle Interface IFSS an den Kanal 1A der ersten AIS (Anschlusssteuereinheit, seriell) des Rechners angeschlossen. Es wird mit einer Uebertragungsgeschwin- digkeit von 9600 Bd. gearbeitet. Zur softwareseitigen Kopplung des Bediengeraetes mit dem Rechner stehen im System OMOS 1630 zwei Terminaldriver zur Verfuegung: 1. Vollduplex-Terminaldriver 2. Halbduplex-Terminaldriver Zusaetzlich zum sich standardmaessig im System befindenden Vollduplex-Driver ist der Halbduplex-Driver generierbar, welcher nach aussen die gleichen Leistungen wie der aus dem System MOOS 1600 bekannte Driver zeigt. Damit kann unter MOOS 1600 erarbei- tete Software seitens Terminal-E/A ohne Modifikation uebernommen werden. Bei entsprechender Generierung sind beide Driver im System resident und lassen sich durch ein entsprechendes MCR-Kommando fuer jedes Terminal extra wechselseitig aktivieren. In der folgenden Beschreibung werden viele Leistungen beider Driver gemeinsam behandelt und nur die einzelnen Spezifikationen gesondert dargestellt. Die physische Geraetebezeichnung des Vollduplex-Drivers ist TT, die des Halbduplex-Drivers TG. 3.2. Geraetefunktionen ------------------------ 3.2.1. Standardfunktionen ------------------------- Die Standard-E/A-Funktionen fuer die BDE K 8911 bzw. K 8917 sind: QIO$C IO.ATT,... Anschliessen eines E/A- Geraetes an eine Task QIO$C IO.DET,... Trennen eines E/A-Geraetes von einer Task QIO$C IO.KIL,... Annullieren von E/A-Anfor- derungen QIO$C IO.RLB,...,Lesen eines logischen Blok- kes 28 QIO$C IO.RVB,...,Lesen eines virtuellen +) Blockes QIO$C IO.WLB,..., Schreiben eines logischen Blockes QIO$C IO.WVB,..., Schreiben eines virtuellen +) Blockes Die Beschreibung der Parameter ist im folgenden Abschnitt zu finden. +) Virtuelle Lese- bzw. Schreiboperationen beziehen sich auf Datei- en. Beim Bediengeraet werden diese Funktionen mit Hilfe einer Maske im Geraetesteuerblock wie die aequivalente logische Funkti- on behandelt. 3.2.2. Geraetespezifische Funktionen ------------------------------------ Die Unterstuetzung vieler geraetespezifischer Funktionen ist ge- nerierbar und wird ueber sogenannte Subfunktionsbits reali- siert (Abschnitt 3.2.2.2.). Kommt eine geraetespezifische Funktion zur Abarbeitung, ohne dass bei SYSGEN die jeweilige Option ausgewaehlt wurde, wird diese Funktion wie ohne das entsprechende Subfunktionsbit ausgefuehrt. 3.2.2.1. Uebersicht ------------------- Tabelle 3: Geraetespezifische Funktionen der Terminaldriver ---------------------------------------------------------------- Geraetespezifische Funktionen fuer Voll- u. Halbduplex-Terminal- driver ---------------------------------------------------------------- QIO$C IO.ATA,..., +) Anschliessen eines Geraetes und Start einer AST-Routine bei un- verlangter Eingabe IO.ATE,... Anschliessen eines Geraetes fuer die Arbeit mit ESC-Folgen IO.CCO,..., Schreiben ohne Beruecksichti- gung von CTRL/0 IO.GTS,...,+) Uebernehmen von Informationen zum Driver IO.RAL,..., Lesen ohne Zeicheninterpreta- tion durch den Driver IO.RNE,..., Lesen ohne Echo IO.RPR,...,+) Lesen nach Meldung IO.RST,..., Lesen mit spez. Endezeichen IO.WBT,...,+) Dominierendes Schreiben 29 Tabelle 3 (Fortsetzung) ----------------------------------------------------------------- Geraetespezifische Funktionen fuer Voll- u. Halbduplex-Terminal- driver ----------------------------------------------------------------- SF.SMC,...,+) Festlegen der Charakteristika eines Bediengeraetes SF.GMC,...,+) Uebernehmen der Charakteristi- ka eines Bediengeraets ----------------------------------------------------------------- Geraetespezifische Funktionen nur fuer den Vollduplex-Driver ----------------------------------------------------------------- QIO$C IO.RTT,..., Lesen mit speziellem und an- gegebenem Endezeichen IO.WAL,..., Schreiben ohne Zeicheninterpre- tation durch den Driver ----------------------------------------------------------------- Geraetespezifische Funktionen nur fuer den Halbduplex-Driver ----------------------------------------------------------------- QIO$C IO.ATG,..., Einschalten des Grafik-Modus IO.CEB,..., Erstellen eines Fehlerblockes IO.DTG,..., Zurueeckschalten in den alpha- numerischen Modus IO.REC,..., Abfrage der Cursorposition IO.REI,..., Abfrage der Identifikation IO.RES,..., Abfrage des Geraetestatus IO.RGR,..., Uebernehmen eines grafischen Eingaberecords IO.WGR,..., Ausgabe eines grafischen Records ----------------------------------------------------------------- +) Bei der Generierung des Vollduplex-Drivers sind diese Funk- tionen Options. Der Halbduplex-Driver behandelt sie standard- maessig. ast Eintrittspunkt fuer AST bei ungeforderter Eingabe parameter2 nur fuer Vollduplex-Driver Kann in Mehrnutzersystemen verwendet werden, um das Terminal als Eingabequelle fuer die AST- Routine zu identifizieren ast2 nur fuer Vollduplex-Driver Eintrittspunkt fuer AST bei ungeforderter Eingabe von CTRL/C 30 pradr Startadresse des Bytepuffers, der die "Meldung" enthaelt prbufle Groesse des Puffers, der bei pradr beginnt und die "Meldung" enthaelt, in Bytes. (0 < prbufle < 8129. beim Vollduplex-Driver bzw. 0 < prbufle < 256. beim Halbduplex-Driver). Der Puffer muss sich im Adressraum der Task befinden. bufle Groesse des Puffers, der bei stadr beginnt, in Bytes. (0 < bufle < 8129. fuer den Vollduplex- Driver; 0 < bufle < 256. bei Eingabe an den Halb- duplex-Driver; 0 < bufle < 32 K bei Ausgabe des Halbduplex-Drivers). Ausnahme bei Grafikfunktionen (vgl. 3.12.). Der Puffer muss sich im Adressraum der Task befinden. Fuer die Funktionen IO.GTS, SF.GMC und SF.SMC muss bufle geradzahlig sein. stadr Startadresse des Datenpuffers. Fuer die Funktio- nen IO.GTS, SF.GMC und SF.SMC muss der Puffer an einer Wortgrenze beginnen. table Adresse einer 16 Worte grossen Tabelle, welche spezielle Endezeichen enthaelt. tmo Nur fuer Vollduplex-Driver Fuer tmo kann wahlweise ein Time-out-Wert in 10- Sekunden-Intervallen angegeben werden. Dieser legt die max. moegliche Zeit zwischen zwei Zeichenein- gaben fest. Bei 0 erfolgt kein Time-out. Der maxi- male Wert betraegt 255. vfc Vertikalformatsteuerzeichen (vgl. Abschnitt 3.5) cobyt Eingabe-Kommandobyte legt Eingabeklasse und -typ fest nblk Anzahl der moeglichen EVENT-Bloecke im dynamischen Speicher 3.2.2.2. Subfunktionsbits ------------------------- Geraetespezifische QIO$-Funktionen haben entweder einen eigen- staendigen mnemonischen Funktionscode und/oder koennen ueber sogenannte Subfunktionsbits, die untereinander und mit Standard- funktionen kombiniert werden koennen, aufgerufen werden. Tabelle 4 enthaelt alle existierenden Subfunktionsbits, zeigt alle geraetespezifischen Funktionen und die Kombinationsmoeglich keiten der Subfunktionsbits mit ihnen und mit den Standard- funktionen. Alle Funktionen werden im folgenden Abschnitt einzeln beschrieben. 31 Tabelle 4: Subfunktionsbits fuer Terminaldriver ----------------------------------------------------------------- Subfunktionsbits fuer Vollduplex- und Halbduplex-Driver ----------------------------------------------------------------- TF.AST AST bei nicht angeforderten Eingabezeichen TF.CCO Schreiben ohne Beruecksichtigung von CTRL/0 TF.ESQ Nutzung programmgesteuerter ESC-Folgen TF.RAL Lesen ohne Driverinterpretation TF.RNE Lesen ohne Echo TF.RST Lesen mit speziellem Endezeichen TF.WBT Dominierendes Schreiben ----------------------------------------------------------------- Subfunktionsbits nur fuer den Vollduplex-Driver ----------------------------------------------------------------- TF.BIN Ausgabe der "meldung" (IO.RPR) ohne Zeicheninterpre- tation durch den Driver TF.NOT Bei AST durch ungeforderte Eingaben werden die Zei- chen im "Type-ahead Buffer" (vgl.3.10.2.) gespei- chert, bis sie von der Task uebernommen werden TF.RCU Rueckspeichern der Kursorposition TF.TMO Lesen mit Time-out TF.WAL Schreiben ohne Zeicheninterpretation durch den Driver TF.XCC CTRL/C startet eine Kommandozeile TF.XOF Senden von XOFF ----------------------------------------------------------------- Subfunktionsbits nur fuer den Halbduplex-Driver ----------------------------------------------------------------- TF.RES Abfrage des Geraetetestatus TF.REI Abfrage der Identifikation TF.REC Abfrage der Cursorposition ----------------------------------------------------------------- Tabelle 5: Kombinationsmoeglichkeiten geraetespezifischer Funktionen und Subfunktionsbits bei Terminals ----------------------------------------------------------------- Funktion zusaetzlich ------------------------------ kombinationsfaehig mit Funktions- aequivalente Kombi- Subfunktionsbits Name nation von Stan- beider Driver des Vollduplex- dardfunktionen mit Driver Subfunktionsbits ----------------------------------------------------------------- IO.ATA IO.ATT!TF.AST TF.ESQ TF.NOT,TF.XCC IO.ATE IO.ATT!TF.ESQ TF.AST TF.NOT,TF.XCC IO.RAL IO.RLB!TF.RAL TF.RNE,TF.RST TF.TMO,TF.XOF IO.RNE IO.RLB!TF.RNE TF.RAL,TF.RST TF.TMO,TF.XOF IO.RST IO.RLB!TF.RST TF.RAL,TF.RNE TF.TMO,TF.XOF IO.CCO IO.WLB!TF.CCO TF.WBT TF.WAL IO.WBT IO.WLB!TF.WBT TF.CCO TF.RCU,TF.WAL SF.GMC - - - IO.GTS - - - 32 Tabelle 5 (Fortsetzung) ----------------------------------------------------------------- Funktion zusaetzlich ------------------------------ kombinationsfaehig mit Funktions- aequivalente Kombi- Subfunktionsbits Name nation von Stan- beider Driver d. Vollduplex- dardfunktionen mit Driver Subfunktionsbits ----------------------------------------------------------------- IO.RPR - TF.RAL,TF.RNE, TF.BIN,TF.TMO, TF.RST TF.XOF IO.REC IO.RPR!TF.REC - - IO.RES IO.RPR!TF.RES - - IO.REI IO.RPR!TF.REI - - SF.SMC - - - IO.WAL IO.WLB!TF.WAL - TF.CCO,TF.RCU TF.WBT IO.RTT - - TF.NOT,TF.RCU TF.RST,TF.XCC ----------------------------------------------------------------- Werden die virtuellen Transferfunktionen (IO.RVB, IO.WVB) mit den gleichen Subfunktionsbits kombiniert wie die aequivalenten logischen Funktionen, bleibt die entsprechende Wirkung aus, da die Subfunktionsbits bei der Umwandlung in logische Funktionen gestrichen werden. Vorsicht ist bei gemeinsamer Verwendung der Bits TF.RAL und TF.RST geboten. Waehrend einer Operation mit IO.WAL erfolgt keine Zeicheninter- pretation durch den Driver. Das gilt nicht fuer die Kursor- positionierung. 3.2.2.3. Beschreibung der geraetespezifischen Funktionen -------------------------------------------------------- IO.ATA - Anschliessen eines Geraetes und Start einer AST- Routine bei unverlangter Eingabe --------------------------------------------------------- Dabei wird das betreffende Bediengeraet angeschlossen und bei unverlangter Zeicheneingabe die als Parameter "ast" (bzw. auch "ast2" beim Vollduplex-Driver) angegebene Adresse einer AST- Routine angesprungen. Als unverlangte Eingaben gelten alle Zeichen, die ohne vorliegende QIO$-Anweisung eingegeben werden, mit Ausnahme von CTRL/O, DC1 und DC3 (bzw. CTRL/X beim Vollduplex-Driver) (siehe Abschnitt 3.7.). Wurde der Parameter "ast2" spezifiziert, erfolgt bei unverlangter Eingabe von CTRL/C der Eintritt in die entsprechend angegebene Adresse "ast2". Andernfalls wirkt CTRL/C wie jedes andere Eingabezeichen beim Eintritt in "ast". Dieser Mechanismus ist geeignet, der Task jeweils nur ein Zeichen zu uebergeben. Das entsprechende Eingabezeichen befindet sich bei Eintritt in die AST-Routine als NW-Byte auf der aktuellen Stack- Adresse. Das HW-Byte enthaelt gegebenenfalls "parameter2". Dieses Wort muss vor Beendigung der AST-Routine aus dem Stack entfernt werden. 33 Der Stack hat dabei folgenden Inhalt: SP+10 Ereignisflag-Maskenwort SP+6 PS der Task vor dem AST SP+4 PC der Task vor dem AST SP+2 $DSW der Task vor dem AST SP NW-Byte: Eingabezeichen HW-Byte: parameter2 Es wird empfohlen, dass die Task ein bestimmtes Eingabezeichen als Aufforderung zu ihrer Beendigung deutet, da auch CTRL/C der Task als unverlangte Eingabe uebergeben wird (ausser TF.XCC beim Vollduplex-Driver) und somit keine Moeglichkeit mehr besteht, ueber MCR einen Taskabbruch zu bewirken. Ist die Subfunktion TF.XCC mit der Funktion IO.ATA verbunden, werden alle Zeichen ausser CTRL/C wie oben angegeben behandelt. CTRL/C kennzeichnet den Beginn einer Kommandozeile, die durch eine CLI-Task bearbeitet wird. Die Programmierung der Subfunktion TF.NOT dient der resultierenden AST-Routine nur als Meldung einer unaufgeforderten Terminaleingabe (ausser CTRL/C); der Driver uebergibt die Zeichen nicht an die Task. Nach Eintritt in die AST-Routine zeigt das HW-Byte des ersten Wortes im Stack das Terminal an (parameter2), das den AST verursachte. Anschliessend wird der AST bei ungeforderten Eingaben ausgesetzt, bis die Task eine Leseanforderung aussendet. Empfaengt der Driver vor dieser Leseanforderung mehrere Zeichen, werden diese im Schreibpuffer (siehe 3.10.2.) zwischengespeichert und nach Eintreffen des Leserufs einschliesslich des Zeichens, das den AST verursacht hatte, an die Task uebergeben. Anschliessend wird der AST fuer ungeforderte Eingaben wieder ermoeglicht. Beachte: . Da CTRL/C den Shreib-Puffer (siehe 3.10.2) loescht, kann TF.NOT nicht zusammen mit einem AST bei ungefor- derter Eingabe von CTRL/C verwendet werden. . Ebenfalls sind TF.XCC und der Parameter ast2 (fuer AST bei ungeforderter Eingabe von CTRL/C) nicht zusammen zu programmieren. Dieser Fall wird mit dem Rueckkehr- code IE.SPC abgewiesen. . Werden mehrere Eingabezeichen in schneller Folge gegeben, kann nicht garantiert werden, dass bei Verwendung der Funktion IO.ATA im Halbduplexdriver kein Datenverlust entsteht. IO.ATE - Anschliessen eines Geraetes fuer die Arbeit mit ESC-Folgen -------------------------------------------------------- Durch Aussenden des Funktionscodes IO.ATE bzw. IO.ATT!TF.ESQ wird das Bediengeraet fuer die Arbeit mit ESC-Folgen vorbereitet und an die Task angeschlossen, falls bei der Systemgenerierung die entsprechende Option ausgewaehlt wurde (vgl. Abschnitt 3.6.). 34 IO.ATG - Einschalten des grafischen Modus (Halbduplex-Driver) ------------------------------------------------------------- Das Terminal wird durch diesen Funktionscode in den grafischen Modus umgeschaltet. Unter der Adresse stadr der QIO$-Anweisung ist der grafische Record fuer die GKS-Anweisung OPEN WORKSTATION in der Nutzertask zu vereinbaren. Obwohl dieser Record nur zwei Bytes lang ist, muss der Bytezaehler bufle den Wert 3 haben; andernfalls wird die QIO$-Anweisung mit dem Rueckkehrcode IE.BAD abgewiesen. Das zu reservierende dritte Byte im Nutzerpuffer liefert nach Abarbeitung der Anweisung folgende Aussage: stadr3=0: Das spezifizierte Geraet ist an der 1.AIS, Kanal 1A angeschlossen. Im alphanumerischen Modus kann ueber die Taste das Bedien-Mikroprogramm des Rechners gerufen werden. stadr3=1: Die Taste ist wirkungslos. Die Funktion IO.ATG bewirkt, dass der Bildschirm des Rastersichtgeraets geloescht und die Anzeige GRAPHIC MODE eingeschaltet wird. IO.CCO - Schreiben ohne Beruecksichtigung von CTRL/O --------------------------------------------- Diese Funktion bewirkt die Datenausgabe auf dem Bediengeraet, unabhaengig davon, ob das Ausgabeverhinderungsbit des Geraetes gesetzt ist oder nicht. Dieses Bit kann durch Eingabe von CTRL/O gesetzt werden (siehe Abschnitt 3.7.). Falls bei Abarbeitung der Funktion IO.CCO die Ausgabe durch CTRL/O verhin- dert ist, wird das Ausgabeverhinderungsbit vor der Datenausgabe zurueckgesetzt. IO.CEB - Erstellen eines Fehlerblockes (Halbduplexdriver) --------------------------------------------------------- Diese Funktion ist die Voraussetzung fuer die Arbeit mit grafischen EVENT-Eingaben. Der Parameter nblk der QIO$-Anweisung gibt die Anzahl der moeglichen EVENT-Bloecke im dynamischen Speicher einschliesslich Fehlerblock an. Sein Maximalwert ist generierungsabhaengig. Bei Abarbeitung der Exekutiveanweisung wird vom Driver eine Empfangswarteschlange eroeffnet. Das erste Paket dieser Schlange bildet den Fehlerblock, der folgende Form hat: 1. Wort: Verbindungszeiger zum 1.EVENT-Block =0, falls kein EVENT-Block ansteht 2. Wort: Anzahl der anstehenden EVENT-Bloecke einschliesslich Fehlerblock 3. Wort: Rueckkehrcode des Drivers IE.NOD, falls mindestens eine EVENT-Eingabe wegen Mangel an dynamischem Speicher abgelehnt wurde =0, falls alle anstehenden EVENT-Eingaben eingereiht sind 4. Wort: Maximalzahl der EVENT-Bloecke einschliesslich Fehler- block (Parameter nblk) 35 Die EVENT-Bloecke sind zwischen 12 und 88 (dezimal) Bytes lang und haben folgende Form: 1. Wort: Verbindungszeiger zum naechsten EVENT-Block =0, falls kein weiterer EVENT-Block ansteht 2. Wort: UCB-Adresse des Geraetes, das die EVENT-Eingabe ausgeloest hat 3. Wort: NW-Byte: Rueckkehrcode des Drivers HW-Byte: Geraetefehlerzelle (siehe 3.3.2.) 4. Wort: NW-Byte: =0, falls Eingabeklasse LOCATOR, CHOICE oder PICK; EVENT-Block ist 12 Bytes lang (dez.) =n, falls Eingabeklasse STRING n ist die Anzahl der eingegebenen Bytes Der EVENT-Block ist n+7 Bytes lang. 5. Wort und folgende: Eingabedaten IO.DTG - Zurueckschalten in den alphanumerischen Modus ------------------------------------------------------- (Halbduplex-Driver) ------------------- Bei Aufruf dieser Funktion erfolgt das Zurueckschalten des RSG in den alphanumerischen Modus. Unter der Adresse stadr der QIO$- Anweisung ist der grafische Record der Laenge bufle fuer die GKS- Anweisung CLOSE WORKSTATION zu vereinbaren. Die Anzeige GRAPHIC MODE wird geloescht, auf dem Bildschirm erscheint das gleiche alphanumerische Bild wie vor Ausfuehrung der letzten Anweisung mit Funktionscode IO.ATG. IO.GTS - Uebernehmen von Informationen zum Bediengeraetedriver -------------------------------------------------------------- Bei Aufruf dieser Funktion traegt das System in den Taskpuffer zwei Informationsworte ein (von 4 vorgesehenen Worten sind gegen- waertig nur 2 belegt). Sie geben Auskunft ueber die generierten Leistungen des Bediengeraetedrivers. Da das Uebernehmen von Informationen zum Bediengeraetedriver selbst eine Generierungs- option ist, wird der Rueckkehrcode IE.IFC (siehe 3.3.) gegeben, falls die Funktion IO.GTS aufgerufen wird, ohne dass diese Option im System generiert ist. Die in Tabelle 6 aufgefuehrten Leistungen der Bediengeraetedri- ver sind im System enthalten, falls das entsprechende Bit im Informationspuffer gesetzt ist. Die durch IO.GTS, SF.SMC und SF.GMC verwendeten Symbole F1.xxx, F2.xxx (Tab.6), TC.xxx (Tab.7), SE.xxx (Tab. 10) sind im Systemmodul TTSYM enthalten und koennen lokal durch den Aufruf .MCALL TTSYM$ . . . TTSYM$ definiert werden. Andernfalls erfolgt die Definition automatisch durch den Taskbilder. 36 Tabelle 6: Informationen der QIO$-Anweisung mit Funktion IO.GTS ----------------------------------------------------------------- Informationsbit -------------------------- gelegen oktal mnemonisch Bedeutung im ----------------------------------------------------------------- 1.Wort 1 F1.ACR Automatischer Uebergang auf eine neue Zeile als Grundzustand 1.Wort 2 F1.BTW dominierendes Schreiben 1.Wort 4 F1.BUF Auslagerung von Tasks waehrend Einga- ben ueber Bediengeraet 1.Wort 10 F1.UIA AST bei Eingabe nicht angeforderter Eingabezeichen 1.Wort 20 F1.CCO Schreiben ohne Beruecksichtigung von CTRL/O 1.Wort 40 F1.ESQ Unterstuetzung programmgesteuerter ESC-Folgen mit Reaktion (Halbduplex- driver) bzw. als Zeilenbegrenzer (Vollduplexdriver) 1.Wort 100 F1.REQ Nutzung der Abfragefunktionen (Standard) (Halbduplexdriver) 1.Wort 200 F1.LWC wahlweise Klein-/Grossbuchstabenum- wandlung bei Eingaben ueber Bedienge- raet 1.Wort 400 F1.RNE Lesen ohne Echo 1.Wort 1000 F1.RPR Lesen nach Meldung 1.Wort 2000 F1.RST Lesen mit speziellem Endezeichen 1.Wort 4000 F1.SPK Programmstart ueber Einzeltasten- druck (Standard) (Halbduplexdriver) 1.Wort 4000 F1.RVB CRT-Rubout (Vollduplex-Driver) 1.Wort 10000 F1.GRA Geraet im grafischen Modus (Halbduplex-Driver) 1.Wort 10000 F1.SYN CTRL/R-Synchronisation (Vollduplex-Driver) 1.Wort 20000 F1.TRW Lesen ohne Zeichenbehandlung 1.Wort 40000 F1.UTB Eingabepufferung im Nutzerprogramm ----------------------------------------------------------------- 37 Tabelle 6: (Fortsetzung) ----------------------------------------------------------------- Informationsbit -------------------------- gelegen oktal mnemonisch Bedeutung im ----------------------------------------------------------------- 1.Wort 100000 F1.VBF Pufferung von Bediengeraeteeingaben mit variabler Laenge 2.Wort 1 F2.SCH Festlegen der Charakteristiken eines Bediengeraetes 2.Wort 2 F2.GCH Uebernehmen der Charakteristiken eines Bediengeraetes 2.Wort 4 F2.ESC Nutzung programmgesteuerter ESC- Folgen als Zeilenbegrenzer (nur Halb- duplex-Driver) 2.Wort 40 F2.SFF Formularvorschub kann simuliert werden (Vollduplex-Driver) 2.Wort 100 F2.CUP Cursorposition (Vollduplex-Driver) 2.Wort 200 F2.FDX Vollduplex-Terminal-Driver ----------------------------------------------------------------- IO.RAL - Lesen ohne Zeicheninterpretation durch den Driver ---------------------------------------------------------- Bei dieser Lesefunktion erfolgt keine Interpretation der einge- gebenen Zeichen durch den Bediengeraetedriver. Das hat zur Folge, dass das Paritaetsbit (bit 7) nicht ausgewertet und Steuerzei- chen wie CTRL/C, CTRL/O, CTRL/U, CTRL/Z, DC1,... (siehe Ab- schnitt 3.7.) in den Datenpuffer der Task uebergeben und geechot werden. Die Parameter der Funktion IO.RAL entsprechen denen der Funktion IO.RLB. Die Funktion IO.RAL kann nur ueber den Bytezaehler bufle beendet werden. Achtung: Da die Zeichen DC1 und DC3 zur Synchronisation der Da- tenuebertragungen dienen und ausserdem auf die BDE K 8911 direkt wirken (ohne Echo), kann es bei ihrer Eingabe zu Synchronisationsproblemen kommen. (Siehe Technische Beschreibung K 8911), d.h., eingegebene Zeichen werden eventuell nicht geechot. Bei Verwendung dieser Zeichen muss die Anzeige neben der OFF-Taste vor und nach der Anweisung mit IO.RAL den gleichen Geraetezustand anzeigen. 38 IO.REC - Abfrage der Cursorposition (Halbduplex-Driver) ------------------------------------------------------- Beim Aufruf der Funktion IO.REC wird vom Halbduplex-Driver die aktuelle Cursorposition in den Taskpuffer, der auf der Adresse stadr beginnt und die Laenge bufle hat, uebergeben. In den an- gegebenen Puffer gelangt die ESC-Folge ESC[z;sR, wobei die Para- meter z und s die aktuelle Zeilen- und Spaltennummer angeben. Es gilt z=1...24 und s=1...80 (KOI-7-Code), deshalb muss vom Nutzer ein Puffer von mindestens 11(oktal) Bytes Laenge zur Verfuegung gestellt werden. Ist dieser Puffer kleiner als 11 Bytes, er- scheint der Rueckkehrcode IE.BAD (siehe Abschnitt 3.3.). Bei Anwendung dieser Funktion ist es notwendig, das Geraet fuer die Arbeit mit ESC-Folgen vorzubereiten, d.h., es muss auf dem betreffenden Bediengeraet vor dem Aufruf der Task ein Kommando SET /ESCSEQ=TTnn: gegeben werden. Ausserdem muss die betreffende Task eine QIO$-Anweisung mit dem Funktionscode IO.ATE bzw. IO.ATT!TF.ESQ abgesetzt haben, um das Bediengeraet fuer die Arbeit mit ESC-Folgen anzuschliessen. IO.REI - Abfrage der Identifikation (Halbduplex-Driver) ------------------------------------------------------- IO.REI wird nur vom Halbduplex-Driver bearbeitet. In den Taskpuf- fer gelangt die ESC-Folge ESC[?2,pc, mit p = 0, BDE ohne Drucker p = 8, BDE mit Drucker. (vgl. Abschn. 3.6.3.) Um diese Funktion anwenden zu koennen, ist es notwendig, das Ge- raet fuer die Arbeit mit ESC-Folgen vorzubereiten, d.h. es muss auf dem betreffenden Bediengeraet vor Aufruf der Task ein Kommando SET /ESCSEQ=TTnn: gegeben werden. Ausserdem muss die betreffende Task eine QIO$-Anweisung mit dem Funktionscode IO.ATE bzw.IO.ATT!TF.ESQ abgesetzt haben, um das Bediengeraet fuer die Arbeit mit ESC-Folgen anzuschliessen. Der Nutzer muss einen Taskpuffer von einer Laenge von mindestens 11(oktal) Bytes Laenge zur Verfuegung gestellt haben, ansonsten erscheint der Rueckkehrcode IE.BAD (siehe Abschnitt 3.3.). IO.RES - Abfrage des Geraetestatus (Halbduplex-Driver) ------------------------------------------------------ IO.RES wird nur vom Halbduplex-Driver bearbeitet. Als Reaktion dieser Funktion sendet das Bildschirmgeraet eine Statusnachricht an den Rechner, in der fuer jede Statusinfor- mation ein bestimmter Parameter p[n] (n=0,1,2,...) uebertragen wird.Die vom Geraet generierte ESC-Folge hat die Form ESC[p(n)...p(n);p(n)...p(n)n im Falle, dass am Bildschirmgeraet ein Drucker angeschlossen ist oder, falls das Geraet ohne Drucker betrieben wird, ESC[p(n)...p(n)n. Liegen mehrere Statusinformationen gleichzeitig vor, werden die zugehoerigen Parameter innerhalb der ESC-Folge nacheinander in aufsteigender Reihenfolge uebertragen. Der Status des Bildschirmgeraetes (siehe Tabelle 7) wird stets vor dem Status des Druckers (siehe Tabelle 8), getrennt durch Semikolon, uebertragen. Um alle Statusinformationen gleichzeitig empfangen zu koennen, muss bufle mindestens eine Groesse von 16 (oktal) Bytes haben, ansonsten gelangt der Rueckkehrcode IE.BAD in den E/A- Statusblock. 39 Die betreffende Task muss eine QIO$-Anweisung mit dem Funktions- code IO.ATE bzw. IO.ATT!TF.ESQ abgesetzt haben, um das Bedienge- raet fuer die Arbeit mit ESC-Folgen anzuschliessen. Ausserdem ist an dem be-treffenden Bediengeraet vor Start der Task das Kommando SET /ESCSEQ=TTnn: zu geben. Nach der Abfrage des Geraetestatus werden alle im Geraet anhaengigen Statusinformationen geloescht und die Anzeige ERROR STATE ausgeschaltet. Liegt im Bildschirmgeraet kein Fehlerstatus vor, so antwortet das Geraet auf eine Statusabfrage vom Rechner mit der Folge ESC[0;0n (BDE mit Drucker) oder ESC[0n. Tabelle 7: Geraetestatus der BDE K 8911 p(n) Status Fehlerbedingungen ----------------------------------------------------------------- 0 kein Fehlerstatus 1 Uebertragungsfehler Paritaetsfalsches oder rahmenfal- sches Zeichen vom Rechner empfangen 2 Eingriff erforderlich Drucker nicht konfiguriert 3 - - 4 Operationsfehler Unkorrekte Anweisung (ESC-Folge) vom Rechner empfangen 5 Uebertragungsfehler Paritaetsfalsches Zeichen vom Druk- ker empfangen 6 Unkorrekte Statusmeldung vom Drucker empfangen ----------------------------------------------------------------- Tabelle 8: Statusinformationen des Druckers p(n) Status Fehlerbedingungen ----------------------------------------------------------------- 0 kein Fehlerstatus 1 Uebertragungsfehler Paritaetsfalsches Zeichen im Drucker empfangen 2 Eingriff erforderlich Drucker nicht bereit (kein Papier oder Farbbandende) 3 Ausruestungsfehler Drucker mechanisch gestoert ----------------------------------------------------------------- 40 IO.RGR - Uebernehmen eines grafischen Eingaberecords ---------------------------------------------------- (Halbduplex-Driver) ------------------- Der Parameter stadr in der QIO$-Anweisung gibt die Adresse des Puffers an, in dem der Halbduplex-Driver den Eingaberecord ein- schliesslich MESSAGE IDENTIFICATOR abspeichert. Die Eingabeklasse (LOCATOR, CHOICE, PICK, STRING) und der Eingabetyp (REQUEST, SAMPLE) werden durch das Eingabe- Kommandobyte cobyt festgelegt und dem Geraet mitgeteilt. Der Eingabetyp EVENT ist fuer die Funktion IO.RGR unzulaessig; er fuehrt zu einer Fehlermitteilung. Ist die durch cobyt festgelegte, tatsaechlich uebertragene Datenmenge groesser als die Pufferlaenge bufle, erscheint der Rueckkehrcode IE.MOR. Es wird nur die durch bufle bestimmte Byteanzahl uebertragen. IO.RNE - Lesen ohne Echo ------------------------ Bei Aufruf der Funktion IO.RNE werden die Eingabezeichen in den Taskpuffer, der auf der Adresse stadr beginnt und die Laenge bufle hat, uebergeben, ohne dass ihr Echo auf dem Bildschirm er- scheint. Der gleiche Effekt wird erreicht, wenn vor einer Lese- QIO$-Anweisung eine Funktion SF.SMC ausgefuehrt wurde, die den Charakteristiknamen TC.NEC gesetzt hat. Lesen ohne Echo kann z.B. bei der Eingabe von Kennwoertern, die zur Gewaehrleistung des Datenschutzes dienen, Verwendung finden. Waehrend einer aktiven Funktion IO.RNE wird CTRL/R (vom Vollduplexdriver) ignoriert (vgl. Abschnitt 3.7.). IO.RPR - Lesen nach Meldung ---------------------------- Die Funktion IO.RPR bietet die Moeglichkeit, mit nur einer QIO$- Anweisung eine Meldung auf dem Bildschirm auszuschreiben und anschliessend die zugehoerige Bedienerantwort einzulesen. Gegenueber dem getrennten Aufruf zweier QIO-Anweisungen mit IO.WLB und IO.RLB hat die Funktion IO.RPR den Vorteil, dass der Verwaltungsaufwand durch das Betriebssystem geringer ist, da nur eine QIO$-Anweisung zur Abarbeitung gelangt. Ausserdem ist gesichert, dass auf die entsprechende Meldung die zugehoerige Antwort gegeben wird, da keine zusaetzliche QIO$-Anweisung zwischen diesen Teilfunktionen eingereiht werden kann. Wurde vor Abarbeitung der Funktion IO.RPR die Ausgabe mittels CTRL/O unterbunden, bewirkt diese Funktion zusaetzlich die Auf- hebung der Ausgabeunterdrueckung (analog zu IO.CCO). Bei aus- lagerbaren Tasks erfolgt die Auslagerung sowohl waehrend der Meldungsausgabe als auch waehrend des Wartens auf die Beendigung der Antworteingabe. Ebenfalls kann, unabhaengig davon, welcher der beiden Driver aktiv ist, die Funktion IO.RPR mit den die Leseoperation beein- flussenden Subfunktionsbits TF.RAL, TF.RNE bzw. TF.RST kombiniert werden. Bei Nutzung des Vollduplex-Drivers ist zusaetzlich das Schreiben der Meldung als "Write all" (TF.BIN) und das Senden von XOFF nach der Meldung (TF.XOF) moeglich. IO.RPR!TF.BIN Bei dieser Funktion wird die Meldung ohne Zwischeninterpretation 41 durch den Driver, wie bei einer IO.WAL-Anweisung, ausgefuehrt. IO.RPR!TF.XOF Diese Funktion veranlasst den Driver nach erfolgter Ausgabe der Meldung ein XOFF (CTRL/S) zum Terminal zu senden, um weitere Eingaben zu unterbinden. TF.XOF wird ignoriert, falls eine Voll- duplex-E/A-Operation laeuft. Beachte: Empfaengt der Vollduplex-Driver waehrend einer aktiven Funktion IO.RPR ein CTRL/U oder CTRL/R, reagiert er mit erneuter Ausgabe der Meldung. IO.RST - Lesen mit speziellem Endezeichen ----------------------------------------- Die Funktion IO.RST wirkt wie eine normale Funktion IO.RLB, die zusaetzlich zu Carriage Return (oktal 15) von speziellen Zeichen beendet werden kann. Das sind Zeichen, deren Oktalwert 0...37 be- traegt, ausserdem das Zeichen DEL (oktal 177) und, falls keine Klein-/Grossbuchstaben-Umwandlung spezifiziert ist, auch die Zeichen } (oktal 175) und -(oktal 176). Ausnahmen bilden die Zeichen CTRL/O (oktal 17), DC1 (oktal 21) und DC3 (oktal 23), die entsprechend der Beschreibung in Abschnitt 3.7. wirken. Der Bediengeraetedriver uebernimmt keine zusaetzliche Auswertung der speziellen Endezeichen. Daraus folgt zum Beispiel, dass mit- tels DEL keine Zeichenloeschung moeglich ist, ueber CTRL/C das Kommandoprogramm nicht gerufen werden kann und HT (Tabulator- sprung) nicht ausgefuehrt wird. Wird eine QIO$-Anweisung mit IO.RST vor Ablauf des Bytezaehlers durch Eingabe eines speziellen Endezeichens abgeschlossen, enthaelt das hoeherwertige Byte des 1. Wortes des E/A-Status- blockes das entsprechende Endezeichen. Im Eingabepuffer ist dieses Zeichen nicht enthalten. IO.RTT - Lesen mit speziellem Endezeichen (Vollduplex-Driver) ------------------------------------------------------------- IO.RTT wird nur vom Vollduplex-Driver bearbeitet. Diese Funktion wirkt wie eine normale Lesefunktion IO.RLB, nur dass das Endezeichen (bei IO.RLB oktal 15 ) vom Anwender beliebig im Bereich von 0 - 377 festgelegt werden kann (vgl. auch IO.RST). Die Auswahl dieses Zeichens erfolgt durch Setzen bestimmter Bits in einer 16-Worte-Tabelle, deren Startadresse als QIO$-Parameter mit anzugeben ist. 16 Worte x 16 Bit = 377 (oktal) - so kann jedem Bit in der Tabelle ein bestimmtes Zeichen zugeordnet werden. Das erste Wort der Tabelle enthaelt dabei die Bits, welche die ersten 16 ASCII-Zeichen (0 - 17 oktal) repraesentieren, das 2. Wort die naechsten 16 Bits fuer die Zeichen 20 - 27 (oktal) usw. Z.B. um das Symbol % (oktal 45) als Endezeichen der Leseoperation zu definieren, muss Bit 5 im 3. Tabellenwort gesetzt werden, da dieses Wort die Zeichen 40 - 57 repraesentiert. Auf die gleiche Weise koennen ebenfalls durch Setzen der entsprechenden Bits mehrere Endezeichen festgelegt werden. Wahlweise kann wie bei jeder Lesefunktion mit dem Time-out- Parameter die Eingabezeit begrenzt werden. 42 IO.WAL - Schreiben ohne Zeicheninterpretation durch --------------------------------------------------- den Driver (Vollduplex-Driver) ------------------------------ Diese Funktion wird nur vom Vollduplex-Driver bearbeitet und veranlasst die Ausgabe der Zeichen des Taskpuffers ohne deren Interpretation durch den Driver. Ebenfalls erfolgt bei Ueberschreitung des Standardpuffers (kann mit SET /BUF=xx gesetzt werden) kein "Wrap around" durch den Driver (vgl.Abschnitt 3.8.), sofern dieser Modus eingeschaltet wurde. IO.WBT - Dominierendes Schreiben -------------------------------- Diese Schreibfunktion kommt ohne Einreihung in die Warteschlange sofort zur Abarbeitung. Ist waehrend des Aufrufs der Funktion IO.WBT eine andere Schreibfunktion in Arbeit, wird diese beendet und anschliessend die Funktion IO.WBT bearbeitet. Ist zu diesem Zeitpunkt eine Lesefunktion in Arbeit, wird diese unterbrochen und nach Abschluss der Funktion IO.WBT der bis zum Abbruchzeitpunkt gefuellte Eingabepuffer noch einmal geechot. Waehrend der Bearbeitung der Funktion IO.WBT selbst wird eine Zeicheneingabe ignoriert. Ebenso ist eine mittels CTRL/O einge- stellte Ausgabeunterdrueckung wirkungslos. Die Funktion IO.WBT kann nicht zur Ausfuehrung kommen, falls bereits eine solche Funktion aktiv ist oder die Ausgabe einer Meldung ueber IO.RPR erfolgt. Die Task erhaelt in diesem Fall den Rueckkehrcode IE.RSU (siehe Abschnitt 3.3.). Die Funktion IO.WBT kann nur von privilegierten Task genutzt werden. Das MCR-Kommando BRO[ADCAST] nutzt z.B. die Funktion IO.WBT. IO.WGR - Ausgabe eines grafischen Records (Halbduplex-Driver) ------------------------------------------------------------- Unter der Adresse stadr ist der auszugebende grafische Record in der Nutzertask zu vereinbaren, bufle gibt seine Laenge einschliesslich Kommandobyte an (zulaessiges Maximum 253 Bytes, dezimal). SF.GMC - Uebernehmen der Charakteristika eines Bediengeraetes ------------------------------------------------------------- Mit dieser Funktion werden die Eigenschaften des Bediengeraetes abgefragt, die ueber das MCR-Kommando SET bzw. ueber die Funktion SF.SMC gesetzt werden koennen. Beim Aufruf gibt stadr die Anfangsadresse und bufle die Laenge eines Informationspuffers an. Das niederwertige Byte jedes Pufferwortes muss einen der Charakteristiknamen aus Tabelle 9 enthalten. Nach Abarbeitung der Funktion zeigt das zugehoerige hoeherwertige Byte an, ob diese Eigenschaft des Geraetes gesetzt ist (1) oder nicht (0), d.h. jedes Wort im Datenpuffer hat die folgende Form: .BYTE charakteristik-name .BYTE 0 bzw. 1 43 Tabelle 9: Charakteristiknamen der Funktionen SF.GMC bzw. SF.SMC Charakteristiknamen fuer beide Terminaldriver ----------------------------------------------------------------- mnemonisch oktal zugehoeriges Bedeutung MCR-Kommando ----------------------------------------------------------------- TC.ESQ 35 SET /ESCSEQ=TTnn: Nutzung von ESC-Folgen am Bediengeraet moeglich TC.NEC 47 - Bediengeraeteeingaben wer- den nicht geechot TC.PRI 51 SET /PRIV=TTnn: privilegiertes Bediengeraet TC.SLV 50 SET /SLAVE=TTnn: abhaengiges Bediengeraet TC.SMR 25 SET /LOWER=TTnn: keine Konvertierung von Klein- in Grossbuchstaben ----------------------------------------------------------------- Charakteristiknamen nur fuer Halbduplex-Driver ----------------------------------------------------------------- mnemonisch oktal zugehoeriges Bedeutung MCR-Kommando ----------------------------------------------------------------- TC.GRA 53 - Geraet im Grafik-Modus TC.SPK 52 - Programmstart ueber Einzel- tastendruck ----------------------------------------------------------------- Charakteristiknamen nur fuer Vollduplex-Driver ----------------------------------------------------------------- TC.ACR 24 SET /WRAP=TTnn: Wrap-around-Modus TC.BIN 65 SET /RPA=TTnn: Eingabemodus "Read - pass all" TC.CTS 72 - Terminalzustand 0: CTRL/Q aktiv 1: CTRL/S aktiv 2: CTRL/O aktiv 3: CTRL/S und CTRL/O aktiv TC.EDT 125 - Terminal fuehrt Editorfunk- tionen aus TC.EPA 42 - In Verbindung mit TC.PAR 0: Paritaet ungerade 1: Paritaet gerade TC.FDX 64 SET /FDX=TTnn: Vollduplex-Modus ----------------------------------------------------------------- 44 Tabelle 9 (Fortsetzung) ----------------------------------------------------------------- Mnemonisch Oktal Zugehoeriges Bedeutung MCR-Kommando ----------------------------------------------------------------- TC.HFF 17 SET /FORMFEED=TTnn: Hardware-FF moeglich 0: FF simuliert mit TC.LPP TC.HFL 13 SET /HFILL=TTnn: Anzahl der Fuellzeichen nach CR TC.HHT 21 SET /HHT=TTnn: Horizontaltabulation moegl. 0: HT simuliert durch Leer- zeichen TC.LPP 2 SET /LINES=TTnn:x Seitenlaenge (x=1...255.) TC.NBR 102 SET /NOBRO=TTnn: BROADCAST nicht erlaubt TC.PAR 41 - Paritaet herstellen und pruefen TC.RAT 7 SET /TYPEAHEAD=TTnn: "Type-ahead"-Puffer 0: 1 Zeichen 1: 36 Zeichen TC.RCP 3 SET /SPEED=TTnn: Empfangs-Baudrate TC.SCP 12 SET /CRT=TTnn: CRT-Terminal TC.TBF 71 - Anzahl der unbearbeiteten Zeichen im Schreibpuffer (SF.GMC) bzw. Loeschen (SF.SMC) TC.TTP 10 SET /TERM=TTnn: Terminaltyp 15: K 8911 6: Drucker TC.VFL 14 SET /VFILL=TTnn: Senden von 4 Fuellzeichen nach FF TC.WID 1 SET /BUF=TTnn: Puffergroesse (Zeilenlaenge) TC.XSP 4 SET /SPEED=TTnn: Uebertragungsgeschwindig- keit TC.8BC 67 SET /EBC=TTnn: Eingabe mit 8-bit-Zeichen (falls nicht TC.BIN aktiv) ----------------------------------------------------------------- Bemerkung: . TC.PRI und TC.SPK sind nur fuer SF.GMC gueltige Charakteri- stiknamen, nicht fuer SF.SMC. . Zur Definition der Symbole vergleiche auch die Funktion IO.GTS. 45 . Um Zeichen aus dem Schreibpuffer ("Type-ahead"-Puffer) zu empfangen, muss die Task das entsprechende Terminal anschlies- sen (IO.ATT). . Die maximale Groesse des Schreibpuffers betraegt 36 Zeichen. SF.SMC - Festlegen der Charakteristika eines Bediengeraetes ----------------------------------------------------------- Mit Hilfe dieser Funktion koennen Eigenschaften des Bediengerae- tes gesetzt bzw. geloescht werden. Jedes Wort im Datenpuffer der Task kann im niederwertigen Byte einen der Charakteristiknamen entsprechend Tabelle 9 enthalten (Beachte die Ausnahmen unter der Tabelle). Das zugehoerige hoeherwertige Byte gibt an, ob die entsprechende Eigenschaft des Bediengeraetes gesetzt (1) oder geloescht werden soll (0). Jedes Wort im Datenpuffer hat somit die folgende Form: .BYTE charakteristik-name .BYTE 0 bzw. 1 Anweisungen mit SF.SMC, die beliebige Bediengeraete betreffen, koennen nur von privilegierten Tasks aufgerufen werden. Nicht- privilegierte Tasks koennen nur die Charakteristika ihres eigenen Bediengeraetes TI: festlegen. 3.3. Rueckkehrcodes ------------------- 3.3.1. Rueckkehrcodes fuer nichtgrafische Funktionen ---------------------------------------------------- Der nach Ausfuehrung einer E/A-Operation vom Driver bereit- gestellte E/A-Statusblock hat fuer Bediengeraete im alphanumeri- schen Modus folgendes Aussehen: HW-Byte NW-Byte ----------------------------------- | sprc | rc | 1. Wort ----------------------------------- | Anzahl der uebertragenen Bytes | 2. Wort ----------------------------------- rc = Rueckkehrcode +1 bei erfolgreicher E/A-Beendigung <=0 bei fehlerhafter oder noch nicht erfolgter E/A-Opera- tion sprc = spezieller Rueckkehrcode 0, falls RC = +1 bei einer Ausgabeoperation 0, falls eine Leseoperation durch abgelaufenen Puffer- zaehler erfolgreich beendet wurde (RC = +1) 3, falls eine Leseoperation durch CTRL/C beendet wurde (RC=+1) nur im Vollduplex-Driver 15, falls eine Leseoperation durch Cursorpositionierung (RETURN-Taste) beendet wurde (RC = +1) 33, falls eine Leseoperation durch ALTMODE-Zeichen beendet wurde (RC = +1) 233, falls eine Leseoperation durch eine ESC-Folge beendet wurde 46 Im niederwertigen Byte des 1. Wortes des E/A-Statusblockes werden der Nutzertask Informationen zum Verlauf der E/A-Operation ueber- geben. Liefert der Driver einen der speziellen Codes IS.CC, IS.CR, IS.ESC oder IS.ESQ, enthaelt dieses stets +1 und erklaert damit die abgeschlossene E/A als erfolgreich, wobei im oberen Byte aus dem speziellen Rueckkehrcode die Art und Weise der E/A- Beendigung entnommen werden kann. Eine weitere Besonderheit bilden die mit SE.xxx beginnenden Namen (siehe Tabelle 10), welche bei Bearbeitung der Funktionen SF.GMC bzw. SF.SMC auftreten koennen. Hier enthaelt das nieder- wertige Byte des 1. Wortes des Statusblockes stets IE.ABO, waehrend das hoeherwertige Byte den entsprechenden Code spezifiziert. Das zweite Wort enthaelt dabei einen Offset, welcher auf das fehlerhafte Byte im QIO$-Puffer zeigt. Es sollte beachtet werden, dass IE.EOF ebenfalls bei erfolgreicher Beendigung einer mit CTRL/Z abgebrochenen Lesefunktionen als Rueckkehrcode erscheint. Ausser den E/A-Rueckkehrcodes IS.SUC, IS.PND, IE.ABO, IE.DAA, IE.DNA, IE.DNR, IE.EOF, IE.IFC, IE.NOD, IE.OFL, IE.SPC und IE.VER, die in Pkt. 1.7. und Anlage 2 ausfuehrlich beschrieben sind, liefern die BDE-Driver die in Tabelle 10 angegebenen Rueckkehrcodes. Tabelle 10 :Rueckkehrcodes fuer Bediengeraete Rueckkehrcodes fuer beide Driver ----------------------------------------------------------------- mnemo- oktal Bedeutung nisch bzw. okt dez ----------------------------------------------------------------- IS.ESQ 115401 Erfolgreiche Beendigung eines Lese-QIO durch ESC-Folge Ein Eingaberuf wurde mittels einer ESC-Folge beendet. Die eingegebenen Zeichen sowie die ESC- Folge befinden sich im Puffer der Task. IS.ESC 015401 Erfolgreiche Beendigung einer Leseoperation Die Eingabezeile wurde durch ein ALTMODE-Zeichen abgeschlossen. Die eingegebenen Zeichen be- finden sich im Puffer der Task. IS.CR 006401 Erfolgreiche Beendigung einer Leseoperation Eine Eingabezeile wurde durch die RETURN-Taste abgeschlossen. Die eingegebenen Zeichen befinden sich im Puffer der Task. SE.NIH 006361 Unzulaessiger Charakteristikname Ein Charakteristikname einer Funktion SF.GMC oder SF.SMC entspricht nicht den Festlegungen entsprechend Tabelle 9. IE.BAD 377 -1 Unzulaessiger Parameter Die Groesse eines Puffers ist unzulaessig. 47 Tabelle 10 (Fortsetzung) Rueckkehrcodes nur fuer Halbduplex-Driver ----------------------------------------------------------------- mnemo- oktal Bedeutung nisch bzw. okt dez ----------------------------------------------------------------- IE.IES 256 -82 Unzulaessige ESC-Folge Der Bediengeraetedriver hat eine fuer die BDE K 8911 unzulaessige ESC-Folge erkannt (siehe Abschnitt 3.6.) IE.PES 255 -83 Unvollstaendige ESC-Folge Der Bytezaehler einer E/A-Funktion ist abgelau- fen, ohne dass das Endezeichen einer begonnenen ESC-Folge erkannt wurde. SE.BIN 001761 Falscher Aufruf eines Charakteristiknamens Der Puffer einer Funktion SF.SMC enthaelt im hoeherwertigen Byte einen Wert ungleich 0 oder 1 (siehe Abschnitt 3.2.2.3.). IE.RSU 357 -17 Driver ueberlastet Eine Funktion IO.WBT (siehe Abschnitt 3.2.2.3.) ist angemeldet worden, waehrend bereits eine solche Funktion bzw. eine IO.RPR-Funktion bear- beitet wird. Die Anweisung kann wiederholt wer- den. ----------------------------------------------------------------- Rueckkehrcodes nur fuer Vollduplex-Driver ----------------------------------------------------------------- IS.CC 001401 Eine Eingabezeile wurde durch CTRL/C abgeschlos- sen. Die eingegebenen Zeichen befinden sich im Puffer der Task. SE.NSC 000012 Es wurde versucht, eine nicht zu setzende Cha- rakteristik zu aendern. IS.TMO 000002 Erfolgreiche Beendigung einer Lese-QIO$-Anwei- sung. Die Eingabezeile vom Terminal wurde mit Time-out abgebrochen (TF.TMO war gesetzt und das angegebene Zeitintervall abgelaufen). Die einge- gebenen Zeichen befinden sich im Puffer der Task. SE.FIX 000002 Es wurde versucht, eine feste Charakteristik mit Hilfe der Funktion SF.SMC zu aendern. IE.DAO 363 -13 Datenueberlauf durch Hardwarefehler Alle Zeichen bis zum fehlerhaften sind im Puffer. IE.BCC 276 -66 Hardwarefehler ----------------------------------------------------------------- 48 3.3.2. Rueckkehrcodes fuer grafische Funktionen ----------------------------------------------- Fuer die Arbeit im Grafik-Modus mit dem Halbduplex-Terminaldriver (siehe Abschnitt 3.12.) hat der uebergebene E/A-Statusblock einen besonderen Aufbau und verfuegt ueber spezielle Rueckkehrcodes. Fuer grafische Funktionen hat der E/A-Statusblock nach Beendigung der Operation folgendes Aussehen: HW-Byte NW-Byte -------------------------------- | drverr | 1. Wort -------------------------------- | bytcnt | deverr | 2. Wort -------------------------------- drverr = Rueckkehrcode Dieser Rueckkehrcode wird durch den Driver oder die Exekutive gesetzt. Er gibt Auskunft ueber den Verlauf der E/A-Operation, liefert aber keine Aussage ueber interne Fehlerzustaende des Rastersichtgeraetes K 8917 oder Gueltigkeit der grafischen Records (siehe Tabelle 11). deverr: Geraete-Fehlerzelle Trotz richtig verlaufener Uebertragungsprozedur (drverr=IS.SUC) kann das Rastersichtgeraet interne Fehlerzustaende mitteilen. Ihre Meldung erfolgt in diesem Byte. Bei mehreren verschiedenen Fehlermittei- lungen des Geraetes auf eine Uebertragung (drverr=IE.DEB), wird das zuletzt empfangene Fehlerbyte dem Nutzer uebergeben. Bei einer E/A-Exekutiveanweisung mit IO.RPR ist dieses Byte immer 0. bytcnt = Bytezaehler bei Eingabefunktionen Dieses Byte gibt bei grafischen Eingabefunktionen (IO.RGR) die Anzahl der vom Rastersichtgeraet uebergebenen Datenbytes, einschliesslich MESSAGE- Identificator an. Fuer alle anderen grafischen Funktio- nen hat es den Wert 0. 49 Tabelle 11: Zusaetzliche Rueckkehrcodes fuer Rastersichtgeraet K 8917 mnemo- oktal dez. Bedeutung nisch ----------------------------------------------------------------- IS.SUC 000001 1 Erfolgreicher Verlauf der Uebertragungsproze- dur einer grafischen Funktion Ueber die syntaktische Richtigkeit des grafischen Records und interne Fehler- zustaende gibt die Geraete-Fehlerzelle deverr Auskunft. Befindet sich das Geraet im grafischen Modus, werden alphanumerische Eingabefunktionen (IO.RLB, IO.RVB) als NOP- Funktionen behandelt und mit diesem Rueck- kehrcode beendet. IE.BAD 177777 -1 Unzulaessiger Parameter Die Recordlaenge bufle bei einer Funktion IO.ATG bzw. IO.DTG ist ungleich 3 bzw. ungleich 1. IE.IFC 177776 -2 Unzulaessiger Funktionscode Fuer ein Geraet, das durch die Generierung als nicht grafikfaehig gekennzeichnet wurde, ist eine E/A-Exekutiveanweisung mit einem grafischen Funktionscode angewiesen worden. IE.NOD 177751 -23 Unzureichender dynamischer Speicher Der fuer eine QIO$-Anweisung mit IO.CEB oder eine grafische Eingabe benoetigte dynamische Speicher reicht zum gegenwaertigen Zeitpunkt nicht aus. Die Anweisung kann wiederholt werden. IE.DNG 177621 -111 Geraet nicht im grafischen Modus Im alphanumerischen Modus wurde eine andere grafische Funktion als IO.ATG angewiesen. IE.DAG 177622 -110 Geraet bereits im grafischen Modus Der Code zeigt an, dass sich das Geraet bereits im grafischen Modus befindet. Eine weitere IO.ATG-Anweisung wird in diesem Zustand abgelehnt. IE.RCF 177612 -118 Uebertragungsprozedurfehler Bei der Prozedur der Datenuebertragung trat trotz 8-maliger Wiederholung eine Verletzung von Time-out-Bedingungen auf. IE.GRL 177615 -115 Grafischer Record zu lang Die Maximalgroesse fuer grafische Ausgabere- cords von 253 Bytes (dez.) bzw. fuer Eingaberecords von 81 Bytes (dez.), einschliesslich MESSAGE-Identificator, wurde in der E/A-Exekutiveanweisung ueberschritten. 50 Tabelle 11 (Fortsetzung) mnemo- oktal dez. Bedeutung nisch ----------------------------------------------------------------- IE.CHK 177645 -91 Pruefsummenfehler Bei einer grafischen Eingabefunktion trat trotz 8-maliger Wiederholung ein Pruef- summenfehler auf. Dem Nutzer werden keine Daten uebergeben. IE.DEB 177644 -92 Unterschiedliche Fehlerbytes empfangen Das Geraet hat die Uebertragung eines grafischen Records mit unterschiedlichen Fehlerbytes quittiert. Dieser Rueckkehrcode deutet auf unsichere Uebertragungsstrecke oder Geraetefehler. IE.EQN 177642 -94 EVENT-Warteschlange nicht leer Die Ausfuehrung einer Anweisung mit IO.CEB wird abgelehnt, da sich in der EVENT-Warte- schlange noch EVENT-Bloecke befinden oder bereits ein Fehlerblock erstellt ist. IE.MOR 177641 -95 Groessere Datenmenge empfangen Die in einer QIO$-Anweisung mit IO.RGR ange- gebene Puffergroesse bufle ist kleiner als die tatsaechlich empfangene Datenmenge, deren Groesse in bytcnt enthalten ist. IE.DEO 177640 -96 Ausgabefehler waehrend Eingabeanforderung Bei der Uebertragung des Eingabe-Kommando- bytes cobyt (siehe Abschnitt 3.2.2.1.) wurde ein Geraetefehler uebermittelt. Es erfolgt keine Datenuebernahme; bytcnt hat den Wert 0. 3.4. Informationen des GET-LUN-Makros ------------------------------------- Nach der Nutzung der GLUN$-Anweisung sind folgende Informationen in den 6-Worte-Puffer, der von der Nutzertask zur Verfuegung ge- stellt worden ist, eingeschrieben: Wort 1: Geraetename (2 KOI-7-Bytes): TT - Vollduplex-Driver TG - Halbduplex-Driver Wort 2, NW-Byte: Geraeteeinheitennummer HW-Byte: 200 (oktal), falls der Driver resident ist. 0 , falls der Driver ladbar ist und sich nicht im System befindet. Wort 3: 7 (oktal) Die Bedeutung der Bits ist dem Abschnitt 1.4.4. zu entnehmen. 51 Wort 4: Undefiniert Wort 5: Undefiniert Wort 6: enthaelt die Groesse des Geraetepuffer (standardmaessig fuer BDE : 80 Bytes) 3.5. Vertikalformatsteuerzeichen -------------------------------- Der Parameter vfc (siehe Abschnitte 3.2.1. und 3.2.2.) in der QIO$-Anweisung kann die folgenden Werte annehmen: Tabelle 12: Vertikalformatsteuerzeichen fuer Bediengeraete Oktal- KOI-7- Bedeutung wert Zeichen ----------------------------------------------------------------- 00 NUL Interne Formatsteuerung Der Pufferinhalt wird ausgegeben ohne eine be- sondere Formatsteuerung. 40 Leer- Einzel-Space zeichen Es wird eine Zeilenschaltung ausgeloest, an- schliessend der Pufferinhalt ausgegeben und zum Schluss der Cursor auf die 1. Stelle der Zeile zurueckpositioniert. 44 Dollar Anforderungsausdruck Nach Ausgabe eines LF wird der Zeilenpufferin- halt ausgegeben. Eine eventuelle Antwort auf diese Ausgabe kann so auf der gleichen Zeile erfolgen. 53 Plus Ueberschreiben Ausgabe des Pufferinhaltes und Ausgabe eines CR. Das fuehrt beim Schreiben der naechsten Zeile zum Ueberschreiben der vorherigen. 60 Null Doppel-Space Ausgabe von 2 LF. Ausgabe des Pufferinhaltes und anschliessendes Zurueckpositionieren des Cursors auf die erste Stelle der Zeile. 61 Eins Seitenvorschub Ausgabe eines Formularvorschubes FF ( vgl. Abschn.3.7.), Ausgabe des Pufferinhaltes und an- schliessendes Zurueckpositionieren des Cursors auf die erste Stelle der Zeile. 52 3.6. ESCAPE-Folgen ------------------ 3.6.1. Allgemeines ------------------ ESC-Folgen sind Folgen von KOI-7-Zeichen, die mit den Zeichen ESCAPE (oktal 33) beginnen und einer festgelegten Syntax entspre- chen. Bestimmte ESC-Folgen bewirken beim Bediengeraet K 8911 eine Steu- erfunktion bzw. koennen von diesem zum Rechner gesendet werden. Die vom Rechner gesendeten Zeichen und Zeichenfolgen koennen entweder das Echo der ueber die Bedientastatur erzeugten Zeichen bzw. Anweisungen darstellen oder vom Rechner auf Anwenderebene generiert werden. Werden vom Rechner Steueranweisungen empfangen, die nicht vereinbart oder fehlerhaft sind, werden diese vom Geraet nicht erkannt und sind wirkungslos. Das Bildschirmgeraet sendet das Zeichen DC4 zum Rechner und speichert den Status "Operationsfehler" (p=4). Gleichzeitig leuchtet die Anzeige ERROR STATE. Falls eine dieser Options generiert ist, sind zwei Vorausset- zungen noetig, um die erweiterten Moeglichkeiten des Bedien- geraetedrivers zu nutzen: 1. Das betreffende Bediengeraet muss vor Start der Task mittels MCR-Kommando SET /ESCSEQ=TTNN: bzw. mittels QIO-Anweisung mit Funktion SF.SMC in der Task (siehe 3.2.2.3.) fuer die Arbeit mit ESC-Folgen vorbereitet werden. 2. Die betreffende Task muss eine QIO$-Anweisung mit dem Funktionscode IO.ATE bzw. IO.ATT!TF.ESQ abgesetzt haben, um das Bediengeraet fuer die Arbeit mit ESC-Folgen anzuschliessen. (vgl.3.2.2.3.) Sind diese Voraussetzungen nicht gegeben, reagiert das Geraet wie in Systemen ohne diese Options. Welche dieser Options generiert ist, kann mit einer QIO-Anweisung mit dem Funktionscode IO.GTS abgefragt werden. Die Reaktionen des Drivers auf ESC-Folgen sind generierungsabhaengig und im folgenden Abschnitt beschrieben. 3.6.2. Moegliche Driverreaktionen auf ESC-Folgen ------------------------------------------------ Bei der Generierung des Leistungsumfanges der Bediengeraetedriver wird die "Unterstuetzung programmgesteuerter ESC-Folgen als Zeilenbegrenzer" angeboten. Zusaetzlich dazu bietet der Halbduplex-Driver die Option "Unterstuetzung programmgesteuerter ESC-Folgen mit Reaktion". 3.6.2.1. Bearbeitung von ESC-Folgen ohne Driverunterstuetzung ------------------------------------------------------------- Ohne die genannten Generieroptions ist die Uebergabe von ESC- Folgen mittels QIO$-Anweisung an eine Task nicht moeglich. ESCAPE wirkt in diesem Fall als ALTMODE-Zeichen (Endezeichen der Lese-QIO$-Anweisung ohne Positionierung des Cursors auf die erste Position der neuen Zeile) und liefert den Rueckkehrcode IS.ESC. 53 Die Ausgabe von ESC-Folgen ist moeglich, indem die betreffenden Zeichen im Ausgabepuffer der Task vereinbart werden. Der Bedien- geraetedriver uebernimmt jedoch keine Syntaxpruefung. Fehlerhafte ESC-Folgen koennen nur hardwaremaessig von der BDE K 8911 erkannt werden und fuehren bei Nutzung des Halbduplex-Drivers zum Ab- bruch der Zeichenausgabe mit dem E/A-Rueckkehrcode IE.VER. Der Vollduplex-Driver erkennt diesen Fall nicht, weil das von der BDE gesendete Zeichen DC4 nicht bearbeitet wird. Der dabei im Geraet gesetzte Fehlerstatus laesst sich nicht auswerten, da die dazu notwendige ESC-Folge ohne diese Systemoption nicht ein- gelesen werden kann. Da der E/A-Rueckkehrcode IE.VER auch bei anderen Fehlerzustaenden der BDE K 8911 erscheint (Paritaetsfeh- ler, rahmenfalsche Empfangszeichen u.a.), kann nicht eindeutig auf falsche ESC-Folge geschlossen werden. Unvollstaendige ESC- Folgen am Ende des Ausgabepuffers fuehren dazu, dass die Fehlerhaftigkeit der ESC-Folge erst waehrend der Abarbeitung der naechsten QIO$-Anweisung vom Bediengeraet erkannt werden kann. Folglich wird erst diese Anweisung, die bereits zu einer anderen Task gehoeren kann, mit IE.VER abgebrochen, wodurch unueber- sichtliche Fehlersituationen entstehen koennen. 3.6.2.2. Programmgesteuerte ESC-Folgen --------------------------------------- Die erweiterten Moeglichkeiten der Bediengeraetedriver bestehen u.a. darin, dass eine Gueltigkeitspruefung der Zeichen einer ESC- Folge vorgenommen wird; dabei wird in jedem Fall das Ende einer Folge erkannt. Ist die Option "Nutzung programmgesteuerter ESC-Folgen als Zei- lenbegrenzer" generiert, wird bei Erkennen des Endezeichens einer ESC-Folge der Eingaberuf mit dem Rueckkehrcode IS.ESQ abgebro- chen, und es erfolgt kein Echo der ESC-Folge. Wird eine unzulaes- sige bzw. unvollstaendige ESC-Folge erkannt, wird die QIO$-Anwei- sung mit dem E/A-Rueckkehrcode IE.IES bzw. IE.PES abgebrochen. Bei Ausgabe von ESC-Folgen erfolgt keine Syntaxpruefung. Unkorrekte ESC-Folgen fuehren zum Setzen des Fehlerstatus im Ge- raet (Anzeige ERROR STATE und Senden von DC4 zum Rechner), der mittels Taste CLEAR (ESC c) zurueckgesetzt werden kann (beachte Anmerkung bei Abschnitt 3.7.). Die Wirkung auf die aktive Schreibfunktion wurde bereits im vorigen Abschnitt darge- stellt. Bei Generierung der Option "Unterstuetzung programmgesteuerter ESC-Folgen mit Reaktion" des Halbduplexdrivers wird ein- als auch ausgabeseitig eine Syntaxpruefung vorgenommen. Bei unzulaes- siger bzw. unvollstaendiger ESC-Folge werden die QIO$-Anweisun- gen mit dem Rueckkehrcode IE.IES bzw. IE.PES abgebrochen. ESC-Folgen, die so aufgebaut sind, dass sie nur hardwaremaessig von der Bedieneinheit als fehlerhaft erkannt werden koennen, be- wirken den Abbruch der QIO$-Anweisung mit dem E/A-Rueckkehrcode IE.VER. Der dabei gesetzte Fehlerstatus in der Bedieneinheit kann durch Aufruf einer QIO-Anweisung mit der Funktion IO.RES (nur beim Halbduplex-Driver) zurueckgesetzt werden. Die Eingabe von ESC-Folgen kann sowohl ueber bestimmte Funktions- tasten als auch ueber Einzeltastenbedienung erfolgen. Das Echo der gesamten Folge und damit deren Reaktion auf die Bedienein- heit (nur bei "Unterstuetzung programmgesteuerter ESC-Folgen mit Reaktion" des Halbduplex-Drivers) erfolgt erst, nachdem das Endezeichen der ESC-Folge gegeben wurde. 54 Das Betaetigen der DEL-Taste inmitten einer ESC-Folge loescht die gesamte Folge aus dem Eingabepuffer der Task. Mit den Options "Unterstuetzung programmgesteuerter ESC-Folgen mit Reaktion" oder "Nutzung programmgesteuerter ESC-Folgen als Zeilenbegrenzer" und bei o.g. Voraussetzung 1 (vgl. Pkt. 3.6.2.) dient auch CTRL/- (oktal 37) als ALTMODE-Zeichen. D.h. mittels CTRL/- kann eine Eingabe-QIO$-Anweisung mit dem Rueckkehrcode IS.ESC ohne Cursorbewegung abgeschlossen werden. ESC-Folgen zur Abfrage der Cursorposition, des Geraetestatus bzw. der Geraeteidentifikation werden bei der Eingabe nicht geechot, da sofort die entsprechende Antwort des Bediengeraetes erfolgt. Bei der Ausgabe von ESC-Folgen zur Steuerung des Hard-copy-Druk- kers ist folgendes zu beachten: Diese Folgen werden von der Bedieneinheit nur dann als gueltig gewertet, wenn ein Drucker SD 1152 angeschlossen ist. Da der Bediengeraetedriver keine Konfigurationspruefung uebernimmt, wird bei Ausgabe einer solchen Folge ohne angeschlossenen Drucker die QIO$-Anweisung mit IE.VER abgebrochen. Es wird deshalb empfohlen, diese Steuerfolgen mit einer gesonderten QIO$-Anweisung abzuset- zen, damit unmittelbar nachfolgende Ausgaben wenigstens auf dem Bildschirm erscheinen, falls kein Drucker angeschlossen ist. 3.6.2.3. Programmunabhaengige ESC-Folgen ----------------------------------------- Wesentliche Unterschiede beider Driver sind bei der Eingabe von ESC-Folgen an das Kommandoprogramm (ungeforderte Eingaben) zu beachten. Der Vollduplex-Driver deutet ein ESC (<33>) in einer Kommandozeile stets als ALTMODE-Zeichen. Dagegen werden vom Halbduplex-Driver alle Kommandozeilen, die ein ESC enthalten, ge- echot, ohne in die Warteschlange des Kommandoprogrammes einge- tragen zu werden. Auf diese Weise kann die Steuerwirkung je- der ESC-Folge auf das Geraet hervorgerufen werden. Dabei fuehrt die Eingabe syntaktisch falscher ESC-Folgen zum Setzen des Feh- lerstatus im Geraet (Anzeige ERROR STATE), der mittels Taste CLEAR (ESC c) zurueckgesetzt werden kann. In diesem Fall dient das Zeichen CTRL/- (oktal 37) als ALTMODE- Zeichen fuer alle Eingaben auf die Kommandoanforderung des Systems (> oder MCR>). 3.6.3. Beschreibung der Steueranweisungen ----------------------------------------- Im folgenden werden alle Steuerzeichenfolgen (ESC-Folgen) be- schrieben, die fuer die Uebertragung zum Bildschirmgeraet zuge- lassen sind. 1. Anweisungen zur Cursorsteuerung - Positionierung des Cursors unabhaengig vom Rollbereich Die beschriebenen Anweisungen bewirken die Positionierung des Cursors auf dem Bildschirm ohne Beruecksichtigung des Rollbereichs. Mit der Ausfuehrung dieser Anweisung ist in keinem Fall ein Rollen der Daten im Rollbereich verbunden. Befindet sich das Bildschirmgeraet im HOLD-SCREEN-Modus oder im SMOOTH-ROLL-Modus (siehe Technische Beschreibung der BDE K 8911), kann eine Anweisung zur Bewegung des Cursors aus dem Rollbereich hinaus zum Anhalten der Datenausgabe (HOLD- Zustand) fuehren. 55 ESC[D Cursor um 1 Position nach links in derselben Zeile ESC[nA Cursor innerhalb der Spalte um n Zeilen (n=1...23) nach oben ESC[A Cursor um 1 Zeile nach oben ESC[nB Cursor innerhalb der Spalte um n Zeilen (n=1...23) nach unten ESC[B Cursor um 1 Zeile nach unten ESC[nC Cursor innerhalb der Zeile um n Positionen (n=1...79) nach rechts ESC[C Cursor um 1 Position nach rechts ESC[nD Cursor innerhalb der Zeile um n Positionen (n=1...79) nach links ESC[D Cursor um 1 Position nach links ESC[z;sH Cursor-Direktpositionierung z=1...24 Zeilennummer s=1...80 Spaltennummer ESC[H Setzen des Cursors auf die erste Zeichenposi- tion des Bildschirms - Positionierung des Cursors abhaengig vom Rollbereich ESC D Cursor wird zur gleichen Position der naechsten Zeile positioniert (Zeilenschaltung) ESC E Cursor wird an die erste Position der naechsten Zeile positioniert (Neue Zeile) Falls sich das Bildschirmgeraet im HOLD-SCREEN- oder im SMOOTH-ROLL-Modus befindet, so koennen die beiden oben genannten Anweisungen zum Anhalten der Datenausgabe fuehren. Die Ausfuehrung der Cursorpositionierung bzw. der Roll- operation erfolgt in diesem Fall erst nach Beendigung des HOLD-Zustandes, z.B. durch Betaetigen der Taste NEXT PAGE (siehe Anmerkung beim Abschnitt 3.7.). ESC M Cursor zur gleichen Spaltenposition der vorher- gehenden Zeile 2. Setzen und Loeschen von Tabulator-Stops ESC H Setzen eines Tabulator-Stops fuer die Spalte, auf welcher der Cursor positioniert ist ESC[0g Loeschen des Tabulator-Stops fuer die Spalte, ESC[g auf welcher der Cursor positioniert ist ESC[3g Loeschen aller Tabulator-Stops 56 3. Loeschoperationen Waehrend einer Loeschoperation werden die zu loeschenden Zeichen im Bildspeicher mit NUL-Zeichen ueberschrieben, so dass in der Darstellung auf dem Bildschirm ein Zwischenraum wie im Falle eines Leerzeichens entsteht. ESC[0K Loeschen aller Zeichen ab Cursorposition bis ESC[K zum Zeilenende einschliesslich des letzten Zeichens ESC[1K Loeschen aller Zeichen vom Zeilenanfang bis zur Cursorposition (einschliesslich) ESC[2K Loeschen der Zeichenposition, in welcher sich der Cursor befindet ESC[0J Loeschen aller Zeichen ab Cursorposition ESC[J (einschliesslich) bis zum Bildende ESC[1J Loeschen aller Zeichenpositionen ab Bildanfang bis zur Cursorposition (einschliesslich) ESC[2J Loeschen des gesamten Bildspeicherinhalts ESC[z1;s1;z2;s2J Loeschen eines beliebigen Bereiches auf dem Bildschirm z1,z2=1...24 Zeilennummer, z1 Bewirkt das Ausschalten des PRINT-LINE-Modus und der Anzeige PRINT LINE 5. Steuerung der Anzeigeintensitaet ESC[1m Einschalten der intensiv hellen Anzeige aller Zeichen ab Cursorposition ESC[0m Einschalten der normal hellen Anzeige aller Zei- chen ab Cursorposition 57 6. Definition des Rollbereiches ESC[n;mr Definition des Rollbereiches n definiert die oberste und m die unterste Zeile des Rollbereiches (n,m=1...24) ESC[r Zuruecksetzen des Rollbereiches Der gesamte Bildinhalt gilt als Rollbereich. 7. Setzen und Zuruecksetzen des WRAP-AROUND-Modus ESC[7h Einschalten des WRAP-AROUND-Modus sowie der zu- gehoerigen Anzeige neben dem Bildschirm ESC[7l Ausschalten des WRAP-AROUND-Modus sowie der zugehoerigen Anzeige 8. Spezielle Funktionstasten und Standardzuordnung (siehe dazu auch Anmerkung beim Abschnitt 3.7.) ESC O P PF1 (PIP) ESC O Q PF2 (MAC) ESC O R PF3 (TKB) ESC O S PF3 (EDI) ESC O p PF5 (FLX) ESC O q PF6 (LBR) ESC O r PF7 (CMP) ESC O s PF8 (DMP) ESC O t PF9 (ZAP) ESC O u PF10 (VFY) ESC O v PF11 (FOR) ESC O w PF12 (PTI) Das Druecken einer PF-Taste bewirkt das Senden einer jeweils zugeordneten Steuerzeichenfolge. Die Programmfunktionstasten dienen zum Aufruf von Anwenderprogrammen und Routinen im Rechner (siehe Abschnitt 3.7. und Anleitung fuer Bediener, Teil 2). Bemerkung: Die Zeichen einer Steueranweisung werden ohne Leer- zeichen hintereinander eingegeben bzw. beiTastendruck gesendet. Die in der Aufstellung enthaltenen Leer- zeichen dienen nur der Uebersichtlichkeit. 9. Abfrageoperationen - Abfrage der Cursorposition Der Empfang der Anweisung ESC[6n wird im Geraet als Aufforde- rung zur Meldung der aktuellen Cursorposition an den Rechner interpretiert. Das Geraet sendet daraufhin die Folge ESC[z;sR, wobei die Parameter z und s die aktuelle Zeilen- und Spalten- nummer angeben. Es gilt z=1...24 Zeilennummer s=1...80 Spaltennummer. (Siehe auch Abschnitt 3.2.2.3.) 58 - Abfrage des Geraetestatus durch den Rechner Als Operation auf die Anweisung ESC[5n vom Rechner sendet das Bildschirmgeraet eine Statusnachricht an den Rechner, in der fuer jede anhaengige Statusinformation ein bestimmter Parame- ter p (0,1,2,...) uebertragen wird. Die vom Geraet generierte ESC-Folge hat die Form ESC[p...p;p...pn im Fall, dass am Bildschirmgeraet ein Drucker angeschlossen ist oder, falls das Geraet ohne Beistelldrucker betrieben wird, ESC[p...pn. Liegen mehrere Statusinformationen gleichzeitig vor, werden die zugehoerigen Parameter innerhalb der ESC-Folge nacheinander in aufsteigender Reihenfolge uebertragen. Der Status des Geraetes wird stets vor dem Status des Druckers uebertragen. Zuordnungen zu den einzelnen Parametern p siehe Tabellen 7 und 8. Nach der Abfrage des Geraetestatus werden alle im Geraet an- haengigen Statusinformationen geloescht und die Anzeige ERROR STATE ausgeschaltet. Liegt in der BDE kein Fehlerstatus vor, so antwortet das Geraet auf eine Statusabfrage mit der Folge ESC[0,0n bzw. ESC[0n. - Abfrage der Identifikation Zur Ueberpruefung der Dialogfaehigkeit zwischen BDE K 8911 und Rechner kann eine Abfrage der Identifikation des Geraetes durch Aussenden der Folge ESC[0c vorgenommen werden. Bei ordnungsgemaesser Funktion sendet das Bildschirmgeraet die Identifikation ESC[?2;pc, wobei der Parameter p wie folgt bestimmt ist: p=0 K 8911 ohne Drucker p=8 K 8911 mit Drucker 3.7.Steuerzeichen und Sondertasten ---------------------------------- Verschiedene Steuerzeichen haben im OMOS 1630 eine spezielle Wirkung. Sie koennen durch Einzeltasten oder/und durch gleichzei- tiges Betaetigen der Taste CTRL und einer bestimmten Taste x (Schreibweise CTRL/x) erzeugt werden. CTRL/R, CTRL/U und CTRL/Z werden auf dem Bildschirm mit ^R, ^U bzw. ^Z geechot.Die Benen- nung der Steuerzeichen in Tabelle 13 bezieht sich auf die Tasta- tur mit der Symbolbelegung entsprechend K 7604.51, d.h. mit lateinischen Gross- und Kleinbuchstaben (siehe technische Beschreibung K 8911). 59 Tabelle 13: Steuerzeichen fuer Bediengeraete Steuer- Oktal- Einzel- Bedeutung zeichen wert taste ----------------------------------------------------------------- CTRL/C 3 - Mit Hilfe dieses Steuerzeichens kann eine Eingabe an das Kommandoprogramm gerichtet werden. Nach Quittieren des CTRL/C durch das Bediengeraet mit der Ausgabe von MCR> kann die Eingabe der Kommandozeile erfol- gen. Falls eine QIO$-Anweisung mit IO.ATA, IO.RAL oder IO.RST vorliegt, erfolgt die Interpretation der Eingabe durch die entsprechende Task. Gewoehnliche Lesefunktionen werden mit dem Rueckkehrcode IS.CR (Halbduplex-Driver) bzw. IS.CC (Vollduplex-Driver) beendet. HT 11 -->| Es wird eine Horizontaltabulatorschaltung (CTRL/I) bewirkt, wobei die Tabulatoren standard- maessig aller 8 Zeichen eingestellt sind. Bei Anwendung von ESC-Folgen, die eine Cursorpositionierung bewirken, werden erst auf der naechsten Zeile die urspruengli- chen Tabulator-Halts wieder erreicht. CTRL/J 12 LF Zeilenvorschub (LF) CTRL/K 13 - CTRL/K bewirkt eine Vertikaltabulator- schaltung Es werden vier Zeilenschaltungen (LF) ausgegeben. CTRL/L 14 - Form Feed (FF) Es werden acht (Halbduplex) bzw. 4 (Vollduplex) Zeilenschaltungen (LF) ausge- geben. Bei Bedienung eines Druckers durch den Vollduplex-Driver wird ein Formular- vorschub auf dem Drucker ausgefuehrt. CR 15 RETURN Die laufende Eingabezeile wird beendet, der Cursor wird auf die erste Position der naechsten Zeile gesetzt. RETURN gilt als Endezeichen einer Lese-QIO$-Anweisung und wird nicht in den Eingabepuffer uebernom- men. Die Funktion IO.RAL bildet dabei eine Ausnahme. CTRL/O 17 - CTRL/O bewirkt die Unterdrueckung der Ausgabe auf dem Bediengeraet. Bei nicht an die Task angeschlossenen Geraeten betrifft das nur den aktuellen Ausgabepuffer. Bei angeschlossenen Bediengeraeten bleibt die Ausgabeunterdrueckung wirksam bis - zum naechsten Trennen des Geraetes (IO.DET), - zur naechsten Eingabe ueber das Geraet, 60 Tabelle 13 (Fortsetzung) Steuer- Oktal- Einzel- Bedeutung zeichen wert taste ----------------------------------------------------------------- - zum naechsten CTRL/O oder - zu einer QIO$-Anweisung mit Funktions- code IO.CCO, IO.WBT oder beim Halbdu- plex-Driver mit IO.RPR abgearbeitet wird. DC1 CTRL/Q 21 OFF, Abhaengig vom jeweiligen Zustand des Be- DC3 CTRL/S 23 HOLD, diengeraetes wird eines dieser Zeichen bei NEXT Betaetigung der entsprechenden Tasten zum PAGE Rechner gesendet. Sie dienen zum Anhalten (DC3) bzw. Fortsetzen (DC1) der Datenaus- gabe. Unter bestimmten Umstaenden (HOLD- SCREEN-MODUS, SMOOTH-ROLL-MODUS) erzeugt die BDE K 8911 diese Zeichen automatisch, wodurch die Synchronisation der Datenaus- gabe erfolgt. CTRL/R 22 Die Bearbeitung von CTRL/R erfolgt nur durch den Vollduplex-Terminaldriver und ist generierungsabhaengig. Wird dieses Zeichen bei Bearbeitung einer nichtabge- schlossenen Eingabezeile vom Driver empfangen, erfolgt eine Zeilenschaltung (LF) mit Rueckpositionierung des Cursors auf die 1. Stelle der Zeile und die Aus- gabe der unvollstaendigen Eingabezeile, wie sie sich im Puffer be- findet. DC4 24 - Der Vollduplex-Driver bearbeitet dieses (CTRL/T) Zeichen nicht. Bei Erkennung von DC4 im Eingabedaten- strom bricht der Halbduplex-Driver die laufende E/A-Operation mit dem Rueckkehr- code IE.VER. (siehe Abschnitte 3.3. und 3.6.2.1.) ab. Das geschieht unabhaengig davon, ob DC4 automatisch von der BDE K 8911 oder mittels CTRL/T erzeugt wurde. CTRL/U 25 - CTRL/U bewirkt das Loeschen der bisher eingegebenen Zeile. Es erfolgt das Echo ^U auf dem Bildschirm. Anschliessend wird der Cursor auf die erste Stelle der naechsten Zeile positioniert, so dass die Zeile sofort neu eingegeben werden kann. CTRL/X 30 CTRL/X loescht den "Type-ahead Buffer" des Vollduplexdrivers (vgl. 3.10.). 61 Tabelle 13 (Fortsetzung) Steuer- Oktal- Einzel- Bedeutung zeichen wert taste ----------------------------------------------------------------- CTRL/Z 32 - Mit CTRL/Z wird eine Eingabe ueber das Bediengeraet abgeschlossen. Dienstprogram- me wie Assembler, Editor usw. werten eine mit CTRL/Z abgeschlossene Eingabe als An- weisung, ihre Arbeit zu beenden. Auf dem Bildschirm erscheint als Echo ^Z, und die Steuerung wird an das Kommandoprogramm zurueckgegeben. ESCAPE 33 ESC Falls die Bearbeitung von ESC-Folgen durch den Driver nicht im System generiert ist, wird die laufende Eingabe mit dem Rueckkehrcode IS.ESC beendet. Der Cursor wird nicht zurueckpositioniert. Sind die entsprechenden Voraussetzungen fuer die Arbeit mit ESC-Folgen gegeben, wird ESCAPE als Beginn einer solchen Folge gewertet. Die Behandlung der ESC-Folge (siehe Abschnitt 3.6.2.) erfolgt entsprechend der jeweiligen Generierungs- option. Bei Eingabe von ESCAPE inner- halb einer MCR-Kommandozeile wird, falls der Halbduplex-Driver aktiv ist, die Zeile byteweise geechot, aber nicht in die Warteschlange des Kommandoprogramms eingereiht, anderenfalls dient ESC auch hier als ALTMODE-Zeichen. CTRL/- 37 - In Systemen, in denen die Bearbeitung von ESC-Folgen durch den Driver generiert ist, hat dieses Zeichen die Funktion des ALTMODE-Zeichens, falls die Voraussetzung 1 zur Arbeit mit ESC-Folgen erfuellt ist (siehe Abschnitt 3.6.2.). Falls der Halbduplex-Driver aktiv ist, gilt fuer MCR-Eingaben CTRL/- immer als ALTMODE-Zeichen, d.h. die Eingabe wird beendet, aber keine Cursorpositionierung auf die erste Position der neuen Zeile eingeleitet. Dem Kommandoprogramm wird in diesem Fall der Oktalwert 33 uebergeben. (z.B. Beendigungsanweisung fuer Kommando OPE). 175 } Falls die Option "wahlweise Klein-/ Gross- buchstabenumwandlung bei Eingaben ueber 176 _ Bediengeraet" im System ist und ein MCR- Kommando SET /LOWER=TTn: bzw. eine ent- sprechende QIO$-Anweisung mit SF.SMC (siehe 3.2.2.3..) gegeben wurde, bedeuten diese Zeichen } bzw. _. Sind diese Voraussetzungen nicht erfuellt, ha- ben sie die Wirkung des ALTMODE-Zeichens. 62 Tabelle 13 (Fortsetzung) Steuer- Oktal- Einzel- Bedeutung zeichen wert taste ----------------------------------------------------------------- DEL 177 DEL Bei Betaetigung dieser Taste wird das zu- letzt eingegebene Zeichen durch Schreiben einer "Backspace-Space-Backspace-Folge" auf dem Bildschirm geloescht; es wird auch nicht in den Eingabepuffer uebernom- men. Bei eingeschaltetem WRAP-AROUND- Modus (siehe Technische Beschreibung K 8911) kommt der gleiche Mechanismus zur Anwendung, mit dem Unterschied, dass bei automatischem Uebergang auf eine neue Zeile maximal die Zeichen der laufenden Zeile auf dem Bildschirm geloescht werden. Der Vollduplex-Driver unterstuetzt diesen Modus nur, wenn bei der Systemgenerierung die entsprechende Option ausgewaehlt und das jeweilige Terminal als CRT-Geraet gekennzeichnet wurde. Andernfalls reagiert der Driver auf DEL mit Ausgabe eines "/" und anschliessendem Echo des geloeschten Zeichens. PF-Tasten Programmstart ueber Einzeltastendruck Ist der Halbduplex-Driver aktiv, koennen mit den Funktionstasten PF1 bis PF12, die sich in der obersten Reihe der Bedientastatur befinden, Anwenderprogramme und Routinen im Rechner aufgerufen werden. Voraussetzung ist, dass die entsprechenden Tasks (Dienstprogramme usw.) vorher installiert worden. Nach dem Druecken einer PF-Taste erscheint am linken Bildschirmrand das Zeichen **, und es meldet sich das jeweilige Dienstprogramm auf dem Bildschirm (siehe 3.6.3., Unterpunkt 8). Anmerkung: Da der Vollduplex-Driver ungeforderte Eingaben stets an das Kommandoprogramm uebergibt und somit keine ungeforderten ESC-Folgen bearbeitet, ist die Nutzung der Sondertasten, die ESC-Folgen aussenden (PF-Tasten, Cursor, CLEAR, REC...) in diesem Modus nur bei aktivem Halbduplex-Driver moeglich. 3.8. Automatisch CR/LF ---------------------- Durch Senden der ESC-Folge ESC[7h laesst sich die BDE K8911 in den Wrap-aroud-Modus setzen. Das bedeutet, dass bei Erreichen der letzten Bildposition durch den Cursor hardwaremaessig von der BDE eine Zeilenschaltung (CR/LF) ausgefuehrt wird. Zusaetzlich dazu kann der Vollduplex- driver bei Erreichen einer Bildschirmspalte, welche mit dem MCR- Kommando >SET /BUF=TI:n 63 festgelegt werden kann (Standard 80.), die Ausgabe von CR/LF veranlassen, falls der entsprechende Modus mit >SET /WRAP=TTxx: eingeschaltet wurde. Das Kommando SET /BUF kann ebenfalls ohne Argument verwendet werden, um die eingestellte Buffergroesse eines Terminals anzuzeigen. Beispiel: >SET /BUF=TI: BUF=TI:00072. 3.9. Eingabepufferung in der Nutzertask --------------------------------------- Vom Terminal eingegebene Zeichen werden direkt in den zugehoerigen Taskpuffer uebernommen, d.h. die Zwischenspeicherung der Zeichen im dynamischen Systempuffer entfaellt. In Verbindung mit der Auslagerung von Tasks waehrend der Bediengeraeteeingabe kommt folgender Mechanismus zur Anwendung: Trotz der Eingabepufferung in der Nutzertask wird ein Exekutive- puffer fuer die Eingabe zur Verfuegung gestellt. Gleichzeitig kann die betreffende Task durch jede andere Task, unabhaengig von deren Prioritaet, waehrend der Eingabe ausgelagert werden. Auf diese Art hat der Nutzer indirekt die Moeglichkeit, ueber die Auslagerbarkeit der Tasks die dynamischen Systemressourcen zu beeinflussen. Die Taskpufferung empfangene Zeichen reduziert nicht unbedingt Systemzeit, da jedes Zeichen einzeln zum Task- puffer uebertragen werden muss. 3.10. Ein-Ausgabe-Zwischenpufferung im Vollduplexdriver ------------------------------------------------------- 3.10.1. Prinzip --------------- Die Pufferung von Eingaben an auslagerbare Tasks erfolgt im "Private Buffer Pool" (vgl.3.10.3.). Ist ein Puffer voll, wird automatisch ein neuer zugewiesen und mit dem vorigen verbunden. Nach Beendigung des E/A-Transfers uebergibt die Exekutive den Inhalt dieser Puffer an die Task, so dass diese Puffer vom Terminaldriver wieder freigegeben werden koennen. Misslingt der Versuch des Drivers, den ersten Eingabepuffer zuzu- weisen, werden die Zeichen direkt in den Taskpuffer uebertragen. War der Versuch hingegen erfolgreich, aber die Zuweisung eines weiteren benoetigten Puffers nicht moeglich, wird der Eingaberuf mit dem Fehlercode IE.NOD (vgl. 3.3.) abgebrochen. In diesem Fall enthaelt das zweite Wort des E/A-Statusblocks die Anzahl der Zeichen, die bis dahin in den Taskpuffer uebergeben wurden. Danach kann die Task eine erneute Lese-QIO$-Anweisung mit aktua- lisierten Parametern ausgeben, um die restlichen Daten zu ueber- nehmen. Der Schreibpuffer ("Type-ahead Buffer", siehe 3.10.2.) sichert, dass keine Eingabezeichen verloren gehen. Alle Ausgaben an das Terminal erfolgen grundsaetzlich gepuffert. Der Driver weist so viele Puffer, wie benoetigt, an und verbindet 64 sie mit Hilfe einer entsprechenden Liste. Steht nicht genuegend Pufferplatz fuer alle Ausgabedaten zur Verfuegung, wird der E/A- Transfer in mehreren Teiluebertragungen durchgefuehrt, wobei der verfuegbare Pufferplatz fuer die jeweilige Teiluebertragung genutzt wird. Kann gar kein Puffer zugewiesen werden, muss die Operation mit dem Fehlercode IE.NOD abgebrochen werden. Die unbedingte Ausgabepufferung verringert Zeit im Systemzustand und ermoeglicht die Taskauslagerung waehrend des Ausgabetransfers zum Terminal, wenn die gesamte Ausgabe in einer Pufferliste steht, d.h. genuegend Puffer zur Verfuegung steht. 3.10.2. "Type-ahead"-Schreibpufferung ------------------------------------- Vom Terminaldriver empfangene Zeichen werden entweder sofort bearbeitet oder im Schreibpuffer (Type-ahead Buffer) nach dem FIFO-Prinzip zwischengespeichert. Dieser Puffer wird wie folgt verwendet: 1. Schreiben in den Puffer Ein Eingabezeichen wird im Schreibpuffer abgelegt, wenn minde- stens eine der folgenden Bedingungen gegeben ist: - Der Driver ist nicht bereit, das Zeichen zu bearbeiten (anstehender oder laufender Fork-Prozess). - Es befindet sich augenblicklich wenigstens 1 Zeichen im Schreibpuffer. - Die Eingabe soll geechot werden, aber die Ausgaberichtung des Drivers ist bereits augenblicklich besetzt. - Das Terminal ist an eine Task angeschlossen (IO.ATT), ohne dass eine Leseoperation aktiv bzw. ein AST bei ungeforder- ter Eingabe programmiert ist. Beachte: Abhaengig vom Zustand des Terminals und dem Vorhanden- sein einer Lesefunktion (ohne/oder mit Subfunktions- bits) bzw. einem AST bei unangeforderten Eingabe koennen CTRL/C, CTRL/O, CTRL/Q und CTRL/X sofort bearbeitet und werden nicht im Schreibpuffer zwischen- gespeichert. Solange sich ein Eingabezeichen im Schreibpuffer befindet, wird dieses Zeichen nicht geechot. Das erfolgt erst nach Auslesen des Puffers, da die Art der Lesefunktion (z.B. Lesen ohne Echo) dem Driver bis dahin nicht bekannt ist. 2. Auslesen des Puffers Erlangt der Driver die Bereitschaft, eine Eingabe zu bearbei- ten, oder fordert eine Task eine Leseoperation, versucht der Driver, ein Zeichen aus dem Schreibpuffer zu holen. Bei Erfolg wird dieses bearbeitet und gegebenenfalls geechot. Diese Pro- zedur wird fortgesetzt, bis entweder der Puffer leer ist, keine weiteren Zeichen vom Driver bearbeitet werden koennen oder eine Lesefunktion mit angeschlossenem (IO.ATT) Terminal beendet wird. 65 3. Loeschen des Puffers Der Schreibpuffer wird geloescht, wenn der Driver ein CTRL/C oder CTRL/X empfaengt bzw. das Terminal (vgl. 1. und 2.) von der Task getrennt (IO.DET) wird. Die Wirkung von CTRL/C und CTRL/X bleibt aus, falls eine Leseoperation mit speziellem Endezeichen oder ohne Zeicheninterpretation durch den Driver aktiv ist. Jedes Zeichen, das bei vollem Puffer nicht mehr gespeichert werden kann, bewirkt das Echo des Zeichens BELL zum Terminal. Soll ein eingegebenes Zeichen waehrend einer laufenden Ausgabeuebertragung geechot werden, wird dieses bis zur Beendigung der Uebertragung im Schreibpuffer gehalten. 3.10.3. "Private Buffer Pool" ----------------------------- 3.10.3.1. Arbeitsweise ---------------------- Unter dem "Private Buffer Pool" ist ein drivereigener dynamischer Arbeitspeicher fuer die Zwischenpufferung der Ein- und Ausgabe (Pool) zu verstehen, welcher sich innerhalb des Vollduplex- Terminaldrivers befindet. Jedesmal, wenn der Driver dynamischen Speicherplatz benoetigt, wird zuerst versucht, einen Puffer in diesem "Private Buffer Pool" zuzuweisen. Ist das nicht moeglich, erfolgt ein zweiter Versuch im Systempool. Schlaegt diese Zuweisung im Systempool waehrend der Eingabe einer Kommandozeile fehl, wird ^U simuliert und geechot. In besonderer Weise werden Puffer von Kommando- zeileninterpreter-Tasks (MCR, DCL, andere CLI) behandelt. Nach Beginn der unaufgeforderten Eingabe erfolgt die Pufferzuweisung fuer die Kommandozeile wie oben beschrieben. Ist diese Zuweisung im Systempool erfolgt, wird der Pufferinhalt direkt an die Kommandozeileninterpreter-Task uebergeben, wogegen bei Pufferung im "Private Buffer Pool" erst eine Uebertragung des Pufferinhalts in den Systempool durchgefuehrt werden muss, um diesen fuer die Task verfuegbar zu machen. 3.10.3.2. Groesse ----------------- Die Groesse des gesamten Vollduplexterminaldrivers wird beim Laden des Drivers im VMR-Lauf waehrend der Systemgenerierung wie folgt festgelegt: LOA TT:/SIZE=nnn nnn - max. 20000 oktal (8 K Worte). Den dabei nicht von den Driverbefehlen beanspruchten Speicherplatz nimmt der "Private Buffer Pool" ein. Da die Groesse des eigentlichen Drivers zwischen 2,5 und 4,5 K Worten liegt (abhaengig von den gewaehlten Generierungsoptions), verbleiben fuer den Pool 3,5 bis 5,5 K Worte. 66 3.11. Vollduplex-Operation -------------------------- Ein Terminal befindet sich im Vollduplex-Modus, wenn der Vollduplex-Driver versucht, gleichzeitig eine Lese- und eine Schreibanforderung zu bedienen. Dagegen werden Attach- und Detachfunktionen sowie das Festlegen der Charakteristika eines Bediengeraetes nur ausgefuehrt, wenn augenblichlich keine Schreib- oder Leseoperationen bearbeitet wird. 3.12. Grafikunterstuetzung -------------------------- 3.12.1. Allgemeines ------------------- Waehrend bei Nutzung des Vollduplex-Drivers die grafische Ein- und Ausgabe mit Hilfe der Funktionen IO.WAL und IO.RAL der QIO$- Anweisung erfolgen kann, vefuegt der Halbduplex-Driver ueber spezielle Grafikfunktionen (siehe 3.2.2.3.). Um diese zusaetzlichen Leistungen des Drivers nutzen zu koennen, muessen folgende Voraussetzungen erfuellt sein: . Die Option Grafikunterstutzung des Halbduplex-Drivers muss generiert worden sein. Ob das der Fall ist, kann mit einer QIO$-Anweisung und Funktion IO.GTS ermittelt werden (siehe 3.2.2.3.). . Der Halbduplex-Driver muss mittels MCR-Kommando ATX (siehe 3.13.) aktiviert worden sein. . Das entsprechende Terminal muss grafikfaehig sein (Raster- sichtgeraet RSG K 8917) und als solches bei der Systemgenerierung spezifiziert worden sein. 3.12.2. Bedienungshinweise -------------------------- Im Gegensatz zum alphanumerischen Modus erfolgt im grafischen Modus die Uebertragung mit 8 Informationsbits. Die Umschaltung zwischen beiden Modi erfolgt mit QIO$-Anweisungen mit Funktionen IO.ATG bzw. IO.DTG (siehe 3.2.2.3.). Nach der Aktivierung des grafischen Modus gelangen nur E/A-Exekutiveanweisungen zur Ausfuehrung, welche grafische Funktionen, Steuerfunktionen ohne Subfunktionsbits oder die Funktionen IO.WLB bzw. IO.WVB beinhalten. Alphanumerische Eingabefunktionen (IO.RLB, IO.RVB) werden als NOOP-Funktionen behandelt und mit dem Rueckkehrcode IS.SUC beendet. Fuer alphanumerische Daten, die mittels QIO$-Anweisung mit IO.WLB oder IO.WVB ausgegeben werden, stehen im grafischen Modus nur die beiden untersten Bildschirmzeilen zur Verfuegung. Eingaben an das Kommandoprogramm sind unbedingt mit CTRL/C einzuleiten und werden vom Driver (!) mit der Ausschrift MCR> beantwortet. Falls das Geraet den entsprechenden Status hat (nicht gebunden, kein SLAVE-Terminal), werden die im folgenden eingegebenen Zeichen geechot und die Kommandozeile vom Kommando- programm bearbeitet. Loest das gegebene Kommando eine Bildschirmausschrift aus, kann diese auf den beiden untersten Zeilen erscheinen. Erfolgt keine Ausschrift, ist das stehenbleibende MCR> kein 67 Signal fuer vorhandene Eingabebereitschaft von MCR. Bei jeder neuen Eingabe an das Kommandoprogramm ist die Eingabebereitschaft jedesmal durch CTRL/C anzufordern. 3.13. Aktivieren des Vollduplex- bzw. Halbduplex-Drivers -------------------------------------------------------- 3.13.1. Laden des Halbduplex-Drivers ------------------------------------ Bei Laden des Halbduplex-Drivers werden in der Power-fail-Routine alle als umschaltbar generierten Terminals auf das entsprechende vom Vollduplex-Driver bediente Geraet gleicher physischer Geraetenummer umgeschaltet, die Interrupt-Eintrittspunkte beider Driver in definierten Zellen zur Verfuegung gestellt und bestimmte Parameter der Anschlusssteuereinheit (Interruptvektor, CSR-Adresse) in die Datenbasis des TG-Drivers uebernommen. Der Aufbau des entsprechenden Teils der Interrupttabelle fuer Terminals sowie die Programmierung der Anschlusssteuereinheit werden bereits vom TT-Driver ausgefuehrt und vom TG-Driver nicht mehr veraendert. 3.13.2. ATX und DTX ------------------- Befinden sich beide Driver im System, kann jedes bei der Generierung ausgewaehlte Terminal wahlweise vom Vollduplex- oder vom Halbduplex-Driver bedient werden und hat somit zwei physische Geraetenamen: TT: und TG:. Die Umschaltung erfolgt mit den Kommandos ATX (Activate TG-Mode) bzw. DTX (Deactivate TG-Mode) (siehe Anleitung fuer Bediener, Teil 2: "Steuerprogrammsystem"). Bei Systemstart ist standardmaessig der Vollduplex-Terminaldriver aktiv. 68 4. Driver fuer Kassettenplattenspeicher --------------------------------------- 4.1. Allgemeines ------------------ Fuer den Einsatz an dem Mikrorechnergeraetesystem MGS K 1600 ist der Kassettenplattenspeicher (KPS) CM 5400 vorgesehen. Der KPS (CM 5400) besteht aus dem Laufwerk mit je einer Fest- und Wechselplatte. Die dazugehoerige Anschlusssteuereinheit fuer Kassettenplatten- speicher ist die AKP K 5160. Von einer AKP koennen maximal vier CM 5400 bedient werden. Technische Daten: (Aufbau einer Platte) Oberflaechen: 2 Zylinder: 200 + 4 Ersatzzylinder (400 Spuren + 8 Ersatzspuren) Sektoren pro Spur: 12 Sektorgroesse: (in Worten) 256 (1 physischer Block) Worte pro Spur: 3072 Bloecke pro Platte: 4800 Speicherkapazitaet pro Platte: 1228800 Worte 4.2. Geraetefunktionen ------------------------ 4.2.1. Standardfunktionen ------------------------- Die Standardfunktionen fuer die Kassettenplattenspeicher sind: QIO$C IO.ATT,... Anschliessen eines E/A- Geraetes an eine Task QIO$C IO.DET,... Trennen eines E/A-Gerae- tes von einer Task QIO$C IO.KIL,... Annullieren von E/A-An- forderungen QIO$C IO.RLB,..., Lesen eines logischen Blockes QIO$C IO.RVB,..., Lesen eines virtuellen Blockes QIO$C IO.WLB,..., Schreiben eines logischen Blockes QIO$C IO.WVB,..., Schreiben eines virtuel- len Blockes 69 wobei: stadr = Anfangsadresse des Datenpuffers bufle = Groesse des Datenpuffers in Bytes blk = logische/virtuelle Blocknummer, bei der die Uebertragung beginnt Anmerkungen: Die Funktionen IO.RVB und IO.WVB sind mit Dateioperationen ver- bunden. Vor Ausfuehrung dieser Funktionen muss die jeweilige Datei eroeffnet sein (vgl. Anleitung fuer den Programmierer, Teil 5, Dateizugriffroutinen FCS 1630). 4.2.2. Geraetespezifische Funktionen ------------------------------------ Der Kassettenplattenspeicher unterstuetzt keine geraetespezifi- schen Funktionen. 4.3. Rueckkehrcodes --------------------- Im niederwertigen Byte des 1. Wortes des E/A-Statusblocks werden der Nutzertask Informationen zum Verlauf der E/A-Operation ueber- geben. Ausser den E/A-Rueckkehrcodes IS.SUC, IS.PND, IE.ABO, IE.ALN, IE.BLK, IE.DNR, IE.IFC, IE.NLN, IE.NOD, IE.OFL, IE.OVR, IE.PRI, IE.SPC, IE.WLK, die in Pkt. 1.7. und Anlage 2 ausfuehrlich beschrieben sind, liefert der DK-Driver die in der Tabelle 14 angegebenen Rueckkehrcodes. Im 2. Wort des E/A- Statusblocks wird der Nutzertask die Anzahl der uebertragenen Bytes uebergeben. Tabelle 14 Rueckkehrcodes fuer Kassettenplattenspeicher mnemo- okt dez Bedeutung nisch ----------------------------------------------------------------- IE.VER 374 -4 Nicht identifizierbarer Fehler Das System kennt die Fehlerursache fuer die Nichtbeendigung der E/A-Anforderung nicht. (in- dividuelle Fehler, Paritaetsfehler, ...) IE.BYT 355 -19 Byteorientierter Puffer angegeben Der angegebene Puffer beginnt auf einer ungera- den Adresse, waehrend das Geraet einen wort- orientierten Puffer benoetigt. Verschiedene Geraete fordern auch, dass die Puffergroesse ein Vielfaches einer bestimmten Byteanzahl ist. IE.WCK 251 -87 Datenvergleich fehlerhaft Mit dem MCR-Kommando SET/WCHK= dev: kann dem KPS-Driver mitgeteilt werden, dass nach jedem Schreiben eines Blockes dieser Block durch die Anschlusssteuereinheit noch einmal zur Pruefung gelesen werden soll. 70 4.4. Informationen des GET-LUN-Makros --------------------------------------- Nach der Nutzung der GLUN$-Anweisung sind folgende Informationen in den 6-Worte-Puffer, der von der Nutzertask zur Verfuegung ge- stellt worden ist, eingeschrieben: Wort 1: Geraetename (2 KOI-7-Bytes): DK Wort 2, NW-Byte: Geraeteeinheitennummer HW-Byte: 200 (oktal), falls der Driver resident ist 0 , falls der Driver ladbar ist und sich nicht im System befindet. Wort 3: 140010 (oktal) Die Bedeutung der Bits ist dem Abschnitt 1.4.4. zu entnehmen. Wort 4: Undefiniert Wort 5: Undefiniert Wort 6: Enthaelt die Groesse des Geraetepuffers (standardmaessig fuer KPS: 512 Bytes) 4.5. Geraeteabhaengige Besonderheiten --------------------------------------- Tritt bei der AKP ein Fehler auf, wird die Uebertragung von der AKP bis zu 4 Mal wiederholt. Sind diese Wiederholungen erfolglos, wird ein Fehlerstatus gesendet, der den Driver veranlasst, die E/A-Uebertragung zu wiederholen. Da 8 softwaremaessige Wiederho- lungen vorgesehen sind, koennen bis zu 32 E/A-Uebertragungen wiederholt werden. Erst danach erfolgt eine Eintragung in den E/A-Statusblock. 71 5. Driver fuer den Festplattenspeicher K 5501 ------------------------------------------------- 5.1. Allgemeines ------------------ Fuer den Einsatz an dem Mikrorechnergeraetesystem MGS K 1600 ist der Festplattenspeicher K 5501 vorgesehen. Hersteller ist VEB Kombinat ROBOTRON. Der Plattenspeicher besteht aus einem Laufwerk mit mehreren Fest- platten. Der Festplattenspeicher wird ueber den Controller AFP K 5162 an den K 1600 angeschlossen. An einen Controller koennen max. 4 Festplattenspeicher ange- schlossen und bedient werden. Die Anzahl der anschliessbaren AFP K 5162 ist auf 6 begrenzt. Technische Daten der Festplattenspeicher: Speicherkapazitaet 15 25 35 MBYTE Anzahl der Platten/Geraet 2 3 4 Anzahl der Arbeitsflaechen 3 5 7 Anzahl der Zylinder 210 210 210 Anzahl der Koepfe(Spuren) 6 10 14 Sektoren/Spur 24 24 24 Sektorgroesse Allgemein 512 Bytes Alle Plattenspeichervarianten werden von einem gemeinsamen Driver unterstuetzt. Die Unterscheidung der einzelnen Geraetevarianten erfolgt bei der Generierung der Datenbasis durch Angabe zusaetzlicher Plattenpa- rameter im UCB. 5.2. Geraetefunktionen ------------------------ 5.2.1. Standardfunktionen ------------------------- Die Standardfunktionen fuer den Festplattenspeicher sind: QIO$C IO.ATT,... Anschliessen eines E/A-Geraetes an eine Task QIO$C IO.DET,... Trennen eines E/A- Geraetes von einer Task QIO$C IO.KIL,... Annullieren von E/A- Anforderungen QIO$C IO.RLB,..., Lesen eines logi- schen Blockes QIO$C IO.WLB,..., Schreiben eines lo- gischen Blockes 72 QIO$C IO.RVB,..., Lesen eines virtuel- len Blockes QIO$C IO.WVB,..., Schreiben eines vir- tuellen Blockes wobei: stadr = Anfangsadresse des Datenpuffers bufle = Groesse des Datenpuffers in Bytes hblk = hoeherwertiger Teil der logischen Blocknummer, bei der die Uebertragung beginnt nblk = niederwertiger Teil der logischen Blocknummer Anmerkungen: Die Funktionen IO.RVB und IO.WVB sind mit Dateioperationen ver- bunden. Vor Ausfuehrung dieser Funktionen muss die jeweilige Datei eroeffnet sein (vgl. Anleitung fuer den Programmierer, Teil 4, Dateizugriffsverfahren). 5.2.2. Geraetespezifische Funktionen ------------------------------------ QIO$C IO.WLC,..., Schreiben eines lo- gischen Blockes mit anschliessendem Kon- trollesen Die oktale Codierung der Funktion IO.WLC lautet 420. 5.3. Rueckkehrcodes --------------------- Im niederwertigen Byte des 1. Wortes des E/A-Statusblocks werden der Nutzertask Informationen zum Verlauf der E/A-Operation ueber- geben. Ausser den E/A-Rueckkehrcodes IS.SUC, IS.PND, IE.ABO, IE.ALN, IE.BLK, IE.DNR, IE.IFC, IE.NLN, IE.NOD, IE.PRI, IE.SPC, die in Pkt.1.7. und Anlage 2 ausfuehrlich beschrieben sind, liefert der DM-Driver die in der Tabelle 15 angegebenen Rueckkehrcodes. Im 2. Wort des E/A-Statusblocks wird der Nutzer- task die Anzahl der uebertragenen Bytes uebergeben. Tabelle 15 Rueckkehrcodes fuer den Festplattenspeicher Mnemo- okt dez Bedeutung nisch ----------------------------------------------------------------- IE.VER 374 -4 Nichtidentifizierbarer Fehler Das System kennt die Fehlerursache fuer die Nichtbeendigung der E/A-Anforderung nicht. (in- dividuelle Fehler, Paritaetsfehler, ...) IE.WLC 364 -12 Geraet ist schreibgeschuetzt Die E/A-Exekutive-Anweisung verlangt Schreiben auf ein schreibgeschuetztes Geraet. IE.BYT 355 -19 Byteorientierter Puffer angegeben 73 Tabelle 15 (Fortsetzung) Mnemo- okt dez Bedeutung nisch ----------------------------------------------------------------- IE.BBE 310 -56 Fehlerhafter Block Beim Lesen oder Schreiben wurde ein fehlerhafter Block uebertragen. Die Anzahl der uebertragenen Worte wird im zweiten E/A-Statuswort eingetra- gen. IE.WCK 251 -87 Datenvergleich fehlerhaft Beim Kontrollesen eines soeben aufgezeichneten Blockes wurde ein Fehler festgestellt. 5.4. Informationen des GET-LUN-Makros --------------------------------------- Nach der Nutzung der GLUN$-Anweisung sind folgende Informationen in den 6-Worte-Puffer, der von der Nutzertask zur Verfuegung ge- stellt worden ist, eingeschrieben: Wort 1: Geraetename (2 KOI-7-Bytes): DM Wort 2, NW-Byte: Geraeteeinheitennummer HW-Byte: 200 (oktal), falls der Driver resident ist 0 , falls der Driver ladbar ist und sich nicht im System befindet Wort 3: 140010 (oktal) Die Bedeutung der Bits ist dem Abschnitt 1.4.4. zu entnehmen. Wort 4: Undefiniert Wort 5: Undefiniert Wort 6: Enthaelt die Groesse des Geraetepuffers (standardmaessig fuer AFP K 5162: 512 Bytes) 5.5. Plattensicherungssystem ------------------------------ 5.5.1. Algemeines ----------------- Das Sicherungssystem fuer Plattenspeicher, kurz Platten- sicherungssystem, gibt dem Anwender die Moeglichkeit, Dateien eines Plattenspeichers ohne zusaetzlichen anwendungstechnischen Aufwand noch auf einer Sicherungsplatte zu fueren. Damit erhoeht sich fuer den Anwender die Sicherheit; bei Ausfall seiner Arbeitsplatte kann ohne Komplikationen, ohne Bedienereingriffe und ohne Unterbrechung des Prozesses mit der Sicherungsplatte bis zur Beseitigung der Havarie weitergearbeitet werden. Die Anwendung des Plattensicherungssystems traegt damit wesentlich zur Erhoehung der Sicherheit beim Einsatz des K 1600 bei.  74 Das Plattensicherungssystem ist eine generierbare Komponente fuer den eingesetzten Plattendriver im System OMOS 1600 und verwaltet nur ein Plattenpaar. 5.5.2. Prinzipielle Arbeitsweise -------------------------------- Fuer die Arbeit mit dem Plattensicherungssystem sind mindestens zwei Plattenspeicher gleichen Typs und gleicher Speicherkapazitaet notwendig. Das Plattensicherungssystem unterscheidet zwei Typen von Platten entsprechend ihrer Nutzung, die Arbeitsplatte (work device) und die Sicherungsplatte (safety device). Mittels Kommando wird jeweils einer Arbeitsplatte eine Sicherungsplatte zugeordnet. Jede Schreiboperation auf die Arbeitsplatte wird parallel (bei unterschiedlichen Controllern) oder quasiparallel (bei gleichen Controllern) auch auf der Sicherungsplatte durchgefuert. Das Lesen der Daten erfolgt dagegen nur von der Arbeitsplatte. Die Sicherungsplatte ist durch den Anwender nicht ansprechbar. Bei Ausfall der Sicherungsplatte wird diese aus der Arbeit mit dem Sicherungssystem ausgegliedert, d. h. die Datenuebertragungen erfolgen nur noch mit der Arbeitsplatte. Dies wird durch eine Ausschrift dem Bediener mitgeteilt. Nach Reparatur kann die Platte mittels Kommando wieder in das Sicherungssystem eingegliedert werden. Bei Ausfall der Arbeitsplatte wird diese aus der Arbeit mit dem Sicherungssystem ausgegliedert und die Sicherungsplatte als Arbeitsplatte benutzt, d.h. die Datenuebertragungen erfolgen nur noch mit der Sicherungsplatte. Nach dem Wiedereingliedern der Platte mittels Kommando dient sie wieder als Arbeitsplatte und die Sicherungsplatte uebernimmt wieder die Funktion der Datensicherung. Das Kommando zur Wiedereingliederung einer Platte in das Sicherungssystem fuehrt automatisch die Aktualisierung der einzugliedernden Platte aus, d.h. es werden alle Dateien von der Arbeitsplatte mit ihrem aktuellen Zustand auf die eingliedernde Platte uebertragen. Die Aktualisierung der Platten nach Wiedereingliederung laeuft parallel zu der normalen Arbeit des Plattensicherungssystems. Dabei werden vom Wiedereingliederungskommando Block fuer Block der aktuellen Platte nacheinander auf die einzugliedernde Platte uebertragen. Durch diese Arbeitsweise wird gesichert, dass keine Datenverluste auftreten. Die Atualisierzeit ist abhaengig vom Plattentyp, von der Kapazi- taet der Plattenspeicher und von der aktuellen Belastung durch die normale Arbeit des Sicherungssystems. Sie liegt zwischen 20 und 30 Minuten. Falls ein ausgefallenes Plattenspeichergeraet nicht sofort repariert werden kann und die Arbeit nicht ohne Datensicherung ueber einen laengeren Zeitraum durchgefuert werden soll, kann der aktuellen Arbeitsplatte auch eine neue Sicherungs- platte mittels Kommando zugeordnet werden. Diese Platte faellt damit aber fuer die urspruenglich vorgesehene Arbeit aus.  75 Die fuer die Plattensicherung notwendigen Kommandos werden durch die Task UPD[ATE] realisiert und sind in der MCR- Schrift "Anleitung fuer den Bediener Teil 2" dokumentiert. 5.5.3. Generierungshinweise --------------------------- Die Arbeit mit Plattensicherung ist eine generierbare Komponente des Betriebssystems. Die Frage WOLLEN SIE EIN PLATTENSICHERUNGSSYSTEM? (J/N) muss vom Anwender im Fragespiegel fuer die Generierung entsprechend beantwortet werden. Bei eingeschalteter Plattensicherung ist zu beachten, dass die zum Plattensicherungssystem gehoerenden Platten nicht mehr durch die Fehlerregistrierung ueberwacht werden.  76 6. Driver fuer Folienspeichereinheit ----------------------------------------- 6.1. Allgemeines ------------------- Fuer den Einsatz an dem Mikrorechnergeraetesystem MGS K 1600 sind folgende Folienspeichereinheiten vorgesehen: - Anschlussteuerung AFS K 5161 . Folienspeichereinheit K 5665 Oberflaeche 1 Zylinder 77 Sektoren pro Spur 26 Sektorgroesse (Worte) 64 Worte pro Spur 1664 Bloecke pro Diskette (phys.) 2002 Bloecke pro Diskette (log.) 496 Speicherkapazitaet (Diskette) 128128 - Anschlusssteuereinheit AFS K 5163 . Folienspeichereinheit K 5666.10 Oberflaeche 1 Zylinder 77 Sektoren pro Spur 26 Sektorgroesse (Worte) 64 (128) Worte pro Spur 1664 (3328) Bloecke pro Diskette (phys.) 2002 (2002) Bloecke pro Diskette (log.) 494 (988) Speicherkapazitaet (Diskette) 128128 (256256) . Folienspeichereinheit K 5661.10 K 5661.20 Oberflaeche 1 1 Zylinder 40 80 Sektoren pro Spur 26 (16) 16 Sektorgroesse (Worte) 64 (128) 128 Worte pro Spur 1664 (2048) 2048 Bloecke pro Diskette (phys.)1040 (640) 1280 Bloecke pro Diskette (log.) 252 (312) 632 Speicherkapazitaet (Diskette) 66560 163840 (81920) Von einer AFS kann 1 Folienspeichereinheit bedient werden.  77 6.2. Geraetefunktionen ------------------------- 6.2.1. Standardfunktionen -------------------------- Die Standardfunktionen fuer den Folienspeicher sind: QIO$C IO.ATT,... Anschliessen eines E/A- Geraetes an eine Task QIO$C IO.DET,... Trennen eines E/A-Gerae- tes von einer Task QIO$C IO.KIL,... Annullieren von E/A- Anforderungen QIO$C IO.RLB,..., Lesen eines logischen Blockes QIO$C IO.RVB,..., Lesen eines virtuellen Blockes QIO$C IO.WLB,..., Schreiben eines logischen Blockes QIO$C IO.WVB,..., Schreiben eines virtuel- len Blockes wobei: stadr = Anfangsadresse des Datenpuffers bufle = Groesse des Datenpuffers in Bytes blk = Logische/Virtuelle Blockadresse bei der die Ue- bertragung beginnt Bemerkungen: Die Funktionen IO.RVB und IO.WVB sind mit Dateioperationen ver- bunden. Vor Ausfuehrung dieser Funktion muss die jeweilige Datei eroeffnet sein. (Vergleiche Anleitung fuer den Programmierer, Teil 5: Dateizugriffsroutinen). 6.2.2. Geraetespezifische Funktionen ------------------------------------- Geraetespezifische Funktionen fuer den Folienspeicher sind: QIO$C IO.RPB,..., Lesen eines physischen Blockes QIO$C IO.SEC Abfragen der Disketten- charakteristik QIO$C IO.SMD,..., Initialisieren einer Dis- kette auf einfache oder doppelte Dichte  78 QIO$C IO.WDD,..., Schreiben eines physi- schen Blockes (mit ge- loeschter Datenmarke) QIO$C IO.WPB,..., Schreiben eines physi- schen Blockes wobei: den = Kennzeichen fuer Schreibdichte (0 = einfach, 2 = doppelt) pbk = physische Blockadresse bei der die Uebertragung beginnt 6.3. Rueckkehrcodes ---------------------- Im niederwertigen Byte des 1. Wortes des E/A-Statusblockes werden der Nutzertask Informationen zum Verlauf der E/A-Operation ueber- geben Ausser den E/A-Rueckkehrcodes IS.SUC, IS.PND, IE.ABO, IE.ALN, IE.BLK, IE.DNR, IE.DNA, IE.DNR, IE.IFC, IE.NLN, IE.NOD, IE.OFL, IE.OVR, IE.PRI, IE.SPC, IE.WLK, die in Pkt. 1.7 und Anlage 2 ausfuehrlich beschrieben sind, liefert der Driver die in Tabelle 16 angegebenen Rueckkehrcodes. Tabelle 16 Rueckkehrcodes fuer Folienspeicher (E/A-Statusblock, 1.Wort) mnemo- okt dez Bedeutung nisch ----------------------------------------------------------------- IS.RDD 002 2 Lesen einer geloeschten Datenmarke IE.VER 774 -4 Nicht identifizierbarer Fehler Das System kennt die Fehlerursache fuer die Nichtbeendigung der E/A-Anforderung nicht (indi- viduelle Fehler, Paritaetsfehler,...). IE.BYT 755 -19 Byteorientierter Puffer angegeben Der angegebene Puffer beginnt auf einer ungera- den Adresse, waehrend das Geraet einen wort- orientierten Puffer benoetigt. Verschiedene Geraete fordern auch, dass die Pufferadresse ein Vielfaches einer bestimmten Byteanzahl ist. 6.4. Informationen des GET-LUN-Makros ---------------------------------------- Nach der Nutzung der GLUN$-Anweisung sind folgende Informationen in den 6-Worte-Puffer, der von der Nutzertask zur Verfuegung ge- stellt worden ist, eingeschrieben. Wort 1: Geraetename (2 KOI-7-Bytes): DY Wort 2, NW-Byte: Geraeteeinheitennummer (KOI-7-Zeichen) HW-Byte: 200 (oktal), falls der Driver resident ist. Null , falls der Driver ladbar ist und sich nicht im System befindet.  79 Wort 3: 140110 (oktal) Die Bedeutung der Bits ist dem Abschnitt 1.4.4. zu entnehmen. Wort 4: undefiniert Wort 5: undefiniert WORT 6: enthaelt die Groesse des Geraetepuffers in By- tes (512.) 6.5. Geraeteabhaengige Besonderheiten ------------------------------------------- Beim Auftreten eines Fehlers wird die Uebertragung softwaremaes- sig achtmal wiederholt, bevor eine Fehlerausschrift erfolgt.  80 7. Driver fuer Magnetbandgeraete -------------------------------- 7.1. Allgemeines ---------------- Fuer den Einsatz an dem Mikrorechnergeraetesystem MGS K 1600 sind die Magnetbandgeraete (MBG) CM5300 und CM5303 vorgesehen. Hersteller: ISOT (VRB) Herstellerbezeichnungen: CM5300 ISOT 5004 E CM5303 ISOT 5006 Das dazugehoerige Steuergeraet (Controller) wird ebenfalls bei ISOT produziert und traegt die Bezeichnung CM5001. An den Controller koennen maximal 4 gleichartige MBG angeschlos- sen werden. Technische Daten: Geraetecharakteristik ISOT 5004 E ISOT 5006 --------------------------------------------------- Kanaele 9 9 Datendichte (bpi) 800 800 (Bit/mm) 32 32 Bandgeschwindigkeit (cm/s) 31,75 114,3 max. Uebertragungsgeschwin- digkeit (K Bytes/s) 10 36 max. Spulendurchmesser (mm) 216 267 Aufzeichnungsverfahren NRZI NRZI 7.2. Geraetefunktionen ---------------------- 7.2.1. Standardfunktionen ------------------------- Die Standard-E/A-Funktionen fuer die Magnetbandgeraete sind: QIO$C IO.ATT,... Anschliessen eines E/A-Gerae- tes an eine Task QIO$C IO.DET,... Trennen eines E/A-Geraetes von einer Task QIO$C IO.KIL,... Annullieren von E/A-Anforde- rungen QIO$C IO.RLB,..., Lesen eines logischen Blockes QIO$C IO.RVB,..., Lesen eines virtuellen Blockes QIO$C IO.WLB,..., Schreiben eines logischen Blockes  81 QIO$C IO.WVB,..., Schreiben eines virtuellen Blockes wobei: stadr = Anfangsadresse des Datenpuffers bufle = Groesse des Datenpuffers in Bytes Bemerkungen: Die Funktionen IO.RVB und IO.WVB sind mit Dateioperationen ver- bunden. Vor Ausfuehrung dieser Funktion muss die jeweilige Datei eroeffnet sein (vgl.Anleitung fuer den Programmierer, Teil 5: Dateizugriffsroutinen). 7.2.2. Geraetespezifische Funktionen -------------------------------------- Tabelle 17 Geraetespezifische Funktionen fuer Magnetbandgeraete mnemonisch oktal Bedeutung ----------------------------------------------------------------- QIO$C IO.EOF,... 3000 Schreiben der EOF-Marke (Bandmarke) QIO$C IO.RWD,... 2400 Zurueckspulen des Magnetbandes QIO$C IO.RWU,... 2540 Zurueckspulen des Magnetbandes und Off-line-Setzen des MBG QIO$C IO.SEC,... 2520 Abfuehlen der Bandcharakte- ristik QIO$C IO.SMO,..., 2560 Eingliedern des MBG und Setzen der Bandcharakteristik (MBG muss bereit sein, Magnetband steht am Ladepunkt) QIO$C IO.SPB,..., 2420 Um Bloecke vor- bzw. zurueck- setzen QIO$C IO.SPF,..., 2440 Um Dateien vor- bzw. zurueck- setzen QIO$C IO.STC,..., 2500 Setzen der Bandcharakteristik wobei: cb = zu setzende Charakteristik-Bits nbs = Anzahl der Datenbloecke, um die das Magnetband vor- oder zurueckgesetzt werden soll (positiv vorwaerts, negativ rueckwaerts) nes = Anzahl der Steuerbloecke, um die vor- (nes positiv) bzw. zurueckgesetzt (nes negativ) wird  82 7.2.3. Beschreibung der geraetespezifischen Funktionen ------------------------------------------------------ IO.RWD - Zurueckspulen des Magnetbandes --------------------------------------- Die Ausfuehrung von IO.RWD bewirkt ein Initialisieren des Zurueckspulens. Zusatzoperationen ueber den Controller koennen sich anschliessen. Eine Anforderung fuer das gleiche MBG wird durch den Driver zurueckgehalten, bis der Ladepunkt (BOT) erreicht ist. IO.RWU - Zurueckspulen des Magnetbandes und Off-line-Setzen ----------------------------------------------------------- IO.RWU wird verwendet, wenn ein Bedienereingriff notwendig ist (z.B. zum Laden eines neuen Magnetbandes). Der Operator muss das MBG in den On-line-Betrieb zuruecksetzen, bevor folgende Operationen abgearbeitet werden koennen. IO.SEC - Abfuehlen der Bandcharakteristik ----------------------------------------- Diese Funktion uebernimmt die Bandcharakteristika in das zweite E/A-Statuswort. Die charakterisierenden Bits sind wie folgt defi- niert: Bit Bedeutung X ----------------------------------------------------------- 0 reserviert 1 reserviert 2 reserviert 3 gerade Paritaet x 4 Magnetband nach EOT 5 bei letztem Bandkommando wurde EOT-Marke gelesen (falls letztes Kommando nicht Vor- oder Zurueck- setzen war) 6 Schreibverbot x 7 Schreiben mit erweitertem Abstand ist verboten x (d.h. nach einem Schreibfehler wird keine Wieder- holung durchgefuehrt) 8 Fehler im MBG 9 Magnetband wird zurueckgespult 10 Magnetband ist mechanisch schreibgeschuetzt 11 reserviert 12 reserviert 13 Magnetband am Ladepunkt (BOT) 14 Magnetband an EOV 15 Magnetband nach EOV (reserviert fuer Driver, immer "0", wenn vom Nutzer gelesen) wobei: X = kann gesetzt sein bei IO.SMO und IO.STC  83 7.3. Rueckkehrcodes ------------------- (E/A-Statusblock,1. Wort) Im niederwertigen Byte des 1. Wortes des E/A-Statusblocks werden der Nutzertask Informationen zum Verlauf der E/A-Operation ueber- geben. Ausser den E/A-Rueckkehrcodes IS.SUC, IS.PND, IE.ABO, IE.DAA, IE.DNA, IE.DNR, IE.EOF, IE.IFC, .IE.OFL, IE.SPC, IE.WLK, die in Punkt 1.7. und Anlage 2 ausfuehrlich beschrieben sind, liefert der Driver die in der Tabelle 18 angegebenen Rueckkehrcodes. Tabelle 18 Rueckkehrcodes fuer Magnetbandgeraete mnemo- okt dez Bedeutung nisch ----------------------------------------------------------------- IE.VER 774 -4 Nicht identifizierbarer Fehler Das System kennt die Fehlerursache fuer die Nichtbeendigung der E/A-Anforderung nicht. (in- dividuelle Fehler, Paritaetsfehler,...) IE.EOV 765 -11 Logisches Ende des Magnetbandes erkannt Beim Vorwaertslauf wurde die logische EOV-Band- marke (bestehend aus 2 EOF-Marken) erkannt. IE.DAO 763 -13 Datenueberlauf Beim Lesen eines Blockes wurde die statische Puffergroesse ueberschritten. IE.BYT 755 -19 Byteorientierter Puffer angegeben Der angegebene Puffer beginnt auf einer ungera- den Adresse, waehrend das Geraet einen wort- orientierten Puffer benoetigt. Verschiedene Geraete fordern auch, dass die Puffergroesse ein Vielfaches einer bestimmten Byteanzahl ist. IE.BBE 710 -56 Fehlerhafter Block Beim Lesen oder Schreiben wurde ein fehlerhafter Block uebertragen. Die Anzahl der uebertragenen Bytes wird im zwei- ten E/A-Statuswort eingetragen. Fuer das Steuer- geraet bedeutet der Code IE.BBE, dass ein Fehler "Fehlerhaftes Band" (BTE) waehrend des Lesens oder Vor- bzw. Zuruecksetzens auftrat. IE.EOT 702 -58 Bandende erkannt Die EOT-Marke (phys. EOV) wurde waehrend des Vorwaertslaufes des Magnetbandes erkannt. Der letzte Block wurde noch ordnungsgemaess ueber- tragen. IE.FHE 705 -59 Hardwarefehler Z.B. das MBG ist nicht bereit und/oder das Ma- gnetband befand sich nicht am Ladepunkt, als IO.SMO aufgerufen wurde.  84 Bemerkungen: Nach Lese- und Schreibfunktionen enthaelt das zweite E/A-Status- wort die Anzahl der durch die Funktion uebertragenen Bytes. Nach Vor- und Zuruecksetzfunktionen enthaelt es die Anzahl der ueberlesenen Bloecke oder Dateien. Die EOF-Marken zaehlen als ein Block. Wird eine EOF-Marke bei einer Leseoperation gefunden, dann ent- haelt das zweite E/A-Statuswort eine oktale 2. 7.4. Informationen des GET-LUN-Makros ----------------------------------------- Nach der Nutzung der GLUN$-Anweisung sind folgende Informationen in den 6-Worte-Puffer, der von der Nutzertask zur Verfuegung ge- stellt worden ist, eingeschrieben: Wort 1: Geraetename (2 KOI-7-Bytes): MT Wort 2: NW-Byte: Geraeteeinheitennummer HW-Byte: 200 (oktal), falls der Driver resident ist. Null , falls der Driver ladbar ist und sich nicht im System befindet. Wort 3: 140341 (oktal) Die Bedeutung der Bits ist dem Abschnitt 1.4.4. zu entnehmen. Wort 4: 3 (800 BPI) Wort 5: undefiniert Wort 6: enthaelt die Groesse des Geraetepuffers (standardmaessig fuer MBG : 512 Bytes) 7.5. Programmierhinweise ---------------------------- 7.5.1. Blockgroesse --------------------- Jeder Block enthaelt eine gerade Anzahl von Bytes. Die Datei- zugriffsroutinen (s. Anleitung fuer den Programmierer, Teil 5: Dateizugriffsroutinen) benutzen als Standardwert eine Blockgroesse von 512 Bytes (dezimal). Bei Schreiboperationen muessen mindestens 14 Zeichen ausgegeben werden. Mit einer QIO$-Anweisung koennen maximal 65.534 Bytes uebertragen werden, wobei die zu uebertragende Zeichenanzahl immer geradzah- lig sein muss.  85 7.5.2. Setzen der Bandcharakteristika ------------------------------------- Eine Task, die das MBG benutzt, sollte immer vor Beginn der E/A- Operationen die notwendige Bandcharakteristik setzen. Damit wer- den unerlaubte Eingriffe durch den Bediener erkannt bzw. ausge- schlossen. 7.5.3. Uebertragung von NUL-Bytes ----------------------------------- Ist die Bandcharakteristik auf ungerade Paritaet ausgestellt, wird ein NUL-Byte (geloeschtes Byte) mit einem Paritaetsbit er- gaenzt und uebertragen. Wird ein geloeschtes Byte mit gerader Paritaet auf Magnetband aufgezeichnet, erscheint das Magnetband beim Lesen als leer. Ist gerade Paritaet erforderlich, muss der Anwender sichern, dass NUL-Bytes sicher gelesen werden koennen (z.B. durch Eingrenzung in sicher erkennbare Zeichen). 7.6. Geraeteabhaengige Besonderheiten ----------------------------------------- 7.6.1. Rettung bei Spannungsausfall am Magnetbandgeraet --------------------------------------------------------- Beim Spannungsausfall geht die Bandposition verloren. Nur bei einem ladbaren Driver wird das Magnetband an die Bandanfangsmarke positioniert, sobald das Geraet on-line geschaltet ist. Um einer zufaelligen Verteilung der Daten auf dem Magnetband vorzubeugen, haelt der Driver einen Spannungsausfallindikator gesetzt. Wenn dieser Indikator gesetzt ist, werden vom Driver einige Datenuebertragungs- und Bandtransportkommandos nicht zuge- lassen. Erlaubt sind nur die Funktionen Zurueckspulen (IO.RWD), Zurueckspulen und Off-line-setzen (IO.RWU), Abfuehlen und Setzen der Bandcharakteristik (IO.SEC, IO.STC). Mit den Funktionen IO.RWD bzw. IO.RWU wird gleichzeitig der Spannungsausfallindikator zurueckgesetzt. Alle anderen Funktionen sind ungueltig und veranlassen die Ueber- gabe des Fehlercodes IE.IFC (ungueltige Funktion). War das Band waehrend des Spannungsausfalls an eine Task angeschlossen, soll- ten zunaechst erst wieder die Funktionen IO.DET und IO.ATT ausge- fuehrt werden. 7.6.2. Wiederholungsfunktionen -------------------------------- Der Fehler "Fehlerhaftes Band" fuehrt zur sofortigen Uebergabe des Fehlercodes IE.BBE. Bei Lesefehlern wird das Magnetband um einen Block zurueckgesetzt und der in Frage kommende Block nochmals gelesen. Verlaeuft eine Schreiboperation fehlerhaft, versucht der Driver die fehlerhafte Bandstelle durch einen erweiterten Zwischenblockabstand zu mei- den, falls in der Bandcharakteristik "Schreiben mit erweitertem Abstand" zugelassen ist. Anschliessend wird die Schreiboperation wiederholt. Beim Schreiben mit erweitertem Abstand ist es moeg- lich, dass eine Blockluecke 76 mm (3 Zoll) lang wird.  86 Die anfordernde Task kann auch mit IO.STC die Bandcharakteristik so angeben, dass nicht mit erweiterten Blockabstand bei Aufzeich- nungsfehlern gearbeitet wird, das bedeutet, dass nach jedem Auf- zeichnungsfehler sofort der Fehlercode IE.BBE uebergeben wird. Nach maximal 9 Schreib- bzw. Leseversuchen eines Blockes wird die Uebertragung mit der Uebergabe des Fehlercodes IE.BBE beendet. 7.6.3. Wiedererlangen der Bereitschaft ---------------------------------------- Wird eine E/A-Anforderung nicht ausgefuehrt, ist das gewuenschte MBG off-line oder nicht eingeschaltet, erscheint folgende Aus- schrift auf der Bedieneinheit: *** MTn: -- SELECT ERROR n = MBG-Nummer Diese Ausschrift wird standardmaessig alle 15 Sekunden wiederholt (die Wiederholungszeit ist beim Generieren des Systems einstell- bar), bis die Fehlerbedingung beseitigt ist.  87 8. Driver fuer Kassettenmagnetbandgeraete ----------------------------------------- 8.1. Allgemeines ------------------ Fuer den Einsatz an dem Mikrorechnergeraetesystem MGS K 1600 ist die Kassettenmagnetbandeinheit KMBE K 5261 vorgesehen. Die KMBE K 5261 besteht aus 2 Kassettenmagnetbandgeraeten KMBG K 5200 und einer Steuerelektronik. Technische Daten: Aufzeichnungsformat: ISO 3407 Bandgeschwindigkeit: 19 cm/s Bitdichte: 32 Bit/mm Zeichenkapazitaet pro Kassettenseite: 260*10**3 bei max. Blocklaenge und 20 mm Blockluecke Spuranzahl/Kassette: 2 Die KMBE wird ueber die Anschlusssteuereinheit AIS, die das Interface IFSS verwirklicht, an die Rechner des MGS K 1600 ange- schlossen. 8.2. Geraetefunktionen ------------------------ 8.2.1. Standardfunktionen ------------------------- Die Standard-E/A-Funktionen fuer die Kassettenmagnetbandgeraete sind: QIO$C IO.ATT,... Anschliessen eines E/A-Gerae- tes an eine Task QIO$C IO.DET,... Trennen eines E/A-Geraetes von einer Task QIO$C IO.KIL,... Annullieren von E/A-Anforde- rungen QIO$C IO.RLB,..., Lesen eines logischen Blockes QIO$C IO.RVB,..., Lesen eines virtuellen Blockes QIO$C IO.WLB,..., Schreiben eines logischen Blockes QIO$C IO.WVB,..., Schreiben eines virtuellen Blockes  88 wobei: stadr = Anfangsadresse des Datenpuffers bufle = Groesse des Datenpuffers in Bytes (4<= bufle <=256) 8.2.2. Geraetespezifische Funktionen ------------------------------------ Der Driver fuer Kassettenmagnetbandgeraete unterstuetzt folgende geraetespezifische Funktionen: Tabelle 19 Geraetespezifische Funktionen fuer Kassettenmagnet- bandgeraetedriver Mnemonik oktal Bedeutung ----------------------------------------------------------------- QIO$C IO.EOF,... 3000 Steuerblock schreiben QIO$C IO.RWD,... 2400 Zurueckspulen QIO$C IO.RDU,... 2430 Zurueckspulen mit anschliessendem Duplizieren QIO$C IO.SPB,..., 2420 Um Datenbloecke vor- bzw. zu- ruecksetzen QIO$C IO.SPF,..., 2440 Um Steuerbloecke vor- bzw. zu- ruecksetzen QIO$C IO.SLE,... 2530 Endeluecke schreiben QIO$C IO.EOD,... 2410 Doppelsteuerblock schreiben QIO$C IO.SPD,..., 2510 Um Doppelsteuerbloecke vor- bzw. zuruecksetzen wobei: nbs = Anzahl der Datenbloecke, um die vor- (nbs positiv) bzw. zurueckgesetzt (nbs negativ) wird mit 1<=|nbs|<=256 nes = Anzahl der Steuerbloecke, um die vor- (nes positiv) bzw. zurueckgesetzt (nes negativ) wird mit 1<=|nes|<=256 nds = Anzahl der Doppelsteuerbloecke, um die vor- (nds positiv) bzw. zurueckgesetzt (nds negativ) wird mit 1<=|nds|<=256  89 8.3. Rueckkehrcodes --------------------- Im niederwertigen Byte des 1. Wortes des E/A-Statusblockes werden der Nutzertask Informationen zum Verlauf der E/A-Operation ueber- geben. Ausser den E/A-Rueckkehrcodes IS.SUC, IS.PND, IE.ABO, IE.DAA, IE.DNA, IE.OFL, IE.PRI, IE.SPC, die in Pkt 1.7. und Anlage 2 ausfuehrlich beschrieben sind, liefert der Kassettenmag- netbandgeraetedriver die in der Tabelle 20 angegebenen Rueckkehrcodes. Tabelle 20 Rueckkehrcodes fuer Kassettenmagnetbandgeraete mnemo- okt dez Bedeutung nisch ----------------------------------------------------------------- IE.IFC 376 -2 Unzulaessiger Funktionscode - Der angegebene Funktionscode existiert nicht, oder ist fuer das betreffende E/A-Geraet nicht ausfuehrbar. - Falscher Funktionscode nach Netzausfall IE.DNR 375 -3 Geraet nicht bereit Das angesprochene physische Geraet ist nicht zur Durchfuehrung der E/A-Operation bereit. Diese Meldung kann z.B. durch einen Time-Out-Interrupt kommen, wenn das Geraet nach laengerer Zeit eine Anforderung nicht beantwortet oder quit- tiert, oder wenn keine Kassette im Kassetten- schacht liegt oder der Kassettenschacht noch geoeffnet ist, oder wenn waehrend der E/A-Opera- tion Netzausfall auftrat. IE.VER 374 -4 Nicht identifizierbarer Fehler - Funktionsfehler des KMBG - Die fuer eine Leseoperation in der QIO$-Exeku- tive-Anweisung angegebene Byteanzahl stimmt nicht mit der Laenge des zu lesenden Blockes auf dem Band ueberein. IE.EOF 366 -10 Dateiendezeichen erkannt Waehrend einer Leseoperation wurde auf dem Kas- settenmagnetband ein Steuerblock erkannt. IE.WLK 364 -12 Geraet ist schreibgeschuetzt Die E/A-Exekutive-Anweisung verlangt Schreiben auf ein schreibgeschuetztes Geraet. IE.DAO 363 -13 Datenueberlauf Bei einer Leseoperation trat trotz 9-maliger Wiederholung ein Datenfehler (Empfaengerueber- lauf, Paritaetsfehler, Rahmenfehler) auf. IE.EOT 302 -62 Bandende erkannt Die EOT-Marke (phys. EOV) wurde waehrend des Vorwaertslaufes des Kassettenmagnetbandes er- kannt. Der letzte Block wurde noch ordnungsge- maess uebertragen.  90 Das hoeherwertige Byte des 1. Wortes des E/A-Statusblockes ist undefiniert. Das zweite Wort des E/A-Statusblockes enthaelt bei Lese- oder Schreibfunktionen die Anzahl der uebertragenen Bytes. 8.4. Informationen des GET-LUN-Makros ------------------------------------- Nach der Nutzung der GLUN$-Anweisung sind folgende Informationen in den 6-Worte-Puffer, der von der Nutzertask zur Verfuegung ge- stellt worden ist, eingeschrieben: Wort 1: Geraetename (2-KOI-7-Bytes): CT Wort 2, NW-Byte: Geraeteeinheitennummer HW-Byte: 200 (oktal), falls der Driver resident ist. 000 , falls der Driver ladbar ist und sich nicht im System befindet. Wort 3: 41 (oktal) Die Bedeutung der Bits ist dem Abschnitt 1.4.4. zu entnehmen. Wort 4: undefiniert Wort 5: undefiniert Wort 6: enthaelt die Groesse des Geraetepuffers (stan- dardmaessig fuer KMBG : 256 Bytes) 8.5. Programmierhinweise ------------------------ Vor der Arbeit befinden sich die KMBG im Grundzustand. Das bedeu- tet, dass der Antrieb ausgeschaltet und der Kassettenschacht ent- riegelt ist. Mit Beginn der ersten Operation wird der Kassetten- schacht verriegelt, so dass die Kassette nicht herausgenommen werden kann. Der Grundzustand wird erst wieder hergestellt, wenn die Weiterarbeit mit dem KMBG wegen Fehler nicht mehr moeglich ist, bzw. wenn die Task ihre Arbeit mit dem KMBG beendet hat. Das Herstellen des Grundzustandes ist mit der Standard-E/A-Funktion IO.DET (Trennen des Geraetes von der Task) verbunden. Es muss also in jedem Falle das KMBG vor der Arbeit mit der Stan- dard-E/A-Funktion IO.ATT an die entsprechende Task angeschlossen werden und nach dem Abschluss der Uebertragungen mit der Stan- dard-E/A-Funktion IO.DET wieder von der Task getrennt werden. Die erste Operation, die direkt mit dem KMBG ausgefuehrt wird, muss immer ein Zurueckspulen sein, damit die Bandarbeit an defi- nierter Stelle begonnen werden kann. Die Funktion IO.RDU bewirkt das Zurueckspulen des angegebenen Geraetes (Quellgeraet) und ein Uebertragen aller Informationen auf das andere Geraet der KMBE. Es ist deshalb dafuer zu sorgen, dass das Geraet, auf das dupliziert werden soll, bereits zurueck- gespult wurde. Das Duplizieren erfolgt bis zum Ende der Informa- tion auf der Spur.  91 8.6. Geraeteabhaengige Besonderheiten -------------------------------------- |------------------------------------------- | |Prae-| |Post-|Zwischen-| ( | BAM | am- | Datenblock | am- | block- | ( | | bel | | bel | luecke | ( |---------------------------------------------- | | |<----1. Datenblock----->| ------------------------------------------- -------------| )Zwischen|Prae-| Steuer- |Post-|Zwischen-| ( ) | | ) block-| am- | block | am- | block- | ( ) | BEM | )luecke| bel | | bel | luecke | ( ) | | ------------------------------------------- ----------| | | | |<----Steuerblock---->| Ende --->| letzter Datenblock wobei: BAM = Bandanfangsmarke BEM = Bandendemarke Bild 2 Struktur des Kassettenmagnetbandes Praeambel und Postambel werden automatisch geschrieben. Sie be- stehen aus einem Byte (10101010). Datenbloecke koennen 4 bis 256 Byte enthalten. Sie sollen aber zweckmaessigerweise nicht kleiner als 32 Bytes sein. Steuerbloecke bestehen aus 2 Null-Bytes. Sie werden durch die Funktion IO.EOF geschrieben. Steuerbloecke koennen wahlweise gesetzt werden,sollten aber insbesondere zum Trennen von Dateien verwendet werden. Das Aufzeichnen zweier unmittelbar hinter- einanderliegender Steuerbloecke mit Hilfe der Funktion IO.EOF ist nicht zulaessig. Werden dennoch zwei hintereinander- liegende Steuerbloecke benoetigt, muessen diese durch das einma- lige Anwenden der Funktion IO.EOD geschrieben werden. Wird das Kassettenmagnetband nicht bis zum physischen Ende be- schrieben, kann mit Hilfe der Funktion IO.SLE eine Endeluecke (450 mm geloescht) geschrieben werden, die das logische Ende der Information auf der Spur kennzeichnet. Trat waehrend der Arbeit mit dem Kassettenmagnetbandgeraet Netz- ausfall auf, ist folgendes zu beachten: Die bei Netzausfall in Arbeit gewesene E/A-Anforderung wird nach Netzwiederkehr mit dem Rueckkehrcode IE.DNR beantwortet.  92 Da keine Aussage getroffen werden kann, ob diese E/A-Anforderung ordnungsgemaess vom Geraet ausgefuehrt wurde, muss der Anwender das Band zurueckspulen. Anhand seiner Informationen ueber den Aufbau der Daten auf dem Band kann der Anwender dann bis an die Stelle vorsetzen, an der die letzte E/A-Funktion ordnungsgemaess ausgefuehrt wurde. Danach muesste die E/A-Anforderung, die mit dem Rueckkehrcode IE.DNR beendet wurde, wiederholt werden. Um ein Ueberschreiben der Informationen auf dem Band zu verhin- dern, sind nach Netzausfall alle Funktionen bis auf IO.RWD verboten. Werden sie dennoch gegeben (das gilt auch fuer die noch in der Warteschlange stehenden E/A-Anforderungen), werden sie mit dem Rueckkehrcode IE.IFC solange abgewiesen, bis die Funktion IO.RWD erkannt wurde.  93 9. Driver fuer Drucker ---------------------- 9.1. Allgemeines ------------------- Fuer den Einsatz an dem Mikrorechnergeraetesystem MSG K 1600 sind folgende Druckgeraete vorgesehen: - Seriendrucker robotron 1152 Hersteller: Bueromaschinenwerk Soemmerda Bauart: Auftischgeraet Druckgeschwindigkeit: 30 Zeichen/Sekunde Druckbreite: 132 Zeichen/Zeile Der Drucker wird ueber die Anschlusssteuereinheit AIS, die das Interface IFSS verwirklicht, angeschlossen. - Seriendrucker robotron 1157 Hersteller: Bueromaschinenwerk Soemmerda Bauart: Auftischgeraet Druckgeschwindigkeit: 200 ... 400 Zeichen/Sekunde bzw. 500 Punkte/Sekunde fuer grafischen Modus Druckbreite: 132 Zeichen/Zeile Der Drucker wird ueber die Anschlusssteuereinheit AIS, die das Interface IFSS verwirklicht, angeschlossen. - Seriendrucker robotron K 6311 Hersteller: Bueromaschinenwerk Soemmerda Bauart: Auftischgeraet Druckgeschwindigkeit: 100 Zeichen/Sekunde Druckbreite: 80 bis 120 Zeichen/Zeile bzw. 600 Druckpositionen im Einzelpunktmodus Der Drucker wird ueber die Anschlusssteuereinheit AIS, die das Interface IFSS bzw. V24 verwirklicht, angeschlossen. - Seriendrucker robotron K 6312 Hersteller: Bueromaschinenwerk Soemmerda Bauart: Auftischgeraet Druckgeschwindigkeit: 100 Zeichen/Sekunde Druckbreite: 132 bis 198 Zeichen/Zeile bzw. 990 Druckpositionen im Einzelpunktmodus  94 Der Drucker wird ueber die Anschlusssteuereinheit AIS, die das Interface IFSS bzw. V24 verwirklicht, angeschlossen. - Seriendrucker robotron K 6313 Hersteller: Bueromaschinenwerk Soemmerda Bauart: Auftischgeraet Druckgeschwindigkeit: 100 Zeichen/Sekunde Druckbreite: 80 bis 132 Zeichen/Zeile bzw. 480 bis 1920 Druckpositionen im Einzelpunktmodus Der Drucker wird ueber die Anschlusssteuereinheit AIS, die das Interface IFSS bzw. V24 verwirklicht, angeschlossen. - Seriendrucker robotron K 6314 Hersteller: Bueromaschinenwerk Soemmerda Bauart: Auftischgeraet Druckgeschwindigkeit: 100 Zeichen/Sekunde Druckbreite: 136 bis 233 Zeichen/Zeile bzw. 816 bis 3264 Druckpositionen im Einzelpunktmodus Der Drucker wird ueber die Anschlusssteuereinheit AIS, die das Interface IFSS bzw. V24 verwirklicht, angeschlossen. - Paralleldrucker VT 27060 oder VT 27065 Hersteller: Videoton ( UVR ) Bauart: Standgeraet Druckgeschwindigkeit: 600 ... 650 Zeilen/Minute Druckbreite: 132 Zeichen/Zeile Der Drucker wird ueber die Anschlusssteuereinheit AIP, die das Interface IFSP verwirklicht, angeschlossen. 9.2. Geraetefunktionen ---------------------- 9.2.1. Standardfunktionen ------------------------- Die Standard-E/A-Funktion fuer die Drucker sind: QIO$C IO.ATT,... Anschliessen eines E/A- Geraetes an eine Task QIO$C IO.DET,... Trennen eines E/A-Gerae- tes von einer Task QIO$C IO.KIL,... Anullieren von E/A-An- forderungen QIO$C IO.WLB,..., Schreiben eines logi- schen Blockes QIO$C IO.WVB,..., Schreiben eines virtuel- len Blockes  95 Fuer den Seriendrucker robotron 1157 Typ 269 (grafischer Drucker) und fuer die Seriendrucker der Baureihe K 6310 gelten zusaetzlich folgende Standard-E/A-Funktionen: QIO$C IO.ATG,... Einschalten des grafi- schen Modus QIO$C IO.WGR,..., Schreiben im grafischen Modus QIO$C IO.DTG,... Ausschalten des grafi- schen Modus Fuer die Seriendrucker der Baureihe K 6310 gilt zusaetzlich die Standard-E/A-Funktion: QIO$C IO.WAL,..., Schreiben eines Blockes ohne Zeicheninterpreta- tion wobei: stadr = Anfangsadresse des Datenpuffers bufle = Groesse des Datenpuffers in Bytes vfc = Vertikalformatsteuerzeichen (siehe Abschnitt 9.5.1) bedeuten. Bemerkungen: Die Funktion IO.KIL anulliert eine sich in Abarbeitung befind- liche E/A-Anforderung nur, wenn der Drucker sich im Off-line-Zu- stand befindet, weil ein Netzfehler oder Papiertransportfehler aufgetreten ist. Die Drucker der Baureihe K 6310 arbeiten mit einer Uebertragungsbreite von 8 Datenbits (siehe 9.6.5.). Mit der Funktion IO.WAL koennen deshalb beliebige ESC-Folgen zur Ausgabe von grafischer Information im Einzelpunktmodus uebertragen werden. 9.2.2. Geraetespezifischae Funktionen ------------------------------------- Der Driver unterstuetzt keine geraetespezifischen Funktionen. 9.3. Rueckkehrcodes ------------------- Im niederwertigen Byte des 1.Wortes des E/A-Statusblockes werden der Nutzertask Informationen zum Verlauf der E/A-Operation ueber- geben. Ausser den E/A-Rueckkehrcodes IS.SUC, IE.DNR, IE.VER, IS.PIE.DAA, IE.DNA, IE.IFC, IE.OFL, IE.SPC, die im Abschnitt 1.7. und in Anlage 2 ausfuehrlich beschrieben sind, liefert der Driver keine weiteren Rueckkehrcodes. Die in der Tabelle 21 angefuehrten Rueckkehrcodes treten nur bei den Drucker robotron 1157 (grafi- scher Druck) und bei den Druckern der Baureihe K 6310 auf.  96 Tabelle 21 Rueckkehrcodes fuer Drucker mnemo- okt dez Bedeutung nisch ----------------------------------------------------------------- IE.DAG 222 -110 Geraet befindet sich im grafischen Modus. Fuer das Geraet wird eine alphanumerische Schreib- funktion angewiesen, waehrend es sich im gra- fischen Modus befindet. IE.DNG 221 -111 Geraet befindet sich nicht im grafischen Modus . Fuer das Geraet soll eine Anweisung mit IO.WGR bzw. IO.DTG ausgefuehrt werden, waehrend es sich im alphanumerischen Druckmodus befindet. Im 2.Wort des E/A-Statusblockes wird der Nutzertask die Anzahl der uebertragenen Bytes uebergeben. 9.4. Informationen des GET-LUN-Makros ------------------------------------- Nach der Nutzung der GLUN$-Anweisung sind folgende Informationen in den 6-Worte-Puffer, der von der Nutzertask zur Verfuegung ge- stellt worden ist, eingeschrieben: Wort 1: Geraetename (2 KOI-7-Bytes) : LP Wort 2, NW-Byte: Geraeteeinheitennummer HW-Byte: 200 (oktal), falls der Driver resident ist. 0, falls der Driver ladbar ist und sich nicht im System befindet. Wort 3: 3 - satzorientiertes, vorschubgesteuertes Ge- raet (siehe Abschnitt 1.4.4. ) Wort 4: undefiniert Wort 5: undefiniert Wort 6: enthaelt die Groesse des Geraetepuffers (abhaengig vom Geraetetyp : 80. bis 136. Bytes) 9.5. Programmierhinweise ------------------------ 9.5.1. Vertikalformatsteuerzeichen ----------------------------------- Der Parameter VFC (siehe Abschnitt 9.2.) in der QIO$-Anweisung kann die folgenden Werte annehmen:  97 Tabelle 22 Vertikalformatsteuerzeichen fuer Drucker Oktal- KOI-7- Bedeutung wert Zeichen ---------------------------------------------------------------- 00 NUL Internes Vertikalformat Der Pufferinhalt wird ausgegeben ohne ein be- sonderes Vertikalformat. 40 Leer- Einzelspace zeichen Ausgabe eines LF, Ausgabe des Zeichenpuffer- inhalts und Ausgabe eines CR. 44 Dollar Anforderungsausdruck Ausgabe eines LF und anschliessende Ausgabe Zeichenpufferinhalts. 53 Plus Ueberdrucken Ausgabe des Zeichenpufferinhalts und Ausgabe eines CR. Das fuehrt zum Ueberschreiben der zuvor ausgegebenen Zeile bei der Ausgabe der naechsten Zeile. 60 Null Doppel-Space Ausgabe von 2 LF, Ausgabe des Zeichenpufferin- halts und Ausgabe eines CR. Die Ausgabe des Zeichenpufferinhalts erfolgt im Abstand von 2 Zeilen nach der zuvor gedruckten Zeile. 61 Eins Seitenvorschub Ausgabe eines FF, Ausgabe des Inhalts des Zei- chenpuffers und Ausgabe eines CR. Die Ausgabe des Zeichenpuffersinhalts beginnt auf der ersten Zeile der naechsten Seite. 9.5.2. Behandlung der Zeichen RUBOUT und NUL -------------------------------------------- Die Zeichen RUBOUT und (177) und NUL (0) werden nur bei der Ausgabe mit der E/A-Funktion IO.WAL zum Drucker gesendet. 9.5.3. Driverreaktion auf Ueberschreiten der Standardzeilen- laenge ------------------------------------------------------------ Falls die Anzahl der Zeichen im Ausgabepuffer die Wagenbreite des Drucker ueberschreitet, werden die ueberzaehligen Zeichen bis zum Pufferende vom Driver nicht mehr ausgegeben. Anschliessend wird ein CR ausgegeben. Das Wort 6 der GET-LUN-Information enthaelt die Wagenbreite des Druckers ( siehe Abschnitt 9.4. ). Wird die Standardzeilenlaenge auf 0 festgelegt, wird vom Driver keine Pruefung auf Ueberschreitung der Zeilenlaenge vorgenommen. Bei den Ausgabefunktionen IO.WAL und IO.WGR erfolgt keine Zaeh- lung der pro Zeile ausgegebenen Druckpositionen.  98 9.5.4. Taskabbruch ------------------ Wird eine Task abgebrochen, waehrend sie auf die Ausfuehrung einer Druckoperation wartet, so reagiert der Driver innerhalb einer Sekunde mit dem Abbruch der Operation. Bei den Druckern der Baureihe K 6310 wird die Ausgabe der Druckinformationen bis zum Ablauf des Bytezaehlers fortgesetzt ( vollstaendige Ausgabe einer ESC-Folge zum Drucker ! ). 9.5.5. Reaktion des Drivers auf ESC-Folgen ------------------------------------------ ESC-Folgen sind Folgen von KOI-7-Zeichen, die mit dem Zeichen ESC (33) beginnen und einer festgelegten Syntax entsprechen. Bestimmte ESC-Folgen bewirken bei den Seriendruckern robotron 1152/1157 Steuerfunktionen (siehe technische Beschreibung). Die Ausgabe von ESC-Folgen ist moeglich, wenn die betreffenden Zeichen im Ausgabepuffer einer Task vereinbart sind. Fuer die Drucker der Baureihe K 6310 dienen ESC-Folgen zur Ausgabe von grafischen Informationen im Einzelpunktmodus, zur Einstel- lung der Schriftarten und Ausgabe von Steuerinformationen. Die ESC-Folgen werden vom Driver ohne Pruefung an den Drucker uebergeben. Bei der Verwendung von ESC-Folgen zur Horizontal- positionierung (rueckwaerts) kann es dadurch unter Umstaenden zu einem unkontrollierbaren Ueberschreiben der Standardzeilen- laenge und damit zu Datenverlust kommen. Um das zu vermeiden, ist es sinnvoll, mit Hilfe des MCR-Kommandos SET /BUF=LPn:0 die Pruefung der Ueberschreitung ausser Kraft zu setzen. Das Setzen von Horizontaltabulatormarken wird nicht unterstuetzt. 9.6. Geraetespezifische Besonderheiten -------------------------------------- 9.6.1. Fehlerbedingungen ------------------------ Die folgenden Fehlerbedingungen bewirken, dass der Druckerdriver den Drucker fuer off-line erklaert: - Papiertransportfehler - Papierende - Drucker ist nicht on-line geschaltet - Netzfehler 9.6.2. Wiedererlangen der Bereitschaft -------------------------------------- Auf Grund der Fehlerbedingungen erfolgt vom Driver folgende Mit- teilung auf dem Bediengeraet: *** LPn: -- NOT READY n = Geraetenummer  99 Diese Ausschrift wird standardmaessig alle 15 Sekunden wiederholt (die Wiederholungszeit ist beim Generieren des Systems einstell- bar), bis die Fehlerbedingung beseitigt ist. Wird die Wiederholungszeit als 0 eingestellt, erfolgt statt der Mitteilung auf dem Bediengeraet die Uebergabe des Rueckkehrcodes IE.DNR an die rufende Task. Beim Seriedrucker robotron 1152/1157 wird bei Papierende grundsaetzlich der Rueckkehrcode IE.DNR uebergeben. 9.6.3. Verhalten bei automatischem Restart ------------------------------------------ Beim automatischen Restart ist es auf Grund der internen Drucker- pufferung nicht zu vermeiden, dass Datenverlust entstehen kann. Der in Arbeit befindliche Ruf wird mit dem Rueckkehrcode IE.DNR beendet. Damit wird auch auf eventuellen Datenverlust in vorhe- rigen Rufen hingewiesen, die vom Driver bereits als erfolgreich beendet deklariert wurden, deren Daten durch Netzausfall aber im Druckerpuffer geloescht wurden. 9.6.4. Behandlung von Kleinbuchstaben ------------------------------------- Der Driver kann vor der Ausgabe Kleinbuchstaben in Grossbuch- staben umwandeln. Geraeteabhaengig wird bei der Systemgenerie- rung eine Standardeinstellung vorgenommen. Durch Eingabe des MCR- Kommandos: SET /LOWER=LPn: ( Druck von Kleinbuchstaben ) oder SET /NOLOWER=LPn: ( Umwandlung von Kleinbuchstaben ) kann diese Standardeinstellung veraendert werden. 9.6.5. Einstellvorschrift der Drucker K 6310 -------------------------------------------- Beim Anschluss der Drucker der Baureihe K 6310 sind die DIL- Schalter an den Drucker wie folgt einzustellen: - Baudrate: 9600 Band - Datenformat: 8 Datenbits ohne Paritaetspruefung 1 Stopbit - Protokollar: XON/XOFF-Protokoll - Betriebsart: Duplex  100 10. Driver fuer Lochbandperipherie ---------------------------------- 10.1. Allgemeines ----------------- Fuer den Einsatz an dem Mikrorechnergeraetesystem MGS K 1600 ist folgende Lochbandperipherie vorgesehen: - Lochbandeinheit K 6200, CM 6211 Hersteller: Robotron Elektronik Zella-Mehlis bestehend aus: Lochbandleser: Geschwindigkeit: 200 Zeichen/Sekunde Lochbandstanzer: Geschwindigkeit: 50 Zeichen/Sekunde Beide Geraete sind fuer 5- und 8-Kanallochband ausgelegt. - Lochbandeinheit SPTP-3, CM 6204 Hersteller: MFRA-ELSAB (Volksrepublik Polen) bestehend aus: Lochbandleser: Geschwindigkeit: 1000 Zeichen/Sekunde Lochbandstanzer: Geschwindigkeit: 50 Zeichen/Sekunde Beide Geraete sind fuer 5- und 8-Kanallochband ausgelegt. Alle Geraete der Lochbandperipherie werden ueber Anschlusssteu- ereinheiten, die das parallele Interface IFSP verwirklichen, an die Rechner des MGS K 1600 angeschlossen. 10.2. Geraetefunktionen ----------------------- 10.2.1. Standardfunktionen -------------------------- Die Standard-E/A-Funktionen fuer die Lochbandperipherie sind: QIO$C IO.ATT,... Anschliessen eines E/A-Gerae- tes an eine Task QIO$C IO.DET,... Trennen eines E/A-Geraetes von einer Task QIO$C IO.KIL,... Annullieren von E/A-Anforde- rungen QIO$C IO.RLB,..., Lesen eines logischen Blockes (nur Leser)  101 QIO$C IO.RVB,..., Lesen eines virtuellen Blockes (nur Leser) QIO$C IO.WLB,..., Schreiben eines logischen Blockes (nur Stanzer) QIO$C IO.WVB,..., Schreiben eines virtuellen Blockes (nur Stanzer) wobei: stadr = Anfangsadresse des Datenpuffers bufle = Groesse des Datenpuffers in Bytes Bemerkungen: - IO.KIL annulliert keinen sich in Bearbeitung befindlichen Lese- prozess. - IO.KIL annulliert einen in Bearbeitung befindlichen Stanzpro- zess in dem Moment, wenn der Driver auf die Bereitschaft des Stanzers wartet. 10.2.2. Geraetespezifische Funktionen ------------------------------------- Die Lochbandperipherie unterstuetzt keine geraetespezifische Funktionen. 10.3. Rueckkehrcodes -------------------- (E/A-Statusblock,1.Wort) Im niederwertigen Byte des 1. Wortes des E/A-Statusblockes werden der Nutzertask Informationen zum Verlauf der E/A-Operation ueber- geben. Ausser den E/A-Rueckkehrcodes IS.SUC, IS.PND, IE.ABO, IE.DAA, IE.DNA, IE.DNR, IE.EOF, IE.IFC, IE.OFL, IE.SPC, die im Abschnitt 1.7. und in Anlage 2 ausfuehrlich beschrieben sind, liefert der Driver den folgenden Rueckkehrcode. Tabelle 23 Rueckkehrcode fuer Lochbandgeraete mnemo- okt dez Bedeutung nisch ----------------------------------------------------------------- IE.VER 774 -4 Nicht identifizierbarer Fehler Das System kennt die Fehlerursache fuer die Nichtbeendigung der E/A-Anforderung nicht. (individuelle Fehler, Paritaetsfehler,...) 10.4. Informationen des GET-LUN-Makros ---------------------------------------- Nach der Nutzung der GLUN$-Anweisung sind folgende Informationen in den 6-Worte-Puffer, der von der Nutzertask zur Verfuegung ge- stellt worden ist, eingeschrieben: Wort 1: Geraetename (2 KOI-7-Bytes): PR, PP  102 Wort 2, NW-Byte: Geraeteeinheitennummer HW-Byte: 200 (oktal), falls der Driver resident ist. Null , falls der Driver ladbar ist und sich nicht im System befindet. Wort 3: 1 (= Satzorientiertes Geraet) Wort 4: undefiniert Wort 5: undefiniert Wort 6: enthaelt die Groesse des Geraetepuffers (stan- dardmaessig fuer LBP : 64 Bytes) 10.5. Programmierhinweise ------------------------- 10.5.1. Spezielle Wirkung der Funktionen IO.ATT und IO.DET ---------------------------------------------------------- Die Driver der Lochbandperipherie reagieren auf das Aussenden einer Anweisung mit der Funktion IO.ATT oder IO.DET wie folgt: Lochbandstanzer: IO.ATT bzw. IO.DET bewirkt das Stanzen von 170 NUL-Informationen. Lochbandleser: Bei der ersten Anweisung mit IO.RLB nach einer Anweisung mit IO.ATT werden alle NUL-Informationen auf dem Lochband ueberlesen. Bei allen weiteren Anweisungen mit IO.RLB wird auch die NUL- Information gelesen. 10.5.2. Lesen nach "END OF TAPE" (Bandende) ------------------------------------------- Liest der Leser-Driver nach dem physischen Bandende, so werden mindestens zwei falsche Zeichen in den Datenpuffer uebernommen. Diese unkorrekten Zeichen sind im Bytezaehler enthalten. Es wird empfohlen, wenigstens die letzten 6 Zeichen des Datenpuffers zu verwerfen, wenn die Lese-Operation mit IE.EOF abgebrochen wird. 10.6. Geraeteabhaengige Besonderheiten --------------------------------------- 10.6.1. Fehlerbedingungen ------------------------- Die folgenden Fehlerbedingungen sind von den Drivern der Loch- bandperipherie nicht unterscheidbar: - kein Band im Geraet - der Lochbandleser ist off-line - Netzfehler - fehlerhafte Hardwarefunktion  103 10.6.2. Wiedererlangen der Bereitschaft --------------------------------------- Findet der Lochbandstanzer nach Aufnahme einer Uebertragung eine Fehlerbedingung vor, wird folgende Ausschrift auf dem Bedienge- raet gegeben: *** PPn: -- NOT READY n = Geraetenummer Diese Ausschrift wird standardmaessig alle 15 Sekunden wiederholt (die Wiederholungszeit ist beim Generieren des Systems einstell- bar), bis die Fehlerbedingung korrigiert oder das E/A-Gesuch annuliert ist. Nach Korrektur der Fehlerbedingung wird die Uebertragung innerhalb einer Sekunde fortgesetzt.  104 11. Driver fuer Bildspeicher und Gemeinsame Speicher ------------------------------------------------------ 11.1. Allgemeines ------------------- Der Bildspeicher (BSP) K 3567 und der Gemeinsame Speicher (GSP) K 3667 sind Spezialgeraete zur verarbeitungsgerechten Speicherung von Bilddaten im Rahmen des Bildverarbeitungssystems (BVS) robo- tron A 6470. Bei dem Bildverarbeitungssystem (BVS) A 6472 ist der BSP K 3567 mit einem Steuerrechner K 1600 und einem Displaypro- zessor DIP K 2067 verbunden. Der Datentransfer zwischen BSP und Hauptspeicher erfolgt asynchron unter zeitlicher Regie des Steu- errechners. Die Datenuebertragung zwischen BSP und DIP laeuft nach Initialisierung synchron nach Videonorm ab. Bei dem BVS A 6473 sind maximal 4 BVS A 6472 an einen Dispatcher angeschlossen. Die BSP jedes einzelnen Steuerrechners sind auch mit dem Haupt- speicher des Dispatchers verbunden. Zusaetzlich besteht eine Ver- bindung zwischen dem GSP und jedem einzelnen Steuerrechner sowie dem Dispatcher. Anzahl der Bildspeichereinheiten (Bilder) je BSP bzw. GSP: 4 Speicherkapazitaet je Bildspeichereinheit: 512 Zeilen mit je 512 Bildpunkten (Bytes) Betriebsarten: - videosynchron nach Videonorm CIRT (80 ns pro Bildpunkt) - asynchron im Abfragebetrieb mit AIP 11.2. Geraetefunktionen ------------------------- 11.2.1. Standardfunktionen -------------------------- Die Standardfunktionen fuer Bildspeicher sind: QIO$C IO.ATT,... Anschliessen eines E/A-Geraetes an eine Task (siehe Pkt. 11.5.) QIO$C IO.DET,... Trennen eines E/A-Geraetes von einer Task (siehe Punkt 11.5.) QIO$C IO.KIL,... Annullieren von E/A-Anforderun- gen 11.2.2. Geraetespezifische Funktionen -------------------------------------- 11.2.2.1. Transferfunktionen ---------------------------- Zulaessige Transferfunktionen sind: IO.RLB, IO.RVB, IO.WLB, IO.WVB Im folgenden wird nur die Funktion IO.RLB beschrieben. Mit Aus- nahme der Subfunktion "ST, die nur fuer Leseoperationen verwendet werden darf, kann jede der o.a. Funktionen sinngemaess eingesetzt werden. Die Subfunktionen werden im 6. geraetespezifischen Para- meter des QIO-Makros angegeben. QIO$C IO.RLB,... Transfer eines logischen Blockes wobei: blocknr=logische Blocknummer  105 Ein logischer Block entspricht einer Bildzeile mit der Laenge von 512 Bytes. Die Blocknummer wird als Zeilen- nummer interpretiert und muss daher zwischen 0 und 511 liegen. Tritt eine Blocknummer auf, die ausserhalb der zulaessigen Grenzen liegt, erfolgt eine Fehlermeldung IE.BLK. Der Transfer wird bei Erreichen des Pufferendes beendet. QIO$C IO.RLB,... Transfer in Hintergrundarbeit In der Hintergrundarbeit werden fuer den Transfer aus- schliesslich die Bild- und Zeilenruecklaeufe genutzt. Daher werden auf dem Monitor keine Stoerungen sichtbar. Allerdings betraegt die Abarbeitungszeit etwa 150 % der Zeit fuer Vordergrundarbeit. Die weiteren Parameter der Hintergrundarbeit sind die gleichen wie die der Vorder- grundarbeit. QIO$C IO.RLB,... Transfer in Vordergrundarbeit In der Vordergrundarbeit wird die gesamte Zeit fuer den Transfer genutzt, daher sind waehrend des Transfers Stoe- rungen auf dem Monitor sichtbar. Die ersten 7 Worte des Puffers werden als Spezifikations- feld fuer Videoinformationen benutzt. Dieses 7-Worte-Feld ist bei der Spezifikation der Pufferlaenge zu berueck- sichtigen. In das Spezifikationsfeld sind vom Nutzer die folgenden Informationen zu speichern: Wort 1: x-Koordinate des Anfangspunktes des Bildaus- schnittes Wort 2: y-Koordinate des Anfangspunktes des Bildaus- schnittes Wort 3: x-Koordinate des Endpunktes des Bildausschnittes Wort 4: y-Koordinate des Endpunktes des Bildausschnittes Wort 5: Transfermodus: - "LI: zeilenweiser Transfer - "CO: spaltenweiser Transfer Standard ist "LI Wort 6: Richtung horizontal: - "RI: Transfer von links nach rechts - "LE: Transfer von rechts nach links Standard ist "RI Wort 7: Richtung vertikal: - "DO: Transfer von oben nach unten - "UP: Transfer von unten nach oben Standard ist "DO Die Worte 1 bis 4 des Spezifikationsfeldes muessen die folgenden Bedingungen erfuellen: - zulaessiger Wertebereich: 0 bis 511 - die Anzahl der Bildpunkte im spezifizierten Bildausschnitt muss im Bereich 1 bis 65535 lie- gen  106 - die Anfangs- und Endadressen duerfen nicht den Spezifikationen in den Worten 5 bis 7 wider- sprechen (Anfangsadressen koennen groesser als Endadressen sein!) - die Pufferlaenge sollte ein Vielfaches des Zei- lenabschnittes (bei zeilenweisem Transfer) bzw. des Spaltenabschnittes (bei spaltenweisem Transfer) sein - die Pufferlaenge muss mindestens der Anzahl der Bildpunkte im spezifizierten Bildausschnitt, vergroessert um die Laenge des Spezifikations- feldes entsprechen Mittels der Worte 1 bis 4 des Spezifikationsfeldes fuer Videoinformationen wird ein Bildausschnitt bestimmt. Die Reihenfolge, in der die einzelnen Bildpunkte dieses Aus- schnittes uebertragen werden, ergibt sich aus den Worten 5 bis 7. Die spezifizierten Videoadressen werden gemaess den o.a. Bedingungen auf zulaessige Werte geprueft. Ggf. erfolgt eine Fehlermeldung IE.BAD. Ist die Puffer- laenge groesser, als es der spezifizierte Bildausschnitt erforderlich macht, wird der Transfer nach der Ueber- tragung des Bildausschnittes beendet. Der Rest des Puf- fers wird nicht beruehrt. Ist die Pufferlaenge kleiner, als es der spezifizierte Bildausschnitt erforderlich macht, wird der Transfer nach Erreichen des Pufferendes beendet und eine Fehlerwarnung gegeben (bei Lese- operationen IE.DAO, bei Schreiboperationen IE.BAD). Die Verwendung ungueltiger mnemonischer Subfunktionsbezeich- nungen fuehrt zu deren Ablehnung mit einer Fehlermeldung IE.ONP. QIO$C IO.RLB,... Lesen von Bildspeicherstatus und -kennwerten Diese Subfunktion darf nur fuer Leseoperationen verwendet werden. Die eingelesenen Informationen besitzen die folgende Struktur: Wort 1: NW-Byte: Bildspeicherstatus HW-Byte: Pultnummer, negativer Wert zeigt BVS A 6472E an Wort 2: AIP-Adresse (KSA) Ist die Pufferlaenge kleiner als 4, so werden die Infor- mationen entsprechend verkuerzt gelesen. Jede einzelne Bildspeichereinheit besitzt einen eigenen Bildspeicher- status. Das Statusbyte hat die folgende Struktur:  107 Tabelle 24: Statusbyte fuer Bildspeicher Bit 7 6 5 4 3 2 1 0 Wert Bedeutung -------------------------------------------------------- n n n Laufende Transferfunktion: 1 Lesen in Hintergrundarbeit 3 Lesen in Vordergrundarbeit 5 Schreiben in Hintergrund- arbeit 7 Schreiben in Vordergrund- arbeit n n Laufende Videoarbeit: 1 Videolesen 3 Videoschreiben Arbeitszustand: n 1 keine laufende Transfer- funktion n 1 keine laufende Videoarbeit n 1 Bildspeicher reserviert (siehe Punkt 11.5.) 11.2.2.2. Steuerfunktionen -------------------------- QIO$C IO.EOF,... Initialisieren von Videoarbeit parameter1: "Q1: Uebertragen des 1. Quadranten in alle Quadranten "Q2: Uebertragen des 2. Quadranten in alle Quadranten "Q3: Uebertragen des 3. Quadranten in alle Quadranten "Q4: Uebertragen des 4. Quadranten in alle Quadranten "HU: Uebertragen der oberen Bildhaelfte in obere und untere Bildhaelfte "HD: Uebertragen der unteren Bildhaelfte in obere und untere Bildhaelfte "HL: Uebertragen der linken Bildhaelfte in linke und rechte Bildhaelfte "HR: Uebertragen der rechten Bildhaelfte in linke und rechte Bildhaelfte "AL: Uebertragen des ganzen Bildes Bei Videoschreiben ist immer "AL zu spezifizieren parameter2: Uebertragungsrichtung: "FR: Videolesen "TO: Videoschreiben parameter3: Vergroesserungsfaktor (1 bis 16, wahlfrei, bei Videoschreiben immer 1) Standard ist Vergroesserungsfaktor=1 parameter4: "AS: Kennzeichen fuer automatischen Stopp der Video- arbeit nach einem Bilddurchlauf (wahlfrei, nur fuer Videoschreiben sinnvoll) parameter5: x-Koordinate des Anfangspunktes (Wertebereich: 0 bis 511)  108 parameter6: y-Koordinate des Anfangspunktes (Wertebereich: 0 bis 511) Je nach Modell ist es moeglich, dass RM3 und/oder RM7 fuer Videoschreiben gesperrt sind. In diesem Fall wird die E/A-Anfor-derung mit Fehlermeldung IE.BAD abgewiesen. Liegen die Video-adressen ausserhalb der zulaessigen Grenzen, so erfolgt ebenfalls eine Feh- lermeldung IE.BAD. Die Verwendung ungueltiger mnemo- nischer Subfunktionsbezeichnungen fuehrt zu einer Fehlermeldung IE.ONP. QIO$C IO.STC,... Beenden der Videoarbeit Wird diese Funktion gegeben und es liegt keine aktive Videoarbeit vor, erfolgt eine Fehlermeldung IE.ONP. QIO$C IO.SEC,...<"AB> Aufheben der Reservierung Es ist zu beachten, dass alle laufenden Arbeiten der betreffenden Bildspeichereinheit beendet werden (auch Videoarbeit!). Der Parameter "AB ist wahlfrei. Wird er innerhalb einer privilegierten Task gegeben, erfolgt das Auf- heben der Reservierung unbedingt und ohne Pruefung auf Zugriffsrechte, d.h. auf vorangegangene Reser- vierung mittels IO.ATT. Die Verwendung von "AB inner- halb einer nichtprivilegierten Task fuehrt zu einer Fehlermeldung IE.PRI. Ist einem IO.SEC ohne Parameter "AB auf dem betreffenden Rechner kein IO.ATT vorange- gangen, wird eine Fehlermeldung IE.DNA gegeben. Bezueglich weiterer Informationen zur Reservierung siehe Punkt 11.5. 11.3. Rueckkehrcodes -------------------- Im niederwertigen Byte des 1. Wortes des E/A-Statusblockes werden der Nutzertask Informationen zum Verlauf der E/A-Operation ueber- geben. Es sind die folgenden Rueckkehrcodes moeglich: Tabelle 25: Rueckkehrcodes fuer Bildspeicher und Gemeinsamen Speicher mnemo- oktal dez. Bedeutung nisch ----------------------------------------------------------------- IS.SUC 1 1 Erfolgreicher Abschluss einer E/A-Operation IE.BAD 377 - 1 Ein Parameter (ausser Blocknummer) liegt ausserhalb der zulaessigen Grenzen: - bei einem Transfer ist der Bildausschnitt unzulaessig gross - bei einem Transfer liegt eine Unvertraeglich- keit zwischen Uebertragungsmodus und -richtung einerseits und den Videoadressen andererseits vor  109 Tabelle 25 (Fortsetzung) mnemo- oktal dez. Bedeutung nisch ----------------------------------------------------------------- - bei einer Schreiboperation ist die Anzahl der Bildpunkte im Bildausschnitt groesser als die Pufferlaenge - bei Videoschreiben ist eine dafuer nicht vor- gesehene Bildspeichereinheit spezifiziert worden IE.DNR 375 - 3 - Geraet ist nicht bereit - Geraet ist waehrend des Transfers ausge- fallen. Es ist nicht festzustellen, wieviel Bytes fehlerfrei uebertragen worden sind IE.VER 374 - 4 bei der Abarbeitung eines hardware-Kommandos ist ein nicht identifizierbarer Fehler aufge- treten IE.ONP 373 - 5 - es ist eine ungueltige Subfunktion spezifi- ziert worden - es ist versucht worden, eine nicht aktive Videoarbeit zu beenden IE.DNA 371 - 7 - es wird versucht, auf ein nicht angeschlos- senes Geraet zuzugreifen - es wird versucht, ein nicht angeschlossenes Geraet freizugeben IE.DAO 363 -13 bei einer Leseoperation ist die Anzahl der Bildpunkte im Bildausschnitt groesser als die Pufferlaenge IE.PRI 360 -16 innerhalb einer nichtprivilegierten Task ist IO.SEC mit dem Parameter "AB gegeben worden IE.RSU 357 -17 es ist versucht worden, eine Bildspeicher- einheit zu reservieren (IO.ATT), die bereits an einen anderen Rechner angeschlossen ist IE.BLK 354 -20 bei einem Transfer liegt die Blocknummer ausserhalb der zulaessigen Grenzen Bei Transferoperationen enhaelt das 2. Wort des E/A-Statusblok- kes die Anzahl der uebertragenen Bytes. 11.4. Informationen des GET-LUN-Makros -------------------------------------- Nach der Nutzung der GLUN$-Anweisung sind folgende Informationen in den 6-Worte-Puffer eingeschrieben, der von der Nutzertask zur Verfuegung gestellt worden ist: Wort 1: Geraetename (2 KOI-7-Bytes): RM Wort 2: NW-Byte: 200 (oktal), falls der Driver resident ist HW-Byte: Null, falls der Driver ladbar ist und sich nicht im System befindet Wort 3: 140010 (oktal) Die Bedeutung der Bits ist dem Abschnitt 1.4.4. zu entnehmen Wort 4: undefiniert Wort 5: undefiniert Wort 6: enthaelt die Groesse des Geraetepuffers (standardmaessig fuer BSP und GSP: 512 Bytes)  110 11.5. Programmierhinweise ------------------------- Das Anschliessen bzw. Reservieren von Bildspeichereinheiten ist wegen der Zugriffsmoeglichkeiten von mehreren Rechnern aus pro- blematisch. Es muss gewaehrleistet werden, dass eine Bildspeichereinheit jeweils nur von einem einzigen Nutzer ange- sprochen werden kann und dass die Reservierung ueber Taskgrenzen hinweg aufrechterhalten bleibt. Zu diesem Zweck erfolgt die Re- servierung in den folgenden drei Ebenen: - hardwareseitig: durch Stellen eines Flip-Flops - driverseitig: durch Setzen eines Flagbits im Driver desjenigen Rechners, von dem aus die Reservierung erfolgte - taskseitig: durch Adresseintragung in den Steuer- block des Geraetes Damit schliessen sich Reservierungen von verschiedenen Rechnern (mit unterschiedlichen Betriebssystemen) gegenseitig aus. Eine Absicherung bezueglich mehrerer Nutzer am gleichen Rechner wird nur in dem Sinne durchgefuehrt, dass die gleichzeitige Benutzung verhindert wird. Die Funktionen IO.ATT, IO.DET und IO.SEC bewir- ken hinsichtlich der drei Reservierungsebenen: IO.ATT: Reservierung in allen drei Ebenen IO.DET: Aufheben der Reservierung in der 3. Ebene (taskseitige Reservierung). Da die Reservierung in der 1. Ebene (hardwareseitige Reservierung) bestehen bleibt, wird der Zugriff von einem anderen Rechner ausgeschlossen. Die 2. Ebene (driverseitige Reservierung) dient der Erkennung der Zugriffsrechte bezueglich des Rechners bzw. Betriebssystems. Sie bleibt ebenfalls unveraen- dert, daher kann eine andere Task vom gleichen Rechner aus zugreifen IO.SEC: Aufheben der Reservierung in allen drei Ebenen Jede Arbeit mit dem Bildspeicher erfordert eine vorausgegangene Reservierung der betreffenden Bildspeichereinheit, anderenfalls erfolgt die Abweisung mit Fehlermeldung IE.DNA. Ohne Reservierung werden lediglich IO.ATT sowie IO.RLB mit Subfunktion "ST (Status- lesen) angenommen.  111 12. Driver fuer Displayprozessor ---------------------------------- 12.1. Allgemeines ----------------- Der Displayprozessor (DIP) K 2067 ist ein Spezialgeraet des Bild- verarbeitungssystems (BVS) robotron A 6470. Er dient der digita- len Verarbeitung von Bilddaten. Die Programmierung des DIP er- folgt durch Uebertragung von Steuerinformationen und Daten in interne Register. Die Verarbeitung der Bilddaten erfolgt nach dem Pipeline-Prinzip in 3 Farbkanaelen (Rot/Gruen/Blau). Jeder Farb- kanal enthaelt: - Eingangsmultiplexer - Eingangsfunktionsformer - Arithmetisch-logische Einheit - Normierungseinheit - Ausgangsfunktionsformer - Korrekturfunktionsformer Eingangsdaten: maximal 8 Eingangsdatenstroeme Ausgangsdaten: maximal 3 Ausgangsdatenstroeme Verarbeitungsbreite: 8 bis 12 Bits parallel Verarbeitungsformat: 512*512 Bildpunkte 12.2. Geraetefunktionen ----------------------- Der Driver fuer den Displayprozessor besitzt zwar die formale Struktur eines Drivers, er ist jedoch lediglich als Fortsetzung des BVS-Programmes DCTR aufzufassen. Dies hat seine Ursache in der Komplexitaet des Displayprozessors und seiner Programmierung und aeussert sich u.a. in der nichtkonventionellen Struktur der Parameterliste des QIO-Makros. Bezueglich der Programmierung des Displayprozessors wird auf die Beschreibung der entsprechenden BVS-Programme verwiesen. 12.2.1. Standardfunktionen -------------------------- Die Standardfunktionen fuer den Displayprozessor sind: QIO$C IO.ATT,... Anschliessen eines E/A-Geraetes an eine Task QIO$C IO.DET,... Trennen eines E/A-Geraetes von einer Task 12.2.2. Geraetespezifische Funktionen ------------------------------------- Einzige geraetespezifische Funktion ist QIO$C IO.WLB,... In parameter3 wird eine Subfunktion spezifiziert, die die Bedeu- tung der uebrigen Parameter festlegt. Mittels der Subfunktion und weiterer Informationen aus anderen Parametern werden interne Re- gister des Displayprozessors bestimmt, die entsprechend ebenfalls uebermittelter Kenndaten die Verarbeitung der Bilddaten steuern.  112 12.3. Rueckkehrcodes -------------------- Im niederwertigen Byte des 1. Wortes des E/A-Statusblockes werden der Nutzertask Informationen zum Verlauf der E/A-Operation ueber- geben. Es sind die folgenden Rueckkehrcodes moeglich: Tabelle 26: Rueckkehrcodes fuer Displayprozessor mnemo- oktal dez. Bedeutung nisch ----------------------------------------------------------------- IS.SUC 1 1 Erfolgreicher Abschluss einer E/A-Operation IE.BAD 377 - 1 - es ist eine unzulaessige Subfunktionsnummer spezifiziert worden - an der Anschlusssteuerung ist ein Fehler aufgetreten IE.IFC 376 - 2 es ist ein unzulaessiger Funktionscode spezi- fiziert worden IE.NOD 351 -23 fuer das Laden von Funktionsformern ist nicht genuegend dynamischer Speicherplatz vorhanden Das 2. Wort des E/A-Statusblockes ist nicht definiert. 12.4. Informationen des GET-LUN-Makros -------------------------------------- Nach der Nutzung der GLUN$-Anweisung sind folgende Informationen in den 6-Worte-Puffer eingeschrieben, der von der Nutzertask zur Verfuegung gestellt worden ist: Wort 1: Geraetename (2 KOI-7-Bytes): DD Wort 2: NW-Byte: 200 (oktal), falls der Driver resident ist HW-Byte: Null, falls der Driver ladbar ist und sich nicht im System befindet Wort 3: 140010 (oktal), die Bedeutung der Bits ist dem Abschnitt 1.4.4. zu entnehmen Wort 4: undefiniert Wort 5: undefiniert Wort 6: enthaelt die Groesse des Geraetepuffers (standardmaessig fuer DIP: 512 Bytes)  113 13. Driver fuer Grafiksteuerung --------------------------------- 13.1. Allgemeines ----------------- Die Grafiksteuerung (GST) K 7067 ist ein Spezialgeraet des Bild- verarbeitungssystems (BVS) robotron A 6470. Die GST existiert in mehreren Modellen, die sich hauptsaechlich bezueglich der Anzahl der Bitebenen der geraeteinternen Speichermatrix und dem Vorhandensein eines TV-Kamera-Anschlusses unterscheiden. Ein Kameraanschluss ist bei den Modellen K 7067.15 (serienmaessig) und ggf. K 7067.02 (als Nachruestung) vorhanden. Die geraeteinterne Speichermatrix besitzt bei den Modellen K 7067.01 und K 7067.21 nur vier Bitebenen (bit 4 bis bit 7). Bei diesen Modellen repraesentiert der Wert eines Bildpunktes eine Farbe: bit 7 Enable-Bit fuer Grafikuebertragung im Displayprozessor (muss immmer gesetzt sein) bit 6 Grafikinformation rot bit 5 Grafikinformation gruen bit 4 Grafikinformation blau In den Bildpunkten koennen daher die folgenden Farben programmiert werden: 200 schwarz 220 blau 240 gruen 260 hellblau 300 rot 320 violett 340 gelb 360 weiss Bei den Modellen K 7067.02, K 7067.12 und K 7067.15 besitzt die geraeteinterne Speichermatrix acht Bitebenen. Bei diesen Modellen repraesentiert der Wert eines Bildpunktes einen Grauwert. Die Grafiksteuerung dient der Speicherung von bildhaften Informationen sowie (in den BVS A 6472 und A 6473) deren Einblendung in das vom Displayprozessor DIP K 2067 bearbeitete Bild. Es kann spezifiziert werden: - eine Cursoradresse (2 Worte) zur Markierung eines Bild- punktes auf dem Monitor. Bei gewissen Subfunktionen bestimmt die Cursorposition den Anfangspunkt des Trans- fers - eine Videoadresse (2 Worte) zur Verschiebung der Abbil- dung der geraeteinternen Speichermatrix auf dem Monitor. Die Verschiebung erfolgt in der Weise, dass der durch die Videoadresse bestimmte Bildpunkt auf dem Monitor in der linken oberen Ecke abgebildet wird. Bei einer Videoadresse ungleich (0,0) wird das Bild auf dem Monitor nach links oben verschoben, von rechts unten her laeuft die Bildinformation "Null" nach - ein Vergroesserungsfaktor (1 Byte) zwischen 1 und 16 (linear)  114 - eine Schreibmaske (1 Byte). Jeder Bitebene des geraete- internen Matrixspeichers ist das entsprechende Bit der Schreibmaske zugeordnet. Eine "Null" in der Schreib- maske verbietet Schreiboperationen auf die zugeordnete Bitebene der Matrix Kapazitaet des geraeteinternen Matrixspeichers: 512 Zeilen mit je 768 Bildpunkten. Die Anzahl der Bitebenen ist je nach Ausstattungsvariante un- terschiedlich. Auf dem Monitor sind 512 Zeilen mit je 610 Bildpunkten darstellbar Betriebsarten: - videosynchron nach Videonorm CIRT (80 ns pro Bildpunkt) - asynchron im Abfragebetrieb mit AIP 13.2. Geraetefunktionen ------------------------- 13.2.1. Standardfunktionen -------------------------- Die Standardfunktionen fuer die Grafiksteuerung sind: QIO$C IO.DET,... Trennen eines Geraetes von einer Task QIO$C IO.KIL,... Annullieren von E/A-An- forderungen 13.2.2. Geraetespezifische Funktionen --------------------------------------- 13.2.2.1. Transferfunktionen ---------------------------- Zulaessige Transferfunktionen sind: IO.RLB,IO.RVB,IO.WLB, IO.WVB Im folgenden wird nur die Funktion IO.RLB beschrieben. Mit Aus- nahme der Subfunktion "CL, die nur fuer Schreiboperationen ver- wendet werden darf, kann jede der o.a. Funktionen sinngemaess eingesetzt werden. Die Subfunktionen werden im 3. geraetespezi- fischen Parameter des QIO-Makros angegeben. Die folgenden Subfunktionen fuehren einen Transfer mit geraete- internen Registern durch: QIO$C IO.RLB,... Lesen der Cursoradresse (2 Worte) Die uebertragene Cursoradresse besitzt die folgende Struktur: 1. Wort: x-Koordinate 2. Wort: y-Koordinate  115 Ist die Pufferlaenge zu klein spezifiziert worden, wird ein Fehler IE.DAO gemeldet und der Transfer findet nicht statt. Wird bei einer Schreiboperation versucht, den Cursor ausserhalb des geraeteinternen Matrixspeichers zu positionieren, so erfolgt eine Fehlermeldung IE.EOV QIO$C IO.RLB,... Lesen der Videoadresse (2 Worte) Die uebertragene Videoadresse besitzt die folgende Struktur: 1. Wort: x-Koordinate 2. Wort: y-Koordinate Ist die Pufferlaenge zu klein spezifiziert worden, wird ein Fehler IE.DAO gemeldet und der Transfer findet nicht statt. QIO$C IO.RLB,... Lesen der Schreibmaske QIO$C IO.RLB,... Lesen des Vergroesse- rungsfaktors QIO$C IO.RLB,... Lesen eines Funktions- formers bzw. der aktuel- len Betriebsart des TV- Kamera-Anschlusses wobei: parameter 4='R: Funktionsformer Rot parameter 4='G oder 0: Funktionsformer Gruen parameter 4='B Funktionsformer Blau parameter 4='C internes Register fuer aktuelle Be- triebsart des TV- Kamera-Anschlusses Ist ein unzulaessiger Funktionsformer spezifiziert wor- den, erfolgt eine Fehlermeldung IE.ONP. Wurde die Puffer- laenge kleiner als 256 Bytes angegeben, so wird der Transfer bei Erreichen des Pufferendes beendet. Ueber- schreitet die Pufferlaenge 256 Bytes, so werden 256 Bytes uebertragen und der Rest des Puffers wird nicht beruehrt. Wird im 4. geraetespezifischen Parameter 'C spezifiziert, so ist zu beachten, dass das interne Register fuer die aktuelle Betriebsart des TV-Kamera-Anschlusses nur ein Byte lang ist und seine Verwendung nur in Verbindung mit einer Schreiboperation moeglich ist. Die Betriebsarten werden durch die Ziffern Null bis Vier bezeichnet. Die folgenden Subfunktionen fuehren einen Transfer mit der ge- raeteinternen Speichermatrix durch: QIO$C IO.RLB,... Lesen eines logischen Blockes wobei: blocknr=logische Blocknummer Ein logischer Block entspricht einer Bildzeile mit der Laenge von 512 Bytes. Die Blocknummer wird als Zeilen- nummer interpretiert. Der Transfer wird bei Erreichen des  116 Pufferendes beendet. QIO$C IO.RLB,... Matrixlesen wobei: deltax=Zeilenlaenge des Bildausschnittes deltay=Zeilenanzahl des Bildausschnittes Der zu uebertragende Bildausschnitt wird durch die Position des Cursors als Anfangspunkt und die spezifi- zierte Ausdehnung des Bildausschnittes (deltax,deltay) bestimmt. Nach dem Transfer steht der Cursor unter dem linken unteren Eckpunkt. Bei fehlender Spezifikation des Parameters deltax wird die Default-Pufferlaenge 512 und bei fehlendem deltay der Wert "Eins" eingesetzt. Ist der spezifizierte Bildausschnitt groesser als die Puffer- laenge, so wird der Transfer bei Erreichen des Pufferen- des ohne Fehlermeldung beendet. Ist der Bildausschnitt kleiner als die Pufferlaenge, endet der Transfer nach Uebertragung des Bildausschnittes. Der Rest des Puffers wird nicht beruehrt. QIO$C IO.WLB,... Matrixloeschen wobei: deltax=Zeilenlaenge des Bildausschnittes deltay=Zeilenanzahl des Bildausschnittes Der zu loeschende Bildausschnitt wird durch die Position des Cursors als Anfangspunkt und die spezifizierte Aus- dehnung des Bildausschnittes (deltax,deltay) bestimmt. Das Loeschen erfolgt durch Schreiben eines einzelnen im Puffer bereitgestellten Zeichens auf den gesamten Bild- ausschnitt. QIO$C IO.RLB,... Lesen eines Punktes Der zu lesende Punkt wird durch die Position des Cursors bestimmt QIO$C IO.RLB,... Lesen einer Punktfolge Diese Subfunktion setzt voraus, dass im Puffer 3-Wort- Gruppen mit der folgenden Struktur bereitgestellt werden: 1. Wort: x-Koordinate des zu uebertragenden Punktes 2. Wort: y-Koordinate des zu uebertragenden Punktes 3. Wort: nimmt den uebertragenen Punkt auf Der Puffer kann beliebig viele solcher 3-Wort-Gruppen enthalten, jedoch muss die Pufferlaenge immer durch 6 teilbar sein. Ist dies nicht der Fall, wird eine Fehler- meldung IE.BAD ausgegeben und der Transfer findet nicht statt. Wird eine Adresse spezifiziert, die ausserhalb des geraeteinternen Matrixspeichers liegt, erfolgt eine Feh- lermeldung IE.EOV und der Transfer wird an dieser Stelle abgebrochen.  117 13.2.2.2. Steuerfunktionen -------------------------- QIO$C IO.ATT,... Anschliessen eines E/A- Geraetes und wahlweises Herstellen eines Anfang- zustandes an der Grafik- steuerung wobei: parameter1 gleich 0: Anfangszustand ist herzustellen parameter1 ungleich 0: Anfangszustand ist nicht herzustellen Der Anfangszustand wird in Punkt 13.5. dargestellt. QIO$C IO.SEC,... Complement eines Bild- punktes bilden Der zu verarbeitende Punkt wird durch die Position des Cursors bestimmt QIO$C IO.SMO,...statusblockadr Uebermitteln der AIP- Adresse in das 2. Wort des E/A-Statusblockes Die AIP-Adresse der entsprechenden GST wird uebermittelt QIO$C IO.STC,... Einstellen des Spezifi- kationsregisters wobei: parameter1 bis parameter6=eine oder mehrere der u.a.Parameterspezifikationen "CE: Cursor ein "CA: Cursor aus "CB: Cursor blinkt "CN: Cursor blinkt nicht "CK: Cursor klein "CG: Cursor gross "GE: Grafik ein "GA: Grafik aus "FK: Format klein (768*512*4) (Matrixspeicher) "FG: Format gross (1536*1024*1) (Matrixspeicher) "AZ: Anfangszustand herstellen (siehe Punkt 13.5.) "CR: Cursor ruecksetzen (auf 0,0) Die Spezifikationen koennen in beliebiger Reihenfolge auf beliebigen Plaetzen stehen. Widersprechen sich spezifi- zierte Parameter, so wird der letzte ausgefuehrt. Nach jedem Einstellen des Spezifikationsregisters wird dessen Stand im hoeherwertigen Byte des 1. Wortes des E/A-Statusblocks uebergeben. Es bedeutet:  118 bit 4 = 1 Blinken des Cursors = 0 kein Blinken des Cursors bit 3 = 1 grosser Cursor = 0 kleiner Cursor bit 2 = 1 Cursor aus = 0 Cursor ein bit 1 = 1 Grafikformat gross = 0 Grafikformat klein bit 0 = 1 Grafik ein = 0 Grafik aus 13.3. Rueckkehrcodes -------------------- Im niederwertigen Byte des 1. Wortes des E/A-Statusblockes werden der Nutzertask Informationen zum Verlauf der E/A-Operation ueber- geben, so sind folgende Rueckkehrcodes moeglich: Tabelle 27: Rueckkehrcodes fuer Grafiksteuerung mnemo- oktal dez. Bedeutung nisch ----------------------------------------------------------------- IS.SUC 1 1 Erfolgreicher Abschluss einer E/A-Ope- ration IE.BAD 377 - 1 beim Transfer einer Punktfolge ist die Pufferlaenge nicht durch 6 teilbar. Der Transfer wird nicht ausgefuehrt IE.DNR 375 - 3 - Geraet ist nicht bereit - Geraet ist waehrend der Datenuebertra- gung ausgefallen. Es ist nicht festzu- stellen, wieviel Bytes fehlerfrei uebertragen worden sind IE.ONP 373 - 5 beim Lesen oder Laden eines Funktionsfor- mers ist zur Bezeichnung des Funktions- formers ein unzulaessiger Code verwendet worden IE.EOV 365 -11 - es ist versucht worden, den Cursor aus- serhalb des geraeteinternen Matrixspei- chers zu positionieren - beim Transfer einer Punktfolge ist eine Adresse spezifiziert worden, die ausserhalb des geraeteinternen Matrix- speichers liegt. Der Transfer wird ab- gebrochen IE.WLK 364 -12 bei einer Schreiboperation auf den ge- raeteinternen Matrixspeicher ist ver- sucht worden, auf eine schreibgeschuetzte Bitebene zu schreiben. Im hoeherwertigen Byte des 1. Wortes des E/A-Statusblockes wird der Inhalt der Schreibmaske ueber- geben IE.DAO 363 -13 beim Transfer einer Cursor- oder Video- adresse ist eine zu kleine Pufferlaenge spezifiziert worden. Der Transfer wird nicht ausgefuehrt Bei Transferoperationen enthaelt das 2. Wort des E/A-Statusblok- kes die Anzahl der uebertragenen Bytes.  119 13.4. Informationen des GET-LUN-Makros -------------------------------------- Nach der Nutzung der GLUN$-Anweisung sind folgende Informationen in den 6-Worte-Puffer eingeschrieben, der von der Nutzertask zur Verfuegung gestellt worden ist: Wort 1: Geraetename (2 KOI-7-Bytes): GD Wort 2: NW-Byte: 200 (oktal), falls der Driver resident ist HW-Byte: Null, falls der Driver ladbar ist und sich nicht im System befindet Wort 3: 140010 (oktal) Die Bedeutung der Bits ist dem Abschnitt 1.4.4. zu entnehmen Wort 4: undefiniert Wort 5: undefiniert Wort 6: enthaelt die Groesse des Geraetepuffers (standardmaessig fuer GST: 512 Bytes) 13.5. Programmierhinweise ------------------------- Der in einigen Faellen gebildete Anfangszustand beinhaltet: - Videoadresse: 0,0 - Cursoradresse: 0,0 - Schreiben erlaubt - Vergroesserungsfaktor: 1 - Grafik eingeblendet - Format: klein - kleiner permanenter Cursor - alle Funktionsformer mit Einheitsmatrix geladen 13.6. Geraeteabhaengige Besonderheiten -------------------------------------- Mittels der folgenden Optionen kann der Leistungsumfang des GD- Drivers bestimmt werden. 13.6.1. Einschraenken der Pruefung geraete- und funktionsab- haengiger Parameter ------------------------------------------------------------ Die Ausgabe der Rueckkehrcodes IE.BAD, IE.DAO, IE.EOV, IE.ONP einschliesslich der Pruefung auf die zugeordneten Fehlerbedingungen kann mittels Option unterdrueckt werden. Dadurch ist es moeglich, den fuer den Driver benoetigten Speicherplatz zu kuerzen. Da jedoch die Reaktion des Drivers bei Vorliegen einer entsprechenden Fehlerbedingung nicht vorausgesagt werden kann, ist die Verwendung der Option nur zulaessig, wenn voellige Fehlerfreiheit des Programmes bezueglich der Programmie- rung der GST garantiert werden kann. 13.6.2. Unterdruecken der Funktion IO.SMO ----------------------------------------- Die Funktion IO.SMO (Uebermitteln der AIP-Adresse der GST) kann mittels Option unterdrueckt werden. Dadurch ist es moeglich, den fuer den Driver benoetigten Speicherplatz zu kuerzen.  120 13.6.3. Warten auf Uhr-Unterbrechung bei Schreiben der Videoadresse ------------------------------------------------------ Bei Vorliegen dieser Option wartet der Driver vor dem Schreiben der Videoadressen auf eine Uhr-Unterbrechung. Dadurch werden Bildstoerungen beim haeufigen Umschalten der Videoadressen verhindert. Zu diesem Zweck muss der Rechner mit dem Halbbildsignal der GST getaktet werden, das am Netzeingang der ZZE anliegt. 13.6.4. Auswahl einer bei dem Herstellen des Anfangszustandes einzustellenden Betriebsart fuer den TV-Kamera-Anschluss ---------------------------------------------------------------- Diese Option ist fuer die GST K 7067.15 vorgesehen. Der TV- Eingang dieser GST kann auf eine der folgenden Betriebsarten eingestellt werden: Betriebsart 0: Videolesen des GST-Speichers Betriebsart 1: Schreiben eines Bildes von TV-Kamera in den GST-Speicher, danach automatisches Umschalten auf Betriebsart 0 Betriebsart 2: Staendiges Videolesen des Bildes von der TV- Kamera Betriebsart 3: Schreiben eines Bildes von TV-Kamera in den GST-Speicher, danach automatisches Umschalten auf Betriebsart 2 Nach dem Einschalten der GST wird immer die Betriebsart 2 eingestellt. Dies geschieht unabhaengig davon, ob der TV-Eingang belegt ist oder nicht. Nach dem Laden des Drivers und wahlweise beim Anschliessen der GST an eine Task stellt der Driver den Anfangszustand der GST her. Die per Option ausgewaehlte Betriebsart wird Bestandteil des Anfangszustandes. 13.6.5. Dynamisches Einstellen der Betriebsart fuer den TV- Kamera-Anschluss ----------------------------------------------------------- Diese Option ist fuer die GST K 7067.15 und die mit einem TV- Anschluss aufgeruestete GST K 7067.02 vorgesehen. Sie gestattet, den TV-Eingang der GST K 7067.15 dynamisch auf eine der o.a. Betriebsarten einzustellen. Bei der GST K 7067.02 gelangt das TV-Bild immer in den GST- Speicher. Zum Zwecke der Programmkompatibilitaet werden daher bei der Einstellung der Betriebsart die Werte "0" und "2" unterdrueckt.  121 14. Driver fuer Rollkugeleinheit ---------------------------------- 14.1. Allgemeines ----------------- Die Rollkugeleinheit (RKE) K 7767 ist ein Spezialgeraet des Bildverarbeitungssystems (BVS) robotron A 6470. Bei Drehung der Rollkugel in beliebiger Richtung werden Unterbrechungen ausge- loest. Bei jeder dieser Unterbrechungen wird dem Nutzer ein ge- raetespezifischer Parameter uebergeben, der die Drehrichtung der Rollkugel beschreibt. Die Parameteruebergabe sowie weitere Hin- weise zur Programmierung der Rollkugel sind in Punkt 14.5. darge- stellt. 14.2. Geraetefunktionen ------------------------- 14.2.1. Standardfunktionen -------------------------- Die Standardfunktionen fuer die Rollkugeleinheit sind: QIO$C IO.ATT,... Anschliessen eines E/A-Geraetes an eine Task QIO$C IO.DET,... Trennen eines E/A-Geraetes von einer Task QIO$C IO.KIL,... Annullieren von E/A-Anforderungen 14.2.2. Geraetespezifische Funktionen ------------------------------------- QIO$C IO.STC,... Anschliessen einer AST-Routine an die Rollkugel wobei: astr=Anfangsadresse der AST-Routine Eine neue STC-Anweisung ueberschreibt die alte AST-Routinen- adresse! Alle uebrigen Funktionen sind erlaubt und Bewirken ein Trennen der AST-Routine von der Rollkugeleinheit 14.3. Rueckkehrcodes -------------------- Im niederwertigen Byte des 1.Wortes des E/A-Statusblockes werden der Nutzertask Informationen zum Verlauf der E/A-Operation ueber- geben. Es sind die folgenden Rueckkehrcodes moeglich:  122 Tabelle 28: Rueckkehrcodes fuer Rollkugeleinheit mnemo- oktal dez. Bedeutung nisch ---------------------------------------------------------------- IS.SUC 1 1 Adresse der AST-Routine akzeptiert, Routine angeschlossen IE.BAD 377 - 1 Adresse der AST-Routine nicht akzeptiert, eine evtl. vorher angeschlossene AST-Routine wurde von der Rollkugel geloest Das 2. Wort des E/A-Statusblockes besitzt den Wert Null. 14.4. Informationen des GET-LUN-Makros -------------------------------------- Nach der Nutzung der GLUN$-Anweisung sind folgende Informationen in den 6-Worte-Puffer eingeschrieben, der von der Nutzertask zur Verfuegung gestellt worden ist: Wort 1: Geraetename (2 KOI-7-Bytes): TB Wort 2: NW-Byte: 200 (oktal), falls der Driver resident ist HW-Byte: Null, falls der Driver ladbar ist und sich nicht im System befindet Wort 3: Null, die Bedeutung der Bits ist dem Abschnitt 1.4.4. zu entnehmen Wort 4: undefiniert Wort 5: undefiniert Wort 6: Null 14.5. Programmierhinweise ------------------------- Informationen zur Drehung der Rollkugel werden dem Nutzer mittels eines geraetespezifischen Parameters auf dem Stack uebergeben. Beim Eintritt in die ST-Routine enthaelt der Stack die folgenden Informationen: SP+10: Ereignisflag-Maskenwort SP+06: PS des unterbrochenen Programmes SP+04: PC des unterbrochenen Programmes SP+02: Direktivestatuswort SP+00: Geraetespezifischer Parameter Der geraetespezifische Parameter beschreibt in 4 signifikanten Bits die Drehrichtung der Rollkugel. Eine Eins im jeweiligen Bit zeigt an, dass die Rollkugel in der zugeordneten Richtung bewegt worden ist: bit 1: + x bit 2: - x bit 7: + y bit 15: - y Vor dem Verlassen der AST-Routine muss der geraetespezifische Parameter vom Stack entfernt werden. Es ist zu beachten, dass die Rollkugeleinheit (RKE) und die Grafiksteuerung (GST) hardwaresei- tig miteinander gekoppelt sind.  123 Anlage 1: Direktivestatuscodes fuer E/A-Exekutive-Anweisungen ------------------------------------------------------------- mnemo- okt dez Bedeutung C-Bit nisch ---------------------------------------------------------------- IS.SUC 001 01 E/A-Paket im dynamischen Speicher erstellt 0 Die ersten 6 Parameter der Anweisung sind gueltig, und der dynamische Speicherplatz ist ausreichend fuer ein E/A-Paket. IE. UPN 377 -01 Unzureichender dynamischer Speicher 1 Der dynamische Speicherplatz reicht zur Zeit der Anweisung fuer die Erstellung eines E/A-Pakets nicht aus. IE.ULN 373 -05 LUN nicht zugewiesen 1 Der angegebenen logischen Geraetenummer ist kein physisches Geraet zugewiesen. IE.IEF 237 -97 Unzulaessige Ereignisflag-Nummer 1 Die angegebene Ereignisflag-Nummer liegt nicht im Bereich von 0...64 bzw. 96, wenn gruppen-globale Flags definiert wurden. IE.ADP 236 -98 Unzulaessige Adresse 1 Der E/A-Statusblock oder ein Teil des DPB liegen ausserhalb des Taskadressraumes oder beginnen auf ungerader Adresse. IE.ILU 240 -98 Unzulaessige LUN 1 Die angegebene logische Geraetenummer ist nicht in der LUT (siee Abschnitt 1.3.) der der Task enthalten. IE.SDP 235 -99 Die Groesse des DPB bzw. der DIC ist un- 1 gueltig Als gueltiger DIC gelten alle ungeraden Werte von 1 bis 127 (QIO$-DIC = 1, QIOW$-DIC = 3). Die Laenge des DPB ist fuer den jeweiligen DIC festgelegt. (QIO$ und QIOW$; DPB-Laenge = 12 Worte) 124 Anlage 2: E/A-Rueckkehrcodes ---------------------------- mnemo- okt dez Bedeutung nisch ----------------------------------------------------------------- IS.SUC 001 001 Erfolgreicher Abschluss einer E/A-Operation Bei einer Lese- oder Schreiboperation enthaelt das zweite Wort des E/A-Statusblocks die Anzahl der uebertragenen Bytes. IS.PND 000 000 Laufende E/A-Operation Die verlangte E/A-Operation ist noch nicht voll- staendig beendet. Der E/A-Statusblock ist noch mit Null gefuellt. IE.BAD 377 -01 Parameterfehler Mindestens einer der geraete- oder funktionsab- haengigen Parameter p1...p6 (siehe Abschnitt 1.5.2.) ist fehlerhaft. IE.IFC 376 -02 Unzulaessiger Funktionscode Der angegebene Funktionscode existiert nicht, oder ist fuer das betreffende E/A-Geraet nicht ausfuehrbar. IE.DNR 375 -03 Geraet nicht bereit Das angesprochene physische Geraet ist nicht zur Durchfuehrung der E/A bereit. Diese Meldung kann z.B. durch einen Time-Out-Interrupt kommen, wenn das Geraet nach laengerer Zeit eine Anforderung nicht beantwortet oder quittiert. IE.VER 374 -04 Nicht identifizierbarer Fehler Das System kennt die Fehlerursache fuer die Nichtbeendigung der E/A-Anforderung nicht. (individuelle Fehler, Paritaetsfehler,...) IE.SPC 372 -06 Unzulaessiger Adressraum Der bei einer E/A-Anforderung angegebene Datenpuffer liegt teilweise oder ganz ausserhalb des Task-Adressraums. Das zweite Wort des E/A- Statusblocks ist Null. IE.DNA 371 -07 Geraet nicht angeschlossen Das physische Geraet, das fuer eine IO.DET-Funk- tion angegeben wurde, ist nicht an die aussen- dende Task angeschlossen. Ein eventueller An- schluss des Geraetes an eine andere Task wird nicht beeinflusst. IE.DAA 370 -08 Geraet bereits angeschlossen Der Code zeigt an, dass das Geraet bereits an die rufende Task angeschlossen ist, ueber einen moeglichen Anschluss an eine andere Task wird nichts ausgesagt. 125 mnemo- okt dez Bedeutung nisch ----------------------------------------------------------------- IE.EOF 366 -10 Dateiendezeichen erkannt Das Eingabegeraet hat eine Dateiende-Marke, einen Dateiende-Satz oder ein entsprechendes Steuerzeichen gelesen. IE.WLK 364 -12 Geraet ist schreibgeschuetzt Die E/A-Exekutive-Anweisung verlangt Schreiben auf ein schreibgeschuetztes Geraet. IE.ABO 361 -15 E/A-Operation abgebrochen Die E/A-Operation wurde, waehrend sie in Bear- beitung war oder noch in der Warteschlange stand, abgebrochen. IE.PRI 360 -16 Schutzrechtsverletzung Die Task, die die Anforderung aussendet, ist nicht dazu berechtigt. IE.OVR 356 -18 Unzulaessige Lese-Ueberlagerung-Anforderung Das physische Geraet, auf das sich die Lese- Ueberlagerung-Anforderung bezieht, ist nicht das gleiche Geraet, von dem aus die anfordernde Task installiert wurde. IE.BYT 355 -19 Byteorientierter Puffer angegeben Der angegebene Puffer beginnt auf einer ungera- den Adresse, waehrend das Geraet einen wortori- entierten Puffer benoetigt. Verschiedene Geraete fordern auch, dass die Puffergroesse ein Viel- faches einer bestimmten Byteanzahl ist. IE.BLK 354 -20 Unzulaessige Blocknummer Bei der E/A-Exekutive-Anweisung fuer ein datei- strukturiertes Geraet wurde eine unzulaessige Blocknummer angegeben. IE.NOD 351 -23 Unzureichender dynamischer Speicherplatz Der dynamische Speicher reicht nicht aus, um fuer eine Eingabeanforderung einen zusammenhaen- genden Puffer zur Verfuegung zu stellen. IE.ALN 336 -34 Datei bereits eroeffnet Die Task versucht eine Datei auf einem physi- schen Geraet, zugeordnet durch eine angegebene LUN, zu eroeffnen, aber diese Datei ist bereits durch diese Task mit dieser LUN eroeffnet worden. IE.NLN 333 -37 Datei nicht eroeffnet Die Task versucht eine Datei auf einem physi- schen Geraet abzuschliessen, die nicht eroeffnet ist. 126 mnemo- okt dez Bedeutung nisch ----------------------------------------------------------------- IE.OFL 277 -65 Geraet ist off-line Das verlangte physische Geraet ist nicht on-line geschaltet. 127 Abkuerzungsverzeichnis ---------------------- ACNT (Account File Maintenance Wartungsprogramm fuer Nutzer- Program) verzeichnisse ACP (Ancillary Control Processor) Zusatzsteuerroutine AS Anschlusssteuereinheit AFP - fuer Festplattenspeicher AFS - fuer Folienspeichereinheit AIP - fuer paralleles Interface AIS - fuer serielles Interface AKP - fuer Kassettenplatten- speicher AMB - fuer Magnetbandspeicher APR (Address Page Register) Seitenadressregister ASCII (American Standard Code entspricht KOI7-Code for Information Interchange) AST (Asynchronous Systemtrap) Asynchroner Systemtrap AT Verarbeitungsprogramm fuer Indirekt-Kommandodateien BAD (Bad Block Locator Utility) Plattenpruefprogramm BDE Bedieneinheit BOT (Begin Of Tape) Bandanfang BRU (Backup and Restore Utility) Datensicherungsprogramm BS Betriebssystem CDA (Crash Dump Analyzer) Abbruchanalyseprogramm CIB (Controller Initialization Initialisierungsblock Block) fuer die Anschlusssteuer- einheit CLI (Command Line Interpreter) Programm zur Bearbeitung von Kommandos CMP (File Compare Utility) Dateivergleichsprogramm CSI (Command String Interpreter) Kommandozeileninterpreter DCB (Device Control Block) Geraetetypsteuerblock DCL Kommandosprache DCL DDT (Driver Dispatch Table) Tabelle der Eintrittspunkte eines Drivers DEP (Debugging Program) Testprogramm DFNB (Default File Name Block) Standarddateinamenblock DIC (Directive Identifikation Code) Anweisungsidentifikationscode DMP (Dump Utility) Dateidruckprogram DPB (Directive Parameter Block) Anweisungsparameterblock DSC (Disk Save and Compress) Dateirettungs- und Ver- dichtungsprogramm DSW (Directive Status Word) Anweisungsstatuswort E/A Ein- und Ausgabe EDI (Line Text Editor) Editor EDT (Standard Editor) " EFN (Event Flag Number) Ereignisflagnummer EOF (End of File) Dateiendekennsatz EOV (End of Volume) Datentraegerendekennsatz ERL (Error Logging) Fehlerregistrierung 128 FCB (File Control Block) Dateisteuerblock FCS (File Control Services) Dateizugriffsroutinen FDB (File Descriptor Block) Dateibeschreibungsblock FD16 Datensicherungsformat FE16 Global genormte Dateiformate (Dateiformat "established") FEX (File Exchange Utility) Dateiaustauschprogramm FIFO (First in - first out) FIFO-Speicherprinzip FL16 Dateiformat LAOS 1630 FLX (File Transfer Utility) Dateiumwandlungsprogramm FMT (Format Utility) Formatierungsprogramm fuer Magnetplatten FM16 Dateiformat MOOS 1600 und OMOS 1630 FNB (File Name Block) Dateinameblock FPEM (Floating-point Emulation Program) Gleitkommaemulator FPS Festplattenspeicher FQ16 Lokal genormte Dateiformate (Datenformat "queered") FSE Folienspeichereinheit FSR (File Storage Region) Dateispeicherbereich GCML (Get Command Line) Kommandozeilenlesen HDR (Header Label) Dateianfangskennsatz ICB (Interrupt Control Block) Interruptsteuerblock ID Identifikation IESR (Interrupt Enable/Disable Service Routine) Interrupt-Erlauberoutine IOX (I/O Exerciser) Allgemeines Geraete testprogramm ISR (Interrupt Service Routine) Interrupt-Bedienroutine ITB (Interrupt Transfer Block) Interrupt-Transfer-Block KBR Kommerzielles Basisrechner- system KMBE Kassettenmagnetbandeinheit KOI-7 entspricht ASCII-Code KPS Kassettenplattenspeicher KROS Kombinat Robotron Standard LBL Lochbandleser LBN (Logical Block Number) Logische Blocknummer LBR (Librarian Utility) Bibliothekar LC (Location Counter) Speicherplatzzaehler des Assemblers LUN (Logical Unit Number) logische Geraetenummer LUT (Logical Unit Table) Tabelle der logischen Geraetenummern LP (Line Printer) Zeilendrucker MAC Makro-Assembler MBG Magnetbandgeraet MCR (Monitor Console Routines) Kommandoprogramm MFD (Master File Directory) Hauptdateiverzeichnis MGS Mikrorechnergeraetesystem MOEX Exekutive des MOOS MOOS 1600 Modulares Operationssystem 129 NP Nutzerprogramm OCB (Offspring Control Block) Block zur Steuerung der Mutter/Tochter-Taskverbindung ODT (On-Line Debugging Tool) Testprogramm OMEX Exekutive des OMOS OMOS 1630 Optimiertes Modulares Betriebssystem PAR (Page Address Register) Seitenadressregister PAT (Object Module Patch Utility) Objektmodul-Korrekturprogramm PC (Program Counter) Befehlszaehler PCB (Partition Control Block) Partitionsteuerblock PDR (Page Description Register) Seitenbeschreibungsregister PIP (Peripheral Interchange Dateitransferprogramm Program) PRESRV (Preservation Utility) Duplizier- und Sicherungs- programm PRT (Print spooler) Print-Spooler PSW (Processor Status Word) Prozessorstatuswort RAM (Random Access Memory) Speicher mit wahlfreiem Zu- griff RDB (Region Definition Block) Region-Definitionsblock SCB (Status Control Block) Statussteuerblock SD Seriendrucker SHF (Shuffler) Speicherverdichtungsprogramm SLP (Source Line Processor) Quelltext-Korrekturprogramm SKR System der Kleinrechner SP (Stack-pointer) Stackpointer, Kellerzeiger SR (Status Register) Statusregister SRD (Sort Directory Program) Sortierprogramm fuer Verzeichnisdateien SST (Synchronous Systemtrap) Synchroner Systemtrap STD (System Task Directory) Systemtaskverzeichnis SVE Speichervermittlungseinheit TCB (Task Control Block) Tasksteuerblock TKB (Task Builder) Taskbilder TKTN (Task Termination Noti- Mitteilungsroutine fuer Task- fication Routine) beendigung UCB (Unit Control Block) Geraetesteuerblock UFD (User File Directory) Nutzerdateiverzeichnis UIC (User Identification Code) Nutzeridentifikationscode UHL (User Header Label) Nutzereigene Dateikennsaetze UTL (User Trailer Label) " UVL (User Volume Label) " VB (Virtual Block) Virtueller Block VBN (Virtual Block Number) Virtuelle Blocknummer VCB (Volume Control Block) Datentraegersteuerblock VFY (File Structure Verification Dateipruefprogramm Utility) VMR (Virtual Monitor Console Virtuelles Kommandoprogramm Routine) 130 VOL (Volume Label) Datentraegerkennsatz WDB (Window Definition Block) Fenster-Definitionsblock XDT (Executive Debugging Tool) Exekutivetesthilfe ZAP (Task Image File Patch) Dateikorrekturprogramm ZVE Zentrale Verarbeitungseinheit 131 Sachwortverzeichnis ------------------- Seite $-Form 13 $C-Form 13 $S-Form 13,15 AFP AIS AKP AMB ALTMODE-Zeichen 35,38,45 ALUN$ 13,14 ASN 13 AST 18,21 AST-Behandlungsroutine 15 ASTX$S-Anweisung 21 Abfragefunktion 54 Anfangsadresse 67,70,173 Anschlusssteuereinheit 33,66,172 Antwortpuffer 55 Anweisungsparameterblock (DPB) 12 Ausgabepuffer 55 Auslagerung 54 Bandcharakteristik Bandgeschwindigkeit Bandposition Bedien-Mikroprogramm Bediengeraet 33,45 Betriebsart 108,176,177,181,182 Bildschirmkapazitaet 82 Bildschirmterminal 82 Block, logisch 66,69,70,172 Block, physisch 67 Block, virtuell 23,66,67,69,70,172,173 Blockadresse 67 Blockgroesse 108 Blocklaenge 11 Blocknummer 25 Blockung 82 Bytezaehler 18,36 CTRL/C C-Bit 19 Charakteristikname 36,51,53 Cursor 37,39,45,84,94,100 Cursorposition 43,50,56,87,94,96 DEL 46,50,51 DIC 24 DIR$-Anweisung 15,16 DK 62 DM 65 DMA-Betrieb 176,181,182 DPB 13,15,24 DSAR$S 21 Datei 11,23,67,70,72,73 Datei-Zugriffsroutinen 11 132 Dateiendezeichen 26,91 Dateiformat 16 Dateioperation 67,70 Datenfehler 78 Datenfeld 92 Datenmarke, geloescht 67,68 Datenpuffer 67,70,160,165,169,173, 174 Datenpufferadresse 18 Datentraeger 11 Direktivestatuscode 24 Diskette 66 Doppelsteuerblock 77 Druckbreite 159 Drucker 96 Druckgeschwindigkeit 159 Druckmodus, alphanumerischen 161 Druckoperation 41,95,96 E/A, physische 11 E/A, virtuelle 11 E/A-Anforderung 11,17,19,66,68,69,73,75, 172,173 E/A-Exekutive-Anweisung 11,19 E/A-Funktionscode 19 E/A-Geraet 66,69,172 E/A-Paket 17,24 E/A-Rueckkehrcode 19,35,90 E/A-Standardfunktionen 22 E/A-Statusblock 17,25,27,35,68,72 EA-Beendigungs-AST 15 ENAR$S 21 ERROR STATE 39,41,57 ESC-Folge 34,35,36,49 Echo 34,49,51,54 Echtzeitverarbeitung 21 Eingabe, unverlangt 88 Eingabepufferung 58 Einzeltastendruck 54,59 Endezeichen 89,91,101 Ereignisflag 15,18,19 Ereignisflag-Nummer 17,24 Exekutive 19 FIFO-Prinzip 21 Fehler-Routine 19 Fehlerstatus 38,50,57 Festplattenspeicher 63 Folienspeichereinheit 66 Formatsteuerung 37 Funktionscode 47,89,113 Funktionstasten 42,59 GET-LUN-Makro 37,91 GLUN$-Anweisung 16,62,65 Generierung 63,151 Geraet, dateistrukturiert 11,23,25 Geraet, physisch 11,14 Geraetefunktion 66,69,172,176,181 Geraeteidentifikation 50 133 Geraetename, symbolisch 13 Geraetenummer, logisch 11,13,20 Geraetepuffer 37,73 Geraetestatus 34,43,50,56 Geraetetabelle, logisch 11 Geraetewarteschlange 17,19,22 Graphic-Mode 54 Grundzustand 79 HOLD-SCREEN-Mode 39 Horizontaltabulation 94 IFSS 76 IO.ATT 22 IO.DET 22 IO.KIL 22 IO.RLB 23 IO.RVB 23 IO.WLB 23 IO.WVB 23 Identifikation 34,43,56 Indirekt-Kommandodatei 32 Interface 33,82 Interface IFSS 102 Interface, seriell 111 KOI-7-Code 97,103 Kassettenmagnetbandeinheit 76 Kassettenmagnetbandgeraet 76 Kassettenplattenspeicher 60 Kommandobyte, cobyt 84,86,87 LUN 12,24,25 LUT 12 Leistungen, generierbar 88 Lesen 34,50,51 Loeschen 85,86,94,95,101 MCR-Kommando ASN 32 Magnetband 70,71,72,73,74 Magnetbandgeraet 69,72,74 Maskenwort 143 Mehrnutzersystem 88 Mikrorechnergeraetesystem 33,60,63 Modus, grafisch 159 NUL 41 Netzausfall 80,101,123,131 Netzwiederkehr 101,123,131 Nullgeraet 32 PRINT-LINE-Modus 41 Paralleldrucker 159 Parameterliste 141 Paritaetsfehler 27,38 Plattenperationen 23 Postambel 80 Praeambel 80 Prioritaet 11,17,18,20 Prioritaetsprinzip 20 134 Programmfunktionstasten 42 Programmstart 59 Pseudogeraet 12,14 Puffer 68,72,73,173 Pufferadresse 68 Puffergroesse 25 QIO$ 17,19 QIO$-Anweisung 11,38,49,56,58 QIOW$ 18 RETURN 44 Rastersichtgeraet Restart 59 Rollbereich 39,40 Rueckkehrcode 20,23,24,25,35,38,45,49, 53,57,67,68,72,89,90 Rueckkehrcode, speziell 89 SKR-Systeme 17 SMOOTH-ROLL-Modus 39 Schutzrechtsverletzung 26 Sektor 66 Sektorgroesse 60,66 Seriendrucker 159,165 Speicher, dynamischer 24 Speicherkapazitaet 66 Spur 66 Standardfunktion 20,33,47,66,69 Statusabfrage 43 Statusinformationen 43,58 Steueranweisungen 39 Steuerblock 77,80 Steuergeraet 69,72 Steuerzeichen 43,44,103,104 Subfunktionen 20 Subfunktionsbits 47 Syntaxpruefung 49 Systemoption 38,49 Systemtrap 21 Systemtraps, asynchron 21 Systemtraps, synchron 21 Tabulator 40,44 Task 38,58,66,69,74,75 Taskaktivierung 133 Taskkopf 11,12 Taskpuffer 51,139 Time-Out-Interrupt 26 Transferfunktionen 21 Uebertragung 115 Uebertragungsgeschwindigkeit 105 Usermodus 88 Verarbeitungseinheit (ZVE K 2521) 132 Vertikalformatsteuerzeichen 37,55,161,166 WRAP-AROUND-Modus 42,58 135 WTSE$ 18 Warteschlange 11 Zeilenschaltungen 44 Zylinder 66 136