dosbox-staging
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.
Summary of differences compared to upstream
For developers
dosbox-staging | DOSBox | |
---|---|---|
Version control | Git | SVN |
Language | C++14 | C++031 |
SDL | 2.0 | 1.2* |
CI | Yes | No |
Static analysis | Yes2,3,4 | No |
Dynamic analysis | Yes | No |
clang-format | Yes | No |
Development builds | Yes | No |
Automated regression tests | No (WIP) | No |
Feature differences
dosbox-staging does not support audio playback using physical CDs. Using CD Digital Audio emulation (loading CD music via cue sheets or mounting ISO images) is preferred instead.
Codecs supported for CD-DA emulation:
dosbox-staging† | DOSBox SVN‡ | |
---|---|---|
Opus | Yes (libopus) | No |
OGG/Vorbis | Yes (built-in) | Yes - SDL_sound 1.2 (libvorbis)5,* |
MP3 | Yes (built-in) | Yes - SDL_sound 1.2 (libmpg123)5,*,§ |
FLAC | Yes (built-in) | No§ |
WAV | Yes (built-in) | Yes - SDL_sound 1.2 (built-in)6,* |
AIFF | No | Yes - SDL_sound 1.2 (built-in)6,* |
*- SDL 1.2 was last updated 2013-08-17 and SDL_sound 2008-04-20
† - 22.05 kHz, 44.1 kHz, 48 kHz; mono, stereo
‡ - 44.1 kHz stereo only
§ - Broken or unsupported in either SDL_sound or DOSBox
Other differences:
dosbox-staging | DOSBox SVN | |
---|---|---|
Pixel-perfect mode | Yes (output=texturepp )7 |
N/A |
Resizable window | Experimental (windowresolution=resizable ) |
N/A |
Relative window size | N/A | windowresolution=X% |
OPL emulators | compat, fast, mame, nuked8 | compat, fast, mame |
CGA/mono support | Yes (machine=cga_mono )9 |
Only CGA with colour |
Wayland support | Experimental (use SDL_VIDEODRIVER=wayland ) |
N/A |
Modem phonebook file | Yes (phonebookfile=<name> ) |
N/A |
Autotype command | Yes10 | N/A |
Startup verbosity | Yes11 | N/A |
Stable release builds
Test builds / development snapshots
Build instructions
Read INSTALL file for a general summary about dependencies and
configure options and BUILD.md for the comprehensive
compilation guide. You can also use helper script
./scripts/build.sh
, that performs builds for many
useful scenarios (LTO, FDO, sanitizer builds, many others).
Linux, macOS
Install build dependencies appropriate for your OS:
# Fedora
sudo dnf install gcc-c++ automake alsa-lib-devel libpng-devel \
SDL2-devel SDL2_net-devel opusfile-devel
# Debian, Ubuntu
sudo apt install build-essential automake libasound2-dev libpng-dev \
libsdl2-dev libsdl2-net-dev libopusfile-dev
# Arch, Manjaro
sudo pacman -S gcc automake alsa-lib libpng sdl2 sdl2_net opusfile
# macOS
xcode-select --install
brew install autogen automake libpng sdl2 sdl2_net opusfile
Following flags are suggested for local optimised builds:
git clone https://github.com/dosbox-staging/dosbox-staging.git
cd dosbox-staging
./autogen.sh
./configure CPPFLAGS="-DNDEBUG" \
CFLAGS="-O3 -march=native" \
CXXFLAGS="-O3 -march=native"
make -j$(nproc)
See CONTRIBUTING.md for compilation flags more suited for development.
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 opusfile
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, MinGW), macOS (MacPorts), Haiku OS, others
Instructions for other build systems and operating systems are documented in BUILD.md.
Imported branches and community patches
Commits landing in SVN upstream are imported to this repo in a timely manner,
to the branches matching svn/*
pattern, e.g. svn/trunk
.
Other branch name patterns are also in use: vogons/*
for various
patches posted on the Vogons forum, munt/*
for patches from the Munt
project, etc.
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 imported from SVN 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)