[zxspectrum] Re: programmazione hardware via JTAG

  • From: "Alessandro Poppi" <apoppi@xxxxxxxx>
  • To: <zxspectrum@xxxxxxxxxxxxx>
  • Date: Thu, 29 Mar 2007 09:25:50 +0200

Eugenio Ciceri wrote:

Eugenio, attento a te che a breve ho un aggiornamento anche per la
tua zxmmc :-)

Sono prontissimo! (come testimonia il tempo trascorso tra il tuo post
e la mia rispost... ;-))
Ma cosa hai messo nell'aggiornamento di bello?

Si tratta di una modifica alla seriale (dato che sulla porta SPI non si puo` piu` migliorare, dopo l'ultima modifica suggerita dal Ferraris).

Se guardi le spedifiche, vedrai che la zxmmc puo` generare un NMI quando riceve un byte dalla seriale. Questo perche` la porta e` identica a quella del badaloc e su quest'ultimo si tratta di una caratteristica fondamentale per poter "grabbare" la situazione della macchina, qualsiasi cosa stia facendo, imponendo la comunicazione con il programmello Win32.

Ho pero` pensato che sullo spectrum c'e' un piccolo problema: dato che l'NMI viene generato solo al completamento della ricezione del byte, la ricezione sballa se per caso lo Z80 sospende il clock piu` di una volta (il tempo di un bit e` pari a 30T-states Z80; una sola sospensione e` accettabile (forse), ma se si arriva verso i 10/12T di sospensione totale ci si avvicina pericolosamente al tempo di 1/2 bit (15T) e c'e' il rischio concreto di saltarne uno).

Avrei quindi pensato di apportare una modifica rispetto alla porta del badaloc, asserendo l'NMI sullo start bit. In questo modo l'handler viene chiamato subito e puo` prendersi cura di evitare accessi contesi. Inoltre, per evitare di dover aspettare 300+ T-states per vedere se si trattava veramente di un byte da seriale (il flag "RX BUSY" dello status register e` settato solo quando il byte e` arrivato tutto intero, quindi al momento dell'NMI mancano ancora 300T-states), ho aggiunto un bit allo status register stesso (su D4, che era inutilizzato) che si chiama "rx in progress" e indica fin da subito che la seriale si e` attivata.

In questo modo l'handler puo` leggere subito lo status register; se l'"rx in progress" non e` attivo, non e` la seriale (pulsante?) e quindi puo` uscire subito. Se invece e` attivo, allora deve entrare in un loop di polling fino a quando non trova SET il "rx busy", momento in cui puo` leggere il byte dal "data register".

La durata di "rx in progress" e` di soli 300T-states (tempo di ricezione di 1 byte), ma l'handler e` molto piu` veloce di cosi` e lo trova di sicuro (e in ogni caso serve solo a velocizzare l'handler stesso; se non interessa, si puo` tranquillamente pollare l'"rx busy", che rimane stabile per sempre, fino a quando non viene letto il "data register").

L'asserzione di NMI su ricezione del byte puo` essere disattivata (anzi, e` disattivata per default) mediante un altro registro, che pero` avrei spostato per renderlo compatibile con quello della zxmmc+, se mai la completero`, nella quale quell'indirizzo serve per altre cose.

Tutto questo semplicemente perche` mi piacerebbe mettere in piedi lo stesso meccanismo che sul badaloc permette di trasferire blocchi di memoria / snapshot mentre lo spectrum esegue altri programmi, soprattutto a scopo di debug. Mi rendo conto che sia una cosa un po` piu` complicata perche` qui si tratta di mettere l'handler in ROM. Ad esempio, stavo pensando di modificare la rom di un 48K (quello che dovrei riparare con le 4116) per correggere il bug dell'NMI, e poter usare le locazioni 23728/23729 per testare l'handler in ram. Vorrei poter usare lo "zx-com" su una macchina windows senza modifiche, anche se molte delle funzioni sarebbero ovviamente inutili.

Morale: se avevi voglia di strappolare con la seriale, eccoti servito. :-)

Penso che testero` a breve il cavo JTAG passivo sottoposto da Mario (meglio che lo faccia io, che se cancello la CPLD posso rimediare) e, nel caso, ti mando il file di programmazione nuovo (l'ho solo compilato, ma non l'ho testato su una zxmmc perche` sto ancora sbrogliando il pcb della zxmmc+ (un vero incubo)).

Ciao!



--
Email.it, the professional e-mail, gratis per te: http://www.email.it/f

Sponsor:
Logos Finanziaria SPA. Società di credito ad erogazione diretta. Fino a 30.000 
euro in 24 ore! Clicca e scopri come
* Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid=2909&d=29-3

Other related posts: