XMAME/XMESS DOKUMENTATION: Übersetzen, Einrichten und Starten von XMame/XMess
Weiter Zurück Inhalt

2. Übersetzen, Einrichten und Starten von XMame/XMess

Anmerkung: Dieses Kapitel ist kein Unix Handbuch. Du benötigst einige Grundkenntnisse von Unix-Befehlen um XMame/XMess übersetzen und installieren zu können.

2.1 Voraussetzungen

  • GNU make ist zwingend ERFORDERLICH auf ALLEN Systemen, selbst wenn ein anderer Compiler als gcc verwendet wird.
  • Auf allen Plattformen wird nun die zlib benötigt, seit die DOS-Version dies macht. Wenn Du keine zlib hast, dann kannst Du die abgespeckte Version benutzen, die bei XMame mit dabei ist. Siehe FAQ: Warum bekomme ich "get gz_open symbol not found" beim Übersetzen ? und FAQ: Warum bekomme ich "zlib.h not found" ?
  • Du solltest die die GNU Entwicklungsumgebung nutzen: gcc, gmake und gnu-ar. Viele Probleme tauchen durch die sehr nachlässige Syntax in gcc auf. Wenn Du also einen Compiler mit strictly ANSI C verwendest, dann werden viele Warnungen auftreten und, falls die Version von XMame/XMess noch nicht voll debugged ist, auch Übersetzungsfehler.
  • Das Übersetzen von XMame schlägt fehl, wenn egcs-1.1.x oder gcc-2.95 benutzt wird. Verwende den Schalter -fno-strict-aliasing um das zu Beheben. Gcc-2.95.1 funktioniert mit -fstrict-aliasing und bringt netterweise etwas höhere Geschwindigkeit. 
  • Das Übersetzen von XMame schlägt auch fehl, wenn unter Red Hat 7 der neueste Update von gcc eingespielt ist (vom 16. Januar 2001). Wenn Probleme auftreten, dann ersetze den Compiler wieder mit der Version, die auf den CD's von Red Hat 7 mitgeliefert wurde oder ersetze im Makefile "gcc" mit "kgcc". Letzteres nutzt dann den egcs-1.1.2. (Siehe auch die Info zum Flag -fstrict-aliasing).

2.2 Schritt-für-Schritt Anleitung zum Übersetzen von XMame/XMess

  1. Siehe Betriebssystemabhängige Anmerkungen beim Übersetzen für plattformabhängige Informationen zum Übersetzen.
  2. Siehe Kommentare und Anmerkungen speziell für die grafische Ausgabe für Informationen zu speziellen Grafikausgaben.
  3. Lade den Sourcecode von XMame/XMess herunter.
  4. Verschiebe den Sourcecode in ein passendes Arbeitsverzeichnis. Wenn Du das Archiv auspackst, dann werden unter dem Arbeitsverzeichnis neue Unterverzeichnisse angelegt.
  5. Benenne das Source-Archiv um, damit die Endung .gz ist. Zum Beispiel ändere xmame-0.34b1.1.tgz in xmame-0.34b1.1.tar.gz
  6. Benutze gzip -d um das Archiv zu entpacken. Versuche beispielsweise:
    gzip -d xmame-0.34b1.1.tar.gz
     
  7. Extrahiere die Dateien mit tar. Tippe beispielsweise ein:
    tar xvf xmame-0.34b1.1.tar
    
  8. Wechsle nach dem entpacken des Archives in das Unterverzeichnis, dass beim Entpacken anglegt wurde. So wurde z.B. nach dem Entpacken von  xmame-0.34b1.1.tar ein Verzeichnis mit dem Namen xmame-0.34b1.1 angelegt. Wechsle dort hinein. Dieses Verzeichnis ist die Wurzel des Sourcen-Baumes.
  9. Kopiere makefile.unix zu Makefile. Das mitgelieferte Makefile wird zur Entwicklung benutzt und ist kein guter Ausgangspunkt !
  10. Editiere das Makefile und ändere die Einstellungen, die Dein System betreffen. Der Standard im  makefile.unix ist voreingestellt um unter X11/Linux zu laufen. Bitte vorsichtig sein beim Editieren dieser Datei.
    • Wenn Du vor hast, X11 Joystickunterstützung zu Übersetzen, dann tippe folgendes ein um die vorhandene Xdevice Liste zu erhalten:
      make xlistdev; ./xlistdev
        
      
    • Wähle das gewünschte Device aus und editiere das Makefile nochmals umd bei der Option X11_JOYNAME das korrekte Device einzutragen.
  11. Übersetze XMame/XMess mit dem Befehl:
    make
     
  12. Wenn das Übersetzen fehlschlägt, dann berichte dieses Problem an den Author.
  13. *** DU MUSST ROOT-RECHTE HABEN UM DIESEN SCHRITT AUSZUFÜHREN ZU KÖNNEN ***  
    Um XMame/XMess zu installieren, gib folgendes ein:
    make install
     
  14. Nun kannst Du XMame/XMess für andere Anzeigearten übersetzen. Wenn dies nicht gewünscht, dann einfach diesen Schritt übergehen.
    1. Wenn Du also für eine anderes Ziel übersetzen willst, dann wiederhole die Schritte " make" und " make install" und füge dabei " TARGET=<target>" zum Kommando make hinzu. Beispiel:
      make TARGET=mess
      make install
        
      
    2. Wenn Du für eine andere Anzeigeart übersetzen willst, dann wiederhole die Schritte " make" und " make install" und füge dabei " DISPLAY_METHOD=<method>" zum Kommando make hinzu. Beispiel:
      make DISPLAY_METHOD=svgalib
      make install
        
      
    3. Du kannst auch die beiden Möglichkeiten von oben kombinieren. Beispiel:
      make TARGET=mess DISPLAY_METHOD=svgalib
      make install
        
      
  15. Lege in Deinem Home-Verzeichnis ein Unterverzeichnis namens .xmame an.
  16. Aus dem Source-Verzeichnis von XMame kopiere die Datei doc/xmamerc.dist nach ${HOME}/.xmame/ . (Für XMess natürlich xmessrc)
  17. Falls bevorzugt kopiere xmamerc.dist in den global gültigen Platz als "xmamerc" (für XMess kopiere die xmamerc.dist zu xmessrc). Der global gültige Platz für xmamerc wird im Makefile definiert.
  18. Editiere ${HOME}/.xmame/xmamerc und passe sie an die Einstellungen an. (Für XMess, editiere ${HOME}/.xmess/xmessrc)
  19. Vergewissere Dich, dass die Umgebungsvariablen DISPLAY und PATH richtig gesetzt sind.
  20. Vergewissere Dich, dass Deine ROM's installiert sind.
  21. Starte das X-Window System. (Wenn Du XMame/XMess für eine andere Anzeigeart übersetzt hast kann dieser Schritt ggf. entfallen.)
  22. Starte XMame/XMess. Beispielsweise:
    /usr/games/xmame.x11 dkong
     
    

2.3 Bei Problemen beim Übersetzen, Einrichten und Starten von XMame/XMess...

Wenn das alles nichts hilft, dann schicke eine Mail an den derzeitigen Koordinator des von XMame/XMess Projektes. Siehe Mail für nährere Informationen.

2.4 Betriebssystemabhängige Anmerkungen beim Übersetzen

Linux i386

Linux i386 ist die Plattform, die ich (Hans) benutze. XMame sollte also ohne Probleme unter Linux i386 zu Übersetzen sein (Anmerkung: dies gilt auch für Lawrence Gold).

Einige Fehler tauchten beim Benutzen von gcc27x auf und konnten behoben werden. Bitte egcs benutzen falls vorhanden. Wenn noch mehr Fehler in gcc auftauchen sollten, dann wird egcs zwingend werden. Aber ich hoffe, dass das nicht notwendig ist.

Es wurde berichtet, dass einige SoundBlaster AWE32 und VIA-82cxxx (OnBoard) Karten nicht korrekt mit get_freespace() umgehen können. Wenn dem so ist, dann werden einige Meldungen bzgl. audio_ioctl() failed in der Konsole auftauchen und, wenn alles richtig läuft, eine Meldung, dass XMame/XMess auf timer-basierte Soundunterstützung zurückfällt. Wenn dies nicht automatisch passiert und der Sound trotzdem nicht korrekt klingt, dann versuche XMame/XMess zur timer-basierten Soundausgabe zu zwingen mit dem Schalter -timer.

SB64/128PCI Karten (Ensoniq 137x-basierende Karten) können ebenfalls get_freespace() nicht richtig handeln. Unglücklicherweise tauchen keine Meldungen bzgl. audi_ioctl() auf. Diese Karten ignorieren die Aufrufe einfach. XMame versucht diese Karten automatisch zu erkennen und setzt dabei auf timer-basierte Soundunterstützung zurück. Wenn dies nicht automatisch funktioniert und der Sound nicht korrekt klingt, dann versuche XMame/XMess zur timer-basierten Soundausgabe zu zwingen mit dem Schalter -timer.

Einige Leute haben berichtet, dass sie bei ALSA mit OSS-Emulation erfolgreich waren (siehe http://www.alsa-project.org/ ). Wenn obige Probleme auch bei Dir auftauchen, dann kann dies möglicherweise einen Versuch wert sein. 

Zusätzlich habe ich das PC-Speaker Modul getestet. Es funktioniert !! Aber es benötigt ebenfalls -timer. Nochmals, dies sollte automatisch passieren. Wenn nicht, dann weisst Du ja nun was zu tun ist.

Distributionsabhängige Kommentare:

  • S.u.S.E. Linux: Neben dem gcc Compiler und den Libraries libc, beide aus der Serie "d", müssen noch andere Pakte installiert sein oder das Übersetzen wird fehlschlagen. Beim Übersetzen für die SVGAlib wird das Paket svgalib aus der Serie "d" benötigt. Wenn für das X-Window System übersetzt wird, dann muss das Paket xdevel aus der Serie "x" installiert sein. Diese Pakete können mit dem Tool "yast" installiert werden, dass bei der S.u.S.E. Distribution dabei ist.
  • Red Hat Linux ist das Betriebssystem, dass vom Author benutzt wird. XMame/XMess sollten sich beide korrekt unter Red Hat Linux übersetzen lassen ;-)

Linux PowerPC

Linux PowerPC sollte von nun an funktionieren. Hier ist eine Mail von Andreas Varga sid@skater.htu.tuwien.ac.at, dem Entwickler für Linux/PowerPC, die die notwendigen Schritte beschreibt:   

Notwendige Änderungen um XMame 0.34b3.1 auf Linux/PowerPC mit SVGALIB zu übersetzen.

Makefile:

  • aktiviere CFLAGS für Linux/PPC
  • aktiviere DISPLAY_METHOD = svgalib
  • aktiviere ARCH = linux
  • entferne -lvgagl von LIBS.svgalib in src/unix/unix.mak (nur -lvga wird benötigt)

Notwendige Änderungen um XMame 0.34b3.1 auf Linux/PowerPC mit X11 zu übersetzen.

Makefile:

  • aktiviere CFLAGS für Linux/PPC
  • aktiviere DISPLAY_METHOD = x11
  • aktiviere ARCH = linux

Etwas anderes... Sound funktioniert nicht, weil die Unterstützung von Soundtreibern bei Linux/PPC Kerneln noch in der Entwicklung ist. Es gibt einen alten Treiber, ein gehackter Soundblaster Treiber und neuere 2.1.1xx Kernel haben einen Soundtreiber, der auf Amiga DMA Soundtreiber basiert. Wenn diese Einschränkungen behoben sind, dann sollte ein vollwertiger OSS-kompatibler Soundtreiber zur Verfügung stehen.... dann sollte der Sound auch funktionieren.

Ich kann nichts über Joystick Unterstützung sagen ...

Die Änderungen im Übersetzungsziel Linux/PPC im Makefile stammen von mir selbst, aber es sind einige weitere Änderungen notwendig um es übersetzen zu können ... Von Oktober ab habe ich mehr Zeit um daran zu arbeiten, und ich werde euch regelmäßig informieren...

Cheers, Andreas

IRIX

Benutze die allgemeine Unix-Architektur für diese Maschinen, die keine Soundunterstützung installiert haben (XMame/XMess nutzt das dmedia Paket oder das neuere AL Paket auf IRIX Systemen).

Silicon Graphics unterstützt mehrere native Compiler. XMame/XMess wurden übersetzt und getestet mit dem normalen cc. Es gab einige Probleme, wenn -n32 für den neuen 32bit Code verwendet wird. Es funktioniert beim Benutzen von -o32 für den alten 32bit Code. Es sollte nun auch mit -n32 funktionieren und um Einiges schneller sein..

Die Benutzung von DCC ist (wieder mal) nicht empfohlen seit dies ein C++ Compiler ist. Das Übersetzen von XMame/XMess wird ohne Änderungen im Sourcecode nicht klappen wegen etlicher malloc Aufrufe. Das Ändern dieser Aufrufe würde einen verrückt machen, weil die Fehler auch im Core-Teil auftauchen, der aber von der DOS-Version kommt. Ganz nebenbei, Mame ist in normalen C geschrieben, deshalb bitte einen normalen C-Compiler verwenden.

Einige Probleme wurden gemeldet bei der Benutzung des GNU Linkers. Es ist besser, den Linker des Betriebssystems zu verwenden.

HPUX

Benutze bitte die allgemeine Unix Architektur (generic unix). In HP-UX sind gcc und gnu-Make VORAUSSETZUNG.

ULTRIX

Benutze bitte die allgemeine Unix Architektur (generic unix).

Anmerkungen von Danny dboxhoor@iso.vilspa.esa.es

SEHR WICHTIG !!!

Die Xmame/Xmess CPU-Emulatoren greifen auf Speicher durch Zeiger (Pointer) zu, die manchmal einen illegalen Speicherzugriffverursachen - soweit die MIPS CPU davon betroffen ist. DasUltrix Betriebssystem behebt diese "unerlaubten Datenzugriffe". 

In Abhängigkeit der Systemeinstellung, werden jede Menge Warnungen ausgegeben bei bestimmten Spielen. Diese Meldungen können  abgeschaltet werden, wenn man das Kommando "uac p 0" in derselben Shell eingibt, von der aus Xmame/Xmess gestartet wird.

UPDATE: Der neue Schalter -DALIGN_INTS im makefile.unix behebt diese unerlaubten Zugriffe im Sourcecode was natürlich vielschneller ist, als diesen Fehler im Kernel segfault handlerper Hotfix zu beheben.

Benutze GNU make.

Übersetze mit dem 'c89' Compiler. Obwohl gcc keine Probleme beimÜbersetzen und optimieren von Xmame/Xmess macht, ist dieausführbare Datei mit c89 übersetzt schneller auf einerunbelasteten Maschine (Xmame kann die ganze CPU und den ganzen Speicher benutzen, ohne mit anderen hochprioren Prozessen zukollidieren), somit kann "frameskip 1" gesetzt werden.

Wenn mit "c89 -O2" übersetzt wird, dann nicht vergessen,ebenfalls "-Olimit 1000 zu setzen. Wenn 1000 nicht genug ist,dann teilt der Compiler mit, daß der Wert erhöht werden muß.

SunOS & Solaris

Im Makefile sind zwei relevante Optionen für die verschiedenenArchitekturen vorhanden:

    ARCH = generic : dies ist für das alte SunOS auf den Sparcs, aber
                     eine Sparc mit Solaris darauf wird natürlich mit
                     dieser Option auch umgehen können
    ARCH = solaris : dies sollte man für Sparcs mit Solaris benutzen

Momentan wird kein Sound unterstützt unter SunOS. Die Solaris Architektur unterstützt Sound.

Wenn Sun's OpenWindows Implementation von X11 benutzt wird, dannmüssen die Variablen X11INC und X11LIB in der X11 Options Sektion des Makefiles korrekt gesetzt sein. (Es sind bereits Einträge fürdas Standard OpenWin-Verzeichnis vorhanden. Diese können auskommentiert werden).

Wenn natürlich für X11 übersetzt wird, dann müssen diese Variablen korrekt gesetzt sein, unabhängig von der X11-Implementation, dieverwendet wird ! :)

Wenn der SunPro cc Compiler von Sun verwendet wird, dann haben sichfolgende Flags zum Optimieren bewährt:

    OPTFLAGS    = -fast -xO4 -native

Es sind Fälle aufgetreten, bei denen die Übersetzung von Xmame am Program "ar" gescheitert ist. Die meisten Solaris Installationenhaben einen Satz Utilities die mit dem XPG4-Standard konform sind,üblicherweise im Verzeichins "/usr/xpg4/bin" zu finden. Die XPG4-Version von "ar" sollte wie eine Plage gemieden werden. Es mußsichergestellt werden, daß im Suchpfad "/usr/ccs/bin" vor demVerzeichnis "/usr/xpg4/bin" erscheint und alles sollte sauber laufen.

BITTE BEACHTEN: Derzeit gibt es nicht sonderlich viel Unterstützungfür SunOS/Solaris. Wenn ein Problem auftritt, versuche es selbstzu lösen. Wenn Du erfolgreich bist, sende eine Mitteilung an dieMailingliste mit den Angaben, was Du dafür getan hast. Wenn Dukeinen Erfolg hast, sende trotzdem eine Mitteilung an die Mailingliste und jemand _könnte_ Dir vielleicht helfen. Trotz alledem,dies ist der einzige Weg, wie Probleme mit Xmame unter SunOS/Solaris behoben werden können. 

Openstep

Du musst den gnumake von OpenStep benutzen, NICHT make. Ausserdem ist NeXT/Apple cc dem gcc vorzuziehen. Nur die Optimierung nutzen, die für OpenStep im Makefile vorgesehen sind, sonst wird die ausführbare Datei abstürzen. Der OpenStep Assembler ist auf i386-Architekturen nicht kompatibel mit dem Assemblercode von Mame. Deshalb muss die C-Version benutzt werden (benutze i386-noasm anstatt i386, wenn für i386 übersetzt wird).

Der mitgelieferte Compiler basiert auf dem gcc 2.7.2.1 und kann src/profiler.c nicht ohne Absturz übersetzen. Um dies zu Umgehen gehe folgendermaßen vor: Optimiereun abschalten, wenn der Fehler auftritt. Make für diese Datei nochmals ausführen und Make beenden. Optmierung wieder aktivieren und fortfahren.

Auf einer OpenStep Tastatur funktionieren die Funktionstasten nicht wie vorgesehen. Das Benutzen der Kommando-Taste in Verbindung mit einer Ziffern-Taste erzeugt eine äquivalente Funktionstaste innerhalb von XMame. Mit 0 , - und = + wird F10, F11 und F12 erzeugt. Bitte auch beachten, dass die Kombinationen ALT + Taste nicht gemapped werden können. Da die meisten Spiele dies als Feuertaste voreingestellt haben ist es extrem nützlich diese Tasten umzusetzen beim ersten Start von XMame.


Weiter Zurück Inhalt