Aufgabe 1: Ein-/Ausgabe
Als ich vor etwas über 20 Jahre, bevor Netzwerk im Heimbereich Einzug hielt, Multiplayerspiele wie Doom über Rechner hinweg spielen wollte, griff ich auf ein sogenanntes Nullmodemkabel zurück. Heutzutage jedoch sind diese seriellen Anschlüsse eigentlich nur noch für die Serveradministration relevant. Hier ist ein entsprechender 9-poliger D-Sub Stecker abgebildet, um genau zu sein, handelt es sich hier jedoch nur um eine Verlängerung. Dieser Stecker wird bei PCs für serielle Schnittstelle nach den Standard RS232 eingesetzt, entsprechend sind hier extra Leitungen für Sendeanforderung, Sendeerlaubnis und Empfangsstatus. Wirklich wichtig sind allerdings nur drei: einmal elektrisch bedingt die gemeinsame Signalmasse, sowie die ausgehende und eingehende Datenleitung.
Misst man nun die Datenleitung, kann sich über die Zeit folgendes Bild ergeben, diverse Pegeländerungen zwischen -15 bis +15 Volt. Um die einzelnen Pegel nun interpretieren zu können, wandeln wir es in ein diskretes Signal um, indem wir es in vorher definierte Zeitfenster einteilen. Nun ordnen wir den Pegel eines jeden Zeitfensters einen Wert zu, die Spannung liegt beim niedrigen Pegel zwischen -15 und -3 Volt, was als 1 interpretiert wird. Ein hoher Pegel, zwischen +3 bis +15 Volt wird zu einer 0. Dabei sind die invertierte Interpretation der Pegel als auch die höhere Spannung die wichtigen Unterschiede zu TTL Serial, welcher beispielsweise von *Arduino*s bekannt ist. Diese Wertefolgen entsprechen nun einem bestimmten Übertragungsformat, der erste Wechsel von 1 auf 0 kennzeichnet den Start der Übermittlung, gefolgt von den Datenbits, und gegebenenfalls ein Prüfbit, bevor das Stopbit wieder auf den Ruhepegel zieht.
Die Anzahl der Datenbits und ob bzw. welches Paritätsbit – gerade oder ungerade – verwendet wird, muss vorher ebenso wie die Übertragungsgeschwindigkeit von beiden Kommunikationspartnern gleich festgelegt werden. Die Übertragungsrate muss dabei ein ganzzahliger Teiler von 115200 sein und entspricht den Symbolen die pro Sekunde übertragen werden können. Wenn wir keine großen Datenmengen übertragen wollen, reicht eine niedrige Baudrate, welche dafür unter Umständen stabiler läuft. Heutige PCs besitzen meist nur noch eine einzige solche Hardwareschnittstelle – wenn überhaupt, früher, als diese noch wichtiger war, waren es bis zu vier.
Die Programmierung erfolgt über je 8 I/O Ports pro Anschluss, womit jeweils 12 Register angesprochen werden können. Die Dekodierung der Signale gemäß dem Übertragungsformat wird zum Glück von der Hardware übernommen, wir müssen uns dabei nur um Empfang und Versand der Daten kümmern. Eine detaillierte Beschreibung über die Programmierung der seriellen Schnittstellen findet ihr neben den Datenblättern auch in den Wikis von osdev.org sowie lowlevel.eu, welche auch insgesamt gute Adressen für die Betriebssystementwicklung sind.
Wer nun diese Schnittstelle ordentlich in StuBS implementiert, kann sich dann in die ISER, der Informatik-Sammlung Erlangen beim Rechenzentrum schleichen und dieses 1978 von DEC veröffentlichte Gerät anschließen. Ein VT100 Terminal, welches über die RS232 Schnittstelle Ein- und Ausgaben erlaubt. Bekannt ist sie aber vor allem durch die von ihr unterstützten sogenannten ANSI-Escape-Sequenzen, Steueranweisungen welche beispielsweise Farben und Cursorpositionen ändern können. Und die auch von dem heutigen Terminal Emulatoren, wie ihr sie auf eurem PC nutzt, größtenteils unterstützt werden.
Diese Steueranweisungen beginnen alle mit dem Escape Zeichen, beispielsweise gefolgt von einer geöffneten eckigen Klammer, einem Attributwert, wie 1
für fett, sowie einem m
, um den nachfolgenden Text entsprechenden in einer dickeren Schrift darzustellen. Für eine bunte Ausgabe kann sowohl für Vorder- als auch Hintergrund aus einer Palette von 8 Farben gewählt werden. Weiterhin kann noch die Cursorposition festgelegt werden. Oder sogar eine Auskunft eingeholt werden: Wird mittels 6n
eine Anfrage gestellt, antwortet das Terminal mit einem Escapecode der die Position beinhaltet. Daneben gibt es noch viele weitere Codes, welche jedoch unterschiedlich gut unterstützt werden. Einen wichtigen Befehl will ich euch jedoch nicht vorenthalten: Für den Fall, dass ihr euch das Terminal verkonfiguriert habt, könnt ihr mit dem Escapezeichen gefolgt von einem c
die Standardeinstellungen wiederherstellen.
Ihr könnt das übrigens einfach in eurer Kommandozeile testen, echo
braucht dazu in Bash nur den Parameter -e
damit die Escapezeichen interpretiert werden.