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 780
760 for i=1 to 50:next i
770 poke 56320,255:goto 720
780 input "vuoi giocare (g) o soluzione (s)";gm$:rem game mode
790 if gm$<>"g" and gm$<>"s" then 780
800 rem memorizza in un array lo stato presenza dischi pesati su piolo 1
810 for i=1 to d:p1(i)=i:next i
820 p1=1:p2=0:p3=0:rem peso del disco in alto su un dato piolo
830 q1=d:q2=0:q3=0:rem q1, q2, q3 = quanti dischi ha ciascun piolo
840 rem posiziona gli sprites dei dischi uno sull'altro su piolo 1
850 rem disegna la base del gioco
860 i=0:rem variabile offset resgistri sprites
870 oc=0: rem offfset colore per saltare il numero 8
880 for sn=d-1 to 0 step -1:rem setta posizione x e y dischi
890 poke v+(sn*2),x1:i=i+1:poke v+((sn*2)+1),y9-((i-1)*ad/2)
900 i=i+1
910 if (sn+4)=7 then oc=1:rem per saltare il colore giallo
920 poke 53287+sn,sn+4-oc:rem setta i colori dei dischi
930 next sn
940 rem abilita sprites e espandili in larghezza e altezza
950 va=0:for n=0 to d-1:va=va+(2^n):next
960 poke 53269,va:rem abilita sprites
970 poke 53277,va:rem espansione in larghezza
980 poke 53271,va:rem espansione in altezza
990 rem *************************************************
1000 rem *************************************************
1010 mm=2^d-1:m=1:rem mm=numero mosse minime x risolvere, m=numero mossa
1020 rem sposta il disco piu in alto dal piolo selezionato
1030 poke 646,1:poke 53280,15:print "{clear}{cyan}si risolve in "+str$(mm)+" mosse.{white}"
1040 gosub 3010:rem disegna i pioli e la base
1050 if gm$="s" then 3110
1060 rem gm$="g" giocare
1070 poke 646,1:poke 214,2:sys 58732:print "fai la mossa n."+str$(m)
1080 poke 214,3:sys 58732:input "muovi disco da piolo # (f=fine)";a$
1090 if a$="f" then 2940
1100 if asc(a$)<49 or asc(a$)>55 then 1200
1110 poke 214,4:sys 58732:input "muovi disco a{space*2}piolo # (f=fine)";b$
1120 if b$="f" then 2950
1130 if asc(b$)<49 or asc(b$)>55 then 1200
1140 if a$="1" and b$="2" and q1>0 and (p2=0 or p2>p1) then 1260
1150 if a$="1" and b$="3" and q1>0 and (p3=0 or p3>p1) then 1540
1160 if a$="2" and b$="1" and q2>0 and (p1=0 or p1>p2) then 1810
1170 if a$="2" and b$="3" and q2>0 and (p3=0 or p3>p2) then 2080
1180 if a$="3" and b$="1" and q3>0 and (p1=0 or p1>p3) then 2350
1190 if a$="3" and b$="2" and q3>0 and (p2=0 or p2>p3) then 2620
1200 poke 53280,2:print "{home}{down*5}{right*9}{red}***********************""
1210 PRINT "{right*9}*{space*21}*"
1220 PRINT "{right*9}* mossa non possibile *"
1230 PRINT "{right*9}*{space*21}*"
1240 PRINT "{right*9}***********************"
1250 FOR I=1 TO 255:NEXT I:FOR I=1 TO 255:NEXT I:GOTO 1030
1260 REM ******************************************
1270 REM * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 2 *
1280 REM ******************************************
1290 REM P1 = VALORE DEL DISCO PIU IN ALTO,CHE CORRISPONDE ALLO SPRITES P1-1
1300 FOR Y=PEEK(V+1+(2*(P1-1))) TO Y0 STEP -2
1310 POKE (V+1+(2*(P1-1))),Y:REM SOLLEVO DISCO
1320 NEXT Y
1330 FOR X=PEEK(V+(2*(P1-1))) TO X2 STEP 2
1340 POKE (V+(2*(P1-1))),X:REM SPOSTO DISCO A DX
1350 NEXT X
1360 REM APPOGGIO DISCO:
1370 REM Y1= COORD Y DI PARTENZA  Y2 = COORD Y DI ARRIVO DELLO SPRITE
1380 Y1=PEEK(V+1+(2*(P1-1))):REM ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO
1390 IF P2=0 THEN Y2=Y9:GOTO 1410
1400 Y2=Y9-(AD*Q2)
1410 FOR Y=Y1 TO Y2 STEP 2
1420 POKE (V+1+(2*(P1-1))),Y
1430 NEXT Y
1440 REM AGGIORNO PESO PILA DI DESTINAZIONE 2
1450 FOR I=Q2+1 TO 1 STEP -1:P2(I)=P2(I-1):NEXT I:REM SCALO IN ALTO I PESI
1460 P2(1)=P1:P2=P1:Q2=Q2+1
1470 REM AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1
1480 IF Q1>1 THEN:FOR I=1 TO Q1-1:P1(I)=P1(I+1):NEXT I:REM SCALO IN BASSO I PESI
1490 P1(Q1)=0:Q1=Q1-1
1500 IF Q1>=1 THEN P1=P1(1)
1510 IF Q1=0 THEN P1(1)=0:P1=0
1520 IF GM$="g" THEN 2870
1530 RETURN:REM ELSE IF GM$="s"
1540 REM ******************************************
1550 REM * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 3 *
1560 REM ******************************************
1570 FOR Y=PEEK(V+1+(2*(P1-1))) TO Y0 STEP -2
1580 POKE (V+1+(2*(P1-1))),Y:REM SOLLEVO DISCO
1590 NEXT Y
1600 FOR X=PEEK(V+(2*(P1-1))) TO X3 STEP 2
1610 POKE (V+(2*(P1-1))),X:REM SPOSTO DISCO A DX
1620 NEXT X
1630 REM APPOGGIO DISCO:
1640 REM Y1= Y DI PARTENZA  Y2 = Y DI ARRIVO
1650 Y1=PEEK(V+1+(2*(P1-1)))
1660 IF P3=0 THEN Y2=Y9:GOTO 1680
1670 Y2=Y9-(AD*Q3):REM ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO
1680 FOR Y=Y1 TO Y2 STEP 2
1690 POKE (V+1+(2*(P1-1))),Y
1700 NEXT Y
1710 REM AGGIORNO PESO PILA DI DESTINAZIONE 3
1720 FOR I=Q3+1 TO 1 STEP -1:P3(I)=P3(I-1):NEXT I:REM SCALO IN BASSO I PESI
1730 P3(1)=P1:P3=P1:Q3=Q3+1
1740 REM AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1
1750 IF Q1>1 THEN:FOR I=1 TO Q1-1:P1(I)=P1(I+1):NEXT I:REM SCALO IN ALTO I PESI
1760 P1(Q1)=0:Q1=Q1-1
1770 IF Q1>=1 THEN P1=P1(1)
1780 IF Q1=0 THEN P1(1)=0:P1=0
1790 IF GM$="g" THEN 2870
1800 RETURN:REM ELSE IF GM$="s"
1810 REM *******************************************
1820 REM * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 1  *
1830 REM *******************************************
1840 FOR Y=PEEK(V+1+(2*(P2-1))) TO Y0 STEP -2
1850 POKE (V+1+(2*(P2-1))),Y:REM SOLLEVO DISCO
1860 NEXT Y
1870 FOR X=PEEK(V+(2*(P2-1))) TO X1 STEP -2
1880 POKE (V+(2*(P2-1))),X:REM SPOSTO DISCO A SX
1890 NEXT X
1900 REM APPOGGIO DISCO:
1910 REM Y1= COORD Y DI PARTENZA  Y2 = COORD Y DI ARRIVO DELLO SPRITE
1920 Y1=PEEK(V+1+(2*(P2-1))):REM ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO
1930 IF P1=0 THEN Y2=Y9:GOTO 1950
1940 Y2=Y9-(AD*Q1)
1950 FOR Y=Y1 TO Y2 STEP 2
1960 POKE (V+1+(2*(P2-1))),Y
1970 NEXT Y
1980 REM AGGIORNO PESO PILA DI DESTINAZIONE 1
1990 FOR I=Q1+1 TO 1 STEP -1:P1(I)=P1(I-1):NEXT I:REM SCALO IN BASSO I PESI
2000 P1(1)=P2:P1=P2:Q1=Q1+1
2010 REM AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2
2020 IF Q2>1 THEN:FOR I=1 TO Q2-1:P2(I)=P2(I+1):NEXT I:REM SCALO IN ALTO I PESI
2030 P2(Q2)=0:Q2=Q2-1
2040 IF Q2>=1 THEN P2=P2(1)
2050 IF Q2=0 THEN P2(1)=0:P2=0
2060 IF GM$="g" THEN 2870
2070 RETURN:REM ELSE IF GM$="s"
2080 REM *******************************************
2090 REM * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 3  *
2100 REM *******************************************
2110 FOR Y=PEEK(V+1+(2*(P2-1))) TO Y0 STEP -2
2120 POKE (V+1+(2*(P2-1))),Y:REM SOLLEVO DISCO
2130 NEXT Y
2140 FOR X=PEEK(V+(2*(P2-1))) TO X3 STEP 2
2150 POKE (V+(2*(P2-1))),X:REM SPOSTO DISCO A SX
2160 NEXT X
2170 REM APPOGGIO DISCO:
2180 REM Y1= COORD Y DI PARTENZA  Y2 = COORD Y DI ARRIVO DELLO SPRITE
2190 Y1=PEEK(V+1+(2*(P2-1))):REM ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO
2200 IF P3=0 THEN Y2=Y9:GOTO 2220
2210 Y2=Y9-(AD*Q3)
2220 FOR Y=Y1 TO Y2 STEP 2
2230 POKE (V+1+(2*(P2-1))),Y
2240 NEXT Y
2250 REM AGGIORNO PESO PILA DI DESTINAZIONE 3
2260 FOR I=Q3+1 TO 1 STEP -1:P3(I)=P3(I-1):NEXT I:REM SCALO IN BASSO I PESI
2270 P3(1)=P2:P3=P2:Q3=Q3+1
2280 REM AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2
2290 IF Q2>1 THEN:FOR I=1 TO Q2-1:P2(I)=P2(I+1):NEXT I:REM SCALO IN ALTO I PESI
2300 P2(Q2)=0:Q2=Q2-1
2310 IF Q2>=1 THEN P2=P2(1)
2320 IF Q2=0 THEN P2(1)=0:P2=0
2330 IF GM$="g" THEN 2870
2340 RETURN:REM ELSE IF GM$="s"
2350 REM ******************************************
2360 REM * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 1 *
2370 REM ******************************************
2380 FOR Y=PEEK(V+1+(2*(P3-1))) TO Y0 STEP -2
2390 POKE (V+1+(2*(P3-1))),Y:REM SOLLEVO DISCO
2400 NEXT Y
2410 FOR X=PEEK(V+(2*(P3-1))) TO X1 STEP -2
2420 POKE (V+(2*(P3-1))),X:REM SPOSTO DISCO A DX
2430 NEXT X
2440 REM APPOGGIO DISCO:
2450 REM Y1= Y DI PARTENZA  Y2 = Y DI ARRIVO
2460 Y1=PEEK(V+1+(2*(P3-1)))
2470 IF P1=0 THEN Y2=Y9:GOTO 2490
2480 Y2=Y9-(AD*Q1):REM ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO
2490 FOR Y=Y1 TO Y2 STEP 2
2500 POKE (V+1+(2*(P3-1))),Y
2510 NEXT Y
2520 REM AGGIORNO PESO PILA DI DESTINAZIONE 1
2530 FOR I=Q1+1 TO 1 STEP -1:P1(I)=P1(I-1):NEXT I:REM SCALO IN BASSO I PESI
2540 P1(1)=P3:P1=P3:Q1=Q1+1
2550 REM AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3
2560 IF Q3>1 THEN:FOR I=1 TO Q3-1:P3(I)=P3(I+1):NEXT I:REM SCALO IN ALTO I PESI
2570 P3(Q3)=0:Q3=Q3-1
2580 IF Q3>=1 THEN P3=P3(1)
2590 IF Q3=0 THEN P3(1)=0:P3=0
2600 IF GM$="g" THEN 2870
2610 RETURN:REM ELSE IF GM$="s"
2620 REM ******************************************
2630 REM * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 2 *
2640 REM ******************************************
2650 FOR Y=PEEK(V+1+(2*(P3-1))) TO Y0 STEP -2
2660 POKE (V+1+(2*(P3-1))),Y:REM SOLLEVO DISCO
2670 NEXT Y
2680 FOR X=PEEK(V+(2*(P3-1))) TO X2 STEP -2
2690 POKE (V+(2*(P3-1))),X:REM SPOSTO DISCO A SX
2700 NEXT X
2710 REM APPOGGIO DISCO:
2720 REM Y1= Y DI PARTENZA  Y2 = Y DI ARRIVO
2730 Y1=PEEK(V+1+(2*(P3-1)))
2740 IF P2=0 THEN Y2=Y9:GOTO 2760
2750 Y2=Y9-(AD*Q2):REM ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO
2760 FOR Y=Y1 TO Y2 STEP 2
2770 POKE (V+1+(2*(P3-1))),Y
2780 NEXT Y
2790 REM AGGIORNO PESO PILA DI DESTINAZIONE 2
2800 FOR I=Q2+1 TO 1 STEP -1:P2(I)=P2(I-1):NEXT I:REM SCALO IN BASSO I PESI
2810 P2(1)=P3:P2=P3:Q2=Q2+1
2820 REM AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3
2830 IF Q3>1 THEN:FOR I=1 TO Q3-1:P3(I)=P3(I+1):NEXT I:REM SCALO IN ALTO I PESI
2840 P3(Q3)=0:Q3=Q3-1
2850 IF Q3>=1 THEN P3=P3(1)
2860 IF Q3=0 THEN P3(1)=0:P3=0
2870 IF GM$="s" THEN RETURN
2880 REM DEBUG
2890 IF Q3<>D THEN 2980:REM HO FINITO IL GIOCO (Q3=D ?)
2900 PRINT"{clear}":GOSUB 3010:POKE 646,5:POKE 53280,5
2910 PRINT"{up*24}{down}{space*3}complimenti,hai risolto il gioco!"
2920 IF(M=MM) THEN PRINT "{space*3}nel numero minimo di mosse ("STR$(MM)")"
2930 POKE 646,1:IF(M<>MM) THEN PRINT "{space*3}hai fatto"STR$(M)" mosse su"STR$(MM)" previste"
2940 PRINT "{down*3}"
2950 INPUT "{space*5}vuoi giocare ancora (s/n)";A$:IF A$="" THEN 2950
2960 IF A$="s" THEN 680
2970 PRINT "{clear}":POKE 53269,0:END
2980 M=M+1:REM INCREMENTO MOSSE FATTE
2990 GOTO 1070
3000 REM DISEGNO I PIOLI E LA BASE
3010 PRINT "{down*5}":POKE 646,1
3020 FOR I=1 TO 13
3030 PRINT "{space*9}{reverse on} {reverse off}{space*9}{reverse on} {reverse off}{space*9}{reverse on} "
3040 NEXT I
3050 PRINT "{space*2}{reverse on}{space*36}"
3060 PRINT " {reverse on}{space*8}#1{space*8}#2{space*8}#3{space*6}{reverse on}{space*2}"
3070 PRINT "{reverse on}{space*40}"
3080 PRINT "{up}{reverse on}{space*40}{up}"
3090 RETURN
3100 REM ***********************
3110 REM * SOLUZIONE RICORSIVA:*
3120 REM ***********************
3130 N=D:SP=49151:A=1:B=2:C=3:M=0
3140 REM SALVO LE VARIABILI NELLO STACK A PARTIRE DALLA LOCAZIONE 49152:
3150 SP=SP+1:POKE SP,N:SP=SP+1:POKE SP,A:SP=SP+1:POKE SP,B:SP=SP+1:POKE SP,C
3160 GOSUB 3180:REM 1A CHIAMATA  HANOI($N, $A, $B ,$C);
3170 GOTO 2890
3180 IF N>1 THEN 3260:REM RAMO1:E' COME DIRE IF N=1 ESEGUI LE RIGHE SEGUENTI
3190 M=M+1:A$=MID$(STR$(A),2,1):B$=MID$(STR$(C),2,1)
3200 PRINT "{home}{down*2}mossa "STR$(M)": #"A$" -> #"B$:GOSUB 1140
3210 REM RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACK
3220 C=PEEK(SP):SP=SP-1:B=PEEK(SP):SP=SP-1:A=PEEK(SP):SP=SP-1:N=PEEK(SP):SP=SP-1
3230 REM PRINT "ritorno dalla ricorsione ramo 1"
3240 RETURN
3250 REM ELSE (N>1): RAMO 2
3260 N=N-1
3270 REM SALVO LE VARIABILI NELLO STACK:
3280 SP=SP+1:POKE SP,N:SP=SP+1:POKE SP,A:SP=SP+1:POKE SP,B:SP=SP+1:POKE SP,C
3290 X=B:B=C:C=X:REM SCAMBIO B CON C  HANOI($N, $A, $C ,$B);
3300 GOSUB 3180
3310 M=M+1:A$=MID$(STR$(A),2,1):B$=MID$(STR$(C),2,1)
3320 PRINT "{home}{down*2}mossa "STR$(M)": #"A$" -> #"B$:GOSUB 1140
3330 REM SALVO LE VARIABILI NELLO STACK:
3340 SP=SP+1:POKE SP,N:SP=SP+1:POKE SP,A:SP=SP+1:POKE SP,B:SP=SP+1:POKE SP,C
3350 X=A:A=B:B=X:REM SCAMBIO A CON B  HANOI($N, $B, $A ,$C);
3360 GOSUB 3180
3370 REM RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACK
3380 C=PEEK(SP):SP=SP-1:B=PEEK(SP):SP=SP-1:A=PEEK(SP):SP=SP-1:N=PEEK(SP):SP=SP-1
3390 REM PRINT "ritorno dalla ricorsione ramo 2"
3400 RETURN
3410 REM
3420 DATA 0,0,0,0,0,0,0,0,0,0
3430 DATA 0,0,0,0,0,0,0,0,0,0
3440 DATA 0,0,0,0,0,0,0,0,0,0
3450 DATA 0,0,0,0,0,0,0,0,0,0
3460 DATA 0,0,0,0,0,0,247,0,1,231
3470 DATA 128,1,247,128,1,247,128,1,247,128
3480 DATA 0,255,0
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,1,231,128,3,219
3550 DATA 192,3,247,192,3,239,192,3,195,192
3560 DATA 1,255,128
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,3,231,192,7,219
3630 DATA 224,7,247,224,7,219,224,7,231,224
3640 DATA 3,255,192
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,7,247,224,15,239
3710 DATA 240,15,215,240,15,195,240,15,247,240
3720 DATA 7,255,224
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,15,199,240,31,223
3790 DATA 248,31,199,248,31,251,248,31,199,248
3800 DATA 15,255,240
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,31,231,248,63,223
3870 DATA 252,63,199,252,63,219,252,63,231,252
3880 DATA 31,255,248
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,63,195,252,127,251
3950 DATA 254,127,247,254,127,239,254,127,239,254
3960 DATA 63,255,252
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,127,231,254,255,219
4030 DATA 255,255,231,255,255,219,255,255,231,255
4040 DATA 127,255,254