★ APPLICATIONS ★ DIVERS ★ Ein Spooler für den CPC ★ |
Druckerspooler (CPC Amstrad International) | Applications Divers |
Time is Cash Es sollen eine Menge Daten auf einen Drucker ausgegeben werden, der nicht gerade der schnellste ist, aber man will schnell fertig sein, um das Programm noch weiter zu verbessern. Oder inan möchte eine Hardcopy machen und dann das Bild weiter verändern. Aber bis alles gedruckt ist, dauert es eben seine Zeit. Damit ist jetzt Schluß! Ein Spooler muß her - aber Moment mal! Der CPC-6128 hat doch 64 kByte, die meist ungenutzt bleiben. Dieses Programm benutzt die zweiten 64 kByte des CPC-6128 als Zwischenspeicher und versucht, jede Dreihundertstelsekunde ein Zeichen an den Drucker auszugeben. Das Programm ist als RSX-Befehlserweiterung aufgebaut und wird normalerweise in den Speicher ab &A000 geladen. Um eine andere Startadresse zu erreichen, muß man im Sourcecode, der auf der Databox-Diskette vorhanden ist, nur die ORG-Anweisung auf eine andere Adresse setzen. Diese muß aber außerhalb des Bereichs von &4000 bis &8000 sein, da an diese Adresse die Bänke des Speichers geklappt werden. Vor der ersten Benutzung muß das Programm mit CALL &A000 (beziehungsweise der entsprechenden anderen Adresse) aufgerufen werden. Von nun an stehen dem Programmierer folgende neue RSX-Befehle zur Verfügung: |INIT: Löscht den Zwischenspeicher, lenkt den Drucker auf den Spooler um (wird beim ersten Aufruf automatisch ausgeführt). Nach einem |INIT beziehungsweise |CONT -Befehl wird bei einem PRINT #8,“...“ oder einem ähnlichen Befehl das Zeichen nun zuerst einmal in den Spoolerbuffer geschrieben. Außerdem wird an die Adresse &B942 ein Vektor geschrieben, der nun alle 1/300 Sekunden versucht, ein Zeichen zum Drucker zu schicken. Hat das Programm es nun geschafft, dem Drucker alle Zeichen zu übergeben, so klinkt es sich aus dem Interruptvektor in &B942 wieder aus, um keine unnütze Zeit zu kosten. Ist der Zwischenspeicher einmal voll, zum Beispiel weil der Drucker zu langsam ist, so versucht das Programm ununterbrochen, ein Zeichen auf den Drucker auszugeben, bevor es aus einem PRINT # 8 zurückkehrt — es geht also kein Zeichen verloren. Dieses Programm “verbiegt“ den RAM-Vektor &BD2B (MC Print Char) und den Anfang der Interruptbearbeitung im RAM ab &B942. Bei einem EXIT-Befehl wird wieder der Urzustand hergestellt. Auch bei laufendem Druckerspooler werden die normalen Interrupts des AMSDOS bearbeitet. Der Zwischenspeicher des Spoolers ist als Ringbuffer nach dem FIFO-Prinzip aufgebaut. Die beiden benötigten Zeiger belegen die vier letzten Byte des Programms. Sie können zum Auslesen der noch zu druckenden Zeichen verwendet werden. Peer Marius Künstler/rs, CPCAI
|