10 rem ***************     la torre di hanoy        ***************
20 rem ***************   by alessandro scola 2024   ***************
30 rem ***************   www.alessandroscola.com    ***************
40 poke 53280,15:poke 53281,0:poke 646,1:rem colore sfondo,bordo scritte
50 poke 53269,0:rem spegne tutti gli sprites eventualmente visibili
60 rem *************************************************************************
70 rem *************************    variabili    *******************************
80 rem dm        :numero dichi massimi che il programma gestisce
90 rem d         :numero dischi scelti dal giocatore per la partita
100 rem mm       :numero mosse minime per vincere = 2^d-1
110 rem p1       :peso disco in alto su piolo 1
120 rem p2       :peso disco in alto su piolo 2
130 rem p3       :peso disco in alto su piolo 3
140 rem p1(dm)   :situazione pesi dischi su piolo 1
150 rem p2(dm)   :situazione pesi dischi su piolo 2
160 rem p3(dm)   :situazione pesi dischi su piolo 3
170 rem q1,q2,q3 :numero dischi presenti su ogni piolo
180 rem x1,x2,x3 :coordinate x degli sprites su ogni piolo
190 rem y0       :coordinata y minima sprites (il punto piu in alto)
200 rem y9       :coordinata y massima sprites (il punto piu in basso)
210 rem ad       :altezza sprite di un singolo disco in pixels
220 rem sn       :sprite number
230 rem sp       :stack pointer (per la soluzione ricorsiva)
240 rem v        :registro del vic di partenza per gestion sprites
250 rem b        :banco memoria di partenza per gli sprite
260 rem ************************************************************************
270 rem ************************************************************************
280 if peek(44)=64 then 370
290 print "{clear}attenzione!!"
300 print "{down}per eseguire questo programma"
310 print "devi prima eseguire il seguente comando:"
320 print "{down}{red}poke 43,1:poke 44,64:poke 16384,0{down*2}"
330 print "{white}poi ricarica il programma da disco"
340 print "con ,8 e non con ,8,1{space*3}!! "
350 print "{down}alla fine eseguilo con il comando run"
360 end
370 dm=8:rem fino a 8 dischi massimo
380 dim p1(dm):rem stato presenza dei pioli su piolo 1, da 1 a 7
390 dim p2(dm):rem stato presenza dei pioli su piolo 2, da 1 a 7
400 dim p3(dm):rem stato presenza dei pioli su piolo 3, da 1 a 7
410 x1=76:x2=156:x3=236:rem coordinate x degli sprites su pioli
420 y0=60:rem y mimina (punto piu in alto quando muovo disco)
430 y9=168:rem y massima (coord y pputno di appoggio dei dischi al piano)
440 ad=12:rem altezza disco in pixels(sprite espanso =6 x 2 = 12)
450 v=53248:rem registro del vic di partenza per gestion sprites
460 print "{clear}"spc(9)"{down*3}{red}la{space*2}torre{space*2}di{space*2}hanoi"
470 print spc(6)"{down*4}{cyan}by alessandro scola (c)2024"
480 print spc(8)"{white}www.alessandroscola.com"
490 print spc(6)"{down*2}{blue}gioca alla torre di hanoi"
500 print spc(6)"o{space*2}falla risolvere al tuo"
510 print spc(6)"commodore 64 con il metodo"
520 print spc(6)"ricorsivo."
530 print "{down*4}{yellow}{space*2}inizializzazione sprites, attendi..."
540 rem ***************************
550 rem * ridefinisce gli sprites *
560 rem ***************************
570 b=245:rem banco memoria di partenza per gli sprite 245
580 rem legge i data per i dischi che utilizzero
590 for sn=0 to dm-1
600 poke 1862,56-sn:rem visualizza conto alla rovescia
610 poke 2040+sn,b+sn:rem setta banco di memoria per ogni sprite
620 for i=0 to 62
630 read a:poke 64*b+(sn*64)+i,a:next i
640 next sn
650 print "{yellow}{up}{space*3}premi fire in porta 2 per giocare{space*3}"
660 if(peek(56320) and 16)=0 goto 680:rem attente pressione fire
670 goto 660
680 poke 53269,0:poke 53280,15:poke 53281,0:poke 646,1:rem colore sfondo,bordo scritte
690 d=2:print"{clear}{down*11}{right*9}{green}quanti dischi ? (1-8)"
700 print "{yellow}{right*11}{down}(muovi il joystick)"
710 print"{home}{down*11}{right*31}{space*2}<{up}"
720 print"{home}{down*10}":print tab(31);d:j=peek(56320)
730 if(d>=2 and (j and 4)=0) then d=d-1
740 if(d<=7 and (j and 8)=0) then d=d+1
750 if(j and 16)=0 then 790
760 for i=1 to 25:next i
770 poke 56320,255:goto 720
780 gm$="g"
790 gm$="g":print"{clear}{down*11}{right*14}{green}giocare"
800 print"{down}{right*10}vedere soluzione"
810 print "{yellow}{right*11}(muovi il joystick)"
820 poke 56320,255:j=peek(56320)
830 if(gm$="s" and (j and 1)=0) then gm$="g":print spc(25)"{up}<"
840 if(gm$="g" and (j and 2)=0) then gm$="s":print spc(25)"{up*2}<"
850 if(j and 16)=0 then 880
860 for i=1 to 50:next i
870 goto 820
880 rem memorizza in un array lo stato presenza dischi pesati su piolo 1
890 for i=1 to d:p1(i)=i:next i
900 p1=1:p2=0:p3=0:rem peso del disco in alto su un dato piolo
910 q1=d:q2=0:q3=0:rem q1, q2, q3 = quanti dischi ha ciascun piolo
920 rem posiziona gli sprites dei dischi uno sull'altro su piolo 1
930 rem disegna la base del gioco
940 i=0:rem variabile offset resgistri sprites
950 oc=0: rem offfset colore per saltare il numero 8
960 for sn=d-1 to 0 step -1:rem setta posizione x e y dischi
970 poke v+(sn*2),x1:i=i+1:poke v+((sn*2)+1),y9-((i-1)*ad/2)
980 i=i+1
990 if (sn+4)=7 then oc=1:rem per saltare il colore giallo
1000 poke 53287+sn,sn+4-oc:rem setta i colori dei dischi
1010 next sn
1020 rem abilita sprites e espandili in larghezza e altezza
1030 va=0:for n=0 to d-1:va=va+(2^n):next
1040 poke 53269,va:rem abilita sprites
1050 poke 53277,va:rem espansione in larghezza
1060 poke 53271,va:rem espansione in altezza
1070 rem *************************************************
1080 rem *************************************************
1090 mm=2^d-1:m=1:rem mm=numero mosse minime x risolvere, m=numero mossa
1100 rem sposta il disco piu in alto dal piolo selezionato
1110 poke 646,1:poke 53280,15:print "{clear}{cyan}si risolve in "+str$(mm)+" mosse.{white}"
1120 gosub 3090:rem disegna i pioli e la base
1130 if gm$="s" then 3190
1140 rem gm$="g" giocare
1150 poke 646,1:poke 214,2:sys 58732:print "fai la mossa n."+str$(m)
1160 poke 214,3:sys 58732:input "muovi disco da piolo # (f=fine)";a$
1170 if a$="f" then 3020
1180 if asc(a$)<49 or asc(a$)>55 then 1280
1190 poke 214,4:sys 58732:input "muovi disco a{space*2}piolo # (f=fine)";b$
1200 if b$="f" then 3030
1210 if asc(b$)<49 or asc(b$)>55 then 1280
1220 if a$="1" and b$="2" and q1>0 and (p2=0 or p2>p1) then 1340
1230 if a$="1" and b$="3" and q1>0 and (p3=0 or p3>p1) then 1620
1240 if a$="2" and b$="1" and q2>0 and (p1=0 or p1>p2) then 1890
1250 if a$="2" and b$="3" and q2>0 and (p3=0 or p3>p2) then 2160
1260 if a$="3" and b$="1" and q3>0 and (p1=0 or p1>p3) then 2430
1270 if a$="3" and b$="2" and q3>0 and (p2=0 or p2>p3) then 2700
1280 poke 53280,2:print "{home}{down*5}{right*9}{red}***********************""
1290 PRINT "{right*9}*{space*21}*"
1300 PRINT "{right*9}* mossa non possibile *"
1310 PRINT "{right*9}*{space*21}*"
1320 PRINT "{right*9}***********************"
1330 FOR I=1 TO 255:NEXT I:FOR I=1 TO 255:NEXT I:GOTO 1110
1340 REM ******************************************
1350 REM * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 2 *
1360 REM ******************************************
1370 REM P1 = VALORE DEL DISCO PIU IN ALTO,CHE CORRISPONDE ALLO SPRITES P1-1
1380 FOR Y=PEEK(V+1+(2*(P1-1))) TO Y0 STEP -2
1390 POKE (V+1+(2*(P1-1))),Y:REM SOLLEVO DISCO
1400 NEXT Y
1410 FOR X=PEEK(V+(2*(P1-1))) TO X2 STEP 2
1420 POKE (V+(2*(P1-1))),X:REM SPOSTO DISCO A DX
1430 NEXT X
1440 REM APPOGGIO DISCO:
1450 REM Y1= COORD Y DI PARTENZA  Y2 = COORD Y DI ARRIVO DELLO SPRITE
1460 Y1=PEEK(V+1+(2*(P1-1))):REM ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO
1470 IF P2=0 THEN Y2=Y9:GOTO 1490
1480 Y2=Y9-(AD*Q2)
1490 FOR Y=Y1 TO Y2 STEP 2
1500 POKE (V+1+(2*(P1-1))),Y
1510 NEXT Y
1520 REM AGGIORNO PESO PILA DI DESTINAZIONE 2
1530 FOR I=Q2+1 TO 1 STEP -1:P2(I)=P2(I-1):NEXT I:REM SCALO IN ALTO I PESI
1540 P2(1)=P1:P2=P1:Q2=Q2+1
1550 REM AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1
1560 IF Q1>1 THEN:FOR I=1 TO Q1-1:P1(I)=P1(I+1):NEXT I:REM SCALO IN BASSO I PESI
1570 P1(Q1)=0:Q1=Q1-1
1580 IF Q1>=1 THEN P1=P1(1)
1590 IF Q1=0 THEN P1(1)=0:P1=0
1600 IF GM$="g" THEN 2950
1610 RETURN:REM ELSE IF GM$="s"
1620 REM ******************************************
1630 REM * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 3 *
1640 REM ******************************************
1650 FOR Y=PEEK(V+1+(2*(P1-1))) TO Y0 STEP -2
1660 POKE (V+1+(2*(P1-1))),Y:REM SOLLEVO DISCO
1670 NEXT Y
1680 FOR X=PEEK(V+(2*(P1-1))) TO X3 STEP 2
1690 POKE (V+(2*(P1-1))),X:REM SPOSTO DISCO A DX
1700 NEXT X
1710 REM APPOGGIO DISCO:
1720 REM Y1= Y DI PARTENZA  Y2 = Y DI ARRIVO
1730 Y1=PEEK(V+1+(2*(P1-1)))
1740 IF P3=0 THEN Y2=Y9:GOTO 1760
1750 Y2=Y9-(AD*Q3):REM ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO
1760 FOR Y=Y1 TO Y2 STEP 2
1770 POKE (V+1+(2*(P1-1))),Y
1780 NEXT Y
1790 REM AGGIORNO PESO PILA DI DESTINAZIONE 3
1800 FOR I=Q3+1 TO 1 STEP -1:P3(I)=P3(I-1):NEXT I:REM SCALO IN BASSO I PESI
1810 P3(1)=P1:P3=P1:Q3=Q3+1
1820 REM AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1
1830 IF Q1>1 THEN:FOR I=1 TO Q1-1:P1(I)=P1(I+1):NEXT I:REM SCALO IN ALTO I PESI
1840 P1(Q1)=0:Q1=Q1-1
1850 IF Q1>=1 THEN P1=P1(1)
1860 IF Q1=0 THEN P1(1)=0:P1=0
1870 IF GM$="g" THEN 2950
1880 RETURN:REM ELSE IF GM$="s"
1890 REM *******************************************
1900 REM * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 1  *
1910 REM *******************************************
1920 FOR Y=PEEK(V+1+(2*(P2-1))) TO Y0 STEP -2
1930 POKE (V+1+(2*(P2-1))),Y:REM SOLLEVO DISCO
1940 NEXT Y
1950 FOR X=PEEK(V+(2*(P2-1))) TO X1 STEP -2
1960 POKE (V+(2*(P2-1))),X:REM SPOSTO DISCO A SX
1970 NEXT X
1980 REM APPOGGIO DISCO:
1990 REM Y1= COORD Y DI PARTENZA  Y2 = COORD Y DI ARRIVO DELLO SPRITE
2000 Y1=PEEK(V+1+(2*(P2-1))):REM ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO
2010 IF P1=0 THEN Y2=Y9:GOTO 2030
2020 Y2=Y9-(AD*Q1)
2030 FOR Y=Y1 TO Y2 STEP 2
2040 POKE (V+1+(2*(P2-1))),Y
2050 NEXT Y
2060 REM AGGIORNO PESO PILA DI DESTINAZIONE 1
2070 FOR I=Q1+1 TO 1 STEP -1:P1(I)=P1(I-1):NEXT I:REM SCALO IN BASSO I PESI
2080 P1(1)=P2:P1=P2:Q1=Q1+1
2090 REM AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2
2100 IF Q2>1 THEN:FOR I=1 TO Q2-1:P2(I)=P2(I+1):NEXT I:REM SCALO IN ALTO I PESI
2110 P2(Q2)=0:Q2=Q2-1
2120 IF Q2>=1 THEN P2=P2(1)
2130 IF Q2=0 THEN P2(1)=0:P2=0
2140 IF GM$="g" THEN 2950
2150 RETURN:REM ELSE IF GM$="s"
2160 REM *******************************************
2170 REM * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 3  *
2180 REM *******************************************
2190 FOR Y=PEEK(V+1+(2*(P2-1))) TO Y0 STEP -2
2200 POKE (V+1+(2*(P2-1))),Y:REM SOLLEVO DISCO
2210 NEXT Y
2220 FOR X=PEEK(V+(2*(P2-1))) TO X3 STEP 2
2230 POKE (V+(2*(P2-1))),X:REM SPOSTO DISCO A SX
2240 NEXT X
2250 REM APPOGGIO DISCO:
2260 REM Y1= COORD Y DI PARTENZA  Y2 = COORD Y DI ARRIVO DELLO SPRITE
2270 Y1=PEEK(V+1+(2*(P2-1))):REM ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO
2280 IF P3=0 THEN Y2=Y9:GOTO 2300
2290 Y2=Y9-(AD*Q3)
2300 FOR Y=Y1 TO Y2 STEP 2
2310 POKE (V+1+(2*(P2-1))),Y
2320 NEXT Y
2330 REM AGGIORNO PESO PILA DI DESTINAZIONE 3
2340 FOR I=Q3+1 TO 1 STEP -1:P3(I)=P3(I-1):NEXT I:REM SCALO IN BASSO I PESI
2350 P3(1)=P2:P3=P2:Q3=Q3+1
2360 REM AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2
2370 IF Q2>1 THEN:FOR I=1 TO Q2-1:P2(I)=P2(I+1):NEXT I:REM SCALO IN ALTO I PESI
2380 P2(Q2)=0:Q2=Q2-1
2390 IF Q2>=1 THEN P2=P2(1)
2400 IF Q2=0 THEN P2(1)=0:P2=0
2410 IF GM$="g" THEN 2950
2420 RETURN:REM ELSE IF GM$="s"
2430 REM ******************************************
2440 REM * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 1 *
2450 REM ******************************************
2460 FOR Y=PEEK(V+1+(2*(P3-1))) TO Y0 STEP -2
2470 POKE (V+1+(2*(P3-1))),Y:REM SOLLEVO DISCO
2480 NEXT Y
2490 FOR X=PEEK(V+(2*(P3-1))) TO X1 STEP -2
2500 POKE (V+(2*(P3-1))),X:REM SPOSTO DISCO A DX
2510 NEXT X
2520 REM APPOGGIO DISCO:
2530 REM Y1= Y DI PARTENZA  Y2 = Y DI ARRIVO
2540 Y1=PEEK(V+1+(2*(P3-1)))
2550 IF P1=0 THEN Y2=Y9:GOTO 2570
2560 Y2=Y9-(AD*Q1):REM ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO
2570 FOR Y=Y1 TO Y2 STEP 2
2580 POKE (V+1+(2*(P3-1))),Y
2590 NEXT Y
2600 REM AGGIORNO PESO PILA DI DESTINAZIONE 1
2610 FOR I=Q1+1 TO 1 STEP -1:P1(I)=P1(I-1):NEXT I:REM SCALO IN BASSO I PESI
2620 P1(1)=P3:P1=P3:Q1=Q1+1
2630 REM AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3
2640 IF Q3>1 THEN:FOR I=1 TO Q3-1:P3(I)=P3(I+1):NEXT I:REM SCALO IN ALTO I PESI
2650 P3(Q3)=0:Q3=Q3-1
2660 IF Q3>=1 THEN P3=P3(1)
2670 IF Q3=0 THEN P3(1)=0:P3=0
2680 IF GM$="g" THEN 2950
2690 RETURN:REM ELSE IF GM$="s"
2700 REM ******************************************
2710 REM * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 2 *
2720 REM ******************************************
2730 FOR Y=PEEK(V+1+(2*(P3-1))) TO Y0 STEP -2
2740 POKE (V+1+(2*(P3-1))),Y:REM SOLLEVO DISCO
2750 NEXT Y
2760 FOR X=PEEK(V+(2*(P3-1))) TO X2 STEP -2
2770 POKE (V+(2*(P3-1))),X:REM SPOSTO DISCO A SX
2780 NEXT X
2790 REM APPOGGIO DISCO:
2800 REM Y1= Y DI PARTENZA  Y2 = Y DI ARRIVO
2810 Y1=PEEK(V+1+(2*(P3-1)))
2820 IF P2=0 THEN Y2=Y9:GOTO 2840
2830 Y2=Y9-(AD*Q2):REM ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO
2840 FOR Y=Y1 TO Y2 STEP 2
2850 POKE (V+1+(2*(P3-1))),Y
2860 NEXT Y
2870 REM AGGIORNO PESO PILA DI DESTINAZIONE 2
2880 FOR I=Q2+1 TO 1 STEP -1:P2(I)=P2(I-1):NEXT I:REM SCALO IN BASSO I PESI
2890 P2(1)=P3:P2=P3:Q2=Q2+1
2900 REM AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3
2910 IF Q3>1 THEN:FOR I=1 TO Q3-1:P3(I)=P3(I+1):NEXT I:REM SCALO IN ALTO I PESI
2920 P3(Q3)=0:Q3=Q3-1
2930 IF Q3>=1 THEN P3=P3(1)
2940 IF Q3=0 THEN P3(1)=0:P3=0
2950 IF GM$="s" THEN RETURN
2960 REM DEBUG
2970 IF Q3<>D THEN 3060:REM HO FINITO IL GIOCO (Q3=D ?)
2980 PRINT"{clear}":GOSUB 3090:POKE 646,5:POKE 53280,5
2990 PRINT"{up*24}{down}{space*3}complimenti,hai risolto il gioco!"
3000 IF(M=MM) THEN PRINT "{space*3}nel numero minimo di mosse ("STR$(MM)")"
3010 POKE 646,1:IF(M<>MM) THEN PRINT "{space*3}hai fatto"STR$(M)" mosse su"STR$(MM)" previste"
3020 PRINT "{down*3}"
3030 INPUT "{space*5}vuoi giocare ancora (s/n)";A$:IF A$="" THEN 3030
3040 IF A$="s" THEN 680
3050 PRINT "{clear}":POKE 53269,0:END
3060 M=M+1:REM INCREMENTO MOSSE FATTE
3070 GOTO 1150
3080 REM DISEGNO I PIOLI E LA BASE
3090 PRINT "{down*5}":POKE 646,1
3100 FOR I=1 TO 13
3110 PRINT "{space*9}{reverse on} {reverse off}{space*9}{reverse on} {reverse off}{space*9}{reverse on} "
3120 NEXT I
3130 PRINT "{space*2}{reverse on}{space*36}"
3140 PRINT " {reverse on}{space*8}#1{space*8}#2{space*8}#3{space*6}{reverse on}{space*2}"
3150 PRINT "{reverse on}{space*40}"
3160 PRINT "{up}{reverse on}{space*40}{up}"
3170 RETURN
3180 REM ***********************
3190 REM * SOLUZIONE RICORSIVA:*
3200 REM ***********************
3210 N=D:SP=49151:A=1:B=2:C=3:M=0
3220 REM SALVO LE VARIABILI NELLO STACK A PARTIRE DALLA LOCAZIONE 49152:
3230 SP=SP+1:POKE SP,N:SP=SP+1:POKE SP,A:SP=SP+1:POKE SP,B:SP=SP+1:POKE SP,C
3240 GOSUB 3260:REM 1A CHIAMATA  HANOI($N, $A, $B ,$C);
3250 GOTO 2970
3260 IF N>1 THEN 3340:REM RAMO1:E' COME DIRE IF N=1 ESEGUI LE RIGHE SEGUENTI
3270 M=M+1:A$=MID$(STR$(A),2,1):B$=MID$(STR$(C),2,1)
3280 PRINT "{home}{down*2}mossa "STR$(M)": #"A$" -> #"B$:GOSUB 1220
3290 REM RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACK
3300 C=PEEK(SP):SP=SP-1:B=PEEK(SP):SP=SP-1:A=PEEK(SP):SP=SP-1:N=PEEK(SP):SP=SP-1
3310 REM PRINT "ritorno dalla ricorsione ramo 1"
3320 RETURN
3330 REM ELSE (N>1): RAMO 2
3340 N=N-1
3350 REM SALVO LE VARIABILI NELLO STACK:
3360 SP=SP+1:POKE SP,N:SP=SP+1:POKE SP,A:SP=SP+1:POKE SP,B:SP=SP+1:POKE SP,C
3370 X=B:B=C:C=X:REM SCAMBIO B CON C  HANOI($N, $A, $C ,$B);
3380 GOSUB 3260
3390 M=M+1:A$=MID$(STR$(A),2,1):B$=MID$(STR$(C),2,1)
3400 PRINT "{home}{down*2}mossa "STR$(M)": #"A$" -> #"B$:GOSUB 1220
3410 REM SALVO LE VARIABILI NELLO STACK:
3420 SP=SP+1:POKE SP,N:SP=SP+1:POKE SP,A:SP=SP+1:POKE SP,B:SP=SP+1:POKE SP,C
3430 X=A:A=B:B=X:REM SCAMBIO A CON B  HANOI($N, $B, $A ,$C);
3440 GOSUB 3260
3450 REM RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACK
3460 C=PEEK(SP):SP=SP-1:B=PEEK(SP):SP=SP-1:A=PEEK(SP):SP=SP-1:N=PEEK(SP):SP=SP-1
3470 REM PRINT "ritorno dalla ricorsione ramo 2"
3480 RETURN
3490 REM
3500 DATA 0,0,0,0,0,0,0,0,0,0
3510 DATA 0,0,0,0,0,0,0,0,0,0
3520 DATA 0,0,0,0,0,0,0,0,0,0
3530 DATA 0,0,0,0,0,0,0,0,0,0
3540 DATA 0,0,0,0,0,0,247,0,1,231
3550 DATA 128,1,247,128,1,247,128,1,247,128
3560 DATA 0,255,0
3570 REM
3580 DATA 0,0,0,0,0,0,0,0,0,0
3590 DATA 0,0,0,0,0,0,0,0,0,0
3600 DATA 0,0,0,0,0,0,0,0,0,0
3610 DATA 0,0,0,0,0,0,0,0,0,0
3620 DATA 0,0,0,0,0,1,231,128,3,219
3630 DATA 192,3,247,192,3,239,192,3,195,192
3640 DATA 1,255,128
3650 REM
3660 DATA 0,0,0,0,0,0,0,0,0,0
3670 DATA 0,0,0,0,0,0,0,0,0,0
3680 DATA 0,0,0,0,0,0,0,0,0,0
3690 DATA 0,0,0,0,0,0,0,0,0,0
3700 DATA 0,0,0,0,0,3,231,192,7,219
3710 DATA 224,7,247,224,7,219,224,7,231,224
3720 DATA 3,255,192
3730 REM
3740 DATA 0,0,0,0,0,0,0,0,0,0
3750 DATA 0,0,0,0,0,0,0,0,0,0
3760 DATA 0,0,0,0,0,0,0,0,0,0
3770 DATA 0,0,0,0,0,0,0,0,0,0
3780 DATA 0,0,0,0,0,7,247,224,15,239
3790 DATA 240,15,215,240,15,195,240,15,247,240
3800 DATA 7,255,224
3810 REM
3820 DATA 0,0,0,0,0,0,0,0,0,0
3830 DATA 0,0,0,0,0,0,0,0,0,0
3840 DATA 0,0,0,0,0,0,0,0,0,0
3850 DATA 0,0,0,0,0,0,0,0,0,0
3860 DATA 0,0,0,0,0,15,199,240,31,223
3870 DATA 248,31,199,248,31,251,248,31,199,248
3880 DATA 15,255,240
3890 REM
3900 DATA 0,0,0,0,0,0,0,0,0,0
3910 DATA 0,0,0,0,0,0,0,0,0,0
3920 DATA 0,0,0,0,0,0,0,0,0,0
3930 DATA 0,0,0,0,0,0,0,0,0,0
3940 DATA 0,0,0,0,0,31,231,248,63,223
3950 DATA 252,63,199,252,63,219,252,63,231,252
3960 DATA 31,255,248
3970 REM
3980 DATA 0,0,0,0,0,0,0,0,0,0
3990 DATA 0,0,0,0,0,0,0,0,0,0
4000 DATA 0,0,0,0,0,0,0,0,0,0
4010 DATA 0,0,0,0,0,0,0,0,0,0
4020 DATA 0,0,0,0,0,63,195,252,127,251
4030 DATA 254,127,247,254,127,239,254,127,239,254
4040 DATA 63,255,252
4050 REM
4060 DATA 0,0,0,0,0,0,0,0,0,0
4070 DATA 0,0,0,0,0,0,0,0,0,0
4080 DATA 0,0,0,0,0,0,0,0,0,0
4090 DATA 0,0,0,0,0,0,0,0,0,0
4100 DATA 0,0,0,0,0,127,231,254,255,219
4110 DATA 255,255,231,255,255,219,255,255,231,255
4120 DATA 127,255,254