APPLICATIONSPROGRAMMATION ★ PATTERN-FILL & PATTERN-DRAW ★

Pattern-Fill / Pattern-Draw (CPC Amstrad International)Applications Programmation
★ 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 ★ 

In der CPC Ausgabe Nr.4 wurde im Rahmen der Serie „Der gläserne CPC" eine komfortable und superschnelle FILL-Routine vorgestellt. Durch den Begleitartikel und verschiedene Grafiken angeregt, stellte sich mir nun das Problem, den vorgebenen FILL-Algorythmus auf ein PATTERN FILL zu erweitern. Außerdem sollte es möglich sein, die Pattern auch durch die BASIC Grafik-Befehle erzeugen zu können, d.h., ein DRAW über den Bildschirm soll nur die Punkte der Pattern erscheinen lassen. Nach langem Überlegen kam der zündende Gedanke. (Um Schwierigkeiten zu vermeiden, bezog ich mich nur auf die Darstellung in Mode 1.)

Anstatt eine ganz neue Assembler-Routine zu schreiben, die auch die Ausgabe auf dem Schirm übernimmt, verbog ich die zindirection SCR WRITE (&BDE8). Diese Routine erwartet als Einsprungbedingung im HL-Register die Screenadresse, daß B-Register enthält die Farbmaske und das C-Register die Bitmaske. Diese Werte werden von den PLOT- und DRAW-Routinen sowie der FILL-Routine übergeben. Allerdings wurde bei FILL das B-Register anderweitig genutzt.

Bevor nun die Bildschirmausgabe erfolgt, ändere ich die Farbmaske in B den Pattern entsprechend, die anderen Werte bleiben natürlich unverändert. Danach springe ich mit Hilfe eines RST 18 zu den ursprünglichen Ausgabe-Routinen im Betriebssystem.

Die Farbmatrix

Soweit, so gut. Doch wie teile ich der Hilfsroutine das Muster mit den entsprechenden Farbmasken mit? Zuerst einmal erstelle ich eine 16 Bytes lange, der Zeichenmatrix auf dem Screen entsprechende Farbmatrix (ein Zeichen belegt auf dem Screen in Mode 1 ja 16 Bytes). In dieser stehen später die Farbmasken, die gegen die gelieferten Masken in B ausgetauscht werden. Aus der in HL übergebenen Screenadresse wird die nötige Farbmaske ermittelt. DE fungiert dabei in unserer Matrix als Pointer und wird zu Beginn auf die erste Farbmatrix gesetzt, dann erfolgt eine BIT-Abfrage.

Soweit arbeitet die Pattern-Routine, nachdem der Sprungvektor bei Adresse &BDE8 auf unsere Hilfsroutine verbogen wurde.

Erstellung der Farbmatrix

Andere Muster würden nun ein umständliches POKEn in unsere Farbmatrix erfordern. Doch auch hier soll ein kleines Assembler-Programm abhelfen. Durch Angabe des Characters, des Hintergrundes und der Schreibfarbe, soll die Matrix erstellt werden. Die Routine TXT GET MATRIX (&BBA5) übergibt uns in HL die Anfangsadresse des in A übergebenen Zeichens. Um umständliche Restarts zu vermeiden, wird ein Symbol after 32 vorausgesetzt. Liegt nun die Matrix dennoch im unteren ROM, folgt ein RETURN. Mittels SCR REPACK (&B053) wird die Zeichenmatrix dem MODE entsprechend in unsere Farbmatrix entpackt. Dazu enthält DE die Adresse unserer Farbmatrix. Anstatt der gewünschten Farbmasken stehen nun leider die Bitmasken in der Matrix. Durch einiges Bitgeschiebe ändert sich dies. Dazu wurden die Assembler-Sequenzen aus dem Begleitartikel in CPC Heft Nr.4 benutzt. Sobald alle Bytes richtig „eingefärbt" sind, wird returned.

Das Pattern FILL

Für ein Pattern FILL muß die FILL-Routine aus Heft 4 wie folgt geändert werden:

Die Zeilen 830 - 870 werden durch ein CALL &A000 ersetzt. Dadurch verringert sich die Arbeitsgeschwindigkeit des FILLs unwesentlich. Bei der Benutzung des FILLs muß nun darauf geachtet werden, daß weder die PEN-noch die PAPER-Farbe der Pattern, der Farbe der Füllfläche entsprechen, da sonst die Routine in eine Endlosschleife geraten würde.

Wird die normale Grafikausgabe gewünscht, müssen nur die alten Werte der Indirection SCR WRITE wieder eingesetzt werde, oder PEN- und PAPER-Farbe der Pattern-Routine werden auf &00 (Farbe 0) gesetzt. Wie die Routinen nun speziell gebraucht werden, ist dem Demo-Programm zu entnehmen.

CPCAI

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1986
★ CONFIG: 64K (POUR ROM BASIC 1.0 : 464 ONLY) + AMSDOS
★ LANGUAGE:
★ LICENCE: LISTING
★ AUTHOR: Peter Stein

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Pattern-Fill    (CPC  Amstrad  International)    GERMANDATE: 2013-01-11
DL: 91 fois
TYPE: ZIP
SIZE: 6Ko
NOTE: Extended DSK/40 Cyls
.HFE: NON

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

Lien(s):
» Applications » Tester
» Applications » Thunder Basic
» Applications » Code Relocator
» Applications » Amstrad Disk ROM Disabling
» Applications » Lara
» Applications » Prodatron Assembler Pack

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
Page créée en 390 millisecondes et consultée 998 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.