C 64
Grafik-Anwendung

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.

Bildschirmfoto des Sprite-Editors: Rastergitter mit einem Sprite, daneben ein Menü von 0 MULTICOL bis VERGR.

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.

Bildschirmfoto: Schriftzug PLAZIEREN SPRITE 2 und ein aus Sprites zusammengesetzter Hubschrauber
Bild 1. Der Hubschrauber aus den Demo-Daten

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 
Listing 1. Das Ladeprogramm »S.C.S. BOOT« geben Sie bitte mit dem Checksummer ein
|
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 
Listing 2. Das Hauptprogramm »S.C.S.«, mehr als nur ein Sprite-Editor
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
Listing 3. Den Maschinenspracheteil »S.C.S.OBJ.« geben Sie bitte mit dem MSE ein
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
Listing 4. Ein paar Demo-Daten zum Abschluß
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →