Deecy is a very experimental Dreamcast emulator written in Zig.
Videos: Soul Calibur (May 2024), Grandia II (July 2024)
Install the correct zig version (see .zigversion
). You can use zigup to manage your installed zig versions, or get it from https://machengine.org/docs/nominated-zig/
zigup 0.14.0-dev.1911+3bf89f55c
Make sure Git LFS is installed (needed by zig-gamedev to get some bundled binaries).
git clone --recurse-submodules https://github.com/Senryoku/Deecy # Clone the repo and its submodules
cd Deecy
zig build run # Build and run in debug mode without any argument
zig build run -Doptimize=ReleaseFast -- -g game/game.gdi # Build and run in release mode and loads a gdi
You will also need to provide copies of dc_boot.bin
and dc_flash.bin
files in the data/
directory.
Linux isn't fully supported yet. nfd-zig (native file dialog) needs these additional dependencies on Linux:
sudo apt install libgtk-3-dev
- Debug, debug, debug.
- Better low level emulation: Most games do not work as well when not using the HLE'd syscalls.
- ch0-DMA and ch1-DMA?
- What's "Maple V blank over interrupt"? "This interrupt is generated when a Maple interface transmission/reception operation spans V-Blank_In."
- AICA:
- Stereo debugging
- DSP
- More debug
- Renderer:
- Framebuffer:
- Somehow detect writes to framebuffer and display it.
- Write back for games that need it.
- Modifier Volumes.
- Implemented: Inclusion volumes and shadow bit over opaque and transparent geometry.
- Missing: Exclusion volumes.
- "Region Array Data Configuration" (written by the CPU directly to VRAM) are completely ignored. I don't know if it's actually used much.
- Fog LUT Mode 2.
- Secondary accumulate buffer (very low priority, not sure if many games use this feature).
- Bump mapping.
- Mipmaps for palette textures?
- Sort-DMA?
- User Tile Clip, only the simplest version is supported.
- Follow ISP_FEED_CFG discard mode flag? (Find a game that turns it off)
- Framebuffer:
- MMU: Only supported for store queue writes using the pref intruction (used by Ikaruga for example)
- Some (rendering) performance metrics directly in the emulator?
- GDROM-DMA: Uses a superfluous memcpy (gdrom -> dma-queue -> ram). Not a huge deal on my main system, but I bet it's noticeable on lower end devices.
- A lot more than the previous list
- http://www.shared-ptr.com/sh_insns.html
- SH4 Hardware Manual / Programming Manual
- https://segaretro.org/Dreamcast_official_documentation
- Dreamcast Programming by Marcus Comstedt : https://mc.pp.se/dc/
- Boot ROM disassembly by Lars Olsson (https://lars-olsson.sizious.com/, originally https://www.ludd.ltu.se/~jlo/dc/)
- AICA ARM7 Core tester by snickerbockers: https://github.com/snickerbockers/dc-arm7wrestler/
- Reicast https://github.com/skmp/reicast-emulator
- Multiple libraries from https://github.com/michal-z/zig-gamedev (MIT), included in libs/ as a submodule.
- ndf-zig: https://github.com/fabioarnold/nfd-zig (MIT)
- zig-lz4: https://github.com/SnorlaxAssist/zig-lz4 (MIT), bindings for LZ4 https://github.com/lz4/lz4 (BSD 2-Clause)
- 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 :)
- Uses data from MAME under the BSD-3-Clause licence (see
src/gdrom_secu.zig
).