Der Sprite-Editor
Wollen Sie sich etwas näher mit den Sprites beschäftigen und experimentieren? Dann ist unsere Sprite-Bibliothek genau das richtige für Sie!
Wir haben für Sie ein Programm vorbereitet, welches es Ihnen ermöglicht, eigene Sprites zu entwickeln und zu verändern. Zusätzlich besteht die Möglichkeit, Sprites aus fremden Programmen zu betrachten und zu manipulieren. Wenn Sie Listing 1 mit Hilfe des MSE (zu finden in diesem Heft) abgetippt haben, können Sie es unter dem Namen »EDE.MA« auf Diskette speichern. Der eigentliche Sprite-Editor ist in Listing 2 abgedruckt (bitte unter dem Namen »EDE« speichern). Bevor Sie mit dem Sprite-Editor arbeiten, sollten Sie den Computer kurz aus- und einschalten und das Ladeprogramm (Listing 3) neu in den Computer laden. Dies ist notwendig, da der Sprite-Editor nicht an der üblichen Stelle im Speicher abgelegt wird, sondern ab Adresse 16384 arbeitet.
Nachdem Sie das Ladeprogramm gestartet haben, werden der Editor und die Assemblerroutinen geladen. In der linken Hälfte des Bildschirms erscheint nun das Bitmuster des aktuellen Sprites. In der rechten oberen Ecke wird eine Zahlenreihe ausgedruckt, die den Zustand der acht Sprites darstellt. Das aktuelle Sprite wird durch eine weiße Ziffer gekennzeichnet, eine revers dargestellte Ziffer repräsentiert ein eingeschaltenes Sprite. Unter der Zahlenreihe wird der Block, aus dem die Form des aktuellen Sprites gelesen wird, angezeigt. »Sprite«, »Multi1« und »Multi2« zeigen die Spritefarbe und die beiden Multicolor-Farben. Im »Work-Modus«, in dem Sie sich jetzt befinden, können Sie die folgenden Funktionen abrufen:
0 bis 7: wählen das aktuelle Sprite an.
+ und -: schalten aktuelles Sprite ein beziehungsweise aus.
Die Cursortasten : bewegen das Sprite über den Bildschirm.
F1, F3, F5: verändern die Spritefarben.
X: vergrößert das Sprite in X-Richtung (SHIFT X macht Vergrößerung wieder rückgängig).
Y: analog zu X, jedoch in Y-Richtung.
M: schaltet den Multicolor-Modus ein (SHIFT M ändert den Zustand wieder in den Singlecolor-Modus).
B: zählt die Blocknummer aufwärts (Shift B zählt abwärts). Bitte beachten Sie, daß Sie die Blöcke 0 bis 31 sowie die Blöcke 64 bis 127 nicht benutzen können.
A: Mit dieser Funktion können Sie die Werte zur Sprite-Animation festlegen. Die erscheinende Zahlenreihe zeigt die Reihenfolge der Sprites, in der sie beim Aufruf der Animations-Funktion erscheinen. Hierauf müssen Sie die Anzahl der Bewegungsphasen eingeben (maximal 9) und die entsprechenden Sprites, welche erscheinen sollen. Zu guter Letzt können Sie die Verzögerung bestimmen, mit welcher die Animation ablaufen soll (0 bis 9). Die Eingabe kann vorzeitig unterbrochen werden, indem Sie die RETURN-Taste drücken (Die RETURN-Taste ohne Eingabe bewirkt übrigens auch bei allen weiteren Funktionen einen vorzeitigen Abbruch).
SHIFT A: ruft die Animations-Routine auf (Um Sie wieder zu stoppen, müssen Sie irgendeine Taste drücken).
C: Hiermit ist es möglich, einen Block in einen anderen zu kopieren. Der Quellblock wird in den Zielblock kopiert, sobald Sie die entsprechenden Daten eingegeben haben.
D: gibt das Directory Ihrer Diskette auf dem Bildschirm aus.
S: ermöglicht es Ihnen, Ihre Spritedaten auf Diskette zu speichern.
L: lädt die Spritedaten wieder in den Speicher zurück.
P: erzeugt aus Ihren Spritedaten entsprechende DATA-Zeilen. Zu Beginn der Funktion werden Sie nach dem Block gefragt, welcher in DATA-Zeilen umgewandelt werden soll. Wenn Sie nun die Zeilennummer, mit der die DATA-Zeilen beginnen, und den Abstand der Zeilen eingeben, wird ein eigenständiges Basic-Programm generiert.
SHIFT P : stoppt den Sprite-Editor und legt den Basic-Programmstart auf die Adresse, in der Ihre DATA-Zeilen erzeugt wurden. Sie könnten dieses Programm nun speichern oder erweitern. Es gibt jedoch auch die Möglichkeit, in den Sprite-Editor zurückzukehren und weitere Sprites in Ihr Programm aufzunehmen. Geben Sie »POKE 44,64:RUN« ein und alles ist wieder beim alten.
F1, F3, F5: verändern die Spritefarben.
F7: Mit dieser Taste kommen Sie aus dem »Work-Modus« in den »Design-Modus« und umgekehrt. Im »Design-Modus« ist es möglich, die Form des Sprites zu verändern, indem Sie mit den Cursortasten den in der linken oberen Ecke erscheinenden Stern auf dem Bitmuster Ihres Sprites umherbewegen (HOME, CLR und RETURN behalten ihre ursprüngliche Funktion). Aber Achtung! Versuchen Sie nicht, die Sprite-Blöcke 0 bis 32 zu ändern, da Sie hierbei direkt in Speicherbereiche eingreifen, die vom Betriebssystem benötigt werden. Änderungen können den Computer zum Absturz bringen! Hier nun die weiteren Befehle:
F1, F3, F5: setzen einen Punkt in der entsprechenden Farbe (SPRITE, MULTI1, MULTI2). Falls Ihr Sprite im Singlecolor-Modus dargestellt wird, funktioniert natürlich nur F1.
F2: löscht einen Punkt.
[ und ]: verschieben das gesamte Bitmuster nach links beziehungsweise nach rechts.
@ und /: analog zu oben, jedoch in vertikaler Richtung.
X: spiegelt das Bitmuster an der X-Achse
Y: spiegelt an der Y-Achse
(Thomas Erhart/dm)PROGRAMM : EDE.MA C030 C289 ----------------------------------- C030 : A9 04 85 FE A9 00 8D 35 58 C038 : 03 8D 36 03 A9 29 85 FD E6 C040 : A9 80 8D 34 03 AC 35 03 84 C048 : B1 FB 2D 34 03 AA 8C 35 EB C050 : 03 AC 36 03 A9 A0 E0 00 BA C058 : D0 02 A9 2E 91 FD C8 8C 9F C060 : 36 03 C0 18 D0 12 A9 00 8F C068 : 8D 36 03 18 A5 FD 69 28 14 C070 : 85 FD A5 FE 69 00 85 FE E8 C078 : AD 34 03 18 6A 8D 34 03 ED C080 : 90 C3 EE 35 03 AC 35 03 C5 C088 : C0 3F D0 B4 60 EA EA EA 91 C090 : EA EA EA EA A9 29 85 FD FD C098 : A9 04 85 FE A0 00 A2 00 19 C0A0 : B1 FD C9 A0 D0 02 E8 E8 69 C0A8 : C8 B1 FD C9 A0 D0 01 E8 68 C0B0 : E0 00 D0 02 A9 2E E0 01 96 C0B8 : D0 02 A9 B2 E0 02 D0 02 AF C0C0 : A9 B1 E0 03 D0 02 A9 B3 05 C0C8 : 91 FD 88 91 FD C8 C8 C0 77 C0D0 : 18 D0 CB 18 A5 FD 69 28 86 C0D8 : 85 FD A5 FE 69 00 85 FE 50 C0E0 : C9 07 D0 B8 A5 FD C9 71 CC C0E8 : D0 B2 60 EA EA EA A0 00 0F C0F0 : C8 C8 B1 FB 29 01 C9 00 CA C0F8 : 18 F0 01 38 88 88 B1 FB 5B C100 : 6A 91 FB C8 B1 FB 6A 91 12 C108 : FB C8 B1 FB 6A 91 FB C8 08 C110 : C0 3F D0 DC 60 EA A0 3E 9C C118 : 88 88 B1 FB 29 80 C9 00 8E C120 : 18 F0 01 38 C8 C8 B1 FB 89 C128 : 2A 91 FB 88 B1 FB 2A 91 F1 C130 : FB 88 B1 FB 2A 91 FB 88 8B C138 : C0 FF D0 DC 60 EA A0 3E 24 C140 : B1 FB 99 C0 02 88 C0 3B 4B C148 : D0 F6 B1 FB C8 C8 C8 91 98 C150 : FB 88 88 88 88 C0 FF D0 F3 C158 : F1 C8 B9 FC 02 91 FB C0 D9 C160 : 02 D0 F6 60 EA EA A0 00 1C C168 : B1 FB 99 C0 02 C8 C0 03 05 C170 : D0 F6 B1 FB 88 88 88 91 B9 C178 : FB C8 C8 C8 C8 C0 3F D0 54 C180 : F1 88 B9 84 02 91 FB C0 D2 C188 : 3C D0 F6 60 EA EA A0 00 7E C190 : 8C 39 03 A2 3C B1 FB 9D 4A C198 : C0 02 C8 E8 EE 39 03 AD C9 C1A0 : 39 03 C9 03 D0 0B A9 00 3A C1A8 : 8D 39 03 CA CA CA CA CA B0 C1B0 : CA C0 3F D0 E0 A0 00 B9 4B C1B8 : C0 02 91 FB C8 C0 3F D0 8E C1C0 : F6 60 00 00 A0 00 B1 FB AF C1C8 : C8 C8 AA B1 FB 8D C0 02 08 C1D0 : 8A 91 FB 88 88 AD C0 02 30 C1D8 : 91 FB C8 C8 C8 C0 3F D0 E3 C1E0 : E5 A0 00 A2 08 B1 FB 4A FC C1E8 : 91 FB 8C 39 03 8A A8 AE 46 C1F0 : 39 03 3E C0 02 8C 39 03 C2 C1F8 : 8A A8 AE 39 03 CA E0 00 B3 C200 : D0 E3 C8 C0 3F D0 DC 18 2A C208 : 90 AB EA EA EA EA EA EA 0D C210 : A9 24 85 FB A9 FB 85 BB B4 C218 : A9 00 85 BC A9 01 85 B7 E2 C220 : A9 08 85 BA A9 60 85 B9 AD C228 : 20 D5 F3 A5 BA 20 B4 FF 64 C230 : A5 B9 20 96 FF A9 00 85 E5 C238 : 90 A0 03 84 FB 20 A5 FF C1 C240 : 85 FC A4 90 D0 2F 20 A5 D1 C248 : FF A4 90 D0 28 A4 FB 88 80 C250 : D0 E9 A6 FC 20 CD BD A9 19 C258 : 20 20 D2 FF 20 A5 FF A6 B9 C260 : 90 D0 12 AA F0 06 20 D2 98 C268 : FF 18 90 F0 A9 0D 20 D2 DF C270 : FF A0 02 D0 C6 20 42 F6 BE C278 : 60 EA EA EA EA EA A9 20 52 C280 : 20 20 20 20 20 20 20 20 80 C288 : 20 52
9 rem -----------------
10 rem 49200 norm
11 rem 49300 multi
12 rem 49390 right
13 rem 49430 left
14 rem 49470 down
15 rem 49510 up
16 rem 49550 mirro y
17 rem 49604 mirro x
18 rem 49680 directo
19 rem -----------------
50 if peek(2)>64 then poke 46,peek(2):clr
51 poke 56,100
100 poke 53280,11
101 poke 53281,11
102 v=53248:poke 650,128
103 for aa=0 to 15 step 2 :poke v+aa,0:poke v+aa+1,100:next:poke v+16,255
104 for aa=2040 to 2047:pokeaa,s(aa-2040):next
110 print"{clr}{lgrn}O{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}P"
115 for aa=0 to 20:print"{CBM-G}........................{CBM-M}":next
120 print"L{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{SHIFT-@}"
130 print"{home}{down}{down}"tab(29)"{rvon} sprite ":if sp>7 then sp=7
131 printtab(29)"{rvon} multi1 "
132 printtab(29)"{rvon} multi2 "
133 print"{home}{down}"tab(27)"block : {left}{left}{left}{left}"s(sp)
134 print"{home}{down}{down}{down}{down}{down}"tab(29)" ";:mm=1
135 if (peek(v+28)and(2^sp))<>0thenprint"{left}{left}{left}{left}{left}{left}{left}{left} multic ":mm=2
136 print"{home}"tab(29)"01234567"
140 for aa=29 to 36
141 poke 55376+aa,peek(v+39+sp)
142 poke 55416+aa,peek(v+37)
143 poke 55456+aa,peek(v+38)
144 if peek(198)<>0 then 146
145 if (peek(v+21)and(2^(aa-29)))<>0 then poke 1024+aa,peek(1024+aa)or128
146 next
147 poke 55296+29+sp,1
150 ad=s(sp)*64:ah=int(ad/256):al=ad-ah*256
151 poke251,al:poke 252,ah
152 sys 49200:if (peek(v+28)and(2^sp))<>0 then sys 49300
180 if m=1 then 300
190 goto 290
200 get k$:if k$=""then 200
205 if k$="{f7}"then m=1:goto 299
210 if k$="+"then poke v+21,peek(v+21)or(2^sp):goto 136
211 if k$="-"then poke v+21,peek(v+21)and(255-(2^sp)):goto 136
212 if k$="x"then poke v+29,peek(v+29)or(2^sp):goto 200
213 if k$="X"then poke v+29,peek(v+29)and(255-(2^sp)):goto 200
214 if k$="y"then poke v+23,peek(v+23)or(2^sp):goto 200
215 if k$="Y"then poke v+23,peek(v+23)and(255-(2^sp)):goto 200
216 if k$="m"then poke v+28,peek(v+28)or(2^sp):goto 134
217 if k$="M"then poke v+28,peek(v+28)and(255-(2^sp)):goto 134
220 if val(k$)<>0 or k$="0" then sp=val(k$):goto 130
221 if k$="{up}"then poke v+sp*2+1,abs(peek(v+sp*2+1)-1):if peek(197)<>64 then 221
222 if k$="{down}"then poke v+sp*2+1,abs(peek(v+sp*2+1)+1):if peek(197)<>64 then 222
223 if k$="{left}"then poke v+sp*2,abs(peek(v+sp*2)-1):if peek(197)<>64 then 223
224 if k$="{rght}"then poke v+sp*2,abs(peek(v+sp*2)+1):if peek(197)<>64 then 224
225 if k$="b"then s(sp)=s(sp)+1:goto 228
226 if k$="B"then s(sp)=s(sp)-1:goto 228
227 goto 230
228 if s(sp)<11 or s(sp)>255 then s(sp)=s(sp)-sgn(s(sp)-50)
229 print"{home}{down}"tab(34)s(sp):poke 2040+sp,s(sp):if peek(197)<>64 then 225
230 if k$="{f1}"then poke v+sp+39,(peek(v+sp+39)+1)and15:goto 140
231 if k$="{f3}"then poke v+37,(peek(v+37)+1)and15:goto 140
232 if k$="{f5}"then poke v+38,(peek(v+38)+1)and15:goto 140
240 if k$="a"then 500
241 if k$="A"then 550
242 if k$="d"then 600
243 if k$="l"then 610
244 if k$="s"then 610
245 if k$="p"then print"{clr}":goto 650
246 if k$="c"then 800
247 if k$="P"then poke 2,peek(46):poke56,160:poke 44,100:poke 46,150:clr:end
280 if k$="b"ork$="B"then 150
290 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}"tab(30)" work "
298 goto 200
299 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}"tab(30)"design":x=0:y=0:i=peek(1065)
300 get k$:if k$=""then 300
305 if k$="{f7}"then m=0:poke 1065+x+y*40,i:goto 290
310 if k$="{up}" then yr=-1
311 if k$="{down}" then yr=+1
312 if k$="{left}" then xr=-1
313 if k$="{rght}" then xr=+1
315 if yr<>0 or xr<>0 then 360
320 if k$=";"then for aa=1 to mm:sys 49390:next:goto 150
321 if k$=":"then for aa=1 to mm:sys 49430:next:goto 150
322 if k$="@"then sys 49510:goto 150
323 if k$="/"then sys 49470:goto 150
324 if k$="x"then sys 49604:goto 150
325 if k$="y"then sys 49550:goto 150
335 if k$="{f1}"then i=160+(mm-1)*17:f=1:goto 400
336 if k$="{f2}"then i=46 :f=0:goto 400
337 if mm=1 then 340
338 if k$="{f3}"then i=178:f=2:goto 400
339 if k$="{f5}"then i=179:f=3:goto 400
340 if k$="{clr}"then for aa=0 to 63:poke s(sp)*64+aa,0:next:goto 150
341 if k$="{home}"then xr=-x/mm:yr=-y
342 if k$=chr$(13) then xr=-x/mm:yr=1
355 if yr=0 and xr=0 then 300
360 poke 1065+x+y*40,i:if mm=2 then poke 1066+x+y*40,i
362 x=x+xr*mm:xr=0:if x>23 then x=0:yr=1
363 if x<0 then x=24-mm:yr=-1
364 y=y+yr:yr=0:if y>20 then y=0
365 if y<0 then y=20
366 i=peek(1065+x+y*40)
367 poke 1065+x+y*40,42
380 goto 300
400 ad=s(sp)*64+y*3+x/8
420 ap=7-(x/8-int(x/8))*8
425 xr=1
430 if mm=1 then 480
440 poke ad,peek(ad)and(255-(2^ap+2^(ap-1)))
450 poke ad,peek(ad)or((fand1)*2^ap+((fand2)/2)*2^(ap-1))
460 goto 355
480 poke ad,peek(ad)and(255-(2^ap))
490 poke ad,peek(ad)or((fand1)*2^ap)
495 goto 355
500 be=peek(v+21):poke v+21,0
505 print"{home}{down}{down}{down}{down}{down}{down}{down}"tab(28);:for aa=1 to 9:print right$(str$(bs(aa)),1);:next
506 print
510 printtab(28)"{down}anzahl :";
511 get k$:if k$=""then 511
512 if k$=chr$(13) then 540
513 ba=val(k$):if ba=0 then 511
514 printba:print
515 for w=1 to ba
520 printtab(28)"sp";w;"{left}:";
521 get k$:if k$=""then 521
522 if k$=chr$(13) then 540
523 bs(w)=val(k$):if bs(w)>7 then 521
524 printbs(w)
525 next
530 printtab(28)"{down}verzoeger";
531 get k$:if k$=""then 531
532 if k$=chr$(13) then 540
533 bv=val(k$)
540 poke v+21,be
541 print"{home}{down}{down}{down}{down}{down}{down}":for w=0 to 14
542 print tab(28)" "
543 next
544 goto 200
550 be=peek(v+21):poke v+21,1
560 for aa=1 to ba
570 poke 2040,s(bs(aa))
575 for w=0 to bv*100:next
580 next
585 get k$:if k$=""then 560
587 poke v+21,be
588 poke 2040,s(0)
590 goto 200
600 print"{clr}"
601 sys 49680
602 get k$:if k$=""then 602
603 goto 110
610 print"{clr}"
620 n$="":input"name ";n$
621 if n$=""then 110
625 if k$="s"then 650
630 open 2,8,2,n$+",p,r"
631 get#2,n1$:if n1$=""then 633
632 n1=asc(n1$)
633 get#2,n2$:if n2$=""then 635
634 n2=asc(n2$)
635 close 2
636 if (n1=199) and (n2=199) then 640
638 load n$,8,1
640 open 1,8,15:input#1,f1$,f2$,f3$,f4$
641 print"{rvon} "f2$" {down}"
642 close 1:goto 620
650 bs=0:input"startblock ";bs
651 if bs=0 then 110
652 if bs<1 or bs>255 then print"{up}{up}":goto 650
653 ifk$="p"then 700
655 be=0:input"endblock ";be
656 if be=0 then 110
657 if be<1 or be>255 then print"{up}{up}":goto 655
658 if sgn(be-bs)=-1 then print"{up}{up}{up}":goto 650
660 open 2,8,1,n$+",p,w"
665 s=bs*64:sh=int(s/256):sl=s-sh*256
666 print#2,chr$(sl);
667 print#2,chr$(sh);
670 for aa=s to (be+1)*64
671 print#2,chr$(peek(aa));
675 next
678 close 2
680 goto 110
700 input "zeilennummer";zn
710 input "abstand ";za
720 print"{clr}{down}{down}{down}{down}{down}{down}pO56,160:pO44,100:pO46,150:clr:{down}{down}"
721 for aa=0 to 3
722 print zn+za*aa;"data";
725 for ab=0 to 15
726 print mid$(str$(peek(bs*64+ab+aa*16))+",",2,5);
728 next:print"{left} ":next:print"poke 44,64:run"
730 for aa=0 to 5:poke 631+aa,13:next
731 poke 198,6
732 print"{home}{down}{down}{down}"
733 poke 2,peek(46):end
800 print"{clr}"
810 input"quellblock ";qb
811 if qb=0 then 110
815 input"zielblock ";qz
816 if qz=0 then 110
820 for aa=0 to 63:poke qz*64+aa,peek(qb*64+aa):next
825 goto 110
9 REM ----------------- 10 REM 49200 NORM 11 REM 49300 MULTI 12 REM 49390 RIGHT 13 REM 49430 LEFT 14 REM 49470 DOWN 15 REM 49510 UP 16 REM 49550 MIRRO Y 17 REM 49604 MIRRO X 18 REM 49680 DIRECTO 19 REM ----------------- 50 IF PEEK (2)>64 THEN POKE 46,PEEK (2):CLR 51 POKE 56,100 100 POKE 53280,11 101 POKE 53281,11 102 V=53248:POKE 650,128 103 FOR AA=0 TO 15 STEP 2 :POKE V+AA,0:POKE V+AA+1,100:NEXT :POKE V+16,255 104 FOR AA=2040 TO 2047:POKE AA,S(AA-2040):NEXT 110 PRINT"{CLR,LIG.GREEN}OYYYYYYYYYYYYYYYYYYYYYYYYP" 115 FOR AA=0 TO 20:PRINT"G........................M":NEXT 120 PRINT"LPPPPPPPPPPPPPPPPPPPPPPPP@" 130 PRINT"{HOME,2DOWN}"TAB( 29)"{RVSON,SPACE}SPRITE ":IF SP>7 THEN SP=7 131 PRINTTAB( 29)"{RVSON,SPACE}MULTI1 " 132 PRINTTAB( 29)"{RVSON,SPACE}MULTI2 " 133 PRINT"{HOME,DOWN}"TAB( 27)"BLOCK :{4SPACE,4LEFT}"S(SP) 134 PRINT"{HOME,5DOWN}"TAB( 29)"{8SPACE}";:MM=1 135 IF (PEEK (V+28)AND (2^SP))<>0 THENPRINT"{8LEFT,SPACE}MULTIC ":MM=2 136 PRINT"{HOME}"TAB( 29)"01234567" 140 FOR AA=29 TO 36 141 POKE 55376+AA,PEEK (V+39+SP) 142 POKE 55416+AA,PEEK (V+37) 143 POKE 55456+AA,PEEK (V+38) 144 IF PEEK (198)<>0 THEN 146 145 IF (PEEK (V+21)AND (2^(AA-29)))<>0 THEN POKE 1024+AA,PEEK (1024+AA)OR 128 146 NEXT 147 POKE 55296+29+SP,1 150 AD=S(SP)*64:AH=INT (AD/256):AL=AD-AH*256 151 POKE 251,AL:POKE 252,AH 152 SYS 49200:IF (PEEK (V+28)AND (2^SP))<>0 THEN SYS 49300 180 IF M=1 THEN 300 190 GOTO 290 200 GET K$:IF K$="" THEN 200 205 IF K$="{F7}" THEN M=1:GOTO 299 210 IF K$="+" THEN POKE V+21,PEEK (V+21)OR (2^SP):GOTO 136 211 IF K$="-" THEN POKE V+21,PEEK (V+21)AND (255-(2^SP)):GOTO 136 212 IF K$="X" THEN POKE V+29,PEEK (V+29)OR (2^SP):GOTO 200 213 IF K$="X" THEN POKE V+29,PEEK (V+29)AND (255-(2^SP)):GOTO 200 214 IF K$="Y" THEN POKE V+23,PEEK (V+23)OR (2^SP):GOTO 200 215 IF K$="Y" THEN POKE V+23,PEEK (V+23)AND (255-(2^SP)):GOTO 200 216 IF K$="M" THEN POKE V+28,PEEK (V+28)OR (2^SP):GOTO 134 217 IF K$="M" THEN POKE V+28,PEEK (V+28)AND (255-(2^SP)):GOTO 134 220 IF VAL (K$)<>0 OR K$="0" THEN SP=VAL (K$):GOTO 130 221 IF K$="{UP}" THEN POKE V+SP*2+1,ABS (PEEK (V+SP*2+1)-1):IF PEEK (197)<>64 THEN 221 222 IF K$="{DOWN}" THEN POKE V+SP*2+1,ABS (PEEK (V+SP*2+1)+1):IF PEEK (197)<>64 THEN 222 223 IF K$="{LEFT}" THEN POKE V+SP*2,ABS (PEEK (V+SP*2)-1):IF PEEK (197)<>64 THEN 223 224 IF K$="{RIGHT}" THEN POKE V+SP*2,ABS (PEEK (V+SP*2)+1):IF PEEK (197)<>64 THEN 224 225 IF K$="B" THEN S(SP)=S(SP)+1:GOTO 228 226 IF K$="B" THEN S(SP)=S(SP)-1:GOTO 228 227 GOTO 230 228 IF S(SP)<11 OR S(SP)>255 THEN S(SP)=S(SP)-SGN (S(SP)-50) 229 PRINT"{HOME,DOWN}"TAB( 34)S(SP):POKE 2040+SP,S(SP):IF PEEK (197)<>64 THEN 225 230 IF K$="{F1}" THEN POKE V+SP+39,(PEEK (V+SP+39)+1)AND 15:GOTO 140 231 IF K$="{F3}" THEN POKE V+37,(PEEK (V+37)+1)AND 15:GOTO 140 232 IF K$="{F5}" THEN POKE V+38,(PEEK (V+38)+1)AND 15:GOTO 140 240 IF K$="A" THEN 500 241 IF K$="A" THEN 550 242 IF K$="D" THEN 600 243 IF K$="L" THEN 610 244 IF K$="S" THEN 610 245 IF K$="P" THEN PRINT"{CLR}":GOTO 650 246 IF K$="C" THEN 800 247 IF K$="P" THEN POKE 2,PEEK (46):POKE 56,160:POKE 44,100:POKE 46,150:CLR :END 280 IF K$="B"OR K$="B" THEN 150 290 PRINT"{HOME,23DOWN}"TAB( 30)" WORK " 298 GOTO 200 299 PRINT"{HOME,23DOWN}"TAB( 30)"DESIGN":X=0:Y=0:I=PEEK (1065) 300 GET K$:IF K$="" THEN 300 305 IF K$="{F7}" THEN M=0:POKE 1065+X+Y*40,I:GOTO 290 310 IF K$="{UP}" THEN YR=-1 311 IF K$="{DOWN}" THEN YR=+1 312 IF K$="{LEFT}" THEN XR=-1 313 IF K$="{RIGHT}" THEN XR=+1 315 IF YR<>0 OR XR<>0 THEN 360 320 IF K$=";" THEN FOR AA=1 TO MM:SYS 49390:NEXT :GOTO 150 321 IF K$=":" THEN FOR AA=1 TO MM:SYS 49430:NEXT :GOTO 150 322 IF K$="@" THEN SYS 49510:GOTO 150 323 IF K$="/" THEN SYS 49470:GOTO 150 324 IF K$="X" THEN SYS 49604:GOTO 150 325 IF K$="Y" THEN SYS 49550:GOTO 150 335 IF K$="{F1}" THEN I=160+(MM-1)*17:F=1:GOTO 400 336 IF K$="{F2}" THEN I=46 :F=0:GOTO 400 337 IF MM=1 THEN 340 338 IF K$="{F3}" THEN I=178:F=2:GOTO 400 339 IF K$="{F5}" THEN I=179:F=3:GOTO 400 340 IF K$="{CLR}" THEN FOR AA=0 TO 63:POKE S(SP)*64+AA,0:NEXT :GOTO 150 341 IF K$="{HOME}" THEN XR=-X/MM:YR=-Y 342 IF K$=CHR$ (13) THEN XR=-X/MM:YR=1 355 IF YR=0 AND XR=0 THEN 300 360 POKE 1065+X+Y*40,I:IF MM=2 THEN POKE 1066+X+Y*40,I 362 X=X+XR*MM:XR=0:IF X>23 THEN X=0:YR=1 363 IF X<0 THEN X=24-MM:YR=-1 364 Y=Y+YR:YR=0:IF Y>20 THEN Y=0 365 IF Y<0 THEN Y=20 366 I=PEEK (1065+X+Y*40) 367 POKE 1065+X+Y*40,42 380 GOTO 300 400 AD=S(SP)*64+Y*3+X/8 420 AP=7-(X/8-INT (X/8))*8 425 XR=1 430 IF MM=1 THEN 480 440 POKE AD,PEEK (AD)AND (255-(2^AP+2^(AP-1))) 450 POKE AD,PEEK (AD)OR ((FAND 1)*2^AP+((FAND 2)/2)*2^(AP-1)) 460 GOTO 355 480 POKE AD,PEEK (AD)AND (255-(2^AP)) 490 POKE AD,PEEK (AD)OR ((FAND 1)*2^AP) 495 GOTO 355 500 BE=PEEK (V+21):POKE V+21,0 505 PRINT"{HOME,7DOWN}"TAB( 28);:FOR AA=1 TO 9:PRINT RIGHT$ (STR$ (BS(AA)),1);:NEXT 506 PRINT 510 PRINTTAB( 28)"{DOWN}ANZAHL :"; 511 GET K$:IF K$="" THEN 511 512 IF K$=CHR$ (13) THEN 540 513 BA=VAL (K$):IF BA=0 THEN 511 514 PRINTBA:PRINT 515 FOR W=1 TO BA 520 PRINTTAB( 28)"SP";W;"{LEFT}:"; 521 GET K$:IF K$="" THEN 521 522 IF K$=CHR$ (13) THEN 540 523 BS(W)=VAL (K$):IF BS(W)>7 THEN 521 524 PRINTBS(W) 525 NEXT 530 PRINTTAB( 28)"{DOWN}VERZOEGER"; 531 GET K$:IF K$="" THEN 531 532 IF K$=CHR$ (13) THEN 540 533 BV=VAL (K$) 540 POKE V+21,BE 541 PRINT"{HOME,6DOWN}":FOR W=0 TO 14 542 PRINT TAB( 28)"{11SPACE}" 543 NEXT 544 GOTO 200 550 BE=PEEK (V+21):POKE V+21,1 560 FOR AA=1 TO BA 570 POKE 2040,S(BS(AA)) 575 FOR W=0 TO BV*100:NEXT 580 NEXT 585 GET K$:IF K$="" THEN 560 587 POKE V+21,BE 588 POKE 2040,S(0) 590 GOTO 200 600 PRINT"{CLR}" 601 SYS 49680 602 GET K$:IF K$="" THEN 602 603 GOTO 110 610 PRINT"{CLR}" 620 N$="":INPUT"NAME ";N$ 621 IF N$="" THEN 110 625 IF K$="S" THEN 650 630 OPEN 2,8,2,N$+",P,R" 631 GET #2,N1$:IF N1$="" THEN 633 632 N1=ASC (N1$) 633 GET #2,N2$:IF N2$="" THEN 635 634 N2=ASC (N2$) 635 CLOSE 2 636 IF (N1=199) AND (N2=199) THEN 640 638 LOAD N$,8,1 640 OPEN 1,8,15:INPUT#1,F1$,F2$,F3$,F4$ 641 PRINT"{RVSON,2SPACE}"F2$"{2SPACE,DOWN}" 642 CLOSE 1:GOTO 620 650 BS=0:INPUT"STARTBLOCK ";BS 651 IF BS=0 THEN 110 652 IF BS<1 OR BS>255 THEN PRINT"{2UP}":GOTO 650 653 IF K$="P" THEN 700 655 BE=0:INPUT"ENDBLOCK{3SPACE}";BE 656 IF BE=0 THEN 110 657 IF BE<1 OR BE>255 THEN PRINT"{2UP}":GOTO 655 658 IF SGN (BE-BS)=-1 THEN PRINT"{3UP}":GOTO 650 660 OPEN 2,8,1,N$+",P,W" 665 S=BS*64:SH=INT (S/256):SL=S-SH*256 666 PRINT#2,CHR$ (SL); 667 PRINT#2,CHR$ (SH); 670 FOR AA=S TO (BE+1)*64 671 PRINT#2,CHR$ (PEEK (AA)); 675 NEXT 678 CLOSE 2 680 GOTO 110 700 INPUT "ZEILENNUMMER";ZN 710 INPUT "ABSTAND{5SPACE}";ZA 720 PRINT"{CLR,6DOWN}PO56,160:PO44,100:PO46,150:CLR:{2DOWN}" 721 FOR AA=0 TO 3 722 PRINT ZN+ZA*AA;"DATA"; 725 FOR AB=0 TO 15 726 PRINT MID$ (STR$ (PEEK (BS*64+AB+AA*16))+",",2,5); 728 NEXT :PRINT"{LEFT,SPACE}":NEXT :PRINT"POKE 44,64:RUN" 730 FOR AA=0 TO 5:POKE 631+AA,13:NEXT 731 POKE 198,6 732 PRINT"{HOME,3DOWN}" 733 POKE 2,PEEK (46):END 800 PRINT"{CLR}" 810 INPUT"QUELLBLOCK ";QB 811 IF QB=0 THEN 110 815 INPUT"ZIELBLOCK{2SPACE}";QZ 816 IF QZ=0 THEN 110 820 FOR AA=0 TO 63:POKE QZ*64+AA,PEEK (QB*64+AA):NEXT 825 GOTO 110
100 a=a+1:if a=2 then 120 110 load "ede.ma",8,1 120 for aa=25600 to 25604:poke aa,0:next 140 poke 16384,0 160 poke 44,64:poke 46,86:clr 180 load "ede",8
100 A=A+1:IF A=2 THEN 120 110 LOAD "EDE.MA",8,1 120 FOR AA=25600 TO 25604:POKE AA,0:NEXT 140 POKE 16384,0 160 POKE 44,64:POKE 46,86:CLR 180 LOAD "EDE",8