{{htmlmetatags>metatag-robots=()
metatag-title=(Uso della memoria della MIDRES library)
metatag-keywords=(C,library,Midres,Memoria,Tiles,Commodore 64,Commodore VIC20,Commodore 16)
metatag-description=(La libreria MIDRES cerca di sfruttare le similitudini tra chipset e architetture diverse. Una delle similitudini è la mappatura in memoria delle varie funzionalità.)
metatag-media-og:image=(:midres_library:memory_layout_vic20_unexpanded.png)
metatag-og:title=(Uso della memoria della MIDRES library)
metatag-og:description=(La libreria MIDRES cerca di sfruttare le similitudini tra chipset e architetture diverse. Una delle similitudini è la mappatura in memoria delle varie funzionalità.)
}}
====== USO DELLA MEMORIA DELLA LIBRERIA MIDRES ======
Al fine di dare la maggior efficienza possibile al codice compilato, [[:it:midres_library|la libreria MIDRES]] introduce il minor numero di astrazioni possibili. In particolare, cerca di sfruttare le similitudini tra chipset e architetture diverse. Una delle similitudini è la mappatura in memoria delle varie funzionalità.
Qui di seguito diamo, quindi, una serie di primitive di mappatura funzionale e il relativo dispiegamento in memoria per le varie architetture.
----
===== MAPPATURA FUNZIONALE =====
==== INDIRIZZO DI PARTENZA =====
Ogni architettura ha un indirizzo a cui inizia il codice C compilato (il codice assembly). Di regola, tale indirizzo coincide con l'inizio del programma BASIC equivalente. Infatti, il compilatore ''cc65'' genera il "loader" appropriato che non è altro che un "SYS" verso la prima istruzione di assembly.
A volte, a causa della sovrapposizione tra la memoria grafica e il programma BASIC, è stato necessario spostare l'indirizzo di partenza in una posizione diversa. In questo caso, è allegato un piccolo caricatore (scritto in BASIC), che si occupa di caricare da disco l'assembly nella posizione corretta prima di avviarlo.
==== SCREENS =====
Questo tipo di memoria mappa una superficie di lettere (o "tile") composta da un certo numero di righe e di colonne. Ogni lettera (o "tile") viene rappresentata da un numero senza segno a 8 bit. Tale numero rappresenta un indice nella memoria speciale.
==== TILESETS =====
Questo tipo di memoria contiene la rappresentazione pixel a pixel e monocromatica di ogni lettera (o "tile") indicata dal numero senza segno a 8 bit, così come presente nella memoria video (testo).
==== BITBLITS =====
Questo tipo di memoria può essere utilizzato dalle primitive di spostamento (o "bitblit"), e non necessariamente corrisponde a qualcosa di visibile sullo schermo.
----
===== ARCHITETTURE =====
==== COMMODORE VIC 20 (inespanso) ====
* **INDIRIZZO INIZIALE:** $1000
* **SCREENS**: 1
* **TILESETS**: 4 (4 ROM)
* **BITBLITS**: 0
{{ :midres_library:memory_layout_vic20_unexpanded.png?nolink |}}
----
==== COMMODORE VIC 20 (espansione di 32KB) ====
* **INDIRIZZO INIZIALE:** $2000
* **SCREENS**: 7
* **TILESETS**: 7 (3 RAM + 4 ROM)
* **BITBLITS**: 6
{{ :midres_library:memory_layout_vic2024.png?nolink |}}
----
==== COMMODORE 64 ====
* **INDIRIZZO INIZIALE:** $0801
* **SCREENS**: 16
* **TILESETS**: 6 (4 RAM + 2 ROM)
* **BITBLITS**: 15
{{ :midres_library:memory_layout_c64.png?nolink |}}
----
==== COMMODORE 16 ====
* **INDIRIZZO INIZIALE:** $1000
* **SCREENS**: 3
* **TILESETS**: 8 (4 RAM + 4 ROM)
* **BITBLITS**: 2
{{ :midres_library:memory_layout_c16.png?nolink |}}
----
==== COMMODORE PLUS/4 ====
* **INDIRIZZO INIZIALE:** $4000
* **SCREENS**: 7
* **TILESETS**: 15 (11 RAM + 4 ROM)
* **BITBLITS**: 6
{{ :midres_library:memory_layout_plus4.png?nolink |}}