v0.4.0 "Rasteriser" — the first picture
The first RustyN64 release that produces a picture. The low-level Reality Display Processor renders through the per-pixel pipeline and the Video Interface scans it out. Phase 3 of the cycle-accurate N64 emulator is complete.
Cut criteria — both met (each an oracle result with a committed runner)
- The conformance suite bit-matches Angrylion — 164 committed
.rvecvectors replay byte-for-byte against the Angrylion-Plus software RDP: FILL rectangles, the asymmetric scissor clip, FILL / shaded / textured triangles, the colour combiner, the divide-free blender, dither, alpha-compare, coverage write-back, the combiner primitive mux, and copy-mode texture rectangles.
cargo test -p rustyn64-test-harness --test rdp_conformance - A real ROM renders a stable golden frame — a license-clean homebrew ROM boots on the cycle-accurate VR4300, programs the VI, CPU-fills a framebuffer, and the VI scans it out to a verified 32×24 frame, bit-identical across two boots (ADR 0004).
cargo test -p rustyn64-test-harness --test real_rom_frame
Highlights
- The LLE RDP rasteriser (triangle edge-walk, sub-pixel coverage, the
(A−B)·C+Dcombiner, the divide-free blender, TMEM loads + texel decoders, copy-mode texture rectangles, textured triangles) and VI scan-out — the first-picture loop RDP → framebuffer → VI → frontend is closed. - A seeded-fuzz conformance harness that found and fixed two real accuracy bugs — the FILL rectangle inclusive lower-right edge (R-3) and the asymmetric scissor clip (R-15) — and textured triangles resolved (R-13: the
bi_lerp0YUV-convert vector bug plus the s.5 texel-coordinate scale).
Not yet (later phases)
Perspective-correct and bilinear texturing, an RDP-driven real-ROM frame, AI audio (v0.5.0), and cartridge boot + saves (v0.6.0). docs/STATUS.md is authoritative — a green test run does not mean a subsystem works.
Build
Pure Rust, toolchain pinned to 1.96.0, edition 2024. cargo build --release. Linux frontend needs libxkbcommon wayland alsa-lib systemd-libs. Dual-licensed MIT OR Apache-2.0.
Full changelog: CHANGELOG.md.