L'Architettura a Strati del Commodore 64
Marco Vaccaro - 📅 31/10/2026 - ← Torna a Nostalgia 64
Quando si accende un Commodore 64 e compare la scritta "38911 BASIC BYTES FREE", si è portati a credere che la memoria della macchina sia un blocco piatto e sequenziale. È una menzogna rassicurante fornita dal sistema operativo. L'architettura del C64 non è una mappa bidimensionale, ma un sistema tridimensionale a strati, dominato da interruttori hardware e chip che si contendono l'accesso al bus.

Per dominare la macchina in linguaggio macchina ad "astrazione zero", bisogna smontare questa illusione.
1. Il fondale di silicio e le maschere di sistema
Alla base della scheda madre c'è un blocco fisico di RAM ininterrotta da 64 KB (da $0000 a $FFFF). Questo è il fondale. Tuttavia, il processore (il MOS 6510) può indirizzare al massimo 64 KB in totale. Come fa la Commodore a farci stare i 64 KB di RAM, gli 8 KB dell'interprete BASIC, gli 8 KB del KERNAL (il sistema operativo) e i 4 KB dei registri hardware (I/O)?
La soluzione ingegneristica è la sovrapposizione. I chip ROM del BASIC (a $A000) e del KERNAL (a $E000) sono cablati elettricamente "sopra" la RAM. All'avvio, il processore è costretto a guardare attraverso queste "maschere". Se la CPU legge all'indirizzo $A000, non vede la RAM, ma i comandi tokenizzati del BASIC incisi nella ROM.
2. Scrivere "attraverso" la ROM: La RAM ombra
L'aspetto più affascinante di questo design è l'asimmetria tra lettura e scrittura. Una ROM, per natura, è di sola lettura (Read Only Memory).
L'analogia del foglio di carta: Immagina la RAM come un foglio bianco appoggiato su una scrivania, e la ROM come una lastra di vetro stampata appoggiata sopra di esso. Se guardi dall'alto (Lettura), vedi i disegni sul vetro. Ma se usi un pennarello e premi sul vetro, l'inchiostro passa oltre e macchia il foglio bianco sottostante (Scrittura).
Nel C64 avviene esattamente questo:
-
Se da BASIC scrivi
POKE 40960, 120(che corrisponde all'inizio della ROM BASIC a$A000), l'hardware sa che non può alterare la ROM. Quindi, il dato "buca" lo strato superiore e viene memorizzato fisicamente nella RAM nascosta di sotto. -
Se subito dopo fai
PEEK(40960), il 6510 legge lo strato superiore e ti restituisce il valore della ROM (148), ignorando il tuo 120, che però rimane parcheggiato intatto nel silicio sottostante.
3. Il Memory Banking: Strappare le maschere
Per accedere a quei byte nascosti o per avere 64 KB di RAM pura e continua per i propri programmi in Assembly, bisogna spegnere le ROM. Il processore MOS 6510 ha una particolarità rispetto al 6502 standard: possiede una porta I/O bidirezionale interna, mappata agli indirizzi $0000 e $0001. Il registro $01 agisce letteralmente come una pulsantiera fisica.
Scrivendo bit specifici in $01, si stacca la corrente ai chip ROM, escludendoli dal bus dati. Iniettando il valore esadecimale $34 (binario %00110100), i bit che alimentano BASIC e KERNAL crollano a zero.
lda #$34
sta $01
In due cicli di clock, il sistema operativo e l'interprete evaporano. La RAM sottostante emerge completamente. Da quel momento il C64 è una tela vuota, un'unica autostrada di RAM continua. Ma sei senza rete: nessun comando BASIC funzionerà più e, se un interrupt hardware dovesse scattare cercando le routine del KERNAL appena spento, il sistema andrebbe in crash irreversibile.
4. L'Area I/O e l'anarchia del VIC-II
C'è un'area che si comporta diversamente: lo spazio da $D000 a $DFFF. Questa finestra è assegnata ai registri I/O (Input/Output) che controllano il chip video (VIC-II), il chip audio (SID) e i controller periferiche (CIA).
Quando forziamo il valore $34 nel registro $01, spegniamo BASIC e KERNAL, ma lasciamo intatto il bit 2 (che vale 4). Quel bit mantiene aperta la finestra I/O. Ecco perché una routine in Assembly può continuare a cambiare il colore del bordo o muovere gli sprite anche col sistema operativo azzerato: la CPU vede ancora i registri hardware.
Il doppio bus del VIC-II: Gli sprite e la grafica continuano a funzionare anche per un altro motivo strutturale: il chip video VIC-II è anarchico. Possiede un suo bus indirizzi a 14 bit dedicato. Accede alla RAM mentre la CPU 6510 è distratta (nella seconda metà del ciclo di clock). Al VIC-II non interessa assolutamente nulla di come tu abbia impostato il registro $01. Lui scavalca la CPU e legge direttamente la memoria fisica (RAM o ROM dei caratteri) per stampare i pixel sul tubo catodico.
Il 6510 e il VIC-II condividono lo stesso corpo, ma guardano la memoria con occhi diversi. Comprendere questa disconnessione è la vera chiave di volta per programmare l'hardware al metallo.
