C 64/Simons Basic
Tips & Tricks

HiRes Colossal

Vier Grafik-Bildschirme gleichzeitig unter Simons Basic. Grafiken mit bis zu 640 x 400 Punkten Auflösung. Die Befehle bleiben von Simons Basic voll erhalten.

32 KByte RAM Grafik für Simons Basic! Mit »HiRes Colossal« (Listing 1) kann man unter Simons Basic vier unabhängige Grafikschirme verwalten. Drei der Schirme werden in den Puffern
$ 2000 — $ 3FFF
$ 4000 — $ 5FFF
$ 6000 — $ 7FFF
gespeichert, und immer einer wird im Anzeigespeicher
$ E000 — $ FFFF
abgelegt. Dieser eine kann dann betrachtet und mit den HiRes-Befehlen verändert werden.

Durch SYS 52225,0 wird dem Computer mitgeteilt, daß man im Speicher Platz für die Puffer reservieren will. Am Beginn eines Programms, das »HiRes Colossal« benutzt (zum Beispiel eines Zeichenprogramms), sollte immer stehen:

10 SYS 52225,0:CLR

Für ein Basic-Programm verbleiben dann noch etwa 6,1 KByte.

Mit SYS 52225,1,x veranlaßt man, daß der Bildschirm mit der Nummer x in den Anzeigespeicher kopiert wird, und der momentane Inhalt des Anzeigespeichers in den freigewordenen Puffer übertragen wird. Das heißt, der Inhalt des Anzeigespeichers und der Inhalt eines Buffers werden vertauscht. Für x können die Zahlen von 1 bis 4 eingesetzt werden. Jeder Schirm hat eine feste Nummer in diesem Bereich. Um die Verwaltung der Buffer, das heißt welcher Schirm zur Zeit in welchem Buffer ist, braucht man sich nicht zu kümmern. Das erledigt »HiRes Colossal« automatisch.

Als Leckerbissen bietet »HiRes Colossal« die Möglichkeit, mehrere Grafikschirme übereinander zu blenden. SYS 52225,2,x blendet den Schirm x über den Schirm, der sich im Anzeigespeicher befindet. Im Anzeigespeicher ist nun ein neues Bild, gemischt aus den beiden Grafiken.

Speichern der Grafikschirme: »SYS 52225,4,1,8,2, "name,P,W"« speichert den Schirm im Anzeigespeicher auf Diskette. Die Parameter ab der »1« entsprechen denen des OPEN-Befehls. Man kann jeden der vier Grafikbereiche speichern, indem man ihn zuerst mit »SYS 52225,1,x« in den Anzeigespeicher kopiert und dann mit dem obigen Befehl speichert.

Die Grafiken können mit »SYS 52225,4,"name",gerät« wieder geladen werden. Für »gerät« muß die entsprechende Gerätenummer eingesetzt werden (1 oder 8). Die Grafik wird in den Anzeigespeicher eingelesen. Sollen mehrere Grafiken geladen werden, so muß man nach dem Laden einer Grafik wieder einen freien Speicherbereich in den Anzeigespeicher rufen, damit die nächste Grafik nicht die gerade geladene überschreibt. Zum Beispiel:

SYS 52225,1,1 ersten Bildschirm aufrufen
SYS 52225,4,"GRAFIK1",8 erste Grafik in den Bildschirm 1 laden
SYS 52225,1,2 zweiten Bildschirm aufrufen
SYS 52225,4,"GRAFIK2,8 zweite Grafik in den Bildschirm 2 laden

Die Demoprogramme:

»Demo 1« (Listing 2) demonstriert die verschiedenen Funktionen von »HiRes Colossal«. An einer Stelle des Programms werden die erzeugten Bilder auf Diskette gespeichert. Deswegen sollte sich im Laufwerk eine Diskette mit mindestens 132 freien Blöcken befinden.

»Demo 2« (Listing 3) zeichnet drei geometrische Figuren, deren Koordinaten so gewählt sind, daß sie sich über alle vier Grafikschirme erstrecken. Die »Punkt-Routine« schaltet beim Setzen eines Punktes automatisch den richtigen Bildschirm ein. Es ist also möglich, Grafiken mit der Größe von 640 x 400 Punkten zu erstellen.

Mit den Tasten 1 bis 4 können nun die verschiedenen Teile des Riesenbildes betrachtet werden.

Die Unterprogramme »PUNKT«, »LINIE«, »BOX« und »KREIS« können in eigene Programme zur Erstellung übergroßer Grafiken übernommen werden. Allerdings ist zu beachten, daß man nicht nur zum Beispiel »LINIE« übernimmt, sondern auch »PUNKT«, weil »LINIE« den »PUNKT«-Befehl als Unterprogramm braucht. So braucht auch »KREIS« den »PUNKT«-Befehl und »BOX« braucht die Befehle »LINIE« und »PUNKT«.

»HiRes Colossal« ermöglicht es, mehrere Grafiken im Speicher zu halten oder gar übergroße Bilder mit einer Auflösung von 640 x 400 Punkten zu erstellen. Mit den neuen Befehlen kann extrem schnell und bequem zwischen den vier Grafikseiten hin und her geschaltet werden, wobei alle Vorteile von Simons Basic erhalten bleiben.

(F. Gräf/og)
PROGRAMM : HIRES-COLOSSAL CC01 CD27
-----------------------------------
CC01 : 20 FD AE 20 9E B7 8A F0   83
CC09 : 1F C9 01 D0 03 4C 3A CC   7C
CC11 : C9 02 D0 03 4C A4 CC C9   21
CC19 : 03 D0 03 4C D2 CC C9 04   91
CC21 : D0 03 4C 19 CD 4C 48 B2   6F
CC29 : A9 FF 85 37 A9 1F 85 38   34
CC31 : 60 02 20 03 40 04 60 01   A3
CC39 : 00 20 40 CC 4C 6D CC 20   97
CC41 : FD AE 20 9E B7 8A CD 38   E9
CC49 : CC D0 03 68 68 60 8D 39   7D
CC51 : CC A9 00 85 FC A0 06 B9   03
CC59 : 31 CC 85 FD 88 B9 31 CC   C6
CC61 : CD 39 CC F0 06 88 D0 EF   E4
CC69 : 4C 48 B2 60 AA AD 38 CC   25
CC71 : 99 31 CC 8E 38 CC A9 E0   FA
CC79 : 85 FB A0 00 84 FA A2 20   0F
CC81 : 78 C6 01 C6 01 B1 FC 8D   22
CC89 : 39 CC B1 FA 91 FC AD 39   1E
CC91 : CC 91 FA C8 D0 EF E6 FB   1E
CC99 : E6 FD CA D0 E8 E6 01 E6   E2
CCA1 : 01 58 60 20 40 CC A9 E0   BD
CCA9 : 85 FB A0 00 84 FA A2 20   3F
CCB1 : 78 C6 01 C6 01 B1 FA 8D   4A
CCB9 : 39 CC B1 FC 0D 39 CC 91   55
CCC1 : FA C8 D0 F1 E6 FB E6 FD   77
CCC9 : CA D0 EA E6 01 E6 01 58   8F
CCD1 : 60 20 FD AE 20 BE E1 A6   63
CCD9 : 49 20 C9 FF A9 00 85 FA   4B
CCE1 : 20 D2 FF A9 E0 85 FB 20   0A
CCE9 : D2 FF A2 20 A0 00 78 C6   E1
CCF1 : 01 C6 01 B1 FA E6 01 E6   85
CCF9 : 01 58 8E 17 CD 8C 18 CD   EA
CD01 : 20 D2 FF AE 17 CD AC 18   23
CD09 : CD C8 D0 E2 E6 FB CA D0   E6
CD11 : DD A5 49 4C C3 FF EA EA   5A
CD19 : 20 FD AE 20 D4 E1 A0 E0   88
CD21 : A2 00 8A 4C D5 FF         54
Listing 1. »HiRes Colossal« geben Sie bitte mit dem MSE ein
1000 rem ******************************
1010 rem ******************************
1020 rem ******                  ******
1030 rem ***     hires colossal     ***
1040 rem ******                  ******
1050 rem ******************************
1060 rem ************************
1000 rem*******************************
1010 rem******                   ******
1020 rem***      hires colossal     ***
1030 rem***       -- demo --        ***
1040 rem******                   ******
1050 rem*******************************
1060 rem
1070 rem    (c) 1/86 by
1080 rem                f.graef
1090 rem                6831 plankstadt
1100 rem
1110 :
1120 :
1130 rem*** ram-ende heruntersetzen ***
1140 :
1150 sys 52225,0
1160 clr
1170 :
1180 :
1190 rem***** alle schirme richten ****
1200 :
1210 for i=1 to 4
1220 :         sys 52225,1,i
1230 :         ($64){CTRL-A} 0,12
1240 :($64){$6f} i*20,i*20,"{CTRL-A}"+str$(i),1,1,12
1250 :    ($64)b i*20+15,i*20+3,10,10,1
1260 ($64){stop}10,i*10+100,i*20+10,i*10+110,1
1270 :         ($64){stop} 0,199,319,0,1
1280 :   ($64){stop} 120+i*10,0,120+i*10,199,1
1290 :         ($64){$66} 1
1300 next i
1310 :
1320 :
1330 rem***** alle schirme zeigen *****
1340 :
1350 for i=1 to 2
1360 :       for x=1 to 4
1370 :            sys 52225,1,x
1380 :            ($64){$66}1
1390 :       next x
1400 next i
1410 :
1420 :
1430 rem**** alle schirme saven *******
1440 :
1450 for i=1 to 4
1460 :        sys 52225,1,i
1470 sys52225,3,1,8,2,"s"+str$(i)+",p,w"
1480 next i
1490 :
1500 :
1510 rem schirme uebereinander blenden
1520 :
1530 sys 52225,1,1
1540 for i=2 to 4
1550 :         sys 52225,2,i
1560 next i
1570 ($64){$66} 4
1580 :
1590 :
1600 rem*** alle schirme loeschen *****
1610 :
1620 for i=1 to 4
1630 :        sys 52225,1,i
1640 :        ($64){CTRL-A} 0,12
1650 next i
1660 :
1670 :
1680 rem****** schirme laden **********
1690 :
1700 for i=1 to 4
1710 :        sys 52225,1,i
1720 :        sys 52225,4,"s"+str$(i),8
1730 next i
1740 :
1750 :
1760 rem*** alle schirme zeigen *******
1770 :
1780 for i=1 to 2
1790 :       for x=1 to 4
1800 :            sys 52225,1,x
1810 :            ($64){$66}1
1820 :       next x
1830 next i
1840 :
1850 :
1860 rem programmende
Listing 2. Demo 1 für »HiRes Colossal«. Bitte vorher Simons Basic laden und starten.
1000 rem ******************************
1010 rem ******                  ******
1020 rem ***    zeichenr($64){$7f}inen     ***
1030 rem ***    zu ($64){CTRL-A} colossal   ***
1040 rem ******                  ******
1050 rem ******************************
1060 rem
1070 rem
1080 rem   (c) 1/86 by
1090 rem                f.graef
1100 rem                6831 plankstadt
1110 rem
1120 :
1130 sys 52225,0
1140 :
1150 rem ------ schirme loeschen -----
1160 :
1170 for i=1 to 4
1180 :    sys 52225,1,i
1190 :    ($64){CTRL-A} 0,12
1200 :    ($64){$6f} 10,10,"{CTRL-A}"+str$(i),1,2,12
1210 next i
1220 :
1230 rem max. aufloesung auf 1 schirm
1240 rem ($64){CTRL-A} 320/200. bei ($64){CTRL-Y}
1250 rem 160/200. m=zeichentyp.
1260 :
1270 ax=320:ay=200:m=1
1280 :
1290 :
1300 x1=300:y1=20:x2=360:y2=40
1310 ($64)3 ($64)yie
1320 :
1330 x1=100:y1=190:r=20
1340 ($64)3 kreis
1350 :
1360 x1=290:y1=180:x2=360:y2=250
1370 ($64)3 box
1380 :
1390 rem mit 1,2,3,4 koennen die
1400 rem verschiedenen schirme an-
1410 rem gesehen werden.
1420 :
1430 ($64)1 tasten
1440 :
1450 get a$
1460 a=val(a$)
1470 if a=0 then ($64)2 tasten
1480 :
1490 if a<1 then a=1
1500 if a>4 then a=4
1510 :
1520 sys 52225,1,a
1530 :
1540 ($64)2 tasten
1550 :
1560 :
1570 rem ******************************
1580 rem ******                  ******
1590 rem ***       punkt x,y,m      ***
1600 rem ******                  ******
1610 rem ******************************
1620 :
1630 ($64)1 punkt
1640 :
1650 ($64)e xx,yy,a
1660 ($64)3 punkt1
1670 ($64).
1680 :
1690 ($64)4
1700 :
1710 :
1720 ($64)1 punkt1
1730 :
1740 a=1:xx=int(x):yy=int(y)
1750 if xx>ax-1 then a=a+1:xx=x-ax
1760 if yy>ay-1 then a=a+2:yy=y-ay
1770 :
1780 if peek(52280)<>athen sys52225,1,a
1790 rem  in 52280 steht die aktuelle
1800 rem  schirmnummer des anzeige-
1810 rem  speichers.
1820 :
1830 ($64){CTRL-B} xx,yy,m
1840 :
1850 ($64)4
1860 :
1870 rem ******************************
1880 rem ****                      ****
1890 rem **   ($64)yie x1,y1,x2,y2,m    **
1900 rem ****                      ****
1910 rem ******************************
1920 :
1930 ($64)1 ($64)yie
1940 :
1950 ($64)e xd,yd,sr,xx,yy,a
1960 ($64)3 ($64)yie3
1970 ($64).
1980 :
1990 ($64)4
2000 :
2010 :
2020 ($64)1 ($64)yie3
2030 :
2040 xd=(x2-x1):yd=(y2-y1)
2050 if abs(xd)<abs(yd)then ($64)2 ($64)yie2
2060 :
2070 rem ----------- ($64)yie1 -----------
2080 :
2090 sr=yd/abs(xd)
2100 y=y1
2110 for x=x1 to x2 step (xd/abs(xd))
2120 :    y=y+sr
2130 :    ($64)3 punkt1
2140 next x
2150 :
2160 ($64)4
2170 :
2180 rem ----------- ($64)yie2 -----------
2190 :
2200 ($64)1 ($64)yie2
2210 :
2220 sr=xd/abs(yd)
2230 x=x1
2240 for y=y1 to y2 step (yd/abs(yd))
2250 :    x=x+sr
2260 :    ($64)3 punkt1
2270 next y
2280 :
2290 ($64)4
2300 :
2310 rem *****************************
2320 rem ******                 ******
2330 rem ***    kreis x1,y1,r,m    ***
2340 rem ******                 ******
2350 rem *****************************
2360 :
2370 ($64)1 kreis
2380 :
2390 ($64)e u,c,s,x,y,xx,yy,a
2400 :
2410 u=r*~/4
2420 :
2430 for i=~/4 to ~/2 step ~/4/u
2440 :    c=cos(i)*r:s=sin(i)*r
2450 :    x=x1+c:y=y1+s:($64)3 punkt1
2460 :    x=x1+c:y=y1+s:($64)3 punkt1
2470 :    x=x1+s:y=y1+c:($64)3 punkt1
2480 :    x=x1+s:y=y1-c:($64)3 punkt1
2490 :    x=x1+c:y=y1-s:($64)3 punkt1
2500 :    x=x1-c:y=y1-s:($64)3 punkt1
2510 :    x=x1-s:y=y1-c:($64)3 punkt1
2520 :    x=x1-s:y=y1+c:($64)3 punkt1
2530 :    x=x1-c:y=y1+s:($64)3 punkt1
2540 next i
2550 :
2560 ($64).
2570 ($64)4
2580 :
2590 rem *****************************
2600 rem *****                   *****
2610 rem ***   box x1,y1,x2,y2,m   ***
2620 rem *****                   *****
2630 rem *****************************
2640 :
2650 ($64)1 box
2660 :
2670 ($64)e a1,b1,a2,b2,xd,yd,sr,xx,yy,a
2680 :
2690 a1=x1:a2=x2
2700 b1=y1:b2=y2
2710 :
2720 y2=b1:($64)3 ($64)yie3
2730 y2=b2:x2=a1:($64)3 ($64)yie3
2740 x1=a2:y1=b2:($64)3 ($64)yie3
2750 x2=a2:y2=b1:($64)3 ($64)yie3
2760 :
2770 ($64).
2780 ($64)4
Listing 3. Demo 2 für »HiRes Colossal«. Mit den Tasten <1> bis <4> kann zwischen den Bildschirmen umgeschaltet werden.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →