DUP (TSB)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
DUP (TSB)
Syntax: DUP <x1>,<y1>,<bt>,<ho>,<x2>,<y2>,<f>,<zm>
Parameter
x1: X-Koordinate des Startpunktes (0..319 / 0..159)
y1: Y-Koordinate des Startpunktes (0..199)
bt: Breite in Pixeln (0..255)
ho: Höhe in Pixeln (0..199)
x2: X-Koordinate des Zielpunktes (0..319 / 0..159)
y2: Y-Koordinate des Zielpunktes (0..199)
f: Farbquelle (0..2 / 0..4)
zm: Zoomfaktor (1..255)
Einordnung
Typ: Anweisung
Kontext: Grafik
Aufgabe: Umkopieren von Grafik an eine andere Stelle (mit Skalierungsmöglichkeit)
Abkürzung: keine
Token: $64 $55 (100 85)
Verwandte Befehle
keine


Dieser Artikel beschreibt das TSB-Schlüsselwort DUP (TSB).
Das entsprechende Simons'-Basic-Schlüsselwort lautet ebenfalls DUP.

Typ: Anweisung 
Syntax: DUP <x1>,<y1>,<bt>,<ho>,<x2>,<y2>,<f>,<zm>

Mit DUP hat der Programmierer ein Werkzeug in der Hand, Bereiche der Grafik von einer Stelle an eine andere zu kopieren und dabei sogar zu vergrößern oder zu verkleinern. Zulässige Werte für <x1> und <x2> sind 0..319 (im Hires-Modus) bzw. 0..159 (im Multicolor-Modus). Für <y1> und <y2> sind in beiden Fällen Werte von 0 bis 199 erlaubt. Der Punkt 0,0 ist in der linken oberen Ecke. <bt> (Breite) und <ho> (Höhe, beide max. 255 Pixel) markieren den zu kopierenden Bereich. Mit <zm> (Zoomfaktor) kann dieser Bereich dabei zunächst einmal (linear) vergrößert werden (der Wert 2 verdoppelt), sowohl in der Höhe als auch in der Breite.

Wird kein Parameter eingegeben, so erscheint die Fehlermeldung ?SYNTAX ERROR, bei einem falschen Wert erscheint ?BAD MODE ERROR.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Beispiel 1[Bearbeiten | Quelltext bearbeiten]

Fast alle Vorgänge werden mit DUP geregelt. Der einzige mit CIRCLE gezeichnete Kreis ist der links oben in der Ecke!


Erzeugt den mittleren Teil der Animation:

230 CIRCLE 10,10,10,10,1                        Kreis mit Radius 10 Pixel zeichnen
240 :
250 FOR i=0 TO 14
260 DUP 0,0,20,20,20*i+20,0,1,1                 Diesen Kreis rund um den Screen kopieren
270 NEXT
280 FOR i=0 TO 7
290 DUP 0,0,20,20,300,20*i+20,1,1
300 NEXT
310 FOR i=15 TO 0 STEP -1
320 DUP 0,0,20,20,20*i,180,1,1
330 NEXT
340 FOR i=7 TO 0 STEP -1
350 DUP 0,0,20,20,0,20*i+20,1,1
360 NEXT
370 :
380 DUP 0,0,20,20,105,50,1,5                    Und einmal in die Mitte, fünffach vergrößert
390 WAIT 198,255  

Beispiel 2[Bearbeiten | Quelltext bearbeiten]

Achsenspiegelungen mit DUP


100 init: achsen: vorlage
180 nach unten: nach links unten: nach links 
190 DO NULL
290 bildschirmfarben
900 END

1000 PROC init
1010 HIRES 11,12: COLOUR: MULTI 12,11,1
1020 x=84: y=30: br=7*11: ho=3*20: f=0
1030 x1=76: y1=105
1040 END PROC

1100 PROC achsen
1110 LINE x-4,y-4,x-4,200-y,2
1120 LINE 4,96,156,96,2
1125 LINE 4,97,156,97,2
1130 END PROC

1200 PROC vorlage
1210 TEXT x,y,"{ctrl-b}Achsen-",3,2,11
1220 TEXT x,y+20,"{ctrl-b}Symme-",3,2,12
1230 TEXT x,y+40,"{ctrl-b}trie",3,2,12
1260 END PROC

1300 PROC nach links
1305 f=f+1
1310 FOR i=0 TO br-4
1320 DUP x+i,y,1,ho,x1-i,y,f,1                 DUP wird hier wie ein Scanner eingesetzt
1330 NEXT
1340 END PROC

1400 PROC nach unten
1405 LOW COL 15,0,0
1410 FOR i=0 TO ho
1420 DUP x,y+ho-i,br,1,x,y1+i,1,1
1430 NEXT
1435 HI COL
1440 END PROC

1500 PROC nach links unten
1510 y=105: nach links: y=30
1540 END PROC

1600 PROC bildschirmfarben
1610 COLOUR 11,12,0: FCOL 0,0,40,25,0          zum Schluss die Farben rekonstruieren (wegen MULTI) 
1620 END PROC