Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .github/release-notes/v2.2.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# RustyNES v2.2.1 — Housekeeping patch

A **housekeeping patch** on top of v2.2.0 "Capstone": dev-tooling archival, a zero-source-change dependency consolidation, and a new gitignored FDS test corpus. **Zero accuracy, feature, or core changes** — the deterministic `#![no_std]` chip stack, save-state / TAS / netplay-replay formats, and every golden vector are untouched: **AccuracyCoin holds 141/141 (100.00%)**, unchanged from v2.2.0.

## Added

### Game Genie re-key research tooling archived

Preserved the six intermediate research / verification scripts behind the header-robust Game Genie code re-key (which shipped in #262) beside the generator in `scripts/gg/`: `crc_combine.py` (a pure-Python `zlib.crc32_combine` implementation, self-tested against 2000 random synthetic trials, underpinning the `rom_crc32 == crc32_combine(prgCRC, chrCRC, chrLen)` identity), `alias_resolve.py` (long-tail title-alias CRC resolution), `coverage.py` / `coverage2.py` (name-join coverage accounting), `inspect.py`, and `verify.py` (which now proves the combine identity over every standard nes20db cart dump). Dev / research tooling only — touches no crate, no build, no core.

### 2A03-revision DMA-divergence probe archived

`scripts/probes/probe_rev.rs`, a diagnostic test probe behind the already-shipped v2.1.7 "Stepping" DMA-frontier work (ADR 0033) — snapshot-hashes DMA test ROMs under `Cpu2A03Revision::Rp2A03G` vs `Rp2A03H`. Kept for reference; not wired into CI.

### `TakuikaNinja` FDS hardware-verification probes (gated, gitignored)

Four `RUSTYNES_FDS_BIOS`-gated smoke tests (`crates/rustynes-test-harness/tests/fds_takuikaninja.rs`) against `FDS-Mirroring-Test`, `FDS-4023-Test`, `FDS-Audio-Registers`, and `FDS-4030D1-Addr` — real hardware-verified probes of `$4023` / mirroring / audio-register behavior and the FDS DRAM-refresh-watchdog IRQ. None of the four carries an explicit permissive license, so they're staged gitignored under `tests/roms/external/fds-takuikaninja/` rather than committed, mirroring the existing commercial-ROM convention; every test skips cleanly when the BIOS or a probe disk is absent. The underlying `$4023` and mirroring behaviors these probes exercise are already implemented and unit-tested independently in `crates/rustynes-mappers/src/fds.rs` — this is regression insurance against a second, hardware-verified oracle, not a fix for a gap. The `$4030.D1` DRAM-watchdog probe tracks a known, honest residual (not yet modeled by RustyNES or, per upstream, by most current FDS emulators) — see `docs/accuracy-ledger.md`.

## Changed

### Dependency consolidation (closes Dependabot #298–#303)

Rolled all six open Dependabot bumps into one reviewed change, each verified against the code and gates; all landed with **no source changes** and the deterministic `#![no_std]` core untouched: **pollster 0.4 → 1.0** (frontend / android / iOS `block_on` for wgpu/Metal init), **wide 0.7 → 1.5** (the desktop `u32x8` SIMD blitter — the SIMD-vs-scalar byte-identity gate still passes), **tungstenite + tokio-tungstenite 0.29 → 0.30** (netplay + mobile signaling; `default-features = false` + `handshake` + `rustls-tls-webpki-roots` retained for clean pure-rustls cross-compiles), **bytemuck 1.25.0 → 1.25.1** and **cc 1.2.66 → 1.2.67** (patch), and CI **actions/setup-python v5 → v6** (MkDocs step).

## Notes

- Version: workspace `2.2.0 → 2.2.1`. No mobile app version change (`versionCode`/`versionName` on Android and `MARKETING_VERSION` on iOS stay frozen at their v2.0.x host-only release points; the joint mobile store launch remains v2.3.0).
- **No accuracy/oracle number moves.** AccuracyCoin 141/141, nestest 0-diff, `blargg_apu_2005` / `pal_apu_tests` (10/10) / `visual_regression` / the 60-ROM commercial oracle all unchanged. Save-state / TAS / netplay-replay formats untouched.
- Full host gate green: fmt · clippy (all feature combos + wasm32) · rustdoc (`-D warnings`) · `no_std` cross-compile (`thumbv7em`) · markdownlint · `cargo deny check`.
8 changes: 5 additions & 3 deletions AGENTS.md

Large diffs are not rendered by default.

11 changes: 8 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ cycle-accurate core later replaced.

## [Unreleased]

## [2.2.1] - 2026-07-15 - Housekeeping patch (dev-tooling archival + dependency consolidation + FDS test corpus)

Zero accuracy, feature, or core changes — the deterministic `#![no_std]` chip
stack, save-state / TAS / netplay-replay formats, and every golden vector are
untouched. AccuracyCoin holds **141/141 (100.00%)**, unchanged from v2.2.0.

### Added

- **Game Genie re-key research tooling archived (PR #304).** Preserved the six
Expand Down Expand Up @@ -41,9 +47,8 @@ cycle-accurate core later replaced.
absent, keeping CI clean by default. The underlying `$4023` and mirroring
behaviors these probes exercise are already implemented and unit-tested
independently in `crates/rustynes-mappers/src/fds.rs` — this is regression
insurance against a second, hardware-verified oracle, not a fix for a
gap. The
`$4030.D1` DRAM-watchdog probe tracks a known, honest residual (not yet
insurance against a second, hardware-verified oracle, not a fix for a gap.
The `$4030.D1` DRAM-watchdog probe tracks a known, honest residual (not yet
modeled by RustyNES or, per upstream, by most current FDS emulators) —
see `docs/accuracy-ledger.md`.

Expand Down
36 changes: 18 additions & 18 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ members = [
]

[workspace.package]
version = "2.2.0"
version = "2.2.1"
edition = "2024"
rust-version = "1.96"
license = "MIT OR Apache-2.0"
Expand Down
15 changes: 13 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
</p>

<p align="center">
<a href="https://github.com/doublegate/RustyNES/actions"><img src="https://github.com/doublegate/RustyNES/workflows/CI/badge.svg" alt="Build Status"></a> <a href="#license"><img src="https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg" alt="License: MIT OR Apache-2.0"></a> <a href="https://github.com/doublegate/RustyNES/releases"><img src="https://img.shields.io/badge/version-v2.2.0-blue.svg" alt="Version"></a> <a href="rust-toolchain.toml"><img src="https://img.shields.io/badge/rust-1.96-orange.svg" alt="Rust: 1.96"></a><br>
<a href="https://github.com/doublegate/RustyNES/actions"><img src="https://github.com/doublegate/RustyNES/workflows/CI/badge.svg" alt="Build Status"></a> <a href="#license"><img src="https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg" alt="License: MIT OR Apache-2.0"></a> <a href="https://github.com/doublegate/RustyNES/releases"><img src="https://img.shields.io/badge/version-v2.2.1-blue.svg" alt="Version"></a> <a href="rust-toolchain.toml"><img src="https://img.shields.io/badge/rust-1.96-orange.svg" alt="Rust: 1.96"></a><br>
<a href="#compatibility-and-accuracy"><img src="https://img.shields.io/badge/AccuracyCoin-100%25%20(141%2F141)-brightgreen.svg" alt="AccuracyCoin"></a> <a href="#compatibility-and-accuracy"><img src="https://img.shields.io/badge/nestest-0--diff-brightgreen.svg" alt="nestest"></a> <a href="https://doublegate.github.io/RustyNES/"><img src="https://img.shields.io/badge/play-in%20browser-success.svg" alt="Try in browser"></a><br>
<a href="#platform-support"><img src="https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS%20%7C%20Web%20%7C%20Android%20%7C%20iOS-lightgrey.svg" alt="Platform"></a>
</p>
Expand Down Expand Up @@ -775,7 +775,18 @@ and the Material-for-MkDocs documentation handbook at

## Current Release

RustyNES's current release is **v2.2.0 "Capstone"**, the milestone cut that **closes the
RustyNES's current release is **v2.2.1**, a **housekeeping patch** on top of
v2.2.0 "Capstone" (below): archives two batches of dev/research tooling (the
Game Genie header-robust re-key's research scripts and a 2A03-revision
DMA-divergence probe), consolidates six open Dependabot PRs with **zero
source changes** (pollster, wide, tungstenite/tokio-tungstenite, bytemuck,
cc, actions/setup-python), and wires four gitignored, BIOS-gated smoke tests
against `TakuikaNinja`'s FDS hardware-verification probes (regression
insurance for behavior RustyNES already models correctly). **Zero accuracy,
feature, or core changes** — AccuracyCoin holds **141/141 (100.00%)**,
unchanged from v2.2.0.

It follows **v2.2.0 "Capstone"**, the milestone cut that **closes the
v2.1.5 → v2.2.0 "deepen the existing project" run**, landing its two remaining marquees — the
**netplay matchmaking/lobby** stack (a browse-and-join room directory + server-side quick-play
over the existing room-code / TURN transport, delayed-stream spectators, a graded
Expand Down
17 changes: 16 additions & 1 deletion docs/STATUS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,21 @@
# RustyNES — Project Status Matrix

> **Current release: v2.2.0 "Capstone"** (2026-07-12) — the **milestone cut** that
> **Current release: v2.2.1** (2026-07-15) — a **housekeeping patch** on top of
> v2.2.0 "Capstone" (below): archives two batches of dev/research tooling (the
> Game Genie header-robust re-key's six research/verification scripts in
> `scripts/gg/`, and the 2A03-revision DMA-divergence probe in `scripts/probes/`),
> consolidates six open Dependabot PRs with **zero source changes** (`pollster`
> 0.4→1.0, `wide` 0.7→1.5, `tungstenite`/`tokio-tungstenite` 0.29→0.30,
> `bytemuck`/`cc` patch, `actions/setup-python` v5→v6), and wires four gitignored,
> `RUSTYNES_FDS_BIOS`-gated smoke tests against `TakuikaNinja`'s FDS `$4023` /
> mirroring / audio-register / DRAM-watchdog hardware-verification probes
> (regression insurance for behavior RustyNES already models correctly — not a
> fix). **Zero accuracy, feature, or core changes** — the deterministic
> `#![no_std]` chip stack, save-state / TAS / netplay-replay formats, and every
> golden vector are untouched; **AccuracyCoin holds 141/141 (100.00%)**,
> unchanged from v2.2.0.
>
> The prior release, **v2.2.0 "Capstone"** (2026-07-12), was the **milestone cut** that
> **closes the v2.1.5 → v2.2.0 "deepen the existing project"** run on the v2.0.0 "Timebase"
> core, landing its two remaining marquees — the **netplay matchmaking / lobby** stack and the
> **FDS medium model** — atop a peripherals + quality/security pass (the joint iOS App Store /
Expand Down