[zxspectrum] Re: HD Project 115200!

  • From: Luca Alimandi <luca.alimandi@xxxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Sat, 25 Jul 2015 10:51:57 +0200

Il 23/07/2015 15:46, Enrico Maria Giordano ha scritto:



Il 23/07/2015 10:58, Enrico Maria Giordano ha scritto:

Mi sono riletto tutto il lungo thread e vorrei capire una cosa. Tu
hai detto che ricaricando solo il basic HDFN il problema si risolve.
Puoi confermare questa cosa? E' importante.

No, perché se è vero che si risolve in questo modo (cioè caricando *solo* la parte HDFN) allora la cosa è inspiegabile. A meno che per rimettere le cose a posto non basti un "0 Ok".

Fammi sapere.

EMG



Purtroppo devo smentire clamorosamente quello che dissi all'epoca: ricaricare SOLO HDFN non è sufficiente a riportare la situazione di corretto funzionamento dopo un errore BASIC! :-(
Non so come mai ero convinto che avesse funzionato (forse avevo fatto qualcosa che ora non ricordo, tipo CLEAR con indirizzo basso o cose del genere), ma non sono riuscito più a replicare quel risultato... Per cui direi che possiamo scartare quell'affermazione.

Però ho analizzato un po' il disassemblato delle tue routine LM ed ho notato che in certi casi utilizzi l'istruzione EXX.
Leggendo il capitolo 8 (pag. 86) del libro "Guida allo ZX Microdrive e all'Interface 1" di A. Pennell, ho notato questo, a proposito dell'uso degli Hook Code:
"I codici da FFH a 1AH producono i normali messaggi di errore, mentre i codici superiori a 32H (34H con la nuova ROM) producono HOOK CODE ERROR, non documentato nel manuale. Alcuni di questi codici sono molto utili, altri meno, ma il programmatore deve tener conto dello stato degli interrupt mascherabili, all'ingresso e all'uscita di alcune routine. Se si deve tornare al BASIC (dopo una funzione USR), occorrerà sempre preservare il valore contenuto nella coppia H'L'. Il mancato rispetto di questa precauzione può mandare in tilt il calcolatore in virgola mobile e quindi tutto il sistema."

Magari non c'entra nulla, ma non potrebbe essere che il rientro al BASIC abbia dei problemi a causa della mancata preservazione del valore presente in H'L' prima di usare l'istruzione EXX? E' solo un'ipotesi, non ho approfondito, ma magari per te che conosci il meccanismo delle tue routine e sai perché l'hai utilizzato, potrebbe essere un indizio utile...

Per quanto riguarda i due wav che ti ho inviato, sono la registrazione del BASIC presente al momento sullo Spectrum reale, uno registrato "prima" di provocare l'errore BASIC, l'altro "dopo". In pratica un semplice: SAVE "prima", e SAVE "dopo" (senza linea di autostart).
Se non ricordo male, l'istruzione "SAVE" oltre al programma dovrebbe salvare anche le variabili, ma forse non è così, ed allora i due file non servono a niente, o quasi... In caso, c'è un modo per salvare le variabili insieme al programma? Io non mi ricordo... :-[

Comunque penso che tu non dovresti avere problemi a caricarli (su emulatore o Spectrum reale). Se ha bisogno dei TAP posso provare a generarli, ma per me è un po' laborioso... Credo che tu fai molto prima! E poi forse dovrei salvare altre parti della memoria...

Intanto continuo ad analizzare le informazioni sui canali e la ROM ombra dell'Interface 1, alla ricerca di altri indizi utili. Ti farò sapere. :-)

--

|_ /-\


Other related posts: