

Ommamma!!!
Nei primi anni ottanta, se non ero matto da legare poco ci mancava. Mi riferisco all'ADPbasic, una delle mie 'imprese' a quei tempi.
Tutto nasce dalla stesura dell'ultimo articolo pubblicato un paio di giorni fa in queste pagine, dedicato a MC n. 37 del gennaio 1985. Sfogliandolo, ho notato che c'era la terza puntata dell'ADPbasic… e da lì l'andarmi a rileggermi alcune righe è stato quasi immediato.
Ma è durato poco, mi sono fermato quasi subito con un sonoro: questo (ovvero io!) è MATTO?!? 😁
La verità è che quelli erano proprio altri tempi: vivere appieno l'esperienza informatica dei primi anni prevedeva spesso & volentieri scriversi i programmi autonomamente, tant'è che all'accensione del Commodore 64 e di quasi tutti gli home e i personal computer succedeva poco o nulla.
Il computer era pronto ("READY.") a fare qualcosa, attendeva un comando. Che poteva essere sì il caricare un programma già fatto - spesso da cassetta audio, ricordate l'esperienza mistica?!? - ma per i più intraprendenti, e non eravamo pochi, si trattava di programmare quello di cui avevamo bisogno. Il minimo sindacale era in Basic, poi c'erano i coraggiosi che osavano mettere il naso anche nel linguaggio macchina, che apriva nuovi e più interessanti scenari.
Non solo per la velocità di esecuzione del codice, quanto per il fatto che da dentro diventava più semplice - entro certi limiti - prendere il controllo di tutto o quasi. Di sicuro di tutto quello che era previsto dal costruttore, in qualche caso spingendosi anche oltre.
Vabbè, per farla breve non ho resistito alla tentazione di caricare i 5 articoli dell'ADPbasic su NotebookLM (by Google) e fargli qualche domanda. Anche perché ricordavo davvero poco o nulla di quella esperienza. Parliamo di più di quarant'anni fa, dettaglio non trascurabile.
Gli ho subito chiesto...
... in base alle fonti, puoi spiegarmi nel modo più semplice possibile come l'autore fosse riuscito ad aggiungere nuovi comandi al basic standard, perfettamente integrati con quelli già presenti nel Commodore 64 originario?
Per aggiungere nuovi comandi al Commodore 64 e integrarli perfettamente con il Basic originale, l'autore ha dovuto aggirare i limiti fisici del computer e utilizzare un brillante stratagemma per "ingannare" l'interprete di sistema. Ecco i passaggi fondamentali spiegati in modo semplice:
Lo spostamento delle routine in RAM per aggirare la Rom. Il funzionamento del Basic si basa su tre routine principali del sistema operativo, che si occupano di leggere ed eseguire le istruzioni. Normalmente, queste routine si affidano a delle tabelle scritte nella memoria ROM (Read Only Memory), una memoria di sola lettura che non può essere in alcun modo modificata per aggiungere nuovi comandi.
Tuttavia, la Commodore aveva lasciato gli indirizzi di partenza di queste routine (i "puntatori") nella memoria RAM, che è invece liberamente modificabile. L'autore ha quindi copiato l'intero blocco di queste routine dalla ROM a uno spazio di memoria RAM libero (all'indirizzo $C000) e le ha modificate affinché puntassero a delle nuove tabelle estese create da lui. Infine, ha semplicemente modificato i puntatori originali del sistema in modo che il Commodore 64 andasse a leggere le sue nuove routine al posto di quelle di fabbrica. Ai nuovi comandi sono stati assegnati dei codici numerici liberi compresi tra 204 e 254
La perfetta integrazione: il trucco del comando DATA. Il problema più grande era l'integrazione, ovvero fare in modo che i nuovi comandi potessero coesistere sulla stessa riga di codice con i comandi originali, separati dai classici due punti. Per farlo senza mandare in crash l'interprete, l'autore ha sfruttato un'istruzione già esistente nel Basic standard: il comando DATA, che di fatto è un'istruzione "nulla". Quando il computer la incontra durante l'esecuzione di una riga, non fa nulla e passa semplicemente all'istruzione successiva.
A differenza del comando REM (che fa ignorare al computer tutto il resto della riga comportandosi come un commento), DATA permette di far continuare la lettura dei comandi seguenti.
Quando il Commodore 64 incontra un nuovo comando dell'ADP Basic, cede il controllo a un frammento di programma in linguaggio macchina che svolge la funzione richiesta. Al termine dell'operazione, per far riprendere al computer la lettura del resto della riga (che potrebbe contenere comandi Basic standard), il programma compie un salto forzato all'istruzione DATA.
Così facendo, il sistema viene ingannato: crede di aver appena letto un banale comando DATA e passa in automatico all'istruzione successiva dopo i due punti, garantendo una fusione perfetta e invisibile tra il vecchio Basic e le nuove espansioni.
(Wow!!!)
Da lì a chiedergli anche una Overview video, per meglio capire, è stato un passo breve, brevissimo.
Buona visione!



