Un giorno alle corse degli animali

A Day At The Animal Races è una versione per Sinclair ZX Spectrum 16/48K del videogioco di scommesse su corse di animali VIP Animal Race.

A Day At The Animal Races in esecuzione a 14 MHz sullo ZX Spectrum Next (emulato con #CSpect)

Il gioco originale fu sviluppato da Brian Astle per l’interprete CHIP-8 fornito con il computer COSMAC VIP e pubblicato nel RCA COSMAC VIP Game Manual nel 1978. Nel video seguente, puoi osservare il gioco in azione sullo ZX Spectrum Next, grazie a CHIP-OTTO, la macchina virtuale CHIP-8 di mia realizzazione.

VIP Animal Race in esecuzione su CHIP-OTTO per ZX Spectrum Next (emulato con #CSpect)

A Day At The Animal Races è il mio secondo gioco (il primo è Squash Trainer) in gara per la 12a edizione (2023) del BASIC 10 Liner Contest, categoria PUR-80. Puoi scaricarlo o giocare online accedendo alla pagina retrobits.itch.io/animalrace10l. Il download include il listato del programma e la documentazione dettagliata.

Come giocare

Cinque diversi animali gareggiano l’uno contro l’altro e tu hai la possibilità di mettere alla prova la tua abilità nel scegliere il vincitore.

Aspetta che gli animali siano pronti per partire, quindi seleziona un animale e decidi quanto vuoi scommettere (fino a un limite di $9). Al termine della gara, le tue vincite o perdite verranno calcolate e verrà visualizzato il nuovo totale. Puoi vincere il gioco accumulando $256 o più.

Tutti gli animali si muovono all’incirca alla stessa velocità, ma partono da posizioni diverse. Le probabilità di vincita per ogni animale sono correlate alla posizione di partenza ma includono un elemento casuale. Alcune corse favoriscono il giocatore e dovresti scommettere fino al limite. Altre sono sfavorevoli e dovresti scommettere con attenzione.

Gameplay di A Day At The Animal Races
Gameplay di A Day At The Animal Races

Link e riferimenti

Schermata di A Day At The Animal Races
Ho vinto! 🙂
English version

Connect4 per Z88: lavori in corso

Qualche tempo fa, J Bizzel, autore di giochi interessanti per Sinclair ZX Spectrum e Cambridge Z88, mi ha contattato, suggerendomi di provare a compilare Connect4 (la mia implementazione del gioco Forza 4) per il computer portatile Cambridge Z88.

Accettando il suggerimento, ho realizzato una build della versione standard I/O di Connect4 con z88dk (utilizzando BBC Basic come target), che puoi scaricare qui. Il risultato di questa prova è incoraggiante, come si può riscontrare nel seguente video, in cui il computer gioca contro se stesso, anche se l’usabilità non è il massimo.

Connect4 (standard I/O) in esecuzione su Cambridge Z88 (emulato con OZvm)

Mi sono quindi proposto (tempo permettendo) di realizzare un’interfaccia ad hoc per il piccolo portatile di Sinclair; resta sintonizzato per aggiornamenti!

Read in English

Pringles Sonic Chip: ZX Spectrum e patatine

Le patatine Pringles possono piacere o meno, ma sicuramente l’iniziativa recentemente lanciata dal noto marchio, facente capo al gruppo Kellog, non lascerà indifferenti i retrogamer e in particolare i fan del Sinclair ZX Spectrum. A 40 anni dal lancio dello ZX Spectrum, Pringles ha infatti deciso di omaggiare l’iconico computer con il concorso Pringles Sonic Chip, che consiste nel decodificare il programma contenuto nella traccia audio del seguente video, utilizzando uno ZX Spectrum, reale o emulato:

Pringlesonic: il video di Pringles con la traccia audio da decodificare.

I primi che riusciranno nell’impresa, si aggiudicheranno una lattina speciale di patatine Pringles.

La comunità dello ZX Spectrum ha accolto la sfida con entusiasmo e il programma contenuto nel video di Pringles è stato prontamente decodificato:

Pringlesonic: il programma è stato decodificato.

Pur non potendo partecipare, in quanto l’iniziativa è riservata agli utenti del Regno Unito, ho comunque deciso di cimentarmi con la sfida.

La parte più difficile è stata ottenere una traccia audio di buona qualità, che potesse essere caricata sullo ZX Spectrum oppure convertita nei formati TZX e TAP, utilizzati comunemente dagli emulatori. Inizialmente, ho provato più volte a registrare l’output audio del video in riproduzione sul web browser del mio portatile, utilizzando Audacity; tuttavia, non sono mai riuscito ad ottenere un file WAV di qualità sufficiente per la conversione in TZX senza errori.
Fortunatamente, mi sono imbattutto nel metodo indicato da Rui F Ribeiro sul gruppo Facebook World of Spectrum, basato sul tool yt-dlp per estrarre l’audio da un video YouTube (nota: è richiesta la presenza di FFmpeg):

yt-dlp -ci -f 'bestvideo[ext=mp4]+bestaudio' -x --audio-format wav "https://www.youtube.com/watch?v=z1375a8rW0k"

Una volta ottenuto il file WAV, l’ho rinominato in pringlesonic.wav e convertito in formato TZX mediante l’utility audio2tape, disponibile nel pacchetto fuse-utils:

audio2tape pringlesonic.wav pringlesonic.tzx

Sono quindi finalmente riuscito a caricare il file TZX ottenuto sull’emulatore Fuse senza problemi.

Caricamento del programma contenuto nella traccia del video (emulatore Fuse).
Caricamento del programma contenuto nel video di Pringles (emulatore Fuse).

Per rendere più autentica l’esperienza, volevo comunque caricare il programma su di un vero ZX Spectrum; nella fattispecie ho pensato allo Spectrum Next che giace sulla mia scrivania, impaziente di essere utilizzato. Purtroppo, anche qui si è verificato un intoppo, infatti l’uscita audio del portatile non è sufficientemente potente e non avevo nell’immediato la possibilità di amplificare il segnale. Tuttavia, essendo il mio ZX Spectrum Next dotato di scheda acceleratrice Raspberry PI 0, mi sono avvalso della possibilità di caricare il file TZX a velocità massima, copiandolo preventivamente sulla scheda SD. Se non avessi avuto la scheda acceleratrice, avrei comunque potuto convertire il file TZX in formato TAP e trasferire quello su scheda SD.

Il video seguente mostra il risultato di cotanto lavoro:

Pringlesonic: caricamento del programma su ZX Spectrum Next.

Bene, mi è proprio venuta voglia di uno snack!

Risultati del BASIC 10Liner Contest 2022

Sabato scorso sono stati pubblicati i risultati dell’undicesima edizione del BASIC 10Liner contest, tradizionale competizione a cui si può partecipare realizzando giochi e programmi per computer a 8 bit in sole 10 righe di codice in linguaggio BASIC.

BASIC 10Liner Contest: “volantino” del concorso
BASIC 10Liner Contest: “volantino” del concorso

Analogamente allo scorso anno, ho partecipato per la categoria PUR-80 (massimo 80 caratteri per linea; abbreviazioni consentite) realizzando tre giochi, di cui due per ZX Spectrum (Bastilude, Fishie – Keep the sea plastic free!) e uno per ZX81 (JAMGame – Just Another Memory Game).

Fishie – Keep the sea plastic free! è entrato nella TOP 10, classificandosi 7° su 38 giochi in gara nella categoria PUR-80. Bastilude, nonostante la 25esima posizione, è stato particolarmente apprezzatto dal pubblico, che gli ha accordato il 2° posto nella classifica speciale Public’s Choice. JAMGame, infine, con la sua 18esima posizione si è assestato nella parte media della graduatoria.

Risultati del BASIC 10Liner Contest 2022.
Risultati del BASIC 10Liner Contest 2022 (grazie a Filippo Santellocco per l’immagine con tutti i risultati).
Nella classifica originale, Fishie è erroneamente associato al C64.

Nonostante sperassi in un posizionamento migliore di Bastilude, anche quest’anno posso ritenermi più che soddisfatto dei risultati raggiunti e come al solito ho già qualche idea che spero di poter sviluppare per la prossima edizione.

Ho avuto modo di esaminare o provare pochissimi dei giochi e programmi realizzati dagli altri concorrenti; tra questi ritengo particolarmente degni di nota 8-bit Sunset (vincitore della categoria SCHAU) e STOP THE micro EXPRESS (vincitore della categoria EXTREM-256). Quest’ultimo si avvale di una tecnica molto interessante di utilizzo dell’istruzione LPRINT, che ha consentito all’autore di rendere eccezionalmente fluide le animazioni.

Concludo con un ringraziamento a Gunnar, organizzatore del contest, ai giudici e a tutti i partecipanti!

Link e riferimenti

Read in English

Scroll in basso (ZX Spectrum)

In occasione del Crazy Climber Challenge, organizzata un paio di mesi fa dal gruppo Retro Programmers Inside, si discuteva di come realizzare, per i vari sistemi ammessi, routine di scroll verso il basso, funzionali allo sviluppo delle varie implementazioni del gioco. La mia attenzione, come di consueto, si è rivolta verso lo ZX Spectrum. L’effetto di scroll su questa macchina non è di immediata implementazione, a causa dell’organizzazione della memoria video.

Per lo scroll verso l’alto (utilizzato ad esempio nel mio 10 Liner 10 Miglia) me l’ero cavata semplicemente richiamando la routine implementata nella ROM all’indirizzo 3582 decimale.

Purtroppo, nella ROM dello Spectrum originale, non è presente una routine analoga per lo scroll verso il basso. Dato che i programmatori sono notoriamente pigri (e i retroprogrammatori ancora di più), prima di reinventare la ruota ho cercato altrove e ho trovato una soluzione nel libretto 77 Programmi per Spectrum di Gaetano Marano, fonte preziosa di utilissimi programmi per l’amato computer. Il codice si trova a pagina 95; di fatto è una routine assembly incorporata in un programma BASIC ed è fornito anche un esempio di utilizzo. Bando alle ciance quindi ed ecco il listato 😀:

66 REM Routine di SCROLL IN BASSO
77 REM da 77 Programmi per Spectrum di Gaetano Marano
99 BORDER 0: PAPER 0: INK 4: CLS
100 DATA 6,8,33,223,87,17,255,87,197,1,224,0,237,184,62,32,43,27,61,32,251,193,16,240
101 DATA 17,224,0,6,8,33,192,80,62,32,54,0,35,81,32,250,25,16,245
102 DATA 6,8,33,255,79,17,31,87,197,1,32,0,237,184,62,224,43,27,61,32,251,193,16,240
104 DATA 6,8,33,223,79,17,255,79,197,1,224,0,237,184,62,32,43,27,61,32,251,193,16,240
106 DATA 6,8,33,255,71,17,31,79,197,1,32,0,237,184,62,224,43,27,61,32,251,193,16,240
108 DATA 6,8,33,223,71,17,255,71,197,1,224,0,237,184,62,32,43,27,61,32,251,193,16,240
110 DATA 17,224,0,6,8,33,0,64,62,32,54,0,35,61,32,250,25,16,245
112 DATA 201
120 LET U=PEEK 23675+256*PEEK 23676
130 FOR A=U TO U+158
140 READ D: POKE A,D
150 NEXT A
999 REM ---------------------
1000 REM Programma di esempio
1010 REM --------------------
1020 FOR A=1 TO 1000
1030 PRINT AT 0, INT(RND*32);CHR$(36+(60*INT (RND*2)))
1040 LET S=USR U
1044 PAUSE 20
1050 NEXT A

L’animazione seguente mostra il programma in azione:

Animazione che mostra la routine di scroll in azione.
Programma di esempio che mostra la routine di scroll in azione (ZX Spectrum emulato con Fuse).

Se sei interessato al programma di scroll, puoi scaricarlo in formato TAP, oppure utilizzarlo nel tuo browser web, grazie all’emulatore online JSSpeccy.

Spunti di approfondimento

Quanto scritto, relativamente alla mancanza di una routine di scroll verso il basso nella ROM del sistema, è sicuramente valido per lo ZX Spectrum classico (16/48K). Tuttavia, i modelli successivi (128K, +2, +3 etc) sono dotati di un editor più evoluto, per cui non escludo che parti di esso possano essere sfruttate per implementare lo scroll verso il basso. Questo interessantissimo spunto è stato suggerito dall’amico Fabrizio Caruso e merita sicuramente un approfondimento!