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?