Approfondimenti Manuale “Introduzione all’architettura del C64” – Parte #3

(articolo di Attilio Capuozzo)

L'immagine può contenere: testo

Buonasera,
nel Post precedente abbiamo visto dove poter creare, nell’ambito del Banco di Memoria da 16K N.0 (il Memory Video Bank di default), accessibile dal Chip Video VIC-II, una cosiddetta Safe Area indispensabile per proteggere i nostri Dati Grafici dall’eventuale sovrascrittura del Programma BASIC e delle sue Variabili.
La Safe Area del Banco 0 la possiamo utilizzare sia per i blocchi da 64 Bytes di Sprite Pattern che per la Character Memory RAM (2K) necessaria a creare i Caratteri Ridefiniti ossia i Programmable Character o UDG acronimo di User Definable Graphics Character.

Nel caso del Banco 0, come dicevo già la volta precedente, la Video Screen Memory Area (da 1024/\$0400 a 2047/\$07FF), è allocata di default in un’Area esterna all spazio di lavoro del Programma BASIC (BASIC Program Text Area = 2048/\$0800-40959/\$9FFF) e dunque a meno di rilocazioni, da parte nostra, della Screen Memory che la farebbero rientrare nel Workspace della BASIC RAM, non dobbiamo preoccuparci di riservarle un opportuno spazio nella nostra Safe Area.

Ma se volessimo lasciare alla BASIC Program Text Area un maggior spazio di Memoria RAM dovremmo cambiare Banco da 16K e in particolare selezionare il Banco 2 che va dagli indirizzi 32768/\$8000 a 49151/\$BFFF.
Se effettuassimo dunque uno switching al Banco 2, potremmo far coincidere la Starting Location della nostra Safe Area con il Base Address del Banco 2, ossia 32768/\$8000.

In tal caso potremmo organizzare la nostra Safe Area per i seguenti scopi:

  • l’Area di Memoria che va da 32768/\$8000 a 33791/\$83FF è uno spazio sufficiente per 16 blocchi da 64 Bytes di dati per la definizione degli Sprite (Sprite Data o Sprite Pattern)
  • da 33792/\$8400 a 34815/\$87FF per la Video Screen Memory da 1K (la rilocazione della Screen Memory ai predetti Indirizzi avviene in automatico a seguito dello Switch al Banco 2)
  • da 34816/\$8800 a 36864/\$9000 per la Character Memory RAM (ossia un New Character Set/Caratteri Ridefiniti)

Vi ricordo che nei seguenti Indirizzi, 36864/\$9000-40959/\$9FFF, è presente la Character ROM Image per il Chip VIC-II (v. Manuale).

In tal modo lasceremmo alla BASIC Text Area uno spazio di memoria di ben 30K su 38911 BASIC BYTES FREE (come recita la schermata iniziale del C64) corrispondenti a circa 38K.

In un nostro Programma BASIC, per switchare correttamente al Memory Video Bank N.2, andremo a scrivere le segg. linee:

10 POKE56,128:CLR
20 POKE648,132
30 POKE56576,(PEEK(56576)AND252)OR1

La riga 20 è necessaria nei Programmi BASIC in quanto la locazione 648 serve ad aggiornare la Routine KERNAL della PRINT affinché punti correttamente all’attuale Base Address della Screen Memory rilocata a seguito del cambio di Banco, altrimenti continuerebbe a puntare all’Indirizzo 1024/\$0400 (v. Manuale).
Solo nel BITMAP MODE NON è necessario aggiornare la locazione 648 poiché la Text Screen Memory assume un diverso significato per la Bitmap (ossia diventa una Color Map) e dunque la normale PRINT dei Caratteri non può essere effettuata sulla Pagina Grafica.

Prima di uscire dal Programma dovremmo ripristinare le condizioni di memoria iniziali inserendo le righe seguenti (la numerazione, ovviamente, è a titolo esemplificativo):

500 POKE55,0:POKE56,160:CLR
510 POKE56576,(PEEK(56576)AND252)OR3
520 POKE648,4

Ci vediamo per un prossimo approfondimento del mio Manuale.

Have your say