C Lernen mit cc65 und C64

Abend 1: Den Compiler zum Laufen bringen

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.

Installation des C-Compilers

Unter Linux

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.

Unter Windows

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.

Variante 1: Dauerhaft und immer sichtbar

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.

Variante 2: Variablen nur wenn benötigt

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.

Den Compiler ausprobieren

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.

Fragen zu dieser Lektion

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

ckurs/01-abend1.txt · Zuletzt geändert: 11/05/2009 12:59 (Externe Bearbeitung)
www.chimeric.de Creative Commons License Driven by DokuWiki Recent changes RSS feed