-
-
Notifications
You must be signed in to change notification settings - Fork 1
release: v2.3.0 "Datum II" — PPU-accuracy capstone + true multi-viewport tool windows #347
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
8f105bc
test(accuracy): pin AccuracyCoin to exact 141/141 (hybrid-address reg…
doublegate 5c72013
docs: v2.3.0 documentation refresh (README, CHANGELOG, VERSION-PLAN, …
doublegate bfbccee
docs(provenance): finalize the hybrid-address model as verified-corre…
doublegate bf848f4
docs(provenance): reword GeraNES source-path comments to documented-b…
doublegate 803aadf
docs(provenance): correct the "transistor-level" mischaracterization …
doublegate d15466d
docs(perf): label the <=2 ms frame-cost figure a design aspiration, n…
doublegate d259ece
perf(ppu): inline per-dot sprite eval + hoist the OAM-bus early-out (…
doublegate 4a3d113
chore(libretro): declare the core license as "GPLv3" in libretro's ow…
doublegate ffbfac7
feat(frontend): true multi-viewport tool-window detach + emulator-loc…
doublegate 0e9544c
release: v2.3.0 "Datum II" — PPU-accuracy capstone + true multi-viewp…
doublegate 306410c
docs: refresh stale accuracy and version strings for the v2.3.0 cut
doublegate 8983b26
fix(frontend): three multi-viewport defects found in #347 review
doublegate 8a66ae4
fix: address the remaining #347 review findings (correctness, provena…
doublegate File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,107 +1,47 @@ | ||
| # RustyNES v2.2.5 — "Colophon" (provenance, licensing, and documentation integrity) | ||
|
|
||
| A **provenance, licensing, and documentation-integrity** release. It was prompted | ||
| by community review (NESdev forums) of the project's licensing and AI-assisted | ||
| origins, and it corrects how RustyNES *describes its own provenance* — in source | ||
| comments, in `NOTICE`, and in the docs — so the record matches what the code | ||
| actually is. | ||
|
|
||
| **Zero emulation-core behavior changes.** The deterministic `#![no_std]` chip stack, | ||
| save-state / TAS / netplay formats, and every golden vector are byte-identical to | ||
| v2.2.4 by construction, so **AccuracyCoin holds 141/141 (100.00%)** and nestest is | ||
| 0-diff. This was re-verified after every change (AccuracyCoin full + run-ahead, | ||
| the nestest golden log, the dual-path differential net, and the snapshot-schema | ||
| audit), and the whole tree passes `cargo fmt`, `clippy -D warnings` (workspace + | ||
| feature combos), `rustdoc -D warnings`, markdownlint, and the `no_std` | ||
| cross-compile. | ||
| > **⚠️ SUPERSEDED — this release's central provenance claim was wrong and has been withdrawn.** The statement below that *"No GPL-licensed emulator source is incorporated into RustyNES"* did not survive further review. **v2.2.9** established that RustyNES **is** a derivative work of GPL-licensed emulators — code derived from Mesen2 (GPL-3.0-or-later) and, for several mappers and the FDS drive model, from puNES, FCEUX and Nestopia UE (GPL-2.0-or-later) — and **relicensed the project from MIT/Apache-2.0 to GPL-3.0-or-later** (ADR 0036). The reviewer who pushed back was right and this note was wrong. The current record is `NOTICE` and [`docs/originality-and-provenance.md`](../../docs/originality-and-provenance.md); the v2.2.9 release notes carry the correction. This text is retained unedited below as the historical account of what was believed at the time — the remedy for a bad provenance claim is to correct it in the open, never to quietly rewrite it. | ||
|
|
||
| A **provenance, licensing, and documentation-integrity** release. It was prompted by community review (NESdev forums) of the project's licensing and AI-assisted origins, and it corrects how RustyNES *describes its own provenance* — in source comments, in `NOTICE`, and in the docs — so the record matches what the code actually is. | ||
|
|
||
| **Zero emulation-core behavior changes.** The deterministic `#![no_std]` chip stack, save-state / TAS / netplay formats, and every golden vector are byte-identical to v2.2.4 by construction, so **AccuracyCoin holds 141/141 (100.00%)** and nestest is 0-diff. This was re-verified after every change (AccuracyCoin full + run-ahead, the nestest golden log, the dual-path differential net, and the snapshot-schema audit), and the whole tree passes `cargo fmt`, `clippy -D warnings` (workspace + feature combos), `rustdoc -D warnings`, markdownlint, and the `no_std` cross-compile. | ||
|
|
||
| ## Why this release exists | ||
|
|
||
| A reviewer pointed out — correctly — that a number of in-source comments described | ||
| implementations as "ports" of other emulators, including GPL-licensed ones, and | ||
| that the project's AI-assisted nature was not disclosed. Rather than argue the | ||
| point, we audited the entire tree and fixed it. The short version: | ||
| A reviewer pointed out — correctly — that a number of in-source comments described implementations as "ports" of other emulators, including GPL-licensed ones, and that the project's AI-assisted nature was not disclosed. Rather than argue the point, we audited the entire tree and fixed it. The short version: | ||
|
|
||
| - The chip, mapper, and peripheral **behaviors** are implemented from public | ||
| hardware documentation (the NESdev wiki, published datasheets, the documented | ||
| 6502 unofficial-opcode behavior) and pinned to public test ROMs. Where a | ||
| reference emulator was consulted, it was used as a **behavioral oracle** — to | ||
| observe and cross-check documented behavior — not as a source of copied code. | ||
| - Some comments had mischaracterized that relationship as "ported from X." Those | ||
| were reworded to state what actually happened. **No GPL-licensed emulator source | ||
| is incorporated into RustyNES.** | ||
| - The chip, mapper, and peripheral **behaviors** are implemented from public hardware documentation (the NESdev wiki, published datasheets, the documented 6502 unofficial-opcode behavior) and pinned to public test ROMs. Where a reference emulator was consulted, it was used as a **behavioral oracle** — to observe and cross-check documented behavior — not as a source of copied code. | ||
| - Some comments had mischaracterized that relationship as "ported from X." Those were reworded to state what actually happened. **No GPL-licensed emulator source is incorporated into RustyNES.** | ||
|
|
||
| ## Licensing & provenance | ||
|
|
||
| - **In-source "port" comments corrected** across the CPU (unstable-store opcodes), | ||
| PPU (sprite-evaluation and OAM models), APU, and numerous mapper register | ||
| decoders — reframed from "ported from Mesen2 / puNES" (GPLv3 / GPLv2) to | ||
| independent implementations of publicly-documented hardware behavior, | ||
| cross-checked against reference emulators as oracles. | ||
| - **In-source "port" comments corrected** across the CPU (unstable-store opcodes), PPU (sprite-evaluation and OAM models), APU, and numerous mapper register decoders — reframed from "ported from Mesen2 / puNES" (GPLv3 / GPLv2) to independent implementations of publicly-documented hardware behavior, cross-checked against reference emulators as oracles. | ||
| - **`NOTICE` rewritten** to: | ||
| - disclose the behavioral-oracle use of GPL-licensed emulators | ||
| (Mesen2/MesenCE, higan, **GeraNES**, ares, FCEUX, Nestopia UE, puNES) with **no | ||
| code incorporated**; | ||
| - attribute the genuinely incorporated permissive components — **emu2413** | ||
| (Mitsutaka Okazaki, MIT), **TriCNES** (Chris Siebert, MIT), and **rcheevos** | ||
| (RetroAchievements.org, MIT) — with their copyright notices and the MIT text; | ||
| - attribute the bundled fonts (**Font Awesome**; **Press Start 2P** / OFL) and | ||
| the bundled **test ROMs** (AccuracyCoin MIT, Damian Yerrick Holy Mapperel zlib, | ||
| blargg / kevtris public domain); | ||
| - credit the CRT-shader / NTSC-filter **visual influences** as independent | ||
| reimplementations. | ||
| - **GeraNES (GPL-3.0-only) disclosed** — it was cited as a reference across ~58 | ||
| files but was previously absent from `NOTICE`. | ||
| - **CRT shaders and NTSC filters** (`crt_royale`, `crt_guest`, `megatron`, the | ||
| Bisqwit and EMMIR NTSC filters) were reviewed at source level. Each is a | ||
| single-pass shader built on RustyNES's own uniform/pipeline conventions and is | ||
| structurally incompatible with being a translation of the upstream *multi-pass* | ||
| shader source; copyright protects code expression, not a visual look or a | ||
| rendering technique, so these are independent reimplementations. Comments were | ||
| reworded from "port / condensation of X" accordingly, and the one comment | ||
| claiming tables were "ported verbatim from Bisqwit's C" was corrected — those | ||
| tables encode the two-level NES composite signal documented at the NESdev wiki. | ||
| - **`blip.rs`** no longer mislabels `blip_buf` as BSD/MIT (it is LGPL-2.1+); the | ||
| file is an independent band-limited-step (BLEP) implementation and now says so. | ||
| - disclose the behavioral-oracle use of GPL-licensed emulators (Mesen2/MesenCE, higan, **GeraNES**, ares, FCEUX, Nestopia UE, puNES) with **no code incorporated**; | ||
| - attribute the genuinely incorporated permissive components — **emu2413** (Mitsutaka Okazaki, MIT), **TriCNES** (Chris Siebert, MIT), and **rcheevos** (RetroAchievements.org, MIT) — with their copyright notices and the MIT text; | ||
| - attribute the bundled fonts (**Font Awesome**; **Press Start 2P** / OFL) and the bundled **test ROMs** (AccuracyCoin MIT, Damian Yerrick Holy Mapperel zlib, blargg / kevtris public domain); | ||
| - credit the CRT-shader / NTSC-filter **visual influences** as independent reimplementations. | ||
| - **GeraNES (GPL-3.0-only) disclosed** — it was cited as a reference across ~58 files but was previously absent from `NOTICE`. | ||
| - **CRT shaders and NTSC filters** (`crt_royale`, `crt_guest`, `megatron`, the Bisqwit and EMMIR NTSC filters) were reviewed at source level. Each is a single-pass shader built on RustyNES's own uniform/pipeline conventions and is structurally incompatible with being a translation of the upstream *multi-pass* shader source; copyright protects code expression, not a visual look or a rendering technique, so these are independent reimplementations. Comments were reworded from "port / condensation of X" accordingly, and the one comment claiming tables were "ported verbatim from Bisqwit's C" was corrected — those tables encode the two-level NES composite signal documented at the NESdev wiki. | ||
| - **`blip.rs`** no longer mislabels `blip_buf` as BSD/MIT (it is LGPL-2.1+); the file is an independent band-limited-step (BLEP) implementation and now says so. | ||
|
|
||
| ## Documentation | ||
|
|
||
| - **New `docs/originality-and-provenance.md`** — a candid account of where RustyNES | ||
| advances, diverges from, or independently re-derives NES emulation technique | ||
| (the one-clock timebase, the transistor-literal octal-latch fetch, the | ||
| machine-checked accuracy-honesty gates, the determinism contract, measured-and- | ||
| rejected optimizations), the development timeline, an oracle-versus-port | ||
| classification of every reference, and the full license posture — written to be | ||
| honest rather than triumphal, including that the project is heavily AI-assisted. | ||
| - **README** — added an AI-assistance disclosure; removed a comparison graphic that | ||
| contained inaccurate details; corrected a mislabeled "sub-cycle accuracy in | ||
| action" screenshot caption (it was an early-development image); toned down | ||
| overstated language; and synced the Acknowledgments with `NOTICE`. | ||
| - **`tests/roms/LICENSES.md`** — fixed a false exclusion claim (four Holy Mapperel | ||
| mapper ROMs stated as excluded are in fact committed), a stale crate path, and | ||
| the AccuracyCoin sub-test count, and added blanket coverage for the committed | ||
| directories not individually tabulated (328 committed `.nes` total, none | ||
| commercial). | ||
| - **New `docs/originality-and-provenance.md`** — a candid account of where RustyNES advances, diverges from, or independently re-derives NES emulation technique (the one-clock timebase, the pin-level octal-latch fetch, the machine-checked accuracy-honesty gates, the determinism contract, measured-and- rejected optimizations), the development timeline, an oracle-versus-port classification of every reference, and the full license posture — written to be honest rather than triumphal, including that the project is heavily AI-assisted. | ||
| - **README** — added an AI-assistance disclosure; removed a comparison graphic that contained inaccurate details; corrected a mislabeled "sub-cycle accuracy in action" screenshot caption (it was an early-development image); toned down overstated language; and synced the Acknowledgments with `NOTICE`. | ||
| - **`tests/roms/LICENSES.md`** — fixed a false exclusion claim (four Holy Mapperel mapper ROMs stated as excluded are in fact committed), a stale crate path, and the AccuracyCoin sub-test count, and added blanket coverage for the committed directories not individually tabulated (328 committed `.nes` total, none commercial). | ||
|
|
||
| ## Assets | ||
|
|
||
| - **Press Start 2P OFL text** added to the Android app assets. The font shipped in | ||
| the Android app without the SIL Open Font License text that OFL 1.1 requires | ||
| travel with the font; the desktop and iOS builds already carried it. | ||
| - **Press Start 2P OFL text** added to the Android app assets. The font shipped in the Android app without the SIL Open Font License text that OFL 1.1 requires travel with the font; the desktop and iOS builds already carried it. | ||
|
|
||
| ## Compatibility | ||
|
|
||
| No format, save-state, or behavior changes. `.rns` save-states, `.rnm` movies, and | ||
| netplay replays are byte-identical to v2.2.4. The libretro core's | ||
| `display_version` advances to `v2.2.5`; there are no other functional changes to | ||
| the RetroArch integration. | ||
| No format, save-state, or behavior changes. `.rns` save-states, `.rnm` movies, and netplay replays are byte-identical to v2.2.4. The libretro core's `display_version` advances to `v2.2.5`; there are no other functional changes to the RetroArch integration. | ||
|
|
||
| ## Verification | ||
|
|
||
| - **AccuracyCoin: 141/141 (100.00%)** — full suite and through run-ahead. | ||
| - **nestest: 0-diff** against the Nintendulator golden log. | ||
| - **Dual-path differential net** and **snapshot-schema audit** green. | ||
| - `cargo fmt --check`, `cargo clippy --workspace --all-targets -- -D warnings` | ||
| (plus the `retroachievements` / `scripting` / `hd-pack` feature combos), | ||
| `RUSTDOCFLAGS="-D warnings" cargo doc`, markdownlint, and the `no_std` | ||
| `thumbv7em-none-eabihf` cross-compile all pass. | ||
| - `cargo fmt --check`, `cargo clippy --workspace --all-targets -- -D warnings` (plus the `retroachievements` / `scripting` / `hd-pack` feature combos), `RUSTDOCFLAGS="-D warnings" cargo doc`, markdownlint, and the `no_std` `thumbv7em-none-eabihf` cross-compile all pass. | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.