[zxspectrum] Re: News

  • From: Paolo Ferraris <pieffe8@xxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Tue, 26 Sep 2006 17:05:54 -0500

Se ho capito bene la routine termina nella modalita' 4, con il BASIC copiato nella memoria bassa, vero? Ricordati (se non l'hai gia' fatto) che devi settare il secondo screen (pagina 7) come attivo, visto che hai la pagina 7 nella zona 4000->7FFF invece della 5.

-p

Alessandro wrote:
Sto facendo delle prove ed ho una stranezza.

Per controllare se le mappature vengono effettuate correttamente, ho scritto un pezzetto di assembly che "numera" gli 8 banchi di ram (accedendovi all'indirizzo $C000 mediante il solito RAM_BANK sui bit D2:D0 di $7FFD e scrivendo un numero progressivo nel primo byte).

A quel punto commuto in una delle 4 modalita` "speciali" e poi, utilizzando la seriale, trasmetto 4 bytes letti dalle locazioni 0, 16384, 32768, 49152 per vedere qual'e' il banco che si trova attivo a ciascun indirizzo.

Dall'altro capo ricevo dati corretti in tutti i casi: 0,1,2,3 per il modo uno, 4,5,6,7 per il secondo, 4,5,6,3 per il terzo e 4,7,6,3 per il quarto. Sembrerebbe funzionare tutto bene.

Nella seconda e terza modalita` speciale, dove il banco n.5 rimane al suo posto ($4000-$7FFF) come in modo "normale", posso addirittura copiare la ROM sul banco 4 e poi lasciare la modalita` speciale attiva, perche` agli indirizzi 0-$3FFF compare appunto il banco 4 che contiene una copia della rom mentre la ram non si e` mossa (e` necessario un CLEAR 29999 (la routine LM e` su 30000)).

Dal basic, in queste condizioni, posso vedere i banchi con dei semplici PRINT PEEK (a parte quello in cui c'e' la rom, che ha "perso il numero"). Se eseguo un OUT 8189,3 oppure OUT 8189,5 posso passare dalla modalita` speciale n. 2 alla 3 rispettivamente, e vedo che il banco $C000 cambia correttamente da 7 a 3.

Allora, visto che funziona, qualcuno mi spiega perche` se provo a fare la stessa cosa con la modalita` 1 o 4, copiando anche la zona di ram nel banco giusto, il rientro al basic blocca la macchina?

Mi spiego meglio:
1) copio 0-$3FFF --> banco 4
2) copio $4000-$7FFF --> banco 7
3) seleziono la modalita` speciale n. 4 (l'ultima)
4) trasmetto i bytes di numerazione dei banchi e constato che sono corretti: 4,7,6,3 (quindi ho il 4 con la ROM ed il 7 con le variabili)


Rientro al basic e si paralizza (non appare l'OK).

Notare che prima di iniziare il lavoro disabilito gli interrupt e li riabilito all'uscita, ed il sistema e` CLEAR 29999 per cui tutta la ram piu` in alto non ha nessuna influenza.

Perche` si blocca? I banchi sono al loro posto e contengono quello che devono contenere (la rom l'ho provata nell'altro modo, mentre la ram viene copiata perche` altrimenti nemmeno la mia routine potrebbe proseguire (gira in 30000) mentre invece trasmette i 4 bytes senza problemi, dopo la commutazione).

http://www.zxbada.bbk.org/test1.asm

Ciao e grazie a chiunque abbia voglia di dare un parere. Dev'esserci qualcosa che mi sfugge nel banco di ram del basic.

Other related posts: