APPLICATIONSDIVERS ★ HI-DUMP — die neue Hardcopy-Dimension für alle CPCs|CPC Magazin) ★

HI-Dump (CPC Magazin)Applications Divers
★ 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 ★ 

Dieses Programm hat Fähigkeiten, die bisherige Hardcopy-Lösungen vor Neid erblassen lassen.

Was denn? Noch eine Hardcopy-Routine, diesmal im CPC-Magazin? Gähn. Aber Halt! Das hier vorgestellte Programm hat Fähigkeiten, die bisherige Hardcopy-Lösungen vor Neid erblassen lassen. 1. Druckt HI-DUMP (mit Papierfarbe) in 4 Graustufen. 2. Es kann ein beliebiger Bildausschnitt gewählt werden. 3. Die Hardcopy ist relativ groß (17 cm x 10,5 cm) und das Seitenverhältnis stimmt, so daß Kreise nicht mehr zu Ellipsen verformt werden. 4. Kann HIDUMP an jeder freien RAM-Adresse betrieben werden.

HI-DUMP läuft auch auf dem 664 und 6128. Mit den Druckern sieht die Verträglichkeit allerdings schlecht aus. HI-DUMP funktioniert zunächst nur mit dem NLQ 401. Für kompatible Drucker besteht eine Möglichkeit zur Anpassung der Steuerzeichen; das verwendete Konzept ist jedoch nur eingeschränkt übertragbar. Ob Aussicht auf Erfolg besteht, hängt hauptsächlich von der Größe und dem Abstand der Druckpixel ab. Und noch ein Eingeständnis: HI-DUMP ist nichts für eilige Menschen. Der Ausdruck des gesamten Bildschirms braucht 8 Minuten. Davon benötigt das Programm 40 Sekunden, den Rest hat der Drucker zu verantworten. Auch die Länge des Maschinencodes von 768 Byte erfordert einige Geduld und Sorgfalt beim Abtippen. Doch bevor das HI-DUMP-Programm weiter beschriebenwird, brauchen wir zunächst etwas Pixel-Latein.

Das Handbuch des NLQ 401 nennt für die einzelnen Druckpixel einen Horizontalabstand von 1/60”, der je nach Bitbildmodus bis zu 4-fach verdichtet werden kann, sowie einen Vertikalabstand von 1/72”. Daraus ergibt sich, daß

Pixel-Latein

ein Quadrat (also auch das angestrebte richtige Seitenverhältnis) bei 5 Pixel waagrecht und 6 Pixel senkrecht entsteht. Im einfachsten Falle müßte man also bloß jede fünfte Zeile doppelt drucken. Aber da gibt es eine weitere Schwierigkeit. Im einfachen Bitbildmodus passen nur 480 Punkte in eine Zeile. Der CPC hat aber 640 Bildpunkte, also brauchen wir den doppelten oder vierfachen Bitbildmodus. Zusätzlich soll ein Bildschirmpixel ja in mehreren Graustufen gedruckt werden können, das heißt, er muß aus mehreren (in diesem Fall 0 bis 3) Druckpixeln zusammengesetzt werden.

Eine Lösung dieses Problems ergibt sich nun dadurch, daß zwei übereinanderliegende Bildschirmpixelreihen sich eine dritte Druckpixelzeile miteinander teilen. Ein MODE 1 -Bildschirmpixel (zwei in MODE 2) wird waagerecht auf 5 Druckpixel im vierfachen Bitbildmodus verteilt, davon werden je nach Graustufe 0,1,2 oder alle 5 "gesetzt”. Eine Anschauung davon vermittelt die Abbildung. Mit dieser Methode entstehen übrigens auch keine Probleme durch das fehlende achte Bit des CPC-Druckerausgangs-aus naheliegenden Gründen werden jeweils 6 (2 mal 3) Bit übertragen.

Für HI-DUMP wurde nicht die beliebte RSX-Form gewählt. Für eine RSX-Befehlserweiterung sind feste RAM-Adressen erforderlich, so daß es zu Konflikten mit anderen Programmen kommen kann. Da HI-DUMP sonst mit relativen Sprüngen und Adressen auskommt, wurde daher die CALL-Form genommen. Die Routine ist dadurch an jeder freien Stelle des RAM arbeitsfähig. Auch die sonst für eine RSX notwendige Initialisierung entfällt. Wenn eine Variable mit der Arbeitsadresse definiert wird, ist es möglich, mit CALL hidump,... die Routine indirekt mit einem Befehlsnamen aufzurufen. In diesem Fall wird aber jeder Eingabefehler als CALL 0 (RESET) quittiert, was man am einfachsten mit POKE 0,&C9 verhindert.

So ganz ohne feste RAM-Adressen kommt aber auch HIDUMP nicht aus. Es werden sogar insgesamt 64 Byte für Tabellen, Variablenpuffer und eine Hilfsroutine zur Druckerausgabe verwendet. Dafür wurde jedoch ein "sicherer” Platz gefunden. Der Bereich &BE00 bis &BE3F liegt zwischen der Firmwaresprungtabelle und einem festen Bereich, der von der Floppy benutzt wird. Es handelt sich um einen Teil des Systemstack, der in diesem Umfang jedoch nicht ausgenutzt wird, und deshalb auch für andere Zwecke verwendet werden kann. Probleme könnte es höchstens dann geben, wenn andere Programme (z.B. weitere Peripheriegeräte) versuchen, denselben Bereich zu benutzen. HI-DUMP sorgt in diesem Falle bereits für sich selbst und gestaltet diesen RAM-Bereich in jedem Fall neu. Die Frage ist nur, ob das andere Programm (falls es je existieren sollte) dort Daten abgelegt hat, die noch benötigt werden. In diesem Fall müßte man die Daten vorher retten und nach der HI-DUMP Ausführung an die alte Stelle zurückbringen.

Falls jedoch eine Situation eintritt, wo es trotzdem Schwierigkeiten gibt, besteht noch die Möglichkeit, den festen Bereich von HI-DUMP zu verlagern. Dazu muß lediglich im Basiclader die Zeile IF a$=”BE” THEN a$=”neu” hinzugefügt werden. Dabei kann ”neu” im einfachsten Fall ”BF” sein, womit ein anderer Teil des Stack benutzt wird, oder auch ein geeignetes anderes höherwertiges Adress-byte.

Das Hauptprogramm

Ein Drittel von HI-DUMP dient der Übernahme der Eingabeparameter (DATA-Zeilen 100 bis 150). Da sind zunächst mal 4 Werte mit den Bezeichnungen links, rechts, oben und unten. Damit wird natürlich der gewünschte Bildausschnitt festgelegt. Diese Werte werden den Firmwareroutinen für das Setzen des Grafikwindows unterworfen, so daß gültige Werte entstehen, die an Bildschirm- und Bytegrenzen ausgerichtet sind. Die Eingabe entspricht genau dem Basic-ORIGIN-Befehl für das Grafikfenster. Wenn keine Werte eingegeben werden, wird automatisch das bestehende Grafikfenster genommen. Auch die Werte da, db, de können weggelassen werden, dann erfolgt der Ausdruck so, daß INK 0 und 1 in weiß und schwarz sowie INK 2 und 3 in Graustufen wiedergegeben werden. Aus da, db und de werden 16 Byte abgeleitet (eins für jede INK) und im Bereich &BE00 bis &BE0F abgelegt. Von &BE10 bis &BE1F stehen dann die benötigten Werte für linken, rechten, oberen und unteren Rand und die Laufvariablen. Ab &BE20 bis &BE27 steht eine Tabelle mit Bitmasken für alle Pixel eines Byte (nur an dieser Stelle spielt der bestehende MODE eine Rolle). An die Adresse &BE2D wird die zum Firmware-Jump vervollständigte Indirection SCR READ kopiert und von &BE30 bis &BE3F noch eine Druckroutine geschrieben, die neben der Übertragung zum Drucker auch die Abfrage auf ESCAPE übernimmt.

Nach soviel Vorarbeit kann nun endlich die Druckausgabe beginnen. HI-DUMP hat zwei Hauptschleifen, in denen die Bildschirmkoordinaten von links nach rechts und von oben nach unten durchlaufen werden. Der Firmwareeinsprung GRA TEST, der direkt diese Koordinaten verwenden kann, ist verhältnismäßig langsam, deshalb wurde schließlich SCR READ gewählt. SCR READ braucht allerdings die fertige Bildschirmadresse und eine Bitmaske (die haben wir schon durch den Startteil von HI-DUMP). Die Berechnung der Bildschirmadresse ist kompliziert, deshalb wird für jede Druckzeile ein Anfangswert der Bildschirm adresse mit GRATEST ermittelt. Die Variation dieses Wertes in der Zeile geschieht dann zum Teil mit eigenen Routinen, zum anderen Teil mit dem Firmwareeinsprung SCR NEJG" BYTE. Dèr Rest ist Fleißarbeit: Jeden Bildschirmpixel testen, die Ausgabemaske für die Vorgefundene INK untersuchen und gegebenenfalls die Bits für die a-, b-, und c-Felder der Druckerausgabe setzen. Dabei werden zwei Nebenschleifen durchlaufen. Zum einen wird ein Bildschirmbyte in 4 2-Bit-Teile zerlegt, zum anderen werden diese 2 Bit in der innersten Schleife nacheinander (jeweils mit 3 darunterliegenden "Kollegen") abgearbeitet.

Der Programmaufbau ist im übrigen etwas verschachtelt. Da der Z-80 nur relative Sprünge über maximal 128 Byte zuläßt, absolute Sprünge aber vermieden werden sollten, mußten Programmteile nicht nach Logik, sondern nach Länge angeordnet werden. Die Funktion ist zum Glück unabhängig davon.
Ein weiteres Problem muß erwähnt werden. Bei der Einschaltung des Bitbildmodus muß dem Drucker ja mitgeteilt werden, wieviele Bitbilder noch folgen werden. Wenn bei dem binären Zahlenwert nun das achte Bit gesetzt ist, kann der Wert nicht korrekt übertragen werden. HI-DUMP vermeidet das, indem es eine Zeile in so kleinen Blöcken überträgt, daß der kritische Wert nicht überschritten wird. Das sind jeweils 6 Bildschirmbyte oder 48 Bildschirmpixel und (Faktor 2,5) 120 Druckpixel. Insgesamt wird ein 640 x 200 Bild auf 1600 x 300 Druckpixel übertragen.

Was passiert, wenn keine Druckmasken angegeben werden, wurde schon gesagt. Was kann man nun damit anfangen? RSX- und CALLparameter (also auch da,'db, de) sind Integerwerte, haben also in binärer Darstellung 16 Bit. Nun steht einfach jedes Bit der Reihe nach für eine INK. Das niedrigste Bit für INK 0 usw. da steht für das a-Feid, db für das b-Feld und de für das c-Feid. Es ist damit also möglich, für jede INK einzeln anzugeben, welche Felder bei der Druckausgabe gesetzt werden sollen. Es müssen nur die entsprechenden Bits in da, db, de gesetzt werden. Am besten ist es, diese Werte binär (mit &X) einzugeben, dann können die Bits gënau abgezählt werden.

Eine Besonderheit besteht in MODE 2. a- und b-Feld entsprechen dabei bereits zwei Bildschirmpixeln. Damit nicht die Hälfte der Auflösung verlorengeht, müssen a- und b-Feld beide gesetzt sein.

So wird's gemacht:

Memory hidump-1 LOAD "HIDUMP.BIN”, hidump Dabei kann hidump eine beliebige freie RAM-Adresse sein. Eine Initialisierung von HIDUMP ist nicht erforderlich. Für die Druckerausgabe muß dann einfach einer der 4 möglichen CALLs eingegeben werden.

CALL hidump

CALL hidump, links, rechts, oben, unten CALL hidump, da, db, de

CALL hidump, links, rechts, oben, unten, da, db, de Für die nicht angegebenen Parameter werden Standardwerte genommen (siehe Text).

1a1c1b1c1c2a2c2b2c2c
1a
3a
1c
3c

1b
3b

1c
3c
1c
3c
2a
4a
2c
4c
2b
4b
2c
4c
2c
4c
3a3c3b3c3c4a4c4b4c4c
Je nach INK eines Bildpunktes werden abhängig von den eingegebenen
Druckmasken die dazugehörigen a-, b- oder c-Felder bedruckt.

Zusatzfunktion:

POKE hidump + &145,0 Druck ab erstem Tabulatorstop POKE hidump + &145,6 Druck ab linkem Papierrand. Weitere Hinweise:

Gegebenenfalls LIST#8 abschalten. Bei der vortex-RAM-Erweiterung nicht SPOOL.ON verwenden. Vor und nach jedem Drucken (insbesondere nach ESCAPE) den Drucker aus- und wieder einschalten, um definierte Anfangsbedingungen zu schaffen.

Steuerzeichen

Die verwendeten Druckersteuerzeichen werden in den DATA-Zeilen 165,185 und 195 übertragen. Die Hex-Folge dazu ist 6, wert, CD, 30, BE, DO. Das DO bewirkt den Abbruch nach ESC; es muß nur gelegentlich angefügt werden. wert ist das jeweilige Steuerzeichen. Mit diesen Informationen kann man aus Zeile 165 ablesen: 9 (Vorschub zum Tabulatorstop); Zeile 185:1B, 4A, 12, D (n/216” Zeilenvorschub und Wagenrücklauf); Zeile 195:1B, 5A,... (Bitbildmodus vierfacher Dichte mit Bitanzahl n1, n2, die vom Programm berechnet und gesetzt wird).

Für Anpassungen ist Zeile 185 von besonderem Interesse. Es kann nötig sein, einen anderen Zeilenvorschubbefehl zu verwenden. Dabei ist zu bedenken, daß die 12 dem Dezimalwert 18 entspricht. Für n/72” müßte man also 6 einsetzen.

INK0INK1INK2INK3INK4INK5INK6INK7
MODE 2
CALL hidump ,2,2,2g0g3
CALL hidump ,1,1,1g3g0
MODE 1
CALL hidump ,14,12,8g0g1g2g3
CALL hidump ,7,3,1g3g2g1g0
Standard
CALL hidumpg0g3g2g1
MODE 0
CALL hidump, &EEEE, &CCCC, &B888
g0g1g2g3g0g1g2g3...
g0,g1,g2 und g3 sind die erzielten Graustufen.

Bei einem doppelten Zeilenvorschub mag es helfen, die 5 Byte für den Wagenrücklaufbefehl durch 0 zu ersetzen, sonst muß ein anderer Zeilenvorschubbefehl gewählt werden. Wenn ein solcher Befehl verwendet wird, der den Zeilenabstand voreinstellt, kann er in den freigehaltenen Platz (die vielen Nullen) in Zeile 165 eingefügt werden. Es ist übrigens nicht möglich, diese Nullen oder nicht benötigte Steuerzeichen (beim NLQ 401 ist der Wagenrücklaufbefehl überflüssig) einfach wegzulassen, da zusätzlich noch Sprungbefehle angepaßt werden müßten.

Gerhard Knapienski , CPC Magazin

★ PUBLISHER: CPC Magazin
★ YEARE: 1985 , 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC MAGAZIN 1985 1986
★ AUTHOR: Gerhard Knapienski
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» Hi-Dump    (CPC  Magazin)    GERMANDATE: 2020-05-18
DL: 215
TYPE: ZIP
SiZE: 4Ko
NOTE: 40 Cyls
.HFE: Χ

» Hi-Dump    (CPC  Magazin)    LISTING    GERMANDATE: 2020-05-27
DL: 202
TYPE: PDF
SiZE: 262Ko
NOTE: 2 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Cambio de Variables (Amstrad User)
» Applications » Irom ROM
» Applications » The Firmware Guide's (W.A.C.C.I)
» Applications » Coding - Edit - Z80 (CPC Amstrad International)
» Applications » Width (Happy Computer)
» Applications » Strukto (CPC Magazin)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 330 millisecondes et consultée 1146 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.