0.76.0 Release Notes
2020-12-03Installation instructions:
- Linux (or Steam on Linux)
- Windows
- macOS
Table of Contents
- 1. Summary
- 2. New Features in Detail
- 2.1. Gravis UltraSound emulation improvements
- 2.2. Add new built-in GLSL shaders
- 2.3. Add Built-in MIDI support via FluidSynth
- 2.4. Add integer scaling (pixel-perfect) option for OpenGL output
- 2.5. Dynamic recompilation for PowerPC and POWER8 (ppc64le)
- 2.6. Quick-edit and find your configuration file
- 2.7. Add LS command
- 2.8. Rapid DC-offset correction for the emulated PC speaker
- 2.9. Audio pop and click prevention
- 2.10. Splash screen and help banner verbosity control
- 2.11. Revise help messages for mount and imgmount commands
- 2.12. Improve Telnet-mode handling for Modem emulation
- 2.13. Fix setting file timestamp
- 2.14. Case-insensitive paths handling
- 2.15. Revise default keyboard shortcuts
- 2.16. Monochrome palette colour setting
- 2.17. The raw mouse input setting
- 2.18. 10-axis controller support
- 2.19. Log memory base address
- 3. Bugfixes
- 4. Known issues
- 5. Removed features
- 6. Notes for Developers
- 7. Changes merged from upstream projects
- 8. Contributors
1. Summary
This release introduces significant enhancements to the quality of audio emulation (GUS, built-in MIDI, PC speaker), improved support for PowerPC and POWER8 architectures, and a healthy mix of usability, documentation, code quality improvements.
Enjoy! :)
2. New Features in Detail
2.1. Gravis UltraSound emulation improvements
Using headphones is highly recommended!
GUS emulator | Sample (FLAC) |
---|---|
Old implementation | |
New implementation (with improvements) |
Sample from Rise of the Triad (1995). For other comparisons see: link
Several changes have been made to the GUS emulation resulting in (sometimes) audible differences, as follows:
-
Output volume is now typically on-par with other audio devices.
-
Panning of voices is now performed using constant-power, as described in the Gravis' SDK documentation. Constant-power panning was originally researched by the British Broadcasting Corporation (BBC) and found to produce the most realistic perception of voice placement on a radial axis from the listener.
-
When quitting DOSBox Staging, information about the game's GUS audio stream will be provided, such as the breakdown of 8-bit versus 16-bit samples. A potential suggestion to adjust the game's GUS mixer level, either upward or downward may also be provided, which you could paste into your game's startup batch file or
[autoexec]
section.
We recommend using GUS emulation for the handful of DOS games that natively support the GUS's multi-voice feature. For a list of these games, see: GUS Native games.
For more details about DOSBox Staging's GUS support and enhancements, see: GUS Enhancements.
For information about constant-power panning, see pages 7 and 8: BBC R&D White Paper.
2.2. Add new built-in GLSL shaders
Two high-quality shaders that emulate the visual look of an analog CRT monitor are now included:
glshader = crt-easymode-flat
- for DOS games using resolutions 640x400 or higher.glshader = crt-fakelottes-flat
- for DOS games using smaller resolutions (e.g. 320x200).
Jazz Jackrabbit (Holiday Hare 1995 Edition) - showcasing
crt-fakelottes-flat
.
2.3. Add Built-in MIDI support via FluidSynth
We've integrated FluidSynth 2.x, a powerful and accurate MIDI synthesizer, to directly support MIDI playback. This means you no longer need to use an external MIDI synthesizer (but it's still possible, of course).
Configure your game to use General MIDI (GM) output on port 330 and update your DOSBOX Staging config as follows to start using it:
[midi]
mididevice = fluidsynth
mpu401 = intelligent
[fluidsynth]
soundfont = my-favourite-soundfont.sf2
Emulator will look for a soundfont file in "soundfonts" directory within your
configuration directory and additionally in platform-specific directories (e.g.
/usr/share/soundfonts/
on Linux).
User can also use absolute path to a soundfont or path relative to current working directory (for bundling .sf2 files in game directories).
Fine-grained MIDI Level Controls
Some SoundFonts can be "louder" than others, such as Timbres of Heaven. You can provide an optional volume-scalar percentage after the SF2 filename, such as:
soundfont = timbres_of_heaven.sf2 20
This will reduce the SoundFont's volume to 20%.
Most games that play MIDI music provide an in-game volume adjustment, however,
some games may not save your settings while others may not even allow this
adjustment. For these games, use the mixer FSYNTH
command to set your desired
MIDI output volume either in your startup batch file or the [autoexec]
section
in the game's config file, e.g.:
C:\>mixer FSYNTH 33
"What soundfont should I use?"
This is very much a matter of personal opinion. We compiled a list with some good choices for DOS gaming on our wiki.
Linux users: if you have fluid-soundfont installed on your OS, it will be picked automatically as default.
2.4. Add integer scaling (pixel-perfect) option for OpenGL output
Integer scaling (AKA "Pixel Perfect mode) is now also available via OpenGL.
You can test integer scaling by changing output
option:
output = openglpp
- OpenGL + integer scaling. This option is used to provide backwards compatibility with other DOSBox forks.output = texturepp
- SDL2 texture backend + integer scaling. This option was added in 0.75.0.
These two options behave pretty much the same, except Linux users can enjoy
resizable window with output = openglpp
.
Examples running fullscreen on 1080p display:
The Lost Vikings (1993) with integer scaling.
Epic Pinball (1993) with integer scaling.
Tip: integer scaling works best for games that use square pixels; most DOS games use non-square pixels (often using resolution 320x200 / PAR 5:6) - for those titles sharp‑bilinear scaling (DOSBox Staging default setting) works better.
This video essay by Displaced Gamers provides a great explanation: DOS Gaming Aspect Ratio - 320x200
output=openglpp
option with windowresolution=resizable
is also a good choice
for using DOS applications in text mode as it produces sharp text (but
sacrifices proper DOS font aspect ratio):
2.5. Dynamic recompilation for PowerPC and POWER8 (ppc64le)
Roughly two years ago jmarsh of the vogons.org forums published a feature-complete dynamic recompilation patch supporting the PowerPC (32-bit) architecture. This was quickly expanded by the community to support the POWER8 (64-bit) architecture as well. Both patches (with slight improvements) were merged to DOSBox Staging.
Shoutout to AmigaOS community for help with thoroughly testing this significant PowerPC contribution! :)
2.6. Quick-edit and find your configuration file
It can be cumbersome to edit and find your default dosbox-staging.conf
file.
You might not know where it's located or it might be hidden away due to certain
OS settings.
These two command-line options can help:
-
dosbox --editconf
, opens the .conf file in a text editor.Note: this option respects the
EDITOR
environment variable if set to your prefered editor's executable. Otherwise, it uses one of the following:nano
,vim
,vi
,notepad++.exe
,notepad.exe
. -
dosbox --printconf
, prints the path to the .conf file.
2.7. Add LS command
The ls
(list directory contents) command is widely available across Unix-based
operating systems. Most users of modern OSes are likely to have it in their
muscle memory rather than DOS's dir
command.
This is a very simple implementation resembling the default operation of GNU
ls
:
- Fits as many directory entries as possible on the screen
- Differentiates directories, executables, and plain files using color
- Prints files in lowercase and directories in uppercase; Norton Commander style
Above: Windows 3.11 listed using
dir /w /p
- not enough space to show all
files, hard to distinguish between files and directories.
Below: The same directory listed using ls
- more efficient utilization of
space in 80x25 DOS text mode, easier to read.
2.8. Rapid DC-offset correction for the emulated PC speaker
Audio speakers work by pushing and pulling their diaphragm at a rate equal to the audio's frequency.
Physical PC speakers can sometimes be left in a pushed-out or pulled-in state through constant voltage, called DC-offset, which typically isn't a problem on real hardware. However in DOSBox, the PC Speaker's offset samples mix with those from other audio sources such as the Sound Blaster or Adlib, which can:
-
cause a pop if the next sample played has a position significantly different from the position of the DC-offset
-
harm accurate sound reproduction of other sound devices by moving half the waveform further away from the center line (making it louder) and the other half of the waveform closer to the center line (making it quieter).
This new configuration option, zero_offset
under the [speaker]
section,
defaults to 'auto'
. It's enabled for non-Windows systems and disabled on
Windows as some of its audio drivers appear to attempt their own DC offset
correction.
Above: the game has left the PC speaker in an offset position, which is detected and silently "wound down" in a fraction of a second.
For more details about this change, see: #480
For a discussion about Windows 10 performing DC-offset correction, see: #625
2.9. Audio pop and click prevention
Some games generate audio pops or clicks during startup. We've added two changes to reduce these occurences:
-
Initial audio by all emulated devices is fed through a 15-ms envelope specifically timed to prevent unnatural electronic pops and clicks, yet fast enough to ensure that sharp-attack natural sounds (such as a cymbal crash) are not affected.
Above: On startup, the game greets our ears with an unatural instantaneous pop. In the second image, we see the enveloper briefly in action ramping the instaneous volume to prevent the pop.
For more visuals and detail about the enveloper, see: #442
-
Some games test their interface to the Sound Blaster 16 using one or more small "junk" DMA transfers. Unfortunately on actual hardware, these result in startup clicks and pops, which can be jarring when using a headset. We now suppress these initial junk transfers.
Above: On startup, Lands of Lore The Throne of Chaos's audio driver blasts our ears with two instantaneous pops, which are eliminated after suppression.
For a list of many more games that had their pops cleaned up, see: #411
2.10. Splash screen and help banner verbosity control
The splash screen and its delay, as well as the blue help banner, can now be
skipped using the startup_verbosity
setting in the [dosbox]
section in the
conf file. The verbosity can be set as follows:
high
shows everything: the splash screen, blue help banner, and initial console output.medium
skips just the splash screen and its delay, but still shows the blue help banner and initial console output.low
skips both the splash screen, delay, and blue help banner, but still shows initial console output.quiet
skips all of the above. The first output will either be the command prompt or output from startup executables or batch files.
By default, the verbosity is set to auto
, which is either low
when an
executable or directory is passed on the command-line or high
when DOSBox
Staging is started without initial commands.
For a visual depiction of the options, see: #477
2.11. Revise help messages for mount and imgmount commands
These commands are usually thoroughly documented in the manual, but having
usage examples at your fingertips is more convenient. Help can be invoked
by passing one of the following parameters: /?
(DOS style), or -h
, --help
(GNU style).
Revised help messages provide usage examples, common parameter description, and use a limited set of colours to improve readability.
Read more in: #729
2.12. Improve Telnet-mode handling for Modem emulation
For those hosting a BBS behind a Telnet interface, you can now pre-configure
your serial port in Telnet-mode with the telnet:1
argument, as follows:
[serial]
serial1 = modem telnet:1 listenport:2323
For those dialling BBSs hosted behind a Telnet interface, use the following
dial-prefix: AT+NET1DT
. In general, the +NET1
or +NET0
AT-command will
enable or disable Telnet-mode, respectively.
This change brings Telnet-mode in-line with the Hayes multi-character command specification, which should be compatible with existing BBS software.
Above: When telnet-mode is set according to the remote BBS's needs, you will experience fast and corruption-free transfers.
For more background about this change, see: #582
2.13. Fix setting file timestamp
DOS function 5701h "Set File Time/Date" was implemented.
This corrects a long-standing emulation issue when it comes to date handling of files created in DOS (e.g. when files are being unpacked from an archive). This fixes some game installers and other software that checks file modification times.
2.14. Case-insensitive paths handling
Paths passed to commands mount
, imgmount
, and audio track paths in
.cue
and .ins
files are now treated as case-insensitive, regardless
of the operating system.
Fixes numerous issues with running DOS games on Linux or FreeBSD. This change alone corrects the vast majority of Windows-only DOS game releases on GOG or Steam (such as e.g. Settlers II, Redneck Rampage, or Mortal Kombat series) - users no longer need to manually adjust the paths after unpacking games from Windows installer. This should significantly improve the quality of Lutris installers as well.
2.15. Revise default keyboard shortcuts
The default keyboard shortcuts were revised to avoid triggering conflicting OS default shortcuts. We've only changed those that that were not typically used by general users.
The list of new default shortcuts are:
- Alt-Enter - Switch between fullscreen and window mode.
- Alt-Pause - Pause/Unpause emulator.
- Ctrl-F1 - Start the keymapper.
- Ctrl-F4 - Change between mounted floppy/CD images.
- Ctrl-F5 - Save a screenshot.
- Ctrl-F6 - Start/Stop recording sound output to a wave file.
- Ctrl-F7 - Start/Stop recording video output to a zmbv file.
- Ctrl-F9 - Shutdown emulator.
- Ctrl-F10 - Capture/Release the mouse.
- Ctrl-F11 - Slow down emulation.
- Ctrl-F12 - Speed up emulation.
- Ctrl-Alt-Home - Restart emulator.
- hold Alt-F12 - Fast forward.
Keymapper received tiny usability improvements as well: it displays the keyboard shortcut (binding) for the selected action.
2.16. Monochrome palette colour setting
When emulating monochrome displays (Hercules or CGA/monochrome), the default colour palette can now be selected in the configuration file.
This feature was backported to 0.75.2 release; read more.
2.17. The raw mouse input setting
User can now bypass the operating system's mouse acceleration and sensitivity settings. This works in fullscreen or when the mouse is captured in window mode.
This feature was backported to 0.75.2 release; read more.
2.18. 10-axis controller support
Old joysticks compatible with DOS games can be emulated using modern 10-axis controllers (like DualShock or Xbox controllers).
This feature was backported to 0.75.1 release; read more.
2.19. Log memory base address
The base memory address of DOS's emulated memory region is now logged to the console to help some users of external software, such as 'Cheat Engine'.
This feature was backported to 0.75.1 release; read more.
3. Bugfixes
Some notable bugfixes:
- Prevent SDL2 crash on exit when using Wayland. (#336)
- Fix sound effects in Prince of Persia on Tandy. (#457)
- Prevent crash on SDL2 re-creating OpenGL window. (#510)
- Fix
dir /p
in non-standard text modes. (#528) - Prevent injection of spurious newlines in autoexec and bat files. (#536)
- Fix
caputure_mouse
middlegame
setting. (#563) - Fix a CD-DA roll-over bug when calculating PCM frames. (#569)
- Fix boot failure from an image mounted as C:. (#589)
- Fix memory leak in the modem phone book. (#622)
- Fix
cls
command. (#639) - Increase default DOS file limit for emulation of program Subiekt 4. (#656)
- Fix Pentium CPUID to indicate CPU without FDIV bug. (#694)
- (from SVN) Multiple bugfixes and regression fixes for various games or demoscene productions, such as Clue: Master Detective (1989), (8c002), Pleasure'n Pain demo (8c07c, e9a67), MayDay demo (b6e77), PC Tools 9, and others.
- (from SVN) Set Precision Exception in
FRNDINT
(Round to Integer instruction), to avoid bug when running Borland Pascalpow
implementation. (7892b)
4. Known issues
- (added on 2020-12-04) Windows x64 builds are not available for now due to regression after building in Visual Studio 16.8.2. See: #746
- The W^X memory protection (enabled by default via e.g. SELinux) prevents dynamic recompiler from working. See: #253
- Keymapper has problems with mapping multiple axes when multiple controllers are plugged in (e.g. notably when using modern joysticks and throttles connected at the same time). See: #342
- GLSL shader implementation crashes on certain Intel GPUs on Arch. See: #319
- Mapping key scancodes on X11 using
xmodmap
can break SDL2 ability to detect your keyboard layout and leave you with non-functional keyboard input. Use udev instead of xmodmap to prevent this problem. - Some users of Gnome 3.38.1 experience problems when toggling fullscreen (both X11 and Wayland). This seems to be a Gnome issue; if you experience it as well, please make a report in the bugtracker.
5. Removed features
- Option
gusrate
in[gus]
section was removed. The revised Gravis UltraSound emulation implementation made this option obsolete. - Option
oplrate
in[sblaster]
section was removed. This value is now automatically tied torate
in[mixer]
to avoid resampling (so users do not need to manually correlate values for these two options any more).
6. Notes for Developers
- Project switched to using C++14.
- We introduced unit tests (using Google Test framework). At the moment,
unit tests are running on Linux only - to build them use
--enable-tests
configure flag andmake test
to run them. They are included in CI gating. - Windows x64 builds were added to Visual Studio solution (both Debug and Release profiles).
- CI was extended with gating based on MSVC (32-bit and 64-bit builds)
- Due to instability and extremely slow installation times MSYS2 was removed from gating CI. It is still included in our daily builds, but we do not recommend using MSYS2 for development.
- Linux builds for ARMv6, ARMv7, ARMv8 (AArch64), ppc64le, and s390x architectures were added to our set of daily builds.
- We fixed all
-Wall -Weffc++
warnings on Linux and macOS and corrected a large number of issues detected via static and dynamic code analysis tools.
When the project started we inherited 1411 warnings from DOSBox; as of November 2020 the builds are finally clean, so it's easier to make sure we do not introduce new warnings :).
7. Changes merged from upstream projects
- Merge DOSBox SVN changes up to revision 4392
- Sync dr_mp3 v0.6.11 from upstream
- Sync dr_flac v0.12.13 from upstream
- Sync dr_wav v0.12.4 from upstream
- Sync xxhash 0.8.0 from upstream
- Sync stb header v2.36 from upstream
- Sync stb_vorbis v1.19 from upstream
8. Contributors
During DOSBox Staging 0.76 development period we merged 1035 commits, including 55 commits originating from the DOSBox project.
DOSBox Staging Maintainers:
Patryk Obara, kcgen, nemo93
DOSBox Staging Contributors:
Affonso Amendola, Bernard Cafarelli, cfoesch, ClassicHasClass, David Heidelberg, drfiemost, Edward Betts, Erlotinib, Expack3, Feignint, Jonathan Campbell, MasterO2, NicknineTheEagle, Nikos Chantziaras, Robert de Rooy, Troy Campbell, Tyrell Sassen, Vladimir Serbinenko, Wengier
DOSBox Contributors (SVN r4336:r4392):
Harekiet, jmarsh, Jonathan Campbell, NewRisingSun, Qbix, ripsaw8080
We are extremely grateful for all contributions, including the invaluable improvements merged in from the DOSBox project. Thank you!