PhenomaLaserdisc Rom Atlas

Road Blaster

Data East, 1985

I cartelli e il cruscotto

Le due frecce, il freno, la turbina e il cruscotto intero, ricostruiti dai tre chip grafici tessera per tessera. Più la schermata che la macchina stampa all’accensione, dove c’è il nome di chi l’ha scritta.

Tre chip, tre piani, mille tessere

Road Blaster tiene i suoi disegni in tre chip da otto kilobyte, e non sono tre disegni diversi: sono tre piani della stessa immagine. Sovrapposti danno, per ogni pixel, un numero da 0 a 7. In tutto fanno 1024 tessere da 8×8, e lo schermo è una griglia di 32×32 caselle con due mappe sovrapposte.

I quattro cartelli

Road Blaster non disegna i suoi cartelli con del codice: li tiene come tavole di sedici tessere, una per cartello, e le copia a schermo con quattro istruzioni. Trovare le tavole vuol dire avere i disegni.

sterza a sinistra
sterza a sinistra
sterza a destra
sterza a destra
il turbo
il turbo
il freno
il freno
il cartellola tavolala paginadove appare
la freccia a sinistra$C7172riga 12, colonna 10
la freccia a destra$C7072riga 12, colonna 18
il freno$CBB5 / $CBC51righe 25-28, colonna 12
il turbo$C900 / $C9101righe 25-28, colonna 16

Le due frecce stanno una per parte del centro e alla stessa altezza: quella a sinistra si accende a sinistra, quella a destra a destra. A sceglierle è il bit 0 del record — lo stesso bit che dice al giudice quale direzione aspettarsi.

Lampeggiano, ma non allo stesso modo

Tutti e tre battono sullo stesso orologio (LDA $B4 / AND #$08) e hanno due tavole a testa. Ma le due tavole non fanno la stessa cosa:

freno, acceso
freno, acceso
freno, spento
freno, spento
turbo, acceso
turbo, acceso
turbo, spento
turbo, spento

Il freno disegna il pedale in tutt’e due: a lampeggiare è solo la parola BRAKE. Il turbo ha la seconda tavola che punta a sedici tessere vuote: appare e sparisce tutto intero.

Il cruscotto è una mappa sola

Non lo disegna il codice pezzo per pezzo: 256 byte a 0x CEC2 sono otto righe per trentadue colonne, più una riga a 0x CFC2. Si rimonta identico — INDICATER scritto male compreso, che è come sta nella ROM.

il cruscotto, dai byte
il cruscotto, dai byte

I due aghi vengono dalla velocità ($4E), la barra in alto è il fiato del turbo ($50, ventitré stati già disegnati: tieni il turbo troppo e si esaurisce), e il riquadro INDICATER è dove compaiono il freno e la turbina.

E all’accensione dice chi l’ha scritta

Cinque righe in chiaro nella ROM, a 0x C14B, stampate sul percorso diretto del reset ($C000 → … → JSR $C11D):

LX5 ROAD BLASTER
VERSION 2.0
 
COPYRIGHT C 1985 7.13
DATE EAST COPORATION
BY SHINTARO.KUMAGAI

LX5 è la sigla di progetto della Data East. 7.13 è la data in cui il programma è stato chiuso: 13 luglio 1985. E Shintaro Kumagai è chi l’ha scritto — un nome, non una sigla di studio. I due refusi (DATE East, COPORATION) sono suoi.

E i colori? Non sono in questi chip — sono nel programma

Nei tre chip c’è solo la forma: per ogni pixel un numero da 0 a 7. Il colore lo mette una tavolozza che sta altrove — e per un pezzo abbiamo creduto che fosse in una pastiglia di memoria che a noi mancava. Non manca: non esiste. Chi ha salvato la scheda nel 2002 ha elencato ogni chip delle due piastre, e una pastiglia di colori non c’è proprio.

La tavolozza è memoria viva, e la riempie il programma: diciassette byte di codice che copiano otto colori da una tavola in ROM — uno per ciascuno degli otto valori che i tre piani sanno comporre.

E tre di quei colori non stanno fermi: cambiano da soli

Subito prima di copiare gli otto, lo stesso pezzo di programma ne riscrive tre pescandoli da tre tavolette di quattro voci. E l’indice non lo sceglie il gioco: lo dà l’orologio — i bit 4 e 5 del contatore dei fotogrammi, quello che si alza di uno a ogni ritorno di quadro.

⇒ I cartelli non lampeggiano soltanto: cambiano tinta. Il lampeggio è il bit 3 dello stesso contatore — ogni otto fotogrammi — e il colore cambia ogni sedici, con un giro completo di sessantaquattro fotogrammi, poco più di due secondi.

E qui i byte hanno dato ragione a un occhio

Il giorno prima, guardando il suo cabinato, Alan aveva detto due cose che noi non potevamo leggere da nessuna parte: che la freccia è verde, e che il mirino è giallo.

Verde pieno e giallo pieno sono esattamente le prime voci di due di quelle tre tavolette. Non è una conferma da poco: se avessimo sbagliato a leggere il formato dei colori — che è compresso in un byte, coi bit rovesciati — da lì non sarebbero usciti proprio quei due.

Le immagini di questa pagina restano in scala di grigi, e adesso per un motivo diverso da prima: la tavolozza la sappiamo, ma quale tinta tocchi a quale casella lo decide il gioco mentre corre, scrivendolo in una parte dello schermo che nella ROM non c’è. Per colorarle come le vede chi gioca servirebbe una fotografia della memoria video, non un altro raschio.

E una cosa imparata sbagliando

Il verso dei bit ci ha ingannati tre volte

Il primo montaggio veniva specchiato, e ce ne siamo accorti solo perché nel cruscotto c’è scritto INDICATER e si leggeva al contrario. Corretto l’asse orizzontale, SPEED veniva 2bEED: mancava ancora il capovolgimento verticale (una S capovolta è un 2, una P è una b).

Le lettere sono il collaudo della lettura grafica. Una freccia specchiata sembra giusta lo stesso, e ci avremmo creduto. Solo una parola dentro il disegno dice se stai leggendo i bit dal verso giusto. Quando si raschia una grafica, la prima cosa da cercare è un pezzo che contenga del testo.

I tre chip: 05-08.bin, 04-07.bin, 03-06.bin, otto kilobyte ciascuno, pesati 4 / 2 / 1. La regola di lettura è quella che esegue LGL in bega::draw_8x8: bit 0 = pixel più a sinistra, e le righe capovolte (7−y). Le mappe dello schermo: $2800 e $3800, coi due bit alti in $2C00 e $3C00. Le immagini di questa pagina le rifa’ tools/grafica_roadblaster.py, e pesano 1,9 KB in tutto.