No description
Find a file
John Novak 1c5187b9ae
Some checks failed
Code analysis / Script linters (push) Has been cancelled
Code analysis / Clang static analyzer (push) Has been cancelled
Coverity Scan analysis / Coverity static analyzer (push) Has been cancelled
Update release notes / update_release_notes (push) Has been cancelled
Linux builds / Cache subprojects (push) Has been cancelled
Linux builds / GCC, Debian 11, aarch64 (push) Has been cancelled
Linux builds / GCC, Debian 10, ARMv7 (push) Has been cancelled
Linux builds / GCC, Debian 11, ARMv7 (push) Has been cancelled
Linux builds / GCC, Debian 11, ppc64le (push) Has been cancelled
Linux builds / Clang 12, Ubuntu 22.04 (push) Has been cancelled
Linux builds / GCC 10, Ubuntu 22.04 (push) Has been cancelled
Linux builds / GCC 9, minimum build (push) Has been cancelled
Linux builds / GCC 12, +debugger (push) Has been cancelled
Linux builds / Release build (push) Has been cancelled
Linux builds / Publish additional artifacts (push) Has been cancelled
macOS builds / Clang (arm64) (push) Has been cancelled
macOS builds / GCC 12 (x86_64) (push) Has been cancelled
macOS builds / Clang (x86_64) (push) Has been cancelled
macOS builds / Release build (arm64) (push) Has been cancelled
macOS builds / Release build (x86_64) (push) Has been cancelled
macOS builds / Publish universal build (push) Has been cancelled
macOS builds / Publish additional artifacts (push) Has been cancelled
PVS-Studio analysis / PVS-Studio static analyzer (push) Has been cancelled
Windows MSVC builds / MSVC 64-bit (push) Has been cancelled
Windows MSVC builds / MSVC 32-bit (push) Has been cancelled
Windows MSVC builds / Release build (64-bit) (push) Has been cancelled
Windows MSVC builds / Release build w/ debugger (64-bit) (push) Has been cancelled
Windows MSVC builds / Release build (32-bit) (push) Has been cancelled
Windows MSVC builds / Release build w/ debugger (32-bit) (push) Has been cancelled
Windows MSVC builds / Publish additional Windows artifacts (push) Has been cancelled
Windows MSYS2 builds / GCC (MinGW) x86 +tests (push) Has been cancelled
Windows MSYS2 builds / Clang x86_64 +tests (push) Has been cancelled
Windows MSYS2 builds / Clang x86_64 +debugger (push) Has been cancelled
Windows MSYS2 builds / GCC (UCRT) x86_64 +debugger (push) Has been cancelled
Windows MSYS2 builds / Clang x86_64 Release (push) Has been cancelled
Windows MSYS2 builds / Publish additional artifacts (push) Has been cancelled
website: enable dev site banner
2023-12-19 20:50:25 +10:00
.github Revert "Bump dawidd6/action-download-artifact from 2 to 3" 2023-12-17 19:21:29 -08:00
contrib Restore the previous behaviour of pixel-art upscaler shaders 2023-12-19 07:44:33 +10:00
docs Cleanup country support, add historic locales 2023-12-05 07:42:55 +01:00
include Only capture the visible image in rendered image capture mode 2023-12-11 07:53:18 +10:00
licenses Switch back to GPL-2.0-or-later for binaries 2023-04-18 07:38:19 -07:00
packages Add PPC64LE docker image 2023-09-13 10:17:41 -07:00
scripts Only recursively fetch file-type meson subprojects 2023-12-14 19:16:34 -08:00
src Log warning to console when not using full FPU 80-bit precision 2023-12-19 16:17:26 +10:00
subprojects Add zlib-ng support from system or built-in subproject 2023-12-14 19:16:34 -08:00
tests Add string util functions for parsing percentage values 2023-12-04 22:54:34 +10:00
vs Cleanup country support, add historic locales 2023-12-05 07:42:55 +01:00
website website: enable dev site banner 2023-12-19 20:50:25 +10:00
.clang-format Revert "Make Clang Format config Visual Studio 2019 compliant" 2023-05-16 14:47:20 -07:00
.gitattributes Update .gitattributes to auto-normalize text files 2022-04-27 08:59:00 -07:00
.gitignore Fix gitignore 2023-08-31 12:55:22 +10:00
.lgtm.yml Add SDL2_image dependency to packages and build systems 2022-11-09 19:10:21 -08:00
.lsan-suppress Improve use of GCC sanitizers in CI runs (#811) 2021-01-10 18:56:31 -08:00
.mailmap Add mailmap file to update maintainer information 2020-04-26 05:15:41 +02:00
.mdl-styles Add a sane Markdown linter style and mass update all .md files to 2023-01-06 18:57:45 +10:00
.muon.ini Check function presence before enabling loguru stacktraces 2023-12-04 01:08:23 -08:00
.pvs-suppress Suppress all PVS Studio V813 warnings 2023-09-27 08:05:02 +02:00
.pylint Remove some deprecated pylint config entries 2023-02-02 12:53:06 -08:00
AUTHORS Adjust copyright statements for 2021 2021-01-01 00:12:05 +01:00
BUILD.md Update Visual Studio 2019 references in the doco to 2022 2023-09-03 18:30:14 +10:00
CODE_OF_CONDUCT.md Indicate the project team can be contact via Discord 2022-01-11 08:44:55 -08:00
CONTRIBUTING.md Add a sane Markdown linter style and mass update all .md files to 2023-01-06 18:57:45 +10:00
DOCUMENTATION.md Remove space in Markdown code-span element 2023-09-05 09:12:27 -07:00
LICENSE Remove fontstash library 2023-10-17 04:59:46 -05:00
meson.build Build PNG from subproject if it depends on internal deps 2023-12-14 19:16:34 -08:00
meson_options.txt Add zlib-ng support from system or built-in subproject 2023-12-14 19:16:34 -08:00
README Remove opencaptures 2023-10-06 11:20:07 +10:00
README.md Update README.md 2023-10-04 16:41:14 +10:00
SECURITY.md Create SECURITY.md 2023-04-14 16:45:58 -07:00
security.txt Update our security contact information and clearsign the document 2022-01-12 05:52:11 -08:00
THANKS Fix name typo 2022-05-01 11:49:14 -07:00
vcpkg.json Revert "Use pinned vcpkg versions" 2023-01-13 11:36:53 -08:00

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 (VisualStudio) build status Windows (MSYS2) build status macOS build status

Code quality status

Coverity status

Summary of features

For developers

Feature Status
Version control Git
Language C++17
SDL >= 2.0.5
Logging Loguru for C++5
Buildsystem Meson or Visual Studio 2022
CI Yes
Static analysis Yes1,3,4
Dynamic analysis Yes
clang-format Yes
Development builds Yes
Unit tests Yes6
Automated regression tests WIP

For users

Feature Description
CD-DA file codecs Opus, OGG/Vorbis, MP3, FLAC, and WAV
Integer scaling integer_scaling = vertical or horizontal; replaced "pixel-perfect" mode7
Resizable window Yes
Relative window size windowresolution = small, medium, or large config setting
Window placement windowposition config setting16
OPL emulator Nuked OPL, a highly accurate (YMF262, CT1747) emulator 8
CGA/mono support machine = cga_mono and monochrome_palette config settings9
CGA composite modes For machine = pcjr, tandy, and cga; toggleable via hotkeys
Wayland support Experimental: use SDL_VIDEODRIVER=wayland
Modem phonebook file phonebookfile config setting
Raw mouse input raw_mouse_input config setting
AUTOTYPE command Yes10
MORE command Yes21
Startup verbosity Yes11
GUS enhancements Yes12
FluidSynth MIDI Built-in13; via FluidSynth 2.x (SoundFonts not included)
MT-32 emulator Built-in; via libmt32emu 2.4.2 (requires user-supplied ROM files)
Expanded S3 support 4 and 8 MB of RAM14
Portable & layered conf By default15
Translations handling Bundled, see section 14 in README
ENet modem transport serialport sock:1 flag or SERIAL.COM17
Ethernet via [slirp] See [ethernet] config section
IDE support for CD-ROMs See -ide flag in IMGMOUNT.COM /help
Networking in Win3.11 Via local shell18
Audio filters See *_filter config settings
Audio reverb and chorus See reverb config setting and MIXER.COM /help
Audio stereo crossfeed See chorus config setting and MIXER.COM /help
AdLib Gold emulation Via oplmode = opl3gold; emulates the surround add-on module too19
Master audio compressor compressor config setting20
Dual/multi-mouse input See [mouse] config section
ReelMagic support See [reelmagic] config section

Stable release builds

Linux, Windows, macOS

Test builds / development snapshots

Development builds.

Get the source

  • Clone the repository (one-time step):

    git clone https://github.com/dosbox-staging/dosbox-staging.git
    

Build instructions

Read BUILD.md for the comprehensive compilation guide.

DOSBox Staging has the following library dependencies:

Package (libname) Min Version Provides feature Presence Meson-wrap VCPKG repo availability
FluidSynth (fluidsynth) 2.2.3 General MIDI playback Optional yes yes common
Google Test+Mock (gmock) 1.8.0 Framework for unit testing (development) Optional yes yes common
IIR (iir1) 1.9.3 Audio filtering Mandatory yes yes rare
libpng (libpng) n/a PNG-encoding of screen captures Optional yes yes very common
Munt (libmt32emu) 2.5.3 Roland MT-32 and CM-32L playback Optional yes yes rare
Opus File (opusfile) n/a CDDA playback for Opus-encoded track files Mandatory yes yes common
SDL 2.0 (sdl2) 2.0.5 OS-agnostic API for video, audio, and eventing Mandatory yes yes common
SDL_net 2.0 (sdl2-net) 2.0.0 Network API for emulated serial and IPX Optional yes yes common
slirp (libslirp) 4.6.1 Unprivileged virtual TCP/IP stack for Ethernet Optional yes yes less-common
SpeexDSP (speexdsp) n/a Audio resampling Mandatory yes yes common
Tracy Profiler (tracy) n/a Event profile (development) Optional yes yes rare
Zlib (zlib) 1.2.11 ZMBV video capture Optional yes yes very common

Linux, macOS

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
# Debian, Ubuntu
sudo apt install ccache build-essential libasound2-dev libatomic1 libpng-dev \
                 libsdl2-dev libsdl2-image-dev libsdl2-net-dev libopusfile-dev \
                 libfluidsynth-dev libslirp-dev libspeexdsp-dev libxi-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_image 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
# Void Linux
sudo xbps-install -S SDL2-devel SDL2_net-devel alsa-lib-devel \
                     fluidsynth-devel libiir1-devel libmt32emu-devel \
                     libpng-devel libslirp-devel opusfile-devel \
                     speexdsp-devel libatomic-devel libXi-devel
# NixOS 
# With Home Manager on home.nix (Recommended Permanent Installation)
home.packages = [ pkg-config gcc_multi cmake ccache SDL2 SDL2_net \ 
                  fluidsynth glib gtest libGL libGLU libjack2 libmt32emu libogg \ 
                  libpng libpulseaudio libslirp libsndfile meson ninja opusfile \
                  libselinux speexdsp stdenv alsa-lib xorg.libXi irr1 ]

# Note: the same package list will work with environment.systemPackages 
# on configuration.nix
# macOS
xcode-select --install
brew install cmake ccache meson libpng sdl2 sdl2_image sdl2_net opusfile \
     fluid-synth libslirp pkg-config python3 speexdsp

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

  • Checkout 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
    
  • Setup 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/ -- Have fun!

Windows - Visual Studio (2022 or newer)

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 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.

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

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

Imported branches, community patches, old forks

Upstream commits are imported to this repo in a timely manner, see branch svn/trunk.

  • svn/* - branches from SVN
  • forks/* - code for various abandoned DOSBox forks
  • vogons/* - 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/*"

Website & documentation

Please refer to the documentation guide before making changes to the website or the documentation.