[zxspectrum] Re: R: Re: R: Re: Censimento

  • From: "Andrea Vavassori" <andrea@xxxxxxxxxxxx>
  • To: "zxspectrum@xxxxxxxxxxxxx" <zxspectrum@xxxxxxxxxxxxx>
  • Date: Wed, 03 Sep 2003 20:48:35 +0200

On Wed, 3 Sep 2003 15:14:14 +0200, BODRATO Stefano wrote:

>Si pu? fare molto di pi?, ovviamente !
>... solo che non ricordo i dettagli   :o(

Allora dettaglio un po' io:

Innanzitutto, se il codice ha solo jump relativi e call al di fuori del
codice puo' funzionare a qualsiasi locazione, altrimenti va spostato a
una locazione fissa. Non solo, il codice non sa dove si trova e bisogna
dirglielo in qualche modo. Immaginiamo la linea 0 che si trova a
posizioni diverse se ci sono Discovery o Interfaccia 1, se ci sono
canali aperti etc. Possiamo passare parametri come vogliamo al LM da
BASIC, ma la maniera piu' elegante e' usare il contenuto dei registri
stessi al momento che la funzione "USR n" passa il controllo alla
nostra routine. Cosi' scopriamo che BC non solo e' l' argomento della
funzione al ritorno, ma al lancio della routine contiene l' indirizzo
chiamato. Quindi poche righe di assembler aggiunte all' inizio del
programma lo spostano con eleganza:

LD   HL,$000E     ;lunghezza della miniroutine
ADD  HL,BC        ;punta all' inizio del blocco
LD   DE,DEST      ;l' indirizzo di destinazione
PUSH DE           ;va sullo stack per la sucessiva chiamata
LD   BC,LUNGH     ;la lunghezza del blocco
LDIR              ;sposta il blocco
RET               ;"ritorna" saltando al LM appena spostato
<codice in LM>

>La tecnica che preferivo era di spazzolare l'area delle variabili e 
>individuare quella che aveva il nome giusto (ad esempio su PSEUDOS leggiamo 
>c$).  La variabile pu? essere poi modificata anche in dimensione chiamando le 
>funzioni in ROM.

Anche io usavo questo approccio, ma limitatamente alla modifica di
variabili numeriche a una sola lettera gia' definite in precedenza da
BASIC, per una abitudine a privilegiare la compattezza del codice
(=niente piu' dello stretto indispensabile)

>DEF FN permetteva invece di recuperare pi? facilmente i valori passati

In effetti da LM bastavano poche righe di codice per trovare l' area
contenente il blocco di valori e di stringhe passate alla funzione.
Adesso mi sfugge quale fosse la var di sistema...

Ciao!

 /\
/--\ndrea

(C) 1982 Sinclair Research Ltd


Other related posts: