Per i coraggiosi che intendono lanciarsi nell'impresa, ecco una breve introduzione alla programmazione a basso livello su C64. Una volta letto questo articolo, dovreste essere in grado di reperire da soli le informazioni e gli strumenti che vi serviranno.
Innanzi tutto, alcune definizioni: vediamo il significato delle parole "linguaggio macchina", "assembly", "assembler".
- Per "linguaggio macchina" si intende un linguaggio completamente numerico: le famose, interminabili sequenze di "0" e "1" (sequenze binarie), che sono l'unica lingua comprensibile per il computer. Quasi sempre vengono rappresentate usando il sistema di numerazione esadecimale. Programmando in questo modo è facile commettere errori.
- L'"assembly" è un linguaggio che rappresenta le istruzioni con brevi parole anziché con numeri. Queste parole sono dette "codici mnemonici", poiché sono sicuramente più facili da memorizzare rispetto ai codici numerici. La programmazione a basso livello viene fatta praticamente sempre in assembly, tranne rarissimi casi.
- La parola "assembler" si spiega da sola: si tratta di un programma che traduce il codice assembly in codice macchina.
La maggior parte di coloro che vogliono cominciare a programmare in assembly affermano di conoscere uno o più linguaggi di programmazione ad alto livello. Che cosa accomuna e che cosa differenzia questi due tipi di linguaggi? È molto semplice. Quello che in un linguaggio come il BASIC viene chiamato istruzione (ad esempio, "PRINT"), per essere eseguito, deve essere tradotto in linguaggio macchina. Per ogni istruzione ad alto livello, si ottengono molte istruzioni a basso livello, che possono includere cicli, salti a subroutine, ecc. Le istruzioni che il processore può eseguire sono estremamente semplici (ad esempio, scrivere un numero in una locazione di memoria), ma velocissime, ecco perché, se scriviamo PRINT "CIAO", otteniamo una risposta praticamente istantanea, nonostante la lunga sequenza di istruzioni macchina eseguite. In assembly, invece, ogni istruzione data dal programmatore si traduce nella corrispondente versione in linguaggio macchina. Questo ci dà il controllo totale del processore. In questa condizione, però, si rende necessario conoscere approfonditamente le caratteristiche del computer che stiamo programmando, dal momento che siamo noi stessi a dover scrivere ciascuna delle istruzioni semplici, in cui un'istruzione di un linguaggio di alto livello viene scomposta in maniera trasparente al programmatore.
Che cosa bisogna sapere per programmare in assembly su C64?
Innanzi tutto, bisogna conoscere il sistema binario e quello esadecimale. Non è necessario saper fare operazioni aritmetiche e conversioni a memoria (al limite si può usare una calcolatrice adeguata o anche la calcolatrice di windows impostata su "scientifica"), ma bisogna sapere come funzionano questi due sistemi di numerazione.
Poi, ovviamente, come funziona il processore, il 6510. Bisognerà conoscere il suo linguaggio assembly, che è lo stesso del più famoso processore 6502, con i relativi metodi di indirizzamento. I più intraprendenti vorranno capire come utilizzare la porta I/O aggiuntiva del 6510 per alterare la mappa di memoria del computer, o che cosa sono e come funzionano gli interrupt, ecc.
Secondo quello che si vorrà fare, sarà necessario studiare il funzionamento dei chip dedicati all'audio (SID), alla grafica (VIC-II), all'I/O (CIA 1 e 2). Tutti questi integrati si controllano scrivendo valori numerici nei loro registri, raggiungibili ognuno in un determinato indirizzo di memoria. Per questo motivo (ma non solo) sarà importante avere sempre a portata di mano la mappa di memoria del Commodore 64.
Sempre in base ai risultati che si vogliono raggiungere e al campo di applicazione, potrà essere necessario studiare anche altri argomenti.
In generale, un ottimo punto di partenza per lo studente è la "Guida di riferimento per il programmatore"
Quali strumenti servono?
Innanzi tutto, un assembler. Esistono assembler nativi (cioè che girano su C64) e cross-assembler (che girano su altri sistemi, come ad esempio DOS o Windows). Tra gli assembler nativi, ci sono i cosiddetti "monitor", disponibili sia come programmi caricabili da disco o cassetta, sia come utility contenute in cartucce di vario tipo; sono programmi molto spartani, più utili per debuggare o comunque alterare un programma preesistente che per crearne. Senza dubbio più comodo un assembler vero e proprio (come il famoso Turbo Assembler), che ci permette, ad esempio, di usare macro o label. Fra i cross-assembler più famosi, invece, ricordiamo DASM e C64ASM. Sono comodissimi, basta redigere il programma con un editor di testi qualunque, darlo in pasto all'assemblatore e otteniamo un programma pronto da lanciare con il nostro emulatore preferito. Usando poi il monitor eventualmente integrato nell'emulatore (quello di Vice è molto potente) potremo osservare il comportamento del programma, arrestarlo, farlo avanzare passo-passo ecc., per capire se e dove abbiamo commesso errori.
Altri programmi che potranno rivelarsi utili, secondo quello che si vuole realizzare, sono: editor musicali, editor di sprite, editor grafici di vario tipo, ecc. Anche in questo caso ci si può orientare verso programmi nativi o cross-tools.
-----------------------------------------------------------------
LINK A MANUALI E RISORSE-
ABC del Linguaggio Macchina sul Commodore 64, L'Particolarmente consigliato per chi deve partire dalle basi. Questo libro spiega con linguaggio semplice i fondamenti della programmazione di basso livello e permette al lettore di apprendere passo passo i concetti e le tecniche di base che saranno utili nel proseguimento dello studio ad un livello più avanzato.
-
Commodore 64 - I Segreti del Linguaggio MacchinaQuesto libro dedica poche pagine alle conoscenze di base, perciò è maggiormente indicato per chi si sente già a proprio agio con i concetti fondamentali e ha già una minima conoscenza del 6510 e del C64. Ha il pregio di mostrare differenti tecniche per raggiungere un medesimo risultato, stimolando il lettore a valutare quale soluzione possa essere considerata migliore, e a trovarne di nuove.
-
Guida di Riferimento per il ProgrammatoreConsigliata a chi ha già raggiunto una buona dimestichezza con l'assembly, è indispensabile ad approfondire la conoscenza del Commodore 64 per ottenere risultati di un certo rilievo.
- Programmers reference guide, la Mappa della memoria e il disassemblato del kernal-
All about your 64:-
The best C64 Ml tutorial collection-
C64 Codebase Wiki- Ctalkobt Preziosa biblioteca con molti Libri sull'Assembly 6502-----------------------------------------------------------------
I LIBRI DI READY64https://ready64.org/libri/index.phpI MANUALI DI READY64https://ready64.org/manuali/index.php (Manuale Utente, 1541, Datasette, ecc.)