Skip to content

0.83.0-RC1 release notes

Release date: 2026-05-11

Release candidate notes

Welcome to DOSBox Staging 0.83.0 Release Candidate 1 (RC1)!

What is a “release candidate”? You can think of it as a “sneak preview” of our upcoming release before we complete our full round of internal testing. As such, it might contain occasional bugs or regressions, but it should be free of major problems.

Community feedback is crucial to discovering issues in any complex software. The release candidate is intended for experienced early adopters willing to help us stabilise DOSBox Staging for the final release. If you’ve found any issue in the RC, please report it to us!

Regular users who prefer a straight-line progression from one release to the next should wait for the stable release, which should come up to two months after the release candidate.

Summary

After a rather long wait, the DOSBox Staging team is proud to present our new major 0.83.0 release! I think we’ve managed to outdo ourselves again as this has gotten even bigger than our monstrous 0.81.0 release. Instead of coming up with excuses why it took so long, let’s take a look at our new killer features:

  • 100% authentic Roland Sound Canvas SC-55 emulation via Nuked-SC55. Yes, ladies and gentlemen, we’ve bagged this long-coveted trophy of DOS gaming! I really couldn’t tell the difference between our emulation and the hardware SC-55 unit sitting on my desk during extensive A/B tests!

  • Authentic CRT colour emulation to take another big step towards faithfully emulating those miniature particle accelerators, also known as CRT monitors, on our modern flat screens! 😎

  • Image adjustment controls to tweak the brightness, contrast, saturation, colour temperature, etc. settings, just like on a real CRT monitor.

  • Totally overhauled frame presentation that achieves better out-of-the-box results with proper VRR and vsync support in most circumstances. The new system is much simpler — the old presentation settings seemed to give everyone a headache.

  • Wide-gamut monitor support to achieve even better CRT-like results, and playing DOS games with radioactive colours on DCI-P3 displays is just not fun.

  • FMV deinterlacer to do those campy full-motion video 90s adventure games justice on modern screens. Yes, you can combine deinterlacing with any shader, including the CRT shaders.

  • Checkerboard dedither to remove de-dithering not just from those old EGA Sierra adventures, but from any DOS game on any graphics adapter (we just had to one-up ScummVM, hadn’t we? 😎 🤘). Again, you can combine dedithering with any shader.

  • A comprehensive user manual that goes beyond a reference guide: it covers basic concepts through detailed device configuration, and offers a historical overview of the DOS era for users who didn’t live through it.

  • HTTP API to muck around with the emulated memory and DOS internals to write modding and cheat tools as simple single-page web applications. The first one to reimplement Gold Box Companion using this API gets a prize! 😎 ⚔ 🧙‍♂️ 🪄 🐲

  • Floppy and CD-ROM automounting to make setting up games even easier.

  • Disk noise emulation as there’s something oddly satisfying about listening to HDD and floppy drive chatter while a game loads.

  • Improved mouse emulation, including proper 2-button mouse emulation support, and added several game-specific hacks, such as a fix for the jerky/uneven mouse pointer movement issue in Ultima Underworld I & II.

  • Clipboard support to allow copy/pasting text between the DOS prompt and the host operating system.

  • A large number of DOS command improvements, such as merging the IMGOUNT and MOUNT commands, a new MAKEIMG command for creating disk images, a new supercharged MEM command, and many other small enhancements.

  • DOSBox Staging now uses a gettext compatible *.po translation file format. This makes translation work a lot easier, and allows the use of specialised translation-aiding software, such as the well-known Poedit.

  • Several locale handling improvements, in particular, making the locale autodetection work more reliably with less surprises.

Read on to learn more! 🚀

Downloads

Start by downloading the latest version:

If upgrading from an earlier DOSBox Staging version, please follow the upgrade instructions below.

If you’re a first-time user (i.e., you’ve never used DOSBox Staging before, or you’re migrating from some other DOSBox variant), please follow the Getting started guide.

How to upgrade

Start by backing up your existing primary config. These are the standard non-portable mode locations for each platform:

Windows C:\Users\%USERNAME%\AppData\Local\DOSBox\dosbox-staging.conf
macOS ~/Library/Preferences/DOSBox/dosbox-staging.conf
Linux ~/.config/dosbox/dosbox-staging.conf

In portable mode, dosbox-staging.conf resides in the same folder as your DOSBox Staging executable.

Alternatively, run DOSBox Staging with the --printconf option, which will print the location of the primary config to your console.

The easy way

Once you’ve backed up your primary config, start the new version, then run config -wcd to update the primary config. That’s it!

This method will work 90% of the time, but certain setting changes cannot be automatically migrated. Look for deprecation warnings in the logs (in yellow or orange colour), then compare your current and old configs and update your settings accordingly.

Check out the new config descriptions for guidance, and also make sure to read the release notes carefully—everything you need to know about upgrading your settings is described there.

The correct way

The 100% correct (but more cumbersome) way is to let DOSBox Staging write the new default primary config on the first launch, then reapply your old settings manually. This is very simple: after backing up your existing primary config, delete it, then start the new version.

For portable installations, put an empty dosbox-staging.conf file in the installation folder to enable portable mode (otherwise DOSBox Staging would create the new default primary config in the standard non-portable location).

Game compatibility fixes

Full PR list of game compatibility improvements
  • Add configurable mouse mickey threshold (#4681)
  • Add mouse hack for ‘Joan of Arc: Siege & the Sword’ game on Hercules machine (#4699)
  • Add support for Microprose’s ‘The Entertainer’ variant of the Innovation SSI-2001 (#4857)
  • CDROM Audio: Do not continue to the next track if less than 2 seconds remains (#4487)
  • Filesystem fixes (#4645)
  • Fix GUS hang in KQ4 enhanced (#4787)
  • Fix aspect ratio of 40-column text modes on VGA with shaders that force no pixel doubling (#4397)
  • Fix edge case where CDROM mixer hangs at the end of a track (#4302)
  • Implement auto config option for file_locking (#4721)
  • Improve DOS builtin mouse driver configurability (#4284)
  • Improve MODE command compatibility (#4668)
  • Replace XCOPY.EXE with the one from DOSBox-X 2025.05.03 (#4476)
  • Sync with SVN r4485-r4494 (#4710)

User manual

We’re very happy to announce that DOSBox Staging now comes with a comprehensive user manual! It covers everything from basic concepts to the detailed configuration of every emulated device, a timeline of PC hardware from 1981 to 1998 with recommended DOSBox settings for each period, and a lot more!

You can read it online on our website, or by running the MANUAL command from the DOS prompt, which will open the bundled offline copy in your default browser.

The manual doesn’t replace the Getting Started guide but complements it. Reading the guide is highly recommended for new users.

To open an offline copy of the Getting Started guide, run the new GUIDE command.

Note

As proponents of the “release early, release often” software development philosophy, we wanted to release the manual earlier rather than later so you can start benefiting from it. In its current state, not every part of the manual has the same level of polish, and not every feature is documented in detail or at all. We will fill these gaps in our future releases — perfecting the manual will be a major ongoing effort.

Graphics

Authentic CRT colour emulation

We took great strides towards emulating and preserving the 1980s/1990s PC CRT monitor look when we introduced our adaptive CRT shaders in 0.81.0. This feature achieved authentic scanline, phosphor mask, and per-pixel bloom emulation to bring that smooth, “naturally anti-aliased” CRT look into your DOS gaming experience. Now we’re taking another big step by addressing the colour and brightness reproduction aspects of those miniature particle accelerators, also known as CRT monitors! 😎

Staging now applies typical PC CRT monitor colour and brightness transforms to the image by default to achieve an even more authentic and period-correct visual experience. The default settings work in tandem with the adaptive CRT shaders to mimic the look of common CGA, EGA, VGA, and composite monitors. The resulting image has better contrast and colours, and the output is a lot closer to what the game designers intended and what people saw on their CRT monitors back in the day. The improvements are especially noticeable in games with darker graphics, as now we’re emulating the quirky gamma behaviour of CRTs more accurately in the near-black regions.

You can also set crt_color_profile in the [render] section manually to emulate the colour characteristics of a specific CRT model (e.g., Sony Trinitron, or the quirky colours of the Commodore 1084S 15 kHz monitor). The color_temperature setting lets you emulate a monitor with a specific colour temperature (white point). Use the online help to learn more (e.g., run crt_color_profile /? at the DOS prompt) and see the Image adjustment controls, Wide-gamut monitor support, and Built-in image viewer sections for more details.

A noteworthy aspect of the feature is that it works with any shader, not just the CRT shaders! So you can benefit from the feature even when using the sharp or bilinear shader, or any of the upscalers like scaler/advmame2x.

If you wish to turn off all CRT colour emulation and image adjustments to get the exact same image as in earlier Staging versions, set image_adjustments in the [render] section to off (not that we would recommend doing so, but we’re giving you the option 😎).

Tip

Click on one of the thumbnails then use the cursor keys to switch back and forth between the before/after images.

Dark Seed (no CRT colour emulation)

Dark Seed (no CRT colour emulation)

Dark Seed (with CRT colour emulation)

Dark Seed (with CRT colour emulation)

Discworld (no CRT colour emulation)

Discworld (no CRT colour emulation)

Discworld (with CRT colour emulation)

Discworld (with CRT colour emulation)

Ultima Underworld (no CRT colour emulation)

Ultima Underworld (no CRT colour emulation)

Ultima Underworld (with CRT colour emulation)

Ultima Underworld (with CRT colour emulation)

The Secret of Monkey Island (no CRT colour emulation)

The Secret of Monkey Island (no CRT colour emulation)

The Secret of Monkey Island (with CRT colour emulation)

The Secret of Monkey Island (with CRT colour emulation)

Note

CRT colour profile emulation is only available in the OpenGL output mode.

Thanks

The new authentic CRT colour emulation and image adjustment features have been built on top of the work and research of several prominent figures in the shader and CRT emulation space: guestrr, Dr. Venom, Dogway (Jose Linares), Neil Bartlett, Tanner Helland, and prod80 (Bas Veth). Thanks, guys! 😎 🙏

Info

CRT displays are based on a fundamentally different technology compared to modern flat screens. CRTs have their own peculiar ways of reproducing colour and brightness; you can think of it as an “image transform” built into the CRT monitors that can never be turned off. Graphics artists working on DOS games picked the colours so that the resulting image looked good to them on their CRTs. Effectively, this “fixed transform” was “baked” into the art, so if we display the same art on modern flat screens without applying the CRT “image transform”, we’ll get a different picture, not what the graphics designer intended and what the millions of DOS gamers saw on their screens!

Displaying RGB values naively without an appropriate CRT colour and brightness transform results in wrong colours and raised shadow detail. This is especially noticeable in VGA games featuring dark graphics. The raised shadow detail problem is not noticeable in CGA and EGA games because the CGA and EGA palettes have a fixed set of very bright colours. However, the appropriate colour transforms make CGA/EGA games look a lot more natural, less over-saturated and “in your face”.

Fine-tuning the settings

The defaults have been tweaked for average sRGB displays. This should give you a good starting point, but we highly recommend fine-tuning the settings to get the best results for your particular monitor and viewing conditions. The most important settings to tweak are the brightness and contrast settings in the [render] section. Please refer to the Image adjustment controls section to learn how to change these at runtime.

The easiest way to quickly get in the ballpark is to use the calibration image included with DOSBox Staging on the Y: drive. Run the SHOWPIC command to display the calibration image and follow the on-screen instructions:

SHOWPIC Y:\TESTPICS\CALIB1.PNG

Tip

Users of DCI-P3 monitors should consider running their displays in their native DCI-P3 colour space; see the Wide-gamut monitor support section for details. It’s recommended to change the brightness and contrast settings to brightness = 50 and contrast = 60 as a starting point when using the DCI-P3 and Display P3 colour spaces.

To really zero-in on the best settings for your display, using screenshots from actual DOS games is the best way. We’ve made a screenshot pack available for this containing 40 images from classic games that use a variety of graphics modes; you can view the images with SHOWPIC or the DOS image viewer of your choice.

Remember, no two CRT monitors were completely alike; some games look best with slightly different settings, and there’s always room for subjectivity.

Image adjustment controls

We’ve added a couple of new image adjustment settings to the [render] section so you can tweak brightness, contrast, saturation, colour temperature, etc. of the video output, just like on a real CRT monitor. Used in conjunction with the new crt_color_profile setting and the adaptive CRT shaders, you’ll get a very hardware-like “virtual CRT” experience. If you don’t like the CRT shaders, that’s not a problem — you can use the image adjustments with any shader, such as sharp or scaler/advmame2x.

To disable all image adjustments, simply set image_adjustments to off. This will result in a picture identical to previous DOSBox Staging versions.

This is the complete list of the new image adjustment settings:

  • brightness
  • contrast
  • gamma
  • digital_contrast
  • black_level
  • saturation
  • color_temperature
  • color_temperature_luma_preserve
  • red_gain
  • green_gain
  • blue_gain

Use the online help to learn more about the settings (e.g. run brightness /? at the DOS prompt). Run the CONFIG -h render command to list all [render] section settings.

Four new hotkeys have been introduced to help adjust the image settings at runtime while a program is running:

  • Ctrl+Alt+F9 (Cmd+Option+F9 on macOS) — Previous image adjustment setting
  • Ctrl+Alt+F10 (Cmd+Option+F10) — Next image adjustment setting
  • Ctrl+Alt+F11 (Cmd+Option+F11) — Decrease current setting
  • Ctrl+Alt+F12 (Cmd+Option+F12) — Increase current setting

The current values are printed to the logs when adjusting the settings. You can also simply exit the game or image viewer program after you’ve come up with some settings you like, and save the current config with the CONFIG -wc <your_config_name> command.

Note

The image adjustments feature is only available in the OpenGL output mode.

Green monochrome VGA emulation

You can do some really cool tricks with the image adjustment settings. The config below emulates old-school monochrome VGA monitors with green phosphors that only display the green channel of the RGB input. Pure red and blue appeared completely black on these monitors — that’s one way to play Prince of Persia on “hard mode”, with invisible health bars 😎

Use the analog contrast setting in the 30–100 range to adjust the brightness. You can uncomment the saturation = -50 line to emulate a more advanced green monochrome monitor that converted the RGB input to greyscale first.

[render]
shader = crt/crt-hyllian:monochrome-hires
crt_color_profile = none
brightness = 45
contrast = 60
gamma = 10
# saturation = -50
color_temperature = 6500
red_gain = 0
green_gain = 125
blue_gain = 0

Elvira (old-school green mono VGA monitor emulation)

Elvira (old-school green mono VGA monitor emulation)

Amber monochrome VGA emulation

This other handy config snippet emulates a monochrome VGA monitor with amber phosphors. Use the analog contrast setting in the 30 to 100 range to adjust the brightness — higher contrast settings turn the highlights into yellow, which is a pretty cool effect.

[render]
shader = crt/crt-hyllian:monochrome-hires
crt_color_profile = none
brightness = 42
contrast = 100
gamma = 15
saturation = -50
color_temperature = 6500
red_gain = 125
green_gain = 70
blue_gain = 0

Death Gate (old-school amber mono VGA monitor emulation)

Death Gate (old-school amber mono VGA monitor emulation)

Wide-gamut monitor support

If you tried to use DOSBox Staging with your wide-gamut monitor in its native wide-gamut mode (e.g., DCI-P3 or AdobeRGB) with earlier DOSBox Staging versions, you got grossly oversaturated colours on Windows and Linux.

That changes from today — now you can simply set the colour_space setting in the [render] section to take full advantage of your wide-gamut monitor. Run colour_space /? from the DOS prompt for the list of available options.

But why would you want to do so in the first place? There are many reasons:

  • Virtually all wide-gamut monitors drastically reduce the maximum available brightness in sRGB mode, and you need a lot of brightness for a convincing CRT emulation.

  • The new authentic CRT colour emulation feature works best on wide-gamut displays (especially the philips and trinitron profiles, which have been calibrated for DCI-P3).

  • You’ll get better shadow detail in the DCI-P3 colour space, as that has 2.6 gamma, which is closer to the actual observable gamma of CRT monitors.

  • Many wide-gamut monitors lock some of the OSD controls in sRGB emulation mode. Sadly, these are often the most useful settings, such as the brightness and overdrive settings.

  • Colours in sRGB emulation mode usually look a bit worse (usually slightly muted) on a wide-gamut monitor than on a good sRGB-native monitor.

That’s plenty of reasons! Make sure to disable all OS-level and 3rd-party colour management in Windows and Linux when using the feature, especially Automatic Colour Management (ACM) in Windows 11, which is known to behave erratically.

macOS users don’t need to configure anything; thanks to macOS’s excellent system-wide colour management, DOSBox Staging will automatically take advantage of wide-gamut displays.

Note

Wide-gamut support is only available in the OpenGL output mode.

Major frame presentation overhaul

Configuring frame presentation has been vastly simplified. DOSBox Staging now works fine with Variable Refresh Rate (VRR) monitors out-of-the-box — no extra configuration is needed. You’ll get no tearing and perfect frame pacing in all games and demos, regardless of what weird custom refresh rate the program might be using. Fullscreen mode is recommended for perfectly smooth scrolling in 2D games (in windowed mode, there might be some slight judder).

If you’re still on a fixed-refresh monitor (typically a 60 Hz display), just set vsync = on in your config to avoid tearing in fullscreen mode. You’ll get vsync “for free” in windowed mode on Windows, macOS, and on more modern Linux desktops, so the default vsync = off setting should be perfectly fine if you only use windowed mode.

Note

Tearing is only noticeable in a relatively small number of fast-paced games, typically 3D games from the mid to late 90s and smooth-scrolling 2D games (e.g., platformers and pinball simulators). If you only play RPGs, adventures and strategy games, don’t worry about any of this — just use the defaults and enjoy Staging! 😎

Here are the presentation mode changes in more detail. Use the online help system to learn more about the new settings (e.g., run presentation_mode /? at the DOS prompt).

presentation_mode

The previous CFR (Constant Frame Rate) and VFR (Variable Frame Rate) presentation modes have been replaced with the dos-rate and host-rate modes. This completely removes VFR presentation, which only presented a frame if it contained changes compared to the previous one. Now we always present frames at a steady rate at the refresh rate of the emulated DOS video mode (dos-rate) or the refresh rate of your desktop (host-rate).

vsync

The adaptive and yield vsync option have been removed as they served no useful purpose, and a new fullscreen-only mode has been added.

vsync_skip

This setting has been removed as it was only necessary to work around broken GPU drivers that use blocking wait on 60 Hz (or lower) fixed-refresh displays. Now you can use presentation_mode = host-rate and vsync = off to achieve the same thing.

host_rate

This setting has been removed; just use dos_rate = host to force the refresh rate of your host display (e.g., to force 60 Hz in 70 Hz VGA games on a fixed 60 Hz refresh rate monitor). Note that this is a hack and might break some games.

Fixed vsync behaviour

Enabling vsync could cause some games to effectively run throttled at the host refresh rate if the host rate was lower than that of the emulated video mode. For example, running Pinball Dreams (a 70 Hz VGA game) on a 60 Hz monitor resulted in perfectly smooth scrolling, but with the game running about 16% slower.

This is no longer the case — enabling vsync doesn’t cause any gameplay or in the audio playback slowdowns.

Improved vsync’ed performance

Previously, enabling vsync could incur a 40–60% performance penalty. This usually wasn’t noticeable in 320×200 VGA games, but could be significant for SVGA gaming at 640×480 or higher resolutions. Voodoo games could be similarly affected.

This limitation has been removed — vsync’ed performance is now on par with non-vsync’ed performance.

FMV video deinterlacer

A new deinterlacer feature has been added to remove alternating black lines from full motion videos (FMVs).

Displaying only every second line of the video was a neat trick employed by many 90s DOS and Windows games to increase the perceptual resolution of the image (as your mind “filled in the blanks”, quite literally) while cutting the storage requirements in half. This also halved the brightness of the video, but the result still looked quite decent on 14-15” CRTs. However, such fake-interlaced content really doesn’t look great on our large, ultra-sharp modern flat screens.

The deinterlacer feature fixes all that and restores FMV videos to their former glory. It automatically detects interlaced video content and leaves other parts of the screen intact (e.g., user interface elements, HUDs, mouse pointer, subtitles, etc.) You can enable it by setting deinterlacing = on in the [render] section (we recommend doing this on a per-game basis). The default setting strikes a balance between preserving brightness and the “fake high resolution” look. There are other options available, too; run deinterlacing /? to see the full list.

Of course, you can use it together with the CRT shaders, and in fact, we encourage you to do so for the best-looking results.

Here’s a non-exhaustive list of games that use interlacing:

Santa Fe Mysteries: Sacred Ground (original)

Santa Fe Mysteries: Sacred Ground (original)

Santa Fe Mysteries: Sacred Ground (deinterlaced)

Santa Fe Mysteries: Sacred Ground (deinterlaced)

Gabriel Knight 2 - The Beast Within (original)

Gabriel Knight 2 - The Beast Within (original)

Gabriel Knight 2 - The Beast Within (deinterlaced)

Gabriel Knight 2 - The Beast Within (deinterlaced)

Dune (CD-ROM version) (original)

Dune (CD-ROM version) (original)

Dune (CD-ROM version) (deinterlaced)

Dune (CD-ROM version) (deinterlaced)

Checkerboard dither remover

Some DOS games use a technique called dithering to create the illusion of more colours with a limited 4 or 16-colour palette. The most notable examples are the early SCI0 Sierra adventure games that use 320×200 EGA graphics with a fixed 16-colour palette (e.g., Leisure Suit Larry 2 & 3, Quest for Glory I & II, Space Quest III, The Colonel’s Bequest, etc.) Early EGA LucasArts adventures also feature dithering, and so do the early Legend Entertainment titles.

We’re introducing a cool feature that can replace these dither patterns, which usually resemble checkerboards, with solid colours. The feature works on any graphics adapter, even VGA. This is a port of Hyllian’s checkerboard dedither shader — thanks, man! 😎

Set dedithering to on in the [render] section to enable the feature. For further details, run dedithering /? from the DOS prompt.

You can combine dedithering with any shader (e.g., crt-auto, sharp, or even upscalers such as scaler/xbr-lv3).

Tip

Click on one of the thumbnails then use the cursor keys to switch back and forth between the before/after images.

The Colonel's Bequest (EGA on VGA with CRT shader, original)

The Colonel’s Bequest
(EGA on VGA with CRT shader, original)

The Colonel's Bequest (EGA on VGA with CRT shader, dedithered)

The Colonel’s Bequest
(EGA on VGA with CRT shader, dedithered)

Loom (EGA with CRT shader, original)

Loom
(EGA with CRT shader, original)

Loom (EGA with CRT shader, dedithered)

Loom
(EGA with CRT shader, dedithered)

Quest for Glory: So You Want to Be a Hero (EGA on VGA with CRT shader, original)

Quest for Glory: So You Want to Be a Hero
(EGA on VGA with CRT shader, original)

Quest for Glory: So You Want to Be a Hero (EGA on VGA with CRT shader, dedithered)

Quest for Glory: So You Want to Be a Hero
(EGA on VGA with CRT shader, dedithered)

The Secret of Monkey Island (EGA with sharp shader, original)

The Secret of Monkey Island
(EGA with sharp shader, original)

The Secret of Monkey Island (EGA with sharp shader, dedithered)

The Secret of Monkey Island
(EGA with sharp shader, dedithered)

Wizardry: Proving Grounds of the Mad Overlord (CGA with CRT shader, original)

Wizardry: Proving Grounds of the Mad Overlord
(CGA with CRT shader, original)

Wizardry: Proving Grounds of the Mad Overlord (CGA with CRT shader, dedithered)

Wizardry: Proving Grounds of the Mad Overlord
(CGA with CRT shader, dedithered)

SimCity (Hercules with CRT shader, original)

SimCity
(Hercules with CRT shader, original)

SimCity (Hercules with CRT shader, dedithered)

SimCity
(Hercules with CRT shader, dedithered)

Note

Blending dither patterns into solid colours and achieving transparency-like effects were only a thing on consoles connected to consumer TV sets. Dither patterns were clearly visible on tack-sharp (and expensive!) PC CRT monitors from the 80s and 90s. Therefore, the dedithering feature does not result in more authentic results — it goes in the opposite direction. It’s a “fantasy representation” of the dithered graphics of old CGA and EGA games.

Also note that dither patterns were far less apparent on small 13–014” EGA monitors. To mimic that look, set shader = crt-auto and viewport = 60% or thereabouts on a 24–27” desktop monitor. The diagonal of the resulting image should be around 13–14” or 33–36 cm — measure it with a ruler! That’s pretty small, but hey, it’s authentic, and it made people in the 80s happy 😎

Integer scaling improvements

Integer scaling for the adaptive CRT shaders (the integer_scaling = auto option) has been refined to reduce pillar and letterboxing. The improvements are especially noticeable on 4k and 1440p monitors: common video modes now completely fill the screen vertically on 4k monitors in fullscreen (no more letterboxing), and 320×200 VGA modes result in minimal letterboxing on 1440p screens. All CGA and EGA modes on 1080p now have no letterboxing in fullscreen.

At the technical level, adaptive CRT shaders can now use 3.5× and 4.5× vertical scaling factors as well, and integer scaling is disabled above 5.0×. These relaxations of the integer scaling rules result in no visual artifacts.

Built-in image viewer

A new built-in SHOWPIC command has been added for viewing BMP, GIF, IFF/LBM, PCX, and PNG images. The tool only supports paletted images and the S3 SVGA adapter for the time being.

Window & fullscreen setting changes

  • The windowresolution setting has been renamed to window_size.

  • The fullresolution setting has been renamed to fullscreen_mode, and fullresolution = desktop is now available as fullscreen_mode = standard. The option to explicitly set screen resolutions in WxH format has been removed as it’s not useful on modern hardware or when using DOSBox Staging with a real CRT monitor.

  • A new forced-borderless fullscreen mode has been introduced to force borderless operation on Windows. If the graphics card driver opts out of fullscreen optimisations, the resulting exclusive fullscreen mode makes Alt+Tabbing very cumbersome — forced borderless mode helps with that. See the setting’s help for further info (run fullscreen_mode /? from the DOS prompt).

  • fullresolution = original has been removed — please use fullscreen_mode = standard or forced-borderless instead.

  • The window position and size are now remembered when toggling between windowed and fullscreen mode.

  • The glshader setting in the [render] section has been renamed to shader (glshader is still accepted with a warning).

  • Automatic shader switching with the adaptive CRT shaders active is now 100% smooth on screen mode changes (no more occasional minor audio hiccups).

  • From this release onwards, an OpenGL 3.3 Core Profile compatible GPU is required for the OpenGL backend. If you’re on a Raspberry Pi or a device that doesn’t have functional OpenGL drivers, please use the SDL texture renderer (output = texture or texturenb for the “non-blurry” version), or an earlier DOSBox Staging version.

  • Fix OpenGL shader compilation errors with old non-compliant OpenGL drivers (e.g., on the Surface Pro 3 tablet).

  • Most settings from the [sdl] section can now be changed at runtime (e.g., fullscreen, window_decorations, mute_when_inactive, etc.)

  • Changing [sdl] section settings at runtime is now much smoother (previously, changing pretty much any of these settings caused the window to be recreated.)

  • Bilinear filtering is now enabled by default on the 3dfx Voodoo to emulate the authentic Voodoo look more closely. This results in no performance degradation.

  • The brightness, contrast and saturation settings have been removed from the [composite] section. Please use the new brightness, contrast and saturation image adjustment settings in the [render] section instead. Note that the new settings have different parameter ranges; you can’t simply use the same values from the old settings.

  • The misc/fixvideo.glsl shader has been removed as it has been replaced with the much more advanced deinterlacer feature.

  • Fixed 40-column text modes appearing half-wide on emulated VGA adapters with certain shaders (e.g., sharp and all upscalers such as scaler/xbr-lv3). This fixes the inventory screen in Sierra AGI adventure games appearing half wide (e.g., Police Quest 1, Space Quest I & II, Gold Rush!, etc.)

  • Fix black screen in Robbo when configured for EGA graphics.

  • Fix wrong EGA colours in Math Flash.

  • Fixed crash when using output = texture with non-functional OpenGL drivers or hardware.

  • SDL_VIDEODRIVER=dummy now works if you want to use DOSBox headlessly for some reason.

  • Fixed Linux KMSDRM crashing on launch for some users.

  • Fixed failover to texture mode if the OpenGL renderer fails to init.

Full PR list of graphics-related changes
  • Add dedithering option & generalise shader passes (#4777)
  • Add FMV video deinterlacer (#4689)
  • Add forced borderless fullscreen mode & general window config settings rework (#4415)
  • Add Jinc 2 de-dithering shader (#4684)
  • Add shader preset support (#4590)
  • Add simple built-in image viewer (#4632)
  • Allow 3.5x and 4.5x integer scaling for the adaptive CRT shaders (#4418)
  • Allow graceful failure if OpenGL context could not be created (#4228)
  • Always use SDL_PIXELFORMAT_ARGB8888 for the SDL texture renderer (#4587)
  • Authentic CRT colour emulation, image adjustment settings, and wide gamut monitor support (#4618)
  • Clean up image capturer (#4701)
  • Clean up vertical bars fix FPU code (#4174)
  • Cross-platform Voodoo cleanup (#4254)
  • Enable bilinear filtering for the 3dfx Voodoo by default (#4250)
  • Fall back if sRGB fails (#4589)
  • Fix aspect ratio of 40-column text modes on VGA with shaders that force no pixel doubling (#4397)
  • Fix auto integer scaling when falling back to the sharp shader (#4664)
  • Fix closest video mode calculation in showpic command (#4638)
  • Fix crash on Windows when starting in fullscreen mode (#4619)
  • Fix crash when setting output = texture (#4577)
  • Fix for setting the same shader twice in a row (#4610)
  • Fix host refresh rate always returned as 60 (#4595)
  • Fix OpenGL uniform errors/warnings when using a debug context (#4594)
  • Fix presentation mode regressions (#4605)
  • Fix segfault on exit for some Linux systems (#4829)
  • Fix setting dedithering from the config & some logging fixes and improvements (#4836)
  • Fix setting shader = crt-auto-machine causing a crash at startup (#4660)
  • Fix tripping debug assert when starting with --startmapper and exiting the mapper (#4554)
  • Fix two broken shaders (#4655)
  • Fix VGA double scan regression (#4864)
  • Fix VGA double scanning when setting a shader preset at startup (#4616)
  • Fix video output freezing 35 minutes, 47 seconds, 483 milliseconds, and 648 microseconds after startup (#4490)
  • Fix wrong 640x200 mode ID in SHOWPIC.EXE (#4640)
  • Further render and scaler cleanup & improvements (#4697)
  • Image adjustment fixes & improvements (#4819)
  • Implement in-memory shader caching in the OpenGL renderer (#4551)
  • Improve window_size and window_position help text (#4704)
  • Improve window not in foreground SDL workaround for macOS (#4700)
  • Minor fixes to renderer init. Allows KMSDRM to failover to texture mode. (#4585)
  • Put all custom shader pragmas in multi-line comment blocks (#4745)
  • Remove fullscreen_mode=original config option (#4596)
  • Remove max frame time check in frame presentation (#4499)
  • Rendering and CGA composite cleanup (#4608)
  • Reset OpenGL attributes before creating the mapper’s renderer (#4628)
  • SDL main cleanup, part 2 — OpenGL modernisation (some of it) (#4390)
  • SDL main cleanup, part 3 — Refactor window & render backend management + misc fixes & improvements (#4449)
  • Simplify ShaderManager API & fix various shader loading regressions and problems (#4735)
  • Total frame presentation overhaul 😎 (#4438)
  • Use OpenGL 3.3 Core Profile in the OpenGL render backend (#4591)
  • VGA drawing and renderer cleanup (#4677)

Sound

Authentic Roland SC-55 emulation

We are extremely happy to announce that perfect Roland SC-55 (Sound Canvas) emulation has finally been added to DOSBox Staging! This was made possible by nukeykt’s excellent Nuked-SC55 project, which provides virtually perfect SC-55 emulation.

The SC-55 is considered a sort of “holy grail” in DOS emulation circles as it was the de facto General MIDI device for DOS games starting in the 1990s. As the SC-55 is a complex synthesiser with many quirks, it cannot be accurately emulated by a generic MIDI synthesiser like FluidSynth. While FluidSynth can come close to the SC-55 with the right SoundFont on some specific game music, on many other tracks, it will sound way off the mark. It’s hit-and-miss, and you can never get it quite right.

Here are a few comparison recordings so you can hear the differences for yourself. All FluidSynth examples were recorded using the latest GeneralUser GS SoundFont.

Tips on what to listen for

A few helpful pointers for more casual listeners on what to focus on:

  • The SC-55 originals are almost always more “composed” and “smoother” in terms of dynamics (volume swings). The FluidSynth renditions often sound very jarring in comparison due some instrument or section jumping out.

  • The timbres of instruments in most SoundFonts are usually quite different from the SC-55 instrument set. This often gives the compositions a different feel and character at best, and makes them sound wrong at worst — as if the original music was performed by a different band.

  • Some instruments often “stick out” (are much louder) in the FluidSynth versions, which can make entire sections sound totally different depending on the instrumentation.

  • Spatial effects (reverb, panning) often sounds different on the FluidSynth rendition, making the FluidSynth version sound like a “remix”.

  • Compositions that reprogram the default instruments via the the SC-55’s synthesiser engine will invariably sound totally different and wrong.

Game Audio example
Transport Tycoon Deluxe (SC-55)
Transport Tycoon Deluxe (FluidSynth)
System Shock (SC-55)
System Shock (FluidSynth)
Realms of Arkania 2 (SC-55)
Realms of Arkania 2 (FluidSynth)
Sam & Max Hit the Road (SC-55)
Sam & Max Hit the Road (FluidSynth)

Luckily enough, you only need to follow the SC-55 ROM installation instructions below and set mididevice = soundcanvas in your config to enjoy those General MIDI soundtracks as they were intended to be heard! Emulating the SC-55 is rather resource-intensive, so you’ll need a mid-range or better desktop-class CPU released in the last 5-7 years to use it without glitches.

Please refer to the Sound Canvas settings’ descriptions to learn more (e.g., run soundcanvas_model /? from the DOS prompt).

If you wish to learn more about the Sound Canvas devices, here are a few recommendations:

SC-55 ROM Installation instructions

The Sound Canvas emulation cannot produce any sound without the ROM files of the original hardware units. Start by downloading the ROM files from here, unpack the ZIP archive, then move the contents of the Nuked-SC55-Resources/ROMs/ folder into the DOSBox Staging soundcanvas-roms folder.

The soundcanvas-roms folder is stored in a platform-specific location:

Windows C:\Users\%USERNAME%\AppData\Local\DOSBox\soundcanvas-roms\
macOS /Users/<USERNAME>/Library/Preferences/DOSBox/soundcanvas-roms/
Linux ~/.config/dosbox/soundcanvas-roms/

This is what the contents of soundcanvas-roms should look like:

soundcanvas-roms
├── SC-55-v1.10
│   ├── sc55_rom1.bin
│   ├── sc55_rom2.bin
│   ├── sc55_waverom1.bin
│   ├── sc55_waverom2.bin
│   └── sc55_waverom3.bin
├── SC-55-v1.20
│   ...
├── SC-55-v1.21
...

Now start up DOSBox Staging and verify that the Sound Canvas plugin is functional by running MIXER /LISTMIDI. The Sound Canvas section should look like this:

image

Now activate the Sound Canvas by running mididevice soundcanvas and then re-run MIXER /LISTMIDI:

image

Alternatively, you can also set soundcanvas_rom_dir to a user-defined ROM location in the new [soundcanvas] config section.

About the emulated SC-55 versions

We emulate revision v1.21 of the original SC-55 by default, as that achieves the broadest overall compatibility with DOS games. Capital Tone Fallback (CTF) — a quirk of the early units — works perfectly on this model (see this rather comprehensive list of affected games).

Emulating the SC-55 mk2 model is more resource-intensive, and the good news is, it’s rarely necessary. In fact, you lose CTF support on the mk2, and even though it has higher polyphony limits on paper, the voice priority schemes differ, so some pieces written for the original unit can suffer from cut-off note issues on the mk2.

Legal notes

By providing an easy-to-use Roland SC-55 emulation feature, we aim to preserve an important part of DOS gaming history for all to freely enjoy for posterity. The feature is only intended for personal use (e.g., retro gaming, or writing music as a hobby) and research purposes.

As per the original Nuked SC-55 license, the use of the feature is strictly prohibited for the creating commercial Roland SC-55 emulation hardware boxes or in commercial music production is. Moreover, you are not allowed to include the bundled Nuked-SC55.clap plugin in any commercial software package without both Roland’s and nukeykt’s express permissions (in other words, if you delete the plugin from your commercial package, you’re fine — DOSBox Staging will continue to work, just without Sound Canvas support).

License notes

Please see this detailed description on how we bridged the license incompatibility between DOSBox Staging and Nuked-SC55 while fully complying with both the GPL v2 and the MAME license and respecting nukeykt’s wishes.

Denoiser to remove OPL and Sound Canvas noise

A new denoiser setting has been added to the [mixer] section that removes residual noise from the OPL synths’ and the Roland SC-55 Sound Canvas’ output. These devices are emulated to an extremely high degree of accuracy, which reproduces some undesirable quirks as well, such as residual noise between sounds in silent passages. This can be heard in some games on good-quality headphones if you have sensitive ears.

The denoiser (technically, a noise gate) has been finely tuned so it doesn’t degrade the useful signal in any way. Therefore, the feature is enabled by default.

The noise issue only affects the original “mk1” Roland SC-55 models in all games featuring “spacious” arrangements with silence between notes.

The OPL noise issue is only present in some games. Here are a few examples:

Disk noise emulation

For those who miss the gentle whirring and clicking of old hard drives and floppies, DOSBox Staging can now play emulated disk noises. It’s a small touch, but it adds a surprising amount of atmosphere — there’s something oddly satisfying about hearing the floppy drive chatter while a game loads.

You can enable disk noises with the hard_disk_noise and floppy_disk_noise config settings in the new [disknoise] section. The noise sounds are routed to the DISKNOISE mixer channel. Run hard_disk_noise /? and floppy_disk_noise /? for more details.

For the full “waiting for the game to load” experience, pair disk noises with the new disk speed throttling feature.

Notes

  • The hard disk samples are courtesy of Arnold0 (https://www.youtube.com/@arnlol).

  • If desired, the FLAC samples can be replaced with custom sounds in the resources/harddisk directory, as long as they are in 22 kHz format.

FluidSynth improvements

Auto-apply optimal settings for common SoundFonts

A new auto option has been introduced for the fsynth_chorus and fsynth_reverb settings which is the new default. In auto mode, DOSBox Staging will apply optimised chorus & reverb settings for some popular SoundFonts. If the SoundFont cannot be detected, auto will simply apply the default chorus and reverb settings (same as setting the on option).

We provide optimised settings for the following SoundFonts:

Re-enable portamento handling

Previously, we did not send portamento MIDI messages (CC 5, 64 & 84) to FluidSynth because it could not emulate the special concave portamento curve of Roland Sound Canvas. The linear portamento of FluidSynth made certain tunes sound way out of tune (e.g., the infamous Level 8 music in Descent), so this was the best overall option.

FluidSynth 2.5.0 introduces a special xg-gs portamento time mode, which faithfully emulates Sound Canvas style portamento (based on reverse-engineering the behaviour of the hardware module — a joint effort between the DOSBox Staging and FluidSynth projects). With this mode enabled, we can send the portamento messages again, and they will sound correct.

Configuration changes

  • Support for the second volume scaling parameter in the soundfont setting has been removed; use the new soundfont_volume setting for SoundFont-level volume adjustments.

  • You can now specify a user-defined SoundFont directory via the new soundfont_dir setting. When defined, DOSBox Staging attempts to load the SoundFont from this directory first before trying the other standard locations.

Other changes

  • Now you can switch to a different SoundFont while FluidSynth is active by simply changing the soundfont config setting (previously, you had to force the re-initialisation by issuing mididevice fluidsynth after changing the SoundFont).

  • Changing any setting from the [fluidsynth] section (e.g., fsynth_reverb, soundfont_dir) will take effect immediately, and the current SoundFont will be reloaded if FluidSynth is active.

  • The list of available SoundFont files in the MIXER /LISTMIDI command’s output is now sorted. The current SoundFont file is highlighted in a case-insensitive manner on Windows and macOS.

  • MIXER /LISTMIDI output is now paginated.

MIDI configuration changes

  • The auto option for the mididevice setting has been renamed to port. This makes a lot more sense, as this option routes the MIDI output to a MIDI port of the host operating system’s standard MIDI interface.

  • The OS-specific win32 (Windows), coremidi (macOS), and alsa (Linux) settings for mididevice have been deprecated. They are still accepted with a warning and are mapped to mididevice = port.

Innovation SSI-2001 changes

Simplified settings

The Innovation SSI-2001’s configuration has been simplified to the following settings:

  • innovation
  • innovation_sid_filter (replaces 6581filter)
  • innovation_filter

The sidmodel, sidport, sidclock, and 8580filter settings have been removed — now we only emulate the original card that uses the SID 6581 chip at base port 280h. All 15 games in existence that support the card and its variants will run fine with these settings.

Microprose’s “The Entertainer” support

Microprose’s “The Entertainer” variant of the Innovation SSI-2001 sound card is now also also emulated when innovation is enabled.

Only two games that support the card: Microprose’s Gunship (v429.04 and v429.05) and Pirates! (v432.1, v432.2, and v432.3).

  • Fix CD-ROM audio tracks not playing for the correct length in Alone in the Dark 2.

  • Fix King’s Quest IV Enhanced freezing on a black screen at startup (GUS regression introduced in 0.82.0)

  • Fix audio hanging after about 2 minutes of play in the GOG version of Tomb Raider.

  • Fix MT-32 music not playing in the intro of Best of the Best Championship Karate.

  • Fix GUS regression that caused the demo Astral Blur by TBL demo to infinitely loop the first scene.

  • Fix incorrectly inverted audio channels for SoundBlaster Pro (e.g., in Doom and Star Wars: Dark Forces).

  • Reduce audio stuttering in games using SoundBlaster’s DMA and Direct DAC modes.

  • We don’t leave fastseek.lut files on the local filesystem anymore when mounting CUE/BIN CD-images with MP3-encoded audio tracks.

  • Support for the obsolete Open Sound System (OSS) MIDI has been removed (mididevice = oss). This makes ALSA the only available MIDI subsystem on Linux (mididevice = alsa) to send MIDI data out of DOSBox Staging.

  • Now you can switch to a different MT-32 ROM while the MT-32 is active by simply changing the model config setting (previously, you had to force the re-initialisation issuing mididevice mt32 after changing the model).

Full PR list of sound-related changes
  • Add bounds checking to SoundBlaster’s read_dma_16bit() and read_dma_8bit() (#4188)
  • Add denoiser to filter out residual OPL and Sound Canvas mk1 noise (#4230)
  • Add seek-only mode for disk noise emulation, fix hdd noises missing i… (#4486)
  • Add soundcanvas_rom_dir config setting and environment variable helpers (#4572)
  • Add support for Microprose’s ‘The Entertainer’ variant of the Innovation SSI-2001 (#4857)
  • Added disk noise emulation and configurable IO throttling (#4325)
  • Allow changing the current FluidSynth soundfont config and the MT-32 model on-the-fly (#3982)
  • Always set SB per-frame callback for DAC (#4563)
  • Auto-apply optimal FluidSynth chorus & reverb settings for common SoundFonts (#4817)
  • CDROM Audio: Do not continue to the next track if less than 2 seconds remains (#4487)
  • Defer SDL audio subsystem init until mixer init (#4665)
  • Don’t let the mixer request frames for SoundBlaster in fast-forward mode (#4202)
  • Don’t save MP3 seek table to fastseek.lut file (#4311)
  • Dynamically load fluidsynth library at runtime (#4222)
  • Fix clang tautological compare warning and related undefined behaviour in stb_vorbis (#4571)
  • Fix crash if opening the soundfont_dir directory failed (#4106)
  • Fix deadlock on exit while LPT DAC is running (#4063)
  • Fix edge case where CDROM mixer hangs at the end of a track (#4302)
  • Fix GUS hang in KQ4 enhanced (#4787)
  • Fix GUS Mix Control Register not getting reset to the correct value (#4271)
  • Fix HDD disk noises being played for floppies v2 (#4661)
  • Fix incorrect check cast in IMFC (#4226)
  • Fix init order & no sound regression (#4663)
  • Fix recovery from fast-forward when the Sound Canvas can’t keep up (#4210)
  • Fix SoundBlaster DMA regression (#4084)
  • Fix SoundBlaster Notify Unlock (#4169)
  • Fixed reversed audio channels for SoundBlaster Pro (#4412)
  • FluidSynth configuration improvements (#4047)
  • Generic Sound Canvas emulation support (#4090)
  • Improve GUS config setting descriptions (#4252)
  • Improvements to the resource loader (#4437)
  • Increase the number of audio frames generated by SoundBlaster when the mixer is underflowing (#4175)
  • Inject Nuked-SC55-CLAP plugin into the release packages (#4425)
  • Lock the mixer thread inside disknoise_destroy() (#4373)
  • Make mixer master gain volume atomic (#4403)
  • Only register disk noise callback if required (#4376)
  • Paginate MIXER /LISTMIDI output & fix showing the active SoundFount (#4811)
  • Re-enable portamento handling for FluidSynth (#4780)
  • Reinstate FluidSynth as an internal dependency (#4550)
  • Restore deprecated mixer channel name aliases (#4400)
  • Simplify mididevice and midiconfig settings (#4040)
  • Sort SoundFonts in MIXER /LISTMIDI output & fix current SF2 matching (#3981)
  • soundcanvas_model setting description fix. (#4298)
  • Standardize the Sound Blaster against other audio devices (#3875)
  • Tone down FluidSynth logging (#4569)
  • Upgrade external vcpkg dependencies to v0.83.0-1 (#4348)
  • Upgrade Nuked-SC55-CLAP to v0.8.0 (#4442)
  • Upgrade the Nuked-SC55-CLAP plugin to v0.11.0 (#4748)

Input

Improved built-in DOS mouse emulation

The config settings controlling the behaviour of the built-in DOS mouse driver in the [mouse] section have been extended, and some existing settings have been reshuffled:

  • dos_mouse_driver has been renamed to builtin_dos_mouse_driver
  • dos_mouse_immediate became the immediate parameter of the new builtin_dos_mouse_driver_options setting

The old names are still accepted with a warning (but beware, we might remove support for these legacy names in the future).

The complete list of settings that control the built-in DOS mouse behaviour are:

builtin_dos_mouse_driver

Whether the built-in DOS mouse driver should be emulated. A new experimental no-trs mode is also available that could theoretically help with some problematic programs.

builtin_dos_mouse_driver_model

This new setting lets you select the mouse model simulated by the built-in DOS mouse driver: 2button (the new default), 3button, or wheel. Previously, the built-in mouse driver was hardcoded to emulate a 3-button wheel mouse. This was problematic in a few games that misinterpreted middle mouse button presses, e.g., Eye of the Beholder. 2-button mice without a scrollwheel were the most widespread in gaming circles throughout the entire DOS era, making 2button the best overall model.

builtin_dos_mouse_driver_move_threshold

The built-in driver can now be configured to report mouse movement only when the accumulated “mickey” counter crosses the threshold set with this new option. Setting this to 2 fixes the wonky “stuck” mouse movement issue in Ultima Underworld I & II, which happens when you move the mouse very slowly (the issue is present on real hardware too, so with this setting we are providing better-than-hardware behaviour 😎).

builtin_dos_mouse_driver_options

This lets you fine-tune the mouse driver behaviour via a list of options, e.g., modern to fix the mouse in Descent II official 3dfx Voodoo patch, and no-granularity to fix the drifting mouse pointer issue in Joan of Arc: Siege & the Sword on machine = hercules.

Please refer to the settings’ online help for further information, e.g., by running builtin_dos_mouse_driver_model /? from the DOS prompt.

Keyboard capture

DOSBox Staging can now take over most system-level keyboard shortcuts if the new keyboard_capture option in the [sdl] section is enabled. Such shortcuts include (non-exclusive list):

  • Alt+Tab — switch between open programs on Windows & Linux
  • Ctrl+Esc — activate Start Menu on Windows
  • Ctrl+F4 — switch to virtual desktop 4 on KDE on Linux
  • Ctrl+Left/Right — switch desktop space on macOS

Most of these special shortcuts are now passed to the running game, or they can trigger actions set up in the mapper. Keyboard capture is especially useful when running Windows 3.1 (e.g., you can then use Alt+Tab to switch between programs), or to let Staging handle the function keys on macOS instead of the OS.

Basic clipboard support

We’ve added a new CLIP.EXE command for bi-directional clipboard integration between the emulated DOS environment and the host OS. You can use the command in batch scripts or the DOS command line.

For example, try executing DIR | CLIP or CLIP < Z:\AUTOEXEC.BAT in the DOS prompt — this will copy the text into the host clipboard.

To go the other direction, pressing Ctrl+V in the DOS command line will paste the first line of the host clipboard’s text content into the DOS command line.

The feature is disabled in secure mode (it will appear to work, but no data is exchanged with the host clipboard). Run CLIP /? to learn more.

Note

This is a reimplementation of the original CLIP.EXE command available on the Windows 98 Resource Kit CD, which is now part of modern Microsoft Windows)

Improved Windows 3.1 mouse compatibility

The built-in mouse driver was reworked so that it now works properly with the Windows 3.1 MS-DOS Prompt run in a window (the garbled display and janky mouse movement issues are now gone), except when using the third-party VBADOS Int33 mouse driver — this one is not handled properly yet.

In case the new mouse code causes problems for you, set builtin_dos_mouse_driver = no-tsr to revert to the previous behaviour.

Warning

Multiple DOS windows under Windows 3.1 are not supported and are currently very unstable.

Mapper changes

  • Binding changes made in the mapper are now immediately saved to disk; the Save button has been removed from the mapper UI.

  • When remapping an input, bind names (e.g. some-joystick-name-axis1) can now fill the line instead of being truncated early.

  • The mapper layout has been improved (it had regressed a bit in 0.81.0).

  • Unpausing now works if the pause hotkey has been remapped.

Keyboard layout autodetection changes

Keyboard layout auto-detection has been rewritten; now it tries to match one of the configured host OS layouts. The mechanism also takes into account the DOSBox Staging translation and the language setting of the host OS. It should work much better than the old solution, but in case of problems, you can always set keyboard_layout = us manually.

Full PR list of input-related changes
  • Add configurable mouse mickey threshold (#4681)
  • Add keyboard grabbing support (#4338)
  • Add ManyMouse support to CMake scripts (#4344)
  • Add mouse hack for ‘Joan of Arc: Siege & the Sword’ game on Hercules machine (#4699)
  • Adjust VMware interface behavior to match VMware Workstation Player (#4564)
  • Builtin DOS mouse driver improvements (#4578)
  • Document Microsoft Digital Media Pro Keyboard scancodes (#4187)
  • DOS mouse driver minor fixes/cleanups (#4356)
  • Enable hotplugging joysticks (#4122)
  • Enable hotplugging joysticks (2nd attempt) (#4146)
  • Enforce no-TSR mouse mode on Tandy/PCJr machines (#4698)
  • Ensure physical host buttons only perform one bound event (#4079)
  • Ensure the line feed follows carriage return when reading from the DOS console (#4009)
  • Fix debugger keypresses not being registered on Windows (#4098)
  • Fix false positive key check in Windows console read multitasking subroutine (#4717)
  • Fix mouse TSR writing to ROM (#4719)
  • Fix new PVS Studio warning in mouseif_dos_driver.cpp (#4539)
  • Immediately save user mapper changes to disk (#4124)
  • Improve DOS builtin mouse driver configurability (#4284)
  • Increase bind name display length in the mapper to avoid truncation (#4131)
  • Initial clipboard sharing support (#4036)
  • Keyboard layout / code page autodetection tweaks + macOS support (#4069)
  • Keyboard layout autodetection fixes/improvements (#4082)
  • Mouse code cleanup and serial mouse regression fix (#4706)
  • Remove wrong assertion in the keyboard autodetection code (#4293)
  • Revert “Ensure physical host buttons only perform one bound event” (#4129)
  • Revert CRLF keyboard change (#4067)
  • Revert Hotplug Support #4122,#4138,#4143 (#4145)
  • Rework builtin DOS mouse driver for better guest Windows compatibility (#4381)
  • Rework the VMware mouse emulation, support the official Windows 9x driver (#4555)
  • Silence unknown function warnings for more OEM mouse driver extensions (#4722)
  • Suppress redundant mapper initialization at startup (#4138)
  • Synchronize the reported DOS mouse driver language with the translation (#4669)
  • Use floating point inputs in the mouse emulation code (SDL 3 preparation) (#4065)
  • Use ‘reg_dx’ for the mouse double speed threshold, as stated in the Microsoft specification (#4838)
  • Unpause the emulator with a remapped pause key (#4851)
  • Warn about MOUSE.COM options which are not going to be implemented (#4544)

DOS integration

Floppy and CD-ROM automounting

Similar to the hard drive automounts (i.e., drives/c in your game folder), now floppy and CD-ROM images can be automounted as well.

If a CD-ROM image file is detected in a drives/x folder in your start folder, it will be mounted as drive X:. Multiple image files in the same drive are supported, and will be mounted in alphabetical order (you can switch between them with Ctrl+4 / Cmd+F4). Files that are not CD-ROM images will be ignored.

Similarly, if floppy images are detected in drives/a or drives/b, they will be mounted as drive A: or B:, respectively.

It is possible to force a specific drive type for the automounted folder (e.g., to mount a folder containing .IMG floppy images as a hard disk partition) with the type parameter in the automount config (you can use y.conf from resources/drives as a template).

MDS/MDF CD-ROM image support

We’ve added support for MDS/MDF CD-ROM images. Images in this format are typically created by Alcohol 120% or Daemon Tools.

IMGMOUNT has been merged into MOUNT

The IMGMOUNT and MOUNT commands have been consolidated into a single MOUNT command that supports all mount types (directories, disk images, bootable images, and overlays). There was very little reason to have two mount commands that perform similar duties with similar arguments, but for different mount types — even long-term users were confused by this.

Consequently, running MOUNT without arguments now lists all mounted images and directories in an improved format.

The IMGMOUNT command remains available as an alias of MOUNT for backward compatibility, but please migrate your configs to use MOUNT only, as support for this might be removed in the future.

New MAKEIMG command

A new MAKEIMG command has been added to allow for the creation of disk image files straight from the DOS prompt.

By default, the image will be created in the current working directory on the host filesystem (for relative paths), or at the provided absolute host path. You can also create the image in a mounted DOS directory with the -writetodos options.

A few usage examples:

MAKEIMG floppy.img -t fd_1440kb -label DEMODISK
MAKEIMG hd250_raw.img -t hd_250mb -noformat
MAKEIMG hd123.img -t hd -size 123
MAKEIMG simple.img -t fd_720kb -writetodos

Run MAKEIMG /? for the full list of available options.

Notifications subsystem

Previously, when changing configuration settings in the DOS prompt, there was no indication whether the operation succeeded; error messages only appeared in the logs (e.g., when trying to set CONFIG -s sbtype = asdf or simply sbtype asdf). This has been improved; now the error is printed to the DOS console as well in addition to the logs.

Similar improvements have been made to some of the built-in commands that only logged the error message (e.g. the MIXER and IMGMOUNT commands). We’ll gradually convert all commands to use the notifications system where appropriate.

File locking improvements

The file_locking setting has a new default of auto, which only enables the feature when Windows 3.1 is running. The games we have tested that require this features are all Windows games. A few rare DOS games have been broken by enabling file locking (e.g., the installer of Falcon 3.0: Operation Fighting Tiger crashing), so it is now disabled by default when not running Windows.

DOS command improvements

  • The MODE command has been improved to be more compatible with the original MS-DOS version. This fixes game installer batch files that attempt to set the video mode with mode co80 command or something similar (e.g., Phantasmagoria and Lighthouse: The Dark Being.

  • The MEM command has been rewritten to provide similar functionality, as the real MS-DOS one.

  • XCOPY now more closely matches the behaviour of the original MS-DOS command. This fixes a few game installers, such as the one for Grand Theft Auto. The binary was taken from DOSBox-X 2025.05.03.

  • The BOOT, LOADROM, and MOUSE commands won’t allow performing actions that are not safe when run from the Windows 2.x or 3.x command prompt.

  • The LS, MORE, SETVER, and TREE now tolerate repeating some option switches.

  • The TREE can now detect conflicting switches.

  • Fixed CHOICE /T repeating the default key if the specified timeout is reached.

Remove early-exit protection

The EXIT command is no longer prevented if run in the first few seconds after launching.

If DOSBox Staging quits immediately after launching, check your [autoexec] section in the config file and remove any EXIT commands so you can see any error messages.

New DOS screen font (CPI) loader

  • CPI files can now be loaded from mounted disk images (not only from mounted directories).

  • Fixed the CPI (DOS screen font) loader so it does not crash anymore with some CPI files.

  • Added support for DR-DOS and Windows NT CPI file formats.

  • Most MS-DOS style CPI files over 64 KB in size will work now.

  • Removed direct support for the FreeDOS CPX files; they can still be used if they are uncompressed first with the 3rd-party UPX tool.

  • Some problematic code pages (like 60258, which replaces the I ASCII uppercase character with a national variant) are now patched when loading.

Other DOS integration changes

  • Using Ctrl+F4 / Cmd+F4 to swap disk images no longer causes DOSBox to “forget” any remaining [autoexec] commands or commands given with the -c command line argument.

  • Fixed daylight saving time (DST) not being properly taken into account when updating a file’s modified timestamps.

  • Fixed a problem when if large amount of memory was configured, total EMS size was reported as 0 bytes.

  • Fixed file modified timestamps not being set properly on Windows in some cases (mainly affected unarchiving tools and installers such as Doom 1.9 update installer).

Full PR list of DOS integration related changes
  • Abort mounting drives if parameters are invalid (#4806)
  • Automount CD images from drives/[x] folders (#4379)
  • Automount floppy images from drives/a and drives/b folders (#4788)
  • Cleanup AUTOEXEC.BAT regeneration (#4362)
  • Correct EMS Set Handle Name to read from correct registers (#4496)
  • Filesystem fixes (#4645)
  • Fix AUTOEXEC.BAT being deleted on disk swap (#4360)
  • Fix choice /t repeatedly pressing default key (#4716)
  • Fix file timestamp conversion on Windows (#4339)
  • Fix images sometimes not found on DOS filesystem (#4797)
  • Fix reporting EMS size if large ‘memsize’ is configured (#4752)
  • Implement auto config option for file_locking (#4721)
  • Implement MDS/MDF CDROM images (#4538)
  • Implement new MAKEIMG command (#4678)
  • Improve MODE command compatibility (#4668)
  • Improve mount message for multiple images (#4759)
  • Introduce notifications subsystem (#4351)
  • Minor DOS command improvements (#4423)
  • New CPI (DOS screen font) loader (#4154)
  • Remove early-exit protection (#4450)
  • Remove std_fs::path and explicitly convert to UTF-16 on Windows (#4764)
  • Replace XCOPY.EXE with the one from DOSBox-X 2025.05.03 (#4476)
  • Retain CD-ROM behaviour for directories mounted with -t cdrom (#4833)
  • Rewrite & improve MEM.EXE command (#4749)
  • Unify IMGMOUNT and MOUNT into a single command (#4683)
  • Use MOUNT command when auto-mounting CD images (#4779)

General

HTTP API for modding & external tools

DOSBox Staging has gained an HTTP API that lets you explore its internal state and memory, including writing to memory locations. This opens up lots of exciting possibilities, such as writing cheat and modding tools similar to The All-Seeing Eye and Gold Box Companion, but in a more robust and cross-platform manner. Typically, you would create these tools as single-page offline web applications that you can run in a browser window next to DOSBox Staging. This drastically reduces the barrier to entry — all you need to know is HTML and JavaScript! We’re excited to see what kind of cool tools the community will come up with!

The HTTP API is disabled by default due to security reasons. To enable it, set webserver_enabled = on in your config in the new [webserver] section and restart Staging. Then open http://localhost:8080/ in a browser to learn more about the API.

We have included three example applications in our GitHub repository:

  • a memory monitor to monitor and manipulate memory locations,
  • a memory scanner, which is a lightweight version of Cheat Engine,
  • and a memory viewer with a built-in disassembler.

The README in our GitHub repository explains how to set up these example apps.

Commander Keen 4 and the memory monitor app running side by side — we just gave ourselves 42 ammo and 66 lives

Commander Keen 4 and the memory monitor app running side by side — we just gave ourselves 42 ammo and 66 lives

Config setting help shortcut

Now you can use the settingname /? shortcut to display a config setting’s help. For example, you can use sbtype /? instead of the tedious to type CONFIG -h sbtype command.

To list all config setting names in a given section, you’ll need to continue to use CONFIG -h sectionname (e.g., CONFIG -h gus).

Improved legacy CPU cycles setting support

Since 0.82.0, we defaulted to using the new cpu_cycles, cpu_cycles_protected, and cpu_throttle config settings to control the emulated CPU speed. We still supported the old cycles setting for backward compatibility — setting cycles enabled “legacy” cycles mode, but this was a one-way street. You could not return to “modern” mode by setting cpu_cycles or the other new settings.

This limitation has been lifted: now you can switch between legacy and modern cycles modes freely. Setting cycles enables legacy mode, and setting cpu_cycles, cpu_cycles_protected, or cpu_throttle enables modern mode.

Warning

We don’t retain the current settings when switching between modes; e.g. if you’re in legacy mode and set cpu_cycles = 5000, then cpu_cycles_protected will be set to its default value of 60,000 instead of retaining the current protected mode value.

Disk speed throttling

For an even more authentic experience, you can now throttle the speed of the emulated floppy and hard drives. It is recommended to use this together with the new disk noise emulation feature for a more authentic experience.

You can set the desired disk speed via the new hard_disk_speed and floppy_disk_speed config options in the [dosbox] section (valid settings are slow, medium, fast, and maximum). The default is maximum, which does not introduce any speed throttling.

macOS DOSBox Staging document packages

Added support for DOSBox Staging document packages on macOS. Simply add the .dosbox extension to a game folder that contains a dosbox.conf file and auto-mounted drive folders, then double-click on it to launch DOSBox Staging from there.

Partial Unicode path support on Windows

On Windows 10 (1903 or later) and 11, DOSBox Staging now supports Unicode file and directory paths in the following situations:

  • At the command line with options such as --conf and --working-dir

  • User directory (C:\users\<username>\appdata\Roaming) where <username> contains characters outside of your local language

  • Folder/file paths set in config files (but not in the autoexec section)

Older versions of Windows will continue to be restricted in what characters can be used in paths.

Improved FPU emulation on non-x86 platforms

The accuracy of FPU emulation on non-x86 platforms has been improved in many cases. As an example, here is a before and after comparison of the x87 diagnostic program MCPDIAG running on macOS / Apple Silicon:

MCPDIAG results — 0.82.2

MCPDIAG results — 0.82.2

MCPDIAG results — 0.83.0

MCPDIAG results — 0.83.0

Reduced CPU usage when idling

Now DOSBox Staging uses less host CPU power when idling at the DOS prompt. This can reduce the usage of the main CPU core Staging runs on from 100% to around 25% on a fast desktop CPU with cpu_cycles = max. This is accomplished with an emulated HLT CPU instruction.

If you want to use other DOS idling software, disable the new behaviour by setting cpu_idle to off to prevent conflicts

Additionally, our shell is now more multitasking-friendly; Windows 3.1 DOS window will use less CPU power and will work better with power saving drivers like WQGHLT.

Other general improvements

  • Changing settings that require a restart using the config = value form failed on Windows (e.g., machine = cga followed by config -r didn’t work). Now that’s fixed.

  • 32-bit segment offsets can now be referenced when creating variables using the IV command in the debugger.

  • Fix crash on exit when using nullmodem inhsocket.

Full PR list of miscellaneous enhancements
  • Add macOS .dosbox package support for double-click launching (#4566)
  • Add REST HTTP API to expose the DOS memory for game modding & tools (#4730)
  • Allow switching between legacy and modern cycles settings (#4781)
  • API: Add more control over allocation strategy (#4776)
  • Change display names of bool conf settings to ‘on’ and ‘off’ (#4248)
  • Config setting help shortcut (#4247)
  • Fixes for “toggle” config setting values (#4727)
  • HTTP API improvements (#4847)
  • Improve FPU emulation on non-x86 platforms (#4534)
  • Mapper layout fixes (#4600)
  • Platforms builds workflow - add RISC-V, update to Debian 12 (#4025)
  • Small improvements to the web server (#4871)
  • Use emulated HLT to lower the host CPU usage in some cases (#4535)
  • User manual related fixes (#4843)
  • Windows activeCodePage and resource file build improvements (#4526)
Full PR list of miscellaneous fixes
  • Always raise the window after startup on macOS (SDL workaround) (#4657)
  • Destroy the renderer in GFX_Quit() (#4580)
  • Fix all the unsafe ‘sscanf’ usage detected by CodeQL (#4670)
  • Fix double free in TCPClientSocket destructor (#4114)
  • Fix handling of LOCK combined with other prefixes (#4775)
  • Fix icache flush incorrectly tied to W^X policy (#4792)
  • Fix Output label in debugger (#4723)
  • Fix setting queued settings on reboot sometimes failing on Windows (#4782)
  • Fixed debugger command IV truncating addresses to 16-bit (issue #4515) (#4800)
  • Handle uppercase “-V” argument for version (#4690)
  • Make CALLBACK_Idle() loops more robust (#4629)
  • Unhardcode the layout of debugger windows (#4691)
  • Unit tests compilation fix (#4329)
  • Use new GH ARM64 runners and remove debian-cross docker from CI (#4158)
Full PR list of documentation-related changes
  • Add ANSI Markup Editor to the translation doco (#4736)
  • At last — user manual! 📚 📜 🤓 (#4822)
  • Build-related documentation updates (#4367)
  • Cleanup Linux build documentation, CMake is now the default build method (#4454)
  • Config setting description fixes (#4820)
  • Config setting help text improvements & fixes (#4761)
  • Convert PVS-Studio workflow to CMake & big build system cleanup (#4299)
  • docs: Add Visual Studio troubleshooting tips (#4718)
  • Fix broken anchor: documenetation -> documentation in DOCUMENTATION.md (#4859)
  • Fix ‘expand_shell_variable’ description (#4624)
  • Fix ‘lpf’ acronym in help text messages (#4615)
  • Fix and improve copyright year updater script & update copyright year (#4765)
  • Fix outdated links in the pull request template (#4676)
  • Implement documentation versioning (#4854)
  • Improve setting help formatting (#4606)
  • Improve unit testing instructions (#4659)
  • Minor bundled libraries and legal notes cleanup (#4673)
  • Spring cleaning, part 2 🌷 🧹 🗑️ 🔥 (#4332)
  • The GUIDE and MANUAL commands open a versioned URL now (#4849)
  • Update CONTRIBUTING.md (#4459)
  • Update contribution guidelines (#4327)
  • Update Linux build instructions (#4652)
  • Update macOS build instructions (#4378)
  • Update mapper.cpp - correct comment about ABNT1 (#4482)
  • Update Windows build instructions (#4422)
Full PR list of project maintenance related changes
  • _with_debugger amended to executable name when OPT_DEBUGGER ON. (#4803)
  • Add and fix additional warnings to the CMake build (#4492)
  • Add ccache support to CMake build (#4744)
  • Add CMake tests (#4407)
  • Add cmake_test_discovery* files to gitignore (#4621)
  • Add compile commits script for CMake (#4335)
  • Add FROM_HASH option to the compile commits script (#4408)
  • Add initial Linux CMake CI workflow (#4291)
  • Add macOS CMake + vcpkg release build workflow (#4170)
  • Add more metadata to the macOS executable for better observabilty (#4687)
  • Add release management script & make release notes draft public (#4773)
  • Add release notes differ script (#4845)
  • Add sanitizer options to CMake build system, for Linux and macOS (#4401)
  • Add several missing checks to the CMake build system + other fixes (#4396)
  • Add Windows presets for CMake (#4184)
  • Address PVS warnings (#4783)
  • Allow graceful shutdown on SIGTERM (#4841)
  • Build system improvements, including Linux CMake install rules (#4435)
  • build: Add meson build files for REST API. (#4771)
  • Bump vcpkg baseline (#4747)
  • Bump vcpkg baseline (#4270)
  • Bump vcpkg baseline & update FluidSynth to 2.4.5 (#4295)
  • Clean up config handling code (#4570)
  • Cleanup some code related to machine types (#4414)
  • Cleanup the resources directory (#4479)
  • Define HAVE_STRUCT_DIRENT_D_TYPE in CMake (#4741)
  • Disable narrowing & conversion warnings in the CMake build and reinstate macOS CI build warning checks (#4290)
  • Dynamically load Slirp library at runtime (#4330)
  • Enable additional warnings for Clang and GCC 13+ (#4647)
  • Enable more GCC/clang compiler warnings (#4561)
  • Exclude debugger-related files from non-debugger builds (#4712)
  • Fix building the Windows installer by dropping Icelandic localisation (#4536)
  • Fix building with Meson (#4353)
  • Fix crash when using deprecated settings in the config (#4430)
  • Fix Git hash injection in CI and local builds (#4316)
  • Fix issues found using sanitizer (#4720)
  • Fix Meson build (#4477)
  • Fix Meson build, broken after directserial removal (#4649)
  • Fix missing warnings in CMake (#4641)
  • Fix missing XML tag in Visual Studio solution file (#4092)
  • Fix non UTF-8 characters in ManyMouse library (#4648)
  • Fix platform specific parameters for ppc64le (#3996)
  • Fix PVS-Studio warnings (#4686)
  • Fix release notes preview & Windows installer package (#4801)
  • Fix running unit tests locally on macOS (#4424)
  • Fix several compiler warnings (#4392)
  • Fix several SonarCube warnings (#4420)
  • Fix some warnings in Windows CDROM code as shown by MSYS2 (#4115)
  • Fix vcpkg compilation on Linux for newer compilers (#4828)
  • Fix win32 link errors/omissions involving MIDI and locale (#4088)
  • Fix writing entire autoexec description to config file. Refactor Config::WriteConfig() (#4804)
  • Fixes for ~130 SonarCloud reported issues (#4674)
  • Fixes for ~220 SonarCloud reported issues (#4671)
  • Fixes for ~30 SonarCloud reported issues, ~15 rules cleaned up (#4726)
  • Improve GCC 15.x support (#4518)
  • Improve handling config setting updates & module re-initialisations (#4516)
  • Improve IMGMOUNT backward compatibility mechanism (#4832)
  • Improve our GitHub issue templates (#4166)
  • Improve platform builds workflow (#4000)
  • Improve PVS-Studio workflow (#4194)
  • Improve the handling of invalid integer config settings (#4666)
  • Improve the internal Unicode engine (#4521)
  • Initial Linux support in CMake files (#4186)
  • Major project organisation improvements (#4451)
  • Make CFileInfo’s destructor non-virtual (#4739)
  • Make unit test execution more robust on macOS & CI (#4746)
  • Migrate SDL_net to standalone asio (#4679)
  • Minor Windows CMake QoL improvements (#4323)
  • Move plugins dir to the root in the Linux & Windows packages (#4432)
  • Normalise build workflow names & deprecate non-CMake Windows and macOS builds (#4278)
  • Only delete the build dir for the selected CMake preset in compile-commits.sh (#4355)
  • Only show warnings and errors in the build output on macOS (#4399)
  • Optimize FPU code to set flags (#4651)
  • Organise files (part 2) (#4513)
  • Partial macOS and Windows compilation output cleanup (#4398)
  • Print VCPKG error log on workflow failure (#4006)
  • Prune all code for unsupported platforms (#4796)
  • PVS Studio warning fixes (#4363)
  • Recommend and list cmake presets (#4863)
  • Remove ModuleBase (#4556)
  • Remove FluidSynth vcpkg port (#4347)
  • Remove function pointer for DOSBOX_Restart (#4558)
  • Remove GHC filesystem library (#4754)
  • Remove KDevelop files (#4404)
  • Remove MSVC project files and make the CMake the only build method on Windows (#4342)
  • Remove references to LGTM and update a few CI related links (#4172)
  • Remove reinterpret_cast for accessing SDL Events (#4143)
  • Remove s390x and ppc64le platform builds & simplify workflow (#4192)
  • Remove Tracy (#4634)
  • Remove Wine support from DOS to host filesystem code (#4753)
  • Replace #if WIN32 with #ifdef WIN32 (#4191)
  • Replace non-ASCII copyright symbol in winres.rc (#4345)
  • Revert object pool stuff (#4111)
  • SDL main cleanup, part 1 (#4384)
  • SDL main cleanup, part 4 — Separate OpenGL and SDL rendering backends & a cornucopia of other improvements (#4542)
  • Set CMAKE_EXPORT_COMPILE_COMMANDS by default (#4209)
  • Show stack trace symbols in Loguru dump (#4467)
  • Simplify build options & remove serial passthrough (#4644)
  • Spring cleaning, part 1 🌷 🧹 🗑️ 🔥 (#4328)
  • Spring cleaning, part 3 🌷 🧹 🗑️ 🔥 (#4464)
  • Sync with SVN r4485-r4494 (#4710)
  • Sync/update Visual Studio filters (#4095)
  • Update and always use the vcpkg baseline in CI (#4012)
  • Update macOS notarize script (#4858)
  • Use CMake to control macOS minimum version (#4692)
  • Use short SPDX copyright headers (#4389)
  • Warn about implicit fall-throughs in switch/case blocks (#4685)
  • Webserver security hardening (#4772)
  • Website release notes draft generation (#4818)
Full PR list of other changes
  • Add HTML release notes to build artifacts (#4774)
  • Bump external DOSBox Staging deps version (#4760)
  • Check HAVE_CLOCK_GETTIME in CMake (#4393)
  • ci: Fix getting the current version with get-version.sh (#4475)
  • ci: Fix PVS failure due to output report change (#4762)
  • Drop the Debian package & platform build CI actions (#4639)
  • Fix release package name generation on macOS (#4510)
  • Fix reporting of failed CI builds on Linux and macOS (#4354)
  • Fix typos Nix0S to NixOS (#4017)
  • Fix Windows + Ninja compilation error (#4470)
  • Library upgrades (#4609)
  • Lower PVS Studio (and compilation) warning limits (#4068)
  • Make Windows CI build errors visible (#4382)
  • meson: Fix a bad relative resource path on macOS (#4675)
  • Reintroduce vcpkg binary caching (#4421)
  • Remove set -e from install-icons.sh (#4405)
  • Replace infinity with max float in prop parser (#4234)
  • Restore Debian 11 dependency file (#4308)
  • Restrict usage of warning flags only with compatible compilers (#4709)
  • Revert “Normalise build workflow names & deprecate non-CMake Windows and macOS builds” (#4286)
  • Update debian cross docker images and CI to debian 12 (#3950)
  • Update README.md (#4410)
  • Update PVS-Studio workflow for the latest version (#4834)
  • Upgrade download-artifact action manually (#4633)
  • Use CMake to build the Windows release on CI (#4331)
  • Use personal access token for the release drafter (#4319)

Localisation

Translation updates

Updates to Polish, Dutch, German, French, and Italian translations.

Migrating to the gettext .po localisation format

DOSBox Staging now uses a gettext compatible *.po translation file format. This makes detecting outdated translations easier and allows the use of specialised translation-aiding software, such as the well-known Poedit.

Please read our translation guide for more details.

ANSI markup tool

Adhering to the 80-character line limit in the translations is very hard when using ANSI colour tags (e.g., [color=light-green]COMMAND[reset]). We’ve added a very handy ANSI Markup Editor to the website to make this process a lot easier.

Just press the Help button and follow the instructions.

Tip

This is a single-page web app; if you want to use it offline, just save the page’s source to your computer as an .html file and open it in any browser.

Locale autodetection improvements

  • Completely reworked locale detection; in particular, DOSBox Staging no longer tries to set the keyboard layout based on country/region output formatting, which could produce unexpected results on some configurations.

  • Language (translation) autodetection now checks the list of preferred languages in the OS preferences, not just the current GUI language. If it can’t find a translation for the most preferred language, it tries the next, and so on.

  • Keyboard layout autodetection is now influenced by the translation or host GUI language.

Locale handling improvements

  • Added native option to locale_period, which tries to reuse host OS display formats for time/date/numbers/etc, as long as the given formats can be represented by the DOS locale subsystem.

  • The KEYB command output is now much more informative; the command itself can be used to restore the ROM font, and it won’t try to load CPI fonts on display adapters that don’t support custom fonts.

  • Added --list-layouts command line option to list all available keyboard layouts. The list can also be printed inside the emulator using the KEYB command.

  • Added --list-code-pages command line option to list all available code pages with a brief description.

  • The us keyboard layout (which is basically a no-layout mode) can now be used with all the code pages.

  • Non-Latin translations are only used for DOS messages if the selected code page supports the given script, otherwise DOSBox Staging reverts to English messages.

  • If the translations important help messages are not up to date (marked as fuzzy), they are now displayed in English.

  • The language can now be changed at runtime (e.g., config -set language=pl).

Locale updates

  • DOSBox Staging now has internal locale definitions for an additional 25 countries. This includes European microstates and several African states that use the Latin alphabet.

  • Modern Bulgarian locales now use the euro currency due to Bulgaria joining the eurozone (lev is now only used in the historic locales).

  • The internal Unicode can now handle code page 111 (Greek, used by the AST Premium Exec DOS) if it is set by using the original CPI file.

  • FreeDOS ISO/KOI/MAC/WIN code page packages are now integrated — you can now select any code page from these packages and both translations, and clipboard integration will fully work with them.

Full PR list of localisation-related changes
  • Add locale definitions for additional 25 countries (#4715)
  • Allow language change at runtime (#4322)
  • C++ library locale autodetection fixes (#4309)
  • Change ‘ux’ keyboard layout autodetection priority to low (#4326)
  • Clean up and fix translation scripts and documentation (#4480)
  • Complete support for code page 59829 (#3998)
  • Consider keyboard layout list random on GNOME (#4116)
  • Do not promote code pages to modern replacements (#4528)
  • Enforce using Unix EOL marks in the translation subsystem (#4654)
  • Fix a few issues with the Dutch (NL) translation (#4653)
  • Fix country detection on Windows (#4087)
  • Fix failing assertion when keyboard layout autodetection fails, prefer ROM font for autodetected code pages (#4103)
  • Fix for country ‘0’ (International English) support (#4085)
  • Fix for default config file created without using translations (#4630)
  • Fix for translated ‘-list-countries’ and similar messages (#4386)
  • Fix missing translation error log (#4533)
  • Fix translation for keyb cmd (#4266)
  • Import FreeDOS ISO/KOI/MAC/WIN code page packages (#4121)
  • Improve language (translation) autodetection (#4132)
  • Keyboard layout autodetection priorities (#4107)
  • Kill the transliteration/romanization rules with fire 🔥🔥🔥 (#4117)
  • Locale detection improvements (#4597)
  • Migrate to the gettext .po localisation format (#4511)
  • Minor locale updates (#4607)
  • Review auto-detection priorities for Italian keyboard layouts (#4130)
  • Rework locale settings and autodetection (#3951)
  • Rework translated messages handling (#4074)
  • Simplify ‘for’ help message handling (#4349)
  • Support both ISO 639 (language) and ISO 3166-1 alpha-2 (territory) in the translation file names (#4541)
  • Translation fixes (#4840)
  • Translation handling improvements (#4656)
  • Unicode engine improvements (#4119)
  • Update de.lng (#4502)
  • Update Dutch (nl) translation (#4265)
  • Update Dutch (NL) translation (#4646)
  • Update Dutch (NL) translation (#4732)
  • Update Dutch (NL) translation (#4798)
  • Update Dutch (NL) translation (#4827)
  • Updated French translation (#4830)
  • Update Italian (it) translation (#4821)
  • Update italian (it) translation (#4488)
  • Update italian (it) translation (#4312)
  • Update italian (it) translation (#4235)
  • Update italian (it) translation (#4125)
  • Update italian (it) translation (#4853)
  • Update Italian (it_IT) translation (#4808)
  • Update Italian (it_IT) translation (#4625)
  • Update Polish (pl) translation (#4237)
  • Update Polish (pl) translation, English string improvements (#4136)
  • Use English strings for important messages if their translation is not up to date (#4707)
  • Use LANG variable as a fallback for LC_* on POSIX systems (#4072)
  • Use untranslated keyboard layout name for logging (#4313)

Contributors

0.83 commit authors

  • arifogel
  • binarymaster
  • dividebysandwich
  • dux119-cmd
  • eduo
  • emmericp
  • farsil
  • FeralChild64
  • Grounded0
  • interloper98
  • johnnovak
  • jstasiak
  • kklobe
  • lordhoto
  • maximilien-noal
  • NicknineTheEagle
  • oturpe
  • Player1UK
  • rderooy
  • runlevel5
  • shermp
  • tobro7BC
  • Torinde
  • weirddan455

0.83 financial contributors

  • 0mnicydle
  • Burrito78
  • codengine
  • dbalsom
  • Dioguiev
  • Florent Wagner
  • Gryzor1363
  • hubby4
  • Hydra3654
  • martyMcFly
  • Max Harmathy
  • Maximilien Noal
  • Michael Schmitz
  • Orhan Ilker Basaran
  • qwertfisch
  • Robin Mathheussen
  • SnowB0und14
  • VirtualAlex
  • Voracios DOS Gamer

Thank you

We are grateful for all the community contributions and the original DOSBox project, on which DOSBox Staging is based.