Overlay – Eseguire programmi da una routine principale

Con questa tecnica mandiamo in esecuzione programmi da un programma principale. Capita che si voglia da un programma menu, caricare altri programmi per farli eseguire indipendentemente dal primo. Ma è anche possibile calcolare alcune variabili dal programma menu, e tenerle inalterate nel caricamento del programma secondario, così che le possa utilizzare, vediamo come.
Si possono distinguere 2 casi:
1) il programma da caricare è più corto del programma menu, o al più uguale.
2) il programma da caricare è più lungo del programma menu.

Come si può vedere dal primo video, basta creare il nostro programma 1 che dichiara le variabili, e poi caricare il programma 2. A questo punto il programma in basic 2 sovrascrive il programma 1, ma tiene in memoria le variabili numeriche.

Diverso discorso va fatto per le variabili stringa, queste se facciamo nello stesso modo, le perdiamo, bisogna usare una strategia differente, ovvero:
A$ = “ABCDEF” + “”
Se utilizziamo la concatenazione con stringa nulla, diciamo al Basic di stare in allerta, salvare la variabile stringa A$ dovrà essere concatenata con altro, quindi viene salvata nell’area di memoria adeguata, e mantenuta. Come si vede dal secondo filmato il programma con la stringa A$ ha concatenata una stringa vuota. Questo permette di portarla anche nel programma successivo.

2) In questo caso abbiamo 2 possibilità, a seconda del caso a) non si voglia passare o b) passare le variabili.
a) Se NON vogliamo passarle, allora basta predisporre le locazioni 45-46, ai valori del secondo programma. Basta aggiungere come prima riga del secondo programma
le seguenti istruzioni (nn = numero di riga)
nn POKE45,PEEK(174):POKE46,PEEK(175):CLR
Le locazioni 174-175 contengono le locazioni ove termina un programma appena caricato da nastro o da disco.
b) S invece vuoi che le variabili rimangano inalterate anche per il secondo programma, bisogna fare in modo che il primo programma (quello menù) sia lungo quanto il secondo. Per fare questo bisogna seguire i seguenti passi:
1b) si carica il secondo programma
2b) si visualizza ed annotare la lunghezza del secondo programma con:
PRINT PEEK(45), PEEK(46)
3b) se i programmi da caricare siano più di uno, si procede per ognuno la stessa procedura di annotazione.
4b) tenere solo quelle più grandi.
5b) aggiungere la seguente riga al programma menù:
0 POKE 45,(massimo dei 45):POKE 46,(massimo dei 46): CLR
a questo punto il programma menù sarà lungo quanto il più lungo dei programmi 2, così facendo non si rischia di sovrascrive le variabili.
Ricordo che per le variabili stringa, bisogna adottare la seguente tecnica:
nn A$ = “ABCDEF” + “”

Buon Coding

Marco Bergomi


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *