www.bertinettobartolomeodavide.it

 

 

 

 

CC65 - COMMODORE 64 COMPILER

 

E' da lungo tempo che tengo d'occhio il compilatore multipiattaforma cc65, che in questo caso propongo in veste C64!

Ho messo insieme due versioni basate su MSDOS e DosBox, per computer PC Windows e Commodore Amiga(ne sono molto appassionato!) e quindi in questa pagina ne propongo un primo utilizzo con una piccola sequenza di listati C per dimostrarne all'utente le formidabili capacità sul 8bit di della grande C! Poi col tempo, mi cimenterò su un progetto successivo...

 

COMPILATORI:

- Download Versione PC Windows e Dosbox: QUI

-Download Versione Commodore Amiga e Dosbox: QUI

 

Seguono alcuni listati di esempio, utili per avere una base di partenza:

Esempio1 -> Funzione Print

#include <conio.h>

void main(void)
{
// Imposta lo schermo nero e testo bianco
bordercolor(COLOR_BLACK);
bgcolor(COLOR_BLACK);
textcolor(COLOR_WHITE);

// Pulisce lo schermo
clrscr();

// Posiziona il cursore in alto a sinistra (0, 0)
gotoxy(0, 0);

// Stampa la scritta, esattamente come un PRINT in BASIC
cprintf("ciao");

// Mette in pausa il programma in attesa della pressione di un tasto
cgetc();
}

 

Esempio 2 -> Funzione input di una stringa

#include <conio.h>
#include <stdio.h>

void main(void)
{
char a[32]; // Buffer per memorizzare la stringa (massimo 31 caratteri + terminatore)

// Configurazione iniziale dello schermo
bordercolor(COLOR_BLACK);
bgcolor(COLOR_BLACK);
textcolor(COLOR_WHITE);
clrscr();

// Stampa la richiesta, analoga a INPUT "come ti chiami?"; A$
cprintf("come ti chiami? ");

// Legge la stringa inserita dall'utente da tastiera
// fgets gestisce correttamente l'input e l'invio sul C64
if (fgets(a, sizeof(a), stdin) != NULL) {
// Rimuove l'eventuale carattere di fine riga (newline) catturato da fgets
unsigned char i = 0;
while (a[i] != '\0') {
if (a[i] == '\n' || a[i] == '\r') {
a[i] = '\0';
break;
}
i++;
}
}

// Stampa il risultato, analogo a PRINT "mi chiamo "; A$
cprintf("mi chiamo %s\n", a);

// Pausa finale in attesa della pressione di un tasto
cgetc();
}

 

Esempio 3 -> Ciclo da 0 a 100 con scrolling nativo

#include <stdio.h>
#include <conio.h>

void main(void)
{
unsigned int i;

// Colori classici
bordercolor(COLOR_BLACK);
bgcolor(COLOR_BLACK);
textcolor(COLOR_WHITE);

// Pulisce lo schermo
clrscr();

// Ciclo da 0 a 100 con scrolling nativo tramite printf
for (i = 0; i <= 100; i++) {
printf("%u\n", i);
}

// Pausa finale
cgetc();
}

 

Esempio 4 -> Ciclo infinito

#include <stdio.h>
#include <conio.h>

void main(void)
{
unsigned int a = 0;

// Configurazione iniziale dello schermo
bordercolor(COLOR_BLACK);
bgcolor(COLOR_BLACK);
textcolor(COLOR_WHITE);
clrscr();

// Ciclo infinito equivalente a 10 A = A + 1 : PRINT A : GOTO 10
while (1) {
a++;
printf("%u\n", a);
}
}

 

Esempio 5 -> Input e somma di addendi

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void main(void)
{
char input_buf[16];
int a = 0;
int b = 0;

// Configurazione iniziale dello schermo
bordercolor(COLOR_BLACK);
bgcolor(COLOR_BLACK);
textcolor(COLOR_WHITE);
clrscr();

// Input addendo 1
printf("addendo 1: ");
if (fgets(input_buf, sizeof(input_buf), stdin) != NULL) {
a = atoi(input_buf);
}

// Input addendo 2
printf("addendo 2: ");
if (fgets(input_buf, sizeof(input_buf), stdin) != NULL) {
b = atoi(input_buf);
}

// Stampa del risultato
printf("somma di %d piu' %d = %d\n", a, b, a + b);

// Pausa finale
cgetc();
}

 

Esempio 6 -> Loop infinito che verifica la pressione di un tasto

#include <stdio.h>
#include <conio.h>

void main(void)
{
// Configurazione iniziale dello schermo
bordercolor(COLOR_BLACK);
bgcolor(COLOR_BLACK);
textcolor(COLOR_WHITE);
clrscr();

// Visualizza il messaggio iniziale
printf("premi un tasto per uscire\n");

// Loop infinito che verifica la pressione di un tasto
while (1) {
// kbhit() restituisce un valore diverso da zero se è stato premuto un tasto
if (kbhit()) {
cgetc(); // Legge e consuma il tasto premuto
break; // Esce dal loop
}
}
}

 

STORIA DEL COMMODORE 64 | CAVO X1541 | Da TAPE a PC | Il mio Museo Commodore | Linguaggio C sul Commodore 64! | Grafica da Bmp a Koala | SD2iec | Musica su C64 con SID WIZARD | PixelArt C64 | Listati Basic



INDIETRO

DI BARTOLOMEO DAVIDE BERTINETTO

www.bertinettobartolomeodavide.it