Hallo Besucher, der Thread wurde 273k mal aufgerufen und enthält 2404 Antworten

letzter Beitrag von frankyman1969 am

Denise C64 + Amiga Emulator

  • Scheint noch ein relativ neuer cycle exakter Emulator zu sein. Man muß auch anfangs einiges selber konfigurieren, was umständlich wirkt (z.b. die Kernal, Chars, Basic roms, Teile der Tastatur mappen) und der OpenAl Audio Treiber muß installiert sein. Zur Zeit gehen wohl auch nur Tapes, Cartridges (auch nicht alle, nur die Standard Dinger) und PRGs. Der GUI Aufbau erinnert an halbwegs aktuelle Konsolen Emulatoren. Unterstützt wird OpenGL und Direct3D, bei Audio gibt es DirectSound, OpenAL und Wasapi zu Auswahl. Externer Shader Support ist auch vorhanden. Habe nur leider noch keine gefunden, die auch wirklich funktionieren.


    Das wichstigste ist aber, Denise läuft bei mir 100% ruckelfrei und stabil in 50fps bei 50Hz Ausgabe. Solange der Haken bei Sync Audio+Video gesetzt ist. Die in der GUI vornandenen Amiga Settings kann man derzeit ignorieren, das soll wohl später folgen. Als nächstes wird sicher die C64 Disk Emulation folgen. Macht auf jeden Fall eine soliden Eindruck im recht frühen Stadium. Die Hardware Anforderungen sind aber laut Coder recht hoch. Es wird Wert auf absolute Genauigkeit gelegt, ählich wie beim SNES Emulator Higan.


    LINK

  • Hallo,


    danke, ich werde das Projekt mal etwas näher beleuchten indem ich die Reihenfolge der künftigen Arbeitschritte einordne.


    next release 1.0.3: (Januar)
    ----------------------
    [1] automatische Tastatur Layout Zuweisung (c64, amiga)
    - us, uk oder german layout auswählbar (später mehr, Interesse abhängig)
    - mac Tastatur Unterschiede werden berücksichtigt
    - dennoch alles frei konfigurierbar
    - virtuelle Tasten werden unterstüzt: z.b. hat der C64 nur 2 Richtungstasten runter und rechts)
    links und oben müssen mittels shift aktiviert werden. Aktuelle Tastaturen haben alle 4 Richtungstasten.
    Eine Taste kann somit auf dem emulierten System eine Kombination auslösen.


    [2] C64 Maus 1351, Maus Neos, Magnum Light Phaser, Stack Light Rifle, Gun Stick, Inkwell Lightpen, Stack Lightpen, Paddles Unterstützung
    - damn, ich habe hieran fast 2 Monate verbraten. Schließlich soll es auf den 3 wichtigen Betriebsystemen funktionieren.
    - windows raw input Maus Treiber habe ich in diesem Zuge multi mice support spendiert. Light guns/pens können am
    c64 nur in port 1 betrieben werden. Ausnahme sind die Gun Sticks, welche dual verwendet werden können.
    Es ist also möglich 2 Mäuse mit diesem Treiber zu mappen.
    - analog Joypads können ebenso verwendet werden. Jedoch sind diese nicht so präzise wie eine Maus. Die Qualität der Analog Achsen
    schwankt mit dem Preis des Joypads.
    - für light gun/pen emulation kann auch der Windows Mauszeiger direkt verwendet werden. Dies hat den Vorteil das der einfach weicher
    läuft als der selbst berechnete. Die Beschleunigung des Windows Mauszeiger läuft wie gewohnt über Bord Mittel des Betriebssystemes.
    Die Beschleunigung des selbst berechneten kann angepasst werden (unter Menupunkt: Schnelltasten)


    [3] snapshots (arbeite ich aktuell dran)
    - Spielstände an beliebiger Stelle generieren und laden.
    - es wird eine portable Spielstand Datei und eine nicht portable Pfad Datei geben.
    in der Pfad Datei sind die Pfade der verwendeten Disketten / Kasetten / Modul Abbilder enthalten.
    Bei Vorhandensein dieser optionalen Pfad Datei versucht der Emulator die Abbilder einzulegen bevor er den Spielstand einlädt.
    Grundsätzlich könnte somit während des Lade Prozesses gespeichert werden. Fehlt die Pfad Datei oder sind die Pfade nicht mehr
    gültig können die Abbilder immer noch manuell eingelegt werden. Sind keine Abbilder eingelegt, ist das auch kein Problem solange
    nicht nachgeladen werden muss.
    - Limitation: Es kann auch gespeichert werden, wenn der Emulator auf Diskette / Kasette schreibt. Um die snapshots klein zu halten, sind
    jedoch keine vollständigen Abbilder enthalten. In dem Fall würde das spätere Laden des Spielstandes das Abbild nicht zurücksetzen. Es würde
    das geschrieben werden was bereits geschrieben ist. (physischer Schreibvorgang findet statt, wenn der Emulator den Track wechselt )


    [4] openal Treiber mit deployen
    - openal ist typischer weise nicht beim Endanwender installiert.
    es sollte legal sein die dynamic libraries mit auszuliefern.


    [5] Fehlermeldung einblenden, wenn bios Dateien nicht vorhanden sind
    - Ich weiß die anderen c64 Emulatoren liefern diese mit aus.
    Von der Rechtslage her sind diese abandonware, heißt dem Rechteinhaber ist es Latte.
    Das kann sich aber ändern, gerade jetzt wo so viele neue c64 games enstehen.
    Ich habe Bedenken später deswegen eine auf'n Deckel zu kriegen. ... hmm


    release 1.0.4:
    --------------
    [1] refactoring aller bestehenden audio Treiber
    - das scrolling des selbst berechneten Mauszeiger ist unter Linux/Osx etwas ruckig. Das liegt hauptsächlich daran,
    das der audio Treiber die Anwendung in unregelmäßigen Abständen blockiert.


    [2] dynamic frequency correction
    - das feature ist in RetroArch zu finden. Hierbei korrigiert der Emulator ständig das Verhältnis zwischen eingehenden und
    ausgehenden Frequenzen. Somit ist ein perfektes scrolling möglich. Mittels vsync und audio sync läßt sich bei korrekter
    Bildwiederholfrequenz (50 Hz bei pal) ein flüssiges scrolling erreichen. Das Bild scrollt etliche Sekunden korrekt und plötzlich
    ist ein kurzes Zucken zu erkennen. Das liegt daran, das es nicht exakt 50 Hz bzw. 60 Hz sind. Die Werte aktueller Bildschirme stimmen
    nicht 100% mit denen von Röhren überein. Zudem enstehen Last-Schwankungen, verursacht durch das Betriebssystem und anderer parallel
    zum Emulator laufender Software.
    Im Sinne der Frequenz Korrektur wird ständig geprüft wieviel samples im audio Puffer noch nicht abgespielt wurden. Der Audio Treiber
    spielt jedes sample mit einer bestimmten Dauer (entsprechend der sample rate) ab, bevor er das nächste aus dem Puffer holt.
    vsync blockiert den Emulator solange bis die Zeitdauer für die Anzeige eines Bildes abgeschlossen ist.
    audio sync blockiert den Emulator damit die sample rate eingehalten wird.
    Die exakte emulation generiert die Anzahl samples, welche der Frequenz der damals verwendeten Röhren entsprechen.
    Dadurch arbeiten vsync und audio sync geringfügig gegeneinander.
    Anschließend gelangen die samples in einen resampler, welcher diese auf die finale sample rate wandelt. (44100 Hz in der Regel)
    Durch das Wissen wieviel samples noch abgespielt werden müssen, kann das Verhältnis ständig korrigiert werden.
    Unterm Strich bedeutet das, das die emulation 1% - 2% schneller/langsamer läuft als das original um die Frequenz Unterschiede
    zu aktuellen Monitoren zu überwinden. Diese Geschwindigkeitsänderung sollte für einen Menschen nicht spürbar sein. Dafür
    bekommt man auch über den gesamten Zeitraum ruckelfreies scrolling.


    [3] frei auswählbare und vordefinierte Farb Paletten für den c64


    release 1.0.5:
    --------------
    [1] RetroArch shader support


    Aktuell werden glsl shader und native directx shader unterstüzt.
    Zudem werden die manifest Dateien der higan shader library unterstüzt. (wenn manifest.bml in manifest umbenannt wird)
    Es ist kein Problem einzelne Shader einzubinden, wenn die shader Version zur opengl Version passt.


    Emulatoren wie Higan oder RetroArch verwenden hingegen shader, welche aus multiplen shader Typen bestehen.
    (fragment, geometry, vertex, pixel shader)
    Zudem werden bestimmte presets definiert um den shader zu parametrisieren. Das ist nicht
    allgemein gültig, sondern Emulator individuell. Sogenannte manifest Dateien steuern dies.
    Ich möchte cg Shader Unterstützung hinzufügen. cg Shader funktionieren für opengl und directx gleichermaßen.
    Zudem möchte ich die manifest Dateien von RetroArch unterstützen. Somit wird die gesamte RetroArch
    shader library anwendbar sein, hoffe ich :-)


    release 1.0.6:
    --------------
    Vermutlich werde ich zu diesem Zeitpunkt die amiga emulation vorantreiben. Ich habe vor ca. 5 Jahren eine
    erste amiga emulation fertig gestellt. (nicht veröffentlicht) Die Qualität reicht jedoch nicht an die jetzige c64 emulation heran.
    Es wird alles von Grund auf neu programmiert.
    In Sachen c64 liegt der Fokus klar auf dem Expansionsport.
    easy flash, super cpu, REU
    gefolgt vom user port:
    speed dos, 4 player adapter ...


    Da gibt es etliche Erweiterungen für den c64. Was ist da im Interessantesten?

  • Die Higan Shader mit dem umbenannten manifest.bl zu manifest gehen einwandrei. CRT Lotte sieht schon ganz nett aus. Jetzt freue ich mich noch auf die Implementierung der externen Farbpalette und vor allem EasyFlash. Absolut ruckelfrei und keine Soundprobleme. So wie das unter Windows 10 sein muß. :thumbsup:

  • keinen Schimmer mehr, warum die bml extension nicht erkannt wird. Ich fixe das im nächsten release.


    Zudem wird noch die Option: Anzeige Bildschirm x2, x3, ... benötigt.
    Einige shader erwarten das die Bildgröße 2 hoch N ( a power of two) ist. Aktuell läßt sich die Bildgröße nur durch Ziehen am Fensterrand verändern.

  • Als ich den Quellcode von higan durchgeschaut habe, entschied ich mich die png overlays nicht zu übernehmen. Ich dachte die wären nur für handhelds interessant. Ok gut zu wissen, das jemand so nostalgisch unterwegs ist.
    Ja exclusives Vollbild existiert für OpenGL nicht. In diesem Modus ist die Windows UI Schicht komplett ausgeblendet. Context Menu, Haupt Menu, Einstellungs Fenster sind nicht mehr zu erreichen. Es muss erst wieder in die Windows Ansicht zurückgeschalten werden.
    D3D ist unter Windows erste Wahl würde ich sagen.
    Die cg shader, welche RetroArch verwendet, sollten auch in D3D funktionieren. die Higan shader (glsl) sind exclusive für OpenGL.

  • Naja, die alten Spiele sind alle im 4:3 Format. Und bei 16:9 Displays ist das schon ganz nett die schwarzen Balken zu bedecken. Ist kein muß, das sicher nicht. Aber wo du gerade hier bist:


    1. Kommandozeilen Support ist noch nicht drin, oder? Wäre schön, wenn man Frontends wie Gamebase oder Launchbox nutzen könnte.
    2. Wie sieht das mit der Minimierung von Input Lag aus? Die Beam Racing Methode in WinUAE ist ja relativ genial und senkt das Lag auf ein Minimum. Wäre das was für Denise?

  • Über die Beam Racing Methode habe ich gelesen, angeblich nur 5 % Geschwindigkeitseinbuße. Klingt auf jeden Fall interessant. (vsync ohne vsync)
    gsync oder freesync sollte auch ohne aktiviertes vsync perfektes scrolling liefern. Jedoch habe ich keinen solchen Monitor.
    vsync ist der größte input lag Verursacher. Die Bildschirm Wahl hat hierauf auch Einfluss.


    Kommandozeilen support ist sicher auch noch ein Thema.

  • Stimmt im Vollbild nerven die schwarzen Balken auf einem 16:9
    Da fällt mir ein der Autor von higan hat den Typen, welcher das beam racing "erfunden" hat, komplett ignoriert. Der hat ihn fast angefleht, das in higan einbauen zu dürfen.
    Ich muss doch mal schauen was da nun raus gekommen ist.

  • Zitat

    gsync oder freesync sollte auch ohne aktiviertes vsync perfektes scrolling liefern. Jedoch habe ich keinen solchen Monitor.

    Das ist korrekt. Ich habe einen Freesync Monitor. Das geht bei den meisten Emulatoren perfekt, ohne Vsync aktivert. Aber Beam Racing miminiert das Lag noch stärker, als es der deaktivierte Vsync schon macht. Das hat sogar Auswirkungen (laut dem Erfinder der Methode) auf den Lag des verwendeten Monitors, der dadurch auch absinkt. Gesamt kann man da, je nach tauglicher (halbwegs aktuelle) PC Hardware, durchaus unter 15ms Gesamt Lag kommen. Teste mal die Pinball Spiele von Digital Illussions in WinUAE mit aktiviertem Beam Racing (sofern du 50Hz ausgeben kannst). Da gibt es kaum noch Unterschiede zur Original Hardware. Alles extrem fluffig. :)


    https://www.blurbusters.com/bl…-for-emulator-developers/

  • Einfach gesagt wird bei der Methode nach jeder emulierten scanline die Grafikhardware bemüht diese darzustellen. Normalerweise wird ein frame voll berechnet und anschließend an
    die Graka gesandt.
    cooles feature, keine Frage. Möglicherweise verschiebe ich die Prioritäten nochmal.
    Ja ich stelle für meine Ati im Catalyst Control Center für pal emulation auf 50 Hz um. Ich habe 2 Monitore die jeweils 50 Hz vertragen.
    Ich reagiere allergisch auf tearing. Schon vor 15 Jahren habe ich erst den emulator mit einem game, von dem ich weiß das es sauber scrollt, geeicht.
    Auf einem crt Monitor habe ich mit einem tool wie powerstrip 59,94 Hz für ntsc eingestellt. Diese Fein Justierungen sind heute auf LCD's nicht mehr möglich.
    Deswegen kommen features, wie 'dynamic rate control' und 'beam racing' ins Spiel.
    Wenn ich das richtig verstanden habe, ist es bei der beam racing Methode nicht mehr nötig 50 Hz für pal einzustellen um sauberes scrolling zu bekommen.
    Alles zu seiner Zeit. Jetzt baue ich erstmal die savestates fertig. Die Grundfunktionen gehen vor.

  • 1.0.3
    -----
    added more control port devices
    - mouse 1351, mouse neos, paddles, magnum light phaser, stack light rifle, inkwell lightpen, stack lightpen
    - dual Gun Sticks support
    - multi mice support [windows raw input driver only at the moment]
    - fast swap of connected control port devices


    keyboard auto assignable [free assigning of single keys is still possible]
    - french, german, uk and us keyboard layouts supported
    - macOS keyboard layouts supported
    - virtual keys added [means: single key triggers key combination of emulated keyboard ]


    savestate support
    - save/load your program at any position ( even possible while disk/tape is loading )
    - method 1: standard save/load file dialog
    - method 2: hotkeys for save / load / slot up / slot down
    - assign save slots per game
    - Note: hotkeys can be assigned not only to keyboards


    added custom ic logic (C64C)
    french translation added
    - thanks Ben


    bugfixes
    [sid] fixed osc3 register read
    [sid] accidently delayed Triangle/Sawtooth output for 6581 instead of 8580
    [via] reworked shift emulation: fixes vmax4 galaxian thunder mountain


    https://sourceforge.net/projects/deniseemu/files/v%201.0.3/


    Ich habe neben dem win64 build ein macOS build hinzugefügt.

  • entweder beim mapping beide Tasten zugleich drücken oder das Element zweimal mappen.
    mit dem und/oder button kann danach entschieden werden ob beide Tasten gedrückt werden müssen oder eine von beiden.
    nach jedem remapping werden die Elemente neu sortiert mit dem Ziel das eine längere "und" Kombination (max. 4 Tasten) keine kürzere mit auslöst.