Mongolfiera sul Commodore 65
Un piccolo esempio di programmazione in basic 10. La cara vecchia mongolfiera che solcava lo schermo del Commodore 64 ora sul Commodore 65.
Il listato è quì di seguito
Un piccolo esempio di programmazione in basic 10. La cara vecchia mongolfiera che solcava lo schermo del Commodore 64 ora sul Commodore 65.
Il listato è quì di seguito
Il basic 7.0 implementato di default sul Commodore 128 consentiva egregie soluzioni applicative; non da ultimo la possibilità di creare videogames con la ridefinizione del set di caratteri. Di cosa si tratta? "Semplicemente" di far corrispondere delle immagini create ad arte ai comuni caratteri della tastiera. Una lettera A può così diventare un omino stilizzato, una B la ruota di una macchina e così via.... Un simpatico esempio è quello di seguito che produce a schermo una immagine del classico pac-man che apre e chiude la bocca.
10 FAST
20 FOR R=53248 TO 57344
30 BANK 14
40 E=PEEK(R)
50 BANK 15
60 POKE R-45056,E
70 NEXT
80 BANK 15
90 POKE 2604,24
100 FOR I=8192 TO 8255
110 READ X: POKE I,X: NEXT I
120 DATA 7,15,31,60,56,124,127,127
130 DATA 248,252,254,255,127,252,240,192
140 DATA 127,127,127,63,63,31,15,7
150 DATA 240,252,252,255,255,254,252,248
160 DATA 7,15,31,60,56,124,127,127
170 DATA 248,252,254,255,127,255,255,255
180 DATA 127,127,127,63,63,31,15,7
190 DATA 255,255,255,255,255,254,252,248
200 SLOW
210 PRINT CHR$(147)
220 POKE 1024,0:POKE 1025,1: POKE 1064,2: POKE 1065,3
230 FOR I=1 TO 150:NEXT I
240 POKE 1024,4: POKE 1025,5: POKE 1064,6: POKE 1065,7
250 FOR I=1 TO 150:NEXT I
260 GOTO 220
Il ciclo è infinito e per terminare occorre premere RUN/STOP. Da notare l'impiego delle istruzioni FAST e SLOW. L'istruzione FAST accelera la velocità del clock a 2 Mhz (rispetto all' 1 originale), SLOW torna nella condizione iniziale (1 Mhz di clock). L'istruzione FAST è incompatibile con lo schermo a 40 colonne pertanto produce uno schermo di colore uniforme e non è utilizzabile per accelerare la grafica. Utile però nel velocizzare le operazioni di calcolo. La ridefinizione del set dei caratteri che utilizza questo esempio basic difatti senza la combinazione FAST-SLOW richiede un tempo di elaborazione di 1 minuto e 30 secondi. Tale tempo di dimezza (45 secondi) raddoppiando nel momento di elaborazione la velocità del processore.
Ed ecco di seguito il risultato a schermo:
Controlla un serpente che cresce mangiando bonus....attenzione però ai bordi del campo, agli antibonus ed a non mordersi la coda!!! Tutto da scoprire...
10 dim x(201), y(201)
20 e=0:tt=0
30 p=1:q=1:t=0:e=e+10:if e>200 then e=200
40 dx=0:dy=-1:x(1)=17:y(1)=12:b=0
50 print chr$(147):poke53280,5:poke53281,5:print chr$(144)
60 for i=1 to 37
70 poke 214,1:print:print tab(i);chr$(166);
80 poke 214,23:print:print tab(i);chr$(166);
90 if i>23 then 110
100 poke 214,I:print: print " ";chr$(166);tab(37);chr$(166);
110 next i
120 for i=1 to e
130 x=1146+int(rnd(1)*35)+int(rnd(1)*21)*40
140 if peek(x)<>32 then 130
150 if i>e/2 then poke x,88:poke 54272+x,4:goto 170
160 poke x,83:poke54272+x,2
170 next i
180 poke214,0:print:print PUNTI:";tab(27);"BONUS:"
190 poke 1024+x(p)+y(p)*40,81:poke55296+x(p)+y(p)*40,0
200 get a$:if a$="" then 190
210 goto 230
220 get d$:if d$="" then 300
230 if dy=0 then 270
240 if d$="q" then dx=dy:goto 260
250 dx=-dy
260 dy=0: goto 300
270 if d$="p" then dy=dx:goto 290
280 dy=-dx
290 dx=0
300 ap=p:p=p+1:if p=202 then p=1
310 x(p)=x(ap)+dx:y(p)=y(ap)+dy
320 if peek(1024+x(p)+y(p)*40)<>32 then 370
330 poke 1024+x(q)+y(q)*40,32
340 q=q+1:if q=202 then q=1
350 poke 1024+x(p)+y(p)*40,81:poke55296+x(p)+y(p)*40,0
360 goto 220
370 a=peek(1024+x(p)+y(p)*40)
380 if a=102 or a=81 then 460
390 if a=83 then b=b+1:goto 420
400 if b=0 then 460
410 b=b-1
420 t=t+1:tt=tt+1
430 poke 214,0:print:print tab(10);tt;tab(33);b;chr$(125)
440 if t=e then 30
450 goto 350
460 poke214,0:print:print tab(10);tt;tab(33);chr$(125)
470 poke 1024+x(q)+y(q)*40,32
480 q=q+1:if q=202 then q=1
490 if q<>p then 470
500 get a$:if a$="" then 500
510 goto 20
1 clr: print chr$ (147): poke 53280,0 : poke 53281,0 : x = 49152 : b= 49273
10 for i = x to b: read d : poke i,d : next : poke 775,167 : sys x : end
15 data 169,1,141,134,2
20 data 169,16,141,24,3,169,192,141,25,3,96,72,169,1,141,2,134,169,0,141,32
30 data 208,141,33,208,169,127,141,0,220,173,1,220,201,127,240,11,201,239,240,27
35 data 201,253,240,45
40 data 76,17,192,169,14,141,134,2,169,254,141,32,208,169,246,141,33,208
41 data 234,234,76,252,252,169,254,141,32
50 data 208,169,246,141,33,208,169,1,141,134,2,169,0,141,198,0,104,64
55 data 169,71,141,24,3,169,254,141,25,3,169,246,141,33,208,169,254,141,33,208
56 data 169,14,141,134,2,104,64
restore : attiva la routine
spazio : disattiva
run/stop : resetta il c64
? : elimina l'effetto di restore