2023-07-24

jgnes v0.6.0

jgnes v0.6.0 is released. A cross-platform NES emulator. Has a native frontend built using SDL2 as well as a web frontend that compiles to WASM and runs in the browser.

jgnes Feature Status:
Implemented:
Cycle-based 6502 CPU emulation, PPU emulation (graphics), and APU emulation (audio)
The most commonly used cartridge boards (aka mappers)
NROM
The most common NROM variants (UxROM / CNROM / AxROM)
MMC1
MMC3/MMC6
Some less commonly used cartridge boards
MMC2/MMC4
MMC5 including expansion audio
Konami VRC2 / VRC4 / VRC6 / VRC7, including VRC6 expansion audio
VRC7 FM synth expansion audio is not implemented; only one game used it, Lagrange Point
Sunsoft 5A / 5B / FME-7, including 5B expansion audio
Codemasters unlicensed board
Color Dreams unlicensed board
Bandai FCG-1 / FCG-2 / LZ93D50
The LZ93D50 variant that uses the Datach Joint ROM system is not implemented (iNES mapper 157)
Jaleco JF-11 / JF-14
GxROM
BNROM
NINA-001
P1 & P2 input with support for keyboard input and DirectInput gamepad input
Support for 3 different forced aspect ratios (NTSC, 1:1 pixel aspect ratio, 4:3 screen aspect ratio), plus an option for stretched/none
Overscan customization
A GPU-backed renderer based on wgpu with an option for integer upscaling + linear interpolation, producing a sharp but clean image even at higher resolutions and non-8:7 aspect ratios
Save & load state
Not Implemented:
Unofficial CPU opcodes
Cycle-accurate rendering effects of enabling rendering mid-scanline
DMC DMA cycle stealing and dummy reads, an obscure hardware quirk that affects very very few if any games
Color palette customization; the NES hardware directly outputs an NTSC video signal rather than RGB pixel grids, so any mapping from NES colors to RGB colors is an approximation at best
Lots of mappers, most notably Namco's custom mappers
Fast forward or rewind
Support for PAL/EU releases (the processor timings are different compared to NTSC US/JP)
Support for any controller port peripherals (e.g. the Zapper)

jgnes v0.6.0 changelog:
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)
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

Download: jgnes v0.6.0
Source: Here

0 Comments

Post a Comment