[zxspectrum] Re: ZXMMC+

  • From: "Alessandro" <apoppi@xxxxxxxx>
  • To: <zxspectrum@xxxxxxxxxxxxx>
  • Date: Mon, 2 Jul 2007 23:10:20 +0200

On Monday, July 02, 2007 8:48 PM [GMT+1],
Eugenio Ciceri <eugenio.ciceri@xxxxxxxxx> wrote:

Dopo circa un secondo il bordo diventa blu (a volte, più raramente
rosso, ma non l'ho mai visto diventare di altri colori) e i led si
spengono, ma lo schermo resta quadrettato e lo Speccy è bloccato.

Durante il secondo di attesa, i 16K di rom da cui lo spectrum e` partito (flash bank 0, la bootrom) vengono copiati nell'ultimo banco di ram (usa l'ultimo per interferire il meno possibile con la ram usata dal residos, che in futuro permettera` di definire un numero di banchi da non usare) e poi l'esecuzione prosegue da li`. Il motivo e` che in questo modo il programma dispone anche di ram privata per le variabili e puo` funzionare senza sporcare minimamente quella dello spectrum (usa l'ultimo KB in rd/wr), cosa molto utile quando si prende uno snapshot in NMI. Ho fatto cosi` perche` ovviamente non e` possibile cambiare continuamente banco per accedere ad una zona rd/wr, anche perche` ogni volta andrebbe in crash l'esecuzione del programma :-)

La copia ROM -> RAM che avviene al power-on utilizza 16K di ram spectrum come area temporanea. La ram utilizzata e` all'indirizzo $4000 (schermo) e questo spiega perche` ti sembra che il pattern sia costante: lo e`. E` il contenuto della rom che viene copiata. Successivamente viene chiamata la subroutine "set_vars" (che inizializza le variabili) e poi subito la "cls". Se lo schermo non viene pulito significa che quasi sicuramente non e` tornato dalla prima chiamata, cosa che probabilmente dipende dalla ram difettosa (lo stack pointer usa proprio quella).

Tu che sei un esperto, prova ad aprire bootrom.asm e cerca la label "reset_vector" cosi ti rendi conto di quello che succede.

Puoi anche scrivere una tua routine di test: il comando 'join.exe' genera il file .TAP del binario header.bin+bootrom.bin. L'header.asm contiene la routine in grado di programmare il firmware "appeso in coda" nella flashrom, RAND USR 30100. Se invece usi RAND USR 30000 il firmware viene semplicemente testato direttamente in ram, senza flashare la rom (debug veloce).

Ciao!


Other related posts: