Sprites: Die Bewegung macht's
Um anspruchsvolle Actionspiele zu schreiben, sind bewegte Sprites unerläßlich. Das »Sprite Construction Set« ist beim Erstellen von Sprites mit Bewegungsabläufen eine wertvolle Hilfe.

Klar, daß man heutzutage Sprites nicht mehr »von Hand« programmiert. Doch die wenigsten Sprite-Editoren besitzen die Möglichkeit, Bewegungsabläufe auszutesten und daran »herumzufeilen«. Mit dem »Sprite Construction Set«, im folgenden kurz »S.C.S.« genannt, können Sie mühelos die gesamte Sprite-Animation Ihrer Spiele entwerfen.
Kein Papierkram, keine Entwurfsblätter. Konzentrieren Sie sich ganz auf die künstlerische Gestaltung.
S.C.S. besteht aus 3 Teilen:
— dem Lader »S.C.S. BOOT« (Listing 1)
— dem Basic-Hauptprogramm »S.C.S.« (Listing 2)
— und dem Assemblerpaket »S.C.S.OBJ.« (Listing 3)
Der Lader wird mit »,8« geladen und mit RUN gestartet. Er lädt das Maschinenprogramm und verschiebt den Basic-Start um eine Seite = 256 Byte nach oben, um 4 weiteren Sprites Platz zu machen. Die Daten für die 8 Sprites liegen jetzt in den Blöcken 11, 13, 14, 15, 32, 33, 34 und 35. Nach dem Ladevorgang erscheint auf dem Bildschirm unter anderem ein grüner Rahmen mit Zahlenreihen links und oben. Er umrahmt das Feld für die 8fach-Vergrößerung des aktuellen Sprite. Innerhalb des Rahmens blinkt ein kleiner Cursor in Form eines »+«. Die Zahlenreihen hängen mit dem Aufbau des Sprite zusammen und dienen zur Orientierung. Auf der rechten Bildschirmseite erscheint eine Parameteranzeige. Man verstellt die Parameter, indem man die Zahlentaste drückt, die links vor dem jeweiligen Display steht. Alle Tasten haben Dauerfunktion.
| Taste | Funktion |
|---|---|
| 0 | schaltet von Normal- in Multicolor(MC-)Modus um und umgekehrt. |
| 4 | schaltet einen Sprite weiter (von 0 bis 7, dann wieder nach 0) |
| 5 | schaltet Spritefarbe 1 um eins weiter (von 0 bis 15, dann wieder nach 0) |
| 6 | wie 5, aber Farbe 2 |
| 7 | wie 6, aber Farbe 3 |
| 8 | schaltet Hintergrundfarbe jeweils um eins weiter |
| 9 | wie 8, aber Rahmenfarbe |
| A | wie 8, aber Schriftfarbe |
| X | vergrößert Sprite in X-Richtung, beziehungsweise schaltet zurück. |
| Y | Wie X, jedoch Y-Richtung. |
Farben 1 und 3 sind die beiden Multicolor-Farben. Sie tauchen nur im MC-Modus auf und sind für alle 8 Sprites gleich (Hardwarebedingung). Farbe 2 kommt sowohl im Multicolor- als auch im Normal-Modus vor und ist für jeden der 8 Sprites individuell wählbar. Im Normal-Modus stellt sie die ausschließliche Zeichenfarbe dar.
Der Cursor wird mit Joystick Port 2 innerhalb des Rahmens gesteuert. Mit <-> schaltet man auf Punkt löschen, mit <+> zurück auf Punkt setzen. Gelöscht oder gezeichnet wird aber nur, wenn der Knopf am Joystick gedrückt ist. Das Sprite wird natürlich nicht nur als 8fach-Vergrößerung, sondern auch im Original in der rechten oberen Bildschirmecke gezeigt.
Im Multicolor-Modus hat der Cursor eine andere Gestalt, da man hier nur die halbe Auflösung in X-Richtung, dafür aber 3 Zeichenfarben hat. Er ist doppelt so breit und zeigt an, mit welcher Farbe er gerade malt (1,2,3, oder <-> für Löschen). In den jeweiligen Modus schaltet man mit den Tasten <1>, <2>, <3> und <->.
Am besten, man probiert erstmal ein wenig herum, um das Zeichnen mit dem Joystick in den Griff zu bekommen.
Außerdem stehen eine ganze Reihe Befehle zur Verfügung, die teils einfache, teils sehr komplexe Operationen bewirken. Um einen Befehl eingeben zu können, muß man erst die CTRL-Taste drücken. Jetzt wird in der obersten Bildschirmzeile nach dem Befehl gefragt und ein Eingabecursor in Form eines Pfeils nach links erscheint. Nun kann man Befehlsworte und eventuell benötigte Parameter eingeben.
Einfache Befehle für...
Die Eingabe wird mit <RETURN> abgeschlossen. Ungültige Eingaben werden ignoriert. Hier eine Auflistung der Befehle und ihrer Wirkung:
| Befehl | Wirkung |
|---|---|
| CLEAR | löscht den aktuellen Sprite |
| SWAP | stellt ihn auf den Kopf |
| FLIP | spiegelt ihn |
| ROT | dreht ihn um 90 Grad im Uhrzeigersinn; die rechten 3 Reihen gehen dabei verloren, weil die Sprites ein Format von 24 x 21 Punkten haben. Dreht man einen Multicolor-Sprite, verfälscht sich zwangsläufig dessen Farbinformation, weil er in X- und Y-Richtung verschiedene Auflösung hat. |
| COPY X | (X=Parameter) Sprite Nummer X wird mit all seinen Informationen in den aktuellen Sprite kopiert; dient zur Sicherung. |
| XOR X | Sprite Nummer X wird mit dem aktuellen Sprite exklusiv- oder verknüpft. Das Ergebnis wird im aktuellen Sprite abgelegt. |
| OR X | wie XOR X, jedoch Oder-Verknüpfung |
| AND X | wie XOR X, jedoch Und-Verknüpfung |
| ROL | Jetzt kann man den Sprite mit dem Joystick im Definitionsfeld verschieben. Drückt man beim Verschieben den Knopf, dann gehen die aus dem Rahmen gehobenen Reihen verloren, sonst erscheinen sie auf der anderen Seite wieder. Diese Funktion ist im Zusammenhang mit OR X und COPY X von entscheidender Wichtigkeit. Zwei Sprites, die später ein Objekt bilden sollen, kann man mit COPY X in andere Bereiche sichern und sie anschließend so verschieben, daß man, wenn man sie mit OR X verknüpft, ausprobieren kann, ob die Nähte passen. Will man einen Sprite um 90 Grad drehen, ohne daß die rechten 3 Reihen verlorengehen, kann man ihn vorher entsprechend verschieben. In den Zeichenmodus zurück gelangt man durch <X>. |
| SEQ | ist ein Befehl, um Bewegungsabläufe mit nur einem Sprite zu testen. Zuerst wird nach der Sequenz gefragt. Jetzt kann man Ziffern von 0 bis 7 in beliebiger Reihenfolge eingeben. Jede der Ziffern entspricht einem der 8 Sprites. Bei der Eingabe reagiert S.C.S. interaktiv. Rechts oben und im Rahmen wird immer das der Ziffer entsprechende Sprite angezeigt. Schließt man die Eingabe der Sequenz mit <RETURN> ab, wird nach der Verzögerung gefragt. Man muß einen Wert von 0 bis 255 eingeben. Bei 0 läuft die Sequenz mit 14 bis 15 Bildern/s, bei 255 erscheint 1 Bild/s. Beim Sequenzdurchlauf werden die Sprites sowohl als 8fach-Vergrößerung als auch im Original dargestellt. Bei geeigneter Benutzung kann ein eleganter Film-Effekt entstehen. Auch hier entweicht man mit der <X>. |
| PUZZLE | Hier kann man Bewegungsabläufe mit bis zu 8 verschiedenen Sprites koordinieren. Nun wird der Bildschirm gelöscht und Sprite Nummer 0 erscheint. Man kann ihn mit dem Joystick plazieren. Auf Knopfdruck werden die Koordinaten akzeptiert und das nächste Sprite kann plaziert werden. Nach Sprite Nummer 7 kommt wieder Sprite Nummer 0 an die Reihe. Für den Bewegungsablauf werden später nur die Sprites verwendet, die momentan plaziert sind. Durch <X> verläßt man diese Funktion und kann nun die Sequenzen eingeben. Alle Sequenzen müssen genauso lang wie die von Sprite 0 sein, um angenommen zu werden. Auch hier reagiert S.C.S. interaktiv. Es werden alle Sprites genau in dem Sequenz-Stadium angezeigt, in dem das Sprite, für das gerade die Sequenz eingegeben wird, steht. Wenn sie den letzten plazierten Sprite erreicht haben, wird wieder bei Sprite Nummer 0 angefangen. Man kann so lange herumprobieren, bis alles stimmt. Auf erneuten Druck von <X> verläßt man diese Funktion, um die Bewegungsvorschriften einzugeben. Jetzt wird nach DELTA X und DELTA Y gefragt. Der Wertebereich liegt jeweils von -127 bis +128. Negativ bedeutet Bewegung nach links beziehungsweise oben, positiv nach rechts beziehungsweise unten um X- beziehungsweise Y-Schritte. 0 bedeutet keine Bewegung in der jeweiligen Richtung. DELTA X und DELTA Y gelten für die Bewegung aller plazierten Sprites. Nun fragt S.C.S. nach der Verzögerung. 0 ist am schnellsten, 255 am langsamsten. Hier muß man ausprobieren und Erfahrungswerte einsetzen. Zuletzt wird nach RATE gefragt. Gemeint ist, nach wieviel Bewegungsschritten eine Sequenz-Änderung für alle Sprites stattfindet. Dann wird der Bewegungsablauf gestartet. Wenn ein Sprite die zulässigen Koordinaten verläßt, kehren alle Sprites wieder an ihre Ursprungskoordinaten zurück. Durch <X> stoppt man den Bewegungsablauf und gelangt wieder in den Zeichenmodus. Limit für den Zeilenabstand ist 255. Hier wird vor den Filenamen automatisch ein »L.« gestellt. |
| SAVE ALL | Speichert ein File ab, das alle Informationen enthält, die für S.C.S. wichtig sind: die Daten aller Sprites, den gesamten VIC, die Nummer des aktuellen Sprites, Schriftfarbe, alle Sequenzen von PUZZLE und SEQ und die Koordinaten von PUZZLE. Will man die Arbeit mit S.C.S. unterbrechen, um später weiterzumachen, sollte man den aktuellen Stand durch SAVE ALL speichern. Vor den Filenamen wird automatisch ein »A.« gestellt. |
| LOAD ALL | lädt den gespeicherten Stand wieder. Man braucht das »A.« vor dem Filenamen nicht einzugeben. |
Natürlich kann man die Bewegungsabläufe von S.C.S. nicht in sein eigenes Programm übernehmen. Sie dienen nur zur Planung, da die Programmierung der Bewegungsabläufe fortgeschrittenen Programmierern vorbehalten ist, die sich mit der Architektur des VIC auskennen.
...komplexe Operationen
Und jetzt zu den Diskettenoperationen: Bei allen Diskettenoperationen wird automatisch der Fehlerkanal gelesen und die Directory angezeigt.
| CAT | zeigt Directory an. |
| DISK | sendet Disk-Befehle, zum Beispiel Formatieren: »N: Name, ID« und ähnliches. |
| SAVE | das Sprite wird mit all seinen dazugehörigen Daten gespeichert. Vor den Filenamen wird automatisch ein »S.« gestellt. |
| LOAD | lädt ein mit SAVE gespeichertes Sprite. Man braucht das »S.« vor dem Filenamen nicht extra eingeben, da es automatisch vor den Filenamen gestellt wird. |
| SAVE PRG | sichert nur die Blockdaten des aktuellen Sprite als Maschinenprogramm ab. Ein so gespeichertes File kann man nur mit »LOAD "Name",8,1« im Direktmodus oder von Basic aus wieder laden. Bei letzterem muß berücksichtigt werden, daß automatisch ein Start des Basic-Programms ausgeführt wird. Vor den Filenamen wird automatisch ein »P.« gestellt. Dieser Befehl ist interessant für Assembler-Anwender. |
| SAVE LDR | Hier wird direkt auf Diskette ein Basic-DATA-Lader des aktuellen Sprite generiert. Mit der Frage »BLOCK« ist gemeint, in welchem Sprite-Block das Programm die Sprite-Daten später POKEn soll. Anschließend wird nach Anfangszeilennummer und Schrittweite gefragt, vor allem, damit man das Programm später bequem mit anderen MERGEn kann. Bemerkenswerte Nebeneffekte: Wählt man als Schrittweite 0, ist das Programm zwar lauffähig, aber vor weiteren sinnvollen Eingriffen geschützt. Einen absoluten Schutz vor Basic-Laien erreicht man, indem man als Anfangszeilennummer eine Zahl zwischen 64000 und 65535 bei entsprechend geringer Schrittweite wählt. Man kann sogar einen Überlauf erreichen, so daß die Numerierung plötzlich wieder bei 0 anfängt. |
Sinnvolle Befehle, die Sie aus »S.C.S.OBJ« für eigene Programme verwenden können. AN ist die Startadresse 49152.
| SYS (AN+9) X | stellt Spriteblock X auf den Kopf. |
| SYS (AN+12) X | spiegelt ihn. Handelt es sich um ein MC-Sprite, muß man SYS (AN+15) X anfügen. |
| SYS (AN+21) X | dreht Spriteblock X um 90 Grad nach rechts. Nur für Normal-Sprites empfehlenswert. Die rechten drei Reihen gehen verloren. |
| SYS (AN+24)X,Y | rollt Block X nach links; ist Y=0, gehen die aus dem Block geschobenen Daten verloren, ist Y>0, erscheinen sie rechts wieder. |
| SYS (AN+27)X,Y | analog nach rechts |
| SYS (AN+30)X,Y | analog nach oben |
| SYS (AN+33)X,Y | analog nach unten |
| SYS (AN+36)X,Y | XORt Inhalt der Speicherzelle X mit dem 1-Byte-Wert Y |
| SYS (AN+39) X,Y,Z,"Text" | druckt Text mit Farbe Z an die Koordinaten X und Y |
| SYS (AN+51)N,X,Y | setzt Sprite Nummer N (0-7) an die Koordinaten X(0-360) und Y(0-255); Abdeckung des ganzen Bildschirmbereichs! |
| SYS (AN+57) | zeigt Directory an |
| SYS (AN+60)X | schaltet Schriftfarbe des ganzen Bildschirms auf X |
Hier muß man peinlichst darauf achten, keine falschen Parameter zu wählen, da das zum Programmabsturz führen kann.
Manche dieser Befehle können vor allem Anfängern helfen, die entworfenen Sprites im eigenen Programm erfolgreich einzusetzen. Außerdem sind die Befehle sehr schnell in der Ausführung.
Eine kleine Demonstration
Geben Sie das Programm »A.DEMO« (Listing 4) mit dem MSE ein, und laden Sie es von »S.C.S.« aus mit »LOAD ALL«.
Die acht Sprites, die jetzt geladen werden, sind Einzelteile eines großen Hubschraubers (Bild 1). Da alle Sequenzen mitgeladen werden, kann man den Hubschrauber durch »PUZZLE« über den Bildschirm fliegen lassen.

Wenn Sie »PUZZLE« eingegeben haben, drücken Sie solange den Knopf, bis alle acht Sprites auf dem Bildschirm erschienen sind. Mit <X> kommt man in die Sequenz-Eingabe. Hier existieren die Sequenzen schon, das heißt, Sie können nochmals <X> drücken.
| Empfohlene Werte für DELTA X: | 1 |
| DELTA Y: | 0 |
| VERZOEG: | 10 |
| RATE: | 1 |
Jetzt fliegt der Hubschrauber so lange über den Bildschirm, bis Sie wieder <X> drücken.
Solche und ähnliche Bewegungsabläufe kann man mit dem S.C.S. spielend realisieren.
(Carsten Führmann/og)150 a=a+1:if a=1 then load "s.c.s.obj.",8,1 160 poke 44,9:poke 9*256,0 180 poke 53280,0:poke 53281,0:poke 646,0 200 print chr$(147):for i=0 to 6:print:next 210 print "load ";chr$(34);"s.c.s.";chr$(34);",8" 220 for i=0 to 3:print:next:print "run" 230 for i=0 to 7:print chr$(145);:next 240 poke 631,13:poke 632,13 250 poke 198,2 260 new
150 A=A+1:IF A=1 THEN LOAD "S.C.S.OBJ.",8,1 160 POKE 44,9:POKE 9*256,0 180 POKE 53280,0:POKE 53281,0:POKE 646,0 200 PRINT CHR$ (147):FOR I=0 TO 6:PRINT:NEXT 210 PRINT "LOAD ";CHR$ (34);"S.C.S.";CHR$ (34);",8" 220 FOR I=0 TO 3:PRINT:NEXT :PRINT "RUN" 230 FOR I=0 TO 7:PRINT CHR$ (145);:NEXT 240 POKE 631,13:POKE 632,13 250 POKE 198,2 260 NEW
1000 rem 1010 rem ***************************** 1020 rem * * 1030 rem * sprite construction set * 1040 rem * * 1050 rem * v12.1 * 1060 rem * * 1070 rem * c64 grundversion * 1080 rem * * 1090 rem * by carsten fuehrmann * 1100 rem * * 1110 rem * hopfenleithe 21 * 1120 rem * * 1130 rem * 8521 weisendorf-buch * 1140 rem * * 1150 rem * tel. 01932/4769 * 1160 rem * * 1170 rem ***************************** 10000 : 10010 rem *** initialisieren *** 10015 : 10025 gosub 10030:goto 11330 10028 : 10030 v=53248 10040 for i=0 to 7 10050 :read b(i) 10055 :sx(i)=160:sy(i)=120 10060 :poke 2040+i,b(i) 10070 next 10080 data 11,13,14,15,32,33,34,35 10150 dim f$(15) 10160 for i=0 to 15:read f$(i):next 10170 data schwarz.,weiss...,rot..... 10180 data tuerkis.,violett.,gruen... 10190 data blau....,gelb....,orange.. 10200 data braun...,hellrot,grau 1. 10210 data grau 2.,hellgrn,hellbl. 10220 data grau 3. 10230 fr=54272:j2=56320:cf=5 10240 poke 650,128 10290 : 10300 rem *** mapro-adressen *** 10310 : 10320 nf=49152 10330 mf=nf+3:co=nf+6:ho=nf+9:nm=nf+12 10340 mm=nf+15:cl=nf+18:tu=nf+21 10350 rl=nf+24:rr=nf+27:ru=nf+30 10360 rd=nf+33:xr=nf+36:kp=nf+39 10370 bs=nf+42:ps=nf+45:sq=nf+48 10372 sp=nf+51:pu=nf+54:ct=nf+57 10374 sr=nf+60 10380 : 10390 for i=0 to 15 step 2 10400 :poke v+i,15:poke v+i+1,60 10410 next 10420 poke v+16,255 10440 mo$=ro$+"+":fi=2 10450 cl$=chr$(147):ro$=chr$(18) 10460 rf$=chr$(146):ho$=chr$(19) 10470 bk$=chr$(157):cr$=chr$(13) 10480 de$=chr$(20) 11000 : 11020 rem *** bildschirm-maske *** 11030 : 11050 m1$=ro$+" "+rf$+" "+ro$ 11060 m2$=rf$+" "+ro$+" "+rf$+" "+ro$ 11070 m3$="76543210":m3$=ro$+" "+m3$+m3$+m3$+" "+rf$ 11080 sys (kp) 0,0,cf,cl$ 11090 print m3$ 11100 print ro$;" 0";m2$ 11110 print ro$;" 3";m2$ 11120 print ro$;" 6";m2$ 11130 print ro$;" 9";m2$ 11140 print ro$;"12";m2$ 11150 print ro$;"15";m2$ 11160 print ro$;"18";m2$ 11170 print ro$;"21";m2$;"0 " 11180 print ro$;"24";m2$;"4 nummer:" 11190 print ro$;"27";m2$;"5 farbe 1: " 11200 print ro$;"30";m2$ 11210 print ro$;"33";m2$;"6 farbe 2: " 11220 print ro$;"36";m2$ 11230 print ro$;"39";m2$;"7 farbe 3: " 11240 print ro$;"42";m2$ 11250 print ro$;"45";m2$;"8 hintergr." 11260 print ro$;"48";m2$ 11270 print ro$;"51";m2$;"9 rahmen: " 11280 print ro$;"54";m2$ 11290 print ro$;"57";m2$;"a schrift: " 11300 print ro$;"60";m2$ 11310 print ro$;m1$;" vergr.:" 11320 gosub 12042 11325 return 11328 : 11330 if (peek(v+28) and fm) goto 14042 11340 goto 13045 12000 : 12020 rem *** parameteranzeige *** 12040 : 12042 fm=2^bi 12045 f(2)=peek(v+39+bi)and15 12048 f(1)=peek(v+37)and15:f(3)=peek(v+38)and15 12050 sys (kp) 30,9,cf,ro$; 12055 mc=(peek(v+28) and fm)/fm 12060 if mc goto 12100 12070 print "normal " 12080 goto 12130 12100 print "multicol " 12130 sys (kp) 37,10,cf,bi 12150 sys (kp) 28,12,cf,str$(f(1));" ";f$(f(1)) 12170 sys (kp) 28,14,cf,str$(f(2));" ";f$(f(2)) 12190 sys (kp) 28,16,cf,str$(f(3));" ";f$(f(3)) 12220 f=peek(v+33) and 15 12230 sys (kp) 28,18,cf,str$(f);" ";f$(f) 12240 f=peek(v+32) and 15 12250 sys (kp) 28,20,cf,str$(f);" ";f$(f) 12252 f=peek(55296) and 15 12260 sys (kp) 28,22,cf,str$(f);" ";f$(f) 12270 sys (kp) 37,23,cf," ";bk$;bk$; 12275 ex=(peek(v+29) and fm)/fm 12280 if ex then print "x"; 12285 ey=(peek(v+23) and fm)/fm 12290 if ey then print "y"; 12300 poke v+21,fm 12999 return 13000 : 13020 rem *** normal-editieren *** 13040 : 13045 mo$=ro$+"+" 13050 sys (nf) bi 13060 j=peek(j2) 13070 if (jand1) goto 13090 13080 :if y then y=y-1 13090 if (jand2) goto 13110 13100 :if y<20 then y=y+1 13110 if (jand4) goto 13130 13120 :if x then x=x-1 13130 if (jand8) goto 13160 13140 :if x< 23 then x=x+1 13150 : 13160 sys (kp) 2+x,2+y,f(2),mo$ 13180 get x$:if x$="" goto 13230 13190 :if x$="+" then mo$=ro$+x$:goto 13230 13200 :if x$="-" then mo$=x$:goto 13230 13210 :goto 15050 13230 if peek(653)=4 goto 16042 13240 if (jand16) goto 13400 13250 :de=b(bi)*64+3*y+int(x/8) 13260 :m=2^(7-(xand7)) 13270 :if mo$="-" goto 13350 13280 : poke de,peek(de) or m 13290 : goto 13400 13300 : 13350 : poke de,peek(de) and (255-m) 13400 goto 13050 14000 : 14020 rem *** multicolor-editieren *** 14030 : 14042 x=x and 254 14046 mo$=ro$+"0"+right$(str$(fi),1) 14048 : 14050 sys (mf) bi 14060 j=peek(j2) 14070 if (jand1) goto 14090 14080 :if y then y=y-1 14090 if (jand2) goto 14110 14100 :if y<20 then y=y+1 14110 if (jand4) goto 14130 14120 :if x then x=x-2 14130 if (jand8) goto 14160 14140 :if x<22 then x=x+2 14150 : 14160 sys (kp) 2+x,2+y,f(fi),mo$ 14180 get x$:if x$="" goto 14220 14190 if x$>="1" and x$<="3" then mo$=ro$+"0"+x$:fi=val(x$):goto 14220 14200 if x$="-" then mo$="--":goto 14220 14210 goto 15050 14220 if peek(653)=4 goto 16042 14225 if (jand16) goto 14400 14230 :de=b(bi)*64+3*y+int(x/8) 14240 :m=2^(7-(xand7)) 14250 :poke de,peek(de) and (255-m*1.5) 14260 :if mo$="--" goto 14400 14270 : poke de,peek(de) or m*(fi/2) 14400 goto 14050 15000 : 15020 rem *** parameter verstellen *** 15040 : 15050 if x$="0" then sys (xr) v+28,fm 15070 if x$="4" then bi=(bi+1) and 7 15080 if x$="5" then poke v+37,(peek(v+37)+1)and15 15090 if x$="6" then poke v+39+bi,(peek(v+39+bi)+1)and15 15100 if x$="7" then poke v+38,(peek(v+38)+1)and15 15110 if x$="8" then poke v+33,(peek(v+33)+1)and15 15120 if x$="9" then poke v+32,(peek(v+32)+1)and15 15130 if x$="x" then sys (xr) v+29,fm 15140 if x$="y" then sys (xr) v+23,fm 15150 if x$="a" then cf=(cf+1)and7:sys (sr) cf 15990 gosub 12042 15995 poke 198,0 15998 if mc goto 14042 15999 goto 13045 16000 : 16020 rem *** befehle *** 16040 : 16042 gosub 38030 16050 sys (kp)1,0,cf," befehl:" 16060 gosub 50025 16065 le$=left$(be$,3):ri$=right$(be$,3):ri=val(right$(ri$,2))and7 16070 if le$="rol" then gosub 27050 16080 if le$="cop" then gosub 20030 16090 if le$="xor" then sys (co) b(bi),b(ri),81 16100 if le$="or " then sys (co) b(bi),b(ri),17 16110 if le$="and" then sys (co) b(bi),b(ri),49 16120 if le$="swa" then sys (ho) b(bi) 16130 if le$="fli" then sys (nm) b(bi):if mc then sys (mm) b(bi) 16140 if le$="rot" then sys (tu) b(bi) 16150 if le$="cle" then sys (cl) b(bi) 16170 if le$="sav" and ri$="ldr" then gosub 29030 16180 if le$="sav" and ri$="prg" then gosub 30030 16190 if be$="save" then gosub 31030 16200 if be$="load" then gosub 32030 16210 if le$="seq" then gosub 33070 16220 if le$="dis" then gosub 42022 16229 if le$="puz" then gosub 34070 16230 if le$="cat" then gosub 41030:gosub 40050:gosub 37030:gosub 11080 16250 if le$="sav" and ri$="all" then gosub 35030 16260 if le$="loa" and ri$="all" then gosub 36030 16270 gosub 38030 16980 gosub 12042 16990 if mc goto 14042 16995 goto 13045 20000 : 20010 rem *** kopieren *** 20020 : 20030 sys (co) b(bi),b(ri),4 20040 if (peek(v+23) and 2^ri)/2^ri = (peek(v+23) and fm)/fm goto 20050 20045 sys (xr) v+23,fm 20050 if (peek(v+29) and 2^ri)/2^ri = (peek(v+29) and fm)/fm goto 20060 20055 sys (xr) v+29,fm 20060 if (peek(v+28) and 2^r)/2^ri = (peek(v+28) and fm)/fm goto 20070 20065 sys (xr) v+28,fm:mc=1-mc 20070 poke v+39+bi,peek(v+39+ri) 20999 return 27000 : 27020 rem *** verschieben *** 27040 : 27050 j=peek(j2) 27060 mo=(jand16) 27070 if (jand1) goto 27080 27075 sys (ru) b(bi),mo 27080 if (jand2) goto 27090 27085 sys (rd) b(bi),mo 27090 if (jand4) goto 27100 27092 sys (rl) b(bi),mo 27095 if mc then sys (rl) b(bi),mo 27100 if (jand8) goto 27110 27102 sys (rr) b(bi),mo 27105 if mc then sys (rr) b(bi),mo 27110 if mc=0 then sys (nf) bi 27115 if mc then sys (mf) bi 27120 get a$:if a$="x" then poke 198,0:return 27130 goto 27050 29000 : 29010 rem *** basic lader saven *** 29020 : 29030 gosub 38030 29040 print ho$;" name:" 29050 gosub 50025:f$="l."+be$ 29060 gosub 38030 29070 print ho$;" block:" 29080 gosub 50025:if vb<0 or vb>1023 goto 29080 29085 sb=vb 29090 gosub 38030 29100 print ho$;" 1.zeile:" 29102 gosub 50025:if vb<0 or vb>65535 goto 29102 29105 zn=vb 29110 gosub 38030 29120 print ho$;" schrittw:" 29125 gosub 50025:if vb<0 or vb>255 goto 29125 29130 s=vb 29135 open 1,8,1,f$ 29140 sys (bs) sb,b(bi),zn,s 29150 close1 29152 print cl$:gosub 40050 29155 gosub 41040 29158 gosub 37030 29160 goto 11080 30000 : 30010 rem *** save programm *** 30020 : 30030 gosub 38030 30040 print ho$;" name:" 30050 gosub 50025:f$="p."+be$ 30060 gosub 38030 30070 print ho$;" startadr:" 30075 gosub 50025:if vb<0 or vb>65535 goto 30075 30080 sa=vb 30090 open 1,8,1,f$ 30100 sys (ps) sa,b(bi) 30110 close 1 30112 print cl$:gosub 40050 30115 gosub 41040 30118 gosub 37030 30120 goto 11080 31000 : 31010 rem *** save *** 31020 : 31030 gosub 38030 31040 print ho$;" name:" 31050 gosub 50025:f$="s."+be$ 31060 open 1,8,1,f$ 31070 for i=0 to 62 31080 :print#1,chr$(peek(64*b(bi)+i)); 31090 next 31110 print#1,ey;cr$;ex;cr$;mc;cr$;f(1);cr$;f(2);cr$;f(3) 31120 close1 31125 print cl$:gosub 40050 31130 gosub 41040 31140 gosub 37030 31999 goto 11080 32000 : 32010 rem *** load *** 32020 : 32030 gosub 41030 32040 print ho$;" name:" 32050 gosub 50025:f$="s."+be$ 32060 open 1,8,0,f$ 32061 close 1 32062 gosub 40050 32063 if en$<>"00" then gosub 37030:goto 11080 32064 open 1,8,0,f$ 32070 for i=0 to 62 32080 :gosub 39030 32110 :poke 64*b(bi)+i,d 32120 next 32130 input#1,ey,ex,mc,f(1),f(2),f(3) 32140 poke v+23,peek(v+23) and 255-fm or ey*fm 32160 poke v+29,peek(v+29) and 255-fm or ex*fm 32180 poke v+28,peek(v+28) and 255-fm or mc*fm 32200 poke v+37,f(1) 32220 poke v+39+bi,f(2) 32240 poke v+38,f(3) 32250 close 1 32999 goto 11080 33000 : 33020 rem *** sequenz *** 33040 : 33050 rem *** seq.eingabe *** 33060 : 33070 a$="" 33080 gosub 38030 33090 print ho$;" sequenz:" 33100 ls=len(s$) 33110 sys (kp) 10,0,cf,s$;"_";str$(ls);" " 33120 if ls=0 goto 33130 33122 b2=val(mid$(s$,ls,1)) 33124 poke v+21,2^b2 33126 if mc=0 then sys (nf) b2 33128 if mc then sys (mf) b2 33130 get a$ 33140 if a$<"0" or a$>"7" goto 33170 33150 :if ls>22 goto 33170 33160 ::s$=s$+a$ 33170 if a$=cr$ goto 33230 33180 if ls and a$=de$ then s$=left$(s$,ls-1) 33190 goto 33100 33200 : 33210 rem *** kompilieren *** 33220 : 33230 for i=1 to ls 33240 :poke 51199+i,val(mid$(s$,i,1)) 33250 next 33260 poke 51199+i,99 33270 : 33280 gosub 38030 33290 print ho$;" verzoeg:" 33300 gosub 50025 33310 if vb<0 or vb>255 goto 33300 33320 sys (sq) vb 33330 poke 198,0 33340 return 34000 : 34020 rem *** puzzle *** 34040 : 34050 rem *** plazieren *** 34060 : 34070 for i=0 to 7 34080 :sys (sp) i,sx(i),sy(i) 34090 next 34100 : 34110 print cl$;" plazieren sprite";sn 34120 poke v+21,2^sn*2-1 34130 j=peek(j2) 34140 if (jand1) goto 34160 34150 if sy(sn)> 30 then sy(sn)=sy(sn)-1 34160 if (jand2) goto 34180 34170 if sy(sn)<249 then sy(sn)=sy(sn)+1 34180 if (jand4) goto 34200 34190 if sx(sn)> 1 then sx(sn)=sx(sn)-1 34200 if (jand8) goto 34220 34210 if sx(sn)<343 then sx(sn)=sx(sn)+1 34220 if (jand16) goto 34240 34230 sn=(sn+1)and7:goto 34110 34240 sys (sp) sn,sx(sn),sy(sn) 34250 get a$:if a$<>"x" goto 34130 34260 : 34270 rem *** seq.eingeben *** 34280 : 34285 ss=-1 34290 gosub 38030 34295 ss=ss+1 34300 poke v+21,2^ss*2-1 34310 a$="" 34320 print ho$;" seq.";ss;":" 34330 ls(ss)=len(s$(ss)) 34340 if ls(ss) = 0 goto 34380 34350 for i=0 to ss 34355 :m$=mid$(s$(i),ls(ss),1) 34360 :poke 2040+i,b(val(m$)) 34370 next 34380 sys (kp) 10,0,cf,s$(ss);"_";str$(ls(ss));" " 34390 get a$ 34400 if a$<"0" or a$>"7" goto 34440 34410 if ls(ss)>22 goto 34440 34420 :s$(ss)=s$(ss)+a$ 34440 ls(ss)=len(s$(ss)) 34460 if a$=cr$ and ls(ss)=ls(0) goto 34500 34470 if a$=de$ and ls(ss) then s$(ss)=left$(s$(ss),ls(ss)-1) 34480 if a$="x" goto 34540 34490 goto 34340 34500 if ss<sn goto 34290 34505 goto 34285 34510 : 34520 rem *** weiter parameter *** 34530 : 34540 print cl$;" delta x:" 34550 gosub 50025 34560 if vb<-127 or vb>128 goto 34550 34570 dx=vb 34580 print cl$;" delta y:" 34590 gosub 50025 34600 if vb<-127 or vb>128 goto 34590 34610 dy=vb 34620 print cl$;" verzoeg:" 34630 gosub 50025 34640 if vb<0 or vb>255 goto 34630 34650 d=vb 34660 print cl$;" rate:" 34670 gosub 50025 34680 if vb<1 or vb>255 goto 34630 34690 r=vb 34691 print cl$ 34692 : 34695 rem *** kompilieren *** 34698 : 34699 poke v+21,2^sn*2-1 34700 for i= 0 to ls(0)-1 34710 :for i2=0 to sn 34720 ::m$=mid$(s$(i2),i+1,1) 34725 ::pw=b(val(m$)) 34730 ::poke 51200+(sn+1)*i+i2,pw 34740 :next 34750 next 34760 poke 51200+(sn+1)*i,99 34770 : 34780 sys (pu) dxand255,dyand255,r,sn,d 34970 for i=0 to 7:poke 2040+i,b(i):next 34980 gosub 10390 34985 poke 198,0 34990 return 35000 : 35010 rem *** save all *** 35020 : 35030 gosub 38030 35040 print ho$;" name:" 35050 gosub 50025:f$="a."+be$ 35060 open 1,8,1,f$ 35061 close 1 35062 print cl$:gosub 40050 35065 if en$<>"00" then goto 35230 35066 open 1,8,15,"s:"+f$:close 1 35068 open 1,8,1,f$ 35070 for i=704 to 1023 35080 print#1,chr$(peek(i)); 35090 next 35100 for i=2048 to 2303 35110 print#1,chr$(peek(i)); 35120 next 35130 for i=v to v+46 35140 print#1,chr$(peek(i)); 35150 next 35160 print#1,bi;cr$;cf;cr$;mc;cr$;s$ 35170 for i=0 to 7 35180 print#1,sx(i);cr$;sy(i);cr$;s$(i) 35200 next 35215 close 1 35230 gosub 41040 35240 gosub 37030 35250 goto 11080 36000 : 36010 rem *** load all *** 36020 : 36030 gosub 41030 36040 print ho$;" name" 36050 gosub 50025:f$="a."+be$ 36060 open 1,8,0,f$:close 1 36070 gosub 40050 36080 if en$<>"00" then gosub 37030:goto 11080 36090 open 1,8,0,f$ 36100 for i=704 to 1023 36110 gosub 39030:poke i,d 36120 next 36130 for i=2048 to 2303 36140 gosub 39030:poke i,d 36150 next 36160 for i=v to v+46 36170 gosub 39030:poke i,d 36180 next 36190 input#1,bi,cf,mc,s$ 36195 sys (sr) cf 36200 for i=0 to 7 36210 input#1,sx(i),sy(i),s$(i) 36220 next 36228 close 1 36230 goto 11080 37000 : 37010 rem *** auf taste warten *** 37020 : 37030 poke 198,0:wait 198,1:poke 198,0 37040 return 38000 : 38010 rem *** obere zeile loeschen *** 38020 : 38030 print ho$;" " 38040 return 39000 : 39010 rem *** disk-get *** 39020 : 39030 get#1,d$:if d$="" then d$=chr$(0) 39040 d=asc(d$) 39999 return 40000 : 40010 rem *** fehlerkanal *** 40020 : 40050 open 1,8,15 40060 input#1,en$,e$,sp$,se$ 40070 gosub 38030 40080 print ho$;" ";en$;",";e$;",";sp$;",";se$ 40090 close 1 40999 return 41000 : 41010 rem *** katalog *** 41020 : 41030 print cl$ 41040 sys ct:close 1 41050 return 42000 : 42010 rem *** disk-befehle *** 42020 : 42022 gosub 41030 42030 gosub 38030 42040 print ho$;" disk-bef:" 42050 gosub 50025 42060 open 1,8,15,be$ 42070 close 1 42080 print cl$:gosub 40050 42090 gosub 41040 42100 gosub 37030 42110 goto 11080 42999 return 50000 : 50010 rem *** eingabe *** 50020 : 50025 be$="" 50028 a$="":print ho$," " 50029 sys (kp) 11,0,cf,be$;"_ " 50030 get a$:if a$="" goto 50030 50040 ls=len(be$) 50050 if a$<" " or a$>"z" goto 50120 50060 if ls>26 goto 50120 50070 :be$=be$+a$ 50120 if ls and a$=de$ then be$=left$(be$,ls-1) 50140 if a$<>cr$ goto 50029 50150 vb=val(be$) 50999 return
1000 REM 1010 REM ***************************** 1020 REM * * 1030 REM * SPRITE CONSTRUCTION SET * 1040 REM * * 1050 REM * V12.1 * 1060 REM * * 1070 REM * C64 GRUNDVERSION * 1080 REM * * 1090 REM * BY CARSTEN FUEHRMANN * 1100 REM * * 1110 REM * HOPFENLEITHE 21 * 1120 REM * * 1130 REM * 8521 WEISENDORF-BUCH * 1140 REM * * 1150 REM * TEL. 01932/4769 * 1160 REM * * 1170 REM ***************************** 10000 : 10010 REM *** INITIALISIEREN *** 10015 : 10025 GOSUB 10030:GOTO 11330 10028 : 10030 V=53248 10040 FOR I=0 TO 7 10050 :READ B(I) 10055 :SX(I)=160:SY(I)=120 10060 :POKE 2040+I,B(I) 10070 NEXT 10080 DATA 11,13,14,15,32,33,34,35 10150 DIM F$(15) 10160 FOR I=0 TO 15:READ F$(I):NEXT 10170 DATA SCHWARZ.,WEISS...,ROT..... 10180 DATA TUERKIS.,VIOLETT.,GRUEN... 10190 DATA BLAU....,GELB....,ORANGE.. 10200 DATA BRAUN...,HELLROT,GRAU 1. 10210 DATA GRAU 2.,HELLGRN,HELLBL. 10220 DATA GRAU 3. 10230 FR=54272:J2=56320:CF=5 10240 POKE 650,128 10290 : 10300 REM *** MAPRO-ADRESSEN *** 10310 : 10320 NF=49152 10330 MF=NF+3:CO=NF+6:HO=NF+9:NM=NF+12 10340 MM=NF+15:CL=NF+18:TU=NF+21 10350 RL=NF+24:RR=NF+27:RU=NF+30 10360 RD=NF+33:XR=NF+36:KP=NF+39 10370 BS=NF+42:PS=NF+45:SQ=NF+48 10372 SP=NF+51:PU=NF+54:CT=NF+57 10374 SR=NF+60 10380 : 10390 FOR I=0 TO 15 STEP 2 10400 :POKE V+I,15:POKE V+I+1,60 10410 NEXT 10420 POKE V+16,255 10440 MO$=RO$+"+":FI=2 10450 CL$=CHR$ (147):RO$=CHR$ (18) 10460 RF$=CHR$ (146):HO$=CHR$ (19) 10470 BK$=CHR$ (157):CR$=CHR$ (13) 10480 DE$=CHR$ (20) 11000 : 11020 REM *** BILDSCHIRM-MASKE *** 11030 : 11050 M1$=RO$+"{27SPACE}"+RF$+" "+RO$ 11060 M2$=RF$+"{24SPACE}"+RO$+" "+RF$+" "+RO$ 11070 M3$="76543210":M3$=RO$+"{2SPACE}"+M3$+M3$+M3$+" "+RF$ 11080 SYS (KP) 0,0,CF,CL$ 11090 PRINT M3$ 11100 PRINT RO$;" 0";M2$ 11110 PRINT RO$;" 3";M2$ 11120 PRINT RO$;" 6";M2$ 11130 PRINT RO$;" 9";M2$ 11140 PRINT RO$;"12";M2$ 11150 PRINT RO$;"15";M2$ 11160 PRINT RO$;"18";M2$ 11170 PRINT RO$;"21";M2$;"0 " 11180 PRINT RO$;"24";M2$;"4 NUMMER:" 11190 PRINT RO$;"27";M2$;"5 FARBE 1: " 11200 PRINT RO$;"30";M2$ 11210 PRINT RO$;"33";M2$;"6 FARBE 2: " 11220 PRINT RO$;"36";M2$ 11230 PRINT RO$;"39";M2$;"7 FARBE 3: " 11240 PRINT RO$;"42";M2$ 11250 PRINT RO$;"45";M2$;"8 HINTERGR." 11260 PRINT RO$;"48";M2$ 11270 PRINT RO$;"51";M2$;"9 RAHMEN:{2SPACE}" 11280 PRINT RO$;"54";M2$ 11290 PRINT RO$;"57";M2$;"A SCHRIFT: " 11300 PRINT RO$;"60";M2$ 11310 PRINT RO$;M1$;"{2SPACE}VERGR.:" 11320 GOSUB 12042 11325 RETURN 11328 : 11330 IF (PEEK (V+28) AND FM) GOTO 14042 11340 GOTO 13045 12000 : 12020 REM *** PARAMETERANZEIGE *** 12040 : 12042 FM=2^BI 12045 F(2)=PEEK (V+39+BI)AND 15 12048 F(1)=PEEK (V+37)AND 15:F(3)=PEEK (V+38)AND 15 12050 SYS (KP) 30,9,CF,RO$; 12055 MC=(PEEK (V+28) AND FM)/FM 12060 IF MC GOTO 12100 12070 PRINT "NORMAL{3SPACE}" 12080 GOTO 12130 12100 PRINT "MULTICOL " 12130 SYS (KP) 37,10,CF,BI 12150 SYS (KP) 28,12,CF,STR$ (F(1));" ";F$(F(1)) 12170 SYS (KP) 28,14,CF,STR$ (F(2));" ";F$(F(2)) 12190 SYS (KP) 28,16,CF,STR$ (F(3));" ";F$(F(3)) 12220 F=PEEK (V+33) AND 15 12230 SYS (KP) 28,18,CF,STR$ (F);" ";F$(F) 12240 F=PEEK (V+32) AND 15 12250 SYS (KP) 28,20,CF,STR$ (F);" ";F$(F) 12252 F=PEEK (55296) AND 15 12260 SYS (KP) 28,22,CF,STR$ (F);" ";F$(F) 12270 SYS (KP) 37,23,CF,"{2SPACE}";BK$;BK$; 12275 EX=(PEEK (V+29) AND FM)/FM 12280 IF EX THEN PRINT "X"; 12285 EY=(PEEK (V+23) AND FM)/FM 12290 IF EY THEN PRINT "Y"; 12300 POKE V+21,FM 12999 RETURN 13000 : 13020 REM *** NORMAL-EDITIEREN *** 13040 : 13045 MO$=RO$+"+" 13050 SYS (NF) BI 13060 J=PEEK (J2) 13070 IF (JAND 1) GOTO 13090 13080 :IF Y THEN Y=Y-1 13090 IF (JAND 2) GOTO 13110 13100 :IF Y<20 THEN Y=Y+1 13110 IF (JAND 4) GOTO 13130 13120 :IF X THEN X=X-1 13130 IF (JAND 8) GOTO 13160 13140 :IF X< 23 THEN X=X+1 13150 : 13160 SYS (KP) 2+X,2+Y,F(2),MO$ 13180 GET X$:IF X$="" GOTO 13230 13190 :IF X$="+" THEN MO$=RO$+X$:GOTO 13230 13200 :IF X$="-" THEN MO$=X$:GOTO 13230 13210 :GOTO 15050 13230 IF PEEK (653)=4 GOTO 16042 13240 IF (JAND 16) GOTO 13400 13250 :DE=B(BI)*64+3*Y+INT (X/8) 13260 :M=2^(7-(XAND 7)) 13270 :IF MO$="-" GOTO 13350 13280 : POKE DE,PEEK (DE) OR M 13290 : GOTO 13400 13300 : 13350 : POKE DE,PEEK (DE) AND (255-M) 13400 GOTO 13050 14000 : 14020 REM *** MULTICOLOR-EDITIEREN *** 14030 : 14042 X=X AND 254 14046 MO$=RO$+"0"+RIGHT$ (STR$ (FI),1) 14048 : 14050 SYS (MF) BI 14060 J=PEEK (J2) 14070 IF (JAND 1) GOTO 14090 14080 :IF Y THEN Y=Y-1 14090 IF (JAND 2) GOTO 14110 14100 :IF Y<20 THEN Y=Y+1 14110 IF (JAND 4) GOTO 14130 14120 :IF X THEN X=X-2 14130 IF (JAND 8) GOTO 14160 14140 :IF X<22 THEN X=X+2 14150 : 14160 SYS (KP) 2+X,2+Y,F(FI),MO$ 14180 GET X$:IF X$="" GOTO 14220 14190 IF X$>="1" AND X$<="3" THEN MO$=RO$+"0"+X$:FI=VAL (X$):GOTO 14220 14200 IF X$="-" THEN MO$="--":GOTO 14220 14210 GOTO 15050 14220 IF PEEK (653)=4 GOTO 16042 14225 IF (JAND 16) GOTO 14400 14230 :DE=B(BI)*64+3*Y+INT (X/8) 14240 :M=2^(7-(XAND 7)) 14250 :POKE DE,PEEK (DE) AND (255-M*1.5) 14260 :IF MO$="--" GOTO 14400 14270 : POKE DE,PEEK (DE) OR M*(FI/2) 14400 GOTO 14050 15000 : 15020 REM *** PARAMETER VERSTELLEN *** 15040 : 15050 IF X$="0" THEN SYS (XR) V+28,FM 15070 IF X$="4" THEN BI=(BI+1) AND 7 15080 IF X$="5" THEN POKE V+37,(PEEK (V+37)+1)AND 15 15090 IF X$="6" THEN POKE V+39+BI,(PEEK (V+39+BI)+1)AND 15 15100 IF X$="7" THEN POKE V+38,(PEEK (V+38)+1)AND 15 15110 IF X$="8" THEN POKE V+33,(PEEK (V+33)+1)AND 15 15120 IF X$="9" THEN POKE V+32,(PEEK (V+32)+1)AND 15 15130 IF X$="X" THEN SYS (XR) V+29,FM 15140 IF X$="Y" THEN SYS (XR) V+23,FM 15150 IF X$="A" THEN CF=(CF+1)AND 7:SYS (SR) CF 15990 GOSUB 12042 15995 POKE 198,0 15998 IF MC GOTO 14042 15999 GOTO 13045 16000 : 16020 REM *** BEFEHLE *** 16040 : 16042 GOSUB 38030 16050 SYS (KP)1,0,CF," BEFEHL:" 16060 GOSUB 50025 16065 LE$=LEFT$ (BE$,3):RI$=RIGHT$ (BE$,3):RI=VAL (RIGHT$ (RI$,2))AND 7 16070 IF LE$="ROL" THEN GOSUB 27050 16080 IF LE$="COP" THEN GOSUB 20030 16090 IF LE$="XOR" THEN SYS (CO) B(BI),B(RI),81 16100 IF LE$="OR " THEN SYS (CO) B(BI),B(RI),17 16110 IF LE$="AND" THEN SYS (CO) B(BI),B(RI),49 16120 IF LE$="SWA" THEN SYS (HO) B(BI) 16130 IF LE$="FLI" THEN SYS (NM) B(BI):IF MC THEN SYS (MM) B(BI) 16140 IF LE$="ROT" THEN SYS (TU) B(BI) 16150 IF LE$="CLE" THEN SYS (CL) B(BI) 16170 IF LE$="SAV" AND RI$="LDR" THEN GOSUB 29030 16180 IF LE$="SAV" AND RI$="PRG" THEN GOSUB 30030 16190 IF BE$="SAVE" THEN GOSUB 31030 16200 IF BE$="LOAD" THEN GOSUB 32030 16210 IF LE$="SEQ" THEN GOSUB 33070 16220 IF LE$="DIS" THEN GOSUB 42022 16229 IF LE$="PUZ" THEN GOSUB 34070 16230 IF LE$="CAT" THEN GOSUB 41030:GOSUB 40050:GOSUB 37030:GOSUB 11080 16250 IF LE$="SAV" AND RI$="ALL" THEN GOSUB 35030 16260 IF LE$="LOA" AND RI$="ALL" THEN GOSUB 36030 16270 GOSUB 38030 16980 GOSUB 12042 16990 IF MC GOTO 14042 16995 GOTO 13045 20000 : 20010 REM *** KOPIEREN *** 20020 : 20030 SYS (CO) B(BI),B(RI),4 20040 IF (PEEK (V+23) AND 2^RI)/2^RI = (PEEK (V+23) AND FM)/FM GOTO 20050 20045 SYS (XR) V+23,FM 20050 IF (PEEK (V+29) AND 2^RI)/2^RI = (PEEK (V+29) AND FM)/FM GOTO 20060 20055 SYS (XR) V+29,FM 20060 IF (PEEK (V+28) AND 2^R)/2^RI = (PEEK (V+28) AND FM)/FM GOTO 20070 20065 SYS (XR) V+28,FM:MC=1-MC 20070 POKE V+39+BI,PEEK (V+39+RI) 20999 RETURN 27000 : 27020 REM *** VERSCHIEBEN *** 27040 : 27050 J=PEEK (J2) 27060 MO=(JAND 16) 27070 IF (JAND 1) GOTO 27080 27075 SYS (RU) B(BI),MO 27080 IF (JAND 2) GOTO 27090 27085 SYS (RD) B(BI),MO 27090 IF (JAND 4) GOTO 27100 27092 SYS (RL) B(BI),MO 27095 IF MC THEN SYS (RL) B(BI),MO 27100 IF (JAND 8) GOTO 27110 27102 SYS (RR) B(BI),MO 27105 IF MC THEN SYS (RR) B(BI),MO 27110 IF MC=0 THEN SYS (NF) BI 27115 IF MC THEN SYS (MF) BI 27120 GET A$:IF A$="X" THEN POKE 198,0:RETURN 27130 GOTO 27050 29000 : 29010 REM *** BASIC LADER SAVEN *** 29020 : 29030 GOSUB 38030 29040 PRINT HO$;" NAME:" 29050 GOSUB 50025:F$="L."+BE$ 29060 GOSUB 38030 29070 PRINT HO$;" BLOCK:" 29080 GOSUB 50025:IF VB<0 OR VB>1023 GOTO 29080 29085 SB=VB 29090 GOSUB 38030 29100 PRINT HO$;" 1.ZEILE:" 29102 GOSUB 50025:IF VB<0 OR VB>65535 GOTO 29102 29105 ZN=VB 29110 GOSUB 38030 29120 PRINT HO$;" SCHRITTW:" 29125 GOSUB 50025:IF VB<0 OR VB>255 GOTO 29125 29130 S=VB 29135 OPEN 1,8,1,F$ 29140 SYS (BS) SB,B(BI),ZN,S 29150 CLOSE 1 29152 PRINT CL$:GOSUB 40050 29155 GOSUB 41040 29158 GOSUB 37030 29160 GOTO 11080 30000 : 30010 REM *** SAVE PROGRAMM *** 30020 : 30030 GOSUB 38030 30040 PRINT HO$;" NAME:" 30050 GOSUB 50025:F$="P."+BE$ 30060 GOSUB 38030 30070 PRINT HO$;" STARTADR:" 30075 GOSUB 50025:IF VB<0 OR VB>65535 GOTO 30075 30080 SA=VB 30090 OPEN 1,8,1,F$ 30100 SYS (PS) SA,B(BI) 30110 CLOSE 1 30112 PRINT CL$:GOSUB 40050 30115 GOSUB 41040 30118 GOSUB 37030 30120 GOTO 11080 31000 : 31010 REM *** SAVE *** 31020 : 31030 GOSUB 38030 31040 PRINT HO$;" NAME:" 31050 GOSUB 50025:F$="S."+BE$ 31060 OPEN 1,8,1,F$ 31070 FOR I=0 TO 62 31080 :PRINT#1,CHR$ (PEEK (64*B(BI)+I)); 31090 NEXT 31110 PRINT#1,EY;CR$;EX;CR$;MC;CR$;F(1);CR$;F(2);CR$;F(3) 31120 CLOSE 1 31125 PRINT CL$:GOSUB 40050 31130 GOSUB 41040 31140 GOSUB 37030 31999 GOTO 11080 32000 : 32010 REM *** LOAD *** 32020 : 32030 GOSUB 41030 32040 PRINT HO$;" NAME:" 32050 GOSUB 50025:F$="S."+BE$ 32060 OPEN 1,8,0,F$ 32061 CLOSE 1 32062 GOSUB 40050 32063 IF EN$<>"00" THEN GOSUB 37030:GOTO 11080 32064 OPEN 1,8,0,F$ 32070 FOR I=0 TO 62 32080 :GOSUB 39030 32110 :POKE 64*B(BI)+I,D 32120 NEXT 32130 INPUT#1,EY,EX,MC,F(1),F(2),F(3) 32140 POKE V+23,PEEK (V+23) AND 255-FM OR EY*FM 32160 POKE V+29,PEEK (V+29) AND 255-FM OR EX*FM 32180 POKE V+28,PEEK (V+28) AND 255-FM OR MC*FM 32200 POKE V+37,F(1) 32220 POKE V+39+BI,F(2) 32240 POKE V+38,F(3) 32250 CLOSE 1 32999 GOTO 11080 33000 : 33020 REM *** SEQUENZ *** 33040 : 33050 REM *** SEQ.EINGABE *** 33060 : 33070 A$="" 33080 GOSUB 38030 33090 PRINT HO$;" SEQUENZ:" 33100 LS=LEN (S$) 33110 SYS (KP) 10,0,CF,S$;"←";STR$ (LS);"{2SPACE}" 33120 IF LS=0 GOTO 33130 33122 B2=VAL (MID$ (S$,LS,1)) 33124 POKE V+21,2^B2 33126 IF MC=0 THEN SYS (NF) B2 33128 IF MC THEN SYS (MF) B2 33130 GET A$ 33140 IF A$<"0" OR A$>"7" GOTO 33170 33150 :IF LS>22 GOTO 33170 33160 ::S$=S$+A$ 33170 IF A$=CR$ GOTO 33230 33180 IF LS AND A$=DE$ THEN S$=LEFT$ (S$,LS-1) 33190 GOTO 33100 33200 : 33210 REM *** KOMPILIEREN *** 33220 : 33230 FOR I=1 TO LS 33240 :POKE 51199+I,VAL (MID$ (S$,I,1)) 33250 NEXT 33260 POKE 51199+I,99 33270 : 33280 GOSUB 38030 33290 PRINT HO$;" VERZOEG:" 33300 GOSUB 50025 33310 IF VB<0 OR VB>255 GOTO 33300 33320 SYS (SQ) VB 33330 POKE 198,0 33340 RETURN 34000 : 34020 REM *** PUZZLE *** 34040 : 34050 REM *** PLAZIEREN *** 34060 : 34070 FOR I=0 TO 7 34080 :SYS (SP) I,SX(I),SY(I) 34090 NEXT 34100 : 34110 PRINT CL$;" PLAZIEREN SPRITE";SN 34120 POKE V+21,2^SN*2-1 34130 J=PEEK (J2) 34140 IF (JAND 1) GOTO 34160 34150 IF SY(SN)> 30 THEN SY(SN)=SY(SN)-1 34160 IF (JAND 2) GOTO 34180 34170 IF SY(SN)<249 THEN SY(SN)=SY(SN)+1 34180 IF (JAND 4) GOTO 34200 34190 IF SX(SN)> 1 THEN SX(SN)=SX(SN)-1 34200 IF (JAND 8) GOTO 34220 34210 IF SX(SN)<343 THEN SX(SN)=SX(SN)+1 34220 IF (JAND 16) GOTO 34240 34230 SN=(SN+1)AND 7:GOTO 34110 34240 SYS (SP) SN,SX(SN),SY(SN) 34250 GET A$:IF A$<>"X" GOTO 34130 34260 : 34270 REM *** SEQ.EINGEBEN *** 34280 : 34285 SS=-1 34290 GOSUB 38030 34295 SS=SS+1 34300 POKE V+21,2^SS*2-1 34310 A$="" 34320 PRINT HO$;" SEQ.";SS;":" 34330 LS(SS)=LEN (S$(SS)) 34340 IF LS(SS) = 0 GOTO 34380 34350 FOR I=0 TO SS 34355 :M$=MID$ (S$(I),LS(SS),1) 34360 :POKE 2040+I,B(VAL (M$)) 34370 NEXT 34380 SYS (KP) 10,0,CF,S$(SS);"←";STR$ (LS(SS));"{2SPACE}" 34390 GET A$ 34400 IF A$<"0" OR A$>"7" GOTO 34440 34410 IF LS(SS)>22 GOTO 34440 34420 :S$(SS)=S$(SS)+A$ 34440 LS(SS)=LEN (S$(SS)) 34460 IF A$=CR$ AND LS(SS)=LS(0) GOTO 34500 34470 IF A$=DE$ AND LS(SS) THEN S$(SS)=LEFT$ (S$(SS),LS(SS)-1) 34480 IF A$="X" GOTO 34540 34490 GOTO 34340 34500 IF SS<SN GOTO 34290 34505 GOTO 34285 34510 : 34520 REM *** WEITER PARAMETER *** 34530 : 34540 PRINT CL$;" DELTA X:" 34550 GOSUB 50025 34560 IF VB<-127 OR VB>128 GOTO 34550 34570 DX=VB 34580 PRINT CL$;" DELTA Y:" 34590 GOSUB 50025 34600 IF VB<-127 OR VB>128 GOTO 34590 34610 DY=VB 34620 PRINT CL$;" VERZOEG:" 34630 GOSUB 50025 34640 IF VB<0 OR VB>255 GOTO 34630 34650 D=VB 34660 PRINT CL$;" RATE:" 34670 GOSUB 50025 34680 IF VB<1 OR VB>255 GOTO 34630 34690 R=VB 34691 PRINT CL$ 34692 : 34695 REM *** KOMPILIEREN *** 34698 : 34699 POKE V+21,2^SN*2-1 34700 FOR I= 0 TO LS(0)-1 34710 :FOR I2=0 TO SN 34720 ::M$=MID$ (S$(I2),I+1,1) 34725 ::PW=B(VAL (M$)) 34730 ::POKE 51200+(SN+1)*I+I2,PW 34740 :NEXT 34750 NEXT 34760 POKE 51200+(SN+1)*I,99 34770 : 34780 SYS (PU) DXAND 255,DYAND 255,R,SN,D 34970 FOR I=0 TO 7:POKE 2040+I,B(I):NEXT 34980 GOSUB 10390 34985 POKE 198,0 34990 RETURN 35000 : 35010 REM *** SAVE ALL *** 35020 : 35030 GOSUB 38030 35040 PRINT HO$;" NAME:" 35050 GOSUB 50025:F$="A."+BE$ 35060 OPEN 1,8,1,F$ 35061 CLOSE 1 35062 PRINT CL$:GOSUB 40050 35065 IF EN$<>"00" THEN GOTO 35230 35066 OPEN 1,8,15,"S:"+F$:CLOSE 1 35068 OPEN 1,8,1,F$ 35070 FOR I=704 TO 1023 35080 PRINT#1,CHR$ (PEEK (I)); 35090 NEXT 35100 FOR I=2048 TO 2303 35110 PRINT#1,CHR$ (PEEK (I)); 35120 NEXT 35130 FOR I=V TO V+46 35140 PRINT#1,CHR$ (PEEK (I)); 35150 NEXT 35160 PRINT#1,BI;CR$;CF;CR$;MC;CR$;S$ 35170 FOR I=0 TO 7 35180 PRINT#1,SX(I);CR$;SY(I);CR$;S$(I) 35200 NEXT 35215 CLOSE 1 35230 GOSUB 41040 35240 GOSUB 37030 35250 GOTO 11080 36000 : 36010 REM *** LOAD ALL *** 36020 : 36030 GOSUB 41030 36040 PRINT HO$;" NAME" 36050 GOSUB 50025:F$="A."+BE$ 36060 OPEN 1,8,0,F$:CLOSE 1 36070 GOSUB 40050 36080 IF EN$<>"00" THEN GOSUB 37030:GOTO 11080 36090 OPEN 1,8,0,F$ 36100 FOR I=704 TO 1023 36110 GOSUB 39030:POKE I,D 36120 NEXT 36130 FOR I=2048 TO 2303 36140 GOSUB 39030:POKE I,D 36150 NEXT 36160 FOR I=V TO V+46 36170 GOSUB 39030:POKE I,D 36180 NEXT 36190 INPUT#1,BI,CF,MC,S$ 36195 SYS (SR) CF 36200 FOR I=0 TO 7 36210 INPUT#1,SX(I),SY(I),S$(I) 36220 NEXT 36228 CLOSE 1 36230 GOTO 11080 37000 : 37010 REM *** AUF TASTE WARTEN *** 37020 : 37030 POKE 198,0:WAIT 198,1:POKE 198,0 37040 RETURN 38000 : 38010 REM *** OBERE ZEILE LOESCHEN *** 38020 : 38030 PRINT HO$;"{39SPACE}" 38040 RETURN 39000 : 39010 REM *** DISK-GET *** 39020 : 39030 GET #1,D$:IF D$="" THEN D$=CHR$ (0) 39040 D=ASC (D$) 39999 RETURN 40000 : 40010 REM *** FEHLERKANAL *** 40020 : 40050 OPEN 1,8,15 40060 INPUT#1,EN$,E$,SP$,SE$ 40070 GOSUB 38030 40080 PRINT HO$;" ";EN$;",";E$;",";SP$;",";SE$ 40090 CLOSE 1 40999 RETURN 41000 : 41010 REM *** KATALOG *** 41020 : 41030 PRINT CL$ 41040 SYS CT:CLOSE 1 41050 RETURN 42000 : 42010 REM *** DISK-BEFEHLE *** 42020 : 42022 GOSUB 41030 42030 GOSUB 38030 42040 PRINT HO$;" DISK-BEF:" 42050 GOSUB 50025 42060 OPEN 1,8,15,BE$ 42070 CLOSE 1 42080 PRINT CL$:GOSUB 40050 42090 GOSUB 41040 42100 GOSUB 37030 42110 GOTO 11080 42999 RETURN 50000 : 50010 REM *** EINGABE *** 50020 : 50025 BE$="" 50028 A$="":PRINT HO$,"{14SPACE}" 50029 SYS (KP) 11,0,CF,BE$;"← " 50030 GET A$:IF A$="" GOTO 50030 50040 LS=LEN (BE$) 50050 IF A$<" " OR A$>"Z" GOTO 50120 50060 IF LS>26 GOTO 50120 50070 :BE$=BE$+A$ 50120 IF LS AND A$=DE$ THEN BE$=LEFT$ (BE$,LS-1) 50140 IF A$<>CR$ GOTO 50029 50150 VB=VAL (BE$) 50999 RETURN
PROGRAMM : S.C.S.OBJ. C000 C72B ----------------------------------- C000 : 4C BF C0 4C 1B C1 4C AA 2C C008 : C1 4C C8 C1 4C 06 C2 4C F2 C010 : 49 C2 4C 84 C2 4C 91 C2 B8 C018 : 4C 03 C3 4C 38 C3 4C 6F 12 C020 : C3 4C AD C3 4C EB C3 4C B9 C028 : F9 C3 4C 13 C4 4C F9 C4 98 C030 : 4C 24 C5 4C 7A C5 4C AD EC C038 : C5 4C A5 C6 4C 0D C7 A0 F3 C040 : 52 84 50 A0 04 84 51 A0 E7 C048 : FF 84 53 84 FC 60 86 FE DA C050 : A5 53 18 0A 0A 0A 90 02 1D C058 : E6 FE 18 65 50 48 A5 FE 4C C060 : 65 51 85 FE 68 18 65 FB 84 C068 : 85 FD 90 02 E6 FE 60 20 78 C070 : FD AE 20 F4 B7 8A 29 FC D9 C078 : 4A 4A 85 4F 8A 29 03 0A 45 C080 : 0A 0A 0A 0A 0A 85 4E 85 64 C088 : 52 60 20 72 C0 4C F1 B7 06 C090 : 20 F4 B7 8A 48 BD F8 07 CE C098 : AA 20 76 C0 68 AA 60 80 66 C0A0 : 40 20 10 08 04 02 01 C0 CB C0A8 : C0 30 30 0C 0C 03 03 80 F4 C0B0 : 01 40 02 20 04 10 08 08 47 C0B8 : 10 04 20 02 40 01 80 20 61 C0C0 : 90 C0 BD 27 D0 85 52 20 C7 C0C8 : 3F C0 E6 53 C8 C0 03 D0 CC C0D0 : 0D A0 00 A5 50 18 69 10 6E C0D8 : 85 50 90 02 E6 51 A9 00 89 C0E0 : 85 FB A6 FB BD 9F C0 85 73 C0E8 : FC A2 00 20 4E C0 A1 4E 48 C0F0 : 25 FC D0 07 A9 20 81 FD 46 C0F8 : 4C 0A C1 A9 CF 81 FD A9 43 C100 : D4 18 65 FE 85 FE A5 52 A5 C108 : 81 FD E6 FB A5 FB C9 08 32 C110 : D0 D0 E6 4E A5 53 C9 3E 64 C118 : D0 B0 60 20 90 C0 BD 27 B1 C120 : D0 8D 01 C9 AD 25 D0 8D 93 C128 : 00 C9 AD 26 D0 8D 02 C9 52 C130 : 20 3F C0 E6 53 E6 FC A5 A8 C138 : FC C9 03 D0 0F A9 00 85 3D C140 : FC A5 50 18 69 10 85 50 F4 C148 : 90 02 E6 51 A9 00 85 FB 66 C150 : A0 00 B1 4E A6 FB 3D A7 B5 C158 : C0 A2 00 48 29 55 F0 01 75 C160 : C8 68 29 AA F0 02 C8 C8 D0 C168 : 20 4E C0 C0 00 F0 1C A9 43 C170 : CF 81 FD E6 FD A9 F7 81 6C C178 : FD A5 FE 18 69 D4 85 FE 5C C180 : B9 FF C8 81 FD C6 FD 81 AC C188 : FD 50 08 A9 20 81 FD E6 B8 C190 : FD 81 FD E6 FB E6 FB A5 DC C198 : FB C9 08 D0 B3 E6 4E D0 E1 C1A0 : 02 E6 4F A5 53 C9 3E D0 BC C1A8 : 8A 60 20 72 C0 85 50 A5 7D C1B0 : 4F 85 51 20 FD AE 20 8A 05 C1B8 : C0 8E C0 C1 A0 3E B1 4E 87 C1C0 : 11 50 91 50 88 10 F7 60 11 C1C8 : 20 72 C0 A9 3C 85 50 A9 0B C1D0 : C8 85 51 A2 15 A0 00 B1 BD C1D8 : 4E 91 50 C8 C0 03 D0 F7 73 C1E0 : A5 4E 18 69 03 85 4E A5 C0 C1E8 : 50 38 E9 03 85 50 CA D0 D7 C1F0 : E4 A2 04 A5 52 85 50 A5 B9 C1F8 : 4F 85 51 A9 00 85 4E A9 4C C200 : C8 85 4F 4C B9 C1 20 72 F7 C208 : C0 A9 15 85 FD A9 02 85 D3 C210 : 50 A9 C8 85 51 A2 00 A9 95 C218 : 03 85 FC 8A A8 81 50 A1 89 C220 : 4E 39 AF C0 F0 07 A1 50 7D C228 : 19 B0 C0 81 50 C8 C8 C0 EA C230 : 10 D0 EC C6 50 E6 4E C6 BF C238 : FC D0 E0 A9 06 18 65 50 61 C240 : 85 50 C6 FD D0 D1 4C F1 0F C248 : C1 20 72 C0 A9 3F 85 53 1F C250 : A0 00 A2 00 A1 4E 39 A7 5A C258 : C0 48 29 55 F0 01 E8 68 BD C260 : 29 AA F0 02 E8 E8 E0 00 B4 C268 : F0 0D E0 03 F0 09 A2 00 59 C270 : A1 4E 59 A7 C0 81 4E C8 66 C278 : C8 C0 08 D0 D5 E6 4E C6 18 C280 : 53 D0 CD 60 20 72 C0 A9 A7 C288 : 00 A0 3F 91 4E 88 10 FB 3C C290 : 60 A9 00 85 4E A9 C8 85 D6 C298 : 4F 85 FE 20 87 C2 20 72 61 C2A0 : C0 A5 4F 85 FC A2 00 A9 F0 C2A8 : 14 85 52 A9 14 85 53 A5 4F C2B0 : 52 0A 18 65 52 85 FB A5 47 C2B8 : 53 29 18 4A 4A 4A 65 FB 74 C2C0 : 65 4E 85 FB A9 14 38 E5 15 C2C8 : 52 85 14 29 18 4A 4A 4A 99 C2D0 : 85 FD A5 53 0A 18 65 53 C5 C2D8 : 65 FD 85 FD A5 53 29 07 04 C2E0 : A8 A1 FB 39 9F C0 F0 0C 5B C2E8 : A5 14 29 07 A8 A1 FD 19 84 C2F0 : 9F C0 81 FD C6 53 10 B7 C6 C2F8 : C6 52 10 AF A5 4E 85 52 69 C300 : 4C F1 C1 20 8A C0 A0 00 EA C308 : 18 13 4E A9 00 99 00 C8 D1 C310 : 90 04 FB 00 C8 18 20 2D C9 C318 : C3 20 2D C3 E0 00 F0 07 8F C320 : B9 FE C7 11 4E 91 4E C8 A9 C328 : C0 3F D0 DC 60 C8 13 4E 8D C330 : 90 05 88 F3 4E C8 18 60 30 C338 : 20 8A C0 A0 3E 18 53 4E 70 C340 : A9 00 99 00 C8 90 04 7B 68 C348 : 00 C8 18 20 60 C3 20 60 1C C350 : C3 E0 00 F0 07 B9 02 C8 79 C358 : 11 4E 91 4E 88 10 DE 60 04 C360 : 88 53 4E 90 09 C8 A9 80 B6 C368 : 11 4E 91 4E 88 18 60 20 DA C370 : 8A C0 A0 00 B1 4E 99 00 76 C378 : C8 C8 C0 03 D0 F6 B1 4E 5D C380 : 88 88 88 91 4E C8 C8 C8 80 C388 : C8 C0 3F D0 F1 88 88 88 31 C390 : E0 00 F0 0F A2 00 BD 00 AF C398 : C8 91 4E E8 C8 E0 03 D0 1B C3A0 : F5 F0 09 8A 91 4E E8 C8 62 C3A8 : E0 03 D0 F8 60 20 8A C0 10 C3B0 : A5 4F 85 51 A5 4E 18 69 88 C3B8 : 03 85 50 A0 3E B1 4E 99 84 C3C0 : 00 C8 88 C0 3B D0 F6 B1 D8 C3C8 : 4E 91 50 88 10 F9 C8 E0 BA C3D0 : 00 F0 0F A2 3C BD 00 C8 A4 C3D8 : 91 4E E8 C8 C0 03 D0 F5 37 C3E0 : F0 08 8A 91 4E C8 C0 03 DD C3E8 : D0 F9 60 20 EB B7 86 52 0C C3F0 : A2 00 A1 14 45 52 81 14 92 C3F8 : 60 20 F4 B7 8A 48 20 F1 EC C400 : B7 68 A8 18 20 F0 FF 20 E2 C408 : F1 B7 8E 86 02 20 FD AE C0 C410 : 4C A4 AA 20 72 C0 85 50 41 C418 : A5 4F 85 51 20 6F C0 20 B1 C420 : FD AE 20 EB B7 86 52 A2 38 C428 : 01 20 C9 FF A9 01 20 DD 8A C430 : ED A9 08 20 DD ED 20 DD 81 C438 : ED 20 DD ED A5 14 20 DD A2 C440 : ED A5 15 20 DD ED A0 03 1F C448 : 98 48 B9 E5 C4 20 DD ED D0 C450 : 68 A8 88 10 F3 A6 50 A5 31 C458 : 51 20 CD BD A0 02 98 48 F1 C460 : B9 E9 C4 20 DD ED 68 A8 83 C468 : 88 10 F3 A5 50 18 69 3E 92 C470 : AA A5 51 20 CD BD A0 0C AB C478 : 98 48 B9 EC C4 20 DD ED E1 C480 : 68 A8 88 10 F3 85 53 A9 6C C488 : 63 20 DD ED 20 DD ED 18 09 C490 : A5 14 65 52 85 14 90 02 22 C498 : E6 15 A5 14 20 DD ED A5 E9 C4A0 : 15 20 DD ED A9 83 20 DD ED C4A8 : ED A9 20 20 DD ED A9 00 6A C4B0 : 85 FB A2 00 A1 4E AA A9 66 C4B8 : 00 20 CD BD E6 4E E6 FB 68 C4C0 : A5 FB C9 09 F0 07 A9 2C 3D C4C8 : 20 DD ED 90 E5 A9 00 20 50 C4D0 : DD ED E6 53 A5 53 C9 07 F2 C4D8 : D0 AD A9 00 20 DD ED 20 D2 C4E0 : DD ED 4C CC FF B2 4E 20 6F C4E8 : 81 20 A4 20 00 82 3A 51 46 C4F0 : 2C 4E 20 97 3A 51 20 87 FC C4F8 : 3A 20 8A AD 20 F7 B7 20 7B C500 : 6F C0 A2 01 20 C9 FF A5 34 C508 : 14 20 DD ED A5 15 20 DD A1 C510 : ED A0 00 98 48 B1 4E 20 EC C518 : DD ED 68 A8 C8 C0 3F D0 4C C520 : F2 4C CC FF 20 F4 B7 E8 C6 C528 : 8E 5E C5 A0 00 98 48 B9 C4 C530 : 00 C8 C9 63 D0 06 68 A0 93 C538 : FF 4C 6F C5 AA 20 93 C0 6D C540 : 48 0A AA BD B0 C0 8D 15 61 C548 : D0 2D 1C D0 F0 08 68 AA 16 C550 : 20 1E C1 4C 5B C5 68 AA 54 C558 : 20 C2 C0 68 A8 A2 FF 8A CB C560 : 48 A2 00 CA EA EA EA EA DA C568 : D0 F9 68 AA CA D0 F0 A5 E6 C570 : CB C9 17 D0 01 60 C8 4C CF C578 : 2D C5 20 F4 B7 8A 0A 48 B7 C580 : 20 FD AE 20 EB B7 68 A8 BE C588 : B9 B0 C0 85 50 A5 15 F0 E2 C590 : 08 AD 10 D0 05 50 4C A0 D2 C598 : C5 A5 50 49 FF 2D 10 D0 B8 C5A0 : 8D 10 D0 A5 14 99 00 D0 CE C5A8 : 8A 99 01 D0 60 20 F4 B7 A3 C5B0 : 86 4E 20 F1 B7 86 4F 20 D1 C5B8 : F1 B7 86 50 20 F1 B7 86 AE C5C0 : 51 8A 0A AA E8 86 53 20 7E C5C8 : F1 B7 E8 8E 8D C6 A0 10 52 C5D0 : B9 00 D0 99 00 C9 88 10 81 C5D8 : F7 A2 00 86 52 A4 53 18 B9 C5E0 : A5 4F 2A B0 11 B9 00 D0 4E C5E8 : 18 65 4F B0 6C 99 00 D0 D2 C5F0 : 88 88 10 F1 30 0F B9 00 61 C5F8 : D0 18 65 4F 90 5B 99 00 62 C600 : D0 88 88 10 F1 A4 53 18 FA C608 : A5 4E 2A B0 26 88 B9 00 03 C610 : D0 18 65 4E 85 FB 90 13 B0 C618 : B9 B0 C0 2D 10 D0 D0 39 3C C620 : B9 B0 C0 4D 10 D0 8D 10 E9 C628 : D0 A5 FB 99 00 D0 88 10 C6 C630 : DC 30 31 88 B9 00 D0 18 91 C638 : 65 4E 85 FB B0 13 B9 B0 91 C640 : C0 2D 10 D0 F0 13 B9 B0 A5 C648 : C0 4D 10 D0 8D 10 D0 A5 B5 C650 : FB 99 00 D0 88 10 DC 30 0F C658 : 0B A0 10 B9 00 C9 99 00 A3 C660 : D0 88 10 F7 E8 E4 50 D0 10 C668 : 23 A5 52 38 65 51 85 52 95 C670 : A8 B9 00 C8 C9 63 D0 04 11 C678 : A0 00 84 52 A2 00 B9 00 95 C680 : C8 9D F8 07 C8 E8 E0 08 9D C688 : D0 F4 A2 00 A0 FF 98 48 78 C690 : A0 00 A5 CB C9 17 F0 0B 42 C698 : 88 D0 F7 68 A8 88 D0 EE 83 C6A0 : 4C DD C5 68 60 A9 24 85 48 C6A8 : FB A9 FB 85 BB A9 00 85 3B C6B0 : BC A9 01 85 B7 A9 08 85 26 C6B8 : BA A9 60 85 B9 20 D5 F3 EB C6C0 : A5 BA 20 B4 FF A5 B9 20 B5 C6C8 : 96 FF A9 00 85 90 A0 03 2E C6D0 : 84 FB 20 A5 FF 85 FC A4 78 C6D8 : 90 D0 2F 20 A5 FF A4 90 AE C6E0 : D0 28 A4 FB 88 D0 E9 A6 71 C6E8 : FC 20 CD BD A9 20 20 D2 E1 C6F0 : FF 20 A5 FF A6 90 D0 12 BF C6F8 : AA F0 06 20 D2 FF 4C F1 E2 C700 : C6 A9 0D 20 D2 FF A0 02 96 C708 : D0 C6 4C 42 F6 20 F4 B7 4A C710 : 8A A0 D8 84 4F A0 00 84 B4 C718 : 4E 91 4E C8 D0 02 E6 4F 33 C720 : C0 E8 D0 F5 A6 4F E0 DB 67 C728 : D0 EF 60 49
PROGRAMM : A.DEMO AAAA AD96 ----------------------------------- AAAA : A0 80 00 00 80 00 00 B0 F4 AAB2 : 2B 00 B0 6F C0 B1 7F F0 71 AABA : BD 9F FC B9 9F FC A9 57 F4 AAC2 : 58 A9 55 68 AA 55 68 2A 9C AACA : 55 A0 0A 96 A0 02 AA A4 D3 AAD2 : 08 AA 00 08 80 00 08 80 5A AADA : 00 AA AA 80 55 55 80 55 97 AAE2 : 56 00 AA A8 00 00 8B E3 EE AAEA : 83 A4 7C A5 1A A7 E4 A7 55 AAF2 : 86 AE 00 00 00 00 4C 48 91 AAFA : B2 00 31 EA 66 FE 47 FE CF AB02 : 4A F3 91 F2 0E F2 50 F2 A8 AB0A : 33 F3 57 F1 CA F1 ED F6 2D AB12 : 3E F1 2F F3 66 FE A5 F4 72 AB1A : ED F5 00 00 00 00 00 00 02 AB22 : 00 00 00 00 00 00 00 0A 37 AB2A : AA 00 00 00 00 00 00 00 D5 AB32 : 00 01 C0 00 01 4C 00 01 57 AB3A : 50 00 01 6A AA AA 52 A0 A2 AB42 : 20 0C 28 88 00 02 AA 00 3E AB4A : 00 08 00 00 22 00 00 22 B5 AB52 : 00 00 22 00 00 22 00 00 EC AB5A : 22 00 2A AA 00 25 55 00 DB AB62 : 09 55 00 02 AA 00 00 01 03 AB6A : 50 00 00 40 00 00 40 00 C4 AB72 : 00 60 00 00 68 00 00 6A FE AB7A : 00 00 6B 00 00 02 00 00 65 AB82 : 02 00 00 03 00 00 00 00 E5 AB8A : 00 00 00 00 00 00 00 00 8B AB92 : 00 00 00 00 00 00 00 00 93 AB9A : 00 00 00 00 00 00 00 00 9B ABA2 : 00 00 00 00 00 00 AA A0 8E ABAA : 00 80 00 00 80 00 00 B0 54 ABB2 : 2B 00 B0 6F C0 B1 7F F0 71 ABBA : BD 9F FC B9 9F FC A9 57 F4 ABC2 : 58 A9 55 68 AA 55 68 2A 9C ABCA : 55 A0 0A 96 A0 02 AA A4 D3 ABD2 : 08 AA 00 08 80 00 08 80 5A ABDA : 00 AA AA 80 55 55 80 55 97 ABE2 : 56 00 AA A8 00 00 02 AA 55 ABEA : AA 00 00 00 00 00 00 00 95 ABF2 : 00 01 30 00 01 40 00 01 93 ABFA : 5C 00 01 5A AA AA 42 A0 2C AC02 : 20 30 28 88 00 02 AA 00 10 AC0A : 00 08 00 00 22 00 00 22 75 AC12 : 00 00 22 00 00 22 00 00 AC AC1A : 22 00 2A AA 00 25 55 00 9B AC22 : 09 55 00 02 AA 00 00 01 C3 AC2A : 50 00 00 40 00 00 40 00 84 AC32 : 00 60 00 00 68 00 00 6B C0 AC3A : 00 00 6A 00 00 02 00 00 E5 AC42 : 03 00 00 00 00 00 00 00 46 AC4A : 00 00 00 00 00 00 00 00 4B AC52 : 00 00 00 00 00 00 00 00 53 AC5A : 00 00 00 00 00 00 00 00 5B AC62 : 00 00 00 00 00 00 00 00 63 AC6A : 00 00 00 00 00 00 00 00 6B AC72 : 00 00 00 00 00 00 00 00 73 AC7A : 00 00 00 00 00 00 00 00 7B AC82 : 00 00 00 00 00 00 00 00 83 AC8A : 80 00 20 00 00 A8 00 00 58 AC92 : 22 00 00 08 00 00 00 00 B6 AC9A : 00 00 00 00 00 00 00 00 9B ACA2 : 00 00 00 00 00 00 00 00 A3 ACAA : 00 00 00 00 00 00 00 00 AB ACB2 : 00 00 00 00 00 00 00 00 B3 ACBA : 00 00 00 00 00 00 00 00 BB ACC2 : 00 00 00 00 00 00 00 00 C3 ACCA : 00 00 02 80 00 0A A0 00 2E ACD2 : AA 80 00 2A 00 00 02 00 0A ACDA : 00 00 00 00 00 00 00 00 DB ACE2 : 00 00 00 00 00 00 0F 3C 97 ACEA : 0F 3C 0F 3C 0F 3C 0F 3C EA ACF2 : 0F 3C 0F 3C 0F 3C FF 1B 74 ACFA : 14 EE F2 80 C8 00 15 7B 2A AD02 : F0 00 FF 00 00 80 F0 F0 9C AD0A : F1 F2 F3 FB F1 FC FC FC E5 AD12 : FC FC FC F7 F2 20 30 20 FC AD1A : 0D 20 32 20 0D 20 31 20 9F AD22 : 0D 30 33 0D 20 31 30 31 65 AD2A : 20 0D 20 31 31 32 20 0D 3E AD32 : 30 33 0D 20 37 37 20 0D 0B AD3A : 20 31 31 32 20 0D 31 34 1D AD42 : 0D 20 35 33 20 0D 20 31 60 AD4A : 31 33 20 0D 32 35 0D 20 00 AD52 : 31 31 38 20 0D 20 38 33 47 AD5A : 20 0D 33 30 0D 20 39 34 F3 AD62 : 20 0D 20 38 33 20 0D 34 E9 AD6A : 31 0D 20 37 31 20 0D 20 99 AD72 : 38 34 20 0D 35 32 0D 20 C7 AD7A : 31 34 33 20 0D 20 38 34 B1 AD82 : 20 0D 36 37 0D 20 31 32 98 AD8A : 37 20 0D 20 31 31 31 20 BA AD92 : 0D 37 36 0D A7