{{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 |}}