[zxspectrum] Re: +2 schematic wanted

  • From: Paolo Ferraris <pieffe8@xxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Sun, 20 May 2007 11:49:42 -0500

Se ci sono 4 banchi di ROM allora il +2 è in realtà un +2A/B, che ha lo stesso schema del +3. O ti riferisci a ROM/RAM della scheda?


-p


Alessandro wrote:
Ciao a tutti!

Dopo una serie di congetture per stabilire la causa del mancato funzionamento della flashrom della zxmmc+ di Garry, cosa che imputo al +2 che sta usando (io ho solo un 48K), sto valutando questa spiegazione:

E` possibile che l'hardware del +2 sia concepito in modo che la rom interna venga attivata anche quando il processore SCRIVE nell'area di memoria ad essa dedicata, ovvero nei primi 16K di indirizzamento?

Il motivo di questa ipotesi e` presto detto (piu` o meno): l'aggiornamento del firmware nella flashrom della zxmmc+ e` affidato ad un piccolo "header" posto in testa al file binario vero e proprio (che deve essere programmato nel primo banco di ROM (0)).

Questo header, il cui sorgente e` "header.asm" all'interno di http://www.zxbada.bbk.org/zxmmcp/software/bootrom_v027.zip
esegue le seguenti operazioni:

1) copia i banchi ROM 0,1,2,3 in ram (nella zxmmc+ stessa) sui banchi 27,28,29,30 2) sovrascrive il banco 27 con il contenuto binario "appeso" in coda all'header (che e` il firmware da programmare)
3) cancella 64K nella ROM (banchi 0,1,2,3)
4) riprogramma con il contenuto dei banchi RAM 27,28,29,30.

Il motivo e` che la flash puo` essere cancellata solo in blocchi da 64KBytes, per cui devo fare un backup del contenuto. Inoltre l'ultimo banco di RAM (31) e` usato dal firmware stesso, per cui "rovino" i banchi dal 27 al 30. Il ResiDOS usa quelli piu` in basso.

Ed ora vengo al punto: la routine che realizza lo "step 2" e` questa:

;
;---------------------------------------------------------------------------------------------
upload_romcode
   ld a,RAMBANK                    ; base ram bank (27)
   set 7,a                                     ; WR enabled
   out (FASTPAGE),a

   ld hl,PROGBLOCK                ; this label is at bottom header.asm
   ld de,0                                    ; destination: zxmmc+ RAM
   ld bc,16384
   ldir
   ret

Il fatto di settare il bit 7 del FASTPAGE abilita la ram in scrittura, MA NON IN LETTURA. Questo e` molto potente perche` un loop FOR/NEXT in BASIC puo` copiare la rom in ram (viene letta la rom ma scritta la ram) e poi eseguire lo switch mettendo in lettura la ram appena copiata. Questo fatto, comporta che il segnale ROMCS sul pettine di espansione non venga revocato. Il punto e`: per come e` programmata attualmente la cpld, non viene revocato neanche durante gli accessi in scrittura all'area 0-$3FFF, dato che assumo PER SCONTATO che la rom non venga attivata quando il processore SCRIVE in tale area. Questa condizione corrisponde a verita` sul 48K, dove l'output_enable della ROM e` collegato al segnale RD dello Z80, ed infatti tutto ha sempre funzionato a meraviglia.

Ho il sospetto che per qualche motivo, sul +2 che e` sotto le mani di Garry la ROM si attivi anche quando il processore SCRIVE. Questo spiegherebbe molto bene perche` nella flashrom, il poveretto si e` trovato incredibilmente una copia della ROM 1 AMSTRAD, al posto del firmware bootrom!!

Non riesco a trovare da nessuna parte lo schema elettrico del +2, nemmeno su WOS.

Qualcuno ce l'ha, o puo` confermarmi il fatto che sto ipotizzando?

Ciao e grazie!
Alessandro


.



Other related posts: