Il C64 ha 64K di RAM, 8K di Basic ROM, 8K di Kernal ROM, e 4K di "memory mapped I/O" (cioè, cose che appaiono come locazioni di memoria, ma in realtà sono accessi agli altri chip, es. il VIC per la grafica, il SID per il suono, i CIA ...)
Il processore, però, può indirizzare solo 64K.
Il trucco inventato dagli ingeneri della Commodore è questo: alcune aree della memoria RAM possono essere "nascoste", in modo che le letture, o le letture e le scritture, in quell'area di memoria, non abbiano effetto sulla RAM, ma sulla ROM, o sull'I/O.
La situazione di default, all'accensione, è questa. Solo 44K di RAM sono leggibili (con PEEK). I restanti 20K sono mappati su ROM o I/O.
Se la locazione di memoria non è mappata, la PEEK e la POKE leggeranno e scriveranno la RAM.
Se la locazione di memoria è mappata su Kernal ROM o Basic ROM, la PEEK legge la ROM, ma la POKE scrive sulla RAM! E' questo il motivo per cui POKE I,PEEK(I) non è inutile come sembra.
Se la locazione di memoria è mappata su I/O, PEEK e POKE agiscono si registri di I/O.
Le mappature sono determinate dal contenuto della locazione 1 (che non è una locazione di memoria, anche se sembra, ma un registro del processore).
Per ulteriori informazioni, la guida di riferimento del programmatore spiega tutto in maniera più approfondita.
"cancellare il contenuto della memoria ROM" è improprio. In realtà, quello che il programma si propone di fare, è copiare la ROM nella RAM "sottostante", e poi smettere di mappare quell'area, in modo tale che venga letta la RAM invece della ROM (che dopo la copia, ha lo stesso contenuto). Spegnendo e rieaccendendo, quello che si cancella non è la ROM, ma la RAM che veniva vista al suo posto.