I'd like to be able to make games run slower than real time, in order to help learn to play them better. Is there any way of doing this with currently available emulators? I'm using the standard build of DOSBox-X at the moment, but have no real aversion to either switching to another system or even applying a non-standard patch.

What I want in more depth, in case it isn't clear:

A way to effectively slow down time, so that the emulated program runs slower, whatever method it uses to determine how fast to run:

* Obviously I can currently slow the CPU itself down by changing the 'cycles' setting, but this doesn't do what I want for most games made from the late 80s onwards: it drops the effective frame rate, but each frame includes larger changes that make it harder, not easier to play.* So I need to change the speed of other timing sources, too: timer interrupts, vertical retrace interrupts, real-time clock value, and so on.

How can I do this? Preferably, I'd like to be able to turn it on/off easily while emulation is running.

All of those sources might be used, depending on the application running.

If the emulator has a base BUS clock(e.g. UniPCemu) you can change it manually in the code(currently locked to 14MHz). Other sources (CMOS) would require a custom Windows/Linux driver to apply, since that's it's source.

Most clocks are usually based on those kinds of clocks(e.g. gettimeofday or OS-specific equivalent, see UniPCemu's support/highrestimer.c source code of gettimeofday in universal format, used throughout emulation). Such a function, and/or SDL_Delay() function is usually the clock source(together with Windows/Linux time for RTC).

Yeah, you would think such a simple thing as slowing down (or even speeding up) would be a no brainer once you have emulators. But in our quests as emulator writers to pursue perfection we did not have time to add such a feature.

To answer your question, Superfury put it all right. However for most of the games, you might be fine only slowing down PIT or CMOS for example.

In some cases it might even require some or all of those five devices to slowdown relatively to the base clock. Like audio processing(non-PIT, e.g. Sound Blaster, Game Blaster) and video processing(VGA/CGA/MDA) combined with the CPU clock. Like in 8088 MPH, which uses both the PIT, CPU and Video combined to not produce errors. Or 8088 corruption, which adds the Sound Blaster to the 8088 MPH mix(afaik using all those sources except the CMOS). I don't know any program using more, except if you want to display the current CMOS time while running 8088 corruption, which it currently doesn't support

Another idea (to think outside the box so to speak) is rather than slow down the emulator, slow down the host machine. This way the emulator will not be able to keep up. It is inconvenient as it requires a reboot but it can work.

Theoretically, only slowing down the reported time reported TO windows will solve all cases? But it requires a custom driver and control software to direct the driver to do so(although slowing down all other software as well?)?