PhenomaLaserdisc Rom Atlas

Esh’s Aurunmilla

Funai, 1984

Tre chip sovrapposti

Un chip per ogni bit del colore: sovrapposti, ogni pixel prende un valore da zero a sette. Cinquecentododici tessere — e la tavolozza che le colora, letta fino al byte che sceglie il rosso del cuoricino.

Tre chip, uno per bit

Esh tiene la sua grafica in tre chip da 4 KB. Non sono tre pezzi di un magazzino più grande: sono sovrapposti. Il primo dice il bit basso di ogni pixel, il secondo quello di mezzo, il terzo quello alto — e messi insieme ogni pixel prende un valore da zero a sette.

Fanno cinquecentododici tessere da otto per otto: il doppio di quelle di Super Don, e con la metà dei colori per tessera. Due modi opposti di spendere lo stesso silicio.

Le prime centoventotto

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127

Le tessere non sono figure: sono quarti di figura

Cercando il cuoricino che Alan ricordava, è saltata fuori una cosa che cambia la lettura di tutto questo magazzino. La tessera non è l’unità di disegno. Le tessere si prendono a quattro alla volta — due sopra e due sotto — e fanno una figura da sedici per sedici. Cinquecentododici tessere sono centoventotto figure.

Le tessere 480, 481, 482, 483 prese in quel modo danno una X. Prese una per una sono quattro pezzi di diagonale che non vogliono dire niente.

E che l’incastro sia questo si misura

Se le tessere si accoppiano pari con dispari, il disegno deve proseguire attraverso la giuntura: l’ultima colonna della prima e la prima colonna della seconda accese insieme. Contate su tutto il magazzino, quelle righe continue sono 445.

Provando l’accoppiamento sbagliato — dispari con pari — sono zero. Non poche: nessuna.

La vita: un cuoricino con cappello e gambette

Quello che conta le vite, in Esh, non è una cifra: è una figurina. Un cuore con un cappello e due gambe, che Alan ricordava dal cabinato — «non ho mai capito perché la vita era così… ma è carino».

Le tessere 124, 125, 126, 127 — le ultime quattro che disegnano qualcosa nella prima metà del magazzino. Le gambe sono aperte, come in un passo di cammino. — I colori sono quelli veri: li sceglie l’attributo che la ROM scrive quando disegna le vite, e il byte che lo dice è qui sotto.

Le sue quattro tessere, una per una: separate non vogliono dire niente, ed è la prova più semplice che l’unità di disegno sono quattro.

124
125
126
127
E una nostra stesura sbagliata, corretta qui

Nella prima stesura di questa pagina avevamo scritto che il cuore era la tessera 479. Era falso. Quella tessera, da sola, ha davvero la forma di un cuore — ma è il quarto in basso a destra di una figura più grande, che messa insieme è un ideogramma giapponese. Un quarto di ideogramma che per caso sembra un cuore.

L’errore non era nella lettura dei byte: era nella domanda. Cercavo una figura dentro un’unità che non è una figura.

⭐ E adesso i colori ci sono

Questa sezione, fino al 6 settembre 2026, si intitolava «e i colori di questa pagina sono sbagliati» e finiva con una promessa: fino a che non avremo letto chi sceglie la tavolozza, queste figure restano in grigio. La promessa è stata mantenuta, e per una ragione che vale la pena raccontare: non abbiamo scoperto niente di nuovo — abbiamo aperto quello che avevamo già in casa. La PROM dei colori sta dentro il set di ROM del gioco, j1_rgb.bin, 512 byte, dal primo giorno.

Due testimoni, e dicono la stessa cosa

Matt Ownby ha ricostruito quella PROM in VHDL per poterla sostituire sulle schede vere. Abbiamo confrontato la sua ricostruzione con il binario di fabbrica: identici, 512 byte su 512. Da qui in avanti, sui colori di Esh, non stiamo più deducendo.

Come si compone un colore

Il numero da zero a sette che esce dai tre chip non è un colore: è una casella. Il colore vero lo decide l’indirizzo con cui si interroga la PROM, e quell’indirizzo è fatto di quattro cose diverse:

bitche cos’èchi lo decide
A0-A2l’indice del pixel (0-7)i tre chip della grafica, sovrapposti
A3-A6la tavolozza (0-15)il programma, nei bit 0-3 dell’attributo della cella
A7lo sfondo: nero trasparente, oppure bluun interruttore globale sulla porta F5 — non sta nella cella
A8il lampeggio: fase spenta o normaleun pendolo hardware, scelto dai bit 6-7 dell’attributo

⇒ La domanda vecchia — chi sceglie la tavolozza? — ha una risposta breve: l’attributo della cella, che il programma scrive nella seconda metà della memoria video. E un attributo lo abbiamo letto nella ROM, quello che ci interessava di più.

Le sedici tavolozze, coi colori della scheda

tav.le otto caselle
0 (spenta)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

La prima casella di ogni tavolozza è quella dello sfondo: qui la vedete nera perché è il pixel trasparente, quello attraverso cui si vede il film del laserdisc. Con l’interruttore dello sfondo alzato diventa blu — ed è lo stesso blu per tutte e sedici: rgb(0, 0, 71). Il blu di Esh è uno solo.

La vecchia lettura torna, al numero

La prima stesura di questa pagina aveva contato, senza sapere che cosa stesse contando: «64 tavolozze da otto caselle, 34 spente, 30 vive — due gruppi da quindici, identici fra loro tranne la prima casella: due sfondi per le stesse tinte». Erano quindici tavolozze vive per due sfondi: quel «tranne la prima casella» era esattamente l’interruttore A7. La misura era giusta; mancava il nome delle cose.

Un attributo letto davvero: INSERT COIN

Nella ROM, all’indirizzo 3F9F, c’è questa fila di byte:

89494E5345525420434F494EFF
attributoINSERT COINfine

Quel 89 davanti alle lettere è l’attributo, e adesso si legge tutto: i bit bassi dicono tavolozza 9, i bit alti scelgono il canale del lampeggio. E le lettere, nelle tessere, sono disegnate con l’indice 7 su fondo 0 — cioè inchiostro e trasparenza, niente altro.

Di che colore è, allora

L’inchiostro della scritta è la casella 7 della tavolozza 9: #979797 — un grigio chiaro, non un bianco. Sullo schermo di un emulatore lo vedete più chiaro, #E0E0E0, perché Daphne applica una correzione per schiarire i colori: sta scritta nel suo codice, «to make colors brighter overall». È una scelta di chi emula, non della macchina.

📌 Quando abbiamo ricostruito quella scritta per il nostro disco, il colore lo avevamo preso a occhio da un video: #DFDFDF. Un punto su 255 di distanza da quello giusto.

Il pendolo del lampeggio

Il lampeggio delle scritte non è una cosa che il programma fa a mano: è hardware. I bit 6-7 dell’attributo scelgono uno di quattro canali, e ogni canale ha la sua velocità. Le velocità stanno in otto byte dentro la ROM, all’indirizzo 035D:

bytecanaleperiodoquanto lampeggia
10 00bit 40 campifermo: non lampeggia
20 02bit 52 campi≈ 15 volte al secondo
40 04bit 64 campi≈ 7,5 volte al secondo
80 07bit 77 campi≈ 4,3 volte al secondo
E nella fase spenta non cambia colore: sparisce

La PROM dei colori è grande il doppio del necessario proprio per questo: metà tabella è «normale», metà è «lampeggio in corso». E in quella metà ci sono due soli valori: trasparente e blu. Vuol dire che una cella che lampeggia, nella fase spenta, non prende un altro colore: mostra soltanto lo sfondo — il film, se lo sfondo è trasparente; il blu, se è alzato l’interruttore.

❤️ Di che colore è il cuoricino

Questa sezione, fino al 7 settembre 2026, si intitolava «le sue caselle, non i suoi colori» e finiva con una rinuncia: quel punto del codice, per il cuore, non l’abbiamo ancora letto. Adesso è letto, e la risposta è un byte.

  0899  16 83     LD D,83     <- il codice della figura
  089B  1E 0F     LD E,0F     <- l’ATTRIBUTO
  089D  CD 8F 05  CALL 058F   disegna una figura grande
  08A0  04        INC B
  08A1  04        INC B       due colonne più in là
  08A2  25        DEC H       una per ogni vita che ti resta
  08A3  20 F8     JR NZ,089D

Che D ed E siano proprio il codice e l’attributo non è una supposizione: lo dice la routine a cui vengono consegnati.

  059E  DD 21 00 F0  LD IX,F000   il piano dei CODICI
  05A2  FD 21 00 F4  LD IY,F400   il piano degli ATTRIBUTI
  05AB  DD 72 00     LD (IX+00),D
  05AE  FD 73 00     LD (IY+00),E
Due conti, e tornano tutti e due

La figura. Per i codici da 80 a 8F la ROM calcola (codice − 64) × 4 — si legge a 05C4: SBC A,64 / SLA A / SLA A. Con D = 83: (0x83 − 0x64) × 4 = 31 × 4 = 124. Sono le quattro tessere del cuore, quelle che si vedono qui sopra.

Il colore. L’attributo 0F ha i quattro bit bassi accesi: tavolozza 15. Il bit 4 è spento — banco basso delle tessere, e infatti la 124 sta lì — e i due bit alti sono spenti: il cuore non lampeggia.

Il contatore delle vite di Esh, con i colori che gli dà la sua scheda: tavolozza 15, quella che sceglie l’attributo 0F.

casellail colorepixelche cos’è
0 trasparente160lo sfondo: il film del laserdisc si vede attraverso
1 #97000053il corpo del cuore
2 #B800008il riflesso, un rosso più acceso
3 #97970014il cappello
4 #97974715il cappello, la parte chiara
6 #6800006l’ombra e le gambette
⇒ Un cuore rosso col cappello giallo

E la memoria di chi ci ha giocato aveva ragione. Alan lo ricordava dal cabinato — «non ho mai capito perché la vita era così… ma è carino» — e i byte gli danno un rosso scuro per il corpo, uno più acceso per il riflesso, e due gialli per il cappello.

E c’è una cosa che vale la pena dire sul come. Avevamo messo in conto di doverlo leggere a gioco acceso, andando a guardare la memoria video mentre il cuore stava a schermo. Non è servito: l’attributo non lo decide il momento, lo decide il programma, e quindi stava fermo nella ROM da quarant’anni. La domanda era piu’ facile di come l’avevamo fatta.

⚠ Quello che si vede qui è il colore che manda la scheda. Un emulatore può farlo più chiaro: Daphne (e con lui LGL) alza una gamma 4.0 «to make colors brighter overall», che è una scelta di chi emula, non della macchina del 1983.

E le altre centoventisette figure?

Restano in grigio, ed è una scelta. Il colore di una figura non sta nella figura: sta nell’attributo che il programma scrive quando la disegna, e quel punto del codice va trovato una figura alla volta. Per il cuore l’abbiamo trovato; per le altre no, e finché non lo troviamo colorarle sarebbe mostrare un colore inventato con l’aria del colore vero.

⇒ Adesso però sappiamo come si fa, e questa è la differenza fra una cosa che manca e una cosa che non si sa.

📜 Come ci siamo arrivati, per chi vuole rifarlo: nessun codice di tessera sta scritto in chiaro nella ROM — cercare 7C 7D 7E 7F non dà niente, perché la figura è calcolata. La strada buona è partire da chi legge le vite (087D: LD HL,E3BF) e guardare che cosa disegna subito dopo.

Come si legge nei byte