[zxspectrum] accesso in RAM a 21MHz con sospensione del clock :-)

  • From: "Alessandro" <apoppi@xxxxxxxx>
  • To: <zxspectrum@xxxxxxxxxxxxx>
  • Date: Wed, 17 Jan 2007 22:52:42 +0100

Ciao a tutti, sono finalmente venuto a capo del problema dell'espansione da
128 a 512K di ram per far girare il residos, cosa che purtroppo aveva
comportato l'impossibilita` di funzionamento a 21MHz perche` tutte le ram da
512K che ho trovato erano troppo lente.

Alla fine ho sostituito il chip da 512K della prima prova (CY62148B-70,
70ns) con un CY62148ELL-45, che e` da 45ns. Purtroppo nemmeno questo
riusciva a funzionare a 21MHz, nonostante sulla carta dovesse starci dentro
(anche se di poco).

Il fatto sconcertante e` che certi programmi giravano a 21MHz ed altri no.

A questo punto ho fatto una serie di misure sui cicli di accesso alla
memoria a 21MHz, controllando nel contempo il databus per vedere quanto ci
metteva la ram a piazzare il dato, ed ho cosi` scoperto l'origine del
problema, un fatto che non avevo minimamente considerato: lo Z80 anticipa di
1/2 clock l'istante di sample del databus quando legge la memoria durante
l'opcode fetch. Il tempo mancante corrispondente a 1/2 T-state (23ns) e`
quello che basta alla ram per non fare in tempo a fornire il dato

Ecco perche` POGO crashava all'istante, mentre Embassy Assault (che uso
sempre a 21MHz perche` diventa discretamente giocabile) invece no: il primo
ha codice macchina in RAM, mentre il secondo e` interamente in basic e
quindi gli opcode fetch avvengono tutti in ROM.

Alla fine ho risolto in questo modo: sulla falsariga dei progettisti
Sinclair  sospendo il clock allo Z80 per 1 T-state, ma solo in caso di
opcode fetch su quel chip e solo se gira a 21MHz. In questo modo la
differenza di velocita` e` pressoche` impercettibile (anzi, nel caso di
embassy assault e` proprio assente) ma funziona tutto.

Ho anche previsto la possibilita` di estendere il wait state ad accessi
normali di lettura e/o scrittura e anche alla ROM (ricompilando la cpld),
riuscendo a far girare a 21MHz una FLASH Winbond da 90ns. In questo
frangente ho scoperto che tutte le EPROM/FLASH provate hanno tempi di
accesso NETTAMENTE MIGLIORI di quanto dichiarato: le piu` eclatanti sono le
ST 27C512-10 fino alla ST 27C4001-10, che sono da 100ns ma rispondono in 30
(!!!) (e con questo ho finalmente capito perche` il clone, ad inizio dello
sviluppo, funzionava bene a 21MHz con la sua 27C512-10 mentre in teoria la
cosa era impossibile)

Per non perdere i dati raccolti li ho inseriti nella documentazione del
badaloc e, se a qualcuno puo` interessare, ho preparato un estratto di
quella sezione a l'ho messo qui: http://www.zxbada.bbk.org/wait_states.zip

Ciao!

GIF image

Other related posts: