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.
See compatibility.md for the current compatibility status of various games.
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:
- 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.
- 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.
- If you get disconnected, pause Flycast and hit the Connect button to reconnect.
Additional notes/caveats:
- DreamPotato defaults to connecting to slot A1. You can go into the settings and change this if you wish.
- 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.
- 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.
- 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.)
- If you want to use DreamPotato with multiple ports, you can launch multiple instance, and set a different Dreamcast Slot setting for each one.
- In Chao Adventure, you need to hit Mode to exit the game before inserting the VMU, or your progress may not be saved.
Download the latest bits from the Releases section.
- 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
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.
- You'll need a .NET 9 SDK matching the version in global.json installed on your computer.
- Copy your
american_v1.05.binVMU ROM intosrc/DreamPotato.MonoGame/Data/. - Build everything:
dotnet build. - Run the emulator:
dotnet run --project src/DreamPotato.MonoGame. - Run tests:
dotnet test
Under src/:
DreamPotato.Coreis where the emulator implementation resides.DreamPotato.Testsincludes unit tests for the emulator implementation.DreamPotato.MonoGameis the front-end, including UI and config file handling.dreampotato-vscodeis the VS Code extension--in very barebones/"alpha" state.- Currently, it contains only a TextMate grammar for LC86k assembly.
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.
Thanks to the following individuals, whose invaluable work on VMU emulation and reverse engineering helped make DreamPotato possible.
- Falco Girgis, author of ElysianVMU/libevmu and extensive documentation of VMU internals.
- Dmitry Grinberg for his VMU hackery project.
- Walter Tetzner, author of the waterbear assembler/disassembler.
- Homebrew developers jvsTSX and Jahan Addison for publishing homebrew software which was very helpful for testing the emulator.


