Roland CPC Emulator

  • Nachdem ich eine Menge arbeit reingesteckt habe und der Emulator über 2 Jahre in der Ecke lag biete ich ihn nun völlig verspätet zum Download an. Die Version 0.5b2 ist eine stabile Version mit Einschränkungen im User Interface. Er ist eher sehr spartanisch ausgestattet. Aber CPC-Kenner benötigen eigentlich nicht mehr als dieser Emu kann.
    Was diesen Emulator von vielen anderen unterscheidet, ist die Tatsache, dass der gleiche Code (C/C++) unter Linux/Unix und Windows kompilierbar ist. Der Code hat ausser der SDL-Bibliothek keine weiteren Abhängigkeiten und ist unter Linux der beste und schnellste Emulator weit und breit. Die Kompatibilität mit Software im dsk-Format ist hervorragend. CP/M funktioniert einwandfrei.


    Ich habe nach langer Pause nun wieder Angefangen an einer neuen Version mit deutlich verbessertem UI, alternative OpenGL-Ausgabe und deutlich aufgeräumteren Code zu arbeiten. Eigentlich habe ich diese bessere Version schon vor über 2 Jahren fast fertiggestellt. Nun werde ich es zu Ende bringen. Zunächst steht nur die stable 05b2 Version zum download bereit. In Zukunft wird eine Alpha, Beta und das Release der 0.9er Version hinzukommen. Durch das Feedback dieser Versionen soll dann die Finale 1.0 an den start geh'n.


    An dieser Stelle noch einmal vielen Dank an Ulrich Doewich, dem Author von Caprice. Viele Teile seines Codes ist in Roland eingeflossen. Das meiste in "High-Performance" C++-Code umgewandelt. Ich habe zum großen Teil die Klassen-Struktur von C++ genutzt, aber in kritischen Teilen auf Pointer gesetzt und Vererbung vermieden...


    Hier der Link:
    http://community.fkweb.de/infu…_panel/download.php?did=2


    Wie schon gesagt: Ich bitte um Feedback. Hier oder unter dem angegebenem Link.

  • Wäre toll, wenn der Emulator auch unter Mac OS X funktionieren würde. Da das ja ein Unix ist, dürfte das doch nicht so schwer sein.


    Kompilieren lässt er sich übrigens problemlos, aber beim Starten bekomme ich nur ein "Segmentation Fault".

    Nilquader of SPRING

  • Da hast du recht, schwer sollte das nicht sein. Leider hab' ich keine Erfahrungen mit OSX.


    Kompilieren ist aber schon mal die halbe Miete. Da aus Geschwindigkeitsgründen sehr viel auf Bit Ebene abgearbeitet wird, stellt sich allerdings die Frage nach der Hardware auf der OSX läuft. Auf Intel-Hardware ist eine Anpassung leichter. Auf einem Power PC ist die Bit-Order soweit ich weiss big Endian. Auf x86-CPUs ist es little Endian.
    Mit etwas Glück kann man mit einer Anpassung der types.h schon was erreichen.Dann kommt da noch SDL als Fehlerquelle in Frage. Da direkt auf Bit Ebene in den Bildschirmspeicher geschrieben wird muss man auch dort wohl was anpassen.
    Leider habe ich kein OSX. So kann ich den Fehler leider nicht nachvollziehen. Ich kann also nur Vermutungen anstellen.


    Welche Hardware hast du?

  • Ich hab schon Intel - wollte ich eigentlich auch schon in meinem ersten Post erwähnt haben.


    Mit SDL habe ich ansonsten eigentlich keine Probleme. Andere Programme, die SDL nutzen, laufen problemlos.

    Nilquader of SPRING

  • Ich glaub' ich weiß woran es liegt. Die config-Datei kann nicht gefunden werden. Das führt zu sofortigem Absturz mit Segfault.


    In der Datei src/common/prefs.cpp


    muss mFilename einen OS X kompatiblen Wert bekommen.Ausserdem muss die Datei existieren. Am besten die Config aus dem Binary-Paket benutzen.


    Wenn man das obere gegen das hier austauscht könnte es funktionieren:

    Code
    char buf[NAME_MAX+1];
    		mFilename=getcwd(buf, NAME_MAX);
    		mFilename+=delim();
    		mFilename+=PACKAGE_NAME;
    		mFilename+=".cfg";


    Die roland.cfg Datei muss dann im gleichen Verzeichnis wie die Ausführbare Datei liegen. Vielleicht noch delim(); gegen "/" austauschen.


    Für den Notfall kann man den Pfad auch einfach hardcoden:

    Code
    mFilename="/Dir1/Dir2/roland.cfg";


    Kann das mal jemand probieren und Feedback geben?


    PS: Ich arbeite gerade daran OS X unter VirtualBox zum laufen zu bekommen. Dann kann ich auch 'ne OS X Version kompilieren und die entsprechenden Änderungen einbauen.

  • Der Mac hat eigentlich keine Probleme mit Dateien, die mit einem Punkt beginnen. Man kann sie halt nur nicht über die GUI erzeugen.


    Ich habe einfach mal eine .roland in meinem Homeverzeichnis angelegt, als Grundlage habe ich die roland-linux.cfg aus dem Binärarchiv genommen und die Pfade für die ROMs angepasst. Hat aber leider nichts geändert. Immer noch segfault. Wenn ich die Tage mal Zeit finde, werde ich nochmal kompilieren und dann den Pfag gleich hardcoden. Dann sollte man ja dahinter kommen, ob es daran liegt.


    An der Stelle könntest du echt noch eine Abfrage einbauen, ob das Öffnen geklappt hat und dann ggf. eine aussagekräftige Fehlermeldung ausgeben. oder gleich eine Config mit defaultwerten generieren.

    Nilquader of SPRING

  • Zitat von "Toad"

    Wie schon gesagt: Ich bitte um Feedback. Hier oder unter dem angegebenem Link.


    Salve Toad,


    Dein Roland ist mal richtig gut gelungen! Ganz großes Lob an Dich, und dass Du den Quelltext gleich mitlieferst finde ich ebenfalls klasse.


    Ich habe ihn gerade unter Linux kompiliert, musste dazu aber in ein paar Dateien ein "include <string.h>" einfügen, weil er über den memset-Befehl gestolpert ist. Dann hat aber alles funktioniert. Hab ihn sogleich mit ein paar Spielen getestet und muss sagen, ich bin einfach begeistert - scheint richtig gut zu funktionieren.


    Aaaaaaber... leider bekomme ich den Joystick nicht zum laufen.

  • Joystick ist tatsächlich nicht soo schwer zu implementieren. Werd' das mal nachholen. Bischen Geduld. :wink:

  • Zitat von &quot;Toad&quot;

    Joystick ist tatsächlich nicht soo schwer zu implementieren. Werd' das mal nachholen. Bischen Geduld. :wink:


    Salve Toad,


    Jepp, ich weiß, ich habe das selbst schonmal mit der SDL implementiert (ich programmiere in meiner Freizeit ein kleines Spielchen auf der Basis von OpenGL/SDL und habe das die letzten Tage eingebaut, weil ich mir auf eBay ein Gamepad ersteigert habe - deswegen auch die Frage).


    Und mach Dir mal meinetwegen keinen Stress, ich hab's nicht sooo eilig. Mittlerweile hab ich das mit F5 und der Joystickemulation auch kapiert.


    Tschöhö,
    René


    PS. Ach Gottchen, Fruity Frank ist immernoch geil *jubeljubelfreufreu*

  • Ein Posting aus einem anderen Forum, zur Info:


    Roland ist und bleibt ein Projekt das die Vergangenheit in die weite Zukunft trägt. Ich habe alle Voraussetzungen geschaffen dies zu ermöglichen. Im Roland-Code sind diverse andere Emulatoren nach C++ Evolution und Validierung auf Kompatibilitätssicherheit eingeflossen. Herausheben muss ich an dieser Stelle Caprice von Ulrich Doewich. Der Caprice-Code war der Zünder der mich dazu gebracht hat Roland zu entwickeln. Nach Studium der im Web erhältlichen Dokumente und Codes der anderen Emulatoren, sowie der eigenen CPC-Erfahrungen, war Caprice der herausragende Emulator unter Linux. Jedenfalls was den Code betrifft. Der momentane Code enthält allerdings nur noch sehr entfernt Ähnlichkeit mit Caprice, zumal Roland hauptsächlich in C++ geschrieben und sehr modular aufgebaut wurde. Ich habe großen Wert auf Modultrennung und Performance gelegt. Das Ergebniss, also Roland, ist auch auf einem 400 Mhz AMD K6-2 nutzbar (50FPS). Leider verbraucht er auf aktuellen PCs noch viel zu viel CPU-Zeit.


    Es gibt übrigens sogar zur Kompile-Zeit eine Assembler-Z80-CPU (Raze) zur Wahl. Diese konnte ich allerdings bis heute nicht synchronisieren und ist bis Dato schnell aber unbrauchbar.


    Quelle: <!-- m --><a class="postlink" href="http://cgboard.raysworld.ch/thread.php?threadid=19635">http://cgboard.raysworld.ch/thread.php?threadid=19635</a><!-- m -->


    PS: cgboard.raysworld.ch ist geil. CPC-Freunde werden sich dort wohl fühlen.

  • Gestern festgestellt: Ghost 'n Goblins läuft unter Roland verdächtig langsam.


    Lg, Peter

    Keine gute Tat bleibt unbestraft. (Ferengi Erwerbsregel Nr. 285)

  • Das erstaunt mich. Ist bei mir nämlich weder unter Linux noch unter Windows so.
    Seit einigen Tagen arbeite ich wieder an Roland. Ich mache ihn zukunftstauglicher und leichter wartbar.
    Ich stelle den Code gerade auf cmake um. Danach bekommt der eine Generalüberholung. Wird deutlich modularer. Wird dauern...
    Wenn alles wieder schön übersichtlich ist, gibt es zunächst Modifikationen am Timing-Code der besser mit der CPU-Last haushält, dann Joysticksupport, und, und, und.


    Anregungen und Wünsche nehme ich hier gerne entgegen. Die Webseite gestattet das ja bisher eher rudimentär.


    Bis dann.

  • Super. Ich freue mich wenn es Neuerungen gibt :)


    Zitat

    Das erstaunt mich. Ist bei mir nämlich weder unter Linux noch unter Windows so.


    Jetzt gerade eben lief es auch normal. Hm, vielleicht hatte just in dem Moment einfach ein Prozeß im Hintergrund gewerkelt, welches die Leistung der anderer Apps runterschraubte, updatedb zB.


    LG, Peter

    Keine gute Tat bleibt unbestraft. (Ferengi Erwerbsregel Nr. 285)

  • Hallo.
    Das mag sein. Allerdings ist Roland auch empfindlich in der Hinsicht. Er hätte gerne einen Singlecore für sich allein' ...


    Das muss ich halt als erstes ändern.

  • Roland ist ein Klasseprojekt!


    Endlich ordentlich CPC unter Linux :D


    Eine kleine Bitte: Support für Unterverzeichnisse beim Auswählen von Diskimages....bei einer halbwegs sortierten Sammlung muss man sonst immer nervtötend umschalten. Abe rin jedem Fall: WEITER SO!


    *Daumen hoch*