[zxspectrum] Re: RealX

  • From: JX-Speccy emulator <jxspeccy@xxxxxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Mon, 13 Jun 2005 15:21:07 +0200

Ciao,

At 12.30 13/06/2005 +0200, you wrote:
E' possibile avere qualche dettaglio più tecnico di come gestite le temporizzazioni in RealX?

Niente vertical blanking: in finestra non esiste proprio, e in fullscreen non mi serve a nulla perche' tanto il refresh non sara' mai a 50Hz. Pero' useremo un accorgimento speciale nelle risoluzioni a 100Hz per riprodurre fluidamente gli scrollers.


Quando e' disponibile, il master clock e' fornito dai buffer audio che sono il vero vincolo realtime hardware (a differenza del video che possiamo aggiornare in qualsiasi momento quasi senza attese). Altrimenti ne generiamo noi uno artificialmente regolandoci con il TSC del processore che, lui si', e' accurato al nanosecondo.

:-)))) ... almeno in teoria; se usi il QueryPerformanceCounter, a seconda dell'architettura andrà a leggere il TSC (arch. SMP), PIT (w2000), PMT (XP) ; ma in tutti i casi l'affidabilità non è al 100% ("race condition", sovraccarico bus PCI, ...).


C'e' un thread dedicato alla sincronizzazione degli eventi che dorme quasi sempre e ticchetta per richiedere lavoro thread di emulazione alla giusta velocita'. Siccome in un sistema multitasking i tempi non vengono mai rispettati con precisione (interferenza degli altri processi utente e di sistema, piu' latenze varie non conoscibili a priori e variabili nel tempo),

Suggerisco una modifica a priori al sorgente: l'HANDLE del thread chiamatelo "lavora_bestia" :-)))


Tanto per curiosita avete mai provato a misurare la latenza massima (magari nell'arco di 5 minuti in cui col PC fate altro)?

misuriamo la durata effettiva di ciascun intervallo di tempo con il TSC e compensiamo dinamicamente i jitter in modo da mantenere il valor medio su 50Hz spaccati.Ad esempio, se mi accorgo di essere stato risvegliato dopo 22ms invece dei 20 richiesti, alla fine del prossimo frame mi sospendero' per 18ms in modo da recuperare la deadline assoluta dello slot temporale successivo.
A questo si affianca il problema di come presentare i buffer audio e video ai rispettivi dispositivi in modo che l'immagine e il suono risultanti siano il piu' possibile in sync; come dicevo ieri, negli emulatori Windows il suono e' spesso sfasato di 1-3 frames per colpa delle diverse latenze dei driver audio e video del sistema operativo.

.... immagino sia un casino :-O

Grazie 1000 delle spiegazioni.
E BUON LAVORO per il RealX ( leggere fra le righe: "fate preeesto") !!!!!!!!
Ciao,
  Marzio


Other related posts: