TetaNES v0.15.0, a cross-platform Nintendo Entertainment System emulator, is now available. Built using Rust and wgpu, it supports Linux, macOS, Windows, and web browsers. Key features include NTSC/PAL/Dendy emulation, gamepad support for up to 4 players, Zapper support, and various filters like CRT shader. The update enhances mapper support, fixes audio and input bugs, and refines the emulator’s performance. Significant breaking changes include adjustments in the core functionalities, memory management, and clocking API. For detailed changes, visit the TetaNES official site. Download TetaNES v0.15.0 for an improved gaming experience.
(HEY YOU!! We hope you enjoy! We try not to run ads. So basically, this is a very expensive hobby running this site. Please consider joining us for updates, forums, and more. Network w/ us to make some cash or friends while retro gaming, and you can win some free retro games for posting. Okay, carry on 👍)
TetaNES v0.15.0 has been launched. TetaNES is a versatile emulator designed for the Nintendo Entertainment System (NES), which debuted in Japan in 1983 and North America in 1986. The emulator is developed in Rust using wgpu and supports Linux, macOS, Windows, and web browsers through Web Assembly.
Key Features:
Compatible with Linux, macOS, Windows, and Web.
Independent emulation core within tetanes-core.
Emulation for NTSC, PAL, and Dendy formats.
Headless Mode available with tetanes-core.
Pixellate and NTSC filters.
CRT shader for an authentic retro experience.
Supports up to 4 players with gamepad functionality.
Zapper (Light Gun) functionality using a mouse.
Compatibility with iNES and NES 2.0 ROM header formats.
Over 30 supported mappers accounting for >90% of licensed titles.
Game Genie Code support.
Includes a PPU Debugger
Real-time performance metrics
Customizable preference and keybinding menus via egui.
Speed modification & fast forward options
Visual & Instant Rewind capabilities
State saving and loading
Battery-backed RAM save features
Screenshot functionality
Gameplay recording and playback
Audio recording
TetaNES Change Log:
⛰️ New Features
(mapper) Added Taito TC0190/TC0350 and TC0690 (Mappers 33, 48) – (b127fe6)
(mapper) Serve tier 3a bank-switchers from page tables – (9b63b40)
🐛 Bug Fixes
(audio) Ramp output gracefully instead of abrupt cuts – (5d25e83)
(audio) Maintain pacing on a deadline and manage the buffer rate – (8d27d27)
(audio) Prepare the output stream before consumption begins – (e67a133)
(core) [breaking] Deliver one NES frame per clock_frame call – (7cca0af)
BREAKING: ControlDeck::clock_frame now returns Result
(input) Default enter/shift bindings for start/select added – (68776d2)
(input) Prevent binding clashes and button stickiness – (d2a6bf7)
(input) Adjusted shortcuts to respond on press rather than release – (099462f)
(input) Resolved modifier rollover and stuck joypad keys – (568023c)
(libretro) Addressed six issues found during review – (28b97dd)
(ppu-viewer) Fixed zoom on the OAM tab – (f150119)
(preferences) Corrected game-genie entry closure when focused in the menu – (2e4b9d6)
(renderer) Aligned wgpu surface to window dimensions for accurate menu interactions – (a39fede)
(rewind) Render each frame during rewind below 1x speed – (ae4d19b)
Drop Game Genie codes when swapping carts – (3ae10ff)
🚜 Code Refactor
(core) [breaking] Utilize readers and writers instead of paths – (04bc7ae)
BREAKING: fs and ControlDeck save/load methods now accept Read/Write; the path variants are now *_path, fs::load_bytes has been removed as &[u8] is already a reader, and Config::data_dir is now Config::sram_dir: Option
(core) [breaking] Flatten ownership structure so Bus contains the console – (c34e8b8)
BREAKING: ControlDeck::cpu() now returns registers only; the console is accessed via ControlDeck::bus(), and save states, rewinds, and replays are managed by the Bus rather than the Cpu. ControlDeck::load_cpu is now load_bus. Mapper and Memory components have moved from Ppu to Bus alongside the debugger. PpuDebugger has been renamed to Debugger, and its callback now accepts &Bus. The Ppu::load_nametables/load_pattern_tables/load_oam methods have been updated to read from the CHR window. The memory::Read and memory::Write traits have been eliminated in favor of inherent methods. Save states from prior builds will not be compatible.
(core) [breaking] Define video::Frame as a fixed-size buffer – (b79a2fe)
BREAKING: video::Frame is no longer dereferenced to Vec
(core) [breaking] Streamline the clocking API and improve public interface – (2b4fd1e)
BREAKING: MSRV is updated to 1.88; previous version 1.85 fails to build the crate. Adjustments to Map::sync and Ppu::sync_mapper have been made. Frame buffers now have fixed sizes: Ppu::frame_buffer and ControlDeck::frame_buffer_raw return &[u16; ppu::size::FRAME], ControlDeck::frame_buffer returns &[u8; Frame::SIZE], and the frame_buffer_into method accepts &mut [u8; Frame::SIZE]. ControlDeck::apu_mut now returns &mut Apu, joypad takes &self, and wram returns &[u8; bus::size::WRAM]. The previous call’s audio samples are cleared instead of accumulating; opt out with Config::clear_audio_on_clock = false. The five earlier clock_* entry points are now deprecated rather than eliminated.
(core) [breaking] Remove convention-only traits from common.rs – (61cedf4)
BREAKING: The Clock, Reset, Regional, Sample, and Sram traits have been removed, and their respective imports have been dropped from the prelude. Methods like clock, reset, region, set_region, output, save and load are now inherent to each component, functioning just as before—only the trait import is no longer necessary. A call to deck.cpu_mut().clock() remains unchanged.
(core) [breaking] Eliminate the pre-page-table memory path – (9ca8ae6)
BREAKING: mapper::Banks, mapper::BankAccess, ppu::CIRam and the mem module are removed. mem::Memory
(ppu) [breaking] Store PPU registers as fields instead of structs – (145a954)
BREAKING: ppu::ctrl::Ctrl, ppu::mask::Mask, and ppu::status::Status have been replaced; access the ctrl_*, mask_*, and status_* fields directly on Ppu.
(ui) Align with debugger accessors and cease generating unnecessary builds – (2606f3e)
📚 Documentation Updates
(core) Document the current state of the code rather than its past – (5a5b65b)
Corrected mapper count inaccuracies, VRC4f percentages – (ebcc66c)
Updated outdated information in CLAUDE.md, mapper documentation, and the README table – (b702137)
Removed outdated references and historical context from branch comments – (97a2850)
⚡ Performance Improvements
(core) [breaking] Exclude the cart’s ROM from save states – (12156e5)
BREAKING: Save states and rewind snapshots no longer retain the cart’s ROM; thus, a state may only be applied to the original game. Cpu::load and ControlDeck::load_cpu are now fallible, yielding cpu::StateMismatch when a state is incompatible with the loaded cart.
(rewind) Re-render rewound frames instead of storing them – (1ba7f48)
⚙️ Additional Tasks
Addressed must_use, const fn, and rustdoc warnings – (5ef3404)
Fixed cd issues – (0022029)
Download: TetaNES v0.15.0
Web Version: Browser
Source Code: Here
Retro Replay Retro Replay gaming reviews, news, emulation, geek stuff and more!