Skip to content

Senryoku/Deecy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Deecy

Deecy is a very 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.

Compatibility

See issue #33

Build

Install the correct zig version (see .zigversion, I try to keep up with Mach nominated version). 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.2577+271452d22

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

nfd-zig (native file dialog) needs these additional dependencies on Linux:

sudo apt install libgtk-3-dev

Things I know I have to do

  • Debug, debug, debug.
  • MMU: Currently disabled by default as it is still incomplete, and a performance hit.
    • Games using it only for store queue writes with the pref intruction (like Ikaruga) should work without enabling the full support.
    • Windows CE don't work at all yet, even with full emulation on (Crashes with PC=FFFFFD1F).
    • It is slow:
      • Exception handling resort back to the interpreter.
      • No effort was made to speed up normal operation either: It is still non functioning where it matters.
  • AICA:
    • Debug
  • Renderer:
    • Framebuffer:
      • Improve detection of writes to framebuffer (false positives?)
      • Write back for games that need it.
    • Modifier Volumes.
      • Implemented: Inclusion volumes and shadow bit over opaque and transparent geometry.
      • Missing: Exclusion volumes.
      • Missing: Translucent MV in pre-sort mode.
    • Region Array Data Configuration are mostly ignored.
      • Z Clear bit.
      • Flush Accumulate? (Secondary accumulate buffer)
      • Multipass rendering.
    • Fog LUT Mode 2.
    • User Tile Clip, only the simplest version is supported.
    • Bump mapping.
    • Secondary accumulate buffer (very low priority, not sure if many games use this feature).
    • Mipmaps for palette textures?
    • Sort-DMA?
    • Follow ISP_FEED_CFG discard mode flag? (Find a game that turns it off)

Nice to have

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

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.

About

Experimental Dreamcast emulator written in Zig

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published