lunedì 20 gennaio 2014

C64, mon amour!

Il mio primissimo computer, un Commodore 64, da ragazzina mi divertivo molto di più a programmarlo con le mie manine che a giocarci con i videogame su cassetta (in effetti di quelli ne avevo giusto due o tre). Oltre al C64 in sé, che da anni langue tristemente in soffitta chiuso nella sua scatola, conservo ancora il corso di BASIC in due parti – disponibili qui e qui... emossione!!! :-) – che mi introdusse nel magico mondo della programmazione!
All'epoca ricordo di aver sperimentato qualcosa di molto simile, se non identico, alla seguente riga di codice:
10 PRINT CHR$(205.5+RND(1)); : GOTO 10
Se non hai a disposizione un emulatore o meglio un autentico C64 "vintage" da riesumare dalla soffitta per provare il programmino, il video qui sotto te ne mostra l'output.


Ebbene sì, quello che viene fuori è una sorta di labirinto; non sarà costruito esattamente a regola d'arte, ed escludo che si possa sempre trovare una via d'uscita... comunque è sorprendente vedere quali incredibili risultati si possono ottenere con istruzioni così elementari.
Siccome un ripassino non fa mai male, andiamo a dare un'occhiata nello specifico del codice... attingendo per approfondimenti al portentoso C64-Wiki del quale ho appena scoperto con sommo gaudio l'esistenza! :-)
  • Se ben ricordo, PRINT è uno dei primissimi comandi che si imparano studiando il BASIC, ed è fondamentale perché serve a visualizzare dati sullo schermo; il punto e virgola dopo il termine da "stampare" serve ad evitare l'andata a capo.
  • La funzione CHR$, che è l'inversa della funzione ASC, converte un numero compreso fra 0 e 255 in un carattere ASCII (o meglio PETSCII).
  • La funzione RND(1) genera numeri casuali in virgola mobile compresi fra 0 e 1, estremi inclusi.
  • Quando RND(1) è minore di 0.5, il sistema arrotonda a CHR$(205) dando luogo alla barra diagonale discendente; quando invece RND(1) è maggiore di 0.5, CHR$(206) produce una barra diagonale ascendente. Ed è così che si costruiscono le pareti del nostro labirinto virtuale! :-)
  • Il ciclo (virtualmente infinito) che manda avanti il tutto si basa sull'istruzione GOTO, che mi risulta sia alquanto deprecata, ma della quale all'epoca facevo un uso sfrenato; ancora non avevo idea che esistessero strutture di controllo assai più eleganti come il ciclo while e il ciclo loop-until (l'istruzione IF e il ciclo FOR invece li conoscevo già).
La riga di codice di cui ho parlato in questo post ha ispirato un intero libro della prestigiosa MIT Press (in vendita su Amazon ma anche disponibile in PDF) che, stando a quello che se ne dice su Slate, dev'essere proprio interessante. Se solo lo traducessero in italiano... ;-)

Nessun commento:

Posta un commento