[zxspectrum] Re: R: R: Re: Richiesta integrazioni ZXASM

  • From: Luca Alimandi <luca.alimandi62@xxxxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Sun, 14 Feb 2016 14:18:20 +0100

Il 10/01/2016 13:10, Luca Alimandi ha scritto:

...
OK, adesso funziona tutto! Mi hai fatto felice! Ti pare poco? :-)
E comunque credo che ritornerà molto utile a tutti quelli (c'è nessuno?...) che lo utilizzeranno!
Dunque GRAZIE! ;-)


Spero non ti dispiaccia, Enrico, ma ti segnalo che in ZXASM ho trovato un altro piccolo bug.

Mentre le istruzioni del tipo:

LD A,(IX+d)

funzionano, interpretando correttamente l'offset, le istruzioni inverse, e cioè:

*LD (IX+d),A*

sembrano non funzionare (direi che *ignorano l'offset e scrivono sempre nella locazione (IX+0)*.

Puoi verificare, ed eventualmente correggere?


Inoltre, già che ci siamo, ti sottopongo una *seconda richiesta*, ma questa è un po' più una fisima che un bug!
Quando si utilizza l'offset, questo va trattato con la logica del "complemento a 2". In pratica se il bit 7 di d è uguale a 0 l'offset è positivo ed è costituito dai seguenti 7 bit, per cui può andare da 0 a +127; se il bit 7 di d è uguale a 1 l'offset è negativo e va da -1 (con d = 10000000) a -128 (con d = 11111111).

Il problema è che se scrivo:

LD A,(IX+127)

tutto va bene, perché il compilatore interpreterà un offset pari a +127; ma se scrivo:

LD A,(IX+128)

giustamente il compilatore interpreterà un offset pari a -1, ma io non ne ho la percezione, immaginando (sbagliando...) che l'offset debba essere +128 (che non esiste!...)

La richiesta quindi sarebbe quella di poter utilizzare, per gli offset negativi, la *scrittura ESPLICITA*:

*LD A,(IX-1)*

facendo in modo che il compilatore la interpreti correttamente, ossia come l'istruzione in LM:

221 126 128

Il compilatore dovrebbe anche *rifiutare per d valori maggiori di 127 e minori di -128, segnalando l'errore*.

Questa è una cosa che vale in generale per ogni istruzione che usi l'offset (come ad esempio JR d, anche se qui è più raro che in un programma si usi il salto relativo in maniera diretta, mentre più spesso si lascia al compilatore il compito di calcolare da sè l'offset sulla base della posizione corrente dello SP e l'indirizzo a cui saltare...)

Dunque, riassumendo, la richiesta sarebbe quella di poter scrivere in istruzioni che usano l'offset valori per d compresi tra -128 e +127, segnalando eventuali errori (valori esterni a questo range) e interpretando correttamente i valori da inserire nell'istruzione LM.

Si potrebbe fare?

Fammi sapere.
Grazie in anticipo!


--

|_ /-\

Other related posts: