Add better performance management and optimization.
sam-astro opened this issue · comments
Is your feature request related to a problem? Please describe.
Some complex programs run much slower than they should, even though the emulator stays at ~60fps.
Describe the solution you'd like
CPU frequency to be controlled instead of the FPS, which could cause lower FPS ~20 or 30, but will make sure all emulators run at the same speed across computers.
Feel free to merge #14 into dev, or let me know if you want it on another branch.
@sam-astro After my changes in #14, most of the rest of the time spent is in SDL_PollEvent. Currently, the while (running) loop polls for events once after every cpu Update cycle. Checking for input less often than this is probably desirable.
As an experiment, I removed the event polling. This caused rainbow_gradient.armstrong to finish nearly instantly. I'd suggest polling for events at a set interval, for instance every 0.017s (60Hz). Take this information however you'd like, of course it's not up to me how you want to proceed.
Edit: fixed in 6644488
I think a solution may be CPU interrupts? If not, that would be a cool thing to add and it would help with graphics rendering, multitasking, and such.
The video card could trigger an interrupt to the CPU every time it wants to draw to the screen. This is telling the CPU, "You need to go to address (so and so) and execute it, then return where you left off." Then the programmer would write code telling the CPU what address it needs to go to when the interrupt is received. At that address, the programmer would write the code, for example drawing to the screen. This could also be processing audio through the EX port.
Sorry for my rambling. Hope it helped in some way. I'll try and help as I can with this project.