DOSBox Staging is a modern continuation of DOSBox with advanced features and current development practices.
It is a (mostly) drop-in replacement for older DOSBox versionsβyour existing configurations will continue to work, and you will have access to many advanced features.
For a detailed description of the project's scope please refer to the About page on our website.
If you enjoy using DOSBox Staging, please consider a donation to the project.
If you want to help but can't afford a donation, check out the Get involved page of our website for other ways to contribute.
https://www.dosbox-staging.org/
First-time users and people migrating from other DOSBox variants should start by reading the Getting started guide.
Feature | Status |
---|---|
Version control | Git |
Language | C++20 |
SDL | >= 2.34.2 |
Logging | Loguru for C++3 |
Build system | CMake + Ninja or Visual Studio 2022 |
Dependency manager | vcpkg |
CI | Yes |
Static analysis | Yes1,2 |
Dynamic analysis | Yes |
clang-format | Yes |
Development builds | Yes |
Unit tests | Yes4 |
- PVS-Studio β C++ static analyser
- Pylint β Python static analyser
- markdownlint β style checker and linter for Markdown
- ShellCheck β shell script analysis tool
DOSBox Staging has the following library dependencies:
Dependency | Provides feature | vcpkg package name | vcpkg version | Optional? |
---|---|---|---|---|
FluidSynth | General MIDI synthesizer | fluidsynth | 2.4.4#1 | yes π’ |
Google Test+Mock | Unit testing (development) | gmock | 1.6.0#1 | yes π’ |
IIR | Audio filtering | iir1 | 1.9.5#1 | no π΄ |
libpng | PNG encoding of screen captures | libpng | 1.6.46#0 | yes π’ |
Munt | Roland MT-32 and CM-32L emulation | libmt32emu | 2.7.1#0 | yes π’ |
Opus File | CD Audio playback for Opus-encoded audio tracks | opusfile | 0.12+20221121#1 | no π΄ |
SDL 2.0 | OS-agnostic API for video, audio, and eventing | sdl2 | 2.32.4#0 | no π΄ |
SDL_net 2.0 | Network API for emulated serial and IPX | sdl2-net | 2.2.0#3 | yes π’ |
slirp | TCP/IP library for Ethernet emulation | libslirp | 4.9.0#0 | yes π’ |
SpeexDSP | Audio resampling | speexdsp | 1.2.1#1 | no π΄ |
Tracy Profiler | Event profiler (development) | tracy | 0.11.1#2 | yes π’ |
zlib-ng | ZMBV video capture | zlib-ng | 2.2.4#1 | yes π’ |
Clone the repository (one-time step):
git clone https://github.com/dosbox-staging/dosbox-staging.git
Read [docs/BUILD.md] for the comprehensive compilation guide.
Note
CMake support is currently an experimental internal-only, work-in-progress feature; it's not ready for public consumption yet. Please ignore the
CMakeLists.txt
files in the source tree.
Install build dependencies appropriate for your OS:
# Fedora
sudo dnf install ccache gcc-c++ meson alsa-lib-devel libatomic libpng-devel \
SDL2-devel SDL2_net-devel opusfile-devel \
fluidsynth-devel iir1-devel mt32emu-devel libslirp-devel \
speexdsp-devel libXi-devel zlib-ng-devel
# Debian, Ubuntu
sudo apt install ccache build-essential libasound2-dev libatomic1 libpng-dev \
libsdl2-dev libsdl2-net-dev libopusfile-dev \
libfluidsynth-dev libslirp-dev libspeexdsp-dev libxi-dev
# 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 speexdsp libxi pkgconf
# openSUSE
sudo zypper install ccache gcc gcc-c++ meson alsa-devel libatomic1 libpng-devel \
libSDL2-devel libSDL2_net-devel \
opusfile-devel fluidsynth-devel libmt32emu-devel libslirp-devel \
speexdsp libXi-devel
# macOS
xcode-select --install
brew install cmake ccache meson libpng sdl2 sdl2_net opusfile \
fluid-synth libslirp pkg-config python3 speexdsp
-
Check out the main branch:
# commit or stash any personal code changes git checkout main -f
-
Pull the latest updates. This is necessary every time you want a new build:
git pull
-
Set up the build. This is a one-time step either after cloning the repo or cleaning your working directories:
meson setup build
The above enables all of DOSBox Staging's functional features. If you're interested in seeing all of Meson's setup options, run
meson configure
. -
Compile the sources. This is necessary every time you want a new build:
meson compile -C build
Your binary is:
build/dosbox
The binary depends on local resources relative to it, so we suggest symlinking to the binary from your
PATH
, such as into~/.local/bin/
.
First, you need to setup vcpkg to install build dependencies. Once vcpkg is bootstrapped, open PowerShell and run:
PS:\> .\vcpkg integrate install
This step will ensure that MSVC can use vcpkg to build, find and links all dependencies.
Start Visual Studio and open the file vs\dosbox.sln
. Make sure you have
x64
selected as the solution platform. Use Ctrl+Shift+B to build all
projects.
Note, the first time you build a configuration, dependencies will be built
automatically and stored in the vcpkg_installed
directory. This can take
a significant length of time.
Instructions for other build systems and operating systems are documented in [docs/BUILD.md].
Links to OS-specific instructions: MSYS2, MacPorts, Haiku, NixOS.
Upstream commits are imported to this repo in a timely manner,
see branch svn/trunk
.
svn/*
- branches from SVNforks/*
- code for various abandoned DOSBox forksvogons/*
- community patches posted on the Vogons forum
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/*"
Please refer to the documentation guide before making changes to the website or the documentation.