Onde dimostrare che un C64 con un interprete BASIC 2.0 può difendersi, ecco una dignitosa intro realizzata in puro BASIC dal sottoscritto. Spero che questa, pur nella sua essenzialità, possa accrescere l'interesse nei confronti della programmazione in BASIC del Commodore 64.
start tok64 intro.prg
0 POKE 53265,PEEK(53265)AND239
1 GOSUB 100:PRINTCHR$(142)
2 POKE53280,0:POKE53281,0
4 g=10
5 PRINT"{clear}":GOSUB200:GOTO25
10 REM *** mega scroller verticale ***
25 POKE53272,28:GOSUB 150
26 FORt=12552TO12552+7:POKEt,0:NEXT:REM punto esclamativo
28 FORt=12288+(32*8)TO12288+(32*8)+7:POKEt,0:NEXT
30 FORt=12288TO12288+7:POKEt,255:NEXT:REM chiocciola
32 FORt=12576TO12576+7:POKEt,255:NEXT:REM dollaro
40 at=12559:b=12576+7
42 WAIT 53265,128
44 POKEat-c,255:POKEb-c,0
50 c=c+1:IFc=8THENc=0:GOTO 70
60 GOTO 42
70 at=12552:b=12576
72 WAIT 53265,128
74 POKEat+c,0:POKEb+c,255
76 c=c+1:IFc=8THENc=0:GOTO40
80 GOTO 72
99 END
100 REM *** copia caratteri dalla rom ***
102 POKE56334,PEEK(56334)AND254:POKE1,PEEK(1)AND251:FORi=0TO511
104 POKEi+12288,PEEK(i+53248):NEXT:POKE1,PEEK(1)OR4:POKE56334,PEEK(56334)OR1
106 RETURN
150 PRINT"{yellow}{down*2}{space*2}greetings to all ready 64 friends :){space*3}"
151 POKE 53265,PEEK(53265)OR16
152 RETURN
200 PRINT"{home}{white}";:FORt=1TOg:PRINT"{down}";:NEXT
210 PRINT" {red}{!*3} ! {!*3} {!*3}{space*2}{!*3}{space*2}{!*3} ! ! {!*3} {!*3} ! !";
220 PRINT" @$$ @ @$@ @$@{space*2}@$@{space*2}$@$ @ @ $@$ $@$ @ @";
230 PRINT" @{space*3}@ @ @ @ @{space*2}@ @{space*3}@{space*2}@ @{space*2}@{space*3}@{space*2}@ @";
240 PRINT" {pink}@{space*3}@ @!@ @ @{space*2}@!@{space*3}@{space*2}@ @{space*2}@{space*3}@{space*2}@ @";
250 PRINT" @{space*3}@ @$@ @ @{space*2}@$@{space*3}@{space*2}@ @{space*2}@{space*3}@{space*2}@ @";
260 PRINT" @{space*3}@ @ @ @ @{space*2}@ @{space*3}@{space*2}@ @{space*2}@{space*3}@{space*2}@ $";
270 PRINT" {yellow}@!! @ @ @ @!@{space*2}@ @{space*3}@{space*2}@!@{space*2}@{space*3}@{space*2}@ !";
280 PRINT" {yellow}{$*3} $ $ $ {$*3}{space*2}$ ${space*3}${space*2}{$*3}{space*2}${space*3}${space*2}$ $";
302 PRINT"{cyan} nessuna interruzione del raster qui :-)"
304 PRINT"{down}"
306 PRINT"{green} ! ! !m!a!r!c!=!e!l!l!o! ! !2!0!0!4! ! !";
308 PRINT" $!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$";
310 PRINT"{light green}{space*2}$ $ $ $ $ $ $ ${sh space}${sh space}${sh space}${sh space}${sh space}${sh space}${sh space}${sh space}${sh space}${sh space}${sh space}${sh space}";
312 PRINT"{cyan} ! ! ! ! ! ! ! ! ! ! ! ! ! !{sh space}! ! ! ! ! !";
314 PRINT" $!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$";
316 PRINT"{light gray} b{light blue}${white}a{light blue}${light gray}s{light blue}${white}i{light blue}${light gray}c{light blue}$ $ ${white}i{light blue}${light gray}s{light blue}$ $ ${white}v{light blue}${light gray}e{light blue}${white}r{light blue}${light gray}y{light blue}$ ${white}n{light blue}${light gray}i{light blue}${white}c{light blue}${light gray}e";
350 RETURN
stop tok64
(bastext 1.03)
Per un attimo può anche darsi che non risulti chiaro il funzionamento... sembra come se ci siano degli sprite e che sia stato effettuato uno splitting dello schermo in più aree, ciascuna con un proprio colore dei caratteri. In realtà nello schermo sono rappresentati soltanto dei caratteri e stanno tutti fermi (provate a premere SHIFT + C= durante l'esecuzione, e vi ritroverete con dei caratteri fermi fermi). Il trucco sta nel ridefinire al volo due caratteri "chiave", utilizzati per simulare lo smooth scrolling.
Potrebbe però non essere ancora chiaro come sono state create bande orizzontali a colori differenti. No, non ho usato il multicolor. Anche qui il trucco sta nella ridefinizione al volo dei caratteri. Il discorso sta così: all'inizio abbiamo, ad esempio, un carattere giallo sopra uno bianco (per dire). Il carattere giallo è tutto pieno. Quello bianco è tutto vuoto. Tramite un ciclo iterativo, il carattere giallo viene via via svuotato (vengono impostati a zero, gradualmente, i suoi byte, dall'alto verso il basso) mentre il carattere bianco viene riempito (vengono gradualmente impostati a uno i suoi byte, dall'alto verso il basso). Quindi, il carattere bianco si forma dall'alto verso il basso e il carattere giallo si cancella dall'alto verso il basso: ne risulta uno scrolling apparente di un carattere pieno dall'alto verso il basso, e, durante il movimento, a ciascuna linea di scansione (fila di pixel sul video) rimane sempre associato lo stesso colore. Di qui l'illusione dello screen splitting mediante le interruzioni del raster.
Il disegno della grafica in movimento è abbastanza complicato: si tratta di individuare i caratteri che rimangono inalterati e quelli che invece devono essere modificati onde dare l'illusione dello scrolling. E la scelta dipende dalla forma di ciascun elemento grafico.
Il limite di questa routine è dato dalla grafica essenziale degli oggetti in movimento; tuttavia, aggiungendo ulteriori caratteri modificabili al volo è possibile raggiungere risultati grafici migliori. In ogni caso, credo che la routine sia abbastanza suggestiva già così (del resto, CIAO A TUTTI è formato da lettere che ben si prestano anche ad essere rappresentate con blocconi di 8x8 punti ;-)).