Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

DreamcastHDMI / DCDigital

2021-02-20 Firmware v4.9 (Unified)

  • Asynchronous WiFi setup, solves issue #17

2021-01-08 Firmware v4.8 (Unified)

  • Fixed: issue #16: Web console incompatibilities with newer browsers

2020-09-14 Firmware v4.7 (Unified)

  • Installer access point (IAP) mode

    To start IAP mode: L + start + X + Y + A + B

    This sets up an access point with predefined credentials, an OSD screen warns about insecure WiFi credentials.

    IAP credentials are:

    WiFi SSID:     DCDigital-Install
    WiFi Password: installme!
    HTTP Username: please
    HTTP Password: installme!
    IP Address:
  • Fixed: very thin scanlines now work in Relaxed firmware too

  • ESP firmware is now built using PlatformIO 5.0.1

  • ESP new default filesystem is LittleFS.

    Optional: Filesytem Migration Guide

  • Fixed: PAL bob deinterlacing setting was overwritten by NTSC passthru setting, which resulted in corrupted image.

2020-08-27 Firmware v4.6 (Unified)

  • Fixed: LED pattern when no input clock is present

  • ESP firmware is now built using PlatformIO 4.3.4

  • Scanlines: New very thin setting (Thanks to @SvtTerminator)

  • Generated passwords: Avoid ambiguous characters.

2020-05-17 Firmware v4.5 (Unified)

  • Terraonion MODE disc switch support

2020-02-28 Firmware v4.4 (Unified)

  • New name/logo

2019-11-17 Firmware v4.3 (Unified)

  • New: Color expansion

    A lot, if not most Dreamcast games are using 16bit color (RGB565), so blue and red are only using the upper 5bit and green uses the upper 6bit in the 8bit data coming from the console.

    So a full white picture in RGB565 is (248,252,248) instead of (255,255,255). The new color expansion feature converts the 5bit/6bit color to 8bit using this formula:

    out8 = in5 | in5 >> 5;
    out8 = in6 | in6 >> 6;

    The settings for Color expansion are:

    • Off No color expansion is done.

    • Auto DCHDMI tries to detect the color mode used and automatically selects the proper expansion mode. Seems to work fine, but detection may fail, if the image contents are ambiguous.

    • RGB565 16bit to 24bit expansion

    • RGB555 15bit to 24bit expansion

  • New: Gamma adjust

    This can be used to adjust the gamma of the video image. Currently these predefined adjustments are possible:
    Click on image to enlarge

    Gamma adjust

2019-09-27 Firmware v4.2 (Unified)

2019-09-20 Firmware v4.1 (Unified)

  • Fixed: Memory overflow in osd write.

    This can cause DCHDMI to restart during firmware download. If this happens, just restart the download again until it finishes or use the Web console to update firmware.

  • New: Control OSD with an arcade stick.

    Device How to open OSD Notes
    Standard controller Left Trigger + Right Trigger + X + A + Start
    Dreamcast Keyboard CTRL+SHIFT+ESC See Keyboard reference for details
    Arcade stick Y + B + Z + C + Start C maps to R-trigger/ok
    Z maps to L-trigger/cancel
  • Fixed: Do not drive pin 6, when in Cable Detect mode (Thanks to Ste!)

  • New: Display WiFi signal quality and channel on Test/Info OSD screen.

  • Documentation: DCHDMI LED status patterns

  • Regarding WiFi connection and firmware updates:

    DCHDMI connects - when SSID and password are configured - to your local WiFi network immediately after startup, but it will not send out any information by itself, without you actually checking and/or downloading new firmware.

    If you are connected to a network and access the Firmware -> Check/Download function, it sends out your desired firmware release (master/develop/...) and your IP address. No further personal data is sent: no serial number, no SSID/passwords/config data.

    This can be easily verified by checking out the firmware/software here: DreamcastHDMI
    I encourage everyone to do so. If you want, you can easily build your own update server. Everything needed to do so is in this project. If you have questions, don't hesitate to contact me.

    This firmware/software will always remain free and will always only send out the minimum information required to perform a firmware upgrade.

    Also check out Web console documentation, on how to perform a firmware update without connecting your DCHDMI to a WiFi network.

2019-08-25 Firmware v4.0 (Unified)

  • Standard (-std) and Relaxed (-rlx) firmware flavours are now combined into one firmware release. When changing firmware flavour only the fpga firmware gets re-flashed from the firmware bundle downloaded previously.

    When upgrading to v4.0 for the first time, it's necessary to update the firmware once again, to download this new bundle.

  • ESP firmware is now built using PlatformIO 4.0.0

  • ESP: Redone I2C command scheduling and moved OSD menus to the progmem area to free up heap memory.

  • Fixed the following bug:

    • Issue #4: 31KHz 480p output has display area shifted left

      Horizontal position for VGA can now be set in the OSD (Advanced Video Settings). There is also an auto option which detects the correct position, if an image with non-black pixels on the edges is detected.
      Default is auto. To force correct position for the majority of commercial games, set to 0

    Big thanks to rdaviesuk for reporting!

  • Added the following features:

    Thanks again, rdaviesuk for reporting!

  • Keyboard support to control DCHDMI OSD

  • Fixed: Prevent OSD from picking up controller buttons while opening OSD.

2019-08-09 Firmware v3.0.4 (Relaxed)

  • Finally fixed: video output may not start on some systems

2019-07-31 Firmware v3.0.3 (Relaxed)

  • Fixed: video output may not start when configured to VGA/CableDetect

  • Fixed: bob deinterlacing was not properly aligned in VGA/480p mode

2019-06-16 Firmware v3.0.2 (Relaxed)

  • Fixed: Scanlines are now applied post HQ2X filter. (Thanks to SONIC3D!)

  • Fixed: Adjusted input data latch clock phase shift to be more robust (Thanks to Ste!)

2019-04-20 Firmware v3.0.0 (Relaxed)

  • New: Upscaling mode configuration option.

    Currently available: 2x and hq2x

    There will be more (e.g. anti aliasing) upscale filters in the future.

  • Fixed: OSD position is now excactly the same for all output modes :)

2019-04-20 Firmware v2.3.0 (Standard)

  • New: RGB color space (Advanced Video Settings) configuration option.

  • New: Menu option to configure firmware flavour (Firmware Upgrade->Configure):

    • Relaxed

      Allows filtered upscaling (currently HQ2X) by using relaxed HDMI timings.

    • Standard

      Fully HDMI compliant.

  • New: Improved output resolution switching time.

  • Fixed: 480i bob deinterlacing wasn't properly aligned for 960p/1080p output.

  • Internal: Properly queue osd write requests.

2019-02-06 Firmware v2.2.0

  • Fixed: It was possible to flash a firmware file from the OSD, which was only partially downloaded or corrupt. It was possible to brick DCHDMI with that, so access to the serial port was necessary to fix. Starting with v2.2.0 the checksum is verified before flashing to prevent flashing a broken firmware.

    this only affected the firmware upgrade via OSD, the web interface upgrade was already performing this check

    Instructions on how to recover can be found here: How to recover from a corrupted ESP firmware

2019-02-01 Firmware v2.1.1

  • Improved HDMI compliance

    • Use recommended values for 44.1kHz audio in 1080p mode

    • Use limited RGB range for all output resolutions other than VGA

  • Improved reliability

    • Removed ESP.eraseConfig() on full reset as this can lead to SPIFFS corruption in some rare cases.

    • Disabled persisting WiFi credentials to ESP internal config area (they are already stored in flash file system), to reduce flash wear.

2019-01-22 Firmware v2.1.0

Update is highly recommended!

  • Improved WiFi security

    • WiFi Setup OSD screen now displays the actual WiFi mode it's in (Connected/Access point)

    • WiFi AP password is now being generated every time DCHDMI enters Access point mode.

    • Generated WiFi AP password password can be displayed in WiFi Setup OSD screen.

    • If no web console HTTP Password is set, it's also generated every time DCHDMI starts.

    • HTTP User now defaults to dchdmi instead of Test

    • The HTTP Password set can also be displayed in WiFi Setup OSD screen, unless Protected mode is set to on during setup procedure. (In this case you need access to the serial console, if you have forgotten your HTTP Password)

2019-01-08 Firmware v2.0.0

  • Bob deinterlacing can be deactivated via new Advanced Video Settings.

    Set Deinterlacer to passthru to output 480i/576i.

  • PAL support (576p bob deinterlaced or 576i passthru)

  • OSD can show changelog after Check for new firmware.

  • Web interface setup procedure shows available options and checks for valid input.

  • GDEMU reset was available in main menu, even when disabled.

  • Full reset (DC, ESP, FPGA) now available in Reset DC

  • Video Mode can be changed by holding dpad up/down (ForceVGA/CableDetect) on startup/full reset.

  • Lots of FPGA firmware improvements and refactoring.

2018-12-18 Firmware v1.2.0

  • All output modes (VGA/480p/960p/1080p) now support dreamcast 240p games.

    Because video timing for 240p is different from 480i/p, the video output does not fully comply with the HDMI specification, so 960p/1080p may not work on all TVs (monitors usually work fine).

  • For some 240p games the active video area is shifted to the right, so there is a new option under Output Resolution to compensate for that: 240p adjust position


  • Changed the button layout for the OSD control: A and B are now remapped to R and L, to reduce button conflicts with the game running in the background.

    Thanks to -=FamilyGuy=- from the assemblergames forum for this idea!

  • ESP firmware is now built using PlatformIO, version 3.6.1


  • Updated the firmware to reflect the DCHDMI 1.3 hardware changes. The OSD now contains the following:

    • Output Resolution selection.

      Select VGA, 480p, 960p and 1080p from the OSD.

    • Scanlines.

      On/Off, Intensity, Odd/Even and Thick/Thin

    • Video Mode Setup.

      Select ForceVGA, CableSelect and SwitchTrick for startup.

    • Firmware Upgrade.

      Download and flash new firmware from OSD, and also reset DCHDMI.

    • WiFi Setup.

      Enter SSID and Password for a quick wifi configuration from OSD.

    • Reset Configuration.

      DCHDMI can now reset the dreamcast. It can also reset the USB-GDROM (to return to the menu), in which case an additional connection is necassary. This pin can also be used to press the GDEMU button. By default it's connected to the onboard LED. So here you can configure to what and if this optional wire is connected.

      • LED: use onboard diagnostic LED

      • GDEMU: connected to the button on the GDEMU

      • USB-GDROM: connected to the USB-GDROM reset circuit


  • Finished OSD with the following features:

    • Output Resolution selection.

      Select VGA, 480p, 960p and 1080p from the OSD.

    • Video Mode Setup.

      Select ForceVGA, CableSelect and SwitchTrick for startup.

    • Scanlines.

      On/Off, Intensity, Odd/Even and Thick/Thin

    • Firmware Upgrade.

      Download and flash new firmware from OSD, and also reset DCHDMI.

    • Debug Info.

      Debug information.

  • Integrated FirmwareManager ESP companion into this project, as the coupling between ESP and FPGA is very tight now.

  • Added upscaling of 480i content to 960p/1080p.


  • Dynamic reconfiguration of the output resolution.

    Output resolution is now configurable via WiFi webinterface, OSD integration will follow soon.

  • Removed 10CL016 and EP4CE6 support.


Updated the old 2017 block diagram to reflect some of the changes introduced since then:

Block diagram 2018


  • Maple bus integration to read controller data

    Uses code by Marcus Comstedt (zeldin) from his MapleMojo project.
    This enables leeching controller data directly from the maple bus to control the OSD.

  • Added I2C slave implementation by Steve Fielding.

    Enables ESP to write to OSD RAM and get the controller data aquired from the maple bus to control OSD.


Mainboard 1.2e Link

Finally finalized hardware 🎉 All interference issues are solved, we're now entering beta phase!

Rolling releases

The master branch will now contain the latest stable release. Development version moved to develop.

Firmware updates are easily downloaded and installed via WiFi ESP companion.

Currently the following features are planned:

  • OSD
  • Output resolution switchable via OSD
  • Dreamcast video mode control (pin6)
  • 480p trick
  • 240p x2 and x3 modes
  • Disc based firmware updates


Mainboard 1.2d Link

Close to final FPGA mainboard by citrus3000psi.

Some features are currently unused (e.g. pads for maple bus integration).
They will allow some cool firmware extensions in the future (e.g. OSD)

Flat flex 1.2a

citrus3000psi designed a flat flex cable, which connects the Mainboard to the audio and video dacs.

Cylcone 10 LP (10CL025):

We switched to a bigger FPGA to support more video output modes, 10CL016 and EP4CE6 are also supported.

Output Resolution Notes 10CL025 10CL016 EP4CE6
VGA 640x480 Correct pixel/aspect ratio!
480p 720x480 Original output: usually only 640px of the available 720px are used.
Incorrect pixel/aspect ratio!
960p 1280x960 x2 VGA
1080p 1280x960 x2 VGA, framed in 1920x1080
Other firmware features
  • basic 480i line doubling

  • 240p support

  • Scanlines.
    Available by rebuilding the firmware and defining SCANLINES_EVEN/SCANLINES_ODD, SCANLINES_THICK/SCANLINES_THIN and SCANLINES_INTENSITY in Macros.qsf

  • Upcoming: OSD. Maple bus connection is already on the 1.2d mainboard. Will be used in a later firmware.


Restructured source code and updated pin assignments for citrus3000psi's DCHDMI board 1.1:

Moved older versions (without ADV7315 and/or ICS664-3) to v0.1

Restructured "firmware" site:

Details on the available versions can be found here.


Added ESP-12 based firmware management tool, for upgrading firmware via WiFi.

  • A demo of the FirmwareManager ESP companion could be found here: Demo


Many thanks to citrus3000psi for his work on a QSB (quick soldering board). Check out the thread on the shmups forum: DreamcastHDMI github by chriz2600


New (auto)-build system using docker. Build system using docker


Added schematics and some information on Cyclone IV + ADV7513 + ICS664-3 build: CycloneIV-ADV7513-ICS664


A new version of the Cyclone IV + ADV7513 version is available here.

Features in this version:

  • Recoding of 480p (720x480) to VGA (640x480).

    HDTVs will display correct 1:1 instead of 8:9 pixel ratio for 4:3 aspect ratio. To achieve the required clock multiplication/division an ICS664-03 digitial video clock source is used. 320 pixel are buffered in RAM, so the delay from this will be 11.9us (microseconds, I will call this zero delay :) )

    This diagram shows the setup:

Block diagram

  • Support for 480i and 240p by line doubling with recoding to 480p as above.

  • Support for 480p/480i switching detection

Not in this version:

  • PAL 576i support


Cheaper FPGA

Instead of a DE0 Nano SOC you can also use a Waveshare CoreEP4CE6 Development Board. You can get it for 20-25$ via Aliexpress. The project folder for this is FPGA-CycloneIV. Because the board does not expose any clock pins, you have to desolder the oscillator and attach the dreamcast clock directly to the board.



I also created a board for experimenting with the Analog Devices ADV7513 HDMI Transmitter which can be found here. The verilog code for this can be found here.

Direct HDMI output from FPGA

If you want to go the "cheap" DIY route, i've made a PCB for the LVDS2TMDS part.

Dreamcast video output

Some details about the Dreamcast scaling issue on modern HDTVs: Video details link

  1. Create cheaper solution based on simple FPGA development board.
  2. Use FPGA to enable 480p mode. Currently I have to plug in a VGA cable ;)
  3. Design FPGA board with Cyclone IV FPGA and ADV7513 transmitter. I'm planning to include some RAM to be able to implement 480i as well as basic upscaling later. Edit: I don't need external RAM for line doubling.
  4. Design flat flex circuit to connect Dreamcast video DAC and audio DAC to FPGA board.
  5. Detailed HOWTOs.

Original documentation