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!

JAMGame: solo un altro gioco di memoria (ZX81)

JAMGame (Just Another Memory Game) è un piccolo videogioco di memoria, ispirato al classico gioco elettronico Simon, per computer Sinclair ZX81.

JAMGame: schermata di gioco.
JAMGame: terzo livello; la sequenza proposta dal computer termina con “4” e il giocatore ha appena inserito la sequenza “1234”.

JAMGame è il mio terzo gioco in gara per l’undicesima edizione del BASIC 10Liner Contest, categoria PUR-80. In base alle regole della competizione, è stato realizzato con 10 linee di programma in linguaggio BASIC, con ciascun linea lunga al massimo 80 caratteri.

La realizzazione di programmi completi in sole 10 righe di codice risulta particolarmente sfidante su computer come lo ZX81, il cui interprete BASIC consente l’utilizzo di una sola istruzione per linea. Nella maggior parte dei dialetti BASIC, al contrario, è possibile introdurre più istruzioni per linea, separandole con il carattere “:”.

Listato di JAMGame (ZX81 emulato con EightyOne)

Navigando alla pagina di JAMGame su itch.io, potrai sia giocare online (dispositivi mobili non supportati), sia scaricare un archivio contenente il gioco stesso e la relativa documentazione, inclusa la spiegazione del codice.

Descrizione del gioco

JAMGame è un gioco di memoria per giocatore singolo. In ciascun round, il computer mostra una sequenza di numeri pseudocasuali compresi nell’intervallo tra 1 e 4, dopodiché il giocatore deve riprodurre la sequenza premendo i tasti corrispondenti, seguiti da “Enter”.
Con l’avanzare del gioco, la lunghezza della sequenza aumenta. Se il giocatore digita la
sequenza sbagliata, il gioco termina e per fare un’altra partita, il programma deve essere nuovamente eseguito.
L’alternanza di due caratteri grafici aiuta a distinguere le singole cifre della sequenza da riprodurre. Quando la sequenza presentata dal computer è terminata, il carattere “░” viene visualizzato vicino all’ultima cifra.

JAMGame: video di una partita (registrato con l’emulatore ZEsarUX).

Listato

Il codice del programma è riportato di seguito. Per una spiegazione dettagliata, rimando alla pagina di JAMGame su itch.io, da cui è possibile scaricare un archivio .zip contenente il gioco e la relativa documentazione.

1 LET L=3
2 LET A$=""
3 FOR I=1 TO L
4 LET A$=A$+STR$(1+INT(RND*4))
5 PRINT AT 0,0;"LEVEL:";L-2,,A$(I);" ";CHR$(9+(I/2=INT(I/2))*(I<L)-1*(I=L))
6 NEXT I
7 INPUT B$
8 IF B$<>A$ THEN STOP
9 LET L=L+1
10 GOTO 2

Link e riferimenti

Read in English