[zxspectrum] Mie routine per i microdrive

  • From: "BODRATO Stefano" <Stefano.Bodrato@xxxxxxxxxxxxxxxx>
  • To: <zxspectrum@xxxxxxxxxxxxx>
  • Date: Fri, 1 Oct 2004 11:46:21 +0200

Condivido i miei successi negli esperimenti con i Microdrive (!!!)
Mi è costata una fatica mostruosa, che mi ha rimesso un po' in allenamento  :o)

In sintesi:

- Una funzione "a monte" fa l'autodetect della ROM, inizializza una jump table 
e, dopo aver "aggiustato" la stack (pasticciata dall'IF stessa) ritorna con la 
shadow ROM attiva.

- Due differenti meccanismi di ricerca caricano un settore in base al numero di 
settore o all'abbinata nome file/numero record.  Una struttura in C permette di 
referenziarne le parti con la sintassi "myrecord->item".

- Il settore può a questo punto essere modificato e salvato (anche in un'altra 
posizione)... anche se a scrittura avvenuta per ora mi becco un'errore 
dall'Interface 1 (RamTop error, o similare), probabilmente dovuto al fatto che 
non correggo le checksum.

L'effetto risultante è che caricando lo stesso programma 2 volte posso trovarmi 
2 programmi diversi tra loro.  

Ogni settore contiene il nome del cartridge, quindi sarebbe ipotizzabile la 
gestione di "partizioni" identificate con quel campo.  Farò delle prove, perchè 
voglio vedere come risponde il comando "CAT" a un trattamento simile  :o)


Non so ancora fino a che punto posso stravolgere il settore, ma credo che i 
risultati possano servire per:

- Progetto ZXVGS: si basa su un "block driver", ma non so se gestisce i "bad 
cluster".

- Funzioni "fcntl" per Z88DK con gestione dell'accesso casuale in lettura e 
scrittura e possibilità di aprire indifferentemente file di qualsiasi tipo 
(PRINT file, arrays, "program" e "bytes").

- Tool per la gestione "avanzata" dei microdrive (ricerche esaustive, mappe, 
recovery, ecc..)

- Trucchi per sfruttare maggiormente lo spazio disponibile su un singolo settore

- Tool per il trasferimento preciso dei cartridge da macchina reale a emulatore.


P.S.  Ho perso un sacco di tempo per un errore stupido (calcolo a=10-a), 
risolto poi con "NEG A/ADD 10"  ...che vergogna !

Other related posts: