Tags give the ability to mark specific points in history as being important
This project is mirrored from https://github.com/doublegate/RustyNES.
Pull mirroring updated .
Successfully updated .
-
v0.8.0
1a117470 · ·v0.8.0 - Rust 2024 Edition & Dependency Modernization This release modernizes the RustyNES codebase with Rust 2024 Edition and updates all dependencies to their latest stable versions. - Rust 2024 Edition (MSRV 1.88+) - eframe/egui 0.33 for desktop GUI - cpal 0.16 + rubato 0.16 for audio with resampling - 508+ tests passing, 100% Blargg pass rate - eframe: 0.29 -> 0.33 - egui: 0.29 -> 0.33 - cpal: 0.15 -> 0.16 - rubato: NEW (0.16) - ron: 0.8 -> 0.12 - thiserror: 1.0 -> 2.0 - clap: 4.4 -> 4.5 - rfd: 0.14 -> 0.15 - gilrs: 0.10 -> 0.11 - M7 (Accuracy Improvements): COMPLETE - M8 (Test ROM Validation): COMPLETE - M9-S0 (Dependency Upgrade): COMPLETE - M9 (Known Issues): Ready to Start - M10 (Final Polish): Planned Full changelog: https://github.com/doublegate/RustyNES/blob/alt-desktop/CHANGELOG.md
-
v0.7.1
2205bcf7 · ·Release v0.7.1 - Desktop Cycle-Accurate Execution Fix Critical fix for desktop application to use cycle-accurate emulation mode, matching the execution behavior of the 100%-passing test suite. - Changed step_frame() → step_frame_accurate() in app.rs - Desktop now uses cycle-perfect execution (1 CPU : 3 PPU : 1 APU) - Mid-frame register updates work correctly - Timing-sensitive effects (sprite 0 hit, scroll splits) render properly - Added Bus::with_sample_rate() constructor - Added Console::with_sample_rate() constructor - APU generates samples at exact audio device rate - Eliminates pitch shifting artifacts - step_frame(): Batches entire instructions, then syncs PPU/APU (coarse) - step_frame_accurate(): Executes 1 cycle at a time (cycle-perfect) - Default sample rate: 48000 Hz (backward compatible)
-
v0.7.0
9775067d · ·Release v0.7.0 - Milestone 8 Complete (100% Blargg Test Pass Rate) - 100% Blargg test suite pass rate (90/90 tests) - Cycle-accurate CPU timing (all 256 opcodes) - Hardware-accurate PPU rendering - Precise APU audio synthesis - Blargg CPU: 22/22 (100%) - Blargg PPU: 25/25 (100%) - Blargg APU: 15/15 (100%) - Mappers: 28/28 (100%) - Total Workspace: 500+ tests passing - cpu_dummy_reads.nes: Cycle-accurate dummy read timing - cpu_interrupts.nes: NMI hijacking during BRK - RTI I flag restoration without delay - prev_irq_inhibit mechanism for IRQ acknowledgment - Open bus emulation with decay counter - OAM bit masking (0xE3 for attribute bytes) - Odd frame skip at scanline 261, dot 339 - VBlank timing precision - Frame counter immediate clocking on mode switch - +1 cycle timing correction - DMC 2-stage sample pipeline - Hardware-accurate non-linear mixer (NESdev TND formula) - test_oam_dma: OAM attribute byte masking - test_odd_frame_skip: Correct pre-render line timing
-
v0.6.0
da3e3ce7 · ·RustyNES v0.6.0 - Accuracy Improvements (Milestone 7 Complete) Phase 1.5 Stabilization - First Milestone Complete Released: December 20, 2025 HIGHLIGHTS ========== - APU frame counter precision: Fixed 4-step mode timing (22371->22372 cycles) - Hardware-accurate audio mixer: Non-linear TND formula matching NESdev reference - OAM DMA cycle precision: 513 cycles (even CPU start) vs 514 cycles (odd CPU start) - CPU cycle parity tracking for accurate DMA alignment - 429 tests passing with 0 failures, 6 ignored (valid architectural reasons) M7 SPRINT 1: CPU ACCURACY ========================= - All 256 opcodes verified against nestest.nes golden log - Page boundary crossing timing accuracy confirmed - Unofficial opcode cycle counts validated - Interrupt timing precision verified M7 SPRINT 2: PPU ACCURACY ========================= - VBlank/NMI timing functional with flag read/race condition handling - Sprite 0 hit detection working (2/2 basic tests passing) - Attribute shift register verification complete - Palette RAM mirroring edge cases handled M7 SPRINT 3: APU ACCURACY ========================= - Frame counter precision fixed: 4-step mode quarter frame at cycle 22372 (was 22371) - Hardware-accurate non-linear mixer: NESdev TND formula implemented - Triangle linear counter timing verified - Mixer output validated against reference implementation M7 SPRINT 4: TIMING & SYNCHRONIZATION ===================================== - OAM DMA cycle precision: 513 cycles (even CPU start) vs 514 cycles (odd CPU start) - CPU cycle parity tracking for accurate DMA alignment - CPU/PPU synchronization verified - Bus timing accuracy confirmed TECHNICAL SPECIFICATIONS ======================== - APU Frame Counter (4-step): Cycles 7457, 14913, 22372, 29830 - TND Mixer Formula: 159.79 / (100 + 1 / (triangle/8227 + noise/12241 + dmc/22638)) - OAM DMA Timing: 513 + if (cpu_cycles % 2) == 1 { 1 } else { 0 } QUALITY METRICS =============== - 429 tests passing - 0 test failures - 6 tests ignored (valid architectural reasons) - Zero regressions from v0.5.0 DEFERRED TO M8+ =============== - Cycle-by-cycle CPU execution (architectural refactor for +/-2 cycle PPU precision) - DMC DMA cycle stealing conflicts - Additional sprite 0 hit edge cases WHAT'S NEXT =========== M8: Test ROM Validation - Target 95%+ pass rate on blargg test suites Full changelog: https://github.com/doublegate/RustyNES/blob/main/CHANGELOG.md -
v0.5.0
04ac85ab · ·RustyNES v0.5.0 - Audio Playback & Rendering Fixes Audio playback implementation with cpal library, PPU attribute shift register fix, CLI ROM loading, and enhanced console API. Major fixes: - Audio buffer overflow eliminated with intelligent buffer management - PPU rendering bugs fixed (attribute shift registers) - Graphical glitches resolved (correct text, palettes, sprites) See release notes for full details.
-
-
v0.4.0
710fe1c9 · ·RustyNES v0.4.0 - Integration Layer (Milestone 5) This release completes the functional core of RustyNES by integrating all previously implemented subsystems (CPU, PPU, APU, Mappers) into a cohesive NES emulator. The rustynes-core crate provides a hardware-accurate bus system and console coordinator ready for GUI development. MILESTONE 5 DELIVERABLES ======================== Bus System (390 lines) - Complete NES memory map implementation ($0000-$FFFF) - Internal RAM: 2KB with proper mirroring ($0000-$1FFF) - PPU registers: $2000-$3FFF with 8-byte mirroring - APU/IO registers: $4000-$401F - Cartridge space: $4020-$FFFF (PRG ROM/RAM) - OAM DMA: Cycle-accurate 513-514 cycle transfers - Mapper IRQ integration with CPU interrupt handling Console Coordinator (425 lines) - CPU/PPU/APU timing synchronization - PPU: 3 dots per CPU cycle (5.369318 MHz) - APU: 1 step per CPU cycle (1.789773 MHz) - Frame timing: 29,780 CPU cycles per NTSC frame - NMI generation from PPU vblank - IRQ handling from mapper scanline counters Input System (386 lines) - Standard NES controller emulation - Hardware-accurate shift register protocol - Strobe latch control ($4016 bit 0) - 8-button serial read sequence (A/B/Select/Start/Up/Down/Left/Right) - Open bus behavior ($40 on bits 1-7) - Two-controller support ($4016/$4017) Save State Framework (130 lines) - Format specification with 64-byte header - Magic number validation ("RNES") - Version tracking for compatibility - SHA-256 ROM hash for mismatch detection - CRC32 integrity verification - Modular component serialization (ready for Phase 2) TEST COVERAGE ============= Total: 398 tests passing (100% pass rate) By Crate: - rustynes-cpu: 46 tests (instruction execution, addressing modes, interrupts) - rustynes-ppu: 83 tests (rendering, timing, registers, sprites) - rustynes-apu: 150 tests (channels, timing, mixing, DMC) - rustynes-mappers: 78 tests (NROM, MMC1, UxROM, CNROM, MMC3) - rustynes-core: 41 tests (bus routing, console timing, input, DMA) New in v0.4.0: - Bus tests: 22 (memory map, PPU/APU/controller routing, DMA, mirroring) - Console tests: 7 (creation, reset, step, frame, ROM loading, timing) - Input tests: 9 (controller strobe, button states, serial protocol) - Integration tests: 3 (CPU+PPU+APU synchronization) DOCUMENTATION ============= - Comprehensive TODO audit: 8 files corrected from PENDING to COMPLETED - Test ROM plan: 212 test files inventoried with execution roadmap - Updated README.md, CHANGELOG.md, ROADMAP.md for consistency - All TODO files now 100% accurate TECHNICAL SPECIFICATIONS ======================== - Zero unsafe code across all crates - Strict clippy pedantic compliance - MSRV: Rust 1.75+ - Dual-licensed: MIT/Apache-2.0 WHAT'S NEXT (Milestone 6) ========================= - Desktop GUI with egui/wgpu (rustynes-desktop crate) - Visual test ROM validation - Playable MVP release - Target: 80%+ game compatibility Phase 1 Progress: 83% complete (5 of 6 milestones) -
v0.2.0
05351b95 · ·Release v0.2.0 - Milestone 3: APU Complete This release marks the completion of Milestone 3, delivering a complete and hardware-accurate implementation of the Nintendo Entertainment System's 2A03 Audio Processing Unit (APU). All five audio channels are fully functional with cycle-accurate timing and non-linear mixing matching original hardware behavior. - **5 Audio Channels**: Pulse 1, Pulse 2, Triangle, Noise, and DMC - **Frame Counter**: Dual-mode sequencer (4-step and 5-step) with IRQ generation - **Hardware Accuracy**: Non-linear mixer matching NES hardware characteristics - **Sample Rate Conversion**: Configurable resampler with optional low-pass filtering - **Zero Unsafe Code**: 100% safe Rust implementation with #![forbid(unsafe_code)] - **Envelope Generator**: ADSR envelope with constant volume mode - **Length Counter**: Hardware-accurate length table and halt functionality - **Sweep Unit**: Frequency sweeping with ones' complement negation for Pulse 1 - **Linear Counter**: 32-step counter for Triangle channel - **LFSR Noise**: 15-bit shift register with dual feedback modes - **DMC Sampler**: Delta modulation with DMA interface and IRQ support - **APU Clock**: 1,789,773 Hz (NTSC) - **Frame Rates**: 240 Hz (4-step) / 192 Hz (5-step) quarter frames - **Sample Rate**: 48,000 Hz default (configurable) - **Mixer Range**: 0.0 to ~2.0 (hardware-accurate non-linear) - **Register Interface**: Complete $4000-$4017 memory-mapped implementation - **150 Tests Total**: 136 unit tests + 14 documentation tests - **100% Pass Rate**: All tests passing across all APU components - **Comprehensive Validation**: Frame counter, envelope, length counter, sweep, all channels, mixer, resampler - **Test ROM Integration**: Blargg APU test suite and additional APU test ROMs included - **Zero Unsafe Code**: Safe Rust throughout entire implementation - **100% Clippy Compliance**: All pedantic lints passing in library code - **Comprehensive Documentation**: Full rustdoc coverage of public APIs - **Type Safety**: Extensive use of newtype patterns for hardware registers None. This is the first APU release. - Pulse Channel 1 with sweep unit ($4000-$4003) - Pulse Channel 2 without sweep ($4004-$4007) - Triangle Channel with linear counter ($4008-$400B) - Noise Channel with LFSR ($400C-$400F) - DMC Channel with sample playback ($4010-$4013) - Non-linear mixer matching hardware lookup tables - Resampler with configurable sample rate - Optional low-pass filter for audio smoothing - Frame counter with 4-step and 5-step modes - IRQ generation support - Complete APU register implementation ($4000-$4017) - Status register read ($4015) - Frame counter control ($4017) - All channel control registers - **Version**: 0.2.0 - **Release Date**: 2025-12-19 - **Milestone**: M3 - APU Complete - **Phase**: Phase 1 (MVP Development) - **Target Date**: December 2025 ✅ On schedule - `rustynes-apu`: 0.2.0 (new) - `rustynes-cpu`: 0.2.0 (updated) - `rustynes-ppu`: 0.2.0 (updated) - Workspace: 0.2.0 - Total Tests: 150 (136 unit + 14 doc tests) - Pass Rate: 100% - Test Files: 11 modules - Total Lines: ~2,800+ (APU crate only) - Project Total: 279 tests across 3 crates - `VERSION-PLAN.md` - Comprehensive versioning strategy through v1.0.0 - `CHANGELOG.md` - Updated with v0.2.0 release notes - `test-roms/apu/README.md` - APU test ROM acquisition guide - Sprint completion markers for Milestone 3 - Blargg APU Test Suite (blargg_apu_2005.07.30) - 11 test ROMs - APU Additional Tests (apu_test) - 8 test ROMs - DMC Tests - 4 test ROMs ```bash git clone https://github.com/doublegate/RustyNES.git cd RustyNES git checkout v0.2.0 cargo build --release ``` ```bash cargo test --workspace # Run all tests cargo test -p rustynes-apu # APU tests only ``` Target: Q1 2026 - NROM (0), MMC1 (1), UxROM (2), CNROM (3), MMC3 (4) - 80% game compatibility - Mapper framework and trait system - v0.4.0 (M5): Integration/Core Complete - v0.5.0 (M6): Desktop GUI - MVP Release - v1.0.0 (M18): 100% TASVideos Accuracy - **New Crate**: rustynes-apu (complete APU implementation) - **Test Coverage**: +150 tests (129 → 279 total) - **Lines of Code**: +2,800 lines (APU only) - **Files Added**: 88 new files - **Audio System**: Complete 5-channel APU with hardware-accurate mixing - **Documentation**: VERSION-PLAN.md, updated CHANGELOG.md, APU test guide - APU-CPU integration pending (Milestone 5) - No audio output to speakers yet (requires desktop GUI from Milestone 6) - PAL timing not yet implemented (NTSC only) - Expansion audio not yet implemented (Milestone 12) - Rust 1.75+ (MSRV) - Any platform supported by Rust standard library - **Architecture Reference**: NESdev Wiki, Mesen2, Visual2C02 - **Test ROMs**: Blargg's test suite, nesdev community - **Implementation**: RustyNES Contributors - **Repository**: https://github.com/doublegate/RustyNES - **Documentation**: https://docs.rs/rustynes - **Issue Tracker**: https://github.com/doublegate/RustyNES/issues - **Changelog**: https://github.com/doublegate/RustyNES/blob/main/CHANGELOG.md - **Roadmap**: https://github.com/doublegate/RustyNES/blob/main/ROADMAP.md - **Version Plan**: https://github.com/doublegate/RustyNES/blob/main/VERSION-PLAN.md See [CHANGELOG.md](https://github.com/doublegate/RustyNES/blob/v0.2.0/CHANGELOG.md#020---2025-12-19) for complete details. **Compare**: https://github.com/doublegate/RustyNES/compare/v0.1.0...v0.2.0 --- **Released**: 2025-12-19 **Milestone**: M3 (APU Complete) ✅ **Next**: M4 (Mappers) - Target Q1 2026
-
v0.1.1
b18ba684 · ·Test release workflow - validates refactored CI/CD pipeline with proper job ordering and permissions
-
v0.1.0
59c0874c · ·Release v0.1.0 - Precise. Pure. Powerful. First official release of RustyNES featuring world-class CPU and PPU implementations. Highlights: - 100% CPU test pass rate (56/56 tests) - 97.8% PPU test pass rate (88/90 tests) - Complete 6502/2A03 CPU with all 256 opcodes - Cycle-accurate 2C02 PPU with VBL/NMI and sprite rendering - Zero unsafe code - 44 test ROMs acquired for validation See CHANGELOG.md for full details.