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!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.