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!