[zxspectrum] Re: R: Re: R: Re: R: Re: R: Re: DEMO PENTAGON su ZX-UNO

  • From: Luca Alimandi <luca.alimandi62@xxxxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Fri, 2 Sep 2016 16:10:05 +0200

Il 02/09/2016 15:57, Luca Alimandi ha scritto:

Il 02/09/2016 14:39, Enrico Maria Giordano ha scritto:


Il 02/09/2016 14:25, Stefano Donati ha scritto:

Le specifiche dello Z80 dicono che l'indirizzo da cui prelevare il
vettore di interrupt quando ha luogo un'interruzione viene composto
utilizzando il contenuto del registro I per la parte alta, mentre per la
parte bassa viene utilizzato quanto si trova sul bus dati. Dunque nel
caso in cui siamo assolutamente sicuri che il bus dati sia sempre a
livello logico alto otterremmo un indirizzo hex del tipo xxFF (dove xx è
il valore del registro I)... ma in caso di dispositivi esterni che
"trafficano" con il bus dati (il floating bus non può essere perché si
verfica durante la lettura di pixel e attributi per il disegno dello
schermo, quindi ben lontano dall'interrupt) il risultato potrebbe non
essere sempre lo stesso; ecco perché per evitare rischi se ad esempio
I=0xB8 viene creata una tabella di indirizzi (tipicamente tutti uguali)
che prende da 0xB800 a 0xB900 (compresi).

Esattamente.

EMG


Ottima esposizione!
Qui c'è una spiegazione relativamente alla creazione della lista degli indirizzi di salto degli interrupt in modalità IM2:
http://www.animatez.co.uk/computers/zx-spectrum/interrupts/

Anche questa spiegazione mi sembra molto ben fatta:
http://codersbucket.blogspot.it/2015/04/interrupts-on-zx-spectrum-what-are.html

In alcuni altri articoli (che non ho ritrovato) si parlava del fatto che anche gli emulatori non si comportano tutti nello stesso modo per quello che riguarda il contenuto dell'indirizzo basso (bit 0-7) del bus durante gli interrupt, il che costringe i programmatori, che intendano usare l'IM2 e mantenere la compatibilità con tutti gli emulatori e le versioni di Spectrum e periferiche, ad utilizzare una tabella formata in modo particolare (257 byte consecutivi (come ha scritto bene Stefano) contenenti sempre lo stesso valore in modo che sia leggendo coppie a partire da posizioni pari che da posizioni dispari formino sempre lo stesso indirizzo a cui saltare; ad esempio nella mia routine per la gestione del mouse Kempston ho usato il valore 253, per cui l'indirizzo di salto è 253 + 256 * 253 = 65021). Inoltre la tabella stessa si deve trovare all'inizio di una zona di memoria multiplo di 256. Nel mio caso ho posto i tre byte di un "JP nn" a partire da 65021 e ho fatto iniziare la tabella subito appresso, ossia a 65024, che è appunto 254 * 256.

Penso di aver letto anche qualcosa che riguardava alcune intefacce hardware che non rispettavano la convenzione di cui sopra, mi pare fosse l'interfaccia Joystick della Kempston, ma non ci giurerei. E' possibile che la Plus D avesse un comportamento simile (a volte è una conseguenza della semplificazione all'osso dell'hardware...)



Ecco qui una cosa interessante in proposito:

//www.freelists.org/post/zxspectrum/betadisk-o-plusd,28

...  della serie: "Fatti una domanda, e datti una risposta!..." :-D

--

|_ /-\


Other related posts: