[zxspectrum] Re: Idee che frullano... :-)

  • From: Paolo Ferraris <pieffe8@xxxxxxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Thu, 23 Mar 2006 11:32:19 -0600

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.

Per avere piu` blocchi in un file .TAP (necessario se vuoi caricare
qualcosa, visto che un file BASIC consiste di un blocco header e di un blocco dati) basta appendere piu` strutture come elencate sopra.


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.

Other related posts: