Semplici animazioni con il Commodore16

La cosa che ho sempre apprezzato dei computer Commodore era la loro immediatezza. Grazie ai caratteri grafici impressi sui tasti, era possibile scrivere piccoli e gradevoli programmi  con poco sforzo.

In questo articolo vi mostro come fare delle piccole animazioni , usando il Commodore 16.

Il codice è volutamente semplice, ma è strutturato per poter creare animazione un minimo interessanti. In uno dei prossimi articoli il listato verrà poi adattato per funzionare anche su C/64 e Vic20 che dispongono del più retrogrado BasicV2.

Introduzione

Il C/16 è un buon ambiente di sviluppo perché ha funzioni per rinumerare i numeri di riga,  nuovi costrutti di programmazione strutturata (DO...LOOP) e un quantitativo di memoria accettabile per piccoli sviluppi. Per la nostra demo useremo l'emulatore VICE con un C/16 espanso a 64Kb di RAM.

Bando alle ciance ed ecco il listato:

;c162021 ==1001==
   10 rem tune delay? it is tuned on 1/10 of sec.
   20 dx%=6
   30 rem anim frames?
   40 rem first number is a float with
   50 rem ,frames...,end
   60 data 100, wellcome,to,the,simple,animation,demo
   70 data with parametric,data animation,
   80 data for every frame you can set duration,"in 1/10th of seconds"
   82 data for instance this frame will stay,for ten seconds,end
   90 data 3 ,"JQK",end
  100 data 2 ,"UQI", end
  110 data 1 ,"JQK",end
  120 data 1 ,"UQI", end
  130 data 1 ,"JQK",end
  140 data 1 ,"UQI", end
  150 data 1 ,"JQK",end
  160 data 1 ,"UQI",end
  170 data 1 ,"JQK",end
  180 data 1 ,"UQI",end
  190 data 1 ,"JQK",end
  200 data 1 ,"UQI",end
  210 data 1 ,"JQK",end
  220 data 30,"UQK happy xmas ","JWK", from commodore 16
  229 data end
  230 data 0,aniend
  240 remscnclr
  260 ti$="000000"
  270 do
  280 read dur%
  290 if dur% = 0 then exit
  300 scnclr
  310 print
  320 do
  330 read anim$
  340 if anim$="end" then exit
  350 print anim$
  360 loop
  370 print"{home}{rght}{rght}time",ti$;" d:";dur%
  380 rem how much wait?
  390 tstart=ti
  400 do while ti < (tstart+ dur%*dx% )
  410 rem debug:
  420 print"{home}",ti$,(tstart+dur%*dx%)-ti
  430 loop
  440 loop: rem new frame loop
  450 rem  scnclr
  460 restore
  470 print "{home}{down}{down}{down}{down}{down}{down}{down}{down}";
  480 print "total time passed:";ti$
  490 print "backup..."
  500 dsave "c162021"


Il programma sfrutta un ciclo di animazione (ciclo do-loop tra le linee 270 e 440) molto semplice: la struttura dati prevede un numero che indica in decimi di secondo per quanto temo dovrà rimanere il frame, e poi i dati vengono letti finché non si incontra la parola chiave "END".

Per prima cosa viene cancellato lo schermo (linea 300).

Poi si legge ogni riga e la si stampa, fino ad arrivare alla fine del fotogramma (340); a quel punto   si attende per un numero di sessantesimi di secondo specifici, attraverso un ciclo chiamato "busy wait" (ciclo do-loop in 400-430)

Dopodiché si procede con il frame successivo (440).

La struttura dati è leggibile e leggera, e potete mettere le strutture DATA dove volete: noi abbiamo preferito metterle in testa.

Inoltre, il parser del basic è di "bocca buona", e se non usate caratteri di punteggiatura potete evitare gli apici in molti dei testi inseriti nelle strutture DATA.

Poiché lo schermo del C/16 è 40x25 con meno di 1Kb di può descrivere l'intero schermo, e con 64Kb possiamo creare animazioni molto lunghe.