Snes Emulator
Snes Emulator
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
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
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.
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.
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.
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.
Und aktuell funktioniert die Seite nicht 
Frage: Welche Programmiersprache nutzt du dafür?
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...Fehler: Verbindung unterbrochen
Die Verbindung zum Server wurde zurückgesetzt, während die Seite geladen wurde.
Frage: Welche Programmiersprache nutzt du dafür?
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.
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.
@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?
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?
Allerdings nicht mit'm SNES.PiCiJi wrote:@xTale
Ich bin mir der Herausforderung durchaus bewusst. Mir scheint du hast es schon versucht?
http://aepgb.aep-emu.de/
- XTale
- Zweiter Admin im Bunde
- Posts: 4736
- Joined: Fri May 12, 2000 12:01 am
- Location: Saarland
- Contact:
Ich hab den Code nurmal überflogen
Wenn du schon C++ nehmen willst, nimms auch richtig
sowas wie
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:
sieht doch gleich viel compakter aus 
auch die "resize schleife" kannst du dir sparen, aus
wird ein
ein resize_all könnte so aussehen:
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
Wenn du schon C++ nehmen willst, nimms auch richtig
sowas wie
Code: Select all
int i = static_cast<int>(strlen(str.c_str()));Es gibt bei C++ sowas wie die STL:
Code: Select all
int i, s = str.lenght();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);
Code: Select all
str = substr(1,str.length()-2);Code: Select all
while (str.find(key)!=string::npos)
str.replace(str.find(key), key.size(), token));
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.
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.






