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.
Il programma richiede: Windows 95/98 + DIRECTX, 16MB RAM, Pentium 100 o superiore, scheda audio e video qualunque purchè supportate dalle DIRECTX.
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.
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..
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.
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.
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. Puo' essere usato il joystick presente nel PC, oppure in alternativa
i tasti cursore per il movimento, e i tasti TAB e MAIUSCOLE per il fuoco.
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à.
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.
Informazioni
Informazioni sul programma.
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
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...
- 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.
- Andrea Mongardini e Leandro Dumini, per la traduzione in inglese
di questo documento.