[zxspectrum] Re: istruzioni caricamento immagine CF

  • From: Luca Bisti <lucbisti@xxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Fri, 12 Feb 2010 10:18:48 +0100


tutto questo fa capire, se non lo si sapesse gia', che lavoro di
precisione avete fatto sulle temporizzazioni di RS. Non mi
complimentero' mai abbastanza. :)

Ciao Cesare, grazie per la stima ma ti assicuro che tutti gli emulatori del mondo gestiscono questo problema, non abbiamo inventato assolutamente nulla! E' vero che esistono vari modi più o meno sofisticati di risolverlo, con un certo margine per la "creatività", ma il vero guaio è che, almeno su Windows, nessuna tecnica funziona al 100% e in tutti i casi.

L'origine di tutti i mali è la mancanza di un clock stabile e assoluto nei moderni PC: abbiamo il TSC della CPU, gli interrupt della scheda audio, il timer di sistema a bassa (troppo) frequenza di vecchia data, alcuni timer chipset-dependent (custom), il vsync della scheda video... ma nessuno è garantito come riferimento affidabile [1]. Paradossalmente, in un sistema monoprogrammato quale MSDOS è assai più facile realizzare le sincronizzazioni perché si puo' fare proprio come sullo Spectrum: cicli di ritardi calibrati senza nessuno (o quasi) che ti rompe le scatole nel mezzo. E' così che funzionava il mitico Z80 di Gerton Lunter.

Al problema della misura del tempo si aggiunge, appunto, lo scheduler del sistema operativo multitasking non-realtime che ti schedula "imprevedibilmente" quando gli pare e non esattamente quando hai chiesto tu, et voilà: il rompicapo è servito. Al contrario, nei sistemi operativi realtime il tempo di risposta del sistema è sempre prevedibile, per cui l'applicazione sa già che tornerà in esecuzione entro il tempo prefissato.

Nonostante tutto gli emulatori li usiamo senza notare troppi problemi anche in Windows, ma ci sfugge il fatto che sotto sotto l'audio non è mai perfettamente sincronizzato con il video, ci sono piccoli rallentamenti e successive accelerazioni e se qualche altro processo occupa la CPU allora è facile incappare in scatti dell'audio o del video. Dal punto di vista progettuale, un emulatore si trova a risolvere esattamente gli stessi problemi che ha un qualsiasi player multimediale quale Windows Media Player (solo che lì i problemi li risolve per te l'API DirectShow di Windows).

Tornando alla domanda di Stefano, in ogni caso ci potrebbero essere utili impieghi per la parallela anche senza le temporizzazioni (es per pilotare un AY esterno), quindi con Sanchez vedremo di prendere in considerazione il ricorso a una qualche libreria -- compilatore permettendo.

Luca

[1] http://www.virtualdub.org/blog/pivot/entry.php?id=106

Other related posts: