Da tempo desideravo provare ugBASIC, linguaggio isomorfo compilato, che permette di produrre programmi per una moltitudine di piattaforme (computer e console) a 8 bit a partire da un unico codice sorgente. A rendere ancora più accattivante il tutto è ugBASIC IDE, un ambiente integrato per Windows che permette di installare le toolchain per le piattaforme desiderate e scrivere, compilare ed eseguire programmi mediante gli appositi emulatori con pochissimi click.
Ho quindi colto l’occasione offerta dalla sfida della settimana, indetta lo scorso venerdì sul gruppo Facebook RetroProgramming Italia, per cimentarmi con ugBASIC. Lo scopo della sfida è realizzare un programma (in qualsiasi linguaggio e per qualsiasi macchina a 8/16 bit) per disegnare rettangoli colorati in modo molto veloce.
L’animazione dei rettangoli colorati ha immediatamente richiamato alla mia mente il programma dimostrativo BGIDemo, incluso nelle distribuzioni Turbo Pascal degli anni ’80 per mostrare le potenzialità delle librerie grafiche di Borland e che in gioventù ammiravo con stupore. Che nostalgia!
Ho quindi buttato giù il seguente programmino, per disegnare i rettangoli mediante stringhe formate da spazi vuoti, utilizzando posizione, dimensione e colore casuali.
BITMAP ENABLE
sc = SCREEN COLUMNS: sr = SCREEN ROWS: pc = PAPER COLORS
CLS
LOCATE 0, sr-1
PRINT "COLS:";sc;" ROWS:";sr;" COLORS:";pc;
s$ = "": FOR i=1 TO sc: s$ = s$ + " ": NEXT
DO
PAPER RND(pc)
x = RND(sc)
y = RND(sr - 1)
w = 1 + RND(sc - x)
h = 1 + RND(sr - 1 - y)
ss$ = LEFT$(s$, w)
FOR yy = y TO y+h-1
LOCATE x, yy
PRINT ss$;
NEXT
LOOP
Ho poi compilato il programma utilizzando lo ZX Spectrum come target, riscontrando però un paio di anomalie, che si possono osservare in questo video. L’istruzione PAPER
, infatti, oltre allo sfondo alterava anche il colore del bordo. Inoltre, mentre nonostante il numero di colori restituito PAPER COLORS
fosse 16, in output erano visibili solo gli 8 colori senza l’attributo bright.
Ho segnalato i problemi all’autore di ugBASIC Marco Spedaletti, il quale, dopo solo poche ore, ha rilasciato un COLDFIX che ha risolto entrambi i bug. Se solo il supporto di [inserisci qui il nome di una qualsiasi azienda fornitrice di energia/servizi telefonici] fosse altrettanto solerte, si vivrebbe in un mondo migliore, ma questa è un’altra storia…
Dopo un aggiornamento dei compilatori direttamente in ugBASIC IDE, sono riuscito ad ottenere una versione corretta dell’eseguibile, come si può osservare in questo video:
Infine, dato che ugBASIC nasce come ambiente di sviluppo multipiattaforma, ho compilato una versione del programma per MSX e qui si può osservare il risultato:
Link e Riferimenti
- ugBASIC
- Il mio programma
- Codice sorgente
- Versione ZX Spectrum
- Versione MSX
- Il gruppo Facebook RetroProgramming Italia