APPLICATIONSUTILITAIRES RSX/LIGNE DE COMMANDE ★ Ohne Wartezeiten : Spooler ★

Spooler|CPC Amstrad International)Applications Utilitaires Rsx/ligne De Commande
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Spooler sind eine nützliche Einrichtung für alle, die viel drucken und dabei nicht immer auf den langsamen Drucker warten wollen. Neben der Möglichkeit einer Hardware-Lösung (externer Pufferspeicher zwischen Computer und Drucker) gibt es auch noch die Soft-ware-Lösung, das heißt die Emulierung eines Spoolers im vorhandenen RAM-Speicher: der Spooler zum 'Nulltarif'.

Manche werden jetzt sagen, das sei nichts Neues, und sie haben tatsächlich schon mehrere Spooler-Versionen in ihrer Programmsammiung. Aber viele Lösungen, die bisher erschienen sind, waren allzu starr aufgebaut, und die meisten hatten einen entscheidenden Nachteil: Sie belegten Speicherplatz im Hauptspeicher.

16-kByte-Drucker-Spooler für 4 Byte Hauptspeicher

Das hier vorzustellende,Programm entstand aus dem Wunsch heraus, die Text Verarbeitung TASWORD auf einem CPC 464 mit einem Spooler zu ergänzen. Da TASWORD neben dem Programm-Code ohnehin nur wenig mehr als 10 kByte

für den eigentlichen Text übrig läßt, kam es gar nicht in Frage, den Drucker-Puffer im Hauptspeicher zu organisieren. Die vorhandene SILICON DISC von dk'tronics sollte den Speicherplatz abzwacken. Zusätzlich wurde das Treiberprogramm, das im Hintergrund läuft, in den oberen Teil des Sound-Puffers gelegt, weil man normalerweise während der Textverarbeitung keine exzessiven SOUND-Kommandos gibt. Bleiben lediglich 4 Bytes, die für die Verwaltung des RSX-Befehls SPOOLER im Hauptspeicher belegt werden.

So geht's

Wer über die SILICON DISC verfügt, kann das Assembler-Listing (in der vorliegenden Form für den DEVPAC GENA-Assembler) einfach abtippen und assemblieren. Anpassungsvorschläge für andere Konfigurationen folgen weiter unten.

Der Object-Code muß unter dem Namen 'SPOOLER.BIN' gesichert werden. Dann das SPOOLER-LADEPROGRAMM abtippen und als 'SPOOLER.BAS' sichern. Danach kann das Programm gestartet werden. Das Initialisierungsprogramm löscht sich selbst: Ein weiterer Start würde bis zum System-'Absturz' führen. Werden die entsprechenden Befehle in eigene Programme eingefügt, muß sichergestellt werden, daß sie bei einem Neustart des Programms nicht nochmal aufgerufen werden.

Das Treiberprogramm belegt jetzt die obere Hälfte des Sound-Puffers (Also mit Sound-Kommandos sparsam umgehen, es darf aber getrost mal 'gepiepst' werden). Der eigentliche Drucker-Puffer belegt jetzt die oberste 16-kByte-Bank der SILICON DISC. Das bedeutet, Sie müssen darauf achten, daß immer mindestens 16 kByte freibleiben, da es sonst zu Überschneidungen und somit zu Datenverlust kommt. Aufgrund der 254-kByte-Kapazität der SILICON DISC hat sich dies in der Praxis als unproblematisch erwiesen, so daß hier auf einen Schutzmechanismus verzichtet wurde. Während der Spooler aktiv ist, sollte nicht mit der SILICON DISC gearbeitet werden, weil diese die Interrupts offensichtlich nicht sperrt. Die physikalische Floppy kann aber bedenkenlos in Gang gesetzt werden.

Der Spooler kann mit der Tastenkombination CTRL+ESC ausgeschaltet werden. Eine entsprechende Meldung erscheint auf dem Schirm. Die Wirkung tritt sofort ein. Sofern der Drucker nicht selbst über einen Zwischenspeicher von mehr als einer Zeile verfügt, hört er sofort nach Beendigung der Zeile auf zu drucken. Der Spooler ist jetzt 'leer'. Dies ist nicht nur die Notbremse. Auch bei zeitkritischen Anwendungen kann es sinnvoll sein, wenn nichts gedruckt werden soll, den Spooler abzuschalten, weil das Treiberprogramm im FAST-TICKER-Interrupt (300 mal/sec.) läuft und damit doch spürbar Zeit beansprucht. Der Spooler kann jederzeit wieder eingeschaltet werden mit dem RSX-Befehl SPOOLER. Dabei berücksichtigt das Programm, ob der Spooler noch arbeitet.

Und so funktioniert's

Jedes Zeichen, das jetzt zur Centronics-Schnittstelle des Rechners geschickt werden soll, wird über den 'verbogenen' Vektor IND MC WAIT PRINTER an das Treiberprogramm übergeben. Dieses blendet nun an Stelle der RAM-Bank 1 die SILICON-DISC-Bank 15 ein. Das heißt, an den Adressen &4000 bis &7FFF liegt jetzt nicht der Hauptspeicher, sondern die obersten 16 kByte der SILICON DISC. Dieser Speicher wird nun mit dem zu druckenden Zeichen geladen. Dann wird das original RAM zurückgeblendet. Für das nächste Zeichen wiederholt sich dieser Vorgang komplett, weil vor jedem Zeichen 'nachgesehen' werden muß, ob noch Platz ist. Wenn Sie also mehr als 16 kByte drucken wollen, müssen Sie einen Teil ausdrucken lassen, bevor Ihr Computer wieder 'frei' wird. Der Drucker-Puffer wird als Ringspeicher behandelt, das heißt, er muß nicht vollständig geleert werden, bevor er neu gefüllt werden kann. Geleert wird der Puffer praktisch genauso. Nur daß die Routine, die dies erledigt in die Schnell-Takt-Liste eingetragen wurde. Das Programm läuft daher im Hintergrund und versucht, 300mal in der Sekunde ein Zeichen an den Drucker 'loszuwerden'. Das gelingt natürlich nur, wenn der Drucker kein BUSY-Signal sendet.

Aus der Beschreibung des Verfahrens sollte klarwerden, daß sich der Spooler nur mit 'sauber' programmierten Anwenderprogrammen vertragen kann, das heißt, es müssen für den Druck auch tatsächlich die Betriebssystem-Vektoren benutzt werden. Sonst gehen die Druckaufträge am Spooler vorbei.

Anpassung an andere Konfigurationen

Modifikationen lassen sich am besten im Assembler-Listing vornehmen. Eine Verschiebung des Adreßraums, der für den
Puffer-Speicher benutzt wird, kann durch eine Anpassung der EQU-Werte für 'UNTERG' und 'OBERG' (Zeilen 10 & 11) auf die entprechenden Werte für unterste Adresse bzw. oberste Adresse +1 erreicht werden. Das Treiberprogramm wird durch die Änderung der ORG-Anweisung verschoben. Dabei muß aber unbedingt darauf geachtet werden, daß der Programm-Code nicht parallel zu den ROMs oder in der RAM-Bank, die umgeblendet wird, liegt. Beim 664 & 6128 würde ich es mit der ORG-Anwei-sung #B39B versuchen.

Beide genannten Verschiebungen sind nur über das Assem-bler-Listing sinnvoll, weil sonst zu viele Adressen angepaßt werden müßten. Liegt eine andere Speichererweiterung vor, z.B. die zweiten 64 kByte im CPC 6128, die natürlich nicht gleichzeitig von einem Anwenderprogramm benutzt werden dürfen, so müssen Sie zuerst feststellen, mit welchen OUT-Befehlen die zusätzlichen Bänke eingeblendet werden können. Für den CPC 6128 war eine solche Tabelle in der PC International 11/87 (S.39) abgedruckt. Wollen Sie z.B. die Bank 7 des CPC 6128 anstelle der Bank 1 einblenden, also im Adreßraum &4000 - &7FFF, so erreichen Sie das mit dem Befehl: OUT &7F00, &C7

Dabei ist &7F00 die Portadresse und &C0 der zu übergebende Wert. Wollen Sie das nun auf das Assemblerlisting übertragen, so müssen Sie in den Zeilen 67 und 109 die Befehle

LD BC, #7FFF

durch

LD BC, #7FC7

ersetzen. Dadurch wird das B-Register mit dem High-Byte der Portadresse geladen und das C-Register mit dem zu übergebenden Wert. Der folgende Befehl

OUT (C),C

müßte eigentlich OUT (B),C heißen, um seine Wirkung richtig zu beschreiben. Denn aufgrund der unvollständigen Adressierung der I/O-Adressen im CPC ist das B-Register entscheidend und das C-Register unmaßgeblich. Das Zurückblenden der Original-Bank muß nicht geändert werden. Es sei denn, Sie haben Ihre eigenen Konfigurationswünsche.

Liegt bereits der Object-Code vor, so kann an die zum Programmanfang relativen Adressen &6E sowie &B1 der Wert &C7 eingetragen werden, und schon wird die entsprechende Bank benutzt. Voraussetzung ist natürlich, daß das Programm in seiner Länge nicht verändert wurde.

Spooler ohne Speichererweiterung

Wollen Sie den Spooler ohne Speichererweiterung benutzen, so suchen Sie sich einen geeigneten RAM-Bereich und tragen wie oben beschrieben die entprechenden Werte für UNTERG und OBERG ein. Dann löschen Sie im Assemblerlisting alle Befehle, die eine Bankumschaltung vornehmen, also die Zeilen 66 bis 68, 70 bis 72, 109 bis 110 und 112 bis 113.

Hinweis

Die im Assemblerlisting verwendeten Zeilennummern sind nur als Eingabehilfe gedacht, bitte nicht mit abtippen.

CD, CPCAI

★ PUBLISHER: CPC AMSTRAD INTERNATIONAL
★ YEAR: 1989
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LICENCE: LISTING
★ AUTOR: Bernd Noe

★ AMSTRAD CPC ★ DOWNLOAD ★

File:
» RSX-SPOOLER    GERMANDATE: 2013-09-03
DL: 48 fois
TYPE: ZIP
SIZE: 21Ko
NOTE: 40 Cyls
.HFE: OUI

Je participe au site:
» Newfile(s) upload/Envoye de fichier(s)
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Traceur de Camembert (CPC Revue)
» Applications » Minifile (Computing With the Amstrad)
» Applications » Multiformateur pour tous Lecteurs
» Applications » Amstrad Moniteur (Amstrad Magazine)
» Applications » Graph Plotter
» Applications » Env - Composer

QUE DIT LA LOI FRANÇAISE:

L'alinéa 8 de l'article L122-5 du Code de la propriété intellectuelle explique que « Lorsque l'œuvre a été divulguée, l'auteur ne peut interdire la reproduction d'une œuvre et sa représentation effectuées à des fins de conservation ou destinées à préserver les conditions de sa consultation à des fins de recherche ou détudes privées par des particuliers, dans les locaux de l'établissement et sur des terminaux dédiés par des bibliothèques accessibles au public, par des musées ou par des services d'archives, sous réserve que ceux-ci ne recherchent aucun avantage économique ou commercial ». Pas de problème donc pour nous!

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 779 millisecondes et consultée 771 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.