Solidi in alta risoluzione – C64 – BASIC + RGT

Rivista: Commodore Computer Club (IT) – N.ro: 14 / ottobre 1984 – Trascrizione: David La Monaca

Il Commodore 64 è uno dei computer più venduti di sempre ed il suo successo è stato certamente dovuto anche alle sue caratteristiche tecniche hardware (la presenza dei due chip VIC-II e SID su tutte). Nonostante queste capacità grafiche e sonore, che nei primi anni Ottanta potevano tranquillamente essere definite “avanzate”, il BASIC con il quale era fornito di default era del tutto privo di istruzioni per sfruttarle direttamente. Ciò ebbe di fatto un effetto “positivo” perché costrinse molti aspiranti programmatori, grafici e musicisti digitali a studiare a fondo l’hardware ed i registri del C64, nonché il linguaggio assembly (soprattutto per sviluppare giochi). Per i programmatori BASIC c’erano a disposizione solo due strade: farcire di comandi POKE e PEEK i propri listati alfine di manipolare i registri del chip grafico e di quello sonoro oppure estendere il BASIC con routine e istruzioni speciali. Alcune estensioni furono commercializzate sul mercato (ad es. Simons’ Basic), altre furono pubblicate sulle riviste di settore.

Il listato che pubblichiamo qui di seguito sfrutta le routine grafiche I di Danilo Toma, pubblicate sul numero 10 (aprile 1984) della fortunata rivista Commodore Computer Club. Una seconda versione, più strutturata e potenziata, apparve successivamente nel numero 14 della stessa rivista, lo stesso del listato Solidi in alta risoluzione. Come accadde anche per altre riviste dedicate ai computer di casa Commodore le estensioni del BASIC divennero poi uno standard per i listati pubblicati in seguito dallo stesso magazine. I lettori potevano così avvantaggiarsene senza dover acquistare un software aggiuntivo.

Solidi in alta risoluzione offre la possibilità di disegnare figure geometriche solide nel modo grafico bitmap a 320×200 pixel e per funzionare ha bisogno che vengano precedentemente caricate le Routine Grafiche I di Toma (nel seguito RGT). L’effetto tridimensionale delle figure geometriche si ottiene mediante l’ombreggiatura, che il programma calcola per ogni singola linea o punto del solido che traccia sullo schermo. Interviene qui un problema tecnico, dal momento che la grafica hires del C64 non consente l’uso di più di due colori (uno per lo sfondo ed uno per il disegno). Ma ne servono tre per tracciare i solidi in modo visibile ed efficace: il colore di sfondo, il colore di disegno e il colore dell’ombreggiatura. Per ovviare a questo problema il programma usa i due colori base (bianco e nero) per creare un pattern che viene ripetuto per tutto lo schermo dando così l’impressione di usare un terzo colore per lo sfondo. La soluzione adottata effettivamente funziona egregiamente: sul pattern di pixel bianchi e neri dello sfondo, i due colori base tracciano le linee delle diverse figure geometriche previste dal programma con un effetto finale che risulta molto gradevole.

Istruzioni:

  1. Su C64 originale o su un emulatore, inserite il dischetto su cui avete precedentemente copiato le RTG ccc10-routine-grafiche.d64. Se utilizzate un emulatore, basta assegnare al drive #8 l’immagine disco D64.
  2. 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 le routine e visualizzare la demo inclusa.
  3. 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.
  4. Caricare poi il programma con LOAD”SOLIDI”,8 e, a caricamento avvenuto, digitate RUN seguito da Return. A questo punto basta seguire il menù principale nel quale potete scegliere la figura base del solido, il numero di lati, e gli angoli di rotazione e torsione.
  5. Al termine della scelta il programma passerà al modo bitmap in alta risoluzione e, dopo aver riempito lo sfondo con un pattern apposito, traccerà il solido al centro dello schermo in accordo con i parametri forniti in precedenza.
  6. Al termine del disegno basta premere un tasto qualsiasi (tranne RUN/STOP) per tornare al menù principale.

    Al termine del listato potete trovare alcuni dati da digitare in risposta a quelli richiesti dal programma. Vi invitiamo a farne uso per prendere familiarità con i parametri richiesti, in particolare l’angolo di rotazione e quello di torsione. Su emulatore è consigliata la modalità Warp (Alt+W) per abbreviare i tempi di tracciamento del solido.

    Download link: ccc14-solidi.prg

Titolo: Solidi in alta risoluzione
Piattaforma: Commodore 64
Genere: Grafica
Linguaggio: BASIC/RGT
Autore versione originale: Luca Galluzzi
Pubblicazione: Commodore Computer Club n. 14, ottobre 1984

Digitazione/Elaborazione: David La Monaca
Anno: 2026 (marzo)
Download: file .PRG
Note:

Un prisma generato da un angolo di torsione
Una sfera approssimata da 30 lati
Iperboloide a 5 lati con angolo di rotazione
Emisfera simulata con 50 lati

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. solidi.prg)
Importante! Lanciare l’emulatore VICE e caricare / lanciare ora le RGT utilizzando il dischetto ccc10-routine-grafiche.d64 e digitare NEW.
– Dal menù File > Smart attach… > solidi.prg
– Digitare RUN e premere il tasto Return per far partire il programma.

Buon divertimento!
Download link: ccc14-solidi.prg

Attenzione – Nel listato i caratteri ‘>’ e ‘<‘ potrebbero essere stati sostituiti dai rispettivi codici di encoding HTML ‘&gt;’ e ‘&lt;’. 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
0 rem "O{E*28}P"
1 rem "{cm g} {W*7}s o l i d i{W*7} {cm m}"
2 rem "{cm g}                         {cm m}"
3 rem "{cm g}        versione c 64    {cm m}"
4 rem "{cm g}                         {cm m}"
5 rem "{cm g}      di luca galluzzi   {cm m}"  
6 rem "{cm g}                         {cm m}"
7 rem "{cm g}        via ninfea       {cm m}"
8 rem "{cm g}                         {cm m}"
9 rem "{cm g}   cusano milanino (mi)  {cm m}"
10 rem"{cm g}                         {cm m}"
11 rem"{cm g}     tel: 02/6187588     {cm m}"
12 rem"L{R*28}{sh @}"
13 rem"{cm +*30}"
14 rem"{cm +}{space*28}{cm +}"
15 rem"{cm +} caricare le routines gra- {cm +}"
16 rem"{cm +} fiche di danilo toma ccc10{cm +}"
17 rem"{cm +}{space*28}{cm +}"
18 rem"{cm +*30}"
29 clr:x%=0:y%=0:x1%=0:y1%=0
30 a=0:b=100:c=1:d=50:e=3:f=.25:g=.5:h=2:gr=atn(1)/45:w=200
40 pl=49693:dr=49728:cl=49763:co=49785:mo=49821
50 rem *** input parametri ***
60 poke248,0:sysmo:print"{clear}{down*3}"
70 print"{right*6}figura :"
75 print"{down}{right}{reverse on}1{reverse off} prisma":print"{down}{right}{reverse on}2{reverse off} piramide"
77 print"{down}{right}{reverse on}3{reverse off} sfera"
78 print"{down}{right}{reverse on}4{reverse off} emisfera":print"{down}{right}{reverse on}5{reverse off} iperboloide"
80 input"{down*3}quale scegli ";tp
85 iftp<1ortp>5thenprint"{up*5}":goto80
90 input"{down}quanti lati ";lf
100 iflf<1then90
110 input"{down}angolo di incidenza ";vr
111 ifvr<1orvr>90thenprint"{up*3}":goto 110
120 input"{down}angolo di rotazione ";ar
130 input"{down}angolo di torsione ";at
140 gosub 1000
150 rem *** disegno del solido ***
160 ar=gr*ar:al=100*sin(vr*gr):y0=100+al/2:x0=160
170 cs=cos(vr*gr):se=8*atn(1)/lf
180 forj=atob:ontpgosub250,260,270,280,290
190 ar=ar+at*gr/b
200 rem *** disegno della figura piana ***
205 an=8*atn(1)+ar+.001:ry=di*cs
210 x%=c+x0+di*sin(ar):y%=w-(c+y0+ry*cos(ar))
215 fori=artoanstepse
220 y1%=w-(c+y0+ry*cos(i)):x1%=c+x0+di*sin(i)
225 poke2,c:sysdr:x%=x%-c:y%=y%-c:x1%=x1%-c:y1%=y1%-c
230 poke2,a:sysdr:x%=x1%:y%=y1%:nexti
240 y0=y0-al/b:nextj:goto300
250 di=d:return
260 di=d*(c-j/b):return
270 di=d*sqr(c-(c-j/d)^h):return
280 di=d*sqr(c-(j/d)^h):ifj=dthenj=110
285 return
290 di=d*sqr(f+e*((j/b)-g)^h):return
300 geta$:ifa$=""then300
310 goto14
999 *** reticolato di sfondo ***
1000 poke248,c:pokeh,a:poke251,c:poke252,a
1002 sysco:syscl:sysmo
1005 p=57344:h=170:i9=85:i8=1
1010 forx=pto65343step2
1020 pokex,h:pokex+i8,i9:nextx
1035 h=2
1040 return
2003 rem"{E*30}"
2010 rem prova ad introdurre questi va-
2020 rem lori; rispettivamente alle ri-
2030 rem chieste di figura, lati, inci-
2040 rem denza, rotazione, torsione.
2050 rem    3    25   65    50   40
2060 rem    2     4   60     0    0
2070 rem    5     5   50     0    0
2080 rem    3    50   45    60   30
2090 rem    5     6   60     0    0
2100 rem"{cm p*30}"
2110 rem type-in/testing by dlm/rmw

Share

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.