Page 127

TUlIO

Specrrum

Quando il programma andrà in esecuzione, ad ogni condizione di errore che si verificherà, lo schermo si annerirà completamente senza dare nessuna possibilità di intervento all'utente tranne il reset del computer. Note Dato che con questa PO KE si fa in modo che ogni qualvolta compare nella 233 e 243 riga dello schermo si attivi la protezione, bisogna stare attenti a non inserire delle INPUT o PRINT # I o # nel nostro programma, altrimenti il sistema «salterà» anche quando non desiderato. Vantaggi Diventa impossibile guardare il listato dopo aver cercato di breakare il programma. Nel caso in cui si debba necessariamente inserire qualche istruzione tipo INPUT, PRINT #0, ecc., si

Svantaggi Gli stessi di quella descrita dentemente.

Code Byte Come abbiamo visto, alcune protezioni risultano inefficienti quando si esegue un MERGE del programma. Per ovviare a questo inconveniente si può salvare il programma, anche se è in Basic, come Code Byte anziché come Program. Per far ciò bisogna innanzitutto conoscerne la lunghezza e memorizzarne il valore in una variabile. Il metodo è il seguente: digitare, senza numero di linea:

°

Routine per salvare in headerless

62

121

•••••••• 121

221 33

iJ0

J

S C i

205 194 4 •••call 1216 201 ••••••••• I" e t Figura 1

Per inserire in memoria il linguaggio macchina si può usare un programmino in Basic come questo: 10 FOR N-O TO 13 20 READ numeri: POKE 60000 + N, numeri

Routine per caricare

in headerless

uno SCREEN $.

l ~ a, 0 64 .ld ix.16384 ••••• ld de.6912 55 •••••••••• scf 205 86 5 •••• call 1366 62

121

••••••••

221 33 1712127

~Q\l

121

•••••••••

ret

Figura 2

può momentaneamente togliere la protezione inserendo, prima della INPUT, POKE 23659,2 e subito dopo POKE 23659,0. Notare però che se il programma viene interrotto in questo punto, tutto lo sforzo fatto risulterà vano. Svantaggi Si può aggirare tale protezione evitando di attivarla: ad esempio, se un programma è stato salvato con l'autostart, basta caricarlo con un MERGE, listarlo e togliere la linea di programma che contiene la suddetta POKE e quindi. mandarlo tranquillamente in esecuzione.

Reset completo Questa protezione funziona in modo più o meno analogo a quella precedente in quanto, ad ogni condizione di errore che si verifica, anziché annerire lo schermo «resetta» direttamente il computer rendendo necessario ricaricare il programma. Per atti varia bisogna inserire nel programma POKE 23613,0. Note Alcune particolari istruzioni, come CLEAR, RUN o RETURN, annullano questa protezione se vengono inserite ed eseguite nel corso del programma.

Vantaggi Non presenta «effetti collaterali». Conviene inserirla in più punti del programma. MCmicrocomputer

62,0,221,33,0,64,17,0,27,55,205,86,5,201

quindi salvare il programma come Byte partendo dall'indirizzo 23552, cioè:

64 .l~ ix 16364 ••••• l~ ~i.6912

1712127 35 .••...•..•

62,0,221,33,0,64,17,0,27,55,205,194,4,201

..Per caricare successivamente il programma senza header bisogna usare quest'altra routine (il listato assembler è in figura 2):

LET X = 65535 - USR 7962 :LET XX=41472-X:LET XX=XX+30

uno SCREEN $.

l~

li).. Omettendo queste informazioni, il programma non può essere caricato. Per usare questa protezione .bisogna preparare un «Loader» (un programmino caricatore che serve per caricare il programma principale) contenente una apposita routine in L/M. I codici decimali della routine per salvare un programma in modo headerless sono i seguenti (il listato assembler si trova in figura I):

prece-

n. 47 - dicembre 1985

SAVE «nome» CODE 23552, XX: GO TO 1

Note La locazione 23552 è quella di inizio dell'area delle variabili. Il valore di XX viene incrementato di 30 byte rispetto al suo valore originale dato che il metodo per calcolare la lunghezza dei programmi non è molto preciso e quindi è meglio salvare qualche byte senza importanza in più che non uno importante in meno. Da notare che il GO TO I dopo il SA VE imprime al programma l'autorun. Vantaggi Un file così salvato non può assolutamente essere «mergiato» dato che è intepretato dal calcolatore come se si trattasse di linguaggio macchina. Inoltre, se dopo il SAVE e prima del GO TO, inseriamo POKE 23613,0 il programma risulta protetto anche in fase di caricamenteo: se avverrà un errore di tipo R (Tape Loading Error), il computer si resetterà. Svantaggi A parte il metodo di calcolo della lunghezza del programma un po' laborioso, direi nessuno.

Headerless Un altro sistema per evitare il MERG E è quello di effettuare il salvataggio senza l'header (l'header è, come dice il nome, la testa del programma e contiene svariate informazioni tipo: lunghezza, autostart sì/no, linea autostart, tipo di programma, lunghezza variabi-

30 NEXT N 40 RANDOMIZE USR 60000 50 DATA dati della routine

Note Prendiamo in esame la routine per caricare un programma. Il secondo numero (O) contiene il valore da assegnare al registro A (io lascio sempre O); il 5° e il 6° (O e 64) corrispondono alla locazione di inizio del programma (in questo caso 16384; i due numeri si ottengono trasformando 16384 in esadecimale e successivamente i numeri così ottenuti nella notazione decimale. Ricordarsi che il primo numero (O) è il byte «basso» e il secondo (64) quello «alto»); infine 1'8° e il 9° numero corrispondono alla lunghezza del programma (in questo caso 6912 byte). Come avrete certamente già capito, la routine dell'esempio serve per caricare uno SCREEN$ headerless. Per quanto riguarda il salvataggio, nella apposita routine, sono da modificare i numeri come nel precedente ordine dato che hanno lo stesso significato. Nel caso del salvataggio e caricamento di un proprio programma in Basic, la locazio'ne di inizio è (se non sono collegati i microdrive) 23552, e la lunghezza può essere calcolata con il procedimento descritto per il metodo Code Byte. Vantaggi Permette di creare programmi con un tocco di professionalità, dato che tale sistema viene adottato dalle nu127

047 MCmicrocomputer  

Dicembre 1985

047 MCmicrocomputer  

Dicembre 1985

Advertisement