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
DI BARTOLOMEO DAVIDE BERTINETTO