|
10 | 10 |
|
11 | 11 | [](https://github.com/doublegate/RustyNES/actions) |
12 | 12 | [](#license) |
13 | | -[](https://github.com/doublegate/RustyNES/releases) |
| 13 | +[](https://github.com/doublegate/RustyNES/releases) |
14 | 14 | [](rust-toolchain.toml) |
15 | 15 | [](#platform-support) |
16 | 16 | [-brightgreen.svg>)](#compatibility-and-accuracy) |
@@ -645,13 +645,16 @@ workspace API docs (rustdoc) at |
645 | 645 |
|
646 | 646 | ## Version History |
647 | 647 |
|
648 | | -The current release is **v1.7.1**, a bugfix / polish patch on **v1.7.0 "Forge"** (the |
649 | | -writable + programmable tooling, accuracy, mapper-breadth, and reach release on the |
650 | | -cycle-accurate v1.0.0 production core, which follows the v1.6.0 "Studio" TAS-authoring line |
651 | | -and the v1.5.0 "Lens" insight/scriptability line). The road so far: |
| 648 | +The current release is **v1.8.1 "Android"**, a patch on the first **platform** (not |
| 649 | +accuracy) release **v1.8.0 "Android"** — a complete, shippable Android app, verified |
| 650 | +end-to-end on a Samsung Galaxy Z Fold 7. It builds on the bugfix patch **v1.7.1** and |
| 651 | +the writable + programmable **v1.7.0 "Forge"** line, on the cycle-accurate v1.0.0 |
| 652 | +production core. The road so far: |
652 | 653 |
|
653 | 654 | | Version | Highlights | |
654 | 655 | | ---------- | ------------------------------------------------------------------------------------------- | |
| 656 | +| **v1.8.1** | "Android" patch — the free-tier demo is trimmed from 10 minutes to **8 minutes** per launch (the paid Full Unlock is unaffected), and the debug "Full Unlock" override is confirmed **R8-stripped from the release AAB** (0 occurrences of the debug-toggle symbols in the shipped `classes*.dex`). | |
| 657 | +| **v1.8.0** | "Android" — the first **platform** release: a complete Android app on the byte-identical core (so AccuracyCoin holds 100% / 139/139 unchanged). A shared **`rustynes-mobile`** UniFFI bridge + a **`rustynes-android`** platform crate + a Jetpack **Compose** shell; **audio** (`AudioTrack`), **touch + hardware-gamepad** input, **save-states / battery-SRAM / a recent-ROMs library** (SAF persistable URIs, save-on-background + auto-resume), **pause / fast-forward / mute**, a responsive **foldable-aware + immersive** UI (cover + unfolded inner screen), **GPU CRT / scanline** post-processing (AGSL `RuntimeShader`), and a thermal-throttle fast-forward backoff. Distributed on **Google Play** as a free download with a one-time **$2.99 "Full Unlock"** (Play Billing) — the free tier is a **10-minute demo** without save-states / resume / battery-SRAM, otherwise feature-complete. Verified **arm64 R8 release AAB**. The full wgpu-`SurfaceView` native renderer (reusing the desktop WGSL shader stack) + netplay / RetroAchievements / Lua on mobile are the documented next increment. | |
655 | 658 | | **v1.7.1** | Patch on "Forge" — seven fixes: a **ROM-close crash** (skip the `write_texture` upload on a pixel-slice length mismatch so the release build no longer aborts wgpu; `close_rom` presents a clean blank frame); **clean pause/unpause** (a pacing-timer `break_phase()` reset on resume + a sticky audio pause gate → no spurious `produced_max_ms` spike, zero underruns); a **Documentation pane overhaul** (word-wrap at any UI scale, a collapsible multi-level sidebar tree with intra-doc links, `[Unreleased]` ordered last); an **exhaustive README rewrite**; **Tools-menu icon** fixes for NSF Player / Pixel Inspector (glyph swap dodging egui's Ubuntu-Light `fi`/`fl` PUA-ligature collision); **removal of the vestigial "Show Debugger" checkbox** + dead plumbing; and **HD-pack tile substitution** now applying in the debugger / tool render branch. Bugfix-only; with optional features off the shipped / native / `no_std` / wasm builds behave as v1.7.0 and AccuracyCoin holds 100% (139/139). | |
656 | 659 | | **v1.7.0** | "Forge" — the tools become **writable** and **programmable**. **F** accuracy hardening (battery-save round-trip oracle + length-halt/reload + DMC even/odd-defer pins + an off-by-default PPU extra-scanlines overclock); mapper breadth → **168 families** (G1 reusable-ASIC: FK23C / COOLBOY / MINDKIDS / Sachen / Waixing / Kaiser, BestEffort honesty-gated); **A** editing-capable tools (palette / nametable / CHR / OAM writeback, an iNES / NES 2.0 header editor, an inline 6502 assembler); **C** debugger depth (CallstackManager + step modes, MemoryAccessCounter + uninit-read, ca65 / cc65 `.dbg` source maps); **B** scriptable **TAStudio** (`tastudio.*` Lua API + analysis-canvas callbacks) + full Lua parity; **E** host IPC / automation (`comm.*` / `client.*` / `userdata.*`) behind a new off-by-default `script-ipc` feature (host-mediated sandbox, ADR 0016); **D** rewind (HistoryViewer + Export-Last-30s `.rnm` + a Zwinder XOR-delta + LZ4 tiered greenzone); **G** expansion-audio (NSF router reusing VRC6/7 / FDS / MMC5 / N163 / 5B + MMC5 audio), movie import (`.fcm` / `.fmv` / `.vmv`; `.fm2` / `.bk2` export hashing), and an **HD-Pack Builder** (ADR 0017) + the HD-pack loader real-Mesen-`<tile>`-format fix (ADR 0018); a UI overhaul (consolidated Input Display, modernized menu / status bar, a polished Documentation pane); plus the **H1–H9 reach wave** — browser-RA finish + an RA HUD, spectator netplay + Game-Genie-encoder / `.srt` / `.tbl`, coverage-harness `.zip` / `.7z` / `.fds` discovery, per-game `<rom>.json` config overrides + a DIP editor + a lag counter (ADR 0019), audio depth (stereo panning / Schroeder reverb / crossfeed / output-device picker / 20-band EQ, ADR 0020), web/wasm parity (browser Lua / File-System-Access-API / Gamepad-API / PWA-offline / `?settings=` share-links, ADRs 0021+0022), an **i18n** framework (compile-time string catalog + a language picker, English + Spanish, ADR 0023), and a `full` maximal-native-feature build + `cargo full-run` alias. Additive / off-by-default; the shipped / native / `no_std` / wasm builds stay byte-identical and AccuracyCoin holds 100% (139/139). | |
657 | 660 | | **v1.6.0** | "Studio" — creator-power + accuracy-polish + reach. A **TAStudio-class piano-roll TAS editor** (save-state greenzone + lag log + markers + forkable branches + `.rnmproj` projects, with a drag-paint egui grid + deterministic seek); **`.fm2` (FCEUX) and `.bk2` (BizHawk) movie interop** ↔ `.rnm`; **Lua movie driving** (`emu.run` / `emu.frameadvance`) + data breadth (memory domains, sized reads, `joypad`); **Mesen2-class debugger depth** (expression / conditional breakpoints, R/W/X watchpoints, a watch window, conditional trace, a full hex editor, RAM watch / search); an **off-axis accuracy** verification + documentation pass (DMC/OAM-DMA controller corruption, `$2007` read-during-render, sprite-overflow + open-bus decay — verified, no engine change); mapper breadth → **150 families** (J.Y. ASIC + a discrete-multicart batch) + a **UNIF (`.unf`) loader**; **FDS-proper** (timed disk-head + `$4032` auto-insert + per-game CRC quirk table); **A/V recording** (ffmpeg → mp4 / mkv, default-off `av-record`); **HD-pack HD audio** (`<bgm>` / `<sfx>` OGG via `$4100`, default-off `hd-pack`); and a **shader / filter ecosystem** (LMP88959 NTSC/PAL, hqNx / xBRZ, a constrained `.slangp` / `.cgp` import). Additive / off-by-default; the shipped / native / `no_std` / wasm builds stay byte-identical and AccuracyCoin holds 100% (139/139). | |
@@ -787,7 +790,7 @@ If you use RustyNES in academic research, please cite: |
787 | 790 | author = {RustyNES Contributors}, |
788 | 791 | title = {RustyNES: A Cycle-Accurate NES Emulator in Rust}, |
789 | 792 | year = {2026}, |
790 | | - version = {1.7.0}, |
| 793 | + version = {1.8.1}, |
791 | 794 | url = {https://github.com/doublegate/RustyNES}, |
792 | 795 | note = {Cycle-accurate NES emulator on a master-clock-precise scheduler; |
793 | 796 | AccuracyCoin 100\% (139/139), nestest 0-diff; 168 mapper families, |
|
0 commit comments