CPU
The cpu_cycles setting controls the speed of the emulated CPU;
it's the single most important performance setting in dosbox-automation. Getting
it right can mean the difference between a game that plays perfectly and one
that stutters, crawls, or races through its intro sequence.
Too many cycles and you'll get sound stuttering and input lag as your host CPU struggles to keep up. Too few and the game turns into a slideshow. Finding the sweet spot for each game is part of the charm of retro gaming.
As a rough guide: early 8088-era games
(Alley Cat,
Sopwith) need around 300
cycles. 386-era titles want roughly 3,000--6,000. 486-class games like
Doom are playable at around
25,000 but might need up 50,000 cycles for a completely smooth experience.
Late Pentium-era titles such as Quake
need 50,000 to 100,000 cycles or even more. See the cpu_cycles
table for further details, or the
Tutorials guide
for a practical walkthrough of finding the right speed.
The auto setting for core is the most sensible default - it uses the faster
dynamic recompiler for protected-mode games and the more accurate normal
interpreter for real-mode programs. You'll rarely need to override this.
Protected and real mode
DOS games released before about 1993 use real mode (the legacy 16-bit programming model of the Intel 386), while games from 1993 onwards almost exclusively use protected mode (full 32-bit operation). The important distinction is that most CPU-hungry games are protected mode games (e.g., FPS games and flight simulators), while older real mode games generally have much less demanding performance requirements.
dosbox-automation detects the current mode automatically and applies different default speeds:
- Real mode: 3000 cycles/ms (roughly a 386SX at 20 MHz)
- Protected mode: 60,000 cycles/ms (roughly a Pentium at 90 MHz)
The conservative real mode default prevents older speed-sensitive games from running too fast. The higher protected mode default gives demanding games the headroom they need.
You can easily tell which mode a game uses by watching the cycles value in the
dosbox-automation window's title bar - it will show 3000 in real mode and
60,000 in protected mode (assuming default settings). You can also spot
protected mode games by the presence of DOS extenders such as DOS4GW.EXE,
PMODEW.EXE, or CWSDPMI.EXE in their game directories.
Finding the correct cycles setting for a game
While the defaults get most games running, manual tweaking is often needed to make a game run smoothly. Setting the cycles too high wastes host CPU power that could be used for glitch-free audio emulation - there's no benefit to emulating a faster CPU than the game actually needs.
Use the cpu_cycles table as a starting point: look up what CPU
the game was designed for, set the corresponding cycles value, then fine-tune
from there:
- Early DOS games from the 1980s usually run fine at 3,000 cycles (386SX/20 level)
- For 2D games from the 1990s, 25,000 cycles (486DX2/66 level) handles virtually everything
- 3D games typically need 50,000--100,000 cycles (Pentium range)
- 3D SVGA gaming at 640×480 or above may require 200,000+ cycles
You can adjust the cycles on the fly while playing with Ctrl+F11 to decrease by 20% and Ctrl+F12 to increase by 10% (Cmd+F11 and Cmd+F12 on macOS). Once you've found a good value, update your config to match.
Always aim for the lowest cycles value that gives adequate performance --- overdoing it only increases the chance of audio glitches and wastes host CPU resources.
Speed-sensitive games
Some games, particularly those from the 1980s and early 1990s, are sensitive to CPU speed. Setting cycles too high can cause them to run too fast, behave erratically, or crash outright (e.g., "integer divide by 0" errors). A few games may even fail sound card detection and refuse to start if the emulated CPU is too fast. If a game misbehaves, try lowering the cycles before investigating other causes.
For a hands-on walkthrough of finding the right cycles setting for specific games, the Tutorials guide walks you through a few a practical examples:
Configuration examples
Fixed speed globally - Roughly emulates an 486DX2/66 in both real and protected mode:
[cpu]
cpu_cycles = 25000
cpu_cycles_protected = auto
Different real and protected mode speeds - 20,000 cycles for real mode, 400,000 for protected mode, with throttling enabled so the host CPU doesn't get overloaded:
[cpu]
cpu_cycles = 20000
cpu_cycles_protected = 400000
cpu_throttle = on
Max speed - As fast as your host CPU can handle. Useful when compiling programs, rendering 3D images, or playing late-90s 3D games at high resolutions:
[cpu]
cpu_cycles = max
cpu_cycles_protected = maxWarning
Using max cycles can cause problems: some games crash or misbehave
when the emulated CPU is "too fast". The effective speed varies across
different host machines, and audio glitches are common. It's best to use
the lowest fixed cycles value that runs the game at an acceptable speed.
CPU type
The cputype setting controls which CPU architecture is emulated.
The default auto is the most compatible option - technically a 386 with 486
extensions and CPUID. Only change it if a specific game requires it.
386_prefetchis needed for games that use self-modifying code or anti-debugging tricks (requirescore = normal). Known games: Contra, FIFA International Soccer, Terminator 1, X-Men: Madness in The Murderworld.pentiumis recommended for Windows 3.1 games (e.g., Betrayal in Antara) as it adds RDTSC instruction support.pentium_mmxadds MMX instructions, mostly useful for demoscene productions.
CPU speed
The cycleup and cycledown settings control how
much the CPU speed changes when you press the increase/decrease
hotkeys. Values below 100 are treated as a
percentage change; values of 100 or above are treated as a fixed number of
cycles to add or subtract.
Idle CPU usage
The cpu_idle setting reduces host CPU usage when DOSBox is idle
(e.g., waiting for input at the DOS prompt) by emulating the HLT instruction.
It's enabled by default. Disable it if it conflicts with DOS power management
tools like DOSidle or FDAPM.
Configuration settings
You can set the CPU emulation parameters in the [cpu] configuration
section.
core
Type of CPU emulation core to use.
Possible values:
-
auto(default) --normalcore for real mode programs,dynamiccore for protected mode programs. Most programs will run correctly with this setting. -
normal-- The DOS program is interpreted instruction by instruction. This yields the most accurate timings, but puts 3--5 times more load on the host CPU compared to thedynamiccore. Therefore, it's generally only recommended for real mode programs that don't need a fast emulated CPU or are timing-sensitive. Thenormalcore is also necessary for programs that self-modify their code. -
simple-- Thenormalcore optimized for old real mode programs; it might give you slightly better compatibility with older games. Auto-switches to thenormalcore in protected mode. -
dynamic-- The instructions of the DOS program are translated to host CPU instructions in blocks and are then executed directly. This puts 3--5 times less load on the host CPU compared to thenormalcore, but the timings might be less accurate. Thedynamiccore is a necessity for demanding DOS programs (e.g., 3D SVGA games). Programs that self-modify their code might misbehave or crash on thedynamiccore; use thenormalcore for such programs.
cputype
CPU type to emulate. You should only change this if the program doesn't
run correctly on auto.
Possible values:
auto(default) -- The fastest and most compatible setting. Technically, this is386_fastplus 486 CPUID, 486 CR register behavior, and extra 486 instructions.386-- 386 CPUID and 386-specific page access level calculation.386_fast-- Same as386but with loose page privilege checks which is much faster.386_prefetch-- Same as386_fastplus accurate CPU prefetch queue emulation. Requirescore = normal. This setting is necessary for programs that self-modify their code or employ anti-debugging tricks. Games that require386_prefetchinclude Contra, FIFA International Soccer (1994), Terminator 1, and X-Men: Madness in The Murderworld.486-- 486 CPUID, 486+ specific page access level calculation, 486 CR register behavior, and extra 486 instructions.pentium-- Same as486but with Pentium CPUID, Pentium CR register behavior, and RDTSC instruction support. Recommended for Windows 3.1 games (e.g., Betrayal in Antara).pentium_mmx-- Same aspentiumplus MMX instruction set support. Very few games use MMX instructions; it's mostly only useful for demoscene productions.
cpu_cycles
Speed of the emulated CPU (3000 by default). If
cpu_cycles_protected is on auto, this sets the
cycles for both real and protected mode programs.
Possible values:
<number>-- Emulate a fixed number of cycles per millisecond (roughly equivalent to MIPS). Valid range is from 50 to 2000000.max-- Emulate as many cycles as your host CPU can handle on a single core. The number of cycles per millisecond can vary; this might cause issues in some DOS programs.
Ballpark cycles values for common CPUs (treat as starting points, then fine-tune per game):
| Emulated CPU | MHz | Cycles | Year |
|---|---|---|---|
| 8088 | 4.77 | 300 | 1981 |
| 286 | 8 | 700 | 1984 |
| 286 | 12 | 1500 | 1986 |
| 286 | 25 | 3000 | 1988 |
| 386DX | 25 | 4500 | 1988 |
| 386DX | 33 | 6000 | 1989 |
| 386DX | 40 | 9000 | 1991 |
| 486DX | 33 | 12000 | 1990 |
| 486DX2 | 66 | 25000 | 1992 |
| 486DX4 | 100 | 35000 | 1994 |
| Intel Pentium | 90 | 50000 | 1994 |
| Intel Pentium | 100 | 60000 | 1994 |
| Intel Pentium | 120 | 75000 | 1995 |
| Intel Pentium | 133 | 80000 | 1995 |
| Intel Pentium MMX | 166 | 100000 | 1997 |
| Intel Pentium II | 300 | 200000 | 1997 |
| Intel Pentium III | 866 | 400000 | 2000 |
Note
-
Setting the CPU speed to
maxor to high fixed values may result in sound drop-outs and general lagginess. -
Set the lowest fixed cycles value that runs the game at an acceptable speed for the best results.
cpu_cycles_protected
Speed of the emulated CPU for protected mode programs only.
Possible values:
auto-- Use thecpu_cyclessetting.<number>-- Emulate a fixed number of cycles per millisecond (roughly equivalent to MIPS). Valid range is from 50 to 2000000.max-- Emulate as many cycles as your host CPU can handle on a single core.
The default is 60000.
Note
See cpu_cycles for further info.
cpu_throttle
Throttle down the number of emulated CPU cycles dynamically if your host CPU cannot keep up. Only affects fixed cycles settings. When enabled, the number of cycles per millisecond can vary; this might cause issues in some DOS programs.
Possible values: on, off (default)
cycledown
Number of cycles to subtract with the Dec Cycles
hotkey (20 by default). Values lower than
100 are treated as a percentage decrease.
cycleup
Number of cycles to add with the Inc Cycles
hotkey (10 by default). Values lower than
100 are treated as a percentage increase.
cpu_idle
Reduce host CPU usage when the DOS shell or an application is idle. With
cpu_cycles set to max, this can reduce host CPU core
usage from ~100% to around 25% when the shell is idle.
This also makes the shell more multitasking-friendly, which benefits Windows 3.1 DOS prompts.
The feature works by emulating the HLT CPU instruction, so it might interfere with third-party DOS power management tools such as DOSidle and FDAPM - disable it if you use those.
Possible values: on (default), off