Enrico Maria Giordano wrote:
-----Messaggio Originale----- Da: "Marcello Zaniboni" <marcello.zaniboni@xxxxxxxxx>
A: <zxspectrum@xxxxxxxxxxxxx>
Data invio: giovedì 23 marzo 2006 16.08
Oggetto: [zxspectrum] Idee che frullano... :-)
Che cosa si intende per "flag
E' il valore (un byte) che viene messo nell'accumulatore prima di chiamare la routine di SAVE (e quindi lo si deve specificare quando si fa il LOAD). Mi sembra che il valore standard della ROM sia 255 ma non fare molto affidamento su questo vago ricordo.
and checksum bytes"?
Dovrebbe essere qualcosa tipo la somma modulo 256 di tutti i bytes del file. Ma ricordo, sempre vagamente, che c'era qualche particolarità in questo calcolo.
La struttura di memorizzazione di un blocco in un file .TAP e` la seguente:
length+flag+blocco+checksum,
dove
1) length (2 bytes, most significant last) e` lunghezza blocco+2 2) flag (un byte) e` 0 se il blocco e` un header, 255 se e` dati 3) checksum (un byte) e` lo xor del flag e di tutti i bytes nel blocco.
Un blocco header e` di 17 bytes:
1: 0=basic, 1=code, 2,3=DATA (non mi ricordo quale e` il numerico) 2-11: file name (se il nome e` piu` corto di 10 il resto sono spazi se mi ricordo bene) 12-13: lunghezza del blocco (esclusi flag e checksum) 14-15: se BASIC, linea di autostart; se CODE, indirizzo di partenza 16-17: se BASIC, lunghezza del listato escluse variabili, altrimenti 0
Anche qui` il byte piu` significativo su numeri a 16 bit e` il secondo.