[zxspectrum] Potenziato su Z88DK il controllo dei Microdrive

  • From: Stefano Bodrato <stefano_bodrato@xxxxxxxxxxx>
  • To: "zxspectrum@xxxxxxxxxxxxx" <zxspectrum@xxxxxxxxxxxxx>
  • Date: Tue, 10 Jul 2007 10:37:49 +0200

Ciao,
ho recentemente trovato su WOS il libro di A. Pennel sui microdrive !!
 
Questo mi ha dato il coraggio di riprendere le librerie di supporto nativo per 
il microdrive: avendo raramente tempo di collaudare il codice sullo Spectrum 
reale correvo infatti il grosso rischio di scrivere codice non supportato dagli 
emulatori o, peggio che funzionasse *solo* sugli emulatori... la cosa mi è già 
successa un paio di volte, in particolare con del codice per la calcolatrice 
TI82 e per lo ZX81 e non è affatto piacevole.
 
Pennel propone un trucco che avevo già tentato di realizzare: riscrivendo la 
routine "MOTOR" del microdrive è possibile gestire le condizioni d'errore senza 
che il programma si blocchi con il famigerato "microdrive not present".
Questo errore infatti non è facilmente trappabile con il solito trucco di 
modificare ERR_SP, perchè la shadow rom forza un ritorno al BASIC in modo non 
convenzionale e sporca alcuni flag.
 
Confrontando il disassemblato delle ROM v1 e v2 (in entrambe la routine MOTOR 
non è commentata) e il codice di Pennel sono riuscito a capire a grandi linee 
come vengono "accesi" i microdrive: a partire da una condizione di partenza, 
viene ripetutamente dato un segnale "ON" seguito da "OFF" finchè non viene 
raggiunto il numero del drive che si vuole realmente accendere (da lì il 
leggero lampeggio che si vede sul drive #1 quando accendi il #2).
A motore acceso poi un loop tenta di leggere qualcosa dal nastro (e nel 
frattempo, nella ROM originale si controlla la pressione di BREAK).
Se non trova nulla dopo un po' di tempo (credo poco più di 200ms), allora il 
drive risulta assente.
 
Ho scritto una piccola demo; se ritrovo le pwd del mio "sito da battaglia" la 
metterò online.   Tengo a precisare, (non mi stancherò mai di ripeterlo) che 
senza un emulatore così potente e accurato (ovviamente RealSpectrum) questa 
routine non esisterebbe... e in egual misura va la mia ammirazione per Pennel 
che con mezzi molto più rudimentali aveva ottenuto questi risultati.
 
Ho una domanda:  qualcuno di voi può suggerirmi un trucco per scoprire in 
software se l'Interface 1 è collegata ?
Ovviamente so controllare la presenza delle variabili di sistema estese, ma non 
basta.
Sto pensando di scatenare una qualche RST 8 e di trappare l'eventuale errore, 
ma forse c'è un metodo più semplice.     ... idee ?
_________________________________________________________________
Crea il tuo gadget e vinci 10 Windows Vista e 30€ di musica!
http://concorsogadget.it.msn.com/

Other related posts: