Atari ST Emulator steem
 

In diesem Beitrag geht es um den Atari ST-Emulator steem, bzw. seine Linux-Variante xsteem. Wer sich noch an alte Zeiten erinnert, der Atari ST erfreute sich damals unter Musikern großer beliebtheit, da er von Haus aus mit einer MIDI-Schnittstelle ausgerüstet ist. Wer nicht weiß, was das ist:
MIDI steht für Musical Instruments Digital Interface und beschreibt eine Schnittstelle zwischen Computern und elektronischen Musikinstrumenten. Diese Schnittstelle überträgt keine Audio-Daten, sondern lediglich Midi-Befehle in serieller Abfolge. Ein Standard-Midi Befehl ist z.B. welche Taste an einem Keyboard gedrückt wurde und mit welcher Intensität diese Taste gedrückt wurde. Zusätzlich können auch noch viele weitere Befehle übertragen werden, z.B. von Fußpedalen oder Pitch-Wheels. Damit ist es möglich Musikstücke in einem Computer aufzunehmen und diese nachträglich noch zu bearbeiten. Hat man z.B. daneben gegriffen, kann man überflüssige Noten löschen oder falsche Noten in der Tonhöhe verschieben oder sogar zeitlich an die korrekte Position schieben. Man kann auch Noten "von Hand" eingeben und so einen absolut sauberen Schlagzeugtakt programmieren. Das eröffnet ungeahnte, kreative Möglichkeiten für eigene Musikproduktionen. Leider ist der Atari ST in Computerbegriffen aus der Steinzeit, da er aus den Anfängen der Heimcomputer stammt und damit ist er hoffnungslos veraltet. Sollte er kaputt gehen, wird es extrem schwer bis unmöglich Ersatzteile zu finden. Hier bietet sich der Atari ST-Emulator steem an, der einen kompletten Atari ST simulieren kann. Alles was man dafür benötigt ist das Programm und ein sogenanntes TOS-Image. Das TOS (The Operating System) ist das Betriebssystem des Atari ST.

steem und xsteem installieren

Weder steem noch xsteem benötigen eine Installation. Unter steem.atari.st kann man sich die benötigten Dateien entweder als Zip-Archiv (windows) oder als tar-Archiv (Linux) runterladen. Man entpackt die Archive in ein Verzeichnis freier Wahl und kann sofort loslegen. Vorher sollte man natürlich noch das TOS-Image in den steem-Ordner kopieren. Wer wie ich noch einen eigenen Atari ST besitzt, kann auch mittels des Programms tosdump ein eigenes TOS-Image erstellen. Dazu muß man das Programm TOSDUMP.PRG auf dem Atari ausführen. Außerdem empfiehlt es sich einen Floppy-Ordner und -falls gewünscht- einen Festplatten-Ordner anzulegen. Ich habe meine Ordner schlicht mit floppy-a und harddisk-c betitelt. Mittels des Floppy-Ordners kann man auf Floppy-Images zugreifen, während man in den Festplatten-Ordner direkt Atari_ST Dateien ablegen kann.

Nach dem Start von xsteem präsentiert sich dieses Fenster:

xsteem-pic01.jpg

Mittels Continue wird der Assitent von xsteem gestartet, der einen durch die wichtigsten Einstellungen führt und gleich mal nach dem TOS-Image fragt.

xsteem-pic02.jpg

Nachdem wir das Image ausgewählt haben, müssen wir den für unsere Disketten vorgesehenen Ordner angeben, in meinem Fall floppy-a.

xsteem-pic03.jpg

Danach folgt die Angabe ein oder mehrerer Festplatten-Ordner.

xsteem-pic04.jpg

Nach diesen wenigen Schritten ist xsteem eingerichtet und bereit für den ersten Start.

xsteem-pic05.jpg

Dieser sieht so aus:

xsteem-pic06.jpg

Nach einem Klick auf das gelbe Play-Dreieck, startet unser virtueller Atari ST und die Maus ist im Atari-Fenster gefangen.

xsteem-pic07.jpg

Um die Maus wieder aus dem Fenster zu befreien, dient die Pause/Untbr-Taste. Die kleinen Symbole oberhalb des Fensters sind selbsterkärend, bzw. wenn man mit der Maus drüber fährt, poppt deren Bedeutung auf. Eines der wichtigsten Icons ist der Schraubenschlüssel. Öffnet er doch das Konfigurations-Menü von xsteem.

xsteem-pic08.jpg

Ein Hinweis zum Atari-Desktop: wenn man einen Atari ST -sei es jetzt virtuell oder real- abstartet, durchsucht er die angeschlossenen Laufwerke wie Floppys oder Festplatten nach bootbarem Material. Daher wird bei einem fehlenden Floppy-Image von xsteem ein leeres Standard-Image im Floppy-Ordner abgelegt, welches eine leere Diskette simuliert, damit es beim Start keine Verzögerung gibt, weil der Atari nach einer Floppy sucht. Bindet man nun sein eigenes Floppy-Image ein oder kopiert Atari-Dateien in den Festplatten-Ordner und enthält eines von beiden eine sogenannte DESKTOP.INF, wird der Desktop anhand den Informationen dieser Datei aufgebaut. Besagen die Informationen daß nur ein Floppy-Icon erstellt werden soll, fehlt -obwohl eingerichtet- das Icon für die Festplatte C. In dem Fall ist es sinnvoll entweder die DESKTOP.INF zu löschen oder sich die gewünschte Desktop-Umgebung einzurichten und unter "Extras" auf "Arbeit sichern" zu klicken, denn dann wird eine neue DESKTOP.INF des momentanes Desktops geschrieben. Sollte das Harddisk-Icon durch eine vorhergehende DESKTOP.INF fehlen, kann man es ganz einfach neu erstellen in dem man auf ein Floppy-Laufwerk klickt und im Menü "Extras" auf "Floppy anmelden..." klickt. Anschließend einfach den Laufwerksbuchstaben C und die Bezeichnung für das Laufwerk vergeben.

Atari-Disketten kopieren

Um AtariST Disketten unter Linux zu lesen, benötigt man die Pakete mtools und fdutils. In letzterem Paket steckt der Befehl setfdprm, welchen wir für die korrekte Zuweisung des Disketten-Formats brauchen.

Vorher noch ein Hinweis: Atari Disketten verwenden fast das gleiche Format wie FAT, schreiben aber eine andere Kennung in den Startsektor, was das Programm mtools verwirren kann. Daher muß man vorher die Überprüfung des Diskettenformats abschalten. Leider konnte ich bei mir trotz der Abschaltung nicht jede Diskette lesen die unter dem Atari ST formatiert wurde. Daher mußte ich einen kleinen Umweg gehen, aber dazu gleich mehr. Fangen wir erst einmal mit dem grundsätzlichen Vorgehen an:

Um die Überprüfung des Diskettenformats abzuschalten, muß man in der Konfigurations-Datei von mtools /etc/mtools.conf folgenden Eintrag tätigen:
MTOOLS_SKIP_CHECK=1
Anschließend gibt man das Format auf der Konsole mit dem setfdprm-Befehl an:
# setfdprm /dev/fd0 "720/720"
Nun sollte man mit zwei Befehlen auf die Atari-Disketten zugreifen können:
# mdir a:                  - zeigt den Inhalt der Diskette an.
# mcopy a:*.* .       - kopiert sämtliche Dateien in das aktuelle Verzeichnis. Leider wird durch den Platzhalter-Ausdruck *.* keine Ordner mitkopiert, da die ja keine Endung enthalten.

Wie schon erwähnt, konnte mein PC mit Debian lenny trotz der Einstellungen manche Atari-Disketten nicht lesen, während andere ohne Probleme funktionierten, was vermutlich an der Formatierung lag. Disketten die ich unter dem PC im 720KB-Format formatiert hatte, konnten von beiden Geräten -Atari und PC- gelesen werden, während manche im Atari formatierte Disketten im PC trotz der Einstellungen in den mtools streikten. Die Lösung ist simpel, aber bei vielen Dateien pro Diskette arbeitsaufwendig: Man muß die Dateien innerhalb des Atari auf eine MS-DOS-formatierte Diskette umkopieren und kann so die Dateien für den PC lesbar machen. Möchte man von einer Atari-Diskette ein Image im PC machen, hilft der Linux-Befehl dd, welcher bitgenaue Kopien von Datenträgern ermöglicht. Natürlich muß die Diskette im PC lesbar sein. Ist das der Fall erstellt der folgende Befehl ein Disketten-Image:
# dd if=/dev/fd0 of=image.st


Zum Abschluß noch etwas für Musiker:

xsteem über eine virtuelle Midi-Schnittstelle mit QSynth (fluidsynth) verbinden
(unter Debian bullseye, Stand 30.05.2024)

Unter Linux gibt es den Software Synthesizer fluidsynth und QSynth ist eine grafische Oberfläche für selbigen. Dieser kann eine Fülle von Sounds zur Verfügung stellen, welche man -vorrausgesetzt man hat eine Midi-Sequenzer Software für den Atari- mittels eines Midi-Sequenzers mit unserem virtuellen Atari ST abspielen kann. Dazu muß man beide Programme mittels eines virtuellen Midi-Kabels und einer virtuellen Midi-Buchse verbinden. Dazu installieren wir erstmal QSynth, starten es ab und richten es ein:
# apt-get install qsynth
Nach der Installation und abstarten von QSynth tut sich erstmal gar nichts, da wir noch keine Sounds ausgewählt haben und ein paar Einstellungen tätigen müssen.

QSynth_Einstellungen_01.jpg

Nach öffnen der Einstellungen wählen wir unter dem Reiter "MIDI" als MIDI-Treiber alsa_seq aus und aktivieren den MIDI-Eingang.

QSynth_Einstellungen_02.jpg

Im Reiter "Audio" wählen wir pulseaudio als Audiotreiber aus (pulseaudio ist seit Debian 6.0 squeeze standard in Debian-Distributionen).

QSynth_Einstellungen_03.jpg

Unter dem Reiter "Soundfonts" öffnen und laden wir eine der drei standardmäßig installierten Soundfonts.
Anschließend starten wir mit Hilfe des Buttons "Neu starten" QSynth neu und haben hoffentlich dieses Bild:

QSynth_klein.jpg

QSynth ist gestartet und bereit Klänge abzuspielen. Jetzt müssen wir nur noch eine virtuelle MIDI-Buchse für unseren virtuellen Atari ST erstellen und diese mit QSynth verbinden. Dazu lädt man mittels modprobe ein virtuelles MIDI-Device:
# modprobe snd-virmidi snd_index=1
Es gilt zu beachten daß das virtuelle MIDI-Device nur temporär geladen wird und nach einem Neustart wieder weg ist. Möchte man daß es dauerhaft beim Systemstart geladen wird, muß man es in die Datei /etc/modules eintragen:
# echo "modprobe snd-virmidi snd_index=1" >> /etc/modules

Nach abstarten unseres virtuellen Ataris können wir unter dem Schraubenschlüssel Symbol in dem Reiter "Ports" das virtuelle MIDI-Device auswählen. Sollte man kein anderes MIDI-Gerät angeschlossen haben, ist es eventuell etwas leichter es zu identifizieren, da es unter /dev/ vermutlich nicht soviele verschiedene Device-Namen gibt.
# ls -l /dev/ | grep midi
crw-rw----+ 1 root audio 14, 30 30. Mai 02:35 admmidi1
crw-rw----+ 1 root audio 14, 29 30. Mai 02:35 amidi1
crw-rw----+ 1 root audio 14, 25 30. Mai 02:35 dmmidi1
crw-rw----+ 1 root audio 14, 18 30. Mai 02:35 midi1

Hier war das /dev/midi1 das Richtige. Im Falle von mehreren MIDI-Devices wird es da schon schwieriger, da man mit Hilfe von Linux Befehlen leider nicht sagen kann, welcher Device-Name welchem MIDI-Gerät zugeordnet ist. Man kann sich lediglich mit mehreren verschiedenen alsa-Befehlen sämtliche Devices mit IDs auflisten lassen und Anhand der Reihenfolge der Geräte vermuten, daß die Devices unter /dev/ diesselbe Reihenfolge in der Nummerierung (midi, midi1, midi2, etc) haben (war zumindest bei mir bisher immer so). Hier ein paar Beispiele für Befehle um sich Informationen über die verbaute Sound-Hardware zu verschaffen:

$ aconnect -l

client 0: 'System' [type=Kernel]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=Kernel]
    0 'Midi Through Port-0'
client 16: 'Steinberg UR824' [type=Kernel,card=0]
    0 'Steinberg UR824 MIDI 1'
client 20: 'UM-ONE' [type=Kernel,card=1]
    0 'UM-ONE MIDI 1   '
	
$ amidi -l
Dir Device    Name
IO  hw:0,0,0  Steinberg UR824 MIDI 1
IO  hw:1,0,0  UM-ONE MIDI 1
$ cat /proc/asound/cards
 0 [UR824          ]: USB-Audio - Steinberg UR824
                      Yamaha Corporation Steinberg UR824 at usb-0000:0b:00.3-4, high speed
 1 [UMONE          ]: USB-Audio - UM-ONE
                      Roland UM-ONE at usb-0000:06:00.1-4, full speed
 2 [NVidia         ]: HDA-Intel - HDA NVidia
                      HDA NVidia at 0xfc080000 irq 101
 3 [Generic        ]: HDA-Intel - HD-Audio Generic
                      HD-Audio Generic at 0xfcb00000 irq 103
Noch ein Hinweis: Sollten diese Befehle fehlen, hilft es das Paket alsa-utils zu installieren.

xsteem_MIDI_Einstellungen.jpg

Nachdem wir das MIDI-Device ausgewählt haben müssen wir es mit Klick auf den Button "Open" noch öffnen. Nun ist der Atari bereit MIDI-Signale zu senden und wir müssen lediglich noch unsere virtuelle "Strippe" ziehen. Dafür brauchen wir noch die korrekten Nummern, welche wir mit dem Befehl aconnect -l herausfinden können:
# aconnect -l

client 0: 'System' [type=Kernel]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=Kernel]
    0 'Midi Through Port-0'
client 20: 'Virtual Raw MIDI 1-0' [type=Kernel,card=1]
    0 'VirMIDI 1-0     '
client 21: 'Virtual Raw MIDI 1-1' [type=Kernel,card=1]
    0 'VirMIDI 1-1     '
client 22: 'Virtual Raw MIDI 1-2' [type=Kernel,card=1]
    0 'VirMIDI 1-2     '
client 23: 'Virtual Raw MIDI 1-3' [type=Kernel,card=1]
    0 'VirMIDI 1-3     '
client 128: 'FLUID Synth (46696)' [type=User,pid=46696]
    0 'Synth input port (46696:0)'
Wie wir sehen hat das virtuelle MIDI-Device die client-Nummer 20 und QSynth 128. Mittels
# aconnect 20:0 128:0
stellt man die Verbindung her, was man auch unter aconnect -l überprüfen kann:
# aconnect -l
client 0: 'System' [type=Kernel]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=Kernel]
    0 'Midi Through Port-0'
client 20: 'Virtual Raw MIDI 1-0' [type=Kernel,card=1]
    0 'VirMIDI 1-0     '
        verbunden zu: 128:0
client 21: 'Virtual Raw MIDI 1-1' [type=Kernel,card=1]
    0 'VirMIDI 1-1     '
client 22: 'Virtual Raw MIDI 1-2' [type=Kernel,card=1]
    0 'VirMIDI 1-2     '
client 23: 'Virtual Raw MIDI 1-3' [type=Kernel,card=1]
    0 'VirMIDI 1-3     '
client 128: 'FLUID Synth (36541)' [type=User,pid=36541]
    0 'Synth input port (36541:0)'
        verbunden von: 20:0

Das war es auch schon und wir können im Atari ST ein Sequenzer-Programm abstarten, Noten eingeben und diese zum abspielen an den QSynth senden. Übrigens findet man eine Übersicht aller Sounds und deren zugehörige MIDI-Kanäle unter dem Button "Kanäle" in QSynth.
Und noch ein Hinweis: schließt man QSynth verschwindet auch der MIDI-Port mit der client Nummer 128 und die virtuelle Verbindung ist auch wieder weg. Man muß also bei jedem schließen und erneutem abstarten von QSynth das virtuelle Kabel erneut verbinden.