Il nome di questa tecnica (merge=fondere) deriva dal fatto che si fondano due o più listati in uno, ingannando l’interprete Basic.
Cioè battendo un programma, a volte, si rende necessario usare altri pezzi di programma scritti in altri momenti.
Come fare?
Prima cosa, il programma che andrete ad aggiungere, DEVE avere i numeri di riga successivi a quelli del programma principale, poi bisognerà spostare i puntatori del Basic in modo di non andare a sovrascrivere il programma principale con quelli che andrete ad aggiungere poi. Quindi ripristinare i puntatori per far vedere all’interprete tutto il programma.
Vediamo come:
1) digitare il programma principale; appena terminato, ovvero quando devo aggiungere il programmino:
2) A = PEEK(45) + 256 * PEEK(46):PRINT A
Digitando questa riga, otteniamo l’indirizzo di memoria dopo i 3 byte 0 che indicano la fine di un programma in BASIC.
3) A=A-2
Questo riporta il valore di A all’ultimo byte del programma in BASIC appena terminato (quello del programma principale).
4) PRINT PEEK(43) + 256 * PEEK(44)
Annotare l’indirizzo ottenuto, che è quello immediatamente successivo al programma principale.
Ora si setta il puntatore dell’interprete BASIC, all’indirizzo successivo, per evitare di sovrascrivere i programmi, con la seguente istruzione:
5) POKE 43,A AND 255 : POKE 44,A/256
Ora il puntatore del BASIC è pronto per un nuovo programma.
Procedere con il caricamento del programma di utilità che vogliamo accodare al nostro programma principale:
LOAD “mio_tool”,8
Alla fine del caricamento dobbiamo sistemare i puntatori all’indirizzo corretto, così che l’interprete Basic veda tutto il programma, quello principale e quello appena caricato.
Per fare questo, dobbiamo fare due casi: A) Vic20-Inespanso, B) Vic20-Espanso:
a) Inespanso = POKE43,1 : POKE44,16
B) Espanso = POKE43,xxxx AND 255 : POKE44,xxxx / 256
dove xxxx è l’indirizzo annotato prima al punto 4).
Se ora diamo il comando LIST, vedrete che l’interprete listerà il vostro programma principale e in fondo il programma mio_tool appena caricato da disco/cassetta.
ATTENZIONE Ribadisco: i numeri di riga dei vari programmi aggiunti NON devono essere uguali, ma sempre consecutivi.
Ottimo esperimento, molto comodo se abbiamo una bella libreria di tools pronti per essere inclusi in un programma unico.
Buon coding.