★ APPLICATIONS ★ DIVERS ★ DRUCKERSPOOLER UNTER CP/M 2.2 (CPC AMSTRAD INTERNATIONAL) ★![]() |
| Druckerspooler unter CP/M 2.2 (CPC Amstrad International) | Applications Divers |
Drucker oder Schnecke? Es stimmt schon, die Überschrift ist auf den ersten Blick etwas irritierend. Aber sind Sie richtig zufrieden mit Ihrem Drucker, oder sind Sie gar einer der unglücklichen CPC-User, die über keinen Laserdrucker verfügen? Dann gehören Sie sicherlich zum Kreis derjenigen, die beim Ausdruck einer DIN-A4-Seite in NLQ-Qualität zu einer Kaffeepause gezwungen sind. Nun gut, also höchste Zeit, das Druckkonzept Ihres CP/M 2.2 Systems etwas zu tunen... Benötigt wird lediglich ein CP/M-Texteditor, ein 8080-Assembler und ein entsprechender Linker. Letztere finden Sie unter den Namen ASM.COM und LOAD.COM auf der zu Ihrem System mitgelieferten CP/M-Diskette. Auf den ebenfalls auf dieser Dikette befindlichen CP/M-Zeilen-editor namens ED.COM bitte ich Sie zugunsten eines Textverarbeitungsprogrammes â la Wordstar oder ähnlichem doch zu verzichten, es sei denn, Sie entdecken gewisse selbstquälerische Züge an sich. Die Funktionen des Programms Bevor Sie sich auf nachfolgendes Assemblerlisting stürzen, bitte ich Sie, Ihre Lieblingsdisketten in Sicherheit zu bringen, da nachfolgendes Programm intensiv von Intimbereichen Ihres CPCs Gebrauch macht, und eventuell ein Tippfehler genügt, nicht nur Ihr System, sondern auch das Diskettenlaufwerk zu ungewöhnlichsten Aktionen zu veranlassen. SPOOL ist ein Variables Drucker-Spoolprogramm. Das heißt, Zeichen, die über die BIOS Funktion 3 an den Drucker gesandt worden sind, werden in einem als Ringpuffer organisierten Bereich zwischengespcichert. Der eigentliche Druckvorgang wird dann per Interrupt alle 1/50 Sekunden ausgeführt, wobei versucht wird, bis zu 16 Zeichen zu senden, damit auch ein schneller Drucker gut versorgt bzw. ein im Drucker vorhandener Puffer möglichst optimal ausgeschöpft wird. Die Routinen, die diese Steuerung übernehmen, finden im BlOS-Stack Platz. Wohin aber mit dem Pufferbereich? Für den Pufferbereich bietet sich zunächst einmal der ohnehin unter CP/M meist nutzlose Soundpuffer an. Leider ist dieser Bereich nicht besonders groß, aber besser ein kleiner Puffer als überhaupt keiner, was nachfolgende Benchmarks noch belegen werden. Was gibt es sonst noch für Alternativen? Nun, prinzipiell ist die Startadresse des Pufferbereichs und die Länge durch die Konstanten BLENGTH und BBASE im Assemblerlisting frei wählbar. Aus “Interruptgründen” muß sich der Pufferbereich aber im zentralen RAM (Adresse 04000H - 0B000H) befinden. Leider kollidiert ein wahllos in diesen Bereich plazierter Puffer mit so ziemlich allem, was da unter CP/M Rang und Namen hat, nähmlich BDOS, BIOS, Firmware und nicht zuletzt mit diversen Anwenderprogrammen. Ohne spezielle Vorkehrungen geht hier also nichts. Eine mögliche Vorkehrung besteht beispielsweise darin, den TPA-Speicher zu verkürzen. Keine Angst, Wordstar, Turbo Pascal usw. verkraften eine Verkürzung in Maßen ohne weiteres. Verkürzen wir also den TPA-Bereich um 1K. Konstruieren Sie hierzu mit MOVCPM.COM zunächst ein 43k TPA-CP/M System mit MOVCPM 175 * ,danach sichern Sie dieses durch Eingabe von SAVE “CPM43.COM” und übertragen das neue System anschließend mit SYSGEN CPM43.COM auf die Systemspur. Nun steht 1K ab Adresse A933 für unseren Spooler zur Verfügung. Um den SPOOLER entsprechend zu konfigurieren, ändern Sie bitte die Zeilen 27 und 30 im Assemblerlisting entsprechend ab (BBASE = 0A933H. BLENGTH = 00400H). So, bevor Sie nun loslegen, noch die Ergebnisse einiger Tests, damit Ihnen das Abtippen leichter fällt. Die Zeiten wurden übrigens mit einem Schneider DMP 2000 ermittelt.
(1) SPOOL mit Soundpuffer Bernd Ott/jb, CPCAI
|