tiny little gizmos

Entwickeln für den Commodore 64

Ich habe ja neulich mal aus Spass ausprobiert, ob ich noch Maschinensprache für den 6502 Mikroprozessor programmieren kann. Tatsächlich bin ich nach über 20 Jahren Abstinenz wieder ganz gut reingekommen, wie ich im Artikel “HA – Ich kann es noch…” gezeigt habe. Der Prozessor ist ja auch verhältnismässig einfach zu programmieren. Das einzige, was ich wirklich schmerzlich vermisst habe, sind Befehle für Multiplikation und Division, aber dazu später noch etwas.

Nun nützt ein Prozessor alleine natürlich nichts. Er ist ja nur ein (wenn auch zentrales) Teil eines Computers. Der 6502 war neben dem Z80 der Prozessor, der die meisten Homecomputer der späten 70er und frühen 80er Jahre angetrieben hat. Darunter solche Schwergewichte, wie Apple II, Atari 400/600/800 und natürlich die legendären Commodore VC20 und C64. Letzterer war damals in den 80ern der Computer meiner Wahl. Einerseits gab es für ihn die meisten Spiele, und andererseits war er mit richtiger Tastatur, 64KB Speicher, Floppylaufwerk und Nadeldrucker für vergleichsweise schmales Budget auch bereits recht professionell.

Emulation

Die Hardware besitze ich längst nicht mehr. Trotzdem wollte ich mal wieder etwas für den C64 programmieren. Das geht aufgrund einer aktiven Szene erfreulich einfach. Zunächst benötigt man einen Emulator, der den C64 komplett in Software auf einem aktuellen PC oder MAC nachbilden kann. Ich benutze gerne der VICE Emulator, weil er für viele Plattformen erhältlich und sehr kompatibel zur alten Software ist. Zudem kann er auch andere alte Commodore Rechner emulieren.

Hardware Dokumentation

Wer in Assembler (bzw. Maschinensprache) entwickeln will, muss genauestens über die Hardware bescheid wissen. Eine detaillierte Auflistung der Memory Map (Speicherbelegung) und der Register der Ein- und Ausgabechips, insbesondere Video- und Soundchip ist Grundvoraussetzung.

Crossdevelopment

Software auf dem C64 zu entwickeln aus etwas mühsam und recht langsam. Den Editor laden, den Quelltext laden, die Änderungen vornehmen, Quelltext speichern, Editor verlassen, Assembler starten (der rödelt dann auf dem langsamen Diskettenlaufwerk rum), Programm laden und feststellen, dass irgendwas nicht läuft. C64 zurücksetzen und die Schleife geht von vorne los.

Mit Crossdevlopment (die Software wird auf einem Fremdsystem programmiert und übersetzt) geht das einfacher, komfortabler und schneller. Man programmiert mit wesentlich besseren Editoren auf dem PC, übersetzt die Software mit einem Crossassembler in Sekunden und startet das Programm direkt im Editor.

Tools
Jetzt gilt es noch, die richtigen Tools für das Gastsystem zu finden. Dabei ist für mich wichtig, wann immer es geht Software zu nutzen, die es sowohl für Windows, als auch für Apple Mac und Linux gibt.

Als Commodore Emulator verwende ich den VICE Emulator, der hier zu finden ist: http://vice-emu.sourceforge.net.

Als Übersetzungsprogramm nehme ich den in Java programmierten Kick Assembler, den es hier gibt: http://www.theweb.dk/KickAssembler.

Damit ist man eigentlich schon gut ausgestattet um zu starten. Die meisten Spiele auf dem C64 verwenden keine “richtige” Grafik, sondern setzen die Bilder aus veränderten Zeichen zusammen. Das geht schneller und benötigt weniger Speicher. Man kann die Zeichen (8×8 Pixel) schnell auf Karopapier entwerfen und im Assembler Quelltext codieren. Gleiches gilt für die Spielfelder. Man kann sich das Leben aber durchaus noch etwas bequemer machen, indem man entsprechende Software nutzt.

Ich nutze den schlanken Ascraeus Font Editor, um den Zeichensatz zu ändern. Quelle: http://www.symbolengine.com/index.php/2007/03/12/ascraeus-font-editor-v12/.

Die Spielfelder kann man dann hervorragend mit dem Tiled Map Editor entwerfen, den es sowohl in mehreren Binärversionen und auch in einer Java Version gibt. Zu finden ist er hier: http://www.mapeditor.org

Nur zum Thema Sound bleibe ich erstmal beim C64 selbst und nutze den Sound Editor, den Chris Hülsbeck 1986 in der 64er veröffentlicht hat.

Und was habe ich denn nun konkret gebaut? Eine Grafikroutine, die ich zu einem kleinem RPG ausbauen möchte, falls es meine Zeit erlaubt. Details folgen…