- Core changes
- Support for PAL (EU) timings and output resolution/frequency
- PAL mode outputs at 256x240 instead of 256x224, runs the CPU/PPU/APU at different speeds, outputs video at ~50Hz instead of ~60Hz, and a few other changes
- By default the emulator will attempt to detect NTSC vs. PAL from the ROM header, but there is also a new option to force either NTSC or PAL while ignoring what is in the header
- Added a new aspect ratio option for PAL (11:8 pixel aspect ratio at PAL output resolution)
- Added a new option to emulate the PAL black border, which crops the output resolution from 256x240 to 252x239 (removing the top scanline + the 2 columns on each edge)
- Implemented all unofficial/illegal 6502 CPU opcodes except for 3 buggy/unstable opcodes that are not useful (specifically $93, $9B, $9F)
- Only a few officially licensed games used any unofficial opcodes (e.g. Super Cars and Puzznic) but some ROM hacks and homebrew software make use of them
- Executing an illegal KIL opcode will now halt the CPU until reset instead of causing the emulator to terminate with an error
- Added an option to disable sprite flickering by removing the hardware's 8-sprite-per-scanline limit
- Note this can cause visual glitches in games that used the limit to intentionally hide sprites (e.g. Castlevania II and Ninja Gaiden)
- Support for PAL (EU) timings and output resolution/frequency
- Frontend changes
- Added a scanlines option that supports rendering with no scanlines (current behavior), dimmed scanlines, or black scanlines; requires integer height scaling and at least 2x native NES resolution to render correctly
- Added an option for a configurable blur shader that can produce a cleaner soft image than using linear filtering with 1x internal scaling
- Fixed a bug in the wgpu renderer where there would sometimes be a visible seam from the top-left corner of the viewport to the bottom-right corner depending on whether the window height was even or odd; it was particularly noticeable with nearest-neighbor filtering
- Slight improvements to audio playback that should reduce audio lag and reduce stuttering when audio sync is enabled in some configurations
- Updated input/hotkey configuration menu to allow changing input/hotkey bindings while the emulator is running
- Web changes
- Configuration is now saved in local storage instead of reset on every page load
- 2x/3x image prescaling is now implemented much more efficiently by utilizing a GPU shader, same as the native frontend
- Added a fullscreen toggle
- Added support for a build that renders using WebGPU instead of WebGL2, controlled by building without default features (or using the JGNES_WEBGPU env var with build.sh). This reduces the WASM file size by roughly 75% (!) but doesn't work in most browsers yet
- Tweaks to audio playback that should reduce audio skips when audio sync is enabled at high refresh rates
- Layout and styling improvements