Snes Emulator

Alles rund um das Thema Emulation und Retrogaming!

Moderators: retroK, Q-Marine

PiCiJi
Posts: 81
Joined: Sat Oct 19, 2002 4:01 pm
Contact:

Snes Emulator

Post by PiCiJi »

ich möchte mal mein Vorhaben bekannt machen. Mein Ziel ist es sämtliche Techniken eines snes zu ergründen und einen emu zu proggen.
Wenn ihr Interesse habt, schaut doch ab und an auf meiner site vorbei. Ich versuche ein umfangreiches Glossar über alle technischen details des Snes zu schreiben.

http://piciji.funpic.de
User avatar
Q-Marine
Administrator
Posts: 4037
Joined: Sat Dec 27, 2003 10:03 pm
Location: St. Pölten
Contact:

Post by Q-Marine »

Zum Punkt "Warum gerade das Snes?" hätte ich noch eine Ergänzung. Denkst du nicht dass das SNES schon (von sehr vielen) Emulatoren gut genug emuliert wird?
PiCiJi
Posts: 81
Joined: Sat Oct 19, 2002 4:01 pm
Contact:

Post by PiCiJi »

Du zielst sicher darauf ab, einen emulator für ein system zu entwickeln, das so noch nicht emuliert oder nicht ausreichend gut emuliert wird?
Das ist nicht meine Motivation für das Projekt.

in Bezug auf die Snes Emulation gibt es noch viel zu tun , auch wenn das nicht so scheint, da ein Großteil der Spiele korrekt zu laufen scheint. (siehe bsnes)
Meine Motivation ist in erster Linie zu verstehen, wie ein snes tickt, weniger die emulation. Ich denke ich bin jetzt so weit. Hab mich vor Monaten schon an einem CPU Emulator der Snes CPU versucht. Über die CPU gibt es ein ziemlich aussagekräftiges Buch. Jedoch wollte ich mir das nicht für über 100 $ im Amiland bestellen und konnte dadurch nie wirklich ins Detail gehen. Das sieht jetzt anders aus, ich hab ein Exemplar in einer Bibo in Deutschland bekommen und schon über 50 der 256 Maschinenbefehle in Code abgebildet. Mein eigentliches Ziel wird jedoch sein die komplizierten tutorials im web speziell für die Grafikeinheit vereinfacht, berichtigt und vollständig zu umschreiben.
User avatar
ActionMad
Posts: 1709
Joined: Wed Dec 27, 2000 1:01 am
Location: Karlsruhe

Post by ActionMad »

Klingt sehr intressant dein Vorhaben hoffe du ziehst das durch.
Nur als kleinen Tipp würde ich die Prozentangaben bei Entwicklungsstatus entfernen und ein eigenen Kommentar Begrüßen.
User avatar
XTale
Zweiter Admin im Bunde
Posts: 4736
Joined: Fri May 12, 2000 12:01 am
Location: Saarland
Contact:

Post by XTale »

Wobei die isolierte Emulation der CPU ja noch das einfachste bei sowas ist ;)
Image
PiCiJi
Posts: 81
Joined: Sat Oct 19, 2002 4:01 pm
Contact:

Post by PiCiJi »

so ich habe die Statusseite verändert. Ich kann die Bedenken über den Erfolg des Vorhabens verstehen. Lassen wir einfach die Zeit entscheiden.

Ein paar Tage wird es noch dauern bis ich das Verarbeiten von config files und ein einfaches Windowsfenster geproggt habe. Versprochen dann gehts einfach los mit dem Analysieren eines snes roms (z.b. auf Memory Typ, Region, Spezialchips usw.), anschließend folgt das Verständins über die memory map des Snes.
Dann gehts richtig los mit der Wahl der Emulationsmethode.
Ich versuche den möglichst kleinsten Kreis zu ziehen, also nur soviel wie nötig für die erste graphische Ausgabe. Z.b. ist es nicht möglich auf die Soundemulation zu verzichten mit der Absicht ein Spiel erstmal ohne sound zu emulieren. Somit konzentriere ich mich auf einfache snes demos ohne Maschinenbefehle für den sound. Bis dahin ist der Weg noch weit und steinig.
User avatar
Katana
Posts: 5337
Joined: Sun Jan 02, 2000 1:01 am
Location: Nördliches NRW, Deutschland
Contact:

Post by Katana »

Und aktuell funktioniert die Seite nicht :(
Fehler: Verbindung unterbrochen
Die Verbindung zum Server wurde zurückgesetzt, während die Seite geladen wurde.
Klingt auf jeden Fall interessant, aber das reine Abbilden der CPU dürfte wirklich noch das einfachste sein. Die Timings genau hinzukriegen, etc. dürfte da schon schwieriger werden...

Frage: Welche Programmiersprache nutzt du dafür?
PiCiJi
Posts: 81
Joined: Sat Oct 19, 2002 4:01 pm
Contact:

Post by PiCiJi »

vielleicht hatte funpic Probleme mit dem Server.

Ich verwende C++. Ich weis über das timing des Snes ganz gut Bescheid. CPU und PPU(Grafikeinheit des snes) arbeiten mit dem absolut selben timing. Aller 4 ticks schmeißt die PPU ein Pixel auf den Bildschirm. Der timing crystal einer ntsc snes cpu schafft 21.477.272 ticks pro Sekunde.(Hz = 1/s) Diese Zahl ist nur ein Mittelwert. Das heisst einzelne verbaute snes CPU's weichen plus minus wenige Tausend ticks pro Sekunde ab. (Ungenauigkeit im Fertigungsprozess) Heutige CPU's schwanken sicher weniger stark. Diese Abweichung merkt die menschliche Wahrnehmung glücklicherweise nicht.
Je nachdem welche Speicherbereiche im snes angesprochen werden, ergeben sich die Geschwindigkeiten der CPU. (6, 8 oder 12 ticks pro Zyklus eines Maschinenbefehls) 21.477.272 geteilt durch 6, 8 oder 12. Die snes Cpu arbeitet entweder mit ca 3,58 MHz, 2,68 MHz oder 1,78 MHz. Die Mhz Angaben sind nur Werte die sich ergeben. Für die Emulation ist der timing crystal wichtig. Es gibt noch viel mehr Aspekte für das timing, auf denen ich in meiner site eingehen werde.
User avatar
XTale
Zweiter Admin im Bunde
Posts: 4736
Joined: Fri May 12, 2000 12:01 am
Location: Saarland
Contact:

Post by XTale »

In der Theorie ist das gut und schön - der Spass kommt wenn du das in Software versuchst zu synchronisieren
Image
User avatar
asi
Sergeant Hentai
Posts: 6004
Joined: Mon Aug 06, 2001 12:01 am
Location: zu hause

Post by asi »

ist vielleicht n netter zeitvertreib und du lernst dabei was über emulation allgmein - trotzdem würd ichs an deiner stelle mit nem system versuchen das noch nicht mehr als gut emuliert werden kann - das würde (wenns denn früchte trägt) vielleicht der ganzen emuszene zugute kommen
PiCiJi
Posts: 81
Joined: Sat Oct 19, 2002 4:01 pm
Contact:

Post by PiCiJi »

@asi
Ich will an dieser Stelle noch mal deutlich machen, dass es nicht meine Motivation ist, neue Systeme zu emulieren. Ich interessiere mich speziell für das Snes. Das soll jetzt nicht egoistisch erscheinen, aber ich will meinen eigenen Wissensdurst befriedigen und denen die interessiert sind bzw der Nachwelt eine gute vollständige Dokumentation und hoffentlich nen emu hinterlassen, der sich in ständiger Weiterentwicklung befindet. Das einzige was passieren kann, was der Emuscene zu gute kommt, ist das ich einige der zahlreichen bugs in der snes emulation finde.

@xTale
Ich bin mir der Herausforderung durchaus bewusst. Mir scheint du hast es schon versucht?
User avatar
Katana
Posts: 5337
Joined: Sun Jan 02, 2000 1:01 am
Location: Nördliches NRW, Deutschland
Contact:

Post by Katana »

PiCiJi wrote:@xTale
Ich bin mir der Herausforderung durchaus bewusst. Mir scheint du hast es schon versucht?
Allerdings nicht mit'm SNES.
http://aepgb.aep-emu.de/
PiCiJi
Posts: 81
Joined: Sat Oct 19, 2002 4:01 pm
Contact:

Post by PiCiJi »

find ich gut zu wissen, dass schon einige hier im Forum Erfahrung mit Emulator Programmierung gesammelt haben. Das gibt sicher interessante Diskussionen.

unter kontakt auf meiner site hab ich so ne Art Code Probe zum download gestellt + die kompilierte exe, welche ein config file schreibt.
User avatar
XTale
Zweiter Admin im Bunde
Posts: 4736
Joined: Fri May 12, 2000 12:01 am
Location: Saarland
Contact:

Post by XTale »

Ich hab den Code nurmal überflogen

Wenn du schon C++ nehmen willst, nimms auch richtig ;)
sowas wie

Code: Select all

int i = static_cast<int>(strlen(str.c_str()));
sieht doch gar grausig aus (mal davon abgesehn das ich nicht weiss warum da ein static_cast ist ;)
Es gibt bei C++ sowas wie die STL:

Code: Select all

int i, s = str.lenght();
sieht doch gleich viel compakter aus ;)

auch die "resize schleife" kannst du dir sparen, aus

Code: Select all

	for(i=0;i<(s-1);i++) 
	{
		str.at(i) = str.at(i + 1);
	}

	str.resize(s-2);
wird ein

Code: Select all

 str = substr(1,str.length()-2);
ein resize_all könnte so aussehen:

Code: Select all

while (str.find(key)!=string::npos)
  str.replace(str.find(key), key.size(), token));
auch für strtodec und co gibt es c++ funktionen, guck mal in den stringstream und std::hex, vector brauchst du dir auch keinen eigenen bauen - hat die STL schon
Image
PiCiJi
Posts: 81
Joined: Sat Oct 19, 2002 4:01 pm
Contact:

Post by PiCiJi »

danke für die infos, hab diese eingearbeitet. Das static_cast hatte ich verwendet um die Warnungen "possible loss of data" loszuwerden. Hab das static_cast entfernt und ein pragma zum schnellen Abschalten bzw Aktivieren bestimmter Warnungen verwendet.
Ahja str.length() gibt die string Länge an. Das hab ich übersehen.
Die vector.h hab ich im Quellcode des Snes Emulators bsnes gefunden. Ich habe diese dann noch etwas verändert. Mal schauen, was ich da in der STL finde, obwohl ich die verwendete vector.h ziemlich übersichtlich und praktisch finde.
Post Reply