Releases: owenb321/MiSTer_DVD
Release list
v0.3.0 — Dolby Digital and DTS 5.1 over HDMI, and a lot more audio that used to be silent
0.3.0 — Dolby Digital and DTS 5.1 over HDMI, and a lot more audio that used to be silent
The headline: Passthru now sends the bitstream over HDMI as well as optical, so an
AV receiver decodes DD/DTS 5.1 straight from the HDMI port — no add-on board at all.
Alongside it, several classes of disc that previously played silent now have sound.
Dolby Digital / DTS 5.1 over HDMI (#25)
Audio Out = Passthru used to be optical-only, which meant an add-on board with an
optical connector — the Digital I/O board's TOSLINK, or the Analog I/O board's combo
3.5 mm mini-TOSLINK. It now also leaves over HDMI, which every MiSTer already has,
so 5.1 needs no extra hardware.
This works because a DD or DTS bitstream is an ordinary 2-channel 48 kHz stream
underneath — 1.536 Mbit/s, which is exactly why DVD caps DTS at 1509.75 — so it fits the
single I2S line the board wires to the HDMI transmitter. The chip is told the stream is
compressed via its channel-status registers.
Requires the custom Main (MiSTer_DVDcss), because only the ARM side can talk to the
HDMI transmitter over I²C. It engages automatically when your receiver's EDID advertises
AC-3 or DTS. If yours does not advertise it but you know it decodes, add to MiSTer.ini:
[DVD]
dvd_hdmi_bitstream=2On stock Main, or on a TV that cannot decode these formats, HDMI stays silent rather
than making noise — verified on hardware.
⚠ Tested on a DE10-Nano only. DE10-Nano clones are copies of the same design and
should behave identically. SuperStation One is untested — it is a redesigned board
and we have not confirmed whether its HDMI transmitter is the same part, nor do we have
one to try. If you have one, reports welcome.
⚠ Passthru carries AC-3 and DTS only. IEC 61937 exists to carry compressed audio,
so an LPCM or MP2 track is silent in Passthru — on optical as well as HDMI. Use
Decode for those discs. This is a known gap rather than a permanent one: sending an
LPCM track as ordinary PCM is a supported thing for the hardware to do, it just needs
work on both the core and the Main side, so it is not in this release.
⚠ Multichannel LPCM is a different matter and is not possible on this hardware at
all: uncompressed 5.1 would need three more wires to the HDMI transmitter than the board
routes. Compressed 5.1 fits on one wire; uncompressed cannot.
Audio that used to be silent
- Every AC-3 channel layout now plays except 1+1 dual mono (#24). Mono (1.0) and the
surround layouts 3/0, 2/1, 3/1 and 2/2 were silent before — a whole-disc silence on
some titles, and a silent special feature on others. - Passthru locks properly at the start of a title and across track changes (#26). It
used to flap between naming the format and dropping out, sometimes needing a chapter
skip to settle. This affected optical too, and predates the HDMI output.
Disc menus: LINK FAIL and options that all led to the same place (#23)
Probably the widest-reaching fix in this release. Many discs implement their menus by
routing every button through one shared destination, and having that destination
read back which button you pressed to decide where to go. The core was treating those
as dead ends, so every option led to the same place — or to LINK FAIL.
Reported as "doesn't let you enter the maze / picks Play All whatever you choose",
"navigation issues preventing progress", and "link failure on every menu option".
Measured against a 505-disc sweep:
- 178 discs (36%) contain the structure this fix addresses — a third of the library
touches this code path - 70 discs (14%) carry the strict dispatcher shape, one of them 171 times on a
single disc - 6 discs went from a hard boot failure to a working menu, with zero regressions
across all 505. Four of those six were silently broken and had never been reported.
The prevalence number matters less than where it bites: the sweep could only measure
where a disc boots, and most of these dispatchers sit behind buttons you press while
using a menu. On a TV box set checked separately, the boot landing was fine while every
single menu button failed before the fix and worked after it.
Video
- Film detection no longer flaps on dark scenes (#22). Near-black frames carry no
usable cadence evidence, and counting them could flip the detector mid-film. It now
ignores uninformative frames. Measured across 123 discs: 15 better, none worse.
Tools
- DVD drive region tool (#27) — read a USB drive's region, and the remaining change
count, from the Scripts menu. A drive with no region set makes every physical disc pay
a multi-second CSS crack.
⚠ The SET path is untested on real hardware, and setting a region is irreversible
(roughly five changes, ever). Reading is confirmed working. Treat setting as
use-at-your-own-risk.
Also in this release
- Pre-release cleanup of the HDMI bitstream debug options (#29)
- Documentation corrections throughout (#28, #30), including a stale claim that AC-3
layouts were unsupported after they had been implemented
Install
Extract to /media/fat. For CSS-encrypted media, physical discs, or HDMI bitstream, add:
[DVD]
main=MiSTer_DVDcssand run install_dvdcss once from the Scripts menu.
The bare .rbf alone plays decrypted ISOs on stock Main, as before.
v0.2.0 — Physical DVD & encrypted-ISO playback
v0.2.0 — Physical DVD & encrypted-ISO playback
The headline is an optional add-on that plays physical discs and CSS-encrypted ISOs;
the base core is unchanged for decrypted-ISO and VCD/SVCD playback.
Physical discs & encrypted ISOs — new, opt-in
A small custom MiSTer Main, MiSTer_DVDcss, plus a user-supplied libdvdcss, adds:
- Physical DVD playback straight from a USB optical drive — insert and play, no rip.
- CSS-encrypted ISOs play directly — drop a raw (still-encrypted) rip on SD/USB and it
decrypts on the fly. No PC decrypt step, and no optical drive needed. - CSS handling covers no-drive-region key cracking (with an on-screen progress bar) and
caches recovered keys, so it's slow only on the first play of a disc. - Ejecting a disc returns the core to the idle logo.
Entirely opt-in and additive: enable it with [DVD] main=MiSTer_DVDcss in MiSTer.ini.
Without it, the core plays decrypted ISOs exactly as before — nothing regresses. libdvdcss
is not shipped; run install_dvdcss once from the MiSTer Scripts menu to fetch it.
See the README's "Physical discs and encrypted ISOs".
Playback & navigation fixes (since 0.1d)
- Audio logical→physical stream mapping (#17) — discs with a non-identity audio map
(some language-menu titles) now have sound where they were silent. - Failed menu links no longer start the movie (#17) — a failed menu-domain jump
re-enters the menu instead of launching the feature. - Mid-play file-load A/V desync fixed (#19) — loading a new file mid-play cuts clean
and holds sync (full flush trio + decoder soft reset).
Under the hood
mem_shim_burstcongestion reclaim (#18) — tag/LRU store moved to M10K, freeing
~11% of the FPGA's ALMs (98% → 87%).- Versioning — first release on semantic versioning (
0.2.0). The release.rbf
keeps itsDVD_YYYYMMDDfilename, which is what MiSTer uses to detect the newest build.
Install
Extract the release zip to your SD-card root (/media/fat if you copy it over the
network) — the core lands in _Other/, the MiSTer_DVDcss Main at the root, and the
libdvdcss installer into your Scripts menu. If you only want decrypted-ISO playback, the
bare DVD_*.rbf asset is all you need. Full instructions in the README.
Thanks
Thanks to Anime0t4ku for the guidance on the
custom-MiSTer-Main approach — a core-specific Main that reads and serves the disc's
sectors — which is what unlocked physical-disc support here.
0.1d (2026-08-27) — closed captions, D-Pad Seek, blocky-still fix
Everything merged since 0.1c: closed captions, a decoder fix for blocky menu stills, and D-Pad Seek.
Closed captions on line 21 (#12)
NTSC discs carry their captions inside the MPEG-2 video stream, not as subtitles. The core
now extracts them and re-inserts them on line 21 of the analog output, so your
television's own caption decoder renders them — the same way a real DVD player does.
Line-21 CC (debug page, default On). NTSC and analog output only — the waveform
lives in the blanking interval, invisible unless the TV decodes it, so leaving it on costs
nothing. Turn it Off only for capture devices or upscalers that display VBI lines.
Because a caption that does not appear gives you no way to tell "the TV is not decoding"
from "no data is reaching the output", there is also a CC Test Line diagnostic that
paints the same waveform on a visible line near the top of the picture — a band of dashes
that moves with the dialogue.
Of 34 discs surveyed, 6 carry live captions; none of the PAL discs do.
Blocky menu and game stills — fixed (#13)
A menu or game still could come up blocky, as though it had not finished loading. The
decoder was writing the new picture into the very frame slot the display was scanning out,
so you saw a half-decoded image. This was an upstream decoder bug, present since the
original import and untouched since.
Confirmed fixed on hardware — the artifacting on the Harry Potter interactive disc is
gone, with no regressions on other discs.
D-Pad Seek — jump by time (#15)
New D-Pad Seek setting (main OSD page, default Off). Turn it on and the D-pad
seeks while a title plays:
- Left / Right — back / forward 10 seconds
- Down / Up — back / forward 1 minute
Taps add up, and each one restarts a short window, so you can keep tapping to build a jump
of any length — tap Up twenty times for a 20-minute skip. The SEEK FWD 12:30 readout
shows the running total while you tap, and the jump happens once you stop.
On a DVD the targets come from the disc's own authored seek tables, so a jump lands on
a real frame rather than an estimated position. Raw VCD/SVCD images use the exact CD
geometry instead. Flat .mpg/.VOB files are not covered — use Fast Forward / Rewind
there, which is unchanged.
Why it is off by default: some interactive and game DVDs play seekable video while
expecting the D-pad as game input. Leaving it off keeps the D-pad purely navigational for
everyone who does not ask for this. When it is on, disc menus and the on-screen menus of
interactive DVDs still keep the D-pad — seeking is suppressed there.
Documentation (#14)
Corrected two wrong licensing statements, and retracted a clean-room claim about the AC-3
decoder — it derives from liba52, and the derivation is now stated in NOTICE.
Install
Copy DVD_v01d_20260827_0614.rbf to your SD card.
Full changelog: v0.1c-20260826...v0.1d-20260827
0.1c (2026-08-26) — startup OSD, bouncing-logo idle screen, working Reset
The post-launch feedback release: loading the core is no longer a black screen, and the OSD Reset row finally does something.
New
- The OSD opens by itself about a second after loading the core with no disc — like the console cores — so a bare launch lands in the file picker instead of a blank screen.
- Bouncing-logo screensaver while nothing is mounted (yes, it changes colour on every bounce, and yes, there's a corner hit). It keeps bouncing behind the file browser, fills widescreen displays edge-to-edge, and gets out of the way the moment a disc mounts.
- Custom logos: drop a
boot.romat/media/fat/games/DVD/boot.rom(create the folder) and the screensaver uses your artwork — up to 256×64, shown native or at 2×. Convert any PNG withtools/idle_logo.py --png art.png --out boot.rom(--verifypreviews exactly what will bounce). A corrupt file can never break anything: the built-in logo is physically write-protected. Resetin the OSD now works: stops playback, unloads the image, resets the DVD navigation VM, and drops back to the screensaver. (It had been wired to nothing since the fork began.)
Changed
- ⚠ Your settings will reset once. Settings now persist to
config/DVD_v1.CFG(config versioning — future option-layout changes can no longer silently misread an old settings file). Your oldDVD.cfgis left on the card, unused; re-pick your preferences in the OSD and they'll stick.
Internal
- Area-reclaim pass: the upstream decoder's dead on-screen-display logic tied off and the DVD-VM's register-file read muxes shared — ~2,200 ALMs and 8 DSPs back, which funded the idle screen and the 4× logo resolution.
- Timing-clean at clk_dec 88.88/90.46 MHz (SEED 11); details in the DVD.qsf seed ledger.
Full history: docs/idle_screen.md (design, the five hardware rounds, and the boot.rom format spec). PRs #9, #10.
0.1b (2026-08-25) — DVD-game screen timing + boot-menu fixes
DVD player core for MiSTer — alpha. OSD version line: v0.1b 260825.
Incremental drop on top of 0.1a. Both user-facing fixes here are on interactive DVD-game discs; film and TV playback is unchanged.
Fixes
Short screens no longer flash past (#5). A cell's authored playback time is a BCD {hh, mm, ss, rate|frames}, and the reader was reading hh:mm:ss only — throwing away the frame field. Game discs author their short screens as "N seconds + (fps−1) frames", i.e. one frame under N+1 seconds, so Weakest Link's correct/wrong answer reveal and its "money banked" screen (1 s + 24 f = 1.96 s, each a single I-frame) were stored as 1 s — under the hold threshold, so they got no hold at all and flashed by in ~0.2 s. Those screens now stay up for their authored ~2 s. HW-confirmed.
Menu over a disc's copyright screen reaches the real menu (#4). On a DVD-game disc the playing title's VTSM Root PGC is often a dispatcher, not a menu — on Atmosfear it routed to a random 35-second clip. While no menu has been loaded since the mount, the Menu key now targets the disc's main menu VTS instead. A 141-disc sweep found 6 discs changed behaviour, all from a title landing to a menu landing. Deliberate, documented deviation from libdvdnav. HW-confirmed.
UNSUPPORTED IMAGE no longer fires on a slow load (#4). The watchdog now measures streaming time rather than wall time. HW-confirmed.
Also in this build
- RNG-seed hardening: the framework wall clock (
hps_io TIMESTAMP) is folded into the DVD-VM'srndseed, matching what libdvdnav does. Plus a genuine latent fix — the entropy-stir path could drive the LFSR to zero, which is absorbing, after which everyrndreturned 1 forever. Not verified against any symptom. - Documentation: the disc sweep, nav and VM notes now carry the full diagnosis trail for the above, including one retracted hypothesis.
Known limitation worth naming
Some game discs put their randomisation setup in the boot sequence and their menu trampoline jumps straight past it. Skip the intro with Menu and the game can repeat a single question all round. That is how the disc is authored — a real player and libdvdnav do the same thing — so let the intro play. (Weakest Link is the example; details in docs/disc_sweep.md.)
Install
Copy DVD_v01b_20260825_2220.rbf to the SD card and load it like any core. If you are updating from an older build and the OSD defaults look wrong, delete /media/fat/config/DVD.cfg — MiSTer persists the status word per core and some option bits have been reordered.
Timing: SEED 9, clk_dec 90.70 MHz @100c / 90.14 MHz @−40C (gate 86.0). Note this exact bitstream has not itself been run on hardware; the fixes above were confirmed on same-RTL builds.
0.1a (2026-08-25) — VCD/SVCD playback
DVD player core for the MiSTer FPGA platform (DE10-Nano). Core version 0.1a,
build 2026-08-25 — the first release published on GitHub.
Install
Copy DVD_20260825.rbf to the SD card (e.g. _Console/ or anywhere the framework
menu reaches) and load it. Media goes anywhere the MiSTer file browser can reach —
including NAS shares (mounted read-write; see the README's Getting-started notes).
What's in this release
Everything in the pre-release alpha — full DVD playback with the disc's own menus,
button highlights, chapters, subtitles, multi-angle, AC-3/MP2/LPCM audio decoded in
fabric, DTS via S/PDIF passthrough, MPEG-1 video, dual-raster analog CRT output —
plus, new since the alpha:
VCD / SVCD playback (new)
- bin/cue rips play directly: select the rip's data-track
.bin(usually
"Track 2") fromLoad Video. The core detects the raw MODE2/2352 CD sectors by
content and strips them in fabric — no PC-side conversion step. Single-file
whole-disc.bin, raw.img, and extracted.DATfiles also work. - MPEG-1 system streams (VCD) demux natively alongside MPEG-2 PS (SVCD/DVD).
- Correct 44.1 kHz audio pitch: the audio clock follows the MP2 header rate
(44.1/48/32 kHz) instead of assuming DVD's 48 kHz. - Seek + pause on VCD/SVCD and on flat
.mpg/.VOBfiles (hold Fast Fwd/Rewind
to scrub with the on-screen bar, release to jump). - SVCD's 480-wide picture fills the screen on both HDMI and the analog CRT
output; DVD sub-D1 (704/544-wide) content now fills the analog output too. - Limitations (v1): no VCD menus/PBC, one
.binper movie track, no CD-DA audio
tracks, no 2336-byte-sector images. Details:docs/vcd_svcd.md.
Notes
- DVDs must be decrypted rips (the core detects CSS and warns on screen);
VCD/SVCD have no copy protection — the rip plays as-is. - Timing: clk_dec 87.70 MHz @100c / 88.88 MHz @-40C (release gate passed, both
corners); fitter SEED 5, reproducible withUSE_DOCKER=1 ./build_release.sh --compileat this tag. - Hardware-verified on a DE10-Nano: DVD, VCD and SVCD playback over HDMI and the
analog CRT output, including seeking.
🤖 Generated with Claude Code