[zxspectrum] Re: domanda e conferma EXP 80K

  • From: Luca Alimandi <luca.alimandi@xxxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Thu, 06 Nov 2014 01:38:27 +0100

Cesare Falco ha scritto:
Il 05 novembre 2014 09:09, marco_c_2011@xxxxxxxxx
<marco_c_2011@xxxxxxxxx> ha scritto:
Non ho visto la pagina facebook della 80k ram, pero' su elettronica 2000 era
pubblicata una modifica per la famosa espansione che reindirizzava i primi 16k
inidrizzati ULA sui 32k fantasma (sprecandone 16). Eliminava i problemi dei
timing della memoria contesa e otteneva un migliramento di velocità del 10%
circa (secondo loro) dato che lo Z80 viaggiava sempre al massimo.
ho dei dubbi...

la contesa è dovuta al fatto che sia la ULA che lo Z80 devono accedere allo
stesso banco di memoria; anche rimappando la memoria video in un'altra
zona della memoria il problema non verrebbe risolto, tant'è che anche altri
banchi del 128k soffrono della contesa.

Hardwaristi... dove siete?! :-)

Cesare


Se non ricordo male, l'aumento dell'efficienza utilizzando un banco di memoria esterno al posto di quella standard era legato al fatto che il banco da 16K contenente la memoria video era di tipo "dinamico". La RAM dinamica ha il "difetto" di dover essere rinfrescata di continuo, altrimenti i dati si perdono... A tal fine veniva utilizzato un sistema di rinfresco ciclico, per cui, ad intervalli regolari, la CPU effettuava una lettura fittizia della memoria che consisteva in realtà nel solo indirizzamento delle celle, senza poi leggere effettivamente il loro valore.
Era un meccanismo noto come "ciclo di refresh".
Essendo necessario ciclare su tutte le celle, la CPU aveva un meccanismo di blocco delle letture e scritture dei dati quando arrivava il momento del refresh. Era stato quindi progettato un tempismo particolare della ULA che faceva in modo che la lettura ciclica della parte di memoria video (che risiedeva appunto nel banco da 16K) per la formazione dell'immagine sullo schermo, avvenisse in modo coordinato con il refresh. Inoltre quando la ULA accedeva alla memoria per leggere i dati del buffer video, impediva alla CPU di effettuare altre letture o scritture, "legandogli le mani"... ossia utilizzando degli HALT o meccanismi simili... Ora non ricordo molto bene i particolari, ma avevo letto degli articoli che parlavano di un "effetto neve" sullo schermo nel caso in cui si forzavano degli interrupt in modo particolare. Per questo motivo veniva consigliato di posizionare nel banco di memoria superiore (da 32768 a 65535) le routine in cui la temporizzazione era critica e che richiedevano la disabilitazione degli interrupt non mascherabili. Questo perchè la ULA aveva comunque il sopravvento per rispettare i sincronismi video, e quindi mandava a pallino i calcoli delle temporizzazioni fatte sui T-State... Ora la cosa è un po' complessa, ma per farla breve, se si sostituiva la RAM tra 16384 e 32767 (banco di memoria bassa, contenente il buffer video) con una memoria di tipo "statico", era possibile (non mi ricordo come!...) disabilitare il meccanismo di refresh, necessario per le RAM dinamiche e NON per quelle statiche, recuperando un po' di tempo della CPU (forse quel 10% di cui parlano nell'articolo, ma a occhio mi sembra un po' esagerato!...). Non sono sicuro di questo, ma penso che per poter veramente sfruttare questa possibilità, sarebbe stato necessario anche modificare il comportamento della ULA, altrimenti, pur avendo a disposizione una memoria statica, avrebbe continuato a bloccare la CPU...

Questo per quanto ne so io... Infatti molto tempo fa avevo pensato di sostituire completamente le RAM dinamiche dello Spectrum con un'unica RAM statica da 128K. Sia per testare quello che veniva descritto in quegli articoli, sia perchè col tempo le memorie statiche di grosse dimensioni divenivano sempre più economiche, sia perchè erano molto più facili da collegare (in pratica si collegavano come le ROM), sia perchè un solo chip di RAM statica sostituiva 8 o 16 chip di RAM dinamica, con un buon risparmio anche di spazio, e soprattutto perchè alimentandole con un'unica alimentazione da 5V faceva risparmiare anche tutta la circuiteria per generare i +12V e i -12V che servivano per le memorie dinamiche e (dulcis in fundo!) perchè i dati si mantenevano anche a computer spento purchè la RAM statica venisse alimentata da una semplice pila da 5 o 6 Volt!!! In pratica era come poter mettere in standby lo Spectrum! Libidinoso (per l'epoca!...) ;-)

Poi però non feci più niente per mancanza di tempo e per le mutate condizioni di vita... Ma ancora conservo le RAM statiche che mi ero procurato... Non si sa mai! :-)

--

|_ /-\

Other related posts: