Retro & Emulation

Retrokonsolen programmieren: Teil 1 Atari Lynx

Retro ist nach wie vor in - warum also nicht für alte Konsolen programmieren? Unser Ben hat sein Herz an den Atari Lynx verloren und zeigt, wie es geht.

Einmal ein Spiel für eine Konsole programmieren ist ein Traum von Euch? Ja? Dann zeigen wir euch einen Einstieg in die Welt der Programmierung. Zwar beginnen wir mit einer simplen 8bit Konsole, jedoch wird euch das Ergebnis trotzdem stolz machen. In dieser Tuto-Reihe zeigen wir euch wie man einfache Programmierungen auf Ataris einziger Handheldkonsole, dem Lynx, bringt und nebenbei noch die Programmiersprache C lernt!

Die Konsole: Atari Lynx

Die älteren von Euch kennen sicherlich noch den Konsolen-Pionier Atari, der mit seinem VCS 2600 für große Erfolge stand. Ende der Achtziger-Jahre erschufen die Ingenieure des Konsolenherstellers zusammen mit Epyx Entertainment (Summer Games und Gauntlet) eine Handheld-Konsole, die zumindest technisch den Nintendo GameBoy in die Tasche steckte: Den Atari Lynx. Beleuchteter Farbbildschirm, auf Knopfdruck drehbar für Linkshänder und eine flotte CPU. Jedoch hatte das Gerät einige Nachteile, die den technischen Vorteil verschwinden ließen: 1) kein Jump’n’Run (bzw. kein Maskottchen was es mit Sonic oder Mario aufnehmen konnte), 2) wenige Spiele von Drittherstellern (lediglich 73 Spiele erschienen von 1989 – 1995), c) hohe Kosten und d) ein enormer Verschleiß von Batterien (6 AA-Batterien in knapp 4-5 Stunden, dem beleuchteten Farbdisplay sei Dank…)

Wer sich einen Eindruck vom Atari Lynx verschaffen will, dem empfehlen wir die Videos des großartigen Ashens:

Die Entwicklungsumgebung

Ende der 90er Jahre wurde die Plattform geöffnet und der Rechteinhaber erlaubte die Veröffentlichung von selbst entwickelten Spielen. Durch die verwendete CPU kann ein gewöhnlicher Compiler genutzt werden, um Software für den Handheld zu entwickeln. Hierbei bietet sich der Open Source C-Compiler CC65 an, der direkt eine Bibliothek mit spezifischen Befehlen für den Lynx mitbringt.

Unter Windows 10 sollte man dazu vorher die Cygwin Umgebung installieren. Diese bringt eine Unix-artige Umgebung mit, in der wir die eigentliche Entwicklungsumgebung installieren. Wählt bei der Installation folgende Pakete aus:

  1. gcc-core
  2. git
  3. make

Falls Ihr die Pakete nicht findet, hilft Euch die Suchfunktion des Installers weiter.

Mit einem Klick auf das Cygwin Icon starten wir die dazugehörige Kommandozeile. Nun laden wir die Lynx-Entwicklungsumgebung herunter.

git clone https://bitbucket.org/atarilynx/lynx.git

Linux- und Mac-Anwender können sich die Installation von Cygwin sparen und direkt die Entwicklungsumgebung installieren.

Da diese nur als Quellcode vorliegt, müssen wir den CC65 Compiler mitsamt Bibliotheken für die 6502er CPU sowie die Lynx-spezifischen Teile kompilieren und installieren.

cd lynx/tools/cc65make -f make/gcc.makmake -f make/gcc.mak install

Die Installation ist nun abgeschlossen und wir können das erste kleine Programm schreiben. Um das selbst entwickelte Programm zu testen, benötigen wir entweder die Atari-Lynx-Hardware und einen SD-Karten-Adapter, oder wir testen es in einem Emulator auf dem PC oder dem Mac, oder wir bauen uns eine kleine Retro Spielkonsole mit einem Raspberry Pi. Da sich diese Emulatoren häufig in der Grauzone befinden, empfehle ich hier den Emulator Handy.

Das „Hallo, Welt!“ für Atari Lynx

Navigiert nun in das Stammverzeichnis von Cygwin (C:/cygwin86/home/NUTZERNAME/). Legt darin nun eine leere Textdatei mit dem Namen spiel.c an. Mit einem einfachen Texteditor (hier sei euch unter Windows Notepad++ an Herz gelegt) kopiert ihr nun folgenden Text in die Datei und speichert diese ab.

// Standard Bibliotheken mitsamt Befehlen laden
#include <lynx.h>
#include <tgi.h>
#include <joystick.h>
#include <6502.h>

// hier liegt das Hauptprogramm
int main()
{
//Initialisiert den Lynx (Bildschirm, Joypads)
joy_install(&lynx_stdjoy);
tgi_install(&lynx_160_102_16);
tgi_init();
CLI();

//in dieser Schleife liegt das Spiel
while (tgi_busy());
tgi_clear();
tgi_setcolor(COLOR_RED);
tgi_outtextxy(10, 10, "Hallo, Welt");
tgi_updatedisplay();
while (1)
;
return 1;
}

Alle Aktionen werden innerhalb der while-Schleife durchgeführt, die mit tgi_busy() aktiv gehalten wird. Das heißt, alles das was das Programm machen soll, schreiben wir hier rein. Diesmal ist es recht einfach: Schreibe in Rot „Hallo, Welt“ an die Stelle 10,10 im Display (mehr dazu im kommenden Tuto).

Um die Datei für den Lynx oder den Emulator Eurer Wahl ausführbar zu machen, öffnen wir wieder die Cygwin-Kommandozeile. Mit dem Befehl ls könnt Ihr Euch den Inhalt des aktuellen Ordners unter Unix anschauen. Liegt Euer Skript main.c direkt im Ordner C:/cygwin86/home/NUTZERNAME/, müsst Ihr das Verzeichnis nicht wechseln.

Liegt es beispielsweise im Ordner C:/cygwin86/home/NUTZERNAME/Lynx gebt ihr in Cygwin cd Lynx ein. Unter Linux oder auf dem Mac springt Ihr mit cd direkt an den Ort, wo euer main.c-Skript liegt.

Seid Ihr im richtigen Ordner angekommen müsst ihr den Compiler starten und das Skript in eine Lynx-Cartridge Datei umwandeln. Dies geschieht aus Cygwin mit dem Befehl:

cl65 -t lynx -o main.lnx main.c

Dies sagt dem Compiler cl65, dass er eine Lynx Datei schreiben soll (-t lynx), die den Namen main.lnx tragen soll und deren Quellcode in der Datei main.c steht.

In Eurem Verzeichnis erscheint nun die Datei main.lnx die ihr auf eurem Lynx oder dem passenden Emulator abspielen könnt. In den kommenden Tutos bauen wir Grafik und auch Sound in das Programm ein, sodass ein einfaches Spiel von Euch geschrieben werden kann.

Atari Lynx programmieren
Ihr wollt Eure eigenen Spiele für den Atari Lynx schreiben? Können wir voll und ganz verstehen ;)

Übrigens: Wenn Ihr einen Lynx besitzt, gibt es eine Menge Hard- und Software dafür zu erstehen.

Benjamin Mewes

Technikbegeistert und programmieraffin seit den wilden Jugendtagen (QBasic, Delphi, R, Python, Fortran 77, Java). Heim-Automatisierung mit HomeKit und alles rund um macOS und iOS sind meine Steckenpferde!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Schaltfläche "Zurück zum Anfang"
Schließen

Ooopsi!

Bitte deaktiviere Deinen Adblocker.