On 10/30/2012 12:19 AM, Andrea Vavassori wrote:
Ciao Paolo, in data martedì 30 ottobre 2012, alle ore 7.37, hai scritto:Credo di aver capito come si puo` far ritornare una stringa a USR N. Ho dato un'occhiata a come funziona la funzione STR$, e vedo che chiama la routine STK-STO-$ invece che STK-STORE. E' molto simile a STK-STORE tranne che inoltre resetta il flag 6 di FLAGS, indicando che il valore ritornato e` di tipo stringa.Ehm... l' avevo visto anche io, ma la CHR$ invece usa la STK-STORE e quindi occorre qualche ulteriore indagine. Magari e' CHR$ che non setta correttamente il bit come dovrebbe fare (scoperto un nuovo bug?).
A me invece pare che CHR$ chiami STK-STO-$... http://www.wearmouth.demon.co.uk/zx82.htm#L35C9
Interessante. Quindi l'interprete (non l'editor) ignora se la variabile della FN e` di tipo stringa o numerico.Cmq, l' inserimento di una DEF FN con argomento stringa e funzione numerica (USR) e' solo un problema di controllo di sintassi. Una prova rapida con: 10 DEF FN a$(n)= USR 64000 (si digita lo spazio al posto del $, poi si fa un POKE 23761,CODE "$") POKE 64000,201 PRINT FN a$(1) risponde 64000. LET b$= FN a$(1) risponde "C nonsense in basic" Quindi il codice di FN chiama effettivamente la routine a 64000 e termina comunque il suo giro, tant'e' che la PRINT prende per buono il valore numerico ritornato e lo stampa senza colpo ferire. Giustamente, invece, la routine del LET non accetta il risultato numerico avendone chiesto uno stringa, e va in errore.
Sembrerebbe quindi che lo Spectrum sia gia' a posto e che tocchi solo a me fare il codice che produce il risultato corretto sul workspace. rimando tutto a stasera, adesso il lavoro mi aspetta... :-) Ciao! Andrea .