Frame per Second

Limit

LIMITFPS

Introduces a configurable delay between  screen refresh operations, so that the FPS is limited accordingly.

Skip

SKIPFPS

Introduces no delay in the screen operations, but skips several screen updates so that the actual FPS value is  limited without the program noticing it.

delay (msec)

Sets the delay time, expressed in milliseconds, for both the "Limit" (LIMITFPS) and "Skip" (SKIPFPS) options. To be noted that the FPS is related to the delay by the formula FPS = 1000/Delay or, the other way around, Delay = 1000/FPS. So if, for example, you desire an FPS not greater than 50, the corresponding value to get this effect is Delay = 20msec. Note that a greater delay means a slower frame rate.

Limit D3D BeginScene

LIMITBEGINSCENE

Flag to limit FPS in D3D games. Note: If used together with the "limit" flag you will get a doubled delay.

Limit DIB operations

LIMITDIBOPERATIONS

Flag to apply delay to GDI32 DIB operations only. Helps improving "Rubik's Games" animations.

Limiting the FPS may also help old games that suffer from strange side effects from running too fast. For example: Mechwarrior 3 jumping APC bug can be fixed by limiting the FPS to 30 or below. Another game that benefits from FPS limit is the 1999 release of Outcast (Twon-ha riding bug). Yet another is BladeRunner (shooting range bug).



System speed

CPU slow down

CPUSLOWDOWN

Reduces a program's CPU usage by suspending and resuming all of its threads according to the specified ratio. Since the minimum timing resolution that the system can use for this operation is 1ms, (1/1000th of a second), high ratios may make the game appear choppy. This flag doesn't suspend high-priority threads.

CPU max usage

CPUMAXUSAGE

Same as CPUSLOWDOWN, but operates more selectively. This flag only suspends process threads that are consuming more CPU than the selected ratio. This option can't be set at the same time as CPUSLOWDOWN.

Ratio

Allows you to set a ratio for the slowdown used by the above flags. For example, a value of 2 will produce a ratio of 1:2, suspending the program for 1ms and then running it for 2ms, reducing that program's CPU usage by 33%.

Use precise timing

PRECISETIMING

Use precise timing through the QueryPerformanceCounter system call. Produces a smoother slow down.



Time Stretching

Time Stretching – initial

TIMESTRETCH

If this option is checked, DxWnd tries to emulate an accelerated (xn) or decelerated (:n) time flow. The value set in the listbox is the initial value, that can be altered by means of the time control slider in the time panel (see Time Slider). When checked, DxWnd stretches time in the timing API (such as with GetSystemTime()), the query performance APIs, and the Sleep APIs, which are the most common ways to control a program's timing.

Show time stretch

SHOWTIMESTRETCH

When checked, the time stretch ratio is drawn as an overlay in a corner of the screen, sometimes moving to other corners when it is updated.

Fine time adjust

FINETIMING

When checked, the time stretch ratio shows ticks in finer increments, switching from a 50% change with each tick to a 10% change with each tick. This limits the range to 0.5x-2.0x but allows for finer timing control.

Enable Time Freeze

ENABLETIMEFREEZE

See Function Keys.

Intercept RDTSC opcode

INTERCEPTRDTSC

Program timing is usually determined by system calls that can be easily and safely hooked to stretch the flow of time. There is one possible exception, however: when the program embeds in its assembly the RDTSC assembly instruction opcodes that directly access the hardware clock. This timing value can still be intercepted and manipulated, but using a more delicate technique that searches for the assembly code and replaces it with specific calls. This is why I preferred to make this option available with a dedicated flag to be activated when necessary. The flag should be set whenever adjusting the time stretching option does not alter the time flow.

Stretch timers

STRETCHTIMERS

When checked, the window timers are stretched, namely the user32.dll timers set by SetTimer and the multimedia timers in winmm.dll set by timeSetEvent().

Normalize Performance Counter

NORMALIZEPERFCOUNT

Normalizes the system performance counter, simulating a clock speed of 1MHz. Some old games assume that this is the correct clock speed, and produce speed problems without this flag. This flag gives these old games the clock speed they depend on to run properly. Don't use this flag unless you are experiencing speed issues.

Suspend time stretch in movies

SUSPENDTIMESTRETCH

Suspend time stretch flag to play movies at normal speed and avoid audio shuttering (implemented for bink and smack videos only so far).



CPU Optimization

Slow down mouse polling

SLOW

Some old programs have this bad habit of continuously looping through the mouse status polling with no delay, hogging 100% of CPU resources. This flag introduces a minimal and unnoticeable delay between mouse polls, saving CPU resources.

Slow down window polling

SLOWWINPOLLING

Reduces CPU load in some programs.