Skip to content

RikkiGibson/DreamPotato

Repository files navigation

DreamPotato

DreamPotato is a Dreamcast VMU emulator currently in beta.

Warning

When opening a .vmu or .bin file, the emulator will modify the file on disk while running in order to persist changes, such as save file changes on the memory card, saving your progress in minigames, or when using the Load State command. Consider making copies of VMU files before using them to avoid any chance of corrupting your saves. .vms files opened in the emulator will not be modified.

Download Latest Release

See compatibility.md for the current compatibility status of various games.

System Clock Power Stone Mini Sonic Adventure (Dreamcast integration)

Flycast Integration

DreamPotato Flycast Integration Demo

DreamPotato can connect to Flycast to support an experience similar to using a real Dreamcast and VMU together.

NOTE: The latest Flycast 2.6 stable release has a known issue with DreamPotato. Currently it's necessary to use a master branch build of Flycast. At time of writing, the build from 2026-01-28 (commit 21eb24f) is known to work.

Instructions:

  1. Open the Flycast controller settings. Enable "Use Physical VMU Memory". Enable "Use Network Expansion Devices" for the controller port you want to use to connect.
  2. Once both Flycast and DreamPotato are running, start a game in Flycast. After a moment, the swirl icon should appear in the DreamPotato menu bar indicating things are connected.
  3. If you get disconnected, pause Flycast and hit the Connect button to reconnect.

Additional notes/caveats:

  1. DreamPotato defaults to connecting to slot A1. You can go into the settings and change this if you wish.
  2. If you disable Use Physical VMU Memory, then Flycast will use its own internal VMU files for saving/loading games. DreamPotato will still display VMU graphics in that case.
    • When loading state in Flycast, Use Physical VMU Memory will be temporarily disabled. You'll need to pause the game and disconnect/reconnect DreamLink in order to resume using DreamPotato's VMU memory.
  3. DreamPotato will "take over" all the expansion devices for a given controller. So, if you want to do stuff like copy between Flycast-managed and DreamPotato-managed VMUs, you'll have to put them in separate controllers.
  4. DreamPotato does not play sound while docked to a controller. You should leave the Flycast VMU sound setting enabled if you want that. (DreamPotato does play sound in standalone mode.)
  5. If you want to use DreamPotato with multiple ports, you can launch multiple instance, and set a different Dreamcast Slot setting for each one.
  6. In Chao Adventure, you need to hit Mode to exit the game before inserting the VMU, or your progress may not be saved.

Usage

Download the latest bits from the Releases section.

Default Key Mappings

  • W - Up
  • A - Left
  • S - Down
  • D - Right
  • K - A
  • L - B
  • I - Mode
  • J - Sleep
  • Insert - Dock/Eject VMU to Dreamcast controller
    • You can also hold the Sleep button for 1 second to toggle docking/ejecting the VMU.
  • F5 - Save State
  • F8 - Load State
  • F10 - Pause/Resume
  • Tab (hold) - Fast Forward

Configuration

General configuration options include:

  • AutoInitializeDate: bool, default true. If true, skips the startup beep and date setup, and uses your computer's clock to initialize the VMU's clock. Specify false if you want to use the date setup sequence as you would when installing batteries with real hardware.
  • AutoDockEject: bool, default true. If true, automatically docks the VMU when Flycast is connected, and ejects it when Flycast is disconnected.
  • AnyButtonWakesFromSleep: bool, default true. If true, any button will wake the VMU from sleep. If false, only the sleep button will do that.

Key and button mappings can be changed in Settings -> Keyboard Config / Gamepad Config.

Building

  • You'll need a .NET 9 SDK matching the version in global.json installed on your computer.
  • Copy your american_v1.05.bin VMU ROM into src/DreamPotato.MonoGame/Data/.
  • Build everything: dotnet build.
  • Run the emulator: dotnet run --project src/DreamPotato.MonoGame.
  • Run tests: dotnet test

Project Overview

Under src/:

  • DreamPotato.Core is where the emulator implementation resides.
  • DreamPotato.Tests includes unit tests for the emulator implementation.
  • DreamPotato.MonoGame is the front-end, including UI and config file handling.
  • dreampotato-vscode is the VS Code extension--in very barebones/"alpha" state.
    • Currently, it contains only a TextMate grammar for LC86k assembly.

Why write a new emulator?

The biggest reason was: I was interested in timing-based luck manipulation in Pinta's Quest, which requires emulating the game at a very similar speed to real VMU hardware. I found that existing emulators did not run the game at a similar enough speed to real hardware to allow the same timings to work. I thought that writing a new emulator from scratch would be a good way to learn the hardware well enough to get to the bottom of how to do that.

Acknowledgements

Thanks to the following individuals, whose invaluable work on VMU emulation and reverse engineering helped make DreamPotato possible.