C 64
Grafik

Shapes auf dem C 64

Mit diesem Programm bringen Sie Bewegung ins Bild. Denn neben den Shapes, die sich beliebig auf dem Bildschirm positionieren lassen, stehen die Sprites im vollen Umfang zur Verfügung. Shape kann aber noch viel mehr! Probieren Sie es aus.

»Shape« wurde dazu entwickelt, Teile aus dem Bildschirm zu speichern und an beliebiger Stelle wieder einzusetzen (Dieses Programm simuliert also keine Sprites!). Jedoch hat man noch mehr Möglichkeiten: Bildbereiche mit Zeichen beliebiger Farbe füllen, Zeichensatzänderung und mehr Platz für Basic-Programme. Die beiden letzten Punkte haben eigentlich nichts mit Shapes zu tun, aber dadurch wurde der Einsatzbereich noch vergrößert. Sie werden sehen, daß sich mit alldem eine ganze Menge anfangen läßt. Man kann »Shape« zum Beispiel für Spiele, Maskengeneratoren, zum Window-Aufbau in diversen Programmen und zu viel mehr benutzen.

Anleitung: Zuerst lädt man das Hauptprogramm und startet es mit RUN (Listing 1). Es erscheint ein leicht veränderter Bildschirm mit der Einschaltmeldung. Jetzt kann man entweder das Demoprogramm (Listing 2) laden, welches zeigt, was mit »Shape« alles möglich ist, oder selbst programmieren.

Ein Shape wird mit SYS 49152,ADR,X,Y,2 definiert. Für ADR ist dabei die Bildschirmadresse zu setzen, die der linken, oberen Ecke entspricht. Für X schreibt man die X-Ausdehnung, für Y die Y-Ausdehnung. Bei ADR wäre zu beachten, daß der Bildschirm jetzt bei 50176 beginnt. ADR läßt sich also durch 50176+40*Zeile+Spalte errechnen.

Mit SYS 49152,ADR,X,Y,1 setzt man ein Shape auf den Bildschirm. Mit SYS 49152,ADR,X,Y,0,CHR,COL schließlich wird der definierte Bereich mit dem Zeichen CHR der Farbe COL gefüllt. Bei CHR muß das Zeichen dabei im POKE-Code angegeben werden.

Ein Beispiel: Schreiben Sie den Bildschirm voll und definieren Sie ein Shape mit SYS 49152,50176,10,12,2. Löschen Sie nun das Bild und geben SYS 49152,50256,10,12,1 ein. Jetzt erscheint ein oberer Teil des Bildes um zwei Zeilen versetzt. Nach der Eingabe von SYS 49152,50256,10,12,0,129,2 erscheinen lauter reverse »A« an genau derselben Stelle. Sie sollten jetzt ein wenig experimentieren, nur so läßt sich der richtige Umgang mit »Shape« erlernen.

Noch ein Tip: Natürlich muß man sich nicht auf den Bildschirm beschränken, man kann zum Beispiel bis zu 5 KByte Speicher verschieben!

Wie gesagt ist auch eine Zeichensatzänderung möglich. Ich möchte nicht näher darauf eingehen. Es ist schon oft genug erklärt worden. Nur soviel: Der Zeichensatz liegt ab 51200. Die Adresse für ein Zeichen läßt sich also durch 51200+8*CHR finden. Da in diesem Bereich jedoch nur Platz für einen Zeichensatz ist, wird er beim Umschalten durch C-SHIFT durch eine IRQ-Routine umkopiert. Hierbei wird jedoch ein eventuell vorhandener geänderter Zeichensatz gelöscht! Daher sollte man die Möglichkeit einer Zeichensatzumschaltung mit POKE 49349,96 ausschließen. Wieder einschalten läßt er sich mit POKE 49349,234. Außerdem muß nun mit SYS 49503 auf Groß- und mit SYS 49512 auf Kleinschreibung umgeschaltet werden (auch hierbei wird ein veränderter Zeichensatz gelöscht!).

Ganz wichtig: Nach RUN/STOP-RESTORE muß blind SYS49152:SYS42291 eingegeben werden, um die Parameter wieder richtig einzustellen. Das Maschinenprogramm legt die Bilddaten ab 40960 und die Farbdaten ab 45056 ab. Daher lassen sich nur jeweils 5 KByte verschieben. Für Assembler-Freaks ist das bei Bedarf aber leicht zu ändern.

Die Einsprungadresse zur Shape-Definition lautet 49185, zum Shape-Abbilden 49199 und zum Füllen 49227. Dazu muß in Speicherzelle 4 die X-Koordinate und in Speicherzelle 5 die Y-Koordinate abgelegt werden. Außerdem müssen die Speicherzellen 2 und 3 »ADR« im Low-/High-Byte-Format enthalten. In der Zelle 49258 steht »CHR« und in 49262 »COL«.

(R. Löwenstein/ah)
100 rem shape 64 von r. loewenstein
101 rem              zeisigweg 42
102 rem              8301 oberahrain
103 rem              tel:08703/2088
104 :
120 poke53270,4:x=49152:fora=0to368:readb:pokex+a,b:c=c+b:next
125 ifc<>43521thensys58784:print"fehler in datas!":end
130 sys58784:sys49391:print"{clr}{down}   ****  c-64 shape system v1.0  ****"
140 print"{down} 64k ram system  40130 basic bytes free"
150 new
32000 data32,253,174,32,235,183,134,4,165,20,166,21,133,2,134,3,32,253,174,32
32001 data235,183,165,20,133,5,138,240,32,201,1,240,14,162,7,189,89,192,157,146
32002 data192,202,16,247,76,113,192,162,7,189,97,192,157,146,192,202,16,247,76
32003 data113,192,32,253,174,32,235,183,142,110,192,165,20,141,106,192,162,7
32004 data189,105,192,157,146,192,202,16,247,76,113,192,177,2,145,6,177,8,145
32005 data10,177,6,145,2,177,10,145,8,169,255,145,2,169,0,145,8,169,54,133,1
32006 data169,0,162,160,133,6,134,7,162,176,133,10,134,11,166,2,165,3,24,105
32007 data20,133,9,134,8,166,5,160,0,169,255,145,2,169,0,145,8,200,196,4,144
32008 data243,165,6,24,101,4,133,6,133,10,144,4,230,7,230,11,165,2,24,105,40
32009 data133,2,133,8,144,4,230,3,230,9,202,208,208,169,55,133,1,96,234,169,51
32010 data133,1,169,0,162,200,160,208,133,2,134,3,133,4,132,5,162,8,168,177,4
32011 data145,2,136,208,249,230,3,230,5,202,208,242,169,55,133,1,88,96,120,169
32012 data208,141,207,192,32,197,192,169,0,141,0,221,169,18,141,24,208,169,196
32013 data141,136,2,169,50,162,193,141,20,3,142,21,3,169,0,141,32,208,141,33
32014 data208,169,14,141,134,2,169,60,162,3,133,43,134,44,169,0,141,60,3,169
32015 data8,32,210,255,88,96,173,141,2,201,3,208,24,169,18,141,141,2,141,142
32016 data2,230,255,165,255,41,1,208,11,169,216,141,207,192,32,197,192,76,49
32017 data234,169,208,141,207,192,32,197,192,76,49,234,120,169,208,141,207,192
32018 data76,198,192,120,169,216,141,207,192,76,198,192
Listing 1. Hauptprogramm »Shape«. Bitte beachten Sie die Eingabehinweise auf Seite 55
1 rem shape 64 von r. loewenstein
2 rem              zeisigweg 42
3 rem              8301 oberahrain
4 rem              tel:08703/2088
5 :
6 :
9 rem sonderzeichen definieren
10 :
11 poke49349,234:sys49503:poke49349,96:fora=0to21:readb:poke51416+a,b:next
12 data102,0,62,102,102,102,63,0
13 data102,0,60,102,102,102,60,0
14 data102,0,102,102,102,102,60,0
15 :
16 rem titelbild aufbauen
17 :
18 poke53280,0:poke53281,0:print"{clr}{blk}{CBM-A}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-S}"
20 print"{up}{SHIFT--}  s h a p e  64  von  r. l\wenstein   {SHIFT--}"
30 print"{up}{CBM-Z}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-X}":sys49152,50176,40,3,2:print"{clr}"
35 sys49152,45056,40,3,0,1,1:a=rnd(ti)
40 fora=40to800step40:sys49152,50176+a,a/20,3,1:next:gosub1010
50 gosub1020:z=18:gosub1030
54 :
55 rem start der demos
56 :
60 print"{home}{gry1}{CBM-D}{gry2}{CBM-I}{gry3}{CBM-I}{wht}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{gry3}{CBM-I}{gry2}{CBM-I}{gry1}{CBM-F}"
65 print"{rvon}{CBM-K}{gry2} {gry3}s{wht}hape 6{gry3}4{gry2} {gry1}{rvof}{CBM-K}"
70 print"{gry1}{CBM-C}{gry2}{rvon}{CBM-I}{gry3}{CBM-I}{wht}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{gry3}{CBM-I}{gry2}{CBM-I}{gry1}{rvof}{CBM-V}":sys49152,50176,12,3,2
75 a$="{wht}              spielereien":gosub1050
80 fora=0to150:sys49152,50176+rnd(1)*668,12,3,1:next:gosub1010:gosub1020:gosub1030
82 :
83 rem kreis ziehen
84 :
85 a$="{wht}          bildschirm verzieren":gosub1050
90 fora=1to7.9step0.1:x=int(sin(a)*10+15):y=int(cos(a)*7+8)
100 sys49152,50176+y*40+x,12,3,1:next:gosub1010:gosub1020
101 :
102 rem demofolge
103 :
105 a$="                                       ":gosub1050
110 sys49152,50176,40,20,2:a$="{wht}     bilder schnell teilweise l\schen":gosub1050
120 sys49152,50176,40,19,0,0,0:gosub1060:a$="{wht}            bilder schnell"
130 sys49152,50176,40,20,1:gosub1050:gosub1060:a$="{wht}                  oder    "
135 sys49152,50176,40,19,0,0,0
140 gosub1050:gosub1060:a$="{wht}              effektvoll":gosub1050
150 fora=1to20:sys49152,50176,a*2,a,1:next:
160 gosub1050:gosub1060:a$="                aufbauen":gosub1050:gosub1010
165 :
166 rem bildschirm f]llen
167 :
170 gosub1020:a$="bild mit zeichen w[hlbarer farbe f]llen":gosub1030
180 gosub1050:fora=1to10
190 sys49152,50176+rnd(1)*400,rnd(1)*8+1,rnd(1)*8+1,0,rnd(1)*255,rnd(1)*255
200 forb=0to200:nextb,a:a$="    nat]rlich gehts auch schneller:    ":gosub1050
210 fora=0to80
220 sys49152,50176+rnd(1)*400,rnd(1)*8+1,rnd(1)*8+1,0,rnd(1)*255,rnd(1)*255
230 next:gosub1010:gosub1020:gosub1030
235 :
236 rem zeichensatz[nderung
237 :
240 a$="            und als bonbon:":gosub1050:gosub1060:gosub1060
250 a$="          zeichensatz[nderung!":gosub1050
255 print"{down}{down}{down}     st\rungen sind basic-bedingt!":sys49152,50176,40,17,0,32,1
260 z=50176:fora=0to255:pokez+a,a:next:sys49152,50456,40,11,0,0,1:y=51200
270 forb=0to15:z=peek(y):fora=0to7:pokey+a,peek(y+1+a):nexta:pokey+7,z:nextb
280 y=y+8:ify<51280thensys49152,50456,40,11,0,(y-51200)/8,1:goto270
285 :
286 rem bildschirmblinken
287 :
290 gosub1010:gosub1020:fora=0to150:sys49152,50176,40,20,0,160,rnd(1)*15:next
300 gosub1030:a$="              "+chr$(34)+"game over!"+chr$(34):z=7
310 gosub1040:a$=" {rvon}{wht}  taste zum wiederholen oder run/stop ":gosub1000
320 print"{clr}greetings to happy & matzi":print"{down}{down}hey activision! do you want my new";
325 print" game?":print"100% mc-code,disk":gosub1060:run
330 :
331 rem ende des demoprogrammes
332 :
997 :
998 rem unterprogramme
999 :
1000 poke214,22:print:printa$:poke198,0:wait198,1:return
1010 a$=" {wht}{rvon}                taste                 ":goto1000
1020 a$="                                       ":poke214,22:print:printa$:return
1030 sys49152,50176,40,20,0,32,0:return
1040 poke214,z:print:printa$:return
1050 z=18:goto1040
1060 forz=0to1500:next:return
Listing 2. Das Demoprogramm zu »Shape« zeigt die hervorragenden Eigenschaften dieses Programms.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →