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