ZX v 0.4ß
Emulatore Zx Spectrum 48K
(C)1999 Daniele Orro

INDICE
[Introduzione] [Requisiti di sistema] [Tastiera] [Emulazione Z80] [Registratore]
[Menu 'File'] [Menu 'Opzioni'] [Menu 'Registratore'] [Menu '?']
[Problemi e soluzioni] [Note varie] [Ringraziamenti]

INTRODUZIONE

ZX è un emulatore dello Zx Spectrum 48K. Sono emulate tutte le caratteristiche principali del computer: il microprocessore Z80, la grafica (compreso il Flash e tutti gli effetti grafici), il suono, la tastiera, il joystick e il registratore a cassette. Sono supportati i formati dei file piu' comuni (SNA, Z80, TAP), oltre a registrazioni di cassette in formato WAV e RAW ed è possibile il caricamento di programmi da cassetta in tempo reale collegando direttamente il registratore alla scheda musicale.
Questo programma può essere distribuito gratuitamente, purchè non venga alterato il contenuto del pacchetto. E' però vietata la vendita di questo programma, e in generale la sua distribuzione a scopi commerciali senza l'autorizzazione dell'autore.
L'autore non si ritiene responsabile per eventuali danni che potrebbero ritenersi imputabili all'uso di questo programma.
L'attuale versione dell'emulatore e' costituita dai seguenti file: ZX.EXE (eseguibile del programma), ZX.CFG (file di configurazione), ZX.HTML (il file che state leggendo), ROM.BIN (la ROM dello Spectrum), Spectrum.jpg.
Trattandosi di una versione beta, potrebbe essere instabile e contenere degli errori. Se si verificassero comportamenti anomali, per favore comunicatelo all'autore.
Per contattare l'autore (consigli, impressioni d'uso, individuazione bugs...): zx.emulator@lycosmail.com.
All'avvio parte automaticamente l'emulazione. Per andare in pausa o riprendere l'emulazione basta un click del mouse sulla finestra.

REQUISITI DI SISTEMA

Il programma richiede: Windows 95/98 + DIRECTX, 16MB RAM, Pentium 100 o superiore, scheda audio e video qualunque purchè supportate dalle DIRECTX.

TASTIERA

La tastiera dello Spectrum è un po' particolare. A parte i famosi tasti di gomma del primo modello, la cosa più strana è che ad ogni tasto o combinazione di tasti è associato un intero comando. Ad esempio, se volessimo scrivere PRINT, dovremmo premere il solo tasto P. Come aiuto per trovare un particolare comando si può osservare il disegno della tastiera (menu '?' - 'Mostra tastiera'). I tasti dello Spectrum sono emulati con i corrispondenti tasti della tastiera del PC. I tasti speciali CAPS SHIFT e SYMBOL SHIFT sono emulati rispettivamente con i tasti SHIFT e CTRL del PC. Per ottenere un comando che appare in bianco nella tastiera, occorre premere il tasto associato. Se serve un comando o un simbolo scritto in rosso sul tasto, bisogna premere il tasto mantenendo premuto SYMBOL SHIFT. Per i comandi scritti in verde sopra un tasto, si premono dapprima contemporaneamente SYMBOL SHIFT e CAPS SHIFT e, quando appare una E maiuscola lampeggiante, si rilasciano questi tasti e si preme il tasto associato al comando. Infine se serve un comando o simbolo scritto in rosso sotto un tasto, si procede come per i comandi scritti in verde, poi si premono contemporaneamente SYMBOL SHIFT e il tasto in questione.

EMULAZIONE DELLO Z80

Il microprocessore Z80 è emulato in tutte le sue caratteristiche, compreso il registro di refresh R. E' tenuto conto dei bit inutilizzati del registro dei flag, che alcuni programmi possono usare per memorizzare informazioni. Sono anche emulate le cosiddette 'istruzioni non documentate', che non compaiono nei normali manuali dello Z80, ma che sono usate molto spesso dai giochi. Anche molti 'flag non documentati' sono aggiornati correttamente..

REGISTRATORE

Se si hanno delle vecchie cassette con giochi che si vogliono caricare nell'emulatore in tempo reale, come nel vero Spectrum, senza passare attraverso i file WAV, è sufficiente collegare un registratore nella porta LINE-IN della scheda musicale. Scegliendo l'opzione 'Play' del menu 'Registratore', l'emulatore sarà pronto per ricevere dati audio dal registratore.
Ora basta regolare il volume, che deve essere piuttosto elevato, e procedere come se si avesse un vero Spectrum. Cioè si scrive LOAD "" e INVIO (vedi 'Tastiera') e si aspetta il caricamento. E' necessario impostare l'opzione 'Alta sincr. video', altrimenti ogni tentativo di caricamento sarà vano. Se si vuole anche sentire l'audio, si deve impostare l'opzione 'Uscita audio' del menu 'Registratore'. Occorre notare che l'uscita audio standard viene disabilitata quando il registratore è in 'Play'.
Una volta avvenuto il caricamento, è sempre meglio riportare il registratore in 'Stop'.
Un requisito essenziale per il corretto caricamento è l'utilizzo di un registratore di buona qualità. Ovviamente anche le cassette non devono essere rovinate (vedi 'Problemi con il registratore a cassette'). Se le cassette non fossero in buone condizioni, è meglio trasferire il loro contenuto in un file WAV e procedere alla loro 'pulizia' con appositi programmi.

MENU 'FILE'

Apri snapshot
Apre un file in formato SNA o Z80. Si tratta essenzialmente di istantanee della memoria dello Spectrum e dei registri dello Z80. Sono supportati, in modo trasparente rispetto all'utilizzatore, due tipi di file .Z80. Se dovvesse apparire una scritta del tipo 'Hardware non supportato', significa che il programma che si sta cercando di caricare è stato scritto per Spectrum 128, oppure che per funzionare ha bisogno di particolari periferiche non supportate dall'emulatore.

Salva snapshot
Salva file in formato SNA.

Carica da memoria
Questa opzione e' identica ad 'Apri snapshot', solo che in questo caso il 'file' e' contenuto in memoria. E' un comando che, insieme al successivo, è molto utile quando si vuole caricare e salvare velocemente una situazione, per esempio per risolvere passaggi difficili dei giochi. Conosco una persona che usando piu' volte i tasti F4 e F5 ha finito 'Manic Miner' in neanche mezz'ora!!!

Salva in memoria
Salva in memoria un'istantanea dei registri dello Z80 e del contenuto della RAM dello Spectrum.

Apri immagine
Apre un'immagine in formato SCR. Questo tipo di file consiste nella copia esatta dell'intera memoria video dello Spectrum.

Salva immagine
Salva il contenuto della memoria video in un file SCR.

File .tap (Apri/Impostazioni)
I file TAP sono una trasposizione compatta del contenuto di una registrazione su cassetta. E' un formato molto piu' flessibile rispetto a SNA e Z80, perche' permette l'utilizzo di giochi che prevedono il caricamento di più livelli. Inoltre sono visibili le schermate iniziali dei programmi che appaiono durante il caricamento.
I file TAP sono costituiti da piu' blocchi separati, e sono strutturati in modo tale che due o più file TAP possono essere linkati tra loro per costituire un unico file.
Una volta aperto, per eseguire il programma occorre digitare sulla tastiera LOAD "" quindi premere INVIO (i tasti da premere sono J per 'LOAD' e SYMBOL SHIFT con P per le virgolette).
Con l'opzione 'Impostazioni' è possibile scegliere il blocco iniziale da cui cominciare a caricare. L'opzione 'Intercetta routine della ROM' permette di intercettare la routine di caricamento della ROM che inizia all'indirizzo 0x556. Cosi' questa routine viene 'sostituita' da una routine di caricamento molto piu' veloce dell'emulatore, e i programmi vengono caricati immediatamente. Pero' tutti i programmi che non accedono direttamente alla routine della ROM non possono essere caricati correttamente in questo modo. Se si avessero problemi e' sufficiente disabilitare l'opzione 'Intercetta routine della ROM'. In questo modo i programmi verrebbero caricati in modo molto piu' fedele, anche se piu' lento. Infatti verrebbero mandati i dati provenienti dall'ipotetico registratore direttamente alla porta 254 dello Spectrum, ovviamente con tutte le temporizzazioni rispettate.
La seconda modalità di caricamento è molto più lenta. Per velocizzarla è possibile premere il tasto F9, che pone l'emulatore alla massima velocità possibile. Alla fine del caricamento si può tornare alla velocità normale ripremendo F9. Per fermare il flusso di dati in ingresso nella porta 254 si può premere F12.

File .wav/.raw
Se avete dei giochi su cassetta e volete caricarli sull'emulatore potete procedere in questo modo. Dapprima registrate il contenuto della cassetta in un file WAV o RAW. I dati devono essere campionati a 8 bit, mono e con la frequenza più alta possibile (è raccomandata una frequenza di 44100 Hz). A questo punto scrivete LOAD "" e premete invio (vedi 'Tastiera'). Aprite il file WAV o RAW. Usate l'opzione 'Impostazioni' per scegliere la frequenza di campionamento, quindi premete 'Riavvolgi' e OK per far ripartire l'emulazione. Adesso il programma dovrebbe essere caricato e si può premere F12 per fermare il flusso di dati, oppure il pulsante 'Chiudi' della finestra 'Impostazioni'.
Note per la registrazione: in genere è meglio impostare un volume sostenuto.

Poke
Consente di modificare il contenuto di una locazione di memoria. Gli indirizzi validi vanno da 16384 a 65535, e comprendono l'intera RAM. Una volta cambiato il valore di una locazione di memoria, questo rimane bloccato durante tutta l'emulazione, fino a quando non viene effettuato un reset.

Reset
Effettua un reset dello Spectrum che equivale allo spegnimento e riaccensione del computer.

Esci
Esce dall'emulatore, salvando la configurazione nel file ZX.CFG.

MENU 'OPZIONI'

Avanzate
Alta sincronizz. video
Attivando questa opzione, l'emulatore tiene conto del fatto che nel vero Spectrum lo schermo è aggiornato continuamente e che il pennellino elettronico impiega un tempo finito per scandire l'intero schermo. Quindi l'emulatore si preoccupa di scrivere lo schermo rispettando nel modo più fedele la temporizzazione. Certi giochi sono estremamente sensibili a questa caratteristica, e se l'opzione non è attivata possono dar luogo a malfunzionamenti. Come esempio possono essere citati BC'S QUEST e ARKANOID (spariscono gli sprite), AQUAPLAN (non si osserva l'orizzonte a pieno schermo), GHOSTS'N GOBLINS (i personaggi sfarfallano), VECTRON (non si osservano gli effetti di bordo). Attivando l'opzione i giochi funzionano al meglio e sono visibili i particolari effetti di animazione e di bordo. Per un funzionamento ottimale questa funzione deve essere utilizzata assieme all'opzione 'Emulaz. RAM bassa'.
Poichè questa opzione richiede più risorse della CPU, potrebbe non essere utilizzabile su computer lenti.
Emulaz. RAM bassa
Esiste una parte della RAM dello Spectrum (la cosiddetta 'RAM contesa') che di fatto è piu' lenta della parte di RAM restante. L'opzione consente di tenerne conto. L'algoritmo che ho implementato non è esatto, ma è basato su operazioni di media.
LDIR
Le istruzioni LDIR e LDDR dello Z80 servono per lo spostamento di blocchi di memoria. Attivando l'opzione l'emulazione è più accurata, perchè si tiene conto dell'esatto tempo che le istruzioni impiegano per essere eseguite. Tuttavia su computer lenti puo' essere utile velocizzare queste istruzioni e ciò è possibile disattivando l'opzione. Occorre stare attenti perchè così viene perso l'esatto conteggio del tempo. Due giochi che fanno uso pesante di queste istruzioni sono 'Manic Miner' e 'Jet Set Willy'.
ISSUE 2
Con l'opzione attivata si emula l'Issue 2, altrimenti l'Issue3. Alcuni programmi sono sensibili a tale aspetto.

Dimensioni schermo
Quando si lavora in finestra si puo' scegliere tra dimensioni 1:1 o raddoppiate 2:1. Scegliendo 'Schermo intero' si ha un'emulazione a tutto schermo, molto più fedele all'originale Spectrum.

Freq. refresh video
Si può scegliere la frequenza di aggiornamento del video tra un massimo di 50 Hz (la frequenza di refresh reale dello Spectrum) e un minimo di 10 Hz. Più la frequenza è alta più sono richieste risorse al PC. Quindi su computer lenti può non essere possibile impostare la massima frequenza. Tuttavia anche la frequenza di 25 Hz secondo me è ottima e non da luogo a troppi sfarfallamenti.

Joystick
E' possibile scegliere tra i seguenti joystick: kempston, cursor e sinclair. Il joystick è emulato tramite i tasti cursore, e il fuoco con i tasti TAB e MAIUSCOLE. I due tasti sono equivalenti, pero' li ho inseriti entrambi perche' ho notato che con certe tastiere ci sono problemi nell'individuazione della pressione di 3 tasti contemporaneamente. Ad esempio nella mia ciò si verifica premendo MAIUSCOLE + ALTO + SINISTRA, mentre in altre tastiere si hanno problemi con il tasto TAB. Quindi ognuno scegliera' il tasto che funziona meglio.

Uscita audio
Si può scegliere tra l'uscita audio standard, lo speaker e niente (audio disattivato). L'uscita audio standard fornisce una qualità probabilmente migliore, anche se lo speaker del PC si avvicina molto di più a quello che è il suono reale di uno Spectrum. Per realizzare l'audio standard è stato realizzato un buffer di dati audio che viene continuamente aggiornato con i dati provenienti dalla porta 254 dello Spectrum e contemporaneamente mandato alla scheda musicale. Questo sincronismo è mantenuto solo se il programma riesce ad emulare lo Spectrum ad una velocità del 100%. Avendo un computer sufficientemente veloce, l'emulatore riesce a mantenere questa velocità, e la qualità della musica di conseguenza è ottimale. Se invece il computer è troppo lento, il buffer non sarà più sincronizzato, quindi la musica potrebbe non essere più udibile, oppure potrebbe essere ascoltata musica che il realtà era stata suonata qualche minuto prima. In generale, con il buffer non sincronizzato, la qualità sonora sarà inevitabilmente scadente. Se ci si trovasse in una simile situazione, si provi a leggere 'Problemi e soluzioni'.
L'uscita speaker spesso fornisce prestazioni migliori se abbinata all'opzione 'Alta sincr. video'.

Emulazione TV
Questa opzione consente di emulare le linee di scansione di un televisore. L'effetto è visibile solo quando l'emulazione è impostata a schermo intero. Se l'opzione è disabilitata invece il funzionamento è come un normale monitor. Avendo un computer lento consiglio di attivare l'emulazione TV.

Velocità CPU
E' possibile modificare la velocità della CPU dal 10% all'800% (ovviamente la velocità massima non è raggiungibile in tutti i computer). Quando la velocità è diversa dal 100% (velocità normale) l'uscita audio standard viene disabilitata automaticamente per prevenire malfunzionamenti dovuti al mancato sincronismo del buffer audio.
Scegliendo 'Imposta velocità massima', viene forzato l'emulatore ad andare alla massima velocità raggiungibile. Questa opzione è disponibile in qualsiasi momento tramite il tasto F9. Il tasto F9 modifica anche la frequenza di refresh video, che viene diminuita notevolmente per aumentare la velocità.

MENU REGISTRATORE

Play
Questa opzione deve essere impostata quando si vuole emulare uno Spectrum collegato ad un registratore a cassette. Tutti i dati in ingresso dall'entrata LINE-IN della scheda musicale saranno mandati alla porta 254 dello Spectrum. Poichè i dati audio sono dapprima memorizzati in un buffer, ci sarà un leggero sfasamento tra quanto suonato dal registratore e quanto ricevuto dallo Spectrum. Quando 'Play' è attivo, l'uscita audio standard viene disattivata.

Stop
Quando l'opzione è attivata, si ha l'emulazione di uno Spectrum senza registratore. E' meglio impostare questa opzione dopo aver finito il caricamento di un programma in tempo reale (vedi 'Play').

Uscita audio
Consente di sentire l'audio (tramite lo speaker) durante il caricamento di un programma da cassetta, e anche durante il caricamento di programmi tramite file WAV o TAP.

MENU '?'

Mostra tastiera
Mostra un disegno della tastiera dello Spectrum, in cui sono visibili tutti i comandi e simboli accessibili dal Basic.

Informazioni
Informazioni sul programma.

PROBLEMI E SOLUZIONI

L'emulatore è lento
Supponiamo di essere in finestra. Provare a cambiare l'impostazione di 'Alta sincr. video' e diminuire la frequenza di refresh video. Se si è a schermo intero, procedere come prima. Inoltre si può provare ad attivare l'opzione 'Emulazione TV'.

L'audio standard è sfasato (o in generale ci sono problemi con l'audio standard)
Questo significa che il PC non è sufficientemente veloce da consentire all'emulatore di raggiungere una velocità del 100%. Vedi 'L'emulatore è lento'. Se non si ottenessero risultati, usare l'uscita speaker.
E' anche possibile che altre applicazioni, eseguite in sottofondo, interferiscano con l'emulatore. In tal caso si consiglia di chiudere tutte queste applicazioni.

L'audio proveniente dallo speaker è scadente
Provare ad abilitare l'opzione 'Alta sincr. video'.

Quando si cambia velocità della CPU non si sente più suono oppure viene attivato lo speaker
E' normale, perchè l'uscita audio standard viene disattivata per evitare problemi di sincronizzazione con in buffer audio.

Ho registrato il contenuto di una cassetta in un file .WAV ma non riesco a caricarlo nell'emulatore
I file WAV devono essere campionati a 8 bit, mono e possibilmente a 44100 Hz. E' necessario utilizzare un registratore di buona qualità e le cassette non devono essere usurate. Esistono degli appositi programmi per recuperare nastri rovinati. L'emulatore attualmente prende i dati dal file WAV così come sono; non è presente un filtro che corregga eventuali imperfezioni.

Ci sono giochi che non rispondono alla tastiera
Provare a modificare l'opzione 'Issue 2'. Se si stanno utilizzando file TAP oppure file WAV/RAW premere F12. Se il gioco è stato caricato direttamente da cassetta, ricordarsi di impostare il registratore su 'Stop'.

Alcuni giochi in formato TAP non funzionano
Molto probabilmente questi giochi durante il caricamento non accedono direttamente alla routine della ROM all'indirizzo 0x556, ad esempio perchè hanno delle routine di caricamento personalizzate. Oppure è possibile che accedano alla stessa routine senza però richiamarla all'indirizzo 0x556. In pratica l'emulatore fissa un breakpoint all'indirizzo 0x556, quindi se un programma non effettua una chiamata a quell'indirizzo non può essere portato a termine il caricamento con le routine interne dell'emulatore. Per ovviare a questi inconvenienti, si deve disabilitare l'opzione 'Intercetta routine della ROM', nella finestra 'Impostazioni' dei file TAP.

Problemi con il registratore a cassette
Esistono alcuni fattori estremamente importanti per il corretto caricamento di un programma in tempo reale:
1) il computer deve essere abbastanza veloce da consentire all'emulatore di impostare una velocità del 100%
2) deve essere usato un registratore di buona qualità
3) occorre regolare correttamente il volume (in genere è necessario un volume alto)
4) le cassette devono essere in buone condizioni

NOTE VARIE

Questo programma è stato realizzato in C e Assembler. Si tratta di un adattamento di un emulatore Zx Spectrum da me realizzato per MS-DOS. Quest'ultima versione del programma non è stata mai rilasciata al pubblico, perchè non è ancora ultimata l'interfaccia utente. Forse vedrà la luce in futuro...

RINGRAZIAMENTI

- Flavia Puddu, per i disegni della tastiera e dell'icona del programma, e per i preziosi consigli durante l'intero processo di sviluppo.
- Marco Fichera, per aver testato le versioni beta, aiutandomi nell'individuazione di diversi bugs.