sabato 27 giugno 2020

Grafici di funzioni - terza parte

Grafici di funzioni - Terza parte (ultima)
Articolo a cura di Tommaso Mauro Tautonico

Eccoci quindi giunti all’ultima parte di quello che, nelle intenzioni, avrebbe dovuto essere un piccolo contributo su quella che era stata la mia esperienza, a dire il vero all’inizio abbastanza frustrante, con la grafica sul Commodore 64 ed il suo striminzito Basic v2 per poi, come sempre, farmi prendere dalla curiosità ed affrontare lo stesso problema con gli altri Basic di casa Commodore ed alcune delle estensioni a tale linguaggio presentate da società terze sino alla penultima incarnazione del Basic su Commodore, ossia il Basic 8.
Ormai i 16 bit erano in via di affermazione e con essi arrivavano altri dialetti ed altri linguaggi, concludo, pertanto, con quella che avrebbe dovuto essere l’ultima incarnazione del Basic Commodore, il BASIC 10 del mai nato Commodore 65 (o 64DX che dir si voglia).

Non entrerò nel merito di tale computer, del perché e del per come non uscì, di cosa avrebbe potuto essere, del fatto che non vide mai forma se non come prototipo, rimandando a Carlo Pastore ed al suo libro tutte le spiegazioni e le risposte alle vostre curiosità. 

Non parlerò neanche del redivivo C65, nell’incarnazione FPGA del MEGA65, trovate tutto nei link che pubblicherò. 

Quello di cui vi parlerò è dell’esperimento che ho condotto con l’emulatore XEMU65 del C65 di riscrivere il codice per il disegno, ormai classico, della funzione seno nell’incompleto BASIC 10 (eh si, alcuni token non sono stati implementati). 

Le difficoltà incontrate sono state diverse, tutte dovute sicuramente alla mia scarsa conoscenza di questo computer, ma anche, e soprattutto, perché la documentazione a disposizione è scarsa ed incompleta ed in alcuni punti anche errata (forse per cambi di idea in fase progettuale sull’implementazione dei comandi nel linguaggio). 

Pertanto, come sempre, vediamo prima i file necessari al funzionamento dell’emulatore XEMU65, che saranno postati nella sezione file e che, comunque, sono facilmente reperibili in rete a partire da questo link https://github.lgb.hu/xemu/ :


D:\C65_emu\
00000001 911001patched.bin 128,00
00000002 basic_10_chapter3.txt 345,72
00000003 c65manual.txt 644,73
00000004 install-xemu-win64.exe 1.167,86



Terminata l’installazione, se si esegue il programma appena installato avremo sicuramente il seguente errore:


Questo perché l’emulatore non trova la ROM del C65 nel percorso specifico ovvero:

C:\Users\utente\AppData\Roaming\xemu-lgb\c65\default-files\

Quindi la prima cosa da fare è copiare il file .bin della ROM che abbiamo scaricato nella cartella sopra descritta, prestando attenzione a rinominarlo in C65-system.rom e ricordandoci di aver abilitato la visualizzazione delle cartelle nascoste e di sistema in Windows. 

Fatto ciò possiamo riavviare l’emulatore ed avremo il nostro ambiente C65


Ovviamente non tutto è emulato (intendo i chip specifici es VIC IV) e a volte il sistema si blocca, ma per soddisfare la mia curiosità è stato sufficiente; per i dettagli su ciò che è emulato e quello che non lo è vi rimando a questa pagina https://github.com/lgblgblgb/xemu/wiki/targets-c65 .

Basato sulle librerie SDL2, premendo il tasto destro del mouse sulla schermata dell’emulatore, appare un piccolo menu contestuale che permette, oltre a poter resettare l’emulatore, di collegare un file immagine .d81 dal quale recuperare e/o salvare file; in realtà questa ultima opzione è stata parecchie volte causa di problemi, probabilmente con altre ROM potrebbe essere diverso.


Di aiuto mi è stato anche il manuale del BASIC 10, anche se per capire la sintassi del comando che mi serviva per tracciare il punto (non trovando qualcosa di simile a DOT o POINT o PIXEL) ho dovuto cercare su altre fonti, ed alla fine ho capito che la soluzione era il comando LINE ma da utilizzare con due soli parametri. 

Infatti il manuale del C65 (C64DX 😉) riporta, nella parte della descrizione dei comandi del BASIC 10 la seguente sintassi per il comando LINE



Sintassi e funzionalità che, ad una prima valutazione, non soddisfaceva la mia richiesta di avere un comando che disegnasse un solo punto.

Cercando in giro e chiedendo a chi con il C65 ha più confidenza (grazie Faber e Carlo), sono stato indirizzato verso un progetto molto interessante, il MEGA65 (https://mega65.org/) dal quale ho scaricato il manuale utente di questo progetto ancora in divenire https://github.com/MEGA65/mega65-user-guide



E nella PARTE B dell’APPENDICE V, dove sono elencati tutti i comandi del BASIC 10, ho trovato la soluzione: guardando la sintassi del comando LINE notavo che i due parametri delle coordinate x ed y finali erano opzionali, infatti erano scritti tra parentesi quadre e, nella descrizione del comando, si legge che “disegna un pixel alle coordinate xbeg, ybeg se è passata una sola coppia di coordinate; se sono definite entrambe le coppie di coordinate (xbeg, ybeg, xend, yend) traccia la linea tra queste”.


 Bene, a questo punto avevo tutto per provare a completare su BASIC 10 il programma che tracciava una funzione, in questo caso SIN(X/5).

Avviato l’emulatore, dopo aver approfondito meglio i comandi GRAPHIC SCREE e PALETTE, questo è stato il risultato:





A proposito, concludo pubblicando il listato ed il risultato del programma dal quale tutto nacque, non proprio il listato originale, che non son riuscito a trovare, ma un programma concettualmente uguale; ne sono passati di anni e di funzioni studiate





Alla prossima.

Nessun commento:

Posta un commento