github jsgroth/jgenesis v0.11.0

latest releases: v0.12.0, v0.11.4, v0.11.3...
2 months ago

Some of the most notable changes since v0.10:

  • Game Boy Advance emulation now supported
  • 32X now supports emulated CPU overclocking
  • Slightly improved 32X color accuracy
  • Improved 32X PWM audio quality
  • Sega CD per-region BIOS configuration
  • NES palette customization options
  • Game Boy and Game Boy Color now support LCD ghosting emulation via frame blending
  • Support for running original Game Boy games in Game Boy Color mode
  • Support for turbo/autofire input mappings
  • Fixed a ton of bugs for every system, including two Sega CD regressions that affected v0.10
  • SDL upgraded from SDL2 to SDL3

Save states are not compatible with previous versions.

I did not intend for this to come so long after the last release, but there was always just one more thing...

Full changelog below:


Game Boy Advance

  • Game Boy Advance emulation is now supported; requires a Game Boy Advance BIOS ROM
  • Video options for color correction and LCD ghosting emulation (frame blending), both enabled by default
  • Audio enhancement option to apply enhanced interpolation to the Direct Sound channels rather than accurately emulating actual hardware's resampling behavior
    • This massively reduces audio aliasing and noise in most cases, but it can also make audio sound muffled when games use very low sample rates (as most GBA games do)
  • CPU/prefetch/DMA/etc. timing is not perfect but should be moderately accurate
  • All types of cartridge save memory supported, with an option to force a specific type if auto-detection gets it wrong
  • The cartridge RTC chip and solar sensor are emulated for the handful of games that use them (e.g. Boktai), other cartridge peripherals are not currently emulated

New Features

  • (Genesis) Added an option to ignore configured aspect ratio and display square pixels when the VDP is in H40/H320px mode (#442)
  • (Genesis) Added support for games with 24C64 EEPROM chips; College Slam and Frank Thomas Big Hurt Baseball are now playable (#459)
  • (Genesis) New audio option to enable/disable individual YM2612 audio channels
  • (Genesis) New audio option to adjust volume of individual sound sources
  • (Genesis) Added some additional memory/register views to the Memory Viewer window
  • (Sega CD) Added support for per-region BIOS configuration, where the emulator will automatically select the appropriate BIOS based on game region
  • (32X) Added two new color display options (#492)
    • New option to darken Genesis colors relative to 32X colors, enabled by default; on actual hardware the brightest 32X colors are noticeably brighter than the brightest Genesis colors
    • New option to apply a yellow or purple tint to 32X colors, roughly as observed on actual hardware
  • (32X) Added an option to overclock the SH-2s; this is extremely CPU-intensive but can reduce slowdown in some games
  • (32X) Added options to hide all pixels of a given priority (#494)
  • (NES) Added palette customization options (#424)
    • Can now load a custom palette from a file; both 64-color and full 512-color palette files supported
    • GUI now has a builtin NTSC palette generator with a graphic displaying the current palette
  • (SNES) Added support for the ST018 coprocessor, used by Hayazashi Nidan Morita Shougi 2
    • This is emulated using an ARM7TDMI implementation (ARMv4T) rather than an ARM6 (ARMv3), but this should not make any functional difference
  • (GB) Added a frame blending option that simulates LCD ghosting, enabled by default; enabling this fixes graphical effects in a few games and demos (#469)
  • (GB) When color correction is enabled, you can now manually adjust the LCD gamma value used for gamma correction
  • (GB) Added support for booting from a boot ROM (#404)
  • (GB) Added an option to run original Game Boy software in Game Boy Color mode (#150)
    • This feature requires a GBC boot ROM in order to initialize the compatibility palettes, and it is off by default because it (accurately) causes major bugs in a few games
  • (GB) Added (proper) support for the MBC30 mapper, used by the Japanese version of Pocket Monsters Crystal Version (#478)
  • (GB) Added support for unlicensed/homebrew games with an SRAM size byte of $01 (2 KB) (#485)
  • (Game Gear) Added a frame blending option that simulates LCD ghosting, currently disabled by default
  • (Game Gear) Added support for booting from a BIOS / boot ROM (#404)
  • Added turbo button support for face and shoulder buttons on all emulated systems (#554)
  • Added options to automatically pause the emulator when in the background (#585)

Improvements

  • Upgraded SDL from SDL2 to SDL3; for the most part this should hopefully have no noticeable impact except for audio playback maybe working a little better than before
    • As part of this, I removed the borderless vs. exclusive fullscreen setting because this seemed much less straightforward to change in SDL3; fullscreen will now always use whatever the platform and graphics driver default to (probably always borderless on modern platforms)
  • The auto-prescale video setting can now use separate scale factors for width and height, which produces a less aliased image when games use display modes with sub-1 pixel aspect ratio (e.g. Genesis NTSC H40/H320px mode, SNES high-res modes)
    • Auto-prescale is also now enabled by default (the previous default was a fixed 3x upscale factor)
  • (32X) Improved quality of PWM chip audio resampling
    • There is also a new audio option to switch to the old resampling algorithm, which is lower quality but usually sounds a little sharper (given that most 32X games use PWM sample rates of 22 KHz or less)
  • (SNES) When using the Super Scope, the emulator now displays the new Super Scope Turbo state whenever you toggle Turbo on/off
  • (GB) Audio is now sampled internally at 2 MHz rather than 1 MHz, which should reduce audio aliasing from the wavetable channel

General Fixes

  • Fixed a number of cases that would cause the emulator to crash, none triggered by official releases (as far as I know) but some triggered by homebrew/demos/test ROMs
    • (Genesis) Loading a ROM file smaller than 1 KB or so (#434)
    • (Genesis) Z80 tries to access its own memory through the 32KB 68K memory bank by mapping it to $A00000-$A07FFF or $A08000-$A0FFFF
    • (Genesis) VRAM-to-VRAM copy DMA with source address higher than $1FFFF
    • (Genesis) 68000 triggers a privilege violation exception
    • (Genesis) 68000 triggers an address error while handling an exception
    • (32X) One of the SH-2s executes a SLEEP instruction (#431)
    • (32X) One of the SH-2s executes an illegal opcode
    • (32X) One of the SH-2s tries to access certain invalid memory addresses (highest 3 bits set to 100 or 101)
    • (32X) 68000 performs a 16-bit read from certain invalid memory addresses
    • (SMS / Game Gear / Genesis) Z80 handles an IRQ while in interrupt mode 2
    • (SNES) Loading a ROM file smaller than 32 KB (#538)
    • (SNES) Loading an SA-1 cartridge where the cartridge header claims it does not have any BW-RAM (anything that does this now gets 64 KB of BW-RAM)
    • (SNES) SA-1 Character Conversion DMA Type 1 with an I-RAM destination address higher than $7FF
    • (GB) CPU executes a STOP instruction with no CGB speed switch armed (#465)
  • Fixed changes to the save path and save state path options not applying immediately if changed while an emulator is running
  • Fixed the UI theme option not applying to the Memory Viewer window

Genesis / Sega CD / 32X Fixes

  • Fixed the VDP rendering too many pixels of the previous color when a game makes a mid-scanline backdrop color change while display is disabled; this improves accuracy of the glitchy lines in Gouketsuji Ichizoku / Power Instinct (#462)
  • Fixed the 6-button controller timeout period being a little too short (#445)
  • Fixed two games failing to boot due to the emulator not giving them the correct type of cartridge save memory
    • Honoo no Toukyuuji: Dodge Danpei has a 24C01 EEPROM chip (#460)
    • Al Michaels Announces HardBall III has 32 KB of SRAM (#546)
  • Slightly adjusted memory refresh delay timing when the main CPU is executing out of RAM; this fixes incorrectly visible CRAM dots in Snatcher
  • (Sega CD) Fixed implementation of VDP DMA reads from word RAM being delayed; this fixes glitchy background graphics in Snatcher (again)
    • This was a regression that affected v0.10.0 and v0.10.1; it was broken by VDP DMA changes in v0.10.0
  • (Sega CD / 32X) Adjusted inter-CPU/VDP timings to account for some VDP timing changes made in v0.10.0; this fixes the Sega CD version of Mickey Mania having glitchy graphics on the right side of the screen in the 3D chase stages (#491)
    • This was also a regression that affected v0.10.0 and v0.10.1
  • (32X) Improved accuracy of VDP auto fill timing; this fixes occasional major graphical glitches in Shadow Squadron / Stellar Assault during the intro and takeoff sequences (#225 / #439)
  • (32X) Fixed some inaccuracies around VDP register latching; this fixes some early 32X demos not working properly (#430)
  • (32X) Fixed some PWM resampling bugs that sometimes caused erroneous pops in PWM audio output
  • (32X) Slightly improved SH-2 timing accuracy, particularly around 32-bit SDRAM writes being way too slow (#493)
  • (32X) Fixed 32X HINT counter behavior not matching Genesis HINT behavior, which caused SH-2 horizontal interrupts to be off by a line (#559)
  • (32X) Fixed 32X VDP per-line events (HBlank, line render) triggering slightly too early in the line
  • Several timing fixes that fix graphical bugs in the Chaekopon demo by Limp Ninja (#435)
    • Adjusted low-level sprite processing timings so that sprite attribute fetching is performed slightly earlier in the line
    • Fixed a pretty egregious DMA timing bug where DMA would take way too long to start copying if initiated during active display with display enabled
  • Fixed a number of inaccuracies identified by the testpico test ROM (#482)
    • Fixed implementation of how Genesis VINT and HINT are delayed by 1 instruction when re-enabled; the previous implementation did the wrong thing when two consecutive MOVE instructions enabled then disabled VDP interrupts
    • Fixed the Genesis VDP's F flag starting to read 1 (VINT pending) slightly later than it's supposed to
    • (32X) Fixed behaviors related to enabling/disabling/clearing SH-2 VINT during VBlank
    • (32X) Fixed some register bits being incorrectly writable / not writable
    • (32X) Updates to initial state at power-on to more closely match actual hardware

NES Fixes

  • Very slightly adjusted sprite 0 hit timing; this fixes glitchy lines on the title screen of Indiana Jones and the Last Crusade (#314)
  • DMC DMA timing is now emulated; this fixes screen jitter in Ultimate Air Combat (#268)
  • Fixed non-power-of-two CHR ROM sizes not working correctly (#573)
  • Several fixes for inaccuracies identified by the AccuracyCoin test ROM (#551)
    • Fixed an APU timing issue that sometimes caused an incorrectly skipped frame counter clock when software wrote 0x80 to $4017 with two consecutive sta $4017 instructions
    • More accurate APU frame counter timing
    • More accurate OAM DMA timing
    • DMA dummy reads are now emulated (with a new option to disable dummy controller port reads because they cause input glitches in some games)
    • CPU open bus is now properly emulated (it was previously faked by always returning the address high byte)
    • More accurate PPU open bus emulation
    • Most PPU registers are no longer writable immediately after reset
    • Fixed the 6502 incorrectly polling the interrupt lines during the final cycle of BRK instructions and IRQ handling
    • More accurate controller port behaviors around strobing and consecutive-cycle reads

SNES Fixes

  • Fixed BG2 incorrectly not rendering in Mode 7 if BG1 is disabled and BG2+EXTBG are enabled; this fixes missing background graphics in F-1 Grand Prix (#529)
  • Fixed V IRQs incorrectly not triggering when a game either 1. changes VTIME to the current line while V IRQs are enabled, or 2. enables V IRQs while VTIME is set to the current line; this fixes graphical corruption in F-1 Grand Prix, F-1 Grand Prix Part III, S.O.S.: Sink or Swim, and RoboCop vs. The Terminator (#529 / #530 / #543)
  • Fixed multiple bugs in the BG vertical mosaic implementation, which was previously quite wrong; this fixes graphical bugs in Beavis and Butt-Head and Jurassic Park Part 2: The Chaos Continues (#532 / #540)
  • Improved DMA timing accuracy; this fixes graphical glitches in Circuit USA (#531)
  • Fixed incorrect DSP-1 port address mapping for DSP-1 cartridges with more than 1 MB of ROM; this fixes Super Bases Loaded 2 failing to boot (#534)
  • Fixed some revisions of Tintin in Tibet incorrectly defaulting to NTSC timings instead of PAL (#539)
  • The 65816 stack pointer is now initialized to $01FF instead of $0100; this fixes some homebrew games failing to boot due to stack corruption (#468)
  • Fixed SA-1 Character Conversion DMA Type 1 in 2bpp or 4bpp mode incorrectly treating the input packed pixel data as big-endian within a byte when it is actually little-endian; this fixes graphical glitches in the SA-1 tech demo cartridge (#537)
  • Implemented multiplication/division timing; this fixes some old homebrew that accidentally depends on reading intermediate division results (#576)

Game Boy [Color] Fixes

  • Fixed the GBC color correction implementation nonsensically performing calculations in sRGB color space rather than linear color space; this makes a particularly huge difference for the GBA LCD option
  • Slightly adjusted timing of when the STAT LY=LYC bit reads 1; this fixes a glitchy line in Elevator Action (#472)
  • The serial port transfer data register (SB / $FF01) is now read/write; this fixes Card Game not allowing you to start the game (#471)
  • Fixed sample output behavior of pulse and wavetable channels when the DAC is enabled but the channel is inactive
  • Added approximate emulation of DAC fading when a channel's DAC is turned on or off; combined with the above change, this fixes buzzing noises in Cannon Fodder, 3D Pocket Pool, and others (#475)
  • Fixed VRAM DMA incorrectly terminating prematurely when the destination address increments from $9FFF to $A000; this fixes freezing in F1 Championship Season 2000 (#464)
  • HDMA5 writes with bit 7 set are now allowed to change the length of in-progress HDMAs; this fixes corrupted graphics in NASCAR 2000 (#467)
  • HDMA is now able to halt the CPU mid-instruction; this fixes occasional glitchy frames in Toy Story Racer

Don't miss a new jgenesis release

NewReleases is sending notifications on new releases.