[zxspectrum] Re: Domande molto tecniche sulle periferiche disco

  • From: Stefano Donati <sd75@xxxxxxxxxx>
  • To: <zxspectrum@xxxxxxxxxxxxx>
  • Date: Thu, 30 Jan 2014 01:49:51 +0100

Ho fatto un po' di test su DISCiPLE con GDos 3b.

L'uscita definitiva dall'interprete "shadow" avviene con un salto all'indirizzo 
0x004F, dove troviamo PUSH HL, OUT (0xBB),A e, in combutta con la ROM 48K, una 
bella RET.

Gli indirizzi che ho visto utilizzare per il rientro al BASIC sono 0x1B76, 
0x1BF4 (rispettivamente post esecuzione e post verifica sintassi corretta), 
0x1349 (post  visualizzazione di un messaggio di errore GDos) e 0x0058 (nel 
caso in cui la verifica sintassi fallisse anche per il GDos con il classico 
'?').

Credo di poter dire con un discreto margine di sicurezza che tutte le versioni 
di GDos utilizzano questi indirizzi, probabilmente anche il G+Dos... ma mi 
riservo il diritto di verificare ulteriormente :)

Stefano D.

--- Messaggio originale ---

Da: "Stefano Bodrato" <stefano_bodrato@xxxxxxxxxxx>
Inviata: 29 gennaio 2014 10:58
A: zxspectrum@xxxxxxxxxxxxx
Oggetto: [zxspectrum] Domande molto tecniche sulle periferiche disco

> (EMG) - Non so se ho capito bene il tuo discorso ma io ho usato spesso nei 
> miei
> programmi linee Basic con trap degli errori e mi pare di ricordare che non
> ci fossero grossi problemi (G+DOS). Ma forse ricordo male oppure ho capito
> male. L'ideale sarebbe un esempio da provare sulla Plus D.



Ok, ho visto che nella documentazione di Unidos esiste un'estensione BASIC per 
gestire l'ON-ERROR-GOTO,

basa sulla statement LINE <numero>.   Non ho trovato l'equivalente nei GDOS, ho 
provato con G+DOS 2a e GDOS 3b.

Il problema della richiesta di conferma in caso di overwrite con SAVE è risolta 
(grazie per avermi suggerito di controllare, Stefano!).

La sintassi esatta è SAVE OVER d1,"file"..  ;)

..e con questo Unidos diventa perfettamente utilizzabile.


> (Stefano D) - Non ho poi molto chiaro quale sia il problema con il ritorno al 
> BASIC, di fatto i meccanismi di DISCiPLE e IF1 sono molto simili...


Il meccanismo di trap degli errori per estendere il BASIC e attivare la shadow 
memory è sempre molto simile, il problema è il ritorno..

Il BASIC naturalmente non conosce i messaggi di errore estesi: Opus fa il trap 
della RST 8 in due modi diversi, sia per estendere i messaggi che per inserire 
le estensioni all'interprete per quelle condizioni di errore di sintassi che 
non sono più tali, quindi la shadow rom viene attivata una prima volta per 
eseguire i comandi estesi (o controllarne la sintassi) e una seconda volta per 
sostituire l'output dei messaggi se questi hanno un codice di errore 
sconosciuto al BASIC (maggiore di "R Tape loading error, 0:1"), la ZX Interface 
1 invece si attiva una volta sola.    Se occorre dare dei messaggi speciali, 
semplicemente li spara (senza il solito codice in testa) e salta 
nell'interprete BASIC senza rispettare quanto presente in ERR-SP, bloccando 
quindi l'esecuzione del programma.  In questi casi le workaround, se esistono, 
dipendono dall'architettura software delle singole interfacce.




> (Michele) - Stefano hai provato anche altre interfacce? (ad es. la divide)



Si.  Non so se è chiaro che per alcune interfacce (ad esempio la DivIDE o la 
ZXMMC) sono possibili tanti approcci differenti, fino a controllare i drive 
direttamente e montare un filesystem proprio (abbiamo driver specifici per 
Interface 1, ZXVGS, +3..).. in questo caso parliamo di driver che si basano su 
comandi BASIC.

Quali estensioni BASIC si dovrebbero utilizzare per DivIDE ?   Pensavo di 
provare con ResiDOS, che con la ZXMMC non sono riuscito a domare.



P.S. Wafadrive su RS non mi funziona, mi sembra che la shadow memory non si 
attivi..  può trattarsi delle ROM non adatte ?





Other related posts: