Vabe' Ian, lui inizialmente ha chiesto del VIC-II, e riguardo il VIC-II ha avuto le risposte che ha chiesto.
Per quanto riguarda la sua ultima frase:
Ci saranno stati tanti altri sistemi capaci di ottenere lo stesso risultato, ma al di sopra delle righe di asm personalizzate per raggiungere lo scopo in oggetto, sono sicuro che il vero ragionamento d'origine è comune a tutti ed è quello che voglio capire.
posso aggiungere una precisazione, per chi ha la pazienza di seguirmi.
Il problema è che si chiede un algoritmo (software) dove la soluzione è di tipo hardware, e quindi non si dovrebbe parlare in termini di algoritmi ma di circuiti.
Per fare un paragone, immaginiamo che il problema sia non la visualizzazione di sprite, ma un calcolo matematico, ad esempio l'estrazione di una radice quadrata.
Se stiamo programmando una CPU generica, il problema può essere affrontato via software. La "soluzione software" consiste nello scrivere un algoritmo per la nostra CPU generica, come può essere il 6510 o un moderno processore x86.
Esiste poi la possibilità di adottare una "soluzione hardware", che invece consiste nella progettazione e costruzione di una circuiteria che, preso in ingresso (input) un numero, restituisca in uscita (output) la sua radice quadrata.
In quest'ultimo caso, quando un ipotetico programma (software) esterno, che giri su un computer che monti una CPU generica e il nostro ipotetico chip "radice quadrata", tutto quello che il software per la CPU dovrà fare sarà impostare opportunamente i registri input del chip e poi leggere i registri output del chip (per semplicità tralasciamo la distinzione tra funzionamento sincrono e asincrono).
Abbiamo parlato di una cosa simile quando abbiamo trattato il chip video del C128, l'integrato 8563 (
link al thread), e lo stesso principio è alla base - per fare un esempio in informatica più "recente" - della differenza fra giochi in 3D gestito via software e giochi in 3D facenti uso di schede grafiche 3D (sono esistiti anche titoli che prevedevano le due modalità).
Bene, il problema del quesito di DAN è che la visualizzazione di sprite avviene con una "soluzione hardware" (il chip esterno, il VIC-II), ma si continua a chiedere l'algoritmo (software) cercandolo nel codice scritto per il C64, in pratica come se lo sprite fosse gestito dal 6510.
Se il funzionamento che interessa è quello del VIC-II, oltre un certo livello esso non si approfondisce più con codice assembly, BASIC o C (come è stato chiesto) per il C64 (6510). Invece è questo fantomatico codice che viene chiesto.
E se ciò che interessa realmente è come fa il VIC-II a disegnare lo schermo dati i suoi registri e il contenuto della RAM, esuliamo dal campo del software per C64. La risposta sta altrove e (come già fatto notare) richiede la conoscenza dell'hardware.
Il punto di vista del VIC-II nel multiplexing è quello di sprite che, in parole povere, si muovono più rapidamente del raster: mentre il VIC-II sta disegnando la parte alta dello schermo, gli sprite sono nella parte alta dello schermo; mentre il VIC-II sta disegnando la parte bassa dello schermo, gli sprite sono nella parte bassa dello schermo... ma gli sprite sono sempre 8. E il disegno dello schermo avviene sempre nello stesso modo che senza multiplexing.
Il VIC-II insomma determina, riga per riga, pixel per pixel, i segnali da inviare in output (es. al monitor), in base al proprio stato e alla RAM, indifferentemente che si usi il multiplexing oppure no (a parte il discorso sugli interrupt generati dal raster, ovviamente). E lo fa indipendentemente dal 6510.