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

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #15 il: 24 Settembre 2008, 22:33:15 »
 Grazie iAN CooG/HF per la precisazione dei bordi, io l'avevo saltata e per semplicità espositiva mi ero limitato al modo operativo "normale".

Mi ricordo che sfruttando l'apertura del bordo inferiore, definendo degli sprite a grandezza raddoppiata, riuscii a fare del C64 una macchina titolatrice tipo "serpentone".
Un esempio lo trovi su questo seteeso sito:
http://ready64.org/articoli/_files/048_filmati.rar
(filmato "coda")
il link fa parte dell'articolo

http://ready64.org/articoli/leggi/idart/48...er-commodore-64

di cui mi fregio di essere l'autore, anche se lo feci in tenera età

(che bello, gongolo tutto!!!!)
Non esistono problemi, solo soluzioni.

fab

  • Utente
  • **
  • Post: 493
    • http://wav-prg.sourceforge.net/
  • Gioco Preferito: Tetris, Turrican, Impossible Mission
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #16 il: 25 Settembre 2008, 09:32:51 »
Citazione da: "mces"
Il sistema PAL ha 625 linee lorde per il quadro completo e quindi la frequenza di ripetizione delle righe è di 25*625=15625Hz
625/2=312,5. Tra questo e 312 c'è una differenza di 0,5 righe, e gli ingegneri approssimano.

Per il fotogramma n, il VIC disegna 312 righe. Il televisore le visualizza, lasciando 1 riga di spazio tra l'una e l'altra. 1/50 di secondo dopo, inizia il fotogramma n+1. Il VIC disegna altre 312 righe, e il televisore le visualizza nelle righe lasciate vuote nel fotogramma precedente (interlacing).

In pratica, ciò che il televisore mostra ogni 1/25 di secondo è una serie di righe

n
n+1
n
n+1
...
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 #17 il: 25 Settembre 2008, 10:07:22 »
 nel sistema televisivo nessuna approssimazione:
Ogni riga non è perfettamente orizzontale ma piega appena verso il basso di uno spazio che intercorre tra una riga e la successiva, pensa che la ritraccia, ovvero il rapido riposizionarsi del raster dalla fine di una riga all'inizio di una successiva prende un tempo che è meno di un 10% del tempo della riga stessa.
Lo spostamento verticale del raster invece è continuo, quindi la fine di una riga è all'altezza (in prima approssimazione) dell'inizio della successiva.
La presenza di 1/2 riga in ogni semiquadro fa si che il raster cominci sempre cambiando la sua posizione verticale (ad ogni semiquadro) del 50% di uno spostamento verticale legato ad una linea completa, questo fa sì che ogni semiquadro si trovi esattamente a disegnare negli spazi interlinea lasciati vuoti dal semiquadro precedente.
1/2 riga = interlacciato
no 1/2 riga = non interlacciato!
Se non ricordo male il VIC non opera interlacciato e quindi non genera le "mezze righe", come già detto questo comporta la visione degli spazi vuoti di interlinea nei televisori di una certa dimensione (sopra i 17..21pollici?) specie se televisori in B/W, visto che quelli a colori hanno la maschera INVAR per la sintesi dei colori che "mischia" un pò le carte in tavola.
Le righe video del C64 erano visibili su un buon monitor B/W da 11 pollici! (questione di fuoco, contrasto e luminosità...)
Non esistono problemi, solo soluzioni.

DAN

  • Neo-iscritto
  • *
  • Post: 35
  • Gioco Preferito: Comprare Commodore che si rivelano sempre guasti :(
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #18 il: 25 Settembre 2008, 19:11:33 »
 Ammazza quanta roba da una così semplice domanda. Ci sarebbe da scrivere un libro solo su questo argomento.
Infatti pensandoci mi stava proprio venendo il dubbio di chiedere per quanto tempo una linea di sprite doveva essere "ridisegnata" sullo schermo affinché l'occhio umano non percepisse qualcosa di strano.

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #19 il: 26 Settembre 2008, 10:53:38 »
 Lo sprite viene disegnato esattamente nello stesso momento che il raster passa per le aree dello schermo che i registri del VIC indicano, il VIC si occupa di questo lavoro ed infatti le sprite sono il frutto di un "accelleratore grafico" in quanto le informazioni grafiche contenute vengono posizionate sullo schermo ad opera del VIC e NON ad opera della CPU che si limita, tramite registri, ad indicare dove prendere i dati per la sprite e dove posizionarla (coordinate in pixel) sullo schermo.
Proviamo a immaginare cosa sarebbe del C64 se il VIC non avesse questa funzione di "motore grafico": bisognerebbe continuamente ridisegnare in HI-RES qualunque oggetto in movimento......    
Il C64 non avrebbe avuto la fortuna che ha avuto!

Dall'esperienza cinematografica deriva che la minima frequenza possibile per far apparire una proiezione pressochè stabile sia di 36 "illuminazioni" al secondo, mentre per la fluidità dei movimenti si può scendere fino a 18 variazioni al secondo.
Questo si traduce, per i minimi termini, a proiettare un film (pellicola) a 18 fotogrammi/secondo con due chiusure di otturatore (una per cambiare fotogramma, l'altro "dummy") in modo da rispettare quanto detto sopra.
Al cinema lo standard è 24 fotogrammi al secondo, sempre con doppia illuminazione del singolo fotogramma (48Hz).

 Curiosità: per l'adattamento televisivo la proiezione viene accellerata da 24 a 25 fot/sec portando il film in TV a durare un pò meno dello stesso film al cinema!
 
Non esistono problemi, solo soluzioni.

DAN

  • Neo-iscritto
  • *
  • Post: 35
  • Gioco Preferito: Comprare Commodore che si rivelano sempre guasti :(
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #20 il: 26 Settembre 2008, 12:29:23 »
 Direi che la teoria di base c'è tutta, adesso sarebbe bello trovare dei programmi e commentarli riga per riga (soprattutto perchè l'assembly non è proprio una gioia per gli occhi)

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #21 il: 26 Settembre 2008, 20:54:37 »
 
Citazione da: "DAN"
soprattutto perchè l'assembly non è proprio una gioia per gli occhi
Ah perche' il basic invece...  :lol:
Fatti bastare il sorgente di Alberto nel thread linkato, e' gia' commentato abbastanza. Le istruzioni non commentate sono banali, per chi mastica gia' asm, se tu devi ancora imparare le basi puoi sempre commentartele mentre studi.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

DAN

  • Neo-iscritto
  • *
  • Post: 35
  • Gioco Preferito: Comprare Commodore che si rivelano sempre guasti :(
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #22 il: 27 Settembre 2008, 00:29:44 »
 Non ci sarebbe qualcosa in più banale C ?  :lol:  

eregil

  • Administrator
  • Utente
  • *****
  • Post: 710
  • Gioco Preferito: Impossible Mission
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #23 il: 27 Settembre 2008, 00:41:11 »
 Inutile nascondersi dietro un dito: se ti interessa realmente imparare a programmare il C64 a questi livelli, devi farlo in assembly. Se non sei disposto a compiere questo passo puoi anche lasciar perdere.
 
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #24 il: 27 Settembre 2008, 01:45:50 »
Citazione da: "eregil"
Inutile nascondersi dietro un dito: se ti interessa realmente imparare a programmare il C64 a questi livelli, devi farlo in assembly. Se non sei disposto a compiere questo passo puoi anche lasciar perdere.
Concordo e rilancio dicendo che per scrivere in C su C64 occorre saper fare le stesse cose in asm, risulta talmente complicato farlo in C che per me non vale la pena. Se vuoi dare un occhio ad un demo realizzato in C, prego, ci sono i sorgenti da esaminare.
http://noname.c64.org/csdb/release/?id=56368
-=[]=--- 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 #25 il: 27 Settembre 2008, 07:57:06 »
 Cosiglierei il "grande passo" di rimboccarsi le maniche ed iniziare ad imparare a programmare in assembler, non tanto per il fine in se stesso, ma perchè costringe la persona a considerare come lavora dentro (e fuori) una CPU, una ALU, ecc.. tutti concetti di fondo comuni a TUTTI i calcolatori esistenti: una bella apertura mentale e, tecnicamente parlando, culturale.

Insomma se credi che il gioco nel suo totale valga la candela......
Non esistono problemi, solo soluzioni.

DAN

  • Neo-iscritto
  • *
  • Post: 35
  • Gioco Preferito: Comprare Commodore che si rivelano sempre guasti :(
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #26 il: 27 Settembre 2008, 18:53:17 »
 ok, capisco e concordo ma il punto è che attualmente non sono ancora al livello di lanciarmi in una simile impresa quindi cerco qualcosa, chiamatelo come volete, io dico una testa di ponte con quello che posso attualmente capire. Per me l'asm è attualmente arabo (ed il fatto che sia specializzato per una macchina morta di certo non mi aiuta in questo momento a riservargli del tempo ad hoc), nel tempo libero quando ho esaurito molte altre alternative ci può stare ma non di più.

In fin dei conti più che del sorgente in asm stretto per c64 mi interessa capire quali algoritmi si usavano su sistemi così vetusti visto che non c'erano GeForce 9600 per disegnare due righe.

eregil

  • Administrator
  • Utente
  • *****
  • Post: 710
  • Gioco Preferito: Impossible Mission
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #27 il: 27 Settembre 2008, 20:54:51 »
 Guarda, secondo me stai facendo un minestrone.

La gestione del raster richiede che si conosca il funzionamento del VIC-II e degli interrupt (e quindi del 6510). L'algoritmo viene dopo: in fin dei conti a livello software si tratta di scrivere determinati valori in registri del VIC-II e locazioni di memoria.

In soldoni, se non ti interessa programmare effettivamente il C64, conoscere l'algoritmo ti è inutile: ti interessa di più sapere che scrivere un numero di riga in un registro del VIC-II fa sì che venga generato un interrupt quando il raster raggiunge quel numero di riga dello schermo. Sapendo ciò, sai che il programmatore farà puntare l'interrupt dove vuole lui in modo che venga eseguita la routine che sposta gli sprite. Gli algoritmi non contengono nulla di realmente più interessante di quanto ti è stato spiegato. O almeno, non quelli di esempio.

Se ti interessa programmare, viceversa, ribadisco che - dal momento che senza assembly non vai lontano per questo genere di cose - è il momento di iniziare dalle basi dell'assembly. Prima impara a correre, poi impara a volare.

Per quanto riguarda le GeForce, bisogna dire che - per quanto ci sia stato un aumento della complessità delle architetture di CPU e GPU - lo stesso principio rimane valido: un algoritmo preso da un videogioco ti dice poco se non conosci le primitive del layer (OpenGL, DirectX, ecc.) su cui è basato (e così via scendendo di livello fino al sistema operativo), in quanto spesso gli algoritmi non sono altro che dei "metti questo valore qui, il puntatore a questi dati lì, e il risultato di questo calcolo là" - solo, le variabili in gioco nell'hardware di oggi sono in numero maggiore. :)
 
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.

DAN

  • Neo-iscritto
  • *
  • Post: 35
  • Gioco Preferito: Comprare Commodore che si rivelano sempre guasti :(
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #28 il: 28 Settembre 2008, 17:35:18 »
 Guarda, per me il concetto di algoritmo non si limita al crudo "leggi variabile, scrivi variabile, punta a indirizzo" ma ad un ragionamento più elevato in quanto, tra i due, il secondo si può riciclare su qualsiasi sistema che non preveda per forza la presenza di un 6510 o un VicII.

E' un po il concetto che passa tra uno che sa calcolare una derivata perchè esistono delle regole da seguire ed un altro che invece ne ha capito il reale significato matematico.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Più Di 8 Sprite Contemporaneamente (multiplexing)
« Risposta #29 il: 28 Settembre 2008, 17:37:54 »
Citazione da: "DAN"
si può riciclare su qualsiasi sistema che non preveda per forza la presenza di un 6510 o un VicII.
 
lascia perdere, evidentemente NON vuoi imparare a programmare su c64.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -