Rettangoli colorati con ugBASIC

Screenshot che mostra i rettangoli colorati sullo ZX Spectrum

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.

Screenshot C64 che mostra l'obiettivo della sfida
Immagine rappresentativa dell’obiettivo della sfida della settimana
(text mode standard del Commodore 64)

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!

Screenshot del programma BGIDemo per Turmo Pascal
Random bars – dal programma BGIDemo per Turbo Pascal 5 di Borland

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:

I rettangoli colorati sullo ZX Spectrum (emulatore Fuse)

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:

I rettangoli colorati su MSX (emulatore openMSX)

Link e Riferimenti

Screenshot che mostra i rettangoli colorati sullo ZX Spectrum
I rettangoli colorati sullo ZX Spectrum