Ataquarium

Die Atari-Entwickler-Welt im November war vor allem von Teradesk bestimmt und es sieht so aus, als könnte ein richtig nettes Open-Source-TOS entstehen. Da es kaum wahrscheinlich ist, das TOS 4 noch einmal einem beschränkten Entwicklerkreis zugängig gemacht wird, ist EmuTOS zur Zeit die erste Wahl. Vielleicht wirkt das Projekt mit einem integrierten Teradesk weniger abschreckend auf potentielle Entwickler.

Ein anderes Open-Source-Projekt, das fleißig Fortschritte macht, ist Atari800. Es ist eines der Programme, die um einen Atari-Clone regelrecht betteln, denn auf Original-Ataris ist das Programm viel zu langsam.

Eine große Neuigkeit ist sicherlich die Freigabe von Draconis als Freeware. Das hat bei einigen Besorgnis ausgelöst, ob damit das Ende für das leistungsfähige Atari-Internet-Komplettpaket gekommen ist. Dem ist aber nicht so, vielmehr wird es mehr kleinere Updates geben, statt lange Wartezeiten zwischen den Versionen. Auch wenn das Programm jetzt nichts mehr kostet: wer es regelmäßig benutzt, sollte dem Programmierer schon Rückmeldung geben - z.B. durch eine Email oder Postkarte.

Von Draconis zu Draco: der hat seit dem 4.11. eine Alpha-Version des MiNT-Kernels in der Version 1.16.1 für 68030 Maschinen.

cc65

Hauptthema dieses Ataquariums ist der cc65. Diesen Namen werden auch einige Atari ST-Besitzer gehört haben und zwar auf Dracos Atari-Homepage. Dieser hat den Crosscompiler auf den ST portiert.

Ein Crosscompiler existiert meistens schon, bevor die eigentliche Hardware, für die Programme geschrieben werden, lauffähig ist. Ein solcher Compiler erzeugt Programme für einen anderen Computer, d.h. sie sind ohne Emulator nicht auf dem Computer lauffähig, auf dem der Compiler läuft. Neben dem Entwickeln von Programmen für noch nicht existierende Computer bietet ein Cross-Compiler einen weiteren Vorteil: die Geschwindigkeit. So wurden z.B. ZX Spectrum- oder Atari ST-Spiele auf 386er PCs entwickelt, um die größere Rechenleistung auszunutzen. Im Hinblick auf den ZX Spectrum kommt noch hinzu, dass er keine 80-Zeichen-Darstellung bietet und somit nicht unbedingt die ideale Entwicklungsplattform ist.

Freunde des hohen C konnten zudem nicht wirklich glücklich mit den 8-Bit-Maschinen werden. So gab es zwar C-Compiler, aber diese litten unter hohen Hardwareanforderungen oder waren nicht ausgereift.

Irgendwann kamen aber einige Programmierer auf die Idee, bekannte C-Compiler so zu modifizieren, das sie Code für 8-Bit-Computer ausspucken. Der Vorteil ist, dass die C-Programme im Vergleich zu Basic schneller und im Vergleich mit Assembler einfach zu verstehen sind. Ein bekannter C-Crosscompiler ist das z88dk für Z80-basierte Computer: durch das ändern eines Parameters wird ein Spectrum- statt eines MSX-Programms erzeugt.

Die GameBoy-Entwickler mögen es hingegen ganz nobel und verwenden GnuC - in der Version 3!

Ein weiterer und aus Atari-Sicht der interessanterer Cross-Compiler ist cc65. Wie unschwer zu erraten ist, kümmert sich cc65 um alle Maschinen mit einem 65xxx-Prozessor. Es gibt z.B. eine Version des cc65 für den Atari Lynx. Diese Version ist aber speziell angepaßt, während cc65 von cc65.org eine Auswahl des Zielcomputers zuläßt. Lange hatten die Atari 8-Bit-Geräte einen separaten Cross-Compiler, aber inzwischen wurden die Libraries an cc65 angepaßt.

cc65 unterstützt die folgenden Systeme:

Sofern nicht systemspezifische Eigenschaften, Besonderheiten der Library oder zuviel Speicherplatz genutzt werden, sind alle Programme für alle Computer compilierbar. Angenommen jemand schreibt eine kleine Lohnverwaltung für den C64 in C und compiliert diese mit cc65. Mit nur ein paar Umstellungen beim Compileraufruf wird das unveränderte Programm für den Atari XL generiert.

Das Programm...

...ist getrennt in einen maschinenabhängigen Teil für die verschiedenen Betriebssysteme und die Libraries. Ersterer ist derzeit für MS-DOS, Windows, OS/2, BeOS, Unix verfügbar, soll aber auch problemlos unter TOS compilieren. Die Libraries gibt es für die verschiedenen Zielcomputer getrennt, wer also nur Programme für den XL compilieren will, braucht nur die Atari-Library.

Da die Libraries von verschiedenen Leuten geschrieben wurden, variiert deren Leistungsfähigkeit. So wird die Maus nicht von der +4-Library unterstützt.

Die Library-ZIP-Dateien werden direkt in das cc65-Verzeichnis gespeichert. Nun gilt es, zwei Environment-Variablen zu definieren, damit der Compiler seine Tools und Libraries findet:

set CC65_INC=c:\cc65\include
set CC65_LIB=c:\cc65\lib

Jetzt kann es auch schon losgehen, am besten mit dem "hallo welt"-Beispiel aus der cc65-Anleitung.

"Hallo Welt!"

#include <stdio.h> 
#include <stdlib.h>
extern const char text[]; /* In text.s */ 
int main (void) { 
printf ("%s\n", text); 
return EXIT_SUCCESS; 
} 

Bei diesem Beispiel werden nur die Standard-Libraries benötigt. Die systemspezifischen Header-Dateien heißen atari.h, c64.h usw. . Wer z.B. den Pokey programmieren möchte, müßte atari.h. einbinden.

Die text.s ist sehr klein:

.export _text _text: 
.asciiz "Hallo Welt!" 

Der erste Schritt ist jetzt das Programm zu assemblieren. Dazu wird cc65 aufgerufen:

cc65 -O -t atari hello.c

Der erste Parameter steht für "Optimierung". Dieser Schalter sollte immer benutzt werden. "-t" definiert das Zielsystem, in diesem Fall Atari (8-Bit). Wenn alles korrekt installiert wurde, erzeugt der Compiler die Datei hello.s.

Der Assembler

Die Assembler-Sourcedatei wird vom Assembler in eine Objektdatei assembliert. Der Assembler ist nicht in der Lage, mehr als eine Datei gleichzeitig zu bearbeiten und deshalb sind zwei Aufrufe nötig:

ca65 hello.s
ca65 -t atari text.s

Der Grund, warum beim zweiten Aufruf wieder das System angegeben wird, ist die eingebaute Zeichensatzkonvertierung. Der normale PC-Zeichensatz wird in ATASCII umgewandelt - sofern es das Zeichen im Atari-Zeichensatz auch gibt.

Eine linke Nummer

Letzte Station ist der Linker. Dieser führt die Objekt-Dateien und die maschinenspezifischen Libraries zusammen zu einem lauffähigen Programm:

ld65 -t atari -o atari atari.o hello.o text.o atari.lib

Anschließend steht ein lauffähiges Atari-Programm zur Verfügung. Um aus dem Atari-Programm ein C64-Programm zu machen, muß nur die passende Library installiert sein. Dann werden alle Schritte ab dem ersten cc65-Aufruf wiederholt, nur das "atari" durch "c64" ersetzt wird.

Atari-spezifisches

Natürlich hat der Atari nicht die gleiche Hardware wie der C64. Selbst Programme die Atari-Spezialitäten ausnutzen, können mit _IFDEF_s Systemunabhängig gestaltet werden.

Die atari.h enthält als erstes die Atari-spezifischen Keyboardcodes. Dann folgt die Farbpalette, GTIA, System-Vektoren, das Betriebssystem (Atari 400/800, 1200XL, XL/XE), TV-System, Pokey, PIA und Antic.

Bekannte Programme

Ein sehr bekanntes Programm, das mit cc65 geschrieben wurde, ist der C64 Web-Server, mit dem tatsächlich über TCP/IP ein C64 an das Internet angeschlossen ist. Der Stack heißt uIP und eine Umsetzung davon existiert schon für den Atari XL [3] und viele andere 8-Bit-Rechner.

Speziell für den XL gibt es sogar ein kommentiertes ROM-Listing, das mit cc65 compiliert werden kann. Als erstes Update des Betriebssystems gibt es eine Version mit arabischen Schriftzeichen (Bild).

Die Zukunft

Es werden immer mehr Computer zu cc65 hinzugefügt, seit kurzem gibt es auch eine Library für den Oric Atmos [4]. Geplant sind ferner eine richtige Unterstützung von Massenspeichern.


Mia Jaap
Aus: ST-Computer 12 / 2002, Seite 34

Links

Copyright-Bestimmungen: siehe Über diese Seite