Approfondimento Manuale “Introduzione all’Architettura del C64” – Parte #2

(articolo di Attilio Capuozzo)

Salve a tutti,
come promesso, ritorno a parlare delle richieste di chiarimento e approfondimento ricevute dopo la pubblicazione del Manuale “Introduzione all’Architettura del C64” da me firmato e pubblicato sul N.11 di RETROMAGAZINE

http://www.retromagazine.net

In particolare mi è stato chiesto un approfondimento inerente la scelta dell’opportuno Banco di Memoria da 16K, del Chip Video VIC-II, per la memorizzazione dei blocchi di dati grafici come gli Sprite Data, i Character Data, ossia la Character Memory RAM (v. Manuale) per i Programmable Character (o UDG), la Text Screen Memory e la Bitmap (o Pagina Grafica).

Nel Manuale, a cui vi rimando per tutti i dettagli, gli esempi sono riferiti al Banco N.0 che è quello di default e che va dall’indirizzo di memoria 0/\$00 alla locazione 16383/\$3FFF.
In questo Banco abbiamo un’area compresa tra 820/\$0334 e 1023/\$03FF, il Cassette I/O Buffer usato per le operazioni di LOAD/SAVE/PRINT#/INPUT# del Datasette, che possiamo utilizzare per blocchi di memoria grafici come ad esempio 3 definizioni di Sprite (Sprite Shapes) da 64 byte ciascuno.
In questo caso non abbiamo bisogno di modificare i Puntatori al Top della Memoria RAM riservata al Programma BASIC (Puntatori 55/\$37 e 56/\$38).
Peraltro la Screen Memory di default occupa le locazioni 1024-2047 (\$0400-\$07FF) e dunque non entra in conflitto con l’Area riservata al testo BASIC (BASIC Text Area) utilizzata dal Programma BASIC.

Per memorizzare, invece, molti più blocchi di Sprite Pattern, così come blocchi da 2K dei Character Pattern, ci possiamo affidare all’area di memoria che inizia dall’indirizzo 12288/\$3000 in poi.
In tal caso, poiché ci troviamo nello spazio di memorizzazione riservato alla RAM BASIC compreso tra 2049/$0801 e 40960/\$A000, dobbiamo intervenire sul Puntatore 56/\$38 per riservarci una cosiddetta “Safe Area” dedicata ai dati grafici inserendo la seguente riga all’inizio del nostro programma:

POKE 56,48:CLR

Vi ricordo che l’istruzione CLR è necessaria per aggiornare i Puntatori e per assicurare che la Storage Area delle Stringhe di Testo (Puntatori 51/\$33 e 52/\$34 – Bottom String Text Storage Area) inizi al di sotto della nostra “Safe Area”.
In questo modo lasciamo al Programma BASIC, nonché alle Tabelle delle Variabili, degli Array (Vettori e Matrici) e all’Area delle Stringhe di Testo, un spazio di memoria di 10K.

Per contro il Banco 0 non è il luogo migliore per memorizzare un Bitmapped Display che richiede circa 9K di dati: 1 blocco da 8K per la Bitmap Display Memory (la Pagina Grafica vera e propria) e 1 blocco da 1K per la Text Screen Memory che nel Bitmap Mode svolge il ruolo di Color Map sostituendosi alla Color RAM (55296/\$D800-56319/\$DBFF) utilizzata di default nel Character Mode.

In un prossimo articolo vedremo quali altri Memory Video Bank da 16K possiamo utilizzare.

Have your say