Objektorientierte Programmierung für den C-64


Mit hoher Regelmäßigkeit wird in C-64 Foren die Frage diskutiert ob man Java oder C++ auf dem Commodore 64 ausführen lassen kann. Die CC65 Umgebung ist relativ bekannt, nur ist die leider auf C-Code hin optimiert also ohne die Erweiterung um Klassen zu erzeugen. Einen praktischen Vorschlag hat http://www.tutego.de/blog/javainsel/2013/03/mit-java-fr-c64-entwickeln/ unterbreitet. Er möchte Java Code zuerst nach C Code tranformieren und daraus dann mittels CC65 ablauffähigen C-64 Code erzeugen. Zumindest enthält sein Blog-Eintrag einen fertigen Screenshot, aber leider ist auch dort echte objektorientierte Programmierung nicht möglich. Dezidzierte JVM für Commodores Liebling gibt es auch keine und so stellt sich die Frage nach der Best-Practice Methode (auch wenn das zugegeben ein rein akademisches Problem ist, denn wer in C++ programmieren will kann das auf einem x86 ohnehin sehr viel leichter).

Nach meiner Recherche ist ein gangbarer Weg wenn man den Umweg über Forth bestreitet. Forth ist eine Meta-Programmiersprache mit der man eigene Programmiersprachen entwickeln kann, anders als LISP ist es sehr machinenah, und es gibt bereits in Forth OOP Erweiterungen. Wenn auch etwas verstreut. Meine Idee wäre, wenn auch bisher noch nicht getestet, mangels Kenntnisse in Forth, ein vorhandenes C-64 Forth um objektorientierte Features zu erweitern so dass man auf dem Commodore 64 Klassen und Vererbung nutzen kann. Damit stünde eine leistungsfähige Entwicklungsumgebung bereit.

Jetzt mag man vielleicht einwenden, dass die Idee an sich Unsinn ist, weil man auf dem C-64 ohnehin keine Leistungsfähigen Programme entwickeln kann. So ganz ist das aber nicht korrekt. Eine Standard 5 1/4 Zoll Diskette besitzt einseitig 170 kb Speicher, nutzt man beide Seiten ergibt es bereits 340 kb. Ferner gibt es die Daumenregel, dass man in 1 kb Speicher ungefähr 40 Lines of Code unterbringen kann. Damit könnte das Programm maximal 13600 Lines of Code lang sein. Das wiederum ist bereits ein Programmiergroßprojekt. Wer mehr als 10000 Lines of Code alleine programmieren kann, alle Achtung.

Vom Prinzip her sollte es also machbar sein, den C-64 in eine objektorientierte Spitzenmachine aufzurüsten. Wenn man weiß wie es geht …

Zumindest ein BASIC was in Forth programmiert wurde, findet man relativ einfach in Google. Die Idee ist, Forth nicht als Programmiersprache zu nutzen, sondern als Meta-Compiler um damit eigene Sprachen zu erzeugen. Also in Forth einen Basic-Compiler, einen C-Compiler oder eben auch einen C++ Interpreter zu programmieren. Nun mag man sich fragen: Was soll das? Denn immerhin gibt es im C-64 schon ein Basic. Nur, das wurde in Assembly programiert ist also speziell auf den C-64 zugeschnitten. Ein Forth-Basic hat hingegen den Vorteil, dass es überall läuft. In einer Ausgabe der 4th dimension, war mal ein Artikel abgedruckt über ein objektorienteres Forth: http://www.forth.org/fd/FD-V20N5.pdf (Seite 29ff). Die Idee war es, Forth um OOP Features zu erweitern. Leider ist die dabei entstandene Syntax gewöhnungsbedürftig und weicht stark ab von dem C++/Java/C# Standard. Es ist mehr ein Proof-of-concept anstatt ein echtes Projekt. Das Problem liegt darin begründet, dass Forth anstatt eines Betriebssystems agiert. Wenn man C++ emulieren will, reicht es nicht einfach nur die Befehle der Sprache nachzubauen, sondern man braucht auch einen Texteditor, eine GUI auf die das Programm etwas ausgibt und Bibliotheken für mathematische Berechnungen, Zeitangaben usw.

Kurz gesagt, es war keineswegs Zufall, dass objektorientierte Programmierung auf der x86 Plattform groß wurde, wo es nicht nur mehr Speicher gab, sondern mit MS-Windows auch ein Betriebssystem auf das man aufsetzen kann. Anders formuliert, ein C++ Programm ist weitaus mehr, als die Verwendung des Class Schlüsselwortes sondern OOP macht nur Sinn, wenn auch viele andere Anforderungen erfüllt sind. Eventuell würde es Sinn machen OOP ontop von Geos zu nutzen, nur war Geos innerhalb der C-64 Gemeinde ohnehin umstritten. Ohne REU Speichererweiterung war Geos nicht benutzbar, und dabei war die Software außerordentlich effizient programmiert.

Ich würde sogar soweit gehen und behaupten, dass OOP nicht so eine Programmiersprache ist als vielmehr eine Entwicklungsumgebung. Das man also OOP innerhalb eines vorhandenen Case Tools einsetz um effizienter zu programmieren. Und hier stieß das C-64 System an natürliche Grenzen. So etwas wie eine Entwicklungsumgebung auf dem C-64 gab es nicht. Üblicherweise wurde Assembly verwendet oder später dann Crosscompiler. Wollte man Emacs oder Visual C++ auf den C-64 übertragen wäre es aufwendig geworden.

TINY BASIC
In der Frühzeit der Heimcomputer gab es die Tiny-Basic-Spezifikation. Damit war eine minimalistische Umgebung gemeint um BASIC Programme auszuführen. Eine Implementierung in Forth findet sich auf http://www.nicholson.com/rhn/files/Tiny_BASIC_in_Forth.txt Ob der Code lauffähig ist habe ich zwar nicht ausprobiert, dafür habe ich jedoch zur Probe den Sourcecode in einer Textdatei gespeichert um zu sehen wie groß sie ist. Stolze 3,9 kb umfasst der Sourcecode. Das ist erstaunlich viel für ein Tiny-Basic. Normalerweise passt ein Tiny-Basic wenn es in Assembly programmiert wurde in 2-3 kb hinein.

One thought on “Objektorientierte Programmierung für den C-64

Comments are closed.