Sommario
Si propone una breve bibliografia ragionata per un primo percorso orientativo destinato a chi intenda (ricominciare a) programmare su C64 in linguaggio Assembly eventualmente affiancato dal BASIC V2, con nozioni architetturali e uso avanzato delle caratteristiche di grafica e suono.
Questo medesimo articolo è disponibile anche in PDF.
«Mathematics is the art of giving the same name to different things.»
(Henri Poincare, 1854-1912)
1 Introduzione.
Con oltre 17 milioni di unità prodotte, il Commodore 64 è indiscutibilmente il PET più venduto della storia e il relativo mercato bibliografico è conseguentemente uno dei più sviluppati in assoluto, con centinaia di titoli stampati da decine di editori di ogni dimensione, firmati da autori spesso di fama internazionale nel campo dei microcomputer e relativi processori 8 bit. Qui si vuole proporre un percorso di studio che comprende i testi più essenziali, rivelatisi alla prova del tempo e nella didattica superiori agli altri per qualità dei contenuti, impostazione, accuratezza, autorevolezza.
Per la massima efficacia e qualità dei risultati, il percorso di studio individuale deve necessariamente seguire la consueta progressione: prima l’architettura, poi il linguaggio macchina in sè, poi i vari Assembler con le loro idiosincrasie sintattiche e sistemi di macro profondamente incompatibili gli uni con gli altri (inclusi i moderni ambienti di cross-development, ormai sempre più necessari), poi la programmazione dei singoli chip periferici specializzati e infine le applicazioni, studiando e ristudiando il codice applicativo che ormai si trova in giro, tra disassemblati e rilasci al pubblico dominio, in quantità esorbitanti.
L’assioma fondamentale per la programmazione low level su C64 (ma vale anche per qualsiasi altra piattaforma) è che si impara leggendo molto codice Assembly avanzato scritto da programmatori professionisti e ben preparati: lo studio della mediocrità, dice il grandissimo Harold Bloom, non può che generare altra mediocrità. A sua volta, comprendere nei dettagli tale codice richiede lo studio di svariate tipologie di testi, senza limitarsi al solo Assembly che è il punto di arrivo.
I testi proposti sono in lingua inglese per una precisa scelta didattica ma anche per l’enormemente maggiore reperibilità rispetto ai testi in lingua italiana, talora anche molto validi ma estremamente ardui a reperirsi oggigiorno.
2 Breve bibliografia ragionata.
I primissimi due testi che occorre studiare from cover to cover sono, fin troppo ovviamente, i manuali originali Commodore: la Guida per l’Utente del Commodore 64 e la Guida di Riferimento per il Programmatore. Nonostante i numerosi errori e refusi, talora presenti anche nel codice BASIC d’esempio e nei riferimenti, rimangono un viatico assolutamente imprescindibile per accostarsi alla macchina e iniziare a programmare in modo consapevole.
Occorrono poi, in parallelo, testi architetturali sul C64 e in particolare mappe di memoria accurate e commentate come quelle sponsorizzate dalla celeberrima rivista Compute!: [12], [7], [6] magari affiancate anche da [15]. Certo non farà male anche la giustamente famosa guida alla riparazione del C64 di Art Margolis [14], magari affiancata da [2]: anche se non avete dimestichezza col saldatore, il testo di Margolis rimane uno dei riferimenti architetturali più autorevoli e presenta schemi elettrici affidabili, pressoché completi, per le principali revisioni del C64.
Tra i testi migliori per l’Assembly in quanto tale ci sono sicuramente il capolavoro di Zaks [21] (come minimo sindacale, ma in realtà non mi farei mancare nessuno dei testi di tale autore) e quello di Leventhal [13], come pure il testo di Andrews [1] e quello, unico nel suo genere, di Lawrence e England [11]. Aggiungerei inoltre volentieri [9] e [18] e, per chi ha bisogno di partire veramente da zero, il Sinclair (proprio lui!) [17] affiancato dal classico [3] e da un testo di introduzione alla logica della programmazione come il notissimo Sprankle [19].
Ad un livello più avanzato ci sono sicuramente [20], [4] e una serie di testi più language-agnostic ma specifici sul tema ludico tra cui [8], [16], [5], [10].
Dopo lo studio dei testi consigliati, affiancato dalla lettura dei numerosi sorgenti pubblicamente disponibili nelle aree applicative più disparate (dalla demoscene al gaming, dai database al controllo di hardware esterno, alle telecomunicazioni…), il lettore avrà raggiunto un soddisfacente grado di familiarità con gli strumenti dello sviluppo low level per C64 e potrà proseguire per suo conto nello studio e nella ricerca sul campo.
Riferimenti bibliografici
1 Mark Andrews, Commodore 64/128 Assembly language programming (H.W. Sams, 1985).
2 Robert C Brenner, The Commodore 64 troubleshooting & repair guide (H.W. Sams, 1985).
3 Danny Davis, Commodore 64 Machine Language for the Absolute Beginner (Imprint unknown, 1984).
4 Lothar Englisch, The Advanced Machine Language Book for the Commodore 64 (Abacus Software Inc, 1985).
5 Tony Fabbri, Animation, games, and sound for the Commodore 64 (Prentice-Hall, 1984).
6 D. Heeb, Vic and Commodore 64 Tool Kit: Basic (Compute!, 1984).
7 Dan Heeb, Compute!’s Vic-20 and Commodore 64 Tool Kit: Kernal (Compute, 1985).
8 John Heilborn, Compute’s Reference Guide to Commodore 64 Graphics (Compute, 1983).
9 Marvin L. De Jong, Assembly Language Programming With the Commodore 64 (Brady, 1984).
10 Stan Krute, Commodore 64/128 Graphics and Sound Programming (TAB Books Inc, 1986).
11 David Lawrence and Mark England, Commodore 64 Machine Code Master: A Library of Machine Code Routines (Imprint unknown, 1983).
12 Sheldon Leemon, Mapping the Commodore 64 & 64C (Compute, 1987).
13 Lance A. Leventhal, 6502 Assembly Language Programming (McGraw-Hill Osborne Media, 1986).
14 Art Margolis, Troubleshooting and Repairing Your Commodore 64 (Tab Books, 1985).
15 Paul Pavelko and Tim Kelly, Master Memory Map for the Commodore 64 (Prentice Hall, 1984).
16 Axel Plenge, The Graphics Book for the Commodore-64 (Abacus Software Inc, 1984).
17 Ian Robertson Sinclair, Introducing Commodore 64 machine code (Prentice-Hall, 1984).
18 Bruce Smith, Commodore 64 assembly language (Chapman and Hall, 1985).
19 Maureen Sprankle and Jim Hubbard, Problem Solving and Programming Concepts (9th Edition) (Pearson, 2011).
20 James Sutton, Power programming the Commodore 64: Assembly language, graphics, and sound (Prentice-Hall, 1985).
21 Rodnay Zaks, Programming the 6502 (SYBEX, 1983).