- C-Kurs
- C-Kurs: Exkurse
Der bekannsteste C-Compiler für den C64 ist der cc65 (www.cc65.org). Das ist ein Cross-Compiler. Das heißt, er läuft auf einem anderen Rechner (Windows, Linux u.a.) als die Zielplattform (C64, Plus4 u.a.).
So ein Compiler besteht übrigens aus einer ganzen Reihe von Werkzeugen, die wir uns später genauer ansehen werden.
Als erstes installieren wir uns die Werkzeuge, um cc65 selbst kompilieren zu können. Unter Ubuntu geht das auf der Kommandozeile so:
sudo apt-get install linuxdoc-tools sudo apt-get install build-essential
Am besten, Ihr kopiert das Zeile für Zeile in eine Kommandozeile und achtet drauf, dass es fehlerfrei durchläuft.
Bei anderen Distributionen heißen die Pakete wahrscheinlich ein bisschen anders. Das Packet build-essential installiert durch seine Abhangigkeiten gcc und make. Wer Probleme hat, kann sich an u.g. Forum wenden.
Als nächstes Laden wir die cc65-Quelltexte herunter, entpacken sie und bauen Compiler, Tools und Bibliotheken.
Ladet Euch aus dem Verzeichnis ftp://ftp.musoftware.de/pub/uz/cc65/ die aktuellste Datei mit dem Namen sources-*.tar.bz2 herunter.
# entpacken tar xjf cc65-sources-*.tar.bz2 # compilieren cd cc65* make -f make/gcc.mak # installieren # wenn man kein sudoer ist, muss man das als root machen sudo make -f make/gcc.mak install
Das sollte es gewesen sein.
Ladet Euch aus dem Verzeichnis ftp://ftp.musoftware.de/pub/uz/cc65/ die jeweils aktuellste Datei mit den folgenden Namen herunter:
cc65-win32-*.zip
cc65-c64-*.zip
Die erste Datei enthält alle Werkzeuge, die unter Windows laufen. Die zweite enthält alle Dateien, die für die Programmentwicklung für den C64 wichtig sind.
Entpackt diese beiden zip-Archive und kopiert den Inhalt beider zusammen in ein Verzeichnis, z.B. bei mir e:\cc65
Zur Kontrolle: Darin findet man dann diese Dateien und Verzeichnisse:
announce.txt asminc bin doc emd include joy lib mou ser tgi
Damit die Programme und bestimmte Dateien auch gefunden werden, müsst Ihr noch Einträge in ein paar Umgebungsvariablen vornehmen, wie etwa in die PATH-Variable.
Für ein möglichst komfortables Arbeiten kann man die Variablen dauerhaft setzen. Das geht so:
Vista: Systemsteuerung=>System=>Erweitert=>Umgebungsvariablen XP: Rechtsklick auf Arbeitsplatz, dann Eigenschaften, Reiter „Erweitert“ und in dem dann erscheinenden Dialog den Button Umgebungsvariablen klicken
Irgendwo dort (bei mir unter „Systemvariablen“) muss die Variable PATH (oder Path) auftauchen. Die hat sinngemaß das Format:
c:\bla;c:\mehr;c:\blub
Da hängen wir jetzt ein Semikolon und den Pfad zu unserem „bin“-Verzeichnis an. Mein Beispiel schaut danach also so aus:
c:\bla;c:\mehr;c:\blub;e:\cc65\bin
Außerdem fügen wir zwei neue Variablen ein:
CC65_INC soll den Pfad zu dem „include“-Verzeichnis enthalten, z.B. e:\cc65\include
CC65_LIB enthält e:\cc65\lib
Vergesst nich, die oben genannten Pfade an Eure Verzeichnisstruktur anzupassen! Nochmal kontrollieren und dann alles weg-ok-en.
Erzeugt eine Datei namens initcc65.cmd und legt diese z.B. nach c:\windows\system32 (also in einen Suchpfad). Der Inhalt sollte so aussehen:
set CC65=e:\cc65 set CC65_LIB=%CC65%\lib set CC65_INC=%CC65%\include path %CC65%\bin;%path%
Vergesst nicht, den Pfad in der ersten Zeile an eure Verzeichnisstruktur anzupassen!
Diese Datei muss man aus jedem DOS-Fenster aufrufen, bevor dort die Programme von cc65 benutzt werden können.
Dannach prüfen wir, ob es geklappt hat. Öffnet ein DOS-Fenster (cmd.exe) bzw. unter Linux ein Terminal-Fenster und tippt folgendes:
>cc65 cc65.exe: No input files
Wenn nicht diese Antwort kommt, stimmt was am Pfad nicht. Je nach Windows-Version muss man sich vielleicht ab- und wieder anmelden, neu starten, einen neuen Rechner kaufen oder mehr RAM reinstecken, damit die PATH-Variable übernommen wird
Nehmt einen Text-Editor, am besten einen, der C auch als Sprache kennt und ganz schön toll bunt macht. Für Windows gibt es z.B. ConText, Crimson Editor, Programmers Notepad, Ultra Edit u.v.a. Aus Linux eignen sich für normalsterbliche Benutzer Editoren wie kate oder gedit.
Erzeugt eine leere Datei und speichert sie nach (Beispiel-Pfad) e:\ckurs\hello.c. Dann tippt das folgende Programm ab. Und wirklich lieber tippen statt kopieren, so merkt man es sich besser:
#include <stdio.h> int main(void) { puts("Hello world"); }
Wir wollen heute wirklich noch nicht darüber nachdenken, was das Zeugs bedeutet, sondern es lediglich starten können. Bitte achtet vom Anfang an an eine korrekte Einrückung.
So, dann nochmal speichern und ein Kommandozeilenfenster aufmachen. Da gibt's dann folgende Session (Der scharfsinnige Leser erkennt sicher, was ich getippt habe und was der Computer ausspuckt:)
>cl65 -o hello.prg hello.c
>dir
26.01.2009 22:10 67 hello.c
26.01.2009 22:19 556 hello.o
26.01.2009 22:19 961 hello.prg
3 Datei(en), 1.584 Bytes
Wenn dort eine Fehlermeldung kommt, bitte überprüfen: - Alles richtig abgetippt? - Verzeichnisse richtig ausgenpackt? - Die drei Variablen richtig gesetzt (PATH, CC65_INC, CC65_LIB)?
Die hello.prg sollte man jetzt mit einem C64-Emulator starten oder einem echten C64 zukommen lassen.
In diesem Thread im Forum64 können Fragen zu dieser Lektion gestellt werden:
http://www.forum64.de/wbb3/index.php?page=Thread&threadID=27606
In diesem Thread diskutieren Experten, was hier nicht stimmt und wie der Kurs verbessert werden kann:
http://www.forum64.de/wbb3/index.php?page=Thread&threadID=27594
Hier sind ein paar interessante Fragen aus dem oben genannten Forum:
Na Holladiewaldfee! So viel Code für sooo wenig getippse!!! Rock'n'Roll
![]()
In den reichlich 900 bytes steckt noch ein bischen mehr als unser Getipse, nämlich Teile der C-Bibliothek und der Laufzeitumgebung. So ähnlich als würden wir zu einem Assembler-Programm ein Stück vom Kernal dazupacken.
Dieser Größenzuwachs ist besonders auffallend bei sehr kleinen Programmen. Aber nichts desto trotz ist C im immer größer als ein gleiches Assembler-Programm.
Also beim Blick in den Monitor sehe ich, dass ja da allerhand abgeht (sogar IRQ) ... Wo ein IRQ kommt möchte ich alleine bestimmen.
Grob gesagt kannst Du in C + ein bisschen Assembler fast alles machen, was Du in reinem Assembler machen kannst. Und auf alle Fälle wesentlich mehr als in BASIC. Wenn man die Werkzeuge („Toolchain“) genau kennt, hat man die Maschine 100% unter Kontrolle.
Selbst bei der Entwicklung reiner Assembler-Programme können die Tools nützlich sein, das sehen wir später.
Was genau die IRQ-Vektor-Verbiegerei und der Rest der 900 Bytes machen, wird uns kein Geheimnis mehr sein, wenn wir die Laufzeitumgebung untersuchen. Aber alles zu seiner Zeit.
So, das war's für heute, weiter geht's mit 02-abend2