Skip to content

Releases: jsgroth/jgenesis

v0.5.7

11 Dec 19:03
Compare
Choose a tag to compare

Every SNES coprocessor is now supported except for ST018, which I do not plan to implement because it would be a ton of work (it's a 32-bit ARMv3 CPU) and it was only used by an obscure Japan-only shogi game (Hayazashi Nidan Morita Shougi 2)

Features

  • (SNES) Added support for the Super Scope peripheral
    • Super Scope position is controlled using the mouse cursor, and Super Scope buttons can be mapped to either keys or mouse buttons
  • (SNES) Added support for the OBC1 "coprocessor", an OBJ controller chip used by Metal Combat: Falcon's Revenge
  • (SNES) Added support for the SPC7110 coprocessor, a data decompression chip used by Tengai Makyou Zero, Momotarou Dentetsu Happy, and Super Power League 4
    • This implementation does support the extended memory map required by Tengai Makyou Zero's fan translation, which expects the last 1MB of its 7MB ROM image to be mapped directly to banks $40-$4F
  • (SNES) Added support for the S-RTC coprocessor, a real-time clock chip used by Daikaijuu Monogatari II / Super Shell Monsters Story II
  • (SNES) Added support for older ROM images that have an unnecessary 512-byte copier header (typically files with the .smc extension)
  • (All) Added an option for whether to hide or show the mouse cursor when it is over the emulator window (it was previously always hidden, which was problematic in SNES Super Scope games)

Fixes/Improvements

  • (SNES) Fixed the PPU mosaic effect working pretty much completely incorrectly in Mode 7; this fixes mosaic effects in Yoshi's Safari which combines mosaic and Mode 7 for fade-in/fade-out effects
  • (SNES) Adjusted PPU rendering code to account for mid-scanline scroll register writes
    • This fixes glitchy scanlines in Battle Clash, which somehow managed to perfectly time a Mode 7 V scroll write such that the first byte is written before rendering starts and the second byte is written 5-10 pixels into the scanline
    • The implementation is not completely accurate because it doesn't account for some PPU registers being latched at the start of the line (and also because the timing of when the scroll write takes effect is almost certainly not 100% accurate), but very few games seem to do mid-scanline PPU register writes anyway
  • (All) Fixed a bug where changing the joystick axis deadzone setting in the GUI would not take effect until a new game was started
  • (SNES) Fixed a benign bug where the PPU's OAM address was always getting reloaded when forced blanking was disabled; instead, disabling forced blanking should only reload OAM address if it occurs on the first scanline of VBlank

v0.5.6

30 Nov 22:37
Compare
Choose a tag to compare

Features

  • (All) Rewrote the debugger interface (now titled Memory Viewer) to use graphical interface controls instead of relying on repeatedly pressing hotkeys
    • The memory viewer now also supports SNES VRAM viewing, which it did not before; SNES VRAM can be viewed in the form of 2bpp tiles, 4bpp tiles, 8bpp tiles, or Mode 7 tile data
    • All types of memory that were previously supported are still supported: SMS/GG VRAM, SMS/GG CRAM, Genesis VRAM, Genesis CRAM, and SNES CGRAM

Fixes

  • (SNES) Fixed a PPU regression introduced in 0.5.3 that broke BG4 rendering in Mode 0; this fixes the glitchy intro text in Yoshi's Island
    • The specific bug was that BG4 was using the 8 color palettes at $80-$9F in CGRAM instead of at $60-$7F
  • (All) Fixed a bug specific to using the Vulkan wgpu backend on Windows where minimizing the emulator window would likely cause the currently running emulator to crash with an "underlying surface has changed" error

v0.5.5

28 Nov 02:03
Compare
Choose a tag to compare

Fixes/Improvements

  • (Master System / Game Gear) Fixed a config reload bug introduced in 0.5.2 that caused audio to stop working correctly after changing config or loading state
    • The bug was introduced as part of the change to have the SMS/GG emulator use the same audio resampling code as the other emulators; on config reload it was incorrectly calculating the SMS/GG audio chip frequency, which needs to be recalculated on config change because it varies slightly betweeen NTSC and PAL
  • (SNES) Fixed a bug where the 65C816 CPU reset code was not forcing on the m and x flags (accumulator/memory size and index register size); this fixes Donkey Kong Country 2 freezing after a soft reset
    • Unlike most other games which immediately disable 6502 emulation mode and explicitly set the m/x flags, DKC2 executes a number of LDA and STA instructions before it does this, and it would freeze if the reset occurred while the accumulator/memory size was set to 16 bits
  • (SNES) Emulated VRAM blocking during active display, which I'm not sure any licensed games depend on but is accurate to actual hardware
  • (All) Fixed a bug with the Open Recent menu not always properly preserving state after closing the emulator
  • (All) The rendering code now uses Microsoft's DirectX shader compiler when using the DirectX 12 wgpu backend on Windows
    • This is also why the Windows download is so much larger than the last release - the required DLL files (dxil.dll and dxcompiler.dll) need to be packaged with the application for this to work
  • (All) DEBUG and TRACE logs are now disabled at compile time in release builds, which should very slightly improve performance even when DEBUG/TRACE logs are not enabled

v0.5.4

22 Nov 04:13
Compare
Choose a tag to compare

Fixes

  • (SNES) Fixed an issue in how the memory mapping code handled cartridges with non-power-of-two ROM sizes; this fixes a major bug in Mega Man X where armor upgrades were not preserved between stages

v0.5.3

21 Nov 01:32
Compare
Choose a tag to compare

Features

  • (SNES) Added support for the SA-1 coprocessor, used by 35 games including Kirby Super Star, Kirby's Dream Land 3, and Super Mario RPG
  • (SNES) Added support for the Super FX coprocessor, used by 8 games including Star Fox and Yoshi's Island (9 games if counting Star Fox 2)
    • Also added an option to overclock the Super FX GSU, since some of the Super FX games benefit greatly from running it faster than stock speed
  • (SNES) Added a new horizontal blur shader ("SNES adaptive") that keeps a consistent amount of blur in games that change resolution between 256px and 512px, such as Seiken Densetsu 3 and Kirby's Dream Land 3
    • The blur amount is equivalent to 3-pixel horizontal blur at 512px internal resolution
    • This is particularly good for Kirby's Dream Land 3, which often uses pseudo-hi-res mode for a faux transparency effect that looks quite bad without some sort of blur
  • (All) Added a new Open Recent sub-menu to the GUI for quickly opening any of the 10 most recently opened files

Fixes/Improvements

  • (SNES) Improved rendering behavior when high-resolution mode is off (either BG mode 5/6 or pseudo-hi-res mode)
    • The emulator previously always rendered in 512x224 to account for games being able to change resolution mid-frame, which some games do (e.g. Donkey Kong Country on the splash screen, Seiken Densetsu 3 when displaying text boxes). It now renders in 256x224 by default when high-res mode is off, and if there's a mid-frame change into high-res mode then it will redraw the earlier parts of the frame in 512x224
  • (SNES) Fixed color math in mode 5/6 incorrectly rendering the math screen at 256px instead of 512px; this was discovered while testing Marvelous (SA-1) where the file select screen looked extremely wrong before this fix
  • (SNES) Somewhat improved performance by rewriting the core PPU loop to perform most operations per-line instead of redoing a ton of work per-pixel
  • (SNES) The APU now silences audio output when the console is reset
  • (SNES) The CGRAM debug window now ignores the PPU's brightness setting and always displays colors at max brightness; this fixes the color debug window not working in games that turn brightness to 0 before the end of the frame (e.g. Super Mario Kart)

v0.5.2

14 Nov 19:12
Compare
Choose a tag to compare

Features

  • (SNES) Added support for the CX4 coprocessor, used in Mega Man X2 and Mega Man X3
  • (SNES) Added support for the 6 coprocessors that use the NEC µPD77C25/µPD96050 CPU: DSP-1, DSP-2, DSP-3, DSP-4, ST010, and ST011
    • Altogether these chips were used in 24 games, most notably Super Mario Kart and Pilotwings (both DSP-1)
    • This CPU is low-level emulated, so copies of the program and data ROMs are required to run any games that used these chips
  • (SNES) Implemented mapping for ExHiROM cartridges, used by cartridges with more than 4MB of ROM that didn't include an MMC; used by Tales of Phantasia (6MB) and Daikaijuu Monogatari II (5MB)
    • Daikaijuu Monogatari II likely does not work correctly yet to due to using an unimplemented RTC coprocessor
  • (SNES) Added support for the S-DD1 coprocessor, used in Star Ocean and Street Fighter Alpha 2
  • (Master System) Implemented the VDP's legacy TMS9918 Graphics II display mode, used in F-16 Fighting Falcon

Fixes/Improvements

  • (SNES) Fixed a bug with the Mode 7 setting to sample tile #0 for out-of-bounds samples, where it was sampling the tile in the top-left corner of the tile map instead of always sampling tile #0; this was discovered while testing Super Mario Kart which rendered the outside of the track incorrectly before this fix
  • (SNES) For games with battery-backed SRAM, fixed the emulator persisting SRAM to disk 60 times per second no matter what; it now only writes to disk when SRAM contents change, no more frequently than twice per second
    • This issue only affected the SNES core; the other cores already handled this reasonably
  • (Master System / Game Gear) Updated how the PSG handles high-frequency audio output to be a bit more accurate; there was previously a hack to halt wave oscillation for any channels configured to output at ultrasonic frequencies
  • (Master System / Game Gear) Updated to use the same audio resampling code as the other cores

v0.5.1

09 Nov 20:30
Compare
Choose a tag to compare

Fixes/Improvements

  • (SNES) Fixed a bug that caused the APU's echo filter to stop processing while the amplifier was muted; this fixes random freezes and audio glitches in Donkey Kong Country 2
    • Freezes could occur because if the echo buffer hadn't wrapped around by the time the game re-enabled echo buffer writes after reducing the echo buffer size, the echo filter could overwrite part of the SPC700 program and cause the game to lock up the next time the main CPU tried to handshake with the APU
  • (SNES) Added a new option (on by default) to slightly increase the APU's master clock frequency, which when combined with audio sync has the emulator run at 60 FPS instead of ~60.098 FPS (NTSC)
    • The ~60.098 FPS speed is more accurate to actual hardware, but it can cause audio skipping and/or framerate stuttering depending on display characteristics and VSync mode

v0.5.0

09 Nov 00:52
Compare
Choose a tag to compare

Features

  • Added a new emulation core for the first non-Sega console in this project, the Super Nintendo Entertainment System (SNES) / Super Famicom
    • None of the SNES cartridge expansion hardware is currently implemented so a number of games do not currently work, including but not limited to the following:
      • Super Mario Kart, Pilotwings (DSP-1)
      • Mega Man X2, Mega Man X3 (CX4)
      • Star Ocean (S-DD1)
      • Kirby Super Star, Kirby's Dream Land 3, Super Mario RPG, Dragon Ball Z: Hyper Dimension (SA-1)
      • Star Fox, Yoshi's Island (Super FX)
    • The VRAM debug window does not currently work with SNES because I haven't yet figured out a great way to make it work with the frontend interface I developed for the Sega consoles; raw SNES tile data is much more complicated to display due to tiles possibly being 2bpp, 4bpp, or 8bpp, plus Mode 7 using its own unique tile data & map format

Fixes

  • Fixed the Z80 core crashing the emulator if it handles an interrupt while in interrupt mode 0 or 2; this fixes Blaster Master 2 which never switches the Z80 to interrupt mode 1, unlike nearly every other Master System / Game Gear / Genesis / Sega CD game

v0.4.2

16 Oct 22:57
Compare
Choose a tag to compare

tl;dr: SVP support and lots of Sega CD bugfixes

Features

  • (Genesis) Added support for the Sega Virtua Processor (SVP), an auxiliary processor used in the Genesis port of Virtua Racing to render 3D graphics in real time
  • (Master System) Made it possible to toggle between NTSC and PAL while a game is running
  • (Genesis) Re-added .bin files to the GUI's game list, implemented with a filter to exclude any files that are referenced in Sega CD .cue files
  • (All) Improved CLI help output by grouping related options under custom headings
  • (All) Added a hotkey to step the emulator for a single frame while paused (mainly useful for debugging)

Fixes/Improvements

  • (Sega CD) Fixed an off-by-one error that caused the VDP to read garbage if it did a DMA that read through the very end of word RAM; this fixes Snatcher having glitchy background graphics on some screens
  • (Sega CD) Fixed a CD drive bug where a "no-op" Seek command (seek time == current time) would cause the drive to start playing instead of remaining paused; this fixes Lunar: The Silver Star having extremely long post-battle load times
  • (Sega CD) Adjusted timing of image rotation/scaling operations to be hopefully closer to actual hardware; this fixes the Batman Returns intro cutscene running way too fast
  • (Sega CD) Changed main CPU writes to apply after running the sub CPU instead of applying them immediately; this fixes Silpheed freezing during gameplay if the VBlank interrupt fires while the main CPU is in the middle of handing word RAM to the sub CPU
    • The timing is very tight here; the main CPU needs to return from its VINT handler and then read a 0 from the RET bit in $A12003 twice before the sub CPU hands word RAM back to the main CPU. Otherwise, the two CPUs will deadlock and the game will freeze
  • (Sega CD) While not accurate to actual hardware, changed the word RAM code to allow the sub CPU and the graphics ASIC to access word RAM in 2M mode while it's owned by the main CPU; this fixes flickering and missing graphics in Batman Returns
    • It's somewhat unclear whether or not the graphics ASIC is allowed to access word RAM in this state, but the sub CPU definitely is not according to both official documentation and community hardware tests; there may be unrelated timing bugs creating the situation that made this hacky fix necessary
  • (Genesis / Sega CD) Implemented VRAM fill/copy DMA timing and the previously-unimplemented DMA busy bit in the VDP status register; this fixes the Mega CD JP Model 1 BIOS from freezing on the music player menu
    • The freeze occurred because if the main CPU doesn't pause during a long VRAM fill DMA, it will start blindly writing to word RAM before the sub CPU has switched it to 1M/1M mode, which causes a desync between the two CPUs. The other BIOS versions did not have this issue because the main CPU will not start writing to word RAM until it sees the mode bit set in $A12003
  • (Genesis / Sega CD) Added code to simulate the CPU delay that occurs when the CPU accesses the VDP data port while the VDP FIFO is full, which can happen if the CPU accesses VRAM/CRAM/VSRAM too rapidly during active display; this fixes graphical glitches in The Chaos Engine / Soldiers of Fortune, Double Clutch, and Sol-Deace
  • (Genesis / Sega CD) Implemented accurate cycle counting for the 68000 DIVS and DIVU instructions, which previously had hardcoded optimistic cycle counts; the previous counts were too low most of the time, but also way too high if the quotient overflowed a 16-bit result
  • (Genesis / Sega CD) Slightly improved performance by replacing the 68000 opcode decoding algorithm with a lookup table that is generated on first access

v0.4.1

04 Oct 22:43
Compare
Choose a tag to compare

Fixes

  • Fixed a major bug that caused the Sega CD emulator to crash when reading a postgap period, such as the last 2 seconds of the final audio track on the disc
  • Fixed another major bug that caused the Sega CD emulator to crash if the BIOS executed a track skip command with a destination at absolute time 60:02:00 or later
  • Fixed the CLI's --no-ym2612-quantization arg not doing anything; it now disables YM2612 quantization as originally intended

Features

  • Added support for the Sega CD's 128KB RAM cartridge, which is now enabled by default
    • This is particularly notable for Shining Force CD, since the 8KB internal backup RAM isn't large enough to hold save data for each campaign which makes it impossible to reach the end of the story without the RAM cartridge
  • Implemented the YM2612's SSG-EG feature, which fixes some sound effects in the very small number of games that used it (e.g. Beavis & Butthead and Olympic Gold)