Autore Topic: Più Di 8 Sprite Contemporaneamente (multiplexing)  (Letto 7877 volte)

DAN

  • Neo-iscritto
  • *
  • Post: 35
  • Gioco Preferito: Comprare Commodore che si rivelano sempre guasti :(
Più Di 8 Sprite Contemporaneamente (multiplexing)
« il: 23 Settembre 2008, 13:50:02 »
 Ho sempre letto che il C64 poteva gestire al massimo 8 sprites però guardando le foto del gioco Blinky's Scary School, mi sembra di contarne qualcuno in più. Qualcuno con un occhio più esperto può spiegarmi come stanno le cose (o come dovrebbero stare) ?

- usare titoli descrittivi fa bene alla pelle - Admin

Raffox

  • Administrator
  • Utente
  • *****
  • Post: 714
    • http://www.raffox.com
  • Gioco Preferito: Moonshadow (Idea)
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #1 il: 23 Settembre 2008, 14:59:28 »
 La tecnica utilizzata per visualizzare più di 8 sprite, tra l'altro molto adoperata sul C64 (vedi Turrican, Commando, Moonshadw, Catalypse oltre che numerose demo...), è comunemente nota come sprite multiplexing.

Se ne parla a grandi linee anche a pag. 10 di questo paper.

DAN

  • Neo-iscritto
  • *
  • Post: 35
  • Gioco Preferito: Comprare Commodore che si rivelano sempre guasti :(
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #2 il: 23 Settembre 2008, 22:37:02 »
 Ho provato a leggere sta roba ma non credo di aver capito molto bene il succo... qualcuno che sappia spiegarmelo meglio ? thx

Flimbo

  • Neo-iscritto
  • *
  • Post: 38
  • Gioco Preferito: Turrican II
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #3 il: 23 Settembre 2008, 23:13:59 »
Citazione da: "DAN"
Ho provato a leggere sta roba ma non credo di aver capito molto bene il succo... qualcuno che sappia spiegarmelo meglio ? thx
In pratica il VIC compone l'immagine sullo schermo linea per linea.
Se tra una linea e l'altra riprogrammi il VIC puoi visualizzare altri 8 sprite e così fino alla fine dello schermo.
E questo è anche il motivo per cui con questa tecnica si possono avere molti sprite ma non più di 8 sulla stessa linea.
Più o meno questo è il succo o almeno e così che so io.
 

Raffox

  • Administrator
  • Utente
  • *****
  • Post: 714
    • http://www.raffox.com
  • Gioco Preferito: Moonshadow (Idea)
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #4 il: 24 Settembre 2008, 00:40:14 »
 Vediamo di rendere l'argomento un pò più chiaro senza essere troppo tecnici.

Il pennello ottico (raster) consiste in un raggio luminoso che, spostandosi a velocità elevata (misurata in hz), crea l'immagine in un televisore o monitor.
Il suo movimento è continuo, da sinistra a destra e dall'alto in basso dello schermo.
Una volta raggiunto il fondo ritorna in cima e ricomincia allo stesso modo. Sostanzialmente quest'operazione accade 60 volte al secondo, di qui la definizione 60hz.

Ogni computer trasmette un segnale al video tramite il pennello ottico, indispensabile alla formazione e al controllo dell'immagine che si percepisce.
Il C64 permette d'intervenire direttamente sul raster, fermandolo e facendolo ripartire a piacimento. Ecco perchè è possibile, ad esempio, avere lo schermo diviso orizzontalmente in due o più parti (split screen), ogniuna delle quali può visualizzare una risoluzione grafica diversa (hi-res, bitmap, multicolor...).

E' facilmente intuibile che, effettuando uno split screen, ogni porzione di schermo diventa indipendente rispetto alle altre e, se abbiamo 8 sprite disponibili mentre lo schermo è diviso in 2 porzioni, questi 8 sprite possono essere 'clonati'e visualizzati in entrambe le aree di schermo diventando così 16.

Poi, più lo schermo viene diviso, più aumenta il numero delle copie di sprite visualizzabili. Ad esempio: schermo diviso in 3 parti = 3x8 sprite visualizzabili contemporaneamente sullo schermo.

12345678     <---- porzione di schermo N°1 (con 8 sprite visualizzati)
-------------     <---- split-screen
12345678     <---- porzione di schermo N°2 (con 8 sprite visualizzati, cloni dei primi 8)
-------------     <---- split-screen
12345678     <---- porzione di schermo N°3 (con 8 spirte vsiualizzati, cloni dei primi 8)

Ciò vuol dire in sostanza che, ad esempio, lo sprite N°1 può essere duplicato per 3 volte e ciascuna copia è esclusivamente visualizzabile (e animabile) in una
delle tre aree in cui si è diviso lo schermo.
Quindi avremo lo sprite N°1 visualizzato per 3 volte sullo schermo, ma ogni clone può assumere colore e forma diversi a patto che non vada a superare la linea raster poichè ciò ne provoca la scomparsa.

Un fitto utilizzo di questo effetto raster, come in Turrican o Catalypse, è il 'trucco' impiegato per poter visualizzare end boss di grosse dimensioni.

DAN

  • Neo-iscritto
  • *
  • Post: 35
  • Gioco Preferito: Comprare Commodore che si rivelano sempre guasti :(
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #5 il: 24 Settembre 2008, 03:42:28 »
 Bella spiegazione, thx. A naso mi ricorda una storia simile per avere più colori sull'atari lynx.



Mi sorge però un dubbio sulla memoria a disposizione: uno sprite clonato due volte raddoppia il consumo di memoria ? E poi di quale memoria stiamo parlando ? Ram o eventualmente una VRAM del Vic ?

fab

  • Utente
  • **
  • Post: 493
    • http://wav-prg.sourceforge.net/
  • Gioco Preferito: Tetris, Turrican, Impossible Mission
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #6 il: 24 Settembre 2008, 09:56:56 »
Citazione da: "DAN"
uno sprite clonato due volte raddoppia il consumo di memoria ? E poi di quale memoria stiamo parlando ? Ram o eventualmente una VRAM del Vic ?
Gli sprite non vengono clonati. Vengono solo spostati. Mentre la parte alta dello schermo viene disegnata, sono posizionati in alto. Quando questa e' disegnata, e prima che si inizi a disegnare la parte bassa, vengono spostati in basso.

Il VIC accede alla stessa RAM a cui accede la CPU.
Un giapponese sa recitare a memoria tutti i numeri di pi greco fino all'83431º decimale. Sa a memoria anche l'unico numero telefonico che è nella sua agendina - Daniele Luttazzi

Raffox

  • Administrator
  • Utente
  • *****
  • Post: 714
    • http://www.raffox.com
  • Gioco Preferito: Moonshadow (Idea)
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #7 il: 24 Settembre 2008, 11:26:47 »
 Grazie fab per la precisazione.

Ribadisco che la mia spiegazione è stata volutamente semplificata per rendere l'argomento più comprensibile ai meno esperti e pertanto ben si presta ad approfondimenti e puntualizzazioni (che spero seguano numerose).

Da notare che il termine clonare da me adottato è stato inizialmente chiuso tra virgolette proprio per sottolinearne l'adattamento al caso...

DAN

  • Neo-iscritto
  • *
  • Post: 35
  • Gioco Preferito: Comprare Commodore che si rivelano sempre guasti :(
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #8 il: 24 Settembre 2008, 12:51:30 »
 Quindi noi quando vediamo lo schermo vediamo in realtà un collage composto fino a 60 fotogrammi sovrapposti ?

Raffox

  • Administrator
  • Utente
  • *****
  • Post: 714
    • http://www.raffox.com
  • Gioco Preferito: Moonshadow (Idea)
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #9 il: 24 Settembre 2008, 14:10:00 »
 
Citazione da: "DAN"
Quindi noi quando vediamo lo schermo vediamo in realtà un collage composto fino a 60 fotogrammi sovrapposti ?
La tua affermazione potrebbe essere interpretata correttamente a patto di non confondersi tra frequenze di aggiornamento delle immagini e frequenze di aggiornamento del raster.

Infatti la frequenza di aggiornamento delle immagini, misurata in fotogrammi per secondo o 'fps' è quasi sempre 25 (PAL) o 30 (NTSC) anche se più moderni standard per la trasmissione digitale prevedono valori di 50 o 60 fps: raddoppiando i frame per secondo e visualizzando prima le righe pari, seguite dalle dispari (interlacciamento) si risolve il problema dello sfarfallio.

Altra cosa è invece la frequenza di aggiornamento del raster, cioè le righe orizzontali dette anche 'scan line' dei televisori o dei monitor. Nei vecchi monitor e televisori dotati di tubo catodico (CRT = Cathode Ray Tube) la frequenza andava da 60hz a 100hz circa. Con i più moderni supporti di visualizzazione a cristalli liquidi (LCD = Liquid Crystal Display) si è arrivati a 200hz.

fab

  • Utente
  • **
  • Post: 493
    • http://wav-prg.sourceforge.net/
  • Gioco Preferito: Tetris, Turrican, Impossible Mission
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #10 il: 24 Settembre 2008, 14:37:07 »
 No, vediamo un'immagine di 312 linee, che possono essere disegnate ciascuna indipendentemente dall'altra. Entro dei limiti: il tempo in cui ciascuna linea e' disegnata e' limitato, 1 linea in 1/50/312 di secondo. Per questo, e' in realta' piu' comune raggruppare linee orizzontali consecutive in un gruppo, di fatto dividendo lo schermo in settori orizzontali. Tipicamente, quando si inizia a disegnare la prima linea del gruppo, si dispongono i registri del VIC cosi' come devono essere per l'intero gruppo, poi si compiono tutte le altre azioni (controllare il joystick, suonare la musica...). In questo tempo, normalmente molte linee sono state disegnate: bisogna assicurarsi di non essere arrivati alla fine del gruppo.
Un giapponese sa recitare a memoria tutti i numeri di pi greco fino all'83431º decimale. Sa a memoria anche l'unico numero telefonico che è nella sua agendina - Daniele Luttazzi

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #11 il: 24 Settembre 2008, 19:07:44 »
 Scusate la pignoleria:
sistema PAL: 25 quadri al secondo scansionati da due semiquadri interlacciati per una frequenza di rinfresco quindi di 50Hz (ogni riferimentoa 60Hz è relativo al sistema americano NTSC).
Il sistema PAL ha 625 linee lorde per il quadro completo e quindi la frequenza di ripetizione delle righe è di 25*625=15625Hz (il fischio fastidioso che si sente in alcuni vecchi televisori).
L'interallacciamento (cioè l'intercalamento geometrico delle linee "pari" con quelle dell'altro SEMIquadro "dispari") avviene grazie alla presenza all'inizio del semiquadro di una riga dimezzata che sposta in verticale il raster del 50% dello spazio inter-riga posizionandolo geograficamente quindi nel vuoto lasciato da due righe del semiquadro precedente.
Il C64 NON interlaccia i semiquadri, questo porta a vedere gli spazi vuoti tra le linee sui televisori a grande schermo, in quanto il semiquadro dispari si sovrappone perfettamente a quello pari senza coprirne i vuoti.

Le righe attive di un semiquadro sono circa 288, quelle attive del vic 200, lla differenza viene riempita con le bande superiore e inferiore.

 
Non esistono problemi, solo soluzioni.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #12 il: 24 Settembre 2008, 20:38:10 »
 
Citazione da: "Raffox"
Il C64 permette d'intervenire direttamente sul raster, fermandolo e facendolo ripartire a piacimento.
Frena, il raster non si puo' fermare. Puoi solo chiedere "per favore VIC-II, generami un IRQ alla tal linea che poi ci penso io a gestirla" e controllare a che linea e' arrivato. L'unico modo per fermare il raster e' spegnere il C64.

L'argomento fu trattato qua con tanto di esempi e discussione filosofica
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #13 il: 24 Settembre 2008, 21:55:57 »
Citazione da: mces
Le righe attive di un semiquadro sono circa 288, quelle attive del vic 200, lla differenza viene riempita con le bande superiore e inferiore.
hmm, guarda che i bordi nel C64 ci sono solo per contenere l'area sfruttabile dal modo testo e bitmap, i bordi si possono levare "semplicemente" e ci puoi far viaggiare raster colorati, sprites e anche bitmap realizzati scrivendo in uno specifico byte, ovvero l'ultimo del banco da 16kb visibile dal VIC-II correntemente selezionato tramite la locazione $dd00. Quindi non e' che sono attive per il VIC-II solo quelle in mezzo =)
« Ultima modifica: 21 Gennaio 2015, 23:18:35 da eregil »
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #14 il: 24 Settembre 2008, 22:03:44 »
 Forse con un paragone si può facilmente spiegare il concetto alla base del multiplexing delle sprite...
 Ricordiamoci che sullo schermo l'immagine viene dipinta per righe successive dall'alto verso il basso, ora immaginiamo che un pittore voglia disegnare la facciata di un palazzo partendo dall'alto del quadro per disegnare piano per piano fino al basso della tela.
Ipotizziamo pure che otto amici burloni si divertano ad affacciarsi alle finestre di un piano proprio quando questo viene osservato e pitturato dall'artista.
Se i burloni riescono a mantenere il passo con il disegnatore quello che verrà fuori sono un numero di persone affacciate di 8xquantipianisono.

Rende l'idea?

Grazie al fatto che si possano generare interrupt legate alla posizione del pittore.... em..... del raster dello schermo, si riesce a "spostare" le sprite (e i dati a cui vengono puntate) dalla zona già disegnata (e impressa sulla persistenza del monitor) alla zona di prossima disegnatura, e così via.

Nessuno sfarfallamento: ogni volta che il raster passa per la porzione di schermo dove vogliamo far comparire la sprite lei sarà lì pronta per essere disegnata.

E' un processo SW costoso in termini di percentuale di uso della macchina, ma il gioco spesso vale la candela!
Non esistono problemi, solo soluzioni.