https://github.com/gyrovorbis/libevmu
Accurate, full-featured, cross-platform library aiming to emulate every aspect of the Sega Dreamcast's Visual Memory Unit (VMU).
https://github.com/gyrovorbis/libevmu
8-bit cpu-emulator dreamcast dreamcast-emulator dreamcast-vmu emulation emulator retrogaming sega-dreamcast visual-memory-unit vms vmu
Last synced: 18 days ago
JSON representation
Accurate, full-featured, cross-platform library aiming to emulate every aspect of the Sega Dreamcast's Visual Memory Unit (VMU).
- Host: GitHub
- URL: https://github.com/gyrovorbis/libevmu
- Owner: gyrovorbis
- License: mit
- Created: 2023-07-09T18:41:08.000Z (almost 2 years ago)
- Default Branch: libgimbal-refactor
- Last Pushed: 2024-01-10T14:30:04.000Z (over 1 year ago)
- Last Synced: 2024-11-05T00:35:56.363Z (6 months ago)
- Topics: 8-bit, cpu-emulator, dreamcast, dreamcast-emulator, dreamcast-vmu, emulation, emulator, retrogaming, sega-dreamcast, visual-memory-unit, vms, vmu
- Language: C
- Homepage: http://vmu.elysianshadows.com
- Size: 4.75 MB
- Stars: 40
- Watchers: 4
- Forks: 5
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-dreamcast - libElysianVMU - Platform-independent VMU emulator core by [Falco Girgis](https://github.com/gyrovorbis) (VMU)
README
![]()
libElysianVMU
C17-Based library for emulating the Sega Dreamcast's Visual Memory Unit
Explore the docs »
Accurate
·
Full-Featured
·
Cross-Platform
# Overview #
libElysianVMU (libEVMU) is a standalone emulator core of the Sega Dreamcast's 8-bit Visual Memory Unit (VMU), written in C17. It is the core powering the ElysianVMU emulator for Windows, MacOS, and Linux, which has been separated from any platform-specific back-end or UI front-end. Several years of meticulous research and reverse engineering have gone into the creation of this core, which has now been open-sourced in hopes of benefitting the Dreamcast community at-large.# Goals #
The primary goal of libEVMU is to provide a one-stop, all-encompassing framework exposing everything the VMU has to offer in a standard C codebase that can be ported to any platform or wrapped to any language, allowing for everyone to use it in their projects and to benefit from a common codebase. At a high-level, this goal encompasses:
- Fully and accurately emulating the VMU as a standalone gaming device
- Providing tooling and APIs around its filesystem and all relevant file formats
- Meticulously documenting every aspect of the codebase to expose everything that was previously undiscovered
- Being performant enough to be ported to a Sega Saturn, N64, or toaster oven
- Offering a high-level entity/component-based API that is intuitive and easy to work with
- Allowing for modeling exotic, customized, nonstandard VMUs with extended volumes or capabilities
- Providing low-level hooks for supporting debuggers and high-level tooling
- Rigorously unit testing all aspects of the codebase to ensure correctness# Features #
- Battery
- Emulated low-voltage signal
- BIOS Support
- Official (US and Japanese)
- Skip directly to GAME
- Modify date/time
- Emulated Software back-end
- Buzzer
- Creates and manages PCM buffers for audio back-end
- File System
- Import + export files
- Formatting
- Defragmentation
- Unlock/lock extra flash blocks
- Diagnostics and validation
- Changing volume icons or color
- Loading custom ICONDATA
- Modifying copy protection bits
- Loading a GAME file from only a VMS and no VMI
- Recalculating checksums
- Extracting and texturing icons
- Extracting and texturing eyecatches
- Supported File Formats
- .VMI
- .VMS
- .DCI
- .DCM
- .flash
- .bin
- Gamepad
- Polling or event-driven input back-ends
- Supports turbo buttons, slow motion, and fast-forward
- LCD Screen
- Emulated pixel ghosting and grayscale effects
- Extra options for bilinear filtering, color inversion, etc
- Provides a simple virtual framebuffer abstraction for renderer back-end
- Provides asynchronous screen refresh callbacks, only when contents change# Platforms #
libEVMU is being actively tested in CI on the following targets:
- Windows
- MacOS
- Linux
- Sega Dreamcast
- Sony PSVita
- WebAssembly
- iOS
- Android# Compilers #
libEVMU is being built in CI with the following compilers:
- GCC
- Clang
- MinGW-w64
- EmscriptenNOTE: Microsoft Visual Studio support is currently a work in progress!
# Building #
Building is done with standard CMake. You should be able to open CMakeLists.txt directly as a project file in most IDEs such as XCode, Qt Creator, CLion, etc if you wish to build from a UI.First, ensure submodules are installed with:
```
git submodule update --init --recursive
```To build the project and its unit tests from the command-line, you can do the following:
```
mkdir build
cd build
cmake -DEVMU_ENABLE_TESTS=ON ..
cmake --build .
```# Credits #
Author
- Falco GirgisContributors
- Colton Pawielski
- jvsTSXCollaborators
- Andrew Apperley
- Patrick Kowalik
- Walter Tetzner
- Tulio Goncalves
- Kresna Susila
- Sam HellawellSpecial Thanks
- Marcus Comstedt
- Ruslan Rostovtsev
- Shirobon
- Deunan Knute
- Dmitry Grinberg
- RinMaru
- UltimaNumber
- Joseph-Eugene Winzer