Home

Awesome

DOSBox Staging

GPL-2.0-or-later Chat

This repository attempts to modernize the DOSBox codebase by using current development practices and tools, fixing issues, and adding features that better support today's systems.

Build status

Linux x86_64 build status Linux other build status Windows build status macOS build status

Code quality status

Coverity status LGTM grade

Summary of differences compared to upstream

For developers

DOSBox StagingDOSBox
Version controlGitSVN
LanguageC++17C++03<sup>1</sup>
SDL>= 2.0.51.2<sup></sup>
LoggingLoguru for C++<sup>6</sup>Yes, in-house class
BuildsystemMeson or Visual Studio 2019Autotools or Visual Studio 2003
CIYesNo
Static analysisYes<sup>2,3,4,5</sup>No
Dynamic analysisYesNo
clang-formatYesNo
Development buildsYesNo
Unit testsYes<sup>6</sup>No
Automated regression testsWIPNo

Feature differences

DOSBox Staging supports features not included in DOSBox SVN. Below is a detailed comparison of feature differences between DOSBox Staging and DOSBox SVN.

Codecs supported for CD-DA emulation:

DOSBox Staging<sup></sup>DOSBox SVN<sup></sup>
OpusYes (libopus)No
OGG/VorbisYes (built-in)Yes - SDL_sound 1.2 (libvorbis)<sup>6,*</sup>
MP3Yes (built-in)Yes - SDL_sound 1.2 (libmpg123)<sup>6,*,§</sup>
FLACYes (built-in)No<sup>§</sup>
WAVYes (built-in)Yes - SDL_sound 1.2 (built-in)<sup>7,*</sup>
AIFFNoYes - SDL_sound 1.2 (built-in)<sup>7,*</sup>

<sup>*- SDL 1.2 was last updated 2013-08-17 and SDL_sound 2008-04-20</sup>
<sup>† - 8/16/24 bit-depth, 22.05/44.1/48 kHz, and mono or stereo</sup>
<sup>‡ - 44.1 kHz stereo only</sup>
<sup>§ - Broken or unsupported in either SDL_sound or DOSBox</sup>

Feature differences between release binaries (or unpatched sources):

FeatureDOSBox StagingDOSBox SVN
Pixel-perfect modeYes: output=openglpp or output=textureppN/A
Resizable windowYes: for all output=opengl modesN/A
Relative window sizeYes: windowresolution=small, medium, or largewindowresolution=X%
Window placementYes: windowposition = 0,0, and more<sup>16</sup>Manual placement
OPL emulatorscompat, fast, mame, nuked<sup>8</sup>compat, fast, mame
CGA/mono supportYes: machine=cga_mono)<sup>9</sup>Only CGA with colour
CGA composite modesYes: machine=pcjr/tandy/cga with hotkeys)N/A
Wayland supportExperimental: use SDL_VIDEODRIVER=waylandN/A
Modem phonebook fileYes: phonebookfile=<name>N/A
Autotype commandYes<sup>10</sup>N/A
Startup verbosityYes<sup>11</sup>N/A
GUS enhancementsYes<sup>12</sup>N/A
Raw mouse inputYes: raw_mouse_input=trueN/A
FluidSynth MIDIYes<sup>13</sup>: FluidSynth 2.xOnly external synths
MT-32 emulatorYes<sup></sup>: libmt32emu 2.4.2N/A
Expanded S3 support4 and 8 MiB of RAM<sup>14</sup>2 MiB of RAM
Portable & layered confBy default<sup>15</sup>With-userconf and -conf
Translations handlingBundled, see section 14 in READMEWith path to .lng file
ENet modem transportYes: serialport sock:1 flag or SERIAL.COM<sup>17</sup>N/A
Ethernet via [slirp]Yes: See [ethernet] section in conf fileN/A
IDE support for CDROMsYes: See -ide flag in IMGMOUNT.COM /helpN/A
Networking in Win3.11Yes: Via local shell<sup>18</sup>Yes: bootable HDD image

<sup>*- Requires original ROM files</sup>

Stable release builds

Linux, Windows, macOS

Test builds / development snapshots

Links to the newest builds

Get the source

Build instructions

Read BUILD.md for the comprehensive compilation guide.

Linux, macOS

Install build dependencies appropriate for your OS:

# Fedora
sudo dnf install ccache gcc-c++ meson alsa-lib-devel libpng-devel \
                 SDL2-devel SDL2_net-devel opusfile-devel fluidsynth-devel \
                 mt32emu-devel libslirp-devel
# Debian, Ubuntu
sudo apt install ccache build-essential libasound2-dev libpng-dev \
                 libsdl2-dev libsdl2-net-dev libopusfile-dev \
                 libfluidsynth-dev libslirp-dev

# Install Meson on Debian-10 "Buster" or Ubuntu-20.04 and older
sudo apt install python3-setuptools python3-pip
sudo pip3 install --upgrade meson ninja

# Install Meson on Debian-11 "Bullseye" or Ubuntu-21.04 and newer
sudo apt install meson
# Arch, Manjaro
sudo pacman -S ccache gcc meson alsa-lib libpng sdl2 sdl2_net opusfile \
               fluidsynth libslirp
# openSUSE
sudo zypper install ccache gcc gcc-c++ meson alsa-devel libpng-devel \
                    libSDL2-devel libSDL2_net-devel opusfile-devel \
                    fluidsynth-devel libmt32emu-devel libslirp-devel
# macOS
xcode-select --install
brew install ccache meson libpng sdl2 sdl2_net opusfile fluid-synth libslirp

Build and stay up-to-date with the latest sources

Windows - Visual Studio (2019 or newer)

First, you need to setup vcpkg to install build dependencies. Once vcpkg is bootstrapped, open PowerShell and run:

PS:\> .\vcpkg integrate install
PS:\> .\vcpkg install --triplet x64-windows libpng sdl2 sdl2-net libmt32emu opusfile fluidsynth gtest

These two steps will ensure that MSVC finds and links all dependencies.

Start Visual Studio and open file: vs\dosbox.sln. Make sure you have x64 selected as the solution platform. Use Ctrl+Shift+B to build all projects.

Windows (MSYS2), macOS (MacPorts), Haiku, others

Instructions for other build systems and operating systems are documented in BUILD.md. Links to OS-specific instructions: MSYS2, MacPorts, Haiku.

Imported branches, community patches, old forks

Commits landing in SVN upstream are imported to this repo in a timely manner, see branch svn/trunk.

Git tags matching pattern svn/* are pointing to the commits referenced by SVN "tag" paths at the time of creation.

Additionally, we attach some optional metadata to the commits in the form of Git notes. To fetch them, run:

git fetch origin "refs/notes/*:refs/notes/*"

For some historical context of why this repo exists you can read Vogons thread, (1, 2)