Ciao a tutti,
x Alberto: ah, forse ho capito come hai fatto... io usavo un altro metodo... ma sia come faccio io o come fai te credo sia la stessa cosa, per cui dietrofront!
Evito di rispondere riguardo a domande specifiche sul codice, visto che lo ha postato Alberto e potrei non averne compreso alcune parti (ognuno ha il suo stile di programmazione).
Attenzione a non confondere il multiplexing con la tecnica generica delle interruzioni del raster, sono due cose differenti.
Vediamo un attimo come funge il raster.
Lo schermo, nei sistemi PAL (cioè quelli che usiamo noi), viene aggiornato 50 volte al secondo. Questo aggiornamento viene fatto da un fascio di elettroni, che fa in modo che vengano accesi i pixel opportuni su ciascuna linea di scansione (eccitando i fosfori).
********************* 1a linea
********************* 2a linea
queste linee vengono visualizzate dall'alto verso il basso, e poi il processo ricomincia da capo. Il fascio di elettroni percorre ciascuna linea da sinistra a destra.
Giunto all'ultima linea, il fascio riprende la sua scansione dalla prima in alto.
Il raster è un termine che indica diverse cose:
- lo schermo raster: è lo schermo diviso in linee di scansione.
- il raster (abbreviazione di rasterbeam) = pennello elettronico.
- raster (nel senso di raster interrupt) = interruzione del raster.
Un'interruzione del raster viene generata dal VIC-II quando il rasterbeam si trova in una certa linea di scansione. Nel C64 PAL, le linee di scansione vanno da 0 a 312 (quelle visibili da 50 a 250, le non visibili corrispondono al bordo).
Il registro del raster (in realtà sono due perché l'informazione è a 9 bit, ma tralasciamo questo aspetto) indica la posizione corrente del raster. Inoltre, scrivendo su questo stesso registro, viene impostato il valore al quale avverrà l'interruzione del raster.
Per esempio, se voglio dividere lo schermo in due parti, in modo che in mezzo schermo il bordo sia rosso e nell'altro mezzo bianco, devo generare due interruzioni del raster (una a metà dello schermo - impostando di conseguenza il registro alla opportuna linea di scansione) e una in cima allo schermo (linea di scansione 0).
Analogamente, se voglio rappresentare più di 8 sprite sullo schermo, basta che io generi ad esempio 4 interruzioni del raster, dividendo così lo schermo in quattro file:
************** interruzione 1
8 sprite
...
*************** interruzione 2
8 sprite
***************
ecc...
In questo modo, si spostano gli sprite da una fila all'altra quando avviene l'interruzione. L'interruzione avviene quando gli sprite della fila di sopra sono già stati disegnati... e così posso spostare gli sprite nella fila di sotto (cioè la fila corrispondente alla linea di scansione nella quale è avvenuta l'interruzione corrente) senza che chi guarda se ne accorga.
Il multiplexing consiste nell'alternare UNO STESSO sprite in una stessa "fila" (cioè in corrispondenza delle stesse linee di scansione). Ad esempio, nella zona dalla linea di scansione 50 alla 75, per dire, potrei visualizzare non più di 8 sprite... e le interruzioni del raster, intese nel senso di prima, non mi sarebbero utili.
Ma io dispongo di 50 fotogrammi al secondo... e posso rappresentare lo sprite 1 (per dire) nella posizione x = 50 nel fotogramma 1 e nella posizione X = 120 nel fotogramma 2. In questo modo, pena un po' di sfarfallio, pur avendo un solo sprite riesco a farne vedere due... in corrispondenza delle stesse linee di scansione.
Combinando i due effetti si possono visualizzare anche 50 sprite.
Ovviamente, per fare il multiplexing servono le interruzioni del raster, ma stavolta l'obiettivo è quello di alternare due fotogrammi, non di dividere lo schermo in più parti.
Scusate la sciatteria nel trattare le tematiche, ma se riuscirò a completare il "corso semiserio di assembler" tratterò meglio questi argomenti e porterò degli esempi.
Ciao!