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