[zxspectrum] Re: [zxspectrum] Re: R: Re: New Divmmc

  • From: Stefano Donati <sd75@xxxxxxxxxx>
  • To: "zxspectrum@xxxxxxxxxxxxx" <zxspectrum@xxxxxxxxxxxxx>
  • Date: Sun, 16 Mar 2014 15:01:07 +0000

La vera differenza è tra DISCiPLE e +D, poiché in quest'ultima il meccanismo di 
scambio banchi è assente. Immagino che nella mente di chi ha progettato la 
DISCiPLE lo swap avesse un senso e chi ha scritto il GDOS lo ha utilizzato; per 
l'utente finale non ha senso scappare, anzi è meglio lasciar fare al DOS le sue 
cose senza interferire😊


A mio parere Uni-DOS è scritto meglio di GDOS, introduce nuove funzionalità, è 
modulare e si possono creare comandi personalizzati; tuttavia la quasi totalità 
delle conversioni su disco usano chiamate standard GDOS e quindi non funzionano 
con Uni-DOS.


La mia routine non sa nulla del sistema che stai usando, semplicemente attiva 
la DISCiPLE (infatti lo stesso codice non funziona sulla +D), copia 
all'indirizzo 32768 i primi 16K della memoria e poi disattiva l'interfaccia per 
tornare al BASIC; poi come sia organizzata la memoria in quel momento (se prima 
ROM o RAM) dipende dallo stato del sistema… 


Stefano.






Inviata da Windows Mail





Da: Massimo Raffaele
Data invio: ‎domenica‎ ‎16‎ ‎marzo‎ ‎2014 ‎15‎:‎44
A: zxspectrum@xxxxxxxxxxxxx











Urka, mi dispiace, non volevo farti fare confusione...




Per carità, mea culpa che non ho sufficienti cognizioni!



 



L'essenziale per salvare SU DISCO:

1. il BIOS del GDOS (la ROM): SAVE d1"BIOS" CODE 8192,8192
2. il GDOS (la RAM): SAVE d1"BIOS" CODE 0,6656
3. il BIOS dell'Uni-DOS (la ROM): SAVE d1"BIOS" CODE 0,8192
4. l'Uni-DOS (la RAM): SAVE d1"BIOS" CODE 8192,6656





Non ho mai usato l'Uni-DOS (a proposito, dovrei? E' migliore anche delle ultime 
versioni del GDOS?).



Quindi una delle (immagino varie) differenze tra Uni-DOS e GDOS è il fatto che 
ROM e RAM sono swappate?


Se sì, perché swapparle (o non swapparle)?



 




Salvare SU NASTRO, invece, è leggermente più complicato in quanto hai bisogno 
di una piccola routine in assembly che si occupa di copiare nella RAM dello 
Spectrum il contenuto della memoria della DISCiPLE. Una bozza "al volo" può 
essere questa:

10 CLEAR 29999: FOR f=30000 TO 32017: READ a: POKE f, a: NEXT f
20 DATA 243,219,187,33,0,0,17,0,128,1,0,64,237,176,211,187,251,201
30 RANDOMIZE USR 30000

Una volta eseguite queste 3 linee di BASIC avrai a disposizione il contenuto 
dell'intera memoria della DISCiPLE all'indirizzo 32768; per sapere dove stanno 
ROM e RAM usa il seguente schema:

- se GDOS NON ERA caricato prima di eseguire il BASIC, la ROM è a 32768 e la 
RAM (verosimilmente vuota o contenente spazzatura) è a 40960
- se GDOS ERA caricato prima di eseguire il BASIC, la RAM è a 32768 e la ROM è 
a 40960
- se GDOS ERA caricato ma hai eseguito un doppio reset dello Spectrum senza 
eseguire comandi GDOS prima di eseguire il BASIC, la ROM è a 32768 e la RAM è a 
40960
- se usi Uni-DOS, la ROM è sempre a 32768 e la RAM sempre a 40960 (almeno da 
BASIC).

Se hai bisogno di altri dettagli o se qualcosa non è chiaro fammi un fischio :)





Grazie, infatti ti chiedo quanto sotto:  :-)


Quindi (non conosco il L/M, purtroppo) la tua routine copia sempre prima la ROM 
(da 32768 a 40959) e poi la RAM subito dopo, contigua (da 40960 a 47615)? Anche 
nel caso dell'Uni-DOS? (come fa a capire che viene eseguita su un sistema con 
Uni-DOS?)



Altro dubbio: se la ROM viene copiata a partire da 32768, non dovrebbe 
terminare a 40960? (32768+8192)





Grazie! :-)


Max

Other related posts:

  • » [zxspectrum] Re: [zxspectrum] Re: R: Re: New Divmmc - Stefano Donati