Newsgroup: it.comp.retrocomputing
Titolo: [Semi OT] C per C64

Salve
è vero che è esistito un interprete (o compilatore ?) di linguaggio C per
C64 ? Se esiste qualcuno può farmi sapere dove trovarlo ?
Grazie
Milliken

Ciao. Eccoti il link:
http://www.cc65.org/
-- 
Carlo

 
http://www.cc65.org/
Quello che trovi su questo URL e' un CROSS-COMPILER, cioe' il compilatore
gira su un PC (con svariati SO, tra cui anche Win32 e Linux); gli dai in
pasto il codice C e lui genera un file caricabile da:
- C64
- C128
- Apple II
- Plus/4 (e C/16)
- e vari altri computer basati su 6502 e derivati (da cui il nome CC65:
65xx).
Una volta ho visto un compilatore C che gira nativamente su C64 e dovrei
avercelo da qualche parte sul mio HD in formato .PRG o .D64. Se mi autorizzi
.AND. trovo il file in questione te lo spedisco. Fammi sapere in email
(sblendorio [chiòcciola] 
infomedia.it
)
Tieni cmq presente che e' un po' orrendo: il C64 non ha nel set di caratteri
alcuni che fanno parte del linguaggio C: '{', '}', '\' ... per cui questi
vengono sostituiti da altri, che ho fatto fatica a mappare e che ora neanche
ricordo (erano caratteri semigrafici che poco avevano a che fare con quelli
"originali"... evidentemente avevo saltato qualche routine di ridefinizione
caratteri...). E cmq da questo compilatore nativo per C64 non sono riuscito
a tirarci fuori nulla.
Al contratio il CC65 e' spettacolare, e proprio perche' compili su PC la
cosa e' molto + fattibile.
Alcuni suggerimenti per CC65:
1. Il PC usa per i caratteri una codifica ASCII, il C64 usa una codifica
PETASCII. Questo vuol dire che su PC devi scambiare le minuscole con le
maiuscole e viceversa. Ad esempio la stringa "Ciao, mondo!" diventa "cIAO,
MONDO!" se vuoi che venga correttamente gestita dal C64. Strano che questo
lo abbiano lasciato al programmatore, ma e' cosi', almeno con la versione
che ho provato io.
2. La libreria "stdio.h" sulla piattaforma C64 non funge quasi per niente.
Ad esempio non ho trovato modo di far funzionare la "scanf()", il file
oggetto non viene neanche linkato. Con "printf()" invece il file oggetto
viene linkato ma in esecuzione non accade NULLA. Per stampare qualcosa ho
trovato uno stratagemma: costruisco la stringa da stampare con "strcat()" e
la stampo con "puts()".
3. A parte questi antipatic(issim)i particolari, il resto (che immagini non
poter funzionare) funziona! Funzioni RICORSIVE, gestione DINAMICA della
memoria (malloc, free), puntatori a funzione...
4. Ci sono librerie per la grafica e addirittura per generare programmi GEOS
5. Con i puntatori a funzione, riesci anche a richiamare routine del KERNAL.
Ora non ho il codice sott'occhio, ma prova questo:
...
typedef void (*SYSCALL)();
SYSCALL syscall;
...
void main()
{
    syscall = 0xFCE2; /* 0xFCE2 == 64738 in decimale */
    ...
    /* fa qualcosa */
    syscall(); /* RESET! */
}
ho effettuato la famosa SYS64738 da C!!!!!

Ciao,
    io ho una copia originale del compilatore "Power C" della BetterWorking.
E' del 1986 e funziona bene.
Una volta caricato installa un rudimentale sistema operativo a linea di
comando (tipo ms/dos) da cui puoi far partire l'editor (che prevede
combinazioni di tasti per i caratteri non presenti sul C=64, tipo { }_ etc.),
il compilatore, il linker, etc. Sono presenti le versioni adattate delle
librerie standard (stdio, math, sys, etc.). A detta del manuale questo
compilatore si attiene allo standard ANSI.
Fra l'altro, è presente un secondo dischetto con la versione per 128 del
compilatore.
La stessa ditta ha poi fatto anche un "Power Assembler", che si integra con
l'ambiente dell'altro programma. E' un buon assembler con macro,
pseudo-comandi, compilazione condizionale, tavole dei simboli, etc.
I file immagine .D64 di entrambi si trovano in rete... ma non mi ricordo
dove!
Ciao,
Mauro.
