Skip to content

Releases: JohnnySun/retro-display-lab

Retro Display Lab v0.5.0 — Complete DMG-01 physical reconstruction

Choose a tag to compare

@JohnnySun JohnnySun released this 19 Aug 18:24

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

  1. 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.
  2. Physical STN response instead of hand-tuned endpoint timing

    • Replaced the old normal-path DarkenResponse, ClearResponse, SlowTail, SlowRateScale, GrayDrag, and DistanceDrag controls 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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_SFLOAT temporal 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.cfg documenting the required forward-1x temporal configuration.

DMG presets, installation, and documentation

  • Added target presets dmg01-reference-v1, dmg01-lightly-used-v1, and dmg01-one-year-used-v1, plus install payloads gb-lightly-used.slangp and gb-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.slangp affects only the gb directory and gba.slangp affects only gba; existing gbc and 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 test to 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-7 tolerance 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...
Read more

Retro Display Lab v0.4.0 — AGS-101 physics model

Choose a tag to compare

@JohnnySun JohnnySun released this 18 Aug 12:49

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

Choose a tag to compare

@JohnnySun JohnnySun released this 17 Aug 18:34
Retro Display Lab v0.3.0 - AGS-101 Physics Seed

Retro Display Lab v0.1.0

Choose a tag to compare

@JohnnySun JohnnySun released this 17 Aug 17:23

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.