Rivista: Commodore Computer Club (IT) – N.ro: 14 / ottobre 1984 – Trascrizione: David La Monaca
Prosegue il nostro viaggio tra le pagine del numero 14 di Commodore Computer Club e stavolta ci occupiamo di una delle applicazioni / utility più popolari che siano mai state pubblicate da questa rivista: le “famose”/”famigerate” routine grafiche di Danilo Toma nella loro seconda e più completa versione dopo quella uscita sul numero 10 della stessa rivista.
Le Routine Grafiche II al tempo rappresentarono per molti appassionati italiani del C64 una soluzione comoda ed efficiente per porre rimedio ad una delle mancanze più sentite del BASIC V2 di casa Commodore, ovvero l’assenza di comandi specifici per attivare ed usare la grafica in alta risoluzione e multicolor del VIC-II. Nonostante la presenza sul mercato di allora di cartucce e tools dedicati ad estendere il BASIC essenziale del C64, i costi relativamente alti e il fatto che nessuno di questi riuscì nel tempo ad imporsi come standard di programmazione, lasciò spazio a strumenti homebrew resi noti tramite le riviste di settore. È questo il caso delle routine grafiche di Danilo Toma, all’epoca uno studente milanese di Economia, che scrisse in linguaggio macchina il programma per aggiungere ben 9 comandi grafici al BASIC V2 originale del C64. In questo modo l’accesso alla pagina grafica 320×200 pixel o 160×200 pixel del modo multicolor diventa semplice e anche disegnare sullo schermo punti, linee, poligoni, cerchi e archi diventa semplice ed immediato. Ed il tutto con una buona rapidità di esecuzione!
I comandi aggiuntivi sono sempre preceduti dal carattere freccia a sinistra (il tasto a sinistra del tasto 1 sulla tastiera originale del C64) e, come detto, riguardano interamente la gestione della grafica. Ad esempio, ←GRAF o ←MGRAF servono ad inizializzare il modo grafico rispettivamente ad alta (320×200, 2 colori) e bassa (160×200, 4 colori) risoluzione, ←PLOT, ←DRAW, ←ARC, ←CIRCLE disegnano punti, linee, archi e cerchi, mentre ←COLOR setta il colore con cui tracciare linee e curve. Completano il set di nuovi comandi grafici ←CLEAR (pulisce la pagina grafica ponendo tutti i bit a 0) e ←TEXT che imposta/ripristina la modalità testo dello schermo. Una particolarità non di poco conto di questa versione delle routine grafiche è la possibilità di gestire la terza dimensione. Tutti i comandi di tracciamento, infatti, prendono in considerazione punti dello spazio cartesiano individuati dalle triple (X,Y,Z); ovviamente mantenendo a 0 la variabile Z si può agevolmente lavorare sul piano a due dimensioni (X,Y).
Rimandandovi alla consultazione della rivista ed al suo lungo articolo sulle Routine Grafiche II (il PDF della rivista si trova facilmente in Rete) per tutti i dettagli su come sono state ideata e strutturata questa efficace estensione del BASIC, forniamo qui di seguito le istruzioni base per utilizzare le routine cominciando dagli esempi e dai programmi dimostrativi acclusi.
- Sul C64 originale, inserite il dischetto su cui avete precedentemente copiato tutti i file forniti in questo articolo. Allo scopo effettuate il download dell’immagine disco CCC14-routine-toma.D64. Se utilizzate un emulatore, basta assegnare al drive #8 l’immagine disco D64.
- Caricate le routine in BASIC con il comando LOAD”ROUTINE GRAFICHE”,8. Al termine del caricamento digitate RUN e premete il tasto Return per attivare i nuovi comandi.
- Al termine digitate NEW e premete invio per liberare la memoria riservata al BASIC. Le routine grafiche in Linguaggio Macchina sono a questo punto già attivate e pronte all’uso in un’area di memoria protetta.
- Caricare a scelta un demo o un’applicazione tra quelle presenti sul disco (ad es. LOAD”CUBO 3-D”,8) e, a caricamento avvenuto, digitate RUN seguito da Invio. Se tutto è andato come deve il programma dimostrativo partirà e la pagina grafica del C64 verrà animata da disegni e colori.
Download link: ccc14-routine-grafiche.d64
Nota a margine del lavoro di digitalizzazione di questo programma: nell’introduzione abbiamo usato per questa estensione grafica del BASIC C64 gli aggettivi “famosa” e “famigerata”. Si spiegano con il fatto che effettivamente le routine grafiche ebbero un buon successo (ecco perché “famose”) fra i lettori della rivista e a prezzo praticamente nullo tranne che per ottenerle funzionanti (ecco perché “famigerate”) occorreva armarsi di molta pazienza e digitare le tantissime linee DATA del programma caricatore in BASIC. E bastava sbagliare uno degli oltre duemila byte per compromettere il funzionamento delle routine. All’epoca il sottoscritto ricorda di aver impiegato un paio di pomeriggi per digitare diligentemente il programma. Solo dopo averlo salvato su nastro, il programma fu lanciato e con grande sorpresa funzionò al primo colpo! Non è andata così bene questa volta nonostante l’uso di altri strumenti per estrarre e revisionare il testo del programma dalla rivista digitale, ma alla fine ce l’abbiamo fatta, anche grazie al prezioso aiuto di AmigOS in fase di fixing.
Versione LM – Nel disco abbiamo incluso anche una versione in LM puro (solo 8 blocchi invece di 32 del programma BASIC) delle routine. Si può utilizzare questa versione al posto del caricamento del programma BASIC che dopo il RUN impiega qualche minuto per inserire in RAM tutti i byte delle linee DATA. Ecco come fare:
- Caricare il file RTLM.PRG con il comando LOAD”RTLM”,8,1
- Digitare in sequenza i comandi SYS51000 e SYS49724 per abilitare le Routine Grafiche II
- Digitare NEW e caricare/digitare un programma che faccia uso dei nuovi comandi grafici
Se caricate la directory del disco con il classico LOAD”$”,8 e poi date LIST, oltre al contenuto del dischetto, vedrete anche queste istruzioni in forma breve. Si ringrazia Marco Pistorio della redazione di RMW per la consulenza sulla creazione della versione in codice macchina.

Titolo: Routine Grafiche II
Piattaforma: Commodore 64
Genere: Tool/Estensione comandi BASIC
Linguaggio: BASIC/LM
Autore versione originale: Danilo Toma
Pubblicazione: Commodore Computer Club n. 14, ottobre 1984
Anno: 1984
Digitazione/Elaborazione: David La Monaca
Anno: 2026 (marzo)
Download: file .D64 completo di programmi demo
Note: Poligoni, Cubo 3D, Quadrato 3D, Grafico di funzioni, Demo 3D


Qui di seguito trovate il codice in linguaggio BASIC da copiare sul vostro Commodore 64 originale oppure su un emulatore. Per PC Windows 10/11 suggeriamo VICE con il supporto dell’editor e compilatore CBM Prg Studio.
Di seguito le istruzioni per caricare il listato sull’emulatore VICE:
– Copiare il listato qui sotto e incollatelo in CBM Prg Studio.
– I codici dei caratteri speciali presenti nel listato saranno trattati da CBM Prg Studio e convertiti nei corrispondenti simboli del BASIC V2.
– Selezionare Generate .prg (current file) per ottenere il file programma con estensione .prg (ad es. routinegrafiche.prg)
– Lanciare l’emulatore VICE e dal menu File > Smart attach… > routinegrafiche.prg
– Digitare RUN e premere il tasto Return per attivare le routine in RAM
-Buon divertimento!
Attenzione – Nel listato i caratteri ‘>’ e ‘<‘ potrebbero essere stati sostituiti dai rispettivi codici di encoding HTML ‘>’ e ‘<’. Nel caso siano presenti, sostituite questi valori nel listato prima di caricarlo nell’emulatore.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243 100 rem ****************************
110 rem ** le nuove **
120 rem ** routine grafiche **
130 rem ** per il commodore 64 **
140 rem ** di danilo toma **
150 rem ** via pordenone 13 **
160 rem ** m i l a n o **
170 rem ** tel. 02/2159024 **
180 rem ** **
190 rem ****************************
192 rem
195 rem type-in/testing by cercamonx
196 rem data fixing by amigos
197 rem March, 10 - 2026
198 rem
200 print"{clear}"spc(252)"{reverse on}lettura dei dati"
210 c=0:f1=9999:c(0)=14178:c(1)=36550
215 c(2)=34992:c(3)=17316:c(4)=13599
220 c(5)=27382:c(6)=4472:c(7)=29651
225 c(8)=29161:c(9)=34935:c(10)=18956
230 fori=49152to49873:gosub320
240 next:gosub350
250 fori=49900to50189:gosub320
260 next:gosub350
270 fori=50215to51163:gosub320
280 next:gosub350
290 sys51000:rem **** abilita nuovi comandi ****
300 sys49724:rem *** modif. routine che gestisce gli errori ***
310 print"{down*2}{right*12}comandi attivati":end
320 reada:c=c+a:pokei,a
330 ifi/250=int(i/250)then350
340 return
350 f2=peek(63)+peek(64)*256
360 ifc<>c(n)thenprint"errore nei data gruppo di linee{down}"f1;f2:end
370 f1=f2:c=0:n=n+1:return
380 rem
390 rem 49152 ****
400 rem
410 data 73,255,149,250,181,249,73,255,149,249,246,249,208
420 data 2,246,250,160,202,162,255,96
430 rem
440 rem 49173 ****
450 rem
460 data 162,3,189,214,2,149,93,202,16,248,173,208,2
470 data 133,87,173,209,2,133,88,173,210,2,133,91,133
480 data 78,173,211,2,133,92,133,79,96,234,234
490 data 192,48,12,3,0,85,170,255,234,234,234,234,234,234
500 rem
510 rem 49224 ****
520 rem
530 data 160,232,162,0,56,165,93,229,87,133,249,165
540 data 94,229,88,133,250,16,3,32,0,192,140,55,193,142,59
550 data 193,160,198,138,208,2,160,230,140,62,193
560 data 160,232,162,0,56,165,95,229,91,133,253,165,96
570 data 229,92,133,254,16,5,162,4,32,0,192,140,106
580 data 193,142,110,193,134,89,134,90,160,198,138,208,2
590 data 160,230,140,113,193,160,56,169,229,224,0,208,4
600 data 160,24,169,101,140,72,193,141,75,193,141,81,193
610 data 141,87,193,141,93,193,169,234,141,115,193,165,249
620 data 208,2,165,250,208,27,169,96,141,115,193,24,144
630 data 3,32,104,193,32,141,193,165,78,197,95,208,244
640 data 165,79,197,96,208,248,96,230,249,208,2,230,250
650 data 230,253,208,2,230,254,169,0,133,251,133,252,133
660 data 247,133,248,162,33,165,247,56,229,249,168,165,248
670 data 229,250,144,5,133,248,152,133,247,38,251,38,252
680 data 38,253,38,254,38,247,38,248,202,208,224,165,247
690 data 208,4,165,248,240,7,162,0,232,246,250,240,251
700 data 160,1,165,253,208,6,165,254,208,2,160,0,132
710 data 80,24,144,11,166,87,202,134,87,224,255,208,2
720 data 198,88,165,91,133,78,165,92,133,79,24,165,89
730 data 101,251,133,89,165,90,101,252,133,90,165,91,101
740 data 253,133,91,165,92
750 data 101,254,133,92,32,141,193,165
760 data 80,240,24,166,78,232,134,78,224,0,208,2,230
770 data 79,234,165,78,197,91,208,231,165,79,197,92,208
780 data 248,165,87,197,93,208,175,165,88,197,94,208,248
790 data 96,165,88,240,12,201,1,240,1,96,165,87,201
800 data 64,144,1,96,165,79,240,1,96,165,78,201,200
810 data 144,1,96,165,78,41,7,133,247,165,78,74,74
820 data 41,254,168,185,235,193,56,229,247,133,247,185,236
830 data 193,24,101,88,133,248,165,87,41,248,168,165,87
840 data 41,7,76,36,194,193,166,2,240,5,17,247,145
850 data 247,96,73,255,49,247,145,247,96,128,64,32,16
860 data 8,4,2,1,7,254,199,252,135,251,71,250,7
870 data 249,199,247,135,246,71,245,7,244,199,242,135,241
880 data 71,240,7,239,199,237,135,236,71,235,7,234,199
890 data 232,135,231,71,230,7,229,199,227,135,226,71,225,7,224
900 rem
910 rem 49693 ****
920 rem
930 data 234,234,234,234,234,234,234,74,170,189,58,192,73
940 data 255,49,247,145,247,189,58,192,166,2,61,62,192
950 data 17,247,145,247,96,169,71
960 data 141,0,3,169,194,141,1,3,96
970 data 134,254,169,32,45,17,208,240,9,169,14
980 data 133,251,169,6,32,207
990 data 198,166,254,48,3,76,58
1000 data 164,76,116,164
1010 rem
1020 rem 49763 ****
1030 rem
1040 data 169,224,133,250,169,0,133,249,162,32,168,145,249
1050 data 200,208,251,230,250,202,208,246,96,169,204,133,250
1060 data 160,0,132,249,165,251,10,10,10,10,133,253,165
1070 data 252,41,15,24,101,253,162,4,145,249,200,208,251
1080 data 230,250,202,208,246,96,165,248,240,22,169,32,13
1090 data 17,208,141,17,208,169,56,141,24,208,169,252,45
1100 data 0,221,141,0,221,96,169,223,45,17,208,141,17
1110 data 208,169,21,141,24,208,169,3,13,0,221,141,0
1120 data 221,165,251,141,134,2,96
1130 rem
1140 rem 49873 ****
1150 rem
1160 rem
1170 rem 49900 ****
1180 rem
1190 data 169,0,133,97,133,99,240,82,169,2,133,97,133
1200 data 99,169,0,133,98,240,12,169,1,133,97,169,0
1210 data 133,99,169,6,133,98,165,93,133,254,165,94,133
1220 data 255,164,98,185,212,2,133,247,185,213,2,133,248
1230 data 169,0,133,81,32,131,195,165,253,133,93,165,254
1240 data 133,94,165,95,133,254,165,96,133,255,169,1,133
1250 data 81,32,141,195,165,253,133,95,165,254,133,96,165
1260 data 87,133,254,165,88,133,255,173,212,2
1270 data 133,247,173
1280 data 213,2,133,248,169,0,133,81,32,131,195,165,253
1290 data 133,87,165,254,133,88,165,91,133,254,165,92,133
1300 data 255,169,1,133,81,32,141,195,165,253,133,91,133
1310 data 78,165,254,133,92,133,79,96,169,0,133,249,230
1320 data 248,208,2,230,249,165,255,133,80,16,5,162,5
1330 data 32,0,192,169,0,133,253,169,25,133,82,169,0
1340 data 133,252,133,251,133,250,56,165,250,229,247,168,165
1350 data 251,229,248,170,165,252,229,249,144,6,133,252,134
1360 data 251,132,250,38,253,38,254,38,255,38,250,38,251
1370 data 38,252,198,82,208,217,165,80,16,7,162,4,165
1380 data 254,32,0,192,198,99,16,29,165,81,208,4,169
1390 data 160,208,2,169,100,24,101,253,133,253,165,254,105
1400 data 0,133,254,80,6,198,254,169,255,133,253,96
1410 rem
1420 rem 50172 ****
1430 rem
1440 data 13,198,32,198,57,198,66,198,99,194,170,198,202
1450 data 198,234,198,42,199
1460 rem
1470 rem 50189 ****
1480 rem
1490 rem
1500 rem 50215 ****
1510 rem
1520 data 162,4,189,223,2,157,168,2,202,16,247,169,228
1530 data 133,25,169,2,133,26,76,184,196,160,2,169,168
1540 data 32,162,187,32,107,226,160,2,169,183
1550 data 32,40,186
1560 data 32,170,177,170,152,24,109,190,2,141,203,2,138
1570 data 109,191,2,141,204,2,160,2,169,168,32,162,187
1580 data 32,100,226,160,2,169,178,32,40,186,32,170,177
1590 data 170,152,24,109,188,2,141,201,2,138,109,189,2
1600 data 141,202,2,96,169,0,141,168,2,141,169,2,141
1610 data 170,2,141,171,2,141,172,2,169,226,133,26,169
1620 data 229,133,25,169,126,141,173,2,169,32,141,174,2
1630 data 169,217,141,175,2,169,123,141,176,2,169,197,141
1640 data 177,2,32,21,192,32,244,194,164,93,165,94,32
1650 data 145,179,162,178,160,2,32,212,187,165,87,141,188
1660 data 2,165,88,141,189,2,164,95,165,96,32,145,179
1670 data 162,183,160,2,32,212,187,165,91,141,190,2,165
1680 data 92,141,191,2,169,0,133,181,32,61,196,173,201
1690 data 2,141,195,2,173,202,2,141,196,2,173,203,2
1700 data 141,199,2,173,204,2,141,200,2,160,2,169,168
1710 data 32,162,187,160,2,169,173,32,103,184,160,2,162
1720 data 168,32,212,187,165,25,164,26,32,91,188,201,255
1730 data 240,14,169,1,133,181,160,4,177,25,153,168,2
1740 data 136,16,248,32,61,196,162,9,189,195,2,149,87
1750 data 202,16,248,165,91,133,78,165,92,133,79,32,94
1760 data 197,32,72,192,32,109,197,165,181,240,152,96,169
1770 data 254,45,14,220,141,14,220,169,253,37,1,133,1
1780 data 96,169,2,5,1,133,1,169,1,13,14,220,141
1790 data 14,220,96
1800 rem
1810 rem 50556 ****
1820 rem
1830 data 162,36,138,160,0,209,122,240,6,32,138,173,162
1840 data 0,96,32,115,0,96,32,124,197,224,36,240,9
1850 data 32,170,177,140,208,2,141,209,2,32,253,174,32
1860 data 124,197,224,36,240,9,32,170,177,140,210,2,141
1870 data 211,2,32,253,174,32,124,197,224,36,240,15,32
1880 data 170,177,170,16,3,76,72,178,140,212,2,141,213
1890 data 2,96,32,253,174,32,124,197,224,36,240,9,32
1900 data 170,177,140,214,2,141,215,2,32,253,174,32,124
1910 data 197,224,36,240,9,32,170,177,140,216,2,141,217
1920 data 2,96,32,253,174,32,124,197,224,36,240,15,32
1930 data 170,177,170,16,3,76,72,178,140,218,2,141,219
1940 data 2,96,32,143,197,32,31,192,32,236,194,32,94
1950 data 197,32,141,193,32,109,197,96,32,143,197,32,204
1960 data 197,32,243,197,32,21,192,32,0,195,32,94,197
1970 data 32,72,192,32,109,197,96,32,143,197,32,126,198
1980 data 76,134,196,32,143,197,32,126,198,32,253,174,32
1990 data 124,197,224,36,240,7,162,223,160,2,32,212,187
2000 data 32,253,174,32,124,197,224,36,240,7,162,228,160
2010 data 2,32,212,187,32,253,174,32,124,197,224,36,240
2020 data 7,162,173,160,2,32,212,187,76,39,196,32,204
2030 data 197,173,215,2,16,3,76,72,178,173,217,2
2040 data 48,248,96,234,234
2050 rem
2060 rem 50833 ****
2070 rem
2080 data 32,158,183,224,16,48,3,76,72,178,134,252,32
2090 data 253,174,32,158,183,224,16,16,241,134,251,96,32
2100 data 145,198,32,121,194,169,239,45,22,208,141,22,208
2110 data 169,170,141,207,193,169,189,141,208,193,169,227,141
2120 data 209,193,76,161,194,32,145,198,165,252,141,33,208
2130 data 169,216,133,250,160,0,132,249,165,251,32,144,194
2140 data 169,239,45,22,208,141,22,208,76,183,194,32,145
2150 data 198,165,252,141,33,208,165,251,133,253,32,253,174
2160 data 32,145,198,169,216,133,250,160,0,132,249,165,251
2170 data 32,144,194,165,253,133,251,32,121,194,169,16,13
2180 data 22,208,141,22,208,169,76,141,207,193,169,36,141
2190 data 208,193,169,194,141,209,193,76,161,194,32,158,183
2200 data 224,4,48,3,76,72,178,134,2,96,234
2210 rem
2220 rem 51000 ****
2230 rem
2240 data 169
2250 data 67,141,8,3,169,199,141,9,3,96,32,115
2260 data 0,201,95,240,6,32,121,0,76,231,167,169,0
2270 data 133,249,165,122,133,252,165,123,133,253,160,0,240
2280 data 20,165,252,133,122,165,253,133,123,230,249,169,9
2290 data 197,249,240,218,200,202,208,252,185,172,199,170,32
2300 data 115,0,133,254,200,185,172,199,197,254,208,219,202
2310 data 208,240,6,249,166,249,189,252,195,141,63,3,232
2320 data 189,252,195,141,64,3,169,32,141,62,3,169,96
2330 data 141,65,3,32,115,0,32,62,3,76,174,167
2340 rem
2350 rem 51116 ****
2360 rem
2370 data 4,80,76,79,84,4,68,82,65,87,6,67,73
2380 data 82,67,76,69,3,65,82,67,5,67,76,69,65
2390 data 82,4,71,82,65,70,4,84,69,88,84,5,77
2400 data 71,82,65,70,4,67,79,76,176
2410 rem
2420 rem 51163 fine ****
2430 rem data 82,79,66,66,32,68,69,76,32,71,82,85,80,80,79
2440 rem data 32,84,71,32,82,69,65,68,89,54,52,32,66,69,86
2450 rem data 69,32,84,82,79,80,80,73,32,67,65,70,70,69,39
