Visualizza il feed RSS

Titolo provvisorio...

C64 - Mastercode

Valuta questo inserimento
di pubblicato il 08-02-2019 alle 17:01 (180 Visite)
Parliamo nuovamente di retroprogramming, questa volta con un argomento più avanzato.
Le inerenti limitazioni del CBM BASIC V2 hanno storicamente fatto da spartiacque, selezionando una intera generazione di programmatori spinti dal desiderio e dalla necessità di sfruttare al meglio l'hardware superando gli angusti confini imposti dal primitivo BASIC della ROM. Così si è andato delineando un percorso formativo spontaneo, che possiamo schematizzare nei punti seguenti, con numerose fasi parzialmente sovrapposte:
  • Apprendimento del BASIC V2;
  • Interazione con le periferiche onboard: VIC, SID, CIA...;
  • Apprendimento linguaggio macchina 6502 e integrazione di brevi routine nel BASIC tramite statement DATA;
  • Stesura di moduli Assembly standalone oppure con header BASIC per avvio "trasparente" da prompt con LOAD e RUN;
  • Caricamente dinamico da nastro o disco di moduli Assembly entro un programma di base;
  • Scrittura di una estensione BASIC con nuovi comandi e funzioni;
  • Scrittura di firmware Assembly destinato a EPROM (cartridge, sostituzione ROM di sistema);
  • Stesura di programmi in Assembly eseguiti a ROM escluse: controllo completo dell'hardware.

Vale la pena di sottolineare che l'esperienza così acquisita nella multiforme interazione a bassissimo livello con hardware sostanzialmente documentato fino all'ultima locazione (entro la prima metà degli anni Ottanta erano stati già pubblicati disassembly commentati completi delle ROM e manuali di riparazione con schemi elettrici pressoché completi) ha formato una intera generazione di progettisti embedded che oggi troviamo saldamente al top del settore, anche a livello multinazionale.

Come si vede uno dei primissimi compiti, una volta superate le poche settimane di apprendimento del BASIC e acquisita la necessaria familiarità con l'architettura, era l'esercizio di estendere in vario modo il BASIC stesso, con qualcosa di più che banali routine incorporate in statement DATA. A tale proposito, nel 1983 viene stampato un testo che sarà una pietra miliare nella storia del C64. Scritto a quattro mani da un programmatore BASIC professionista e un ingegnere elettronico esperto in Assembly 6502, propone non solo un completo assemblatore scritto interamente in BASIC V2, ma anche (come esempio applicativo) un vero e proprio BASIC Extender residente in RAM che implementa oltre una dozzina tra nuovi comandi e funzioni.
Il testo di cui discutiamo è probabilmente noto ai più nell'edizione italiana Jackson Libri del 1985 «Il linguaggio macchina del Commodore 64». La «strana coppia» di autori è costituita da David Lawrence, programmatore BASIC professionista ed autore di numerosi testi di informatica, e Mark England, ingegnere elettronico esperto in Assembly.

L'idea di un libro dall'approccio così innovativo è venuta a Mark England: evidentemente stufo (come molti di noi) di studiare quei testi della prima ondata sull'Assembly dei PET che si limitavano a duplicare le informazioni su istruzioni, opcode e operandi già presenti nel datasheet della CPU 6510 proponendo poi, nel migliore dei casi, una fantasiosa silloge di brevi routine assembly di scarso o nullo interesse pratico.
Altro punto critico della maggior parte dei testi sull'Assembly della prima metà anni Ottanta: presupponevano che il lettore avesse facile e immediato accesso ad un ambiente assemblatore, cosa in realtà nient'affatto scontata all'epoca, visti anche i costi di licenza dei principali ambienti di sviluppo disponibili in quel periodo.

Nasce così l'idea di sviluppare un completo assemblatore scritto interamente in BASIC, che il lettore potrà digitare gradualmente come salutare esercizio, aiutato anche da un verificatore di checksum: e questa è solo la prima parte del divertimento, perché gli «esempi applicativi», invece di essere il solito inconcludente florilegio di scarne routine aritmetiche e di I/O, sono in realtà una completa applicazione che guida il lettore nei meandri dell'interprete BASIC e dell'interazione al più basso livello col Kernal, aggiungendo ben 15 nuovi comandi e funzioni al CBM BASIC V2.

Il codice Assembly allegato, predisposto per il moderno ambiente di cross-development CBM Prg Studio e comprensivo di ulteriori 11 nuovi comandi BASIC che illustrano altri aspetti dell'interazione con il codice BASIC e Kernal presenti in ROM, viene messo a disposizione con l'augurio che molti lettori studiandolo si sentano invogliati a implementare nuovi comandi per migliorare i propri skill in Assembly con un progetto inusuale e non banale. Il codice è brevemente commentato in alcuni punti salienti e quasi tutti gli indirizzi di memoria significativi (originariamente tutti hardcoded, senza distinzioni) sono referenziati tramite label descrittive, ma ci si attende comunque che il lettore studi il sorgente avendo a disposizione almeno i testi elencati in bibliografia per una comprensione puntuale.

Qui l'articolo completo, come d'abitudine disponibile in PDF (caldamente consigliato) e con sorgenti ZIP allegati.

aggiornamento da 09-02-2019 a 00:18 di M.A.W. 1968

Categorie
Libri , Programmazione , Hardware

Commenti