Releases: JohnnySun/retro-display-lab
Release list
Retro Display Lab v0.5.0 — Complete DMG-01 physical reconstruction
Retro Display Lab v0.5.0 completes the DMG-01 display reconstruction started after v0.4.0. The normal DMG path is now a five-pass, physics-informed STN model covering optical states, row timing, director motion, ionic retention, passive-matrix crosstalk, and pixel aperture integration. This release also fixes the adjacent dark-tone regression seen in settled Tetris blocks.
The AGS-101 runtime model introduced in v0.4.0 is unchanged in scope. Its v0.5.0 work is listed separately below and consists of deterministic artifact generation, validation provenance, and wider CI coverage.
DMG-01 reconstruction
-
Four driven shades plus the LCD-off reflector state
- Added a five-state BGB optical record: the four driven DMG shades and a separate LCD-disabled reflector state.
- Changed intermediate shade evaluation to interpolate in linear light between adjacent measured BGB states.
- Added a deterministic static fixture and a CIEDE2000 perceptual report. Independent BGB midpoint samples agree with the generated gradient to within one 8-bit code.
-
Physical STN response instead of hand-tuned endpoint timing
- Replaced the old normal-path
DarkenResponse,ClearResponse,SlowTail,SlowRateScale,GrayDrag, andDistanceDragcontrols with a generated STN surrogate. - The new reference chain is: DMG row/column drive -> pixel RMS voltage -> director dynamics -> reflected optical response -> shader lookup tables.
- Added 1/144 multiplex drive reduction, Alt-Pleshko selection physics, four-shade dwell fractions, polarity and contrast controls, and a bounded material ensemble for viscosity, elastic constants, dielectric anisotropy, birefringence, cell gap, twist, pitch, pretilt, and anchoring.
- Added a one-dimensional Frank-Oseen director solver with an overdamped Ericksen-Leslie reduction and a sliced-Jones reflected optical solver.
- Generated 65 director-drift bins and director-to-optical lookup tables for the runtime shader.
- The nominal deepest transition reaches T90 in about 0.28 seconds as a solver result, not as a fitted target.
- Added fixed-point checks for all four shades and 600-frame holds. The old 100/200 ms timing fit remains only as a superseded comparison envelope.
- Replaced the old normal-path
-
DMG row-scan timing
- Added a timing record for 144 visible rows, 10 blank rows, 59.7275 Hz nominal refresh, and approximately 108.724 microseconds per line.
- Each changed pixel now splits its frame integration at the captured line-end latch: previous drive before the latch, current drive after it.
- Added first-row, last-row, unchanged-pixel, same-row, and cross-frame timing tests.
- Row timing changes the onset of a transition without changing its settled shade.
-
Independent ionic-retention state
- Added a separate RGBA32F ionic state instead of folding long-term retention into ordinary director motion.
- Added a period-protocol-constrained adsorption/release model and bounded optical coupling.
- Added monotonic charge/release, bounds, interruption, scene-change, and normal-versus-accelerated equivalence tests.
- Added
merck-1994-debug-v1, a 60x accelerated diagnostic preset for the 30-minute retention protocol. On the target GPU, charge reached 0.9961; after 14 real seconds of release (840 equivalent seconds), the observed ratio was 0.69170 versus a 0.69977 prediction, while the inactive half remained at zero.
-
Calculated passive-matrix crosstalk
- Replaced the previous zero placeholder/visual mixing with a distributed row/column RC network based on bounded transparent-electrode, driver, cell, and timing ranges.
- Added a full-network CPU reference solver and a lumped runtime surrogate.
- Added dedicated row-load and crosstalk-summary shader passes. Normal presets now run with both row and column crosstalk enabled; zero is retained only as an isolation mode.
- Added single-dot, full-row, full-column, checkerboard, alternating-line, window, and inverse-window validation patterns.
- The nominal runtime surrogate reports 0.004733 shade RMS error, 0.019108 p99 error, and 0.020453 maximum error against the full network. Float32 error is 0.000059 shade and the phase-boundary residual is 0.000335 shade.
-
Adjacent dark-tone regression fixed
- Fixed the case where the uniform per-shade crosstalk baseline could over-correct shade 2 into shade 3, making settled third- and fourth-level Tetris cells appear almost identical.
- Clamped the uncertain common-mode correction to +/-0.125 shade.
- Added a mixed-tone tetromino regression fixture and a generated gate requiring at least 0.75 shade separation between adjacent dark tones. The former all-shade-3 fixture could not detect this failure.
-
Scale-stable pixel aperture and shadow mask
- Reworked aperture evaluation as a periodic joint integral of active area and electrode shadow.
- Fixed wraparound loss when an integration footprint crossed a cell boundary.
- Fixed scale-dependent shadow energy caused by multiplying separately averaged aperture and shadow masks.
- Added exact 4x, 5x, and 6x fixtures; fractional 3.5x and 4.25x fixtures; and viewport-offset and crop tests.
- The generated geometry preserves 0.765625 aperture area and 0.191875 shadow-gap area. The target 4x-versus-3.5x maximum linear-RGB difference is 0.00144461, below the 0.002 gate.
-
Five-pass runtime path and target contract
- The completed normal path is row load -> crosstalk summary -> STN response/retention -> matrix/aperture -> display.
- Added a versioned frontend contract, deterministic DMG test ROM/scenes, numeric GPU analyzers, and device receipts.
- Verified
R32G32B32A32_SFLOATtemporal feedback and stable one-subframe operation on RetroArch 1.22.2 with Vulkan/Mali-G76 MC4. - The post-fixed-point settled GPU capture remains within five 8-bit codes of the CPU reference against a six-code limit and is byte-identical across a ten-second constant hold.
- Verified pause stability, save/load, focus loss, and clean content closure. Added
dmg01-temporal.cfgdocumenting the required forward-1x temporal configuration.
DMG presets, installation, and documentation
- Added target presets
dmg01-reference-v1,dmg01-lightly-used-v1, anddmg01-one-year-used-v1, plus install payloadsgb-lightly-used.slangpandgb-one-year-used.slangp. - Added diagnostic presets for plausible 30 C/10 C response limits, deliberately heavy cold-panel ghosting, accelerated aging, line-start scanout, temporal-only scanout, numeric retention, crosstalk-off, numeric drive, and numeric state inspection.
- Updated the Gambatte GB override to use the one-year-used target preset. This preset is a mild visual approximation, not a calibrated claim of elapsed panel age.
- Fixed the mGBA override's repository-relative shader path.
- Documented content-directory override scope:
gb.slangpaffects only thegbdirectory andgba.slangpaffects onlygba; existinggbcand other shader overrides remain untouched. Also documented RetroArch's case-sensitive override filenames. - Rewrote the README descriptions around the completed DMG and AGS-101 physical models.
- Replaced the DMG comparison images with two 960x640 KPA/Gambatte/Tetris captures: the title screen demonstrates crosstalk, and a falling piece above a populated stack demonstrates the normal preset's short motion trail.
- Exercised the documented GitHub ZIP installation on the target device. GB and GBA launched with the intended repository shaders; the GBC override and core-wide mGBA configuration hashes remained unchanged.
AGS-101 reproducibility and provenance
- Quantized generated HCS transcendental outputs to 12 significant digits and adjusted the validator tolerance to
1e-11, still tighter than shader precision. - Normalized generated GtG fit and manifest values to nine significant digits and zeroed residual values below
1e-10. - Changed the generated GtG PNG to stored DEFLATE so the fixture is byte-identical across zlib versions.
- Required a 40-character repository commit in frontend validation receipts and pinned the existing AGS-101 target receipt to the commit that produced its deployed bytes.
- Kept historical target receipts as evidence for their original deployed artifacts while validating newly generated artifacts against the current checkout.
- Separated AGS-101 receipt selection from the newly added DMG receipt files.
Validation and CI
- Expanded the GitHub Actions matrix from Node.js 22 alone to Node.js 18, 22, and 24.
- Extended
npm testto regenerate/check the DMG WS1-WS6 artifacts, the physical STN surrogate, all generated presets, and both the DMG and AGS-101 validators. - Changed WS1 and WS6 PNG gates to compare decoded RGB pixels instead of zlib-compressed bytes.
- Changed the WS2 JSON report gate to compare normalized numeric structures with a
1e-7tolerance for last-digit libm differences between x86_64 and arm64. The executable shader include remains byte-exact.
Tested target
- KONKR GT78-VN, 960x640
- RetroArch 1.22.2, Vulkan, Mali-G76 MC4
- Gambatte with one shader subframe and exact 4x DMG scaling
- Observed frontend pacing: 60.248-60.291 fps without doubled presentation intervals
Important limits
- The DMG model is a measurement-constrained physical reconstruction, not a measurement of one pristine individual panel. Exact analogue drive levels, exact material identity, polarizer spectra, and the original grayscale-generator truth table remain explicit unknowns.
- The BGB aperture geometry is experimental rather than a measured DMG mask drawing.
- The normal one-year-used preset intentionally shows a short, mild motion trail. The persistent heavy trail is a diagnostic cold/slow preset and is not presented as healthy normal DMG behavior.
- Temporal presets require forward 1x execution, one shader subframe, frame mixing off, and no rewind or run-ahead history discontinuiti...
Retro Display Lab v0.4.0 — AGS-101 physics model
Highlights
- Integrates the pinned HCS AGS-101 measurement record into the default color path with deterministic 32-code EOTF and native-primary artifacts.
- Replaces the luma-driven ION approximation with an explicit polarity, drive-imbalance, residual-DC, and adsorption/desorption model derived from period literature.
- Splits scan timing into row start, electrical latch, and optical onset with causal cross-frame handling.
- Adds a measurement-ready 3 × 32 × 32 per-channel GtG schema, deterministic fitter/packer, analytic fallback, and synthetic pipeline fixture.
- Adds unified read-only diagnostics, mechanism-isolation presets, independent CPU references, property tests, and provenance-integrity checks.
Tested target
KONKR GT78-VN at 960 × 640 with RetroArch 1.22.2, Vulkan on Mali-G76 MC4, one shader subframe, and exact 4× GBA scaling. The persistent response pass was verified as R32G32B32A32_SFLOAT and presented at approximately 59–61 fps.
Frontend contract
The physical temporal preset requires normal-forward 1× execution with one shader subframe. Rewind and run-ahead should remain disabled. If causal history cannot be guaranteed, use the documented static safe bypass:
TemporalResponse = 0
DriveRetention = 0
BakedScanout = 0
Verification
npm test validates the HCS and GtG generated artifacts, both display models, CPU invariants, frontend records, and artifact hashes. See the AGS-101 implementation status and validation contract for details.
Retro Display Lab v0.3.0 - AGS-101 Physics Seed
Retro Display Lab v0.3.0 - AGS-101 Physics Seed
Retro Display Lab v0.1.0
Initial public release. Includes the physics-informed Nintendo DMG-01 STN model, four RetroArch presets, the KONKR GT78-VN 960x640 target profile, methodology and research documentation, and reproducible validation. AGS-101 color-derived files remain excluded pending upstream redistribution permission.