
A patch to finally unlock the best VCD player the SEGA Dreamcast ever saw!
DreamMovie "UNLOCKED" removes the proprietary IR dongle requirement from the DreamMovie VCD/MP3 player, replacing it with full standard Dreamcast controller support. For the first time, anyone with a Dreamcast can use this software without needing the original (and now extremely rare) hardware.
DreamMovie "UNLOCKED" is currently at version 1.0.
Users must connect their controller in Port A for DreamMovie to recognize it (see more in the Writing a Maple Bus Protocol Swap in 138 Bytes section).
GDEMU users are encouraged to use my openMenu Virtual Folder Bundle package. Accordingly, the instructions below are written with that package in mind.
23, place your first VCD disc in slot 24). Note that as of version 1.5.2, GD MENU Card Manager will automatically convert any CUE-based disc images to a GDEMU-compatible format.1/X, where X represents the total number of discs. A typical two-disc VCD (e.g., "Metropolis"), for example, would start with DreamMovie as disc 1/3 using the Title value "Metropolis" and a custom Serial value like VCDMETR. The first VCD disc for the film would be marked as disc 2/3 and share the same Title and Serial values ("Metropolis" and VCDMETR, respectively), and so on.Note that you can create as many of these DreamMovie plus VCD disc sets as desired on your SD card. Simply repeat steps 3-5 for each.
I was twelve years old when I bought my DreamMovie unit. At the time, the Dreamcast was already fading from store shelves, but for a kid obsessed with imported media, the idea of turning a game console into a VCD player was irresistible. That purchase kicked off what became a lifelong obsession with collecting commercial VCD releases from all over the world.
Fast forward to 2026, and the DreamMovie hardware has become genuinely rare. The IR receiver dongles break, get lost, or simply never show up in the occasional eBay listing. The best VCD playback software the Dreamcast ever saw was locked behind a piece of proprietary plastic that fewer and fewer people still own.
This project started as a "wouldn't it be cool if" thought experiment and turned into untold hours of reverse engineering, SH4 assembly hacking, and more test builds than I care to count. The goal was simple: make DreamMovie work with a standard Dreamcast controller, so that anyone can use it.
DreamMovie is an unlicensed SEGA Dreamcast peripheral that turns the console into a VCD (Video CD) and MP3 player. It was released around 2001, sold through outlets like the now-defunct Lik-Sang online store, and for a while was all over eBay. The product was manufactured and distributed under various Chinese company brands, including BearCity and SRC, both of which were known for producing unlicensed console accessories and add-ons during that era.
The package included: - A proprietary IR receiver that plugs into any controller port - A small IR remote control (powered by two CR2032 coin cell batteries) - A self-booting CD-R containing the DreamMovie software
The IR receiver doubles as both an input device (receiving remote control commands) and a hardware dongle (authenticating with the software via challenge-response). Without the receiver plugged in, the software locks up on the title screen.
DreamMovie was not the first attempt at a Dreamcast VCD player. An earlier iteration, commonly referred to as "Dream VCD Player" (its title screen credited "XingHong Electronic Co., Ltd."), existed before it. That version had no IR remote control at all and suffered from serious audio/video synchronization and rendering issues. It did, however, require a controller port dongle to be present in order to operate, the need for which was cracked by the old-school Dreamcast scene release group Echelon back in the day, making it freely available. That said, its poor playback quality meant most saw it as nothing but a passing curiosity.
DreamMovie was the follow-up that got it right. The video playback is clean, the audio stays perfectly in sync, and it handles VCD discs reliably. It is, to this day, the best VCD playback software ever made for the Dreamcast. There is simply nothing else on the platform that comes close.
But it shipped with that dongle and remote requirement, and with these units being unobtanium (or cost prohibitive when found on auction sites), the software became effectively inaccessible to anyone who did not already own one.
Until now...
The DreamMovie dongle is not just an IR receiver. It is an active authentication device that participates in a continuous challenge-response protocol over the Dreamcast's Maple Bus (the standard peripheral communication bus that controllers, VMUs, and other accessories use).
Here is what happens every frame during normal operation:
0x40000000 flagFUN_8c01f080, shuffling the data bits into even/odd positions to make the on-wire traffic harder to predict or replayIf the dongle fails to respond correctly more than five times, or if two seconds pass without a valid device on the bus, the software locks out. The error counter resets every 60 seconds (3600 frames), so even intermittent communication glitches are tolerated, but the dongle truly needs to be present and functioning.
The challenge word is assembled like this:
challenge = (mode << 27) | (tertiary_key << 24) | (secondary_key << 16) | key_seed | 0x40000000
Four XOR decode modes handle the response. Each mode picks different bytes from the two response words and XORs them with different halves of the key. For example, Mode 0:
decoded = (resp1_byte3 XOR key_high) | (resp1_byte2 XOR key_high) |
(resp0_byte1 XOR key_low) | (resp0_byte2 XOR key_low)
The other three modes shuffle which bytes get XOR'd and which pass through raw, making it impractical to fake responses without knowing the algorithm.
This is a well-designed protection for a 2001-era consumer product. It is not trivially replayable, it is not a static key check, and the randomized mode selection with bit interleaving makes bus sniffing alone insufficient to clone the dongle.
In short, it's borderline insane that a $25 unlicensed media player for the Dreamcast went to such lengths to thwart "unauthorized" use of its software, but I must say that Chris and I are both impressed!
The first real breakthrough came from Chris Daiglou, who built a custom Maple bus decoder capable of capturing and analyzing the raw traffic between the Dreamcast and the dongle. His work made it possible to observe the challenge-response exchanges in flight and understand the communication pattern: the software was sending structured commands and expecting structured replies, not just polling for a device presence flag.
Armed with that knowledge, I turned to the disassembly.
Before even reaching the binary, the disc itself throws up some obstacles. The DreamMovie disc's file listing looks like this:
┌── 0GDTEX.PVR
├── 1ST_READ.BIN
├── BACK.PVR
├── CUBE
├── DCVCD.EXE
├── DISK.PVR
├── FLAG.PVR
├── IP.BIN
├── LOGO.PVR
├── MANATEE2.DRV
├── MANATEE.DRV
├── MP210R.MLT
├── MSL.OUT
├── SEGA.PCX
└── WINCE
├── ARIAL.TTF
├── ARMCOM.DRV
├── D3DIM.DLL
├── DDHAL.DLL
├── DDI.DLL
├── DDRAW.DLL
├── DINPUTX.DLL
├── DSOUND.DLL
├── MAPLEDEV.DLL
├── MAPLE.DLL
├── MMTIMER.DLL
├── OLEAUT32.DLL
├── PLATUTIL.DLL
├── SNDCORE.DLL
├── TIMER.DLL
├── TOOLHELP.DLL
├── WDMLIB.DLL
├── WDMOEM.DLL
└── WSEGACD.DLL
See that WINCE directory full of DirectDraw, DirectSound, and Maple DLLs? See the DCVCD.EXE (a genuine Windows CE PE32 binary, by the way)? It all screams "this is a Windows CE application." A prospective reverse engineer would reasonably look at DCVCD.EXE first, load it into a disassembler expecting ARM or SH4 WinCE code, and end up chasing a dead end.
None of it is functional. The Windows CE files are decoys.
In fact, I'm fairly confident that even 1ST_READ.BIN itself is a decoy too (see the Building the Disc: The CDI Patching Pipeline section).
The actual software lives in MSL.OUT, a 472,076-byte binary loaded into Dreamcast RAM at address 0x8c006800. It is a standard Katana SDK (not Windows CE) application, built with the SEGA development libraries and CRI Middleware. The file starts with an SDRV container header that embeds a copy of the ARM7 AICA sound driver (manatee.drv), followed by the SH4 executable code starting at file offset 0x9800 (which takes us to the typical base address of 0x8c010000).
Ghidra handles SH4 disassembly pretty well here, especially after you figure out that 0x8c006800 is the base address for MSL.OUT. From there, it was a matter of finding the dongle check code
$ claude mcp add DreamMovie-UNLOCKED \
-- python -m otcore.mcp_server <graph>