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

  • From: "Simone Voltolini" <simone.voltolini@xxxxxx>
  • To: <zxspectrum@xxxxxxxxxxxxx>
  • Date: Fri, 2 Sep 2016 16:25:53 +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

-- "


Assurdo!

Chequered Flag con la Disciple...funziona da sempre...

Mamma cara che incompatibilità!!!

Ma hanno poi sistemato con gli aggiornamenti del GDOS?


Other related posts: