Tips & Tricks

Bildschirm-Effekte leicht-gemacht

Mit dieser BasioErweiterung können Sie in beliebigen Bildschirmausschnitten Spezialeffekte wie Blinken, Invertieren oder Auffüllen mit beliebigen Zeichen einfach erzeugen.

Diese kleine Maschinensprache-Routine (»Screen«) kann in nahezu allen Programmen Verwendung finden, um zum Beispiel fehlerhafte Eingaben durch Blinken zu markieren oder um Eingabefelder zu löschen. Auch für die Gestaltung von Titelbildern bietet sich »Screen« an. Folgende Routinen sind vorhanden:
(0) Invertieren des gewählten Bereichs
(1) Reversdarstellung eines Bildschirm-Bereichs
(2) Normaldarstellung (Gegenstück zu (1))
(3) Auffüllen eines Bereichs mit beliebigen Zeichen

Das Programm (Listing 1 und 2) kann auf zwei verschiedene Arten aufgerufen werden. Entweder starten Sie es mit »SYS (Anfangsadresse+36)« oder Sie benutzen statt dessen das Ausrufezeichen »!«. Der erste Weg bietet sich an, wenn schon eine andere Befehlserweiterung das »I« benutzt. Die korrekte Syntax des »!«-Befehls entnehmen Sie bitte Tabelle 1.

Initialisieren: SYS SA
Syntax:
!(VZ,BZ,VS,BS),F,C
VZ = Von Zeile
BZ = Bis Zeile
VS = Von Spalte
BS = Bis Spalte
F = Funktion (0–3)
0 = Invers
1 = Revers
2 = Normal
3 = Füllen
C = Füllcode (= Bildschirmcode)
Tabelle 1. Die Syntax des neuen »!«-Befehls.

Das Programm ist frei im Speicher verschiebbar; die beiden notwendigen Vektoren für die Befehlserweiterung werden in Zeile 195-200 automatisch angepaßt. Möchte man lieber mit dem SYS-Befehl arbeiten, dann können die Zeilen 165-225 ersatzlos entfallen, in diesem Fall findet das Programm auch im Kassettenpuffer Platz. Tabelle 2 zeigt die Belegung der Zero-Page durch das Programm.

87 BL Bildschirmadresse LowByte
88 BH Bildschirmadresse HighByte
89 ABZE ab Zeile
90 BISZE bis Zeile
91 ABSP ab Spalte
92 BISSP bis Spalte
93 TEST enthält #128
251 ANZSP Anzahl Spalten
252 ANZZE Anzahl Zeilen
253 FKT Funktionscode
254 CODE Füllcode
Tabelle 2. Die verwendeten Speicherstellen in der Zero-Page

Zu bemerken ist noch, daß das Programm aus Platzgründen nicht auf ungültige Zeichen oder Spaltenwerte testet. In Ihren Programmen müssen Sie daher darauf achten, daß der Bildschirmbereich eingehalten wird, da sich sonst Probleme ergeben können. Das Demonstrationsprogramm in Listing 2 sieht zwar unscheinbar aus, erzeugt aber überraschende Effekte.

(Stefan Wagner/ev)
100 rem********************************
105 rem**                            **
110 rem** prg: !screen  2.0 'datas'  **
115 rem**                            **
120 rem** (c)  27.06.85              **
125 rem**                            **
130 rem**      stefan wagner         **
135 rem**      hoehenstr.102         **
140 rem**  5090leverkusen  3         **
145 rem**                            **
150 rem********************************
155 sa= 49152
160 :
165 hb=int((sa+11)/256):rem vektor high
170 lb=(sa+11)-hb*256:rem vektor low
175 :
180 rem*** verbiegen des vektors ******
185 rem*** + neue chrget routine ******
190 :
195 poke sa  ,162:poke sa+1,lb
200 poke sa+2,160:poke sa+3,hb
205 fori=sa+4tosa+35:readx:pokei,x:next
210 data  142,  8,  3,140,  9,  3, 96
215 rem---
220 data 32,115,  0,201, 33,240,  6
225 data 32,121,  0, 76,231,167, 32,115,  0, 32, 36,192, 32,121,  0, 76,231,167
230 :
235 rem*** eigentliches programm ******
240 :
245 s=0:for i=sa+36 to sa+217
250 readx:pokei,x:s=s+x
255 next
260 if s<>23004 thenprint"** data fehler **":stop
265 data216, 32,250,174, 32,158,183,134, 89, 32,241,183,134, 90, 32,241,183,134
270 data 91, 32,241,183,134, 92, 32,247,174, 32,241,183,134,253, 32,241,183,134
275 data254,165, 90, 56,229, 89, 24,105,  1,133,252,165, 92, 24,105,  1,133, 92
280 data 56,229, 91,133,251,169,128,133, 93,173,136,  2,133, 88,162,  0,134, 87
285 data166, 89,240, 16,165, 87, 24,105, 40,133, 87,165, 88,105,  0,133, 88,202
290 data208,240,173, 17,208, 42,144,250,169, 11,141, 17,208,184,166,253,164, 91
295 data177, 87, 80, 26,145, 87,200,196, 92,208,245,165, 87, 24,105, 40,133, 87
300 data165, 88,105,  0,133, 88,198,252,208,226, 80, 38,177, 87,224,  0,240, 14
305 data224,  1,240, 20,224,  2,240, 20,224,  3,240,  8,208, 18, 36, 93,240,  6
310 data208,  8,165,254, 80,200,  9,128, 80,196, 41,127, 80,192,169, 27,141, 17
315 data208, 96
320 :
325 rem********************************
330 rem**                            **
335 rem**  initialisiern: sys sa     **
340 rem**                            **
345 rem**                            **
350 rem**  syntax:                   **
355 rem**                            **
360 rem**  !(vz,bz,vs,bs),f,c        **
365 rem**                            **
370 rem**  vz = von zeile            **
375 rem**  bz = bis zeile            **
380 rem**  vs = von spalte           **
385 rem**  bs = bis spalte           **
390 rem**                            **
395 rem**  f  = funktion (0-3)       **
400 rem**                            **
405 rem**    0= invers               **
410 rem**    1= revers               **
415 rem**    2= normal               **
420 rem**    3= fuellen              **
425 rem**                            **
430 rem**  c  = fuellcode            **
435 rem**       (=bildschirmcode)    **
440 rem**                            **
445 rem** - - - - - - - - -  - - - - **
450 rem**                            **
455 rem** statt ! kann auch          **
460 rem**                            **
465 rem** sys sa+36 verwendet werden **
470 rem**                            **
475 rem** (dann kann das initiali-   **
480 rem**  sieren entfallen)         **
485 rem********************************
Listing 1. »Screen« als DATA-Lader. Bitte beachten Sie die Eingabehinweise auf Seite 6.
100 rem********************************
105 rem** demo-programm zu '!screen' **
110 rem**                            **
115 rem** 28.6.85  stefan wagner     **
120 rem**          hoehenstr.102     **
125 rem**      5090leverkusen  3     **
130 rem**                            **
135 rem********************************
140 :
145 !(0,24,0,39),3,235
150 fori=1to24
155 :
160 :!(i,i,0,39-i ),2,0
165 : fork=1to200-8*i
170 : next k
175 :
180 next i
185 :
190 printchr$(147)
195 :
200 for f= 0 to 3 step3
205 :for v=20 to 0 step-5
210 : for i= 2 to 8
215 :  for j=10 to 12+i
220 :  c=rnd(0)*255
225 :  !(2,i,10,j),f,c
230 :   forx=1tov
235 :   next x
240 :  next j
245 : next i
250 :next v
255 next f
260 :
265 printchr$(19)"  abschalten mit stop"
270 :
275 !(0,24,0,39),0,0
280 forx=1to150:next:goto275
Listing 2. Demonstrationsprogramm zu »Screen«. Bitte beachten Sie die Eingabehinweise auf Seite 6.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →