[zxspectrum] Re: Funzioni definite dall' utente

  • From: Stefano Bodrato <stefano_bodrato@xxxxxxxxxxx>
  • To: "zxspectrum@xxxxxxxxxxxxx" <zxspectrum@xxxxxxxxxxxxx>
  • Date: Mon, 29 Oct 2012 14:17:34 +0100

 
>Il fatto che istruzioni del tipo DEF FN a$(x) = USR 64000 non siano 
>accettate viene dal fatto che USR N ritorna un tipo di dato numerico (il 
>contenuto dei registri BC, per essere precisi).
> 
>Non ho assolutamente idea di come faccia il beta basic. Puo` essere che 
>il codice vero sia semplicemente offuscato. Comunque istruzioni di 
>questo tipo non sono accettate da linea di comando neanche con il beta 
>basic caricato.

Il modo per restituire valori diversi dall'intero su BC non è banale da 
spiegare ma c'è.
Opus Discovery risponde con un valore in Floating Point al comando 'PRINT USR 
8' (ovvero il numero di versione '.' subversion).
La tecnica usata ha a che fare con l'FP Calculator Stack, ovvero lento ma 
piccolissimo (e inesorabile) cuore matematico dei Sinclair.
 
Non mi ricordavo che fosse vietato abbinare USR n a una FN di tipo stringa, 
probabilmente basta attivare una qualsiasi 'workaround' sintattica al problema 
ad esempio CHR$ USR(n) o STR$ USR(n) e poi 'ribilanciare' l'output con il 
codice macchina (credo collocato sempre sullo stack FP), tanto basta che FN si 
trovi l'output giusto al ritorno..
Altri trucchi per forzare l'interprete BASIC a recepire sintassi 'particolari' 
sono invece di solito basati sul 'trap' dell'errore (ERR_SP e simili) o 
sull'intervento dei meccanismi di paging dell'interfaccia disco in questione, e 
quindi specifici di ogni device.. ma l'effetto è molto elegante (vedi la 
consistente letteratura di esempi relativi alla Interface 1 per aggiungere 
comandi al BASIC).
 
Dal canto mio preferisco lavorare direttamente sulle variabili BASIC.  E' più 
pulito e universale  :)
..evito per una volta di citare z88dk, che già fornisce quanto occorre.. ops !
 
 
P.S.
Cariiiino !
http://scratchpad.wikia.com/wiki/DEF_FN
 
                                          

Other related posts: