Skip to content

Latest commit

 

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DC-DVD: Video Streaming to Dreamcast via Maple Bus

Stream video and images from a Raspberry Pi 5 to a Sega Dreamcast by emulating a DreamEye camera peripheral on a Pico 2 microcontroller.

RPi 5 ──USB CDC──▸ Pico 2 ──Maple Bus──▸ Dreamcast
(encode)           (relay)                (decode + display)

Why?

I wanted to create a DVD player peripheral for Dreamcast! Very impractical - but who cares?

Features

  • DVD playback — rip and stream DVD clips with menu navigation
  • Video streaming — any video file or live camera input, auto-transcoded to MPEG-1 + MP2 audio
  • Static images — send 320×240 RGB565 images at 181 KB/s (~0.83s per frame)
  • DreamEye emulation — Pico 2 appears as a camera peripheral with 5 parallel sub-devices for throughput

Hardware

Component Details
Sega Dreamcast With Broadband Adapter (BBA) for dc-tool-ip
Raspberry Pi 5 Encodes video, sends over USB CDC
Pico 2 GPIO 11 → MAPLE_A, GPIO 12 → MAPLE_B, connected to DC controller port A
DVD Reader USB DVD player hooked up to the RPI 5

Wiring: Pico 2 to Dreamcast Controller Port

        Pico 2              Level Shifter        DC Controller Port A
     ┌──────────┐            (3.3V ↔ 5V)
     │  GP11 ───┼── MAPLE_A ──▸│ A1  B1 │──▸ Pin 1 (SDCKA)
     │  GP12 ───┼── MAPLE_B ──▸│ A2  B2 │──▸ Pin 5 (SDCKB)
     │  GND  ───┼──────────────┼── GND ─┼──▸ Pin 3 (GND)
     │          │              └────────┘
     │  USB  ───┼──── to RPi 5
     └──────────┘

GP11 and GP12 use internal pull-ups. No external resistors needed. The Sense line (pin 4) is intentionally left unconnected.

Prerequisites

  • KallistiOS toolchain installed at /opt/toolchains/dc/kos/
  • Pico SDK (v2.0+)
  • dc-tool-ip for deploying to the Dreamcast
  • ffmpeg on the RPi for video transcoding
  • Python 3 with pyserial on the RPi

Environment Variables

Set these before running any scripts:

export RPI_HOST="user@192.168.1.100"   # RPi 5 SSH destination
export DC_IP="192.168.1.25"            # Dreamcast BBA IP address
export PICO_SDK_PATH="/path/to/pico-sdk"

A pass.txt file in the project root is used by sshpass for RPi SSH authentication.

Building

Pico firmware:

cd pico/build
PICO_SDK_PATH=/path/to/pico-sdk cmake .. -DPICO_BOARD=pico2
make -j$(nproc)

Dreamcast binary:

source /opt/toolchains/dc/kos/environ.sh
cd dc && make

Usage

Launch the DVD player (full menu navigation):

./dvd.sh [--rebuild]

Other misc scripts and junk in the "tools" directory.

How It Works

The Pico 2 firmware emulates a Sega DreamEye camera on the Maple Bus. The Dreamcast's KallistiOS-based viewer requests image/video data through standard Maple commands (GETCOND, CAMCONTROL), and the Pico serves data received over USB CDC from the RPi.

For video, the RPi transcodes input to MPEG-1 video with MP2 audio via ffmpeg and streams chunks over USB. The Dreamcast decodes with pl_mpeg and renders frames to the PVR.

Transfer uses 960-byte chunks distributed round-robin across 5 sub-devices for parallel throughput.

About

RPI firmware for playing DVDs on Dreamcast

Resources

Stars

13 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages