Senryoku/Deecy

Dreamcast emulator written in Zig

236

stars

1,777

commits

Zig

primary language

Sep 11, 2026

updated

senryoku.github.io/Deecy/
dreamcast
emulation
emulator
zig
zig-program

README

Deecy

Deecy is an experimental Dreamcast emulator written in Zig.

Videos: Soul Calibur (May 2024), Grandia II (July 2024), DCA3 (January 2025)

image

Installation

  • Download the latest version for your platform from the Release Page.
  • Decompress the zip archive.
  • Copy your bios and flash dumps as dc_boot.bin and dc_flash.bin to the data folder.
  • Launch the Deecy executable and click Change Directory to select the folder where you store your DC games.

Usage

Keybindings

Deecy should detect, map and use controllers automatically. Host controllers can be manually assigned to guest controller ports in the Settings. Keyboard bindings can be customized in the settings. Defaults for controller 1:

DC ControllerHost Keyboard (AZERTY)
A, B, X, YA, Z, Q, S
L, R triggersW, X
StartEnter
Left StickNumpad 8, 4, 5, 6
DpadDirectional Arrows

Shortcuts

KeyAction
EscapeShow/Hide the UI
SpaceStart/Pause emulation
FToggle Fullscreen
LToggle unlimited emulation speed
F1-F4Save state 1-4
F5-F8Load state 1-4
DToggle debug UI
NNext Frame (Experimental)

CLI options

OptionActionArgumentNotes
-gLoad and Execute a disc file (.gdi/.cdi/.chd)Path to a disc file
--vmuReplace default vmu filePath to an vmu fileDisables per-game VMUs
--no-realtimeStarts with unlimited emulation speed
--load-stateLoads a save state on startupSlot number (0-3)Use with -g
--stopPrevent automatic start of emulationUse with -g or -b
-bLoad and Execute a .bin filePath to a .bin fileWill also skip the BIOS. Experimental
-iReplace default IP.BIN filePath to an IP.BIN fileUse with -b only
--fullscreenStarts in fullscreen
--scifPipe serial port to /tmp/deecy/scif (Linux only)Especially useful for prototyping using dcload-serial

Compatibility

See the list here.

Contribute in its repository.

Build

Install the correct zig version (see .zigversion). You can use zigup to manage your installed zig versions, or get it from https://ziglang.org/download/.

zigup 0.16.0

Clone and build. Zig will fetch all dependencies automatically.

git clone https://github.com/Senryoku/Deecy         # Clone the repo
cd Deecy
zig build run                                       # Build and run in debug mode without any argument
zig build run --release=fast -- -g "path/game.gdi"  # Build and run in release mode and loads a disc

You will also need to provide copies of dc_boot.bin and dc_flash.bin files in the data/ directory.

Linux

Building on Linux requires these additional dependencies:

  • libgtk-3-dev for nfd-zig (native file dialog)
  • libudev-dev for DreamPicoPort. DreamPicoPort support can be disabled with -Ddreampicoport=false
sudo apt install libgtk-3-dev libudev-dev

Things I know I have to do

  • AICA:
    • More accurate low pass filter (Q is currently ignored. Test case: the bios)
  • Renderer:
    • Framebuffer:
      • Improve detection of writes to framebuffer.
      • Use the correct texture parameters when rendering to the host texture cache (skipping the copy to guest VRAM).
    • Modifier Volumes.
      • Implemented: Inclusion volumes and shadow bit over opaque and transparent geometry.
      • Missing: Exclusion volumes.
      • Missing: Open Translucent MVs. I've seen some uses, but no easy way to check an hypothetical implementation.
    • Region Array Data Configuration are mostly ignored.
    • Fog LUT Mode 2.
    • User Tile Clip, only the simplest version is supported.
    • Secondary accumulate buffer (low priority, not many games use this feature).
    • Mipmaps for palette textures?
    • Follow ISP_FEED_CFG discard mode flag? (Find a game that turns it off)

Some sources

Dependencies

Dependencies are managed by the build.zig.zon file.

Thanks

  • Huge thanks to drk||Raziel and MetalliC for their respective contributions to the scene, and for answering my questions!
  • Thanks to originaldave_ for the sh4 tests (https://github.com/SingleStepTests/sh4)
  • And overall thanks to everyone participating in the EmuDev Discord :)

Licence

Uses data from MAME under the BSD-3-Clause licence (see src/gdrom_secu.zig). CHD related features (src/disc/chd.zig) are also inspired by, or even direct ports of, their equivalent from the MAME project.

Rest is MIT.

Contributors

Senryoku

1,775 commits

Immersion95

1 commits

MoriGM

1 commits

Senryoku/Deecy

Dreamcast emulator written in Zig

236

stars

1,777

commits

Zig

primary language

Sep 11, 2026

updated

senryoku.github.io/Deecy/
dreamcast
emulation
emulator
zig
zig-program

README

Deecy

Deecy is an experimental Dreamcast emulator written in Zig.

Videos: Soul Calibur (May 2024), Grandia II (July 2024), DCA3 (January 2025)

image

Installation

  • Download the latest version for your platform from the Release Page.
  • Decompress the zip archive.
  • Copy your bios and flash dumps as dc_boot.bin and dc_flash.bin to the data folder.
  • Launch the Deecy executable and click Change Directory to select the folder where you store your DC games.

Usage

Keybindings

Deecy should detect, map and use controllers automatically. Host controllers can be manually assigned to guest controller ports in the Settings. Keyboard bindings can be customized in the settings. Defaults for controller 1:

DC ControllerHost Keyboard (AZERTY)
A, B, X, YA, Z, Q, S
L, R triggersW, X
StartEnter
Left StickNumpad 8, 4, 5, 6
DpadDirectional Arrows

Shortcuts

KeyAction
EscapeShow/Hide the UI
SpaceStart/Pause emulation
FToggle Fullscreen
LToggle unlimited emulation speed
F1-F4Save state 1-4
F5-F8Load state 1-4
DToggle debug UI
NNext Frame (Experimental)

CLI options

OptionActionArgumentNotes
-gLoad and Execute a disc file (.gdi/.cdi/.chd)Path to a disc file
--vmuReplace default vmu filePath to an vmu fileDisables per-game VMUs
--no-realtimeStarts with unlimited emulation speed
--load-stateLoads a save state on startupSlot number (0-3)Use with -g
--stopPrevent automatic start of emulationUse with -g or -b
-bLoad and Execute a .bin filePath to a .bin fileWill also skip the BIOS. Experimental
-iReplace default IP.BIN filePath to an IP.BIN fileUse with -b only
--fullscreenStarts in fullscreen
--scifPipe serial port to /tmp/deecy/scif (Linux only)Especially useful for prototyping using dcload-serial

Compatibility

See the list here.

Contribute in its repository.

Build

Install the correct zig version (see .zigversion). You can use zigup to manage your installed zig versions, or get it from https://ziglang.org/download/.

zigup 0.16.0

Clone and build. Zig will fetch all dependencies automatically.

git clone https://github.com/Senryoku/Deecy         # Clone the repo
cd Deecy
zig build run                                       # Build and run in debug mode without any argument
zig build run --release=fast -- -g "path/game.gdi"  # Build and run in release mode and loads a disc

You will also need to provide copies of dc_boot.bin and dc_flash.bin files in the data/ directory.

Linux

Building on Linux requires these additional dependencies:

  • libgtk-3-dev for nfd-zig (native file dialog)
  • libudev-dev for DreamPicoPort. DreamPicoPort support can be disabled with -Ddreampicoport=false
sudo apt install libgtk-3-dev libudev-dev

Things I know I have to do

  • AICA:
    • More accurate low pass filter (Q is currently ignored. Test case: the bios)
  • Renderer:
    • Framebuffer:
      • Improve detection of writes to framebuffer.
      • Use the correct texture parameters when rendering to the host texture cache (skipping the copy to guest VRAM).
    • Modifier Volumes.
      • Implemented: Inclusion volumes and shadow bit over opaque and transparent geometry.
      • Missing: Exclusion volumes.
      • Missing: Open Translucent MVs. I've seen some uses, but no easy way to check an hypothetical implementation.
    • Region Array Data Configuration are mostly ignored.
    • Fog LUT Mode 2.
    • User Tile Clip, only the simplest version is supported.
    • Secondary accumulate buffer (low priority, not many games use this feature).
    • Mipmaps for palette textures?
    • Follow ISP_FEED_CFG discard mode flag? (Find a game that turns it off)

Some sources

Dependencies

Dependencies are managed by the build.zig.zon file.

Thanks

  • Huge thanks to drk||Raziel and MetalliC for their respective contributions to the scene, and for answering my questions!
  • Thanks to originaldave_ for the sh4 tests (https://github.com/SingleStepTests/sh4)
  • And overall thanks to everyone participating in the EmuDev Discord :)

Licence

Uses data from MAME under the BSD-3-Clause licence (see src/gdrom_secu.zig). CHD related features (src/disc/chd.zig) are also inspired by, or even direct ports of, their equivalent from the MAME project.

Rest is MIT.

Contributors

Senryoku

1,775 commits

Immersion95

1 commits

MoriGM

1 commits

Languages

Zig

98.0%

WGSL

2.0%