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 ?