Shout out to Disch =] Although your nes sound player didn't work for me in winamp 5
For all you techies:
What are your ideas about using a static binary translator (recompiler) and then use dynamic "hotspot" optimization (that is, detect which methods are being used the most and run an optimization of those methods, storing them in a cache). Just like java =]. One can then save a 'profile' for a game in a file with optimized methods that can be loaded next time the game is run.
One could attempt to optimize methods the emulator "thinks" will be run multiple times using some sort of intelligent algorithm on rom load (possibly determined by how many instructions are hard-coded to jump to that method or entry point), however this would increase the amount of time it takes to load a rom. Static translation is already gonna take a while, and take more memory.
Of course one can't optimize everything since an optimized method is one that has a defined entry point - if a rom attempts to jump into the middle of a method that is optimized the non-optimized version is used, unless there is an optimized version with that entry point. There is no way to detect all the entry points on rom load :(
I was just thinking about such a system and was open to ideas and input. I've already written multiple emulators and wanted to make the jump from optimized interpreter to binary translation, possibly for a senior project.
It would be much easier to write this type of system for an NES (very small number of instructions/registers to worry about), vs a snes or n64 cpu. Maybe even a gameboy cpu.
Does anyone else think that sound is the hardest part of an emulator? It is for me...stupid sound buffers.