Skip to content

Releases: jsgroth/jgenesis

v0.13.1

Choose a tag to compare

@jsgroth jsgroth released this 29 Jun 20:04

Mostly small fixes and improvements from v0.13.0.

Save states are not compatible with previous versions.

Full changelog:


New Features

  • (Genesis) Added a new enabled-by-default option to automatically force 6-button controllers into 3-button mode when running a game that has known compatibility issues with 6-button controllers, such as Golden Axe II (#682)
  • (PC Engine) Added support for the Turbo Tap (i.e. multiple emulated gamepads, up to 5)
  • Holding the rewind and fast forward hotkeys together now rewinds at increased speed, based on the configured fast forward multiplier (#674)
  • Added a right click cut/copy/paste menu to the Cheats text edit box (#678)

Improvements

  • (Genesis) When the "remove sprite-per-scanline limits" setting is enabled with a game that has known compatibility issues with it (read: Sonic 1), the emulator now shows a message at game boot noting that this may cause glitches
    • I did this instead of forcing it off because it does reduce sprite flickering during gameplay; it just also causes a major glitch on the title screen, unfortunately
  • (32X) SH-2 invalid memory address accesses are no longer logged to console by default; on Windows, this fixes potential slowdown in games that frequently access invalid addresses, e.g. Pitfall: The Mayan Adventure
  • When mapping gamepad analog triggers to inputs, it should no longer be possible to accidentally map "trigger released" to anything (#674)

Fixes

  • (Genesis) Fixed the 68000 DIVU/DIVS instructions setting the Z and N flags incorrectly when the division overflows; this fixes Blood Shot sometimes allowing you to see part of a wall that's supposed to be behind you and then freezing (#679)
  • (GBA) Improved accuracy of IWRAM open bus emulation, based on the openbuster test ROM (#676)

v0.13.0

Choose a tag to compare

@jsgroth jsgroth released this 18 Jun 18:46

Now with cheat code support for Sega systems, support for the XE-1 AP analog controller for Genesis, and lots of smaller fixes and improvements.

This release includes preliminary support for emulating the PC Engine / TurboGrafx-16, although the CD-ROM add-on is not yet supported so a huge chunk of the library doesn't work yet. All HuCard-based games should work, barring potential bugs.

Save states are not compatible with previous versions.

Full changelog below:


New Features

  • Added support for the PC Engine / TurboGrafx-16
    • Only the base system is emulated right now; no CD-ROM or SuperGrafx support, or Turbo Tap / multiple gamepads
    • Options are fairly limited, but supports video options for palette, removing sprite-per-scanline limits, and whether to crop the overscan area
  • (Genesis / SMS / Game Gear) Added support for cheat codes (#136)
    • Genesis supports Game Genie codes, Pro Action Replay codes, and plain 68000 memory address/value pairs
    • SMS/GG supports Game Genie codes and Pro Action Replay codes
    • Cheats are also supported for Sega CD and 32X, though Sega CD only supports main working RAM overrides (memory addresses $FF0000-$FFFFFF)
  • (Genesis) Added support for the XE-1 AP analog controller (#631)
    • This is supported by about 10 official releases, including the After Burner games and Space Harrier
    • True analog control requires a gamepad with analog support (anything with an analog stick should work)
  • (Genesis) Added some additional debugging functionality
    • Added interrupt breakpoints for the 68000 and SH-2 CPUs
    • Added a new "VDP State" view that shows some internal VDP state that is normally not directly readable by software, e.g. timing information and current control port state
    • (32X) Added a new view that shows some SH7604 register contents including the cache control register, internal interrupt registers, the watchdog timer, and the DMA controller
    • The main 68000 disassembly view now shows any buffered memory writes that are done from the emulated CPU's perspective but have not yet been applied to memory for inter-processor timing reasons
  • All emulated systems now have an Input option for whether to allow simultaneous opposing gamepad directions (Left+Right or Up+Down); previously only NES did
    • Official gamepads do not allow these, so these options are all disabled by default (i.e. not allowed)
  • Input settings windows now have a "Configure all" button so that you can configure every input without needing to click on each one individually
  • Added support for the MMPX Enhanced/EX upscaling shader by CrashGG (#644)

Improvements

  • Slightly improved audio resampling performance on CPUs that support AVX2 and/or AVX512 instructions; this most notably affects GB/GBC and NES (and PC Engine)
    • The AVX2 and AVX512 code paths are gated behind runtime CPU feature checks (and those are gated behind compile-time arch checks), so the emulator will still run on CPUs that do not support any AVX instructions
  • (SMS) The VDP version setting now defaults to SMS2 instead of SMS1, because there seem to be more games that depend on the SMS2 behavior than SMS1 (#658 / #659)

Fixes

  • (Genesis) Fixed the VDP potentially using outdated V scroll values when a game makes mid-scanline VSRAM writes while the VDP is in per-2-cell V scroll mode; this fixes a glitchy line during the Two-Face boss fight in The Adventures of Batman & Robin (#653)
  • (Genesis) Adjusted VDP timing behavior when display changes from disabled to enabled while the VDP FIFO is not empty; this fixes a glitchy line in Mickey Mania's 3D chase stages (again) and fixes incorrectly visible CRAM dots in the left border (#654)
  • (Genesis) Bit 0 of $A11100 reads (Z80 BUSACK) is now open bus instead of duplicating bit 8; this fixes Time Killers failing to boot (#664)
  • (Genesis) Fixed the VDP incorrectly latching H scroll mode well before it reads each line's H scroll values; this fixes a glitchy line in Toy Story's racing stage (#655)
  • (Genesis) Fixed a degenerate timing edge case that could crash the emulator due to violating an assertion in the VDP code if the Z80 accessed ROM too rapidly in a short time; Micro Machines semi-randomly triggered this
  • (Genesis) Fixed various I/O port behaviors identified by test ROM, mostly related to ports that are only used by peripherals (#652)
  • (Genesis) Added some additional heuristics for when to enable the SSF bank-switching mapper, for homebrew games that don't have the SEGA SSF string in the cartridge header (#656)
  • (Genesis) Fixed some inaccuracies identified by test ROMs (#669)
    • Implemented MOVEM memory-to-register instructions performing an extra read at the end
    • The Z80 is no longer allowed to read from main working RAM
    • Fixed implementation of how the sprite attribute cache checks the full 17-bit VRAM address on VRAM writes (it was already trying to do this but not correctly)
    • Fixed transparent sprite pixels incorrectly being able to trigger the VDP sprite collision flag in some cases
  • (Genesis) Fixed some edge case handling in 6-button gamepad emulation
  • (SMS / Game Gear) Fixed the VDP frame interrupt flag potentially getting set twice in the same frame if the CPU read the VDP status register at the exact right/wrong time; this fixes Back to the Future Part III failing to boot (#657)
  • (SMS) Fixed the VDP version SMS1/SMS2 setting not always taking effect immediately when changed while a game is running
  • (SNES) Fixed ExHiROM SRAM bank mapping (was not ignoring A23); this fixes some homebrew and post-contemporary ExHiROM games not working properly
  • (GB) Fixed the PPU rendering white instead of BG color 0 when the PPU is enabled but the BG is disabled; this fixes screen flashing in Megami Tensei Gaiden: Last Bible and Last Bible II (GB versions) (#647)
  • (GB) Fixed serial port behavior to correctly emulate nothing being connected to the serial port; this fixes Boxing not allowing you to start a game in 1-player mode (#641)
    • (Previously the emulator was leaving the SB register unchanged instead of shifting in 1 bits on each serial clock)
  • (GBC) Fixed HDMA length behavior when HDMA5 is written mid-HDMA with bit 7 clear (by @aabalke)
  • Fixed the emulator failing to register key presses from keys for which SDL3 does not have a virtual key mapping, such as the ñ key on Spanish keyboards (#668)
  • Fixed the xBRZ 6x shader crashing the emulator if enabled for 32X while the Genesis VDP is in H32 mode and horizontal border rendering is enabled, which caused the upscaled texture size to exceed wgpu's default maximum size
    • The emulator now enables a higher maximum size if the graphics device supports it, and will also gracefully degrade instead of crashing if this still happens
  • In Linux AppImage builds, fixed the save path "Emulator folder" options saving to the current working directory instead of the folder containing the AppImage file (if those are different)

v0.12.1

Choose a tag to compare

@jsgroth jsgroth released this 13 May 15:00

Mostly-bugfix release for v0.12.0

This release fixes a regression in v0.12.0 that caused turbo input mappings to not work properly; in v0.12.0 they behaved the same as non-turbo mappings.

This release also includes changes to where the emulator stores its settings files on Windows. They are now generally stored in a user profile-level directory by default rather than in the emulator directory, so settings will be automatically shared between different copies of the emulator in different directories (it already worked this way on other platforms). It is possible to restore the old Windows behavior if desired, see the full changelog below.

Save states are not compatible with previous versions.

Full changelog:


Settings Changes

  • On Windows, the settings file is now stored in a user profile directory by default (generally C:\Users\$NAME\AppData\Local\jgenesis\); other platforms already behaved this way (e.g. generally $HOME/.config/jgenesis/ on Linux)
  • If you want to restore the old Windows behavior of storing the settings file in the emulator directory, there is a new option in Settings > Paths to switch the settings file location, or you can create a portable.txt file in the emulator directory (contents don't matter, the file just has to exist); this works on all platforms
  • The --config command line arg still exists and overrides all of this behavior if it is used

Improvements

  • The rewind buffer is now compressed in memory; this significantly decreases the emulator's RAM usage, particularly when emulating Sega CD or 32X
    • Exact savings will vary based on a lot of things, but with 32X for example I'm seeing that a 10-second rewind buffer now takes 40-80 MB of RAM instead of ~600 MB
    • Compression is performed asynchronously, so this should not impact emulator performance
  • Save states are now compressed and written to disk asynchronously, which makes it significantly less likely that saving state will cause the emulator to stutter

Fixes

  • Fixed turbo input mappings not working properly; this was a regression in v0.12.0
    • This was caused by the backend changes to support the Genesis debugging tools added in v0.12.0, which involved mostly rewriting the main emulator execution loop (among other things); the new version was missing the bit of code that makes turbo buttons alternate between pressed and not pressed
  • Fixed all settings reverting to defaults when a single setting fails to deserialize from the config file; now only the setting(s) that failed to deserialize will reset to default
  • (SNES) Cartridges that specify a nonsensically high amount of SRAM in the cartridge header now get 256 KB of SRAM instead of none (#635)
    • This seems to usually happen with prototype cartridges that don't have a proper cartridge header, where the "SRAM byte" is just part of a random chunk of code or data; some of these do require SRAM though

v0.12.0

Choose a tag to compare

@jsgroth jsgroth released this 28 Apr 01:25

Most of the changes from v0.11 are related to video filtering options for everything, and developer debug tools for Genesis and add-ons.

TV-based consoles now support an NTSC composite video filter that attempts to be much more authentic than the existing simple blur shaders, and all consoles now support xBRZ and MMPX upscaling filters. There are several other video shader/filtering changes noted below in the full changelog.

Genesis / Sega CD / 32X now support some basic CPU debugging tools in the form of disassembly views, CPU register views, read/write/execute breakpoints, and step-by-instruction. There are also new register views for the two Genesis sound chips and more information in the color palette views.

OpenGL is no longer supported as a graphics backend, only Vulkan and DirectX 12. Some of the new video filtering code uses graphics backend features that are not supported in OpenGL, and I decided to remove support rather than maintain an alternate code path solely for GL compatibility.

Save states are not compatible with previous versions for most systems.

Full changelog below:


New Features

  • Added an NTSC composite video shader (in Video > Filtering)
    • For video filtering reasons, this only works with the emulated systems that directly support TV video output and use 1 of 2 supported video clock rates (Genesis, SMS, SG-1000, NES, SNES)
    • For NES specifically, enabling this shader also makes the emulated NES PPU directly output an NTSC video signal instead of generating RGB pixels, which is much more accurate to how actual hardware generates video
  • Added some other video shader/filter options (#496)
    • xBRZ image upscaling filter by Zenju, with 2x through 6x upscaling options
    • MMPX pixel art magnification filter by Morgan McGuire & Mara Gagiu
    • The scanlines filter now supports multiple different brightness levels instead of only 50% (previously "Dim") and 0% (previously "Black")
    • Added a new option to render using supersampling when the display window is significantly smaller than the frame size (either natively or because of shaders), which reduces aliasing in some cases
    • The anti-dither heuristic filter is now a separate setting from the video shader, so you can enable it in combination with the xBRZ or MMPX upscaling filters
  • Added a new video option to rotate the frame in increments of 90°, meant for handheld games/demos that are designed around rotating the console (#169)
  • (Genesis) Lots of new debugging functionality within the Memory Viewer window:
    • Disassembly views for each emulated CPU, including the Sega CD sub CPU and 32X SH-2s when they are present
    • Current register values for each emulated CPU
    • Read/write/execute breakpoints for specific memory addresses and for address ranges; emulator execution halts mid-instruction when a breakpoint is hit
    • Interactive step-by-instruction for each emulated CPU
    • Added register/state viewers for the YM2612 and SN76489 sound chips
    • CRAM and 32X palette RAM viewers now show detailed information for colors by hovering over them, and you can click on a color to pin its state to a new side panel
  • (Sega CD) When running a multi-disc game, the GUI now attempts to auto-detect other discs and supports changing to any found disc in the Emulation > Change Disc menu
    • Note this is based purely on the filename containing "(Disc N)", and it will only search in the same directory as the loaded disc's CUE/CHD file
    • There is still a "Select file..." option if auto-detection fails to locate the other discs or if you want to change to a non-auto-detected disc

Improvements

  • Emulator backends can now see inputs updates at any time rather than only once per frame, which may slightly reduce input latency in some games depending on when they read inputs
    • Note this behavior is heavily affected by sync settings; VSync enabled and frame time sync enabled both cause most inputs updates to occur near the start of the vertical blanking period (fairly similar to previous behavior)
  • Horizontal blur shaders now blend colors in sRGB color space instead of linear color space
    • This is very wrong from an ideal image processing perspective, but it produces colors much closer to what show up on a TV over contemporary video cables (e.g. RF or composite)

Fixes

  • (Genesis) Many invalid memory address reads now return open bus instead of a hardcoded 0xFFFF value; this fixes Sonic 3D Blast: Director's Cut freezing when you enter a password that has the final stage unlocked (#630)
  • (Genesis / SMS / Game Gear) More accurate emulation of how the Z80's R register is updated during/after each instruction (some games read the R register as a source of pseudo-randomness)
  • (Sega CD) Fixed The Smurfs incorrectly being auto-detected as US/NTSC instead of EU/PAL (#624)
  • (NES) When the PPU is in greyscale mode, palette RAM reads through PPUDATA now always have the 4 hue bits masked out (#551)
  • (GBA) Fixed certain (officially) undefined ARM opcodes from crashing the emulator (#629)
  • On Windows, implemented a workaround for a color space bug that sometimes caused colors to be way too dark when using the Vulkan backend with an AMD GPU

Removed Features

  • The OpenGL wgpu backend option has been removed. The OpenGL backend lacks features compared to the Vulkan/DX12/WebGPU backends, and this started to cause problems while implementing the new shaders, so I removed it as an option

v0.11.4

Choose a tag to compare

@jsgroth jsgroth released this 23 Mar 23:33

Now with SG-1000 support!

SMS, Game Gear, and Sega CD save states are not compatible with earlier versions. Other systems should be compatible back to v0.11.2


New Features

  • Added support for SG-1000 emulation
  • (Sega CD) Added support for CD-ROM images that store audio tracks in WAV files, if the WAV contains 44100 Hz 16-bit stereo samples (same as CD-DA)
  • (Sega CD) Added support for CD-ROM images that store the data track in MODE1/2048 format (e.g. most CUE/ISO/WAV images)

Improvements

  • (NES) Slightly increased saturation in the default color palette and the palette generator (the previous behavior was due to a bug in NTSC-to-YUV conversion)
  • Sinc audio interpolation now uses much higher precision for the step between input samples during interpolation, which may slightly improve audio quality for the systems with higher internal sample rates (mainly GB/GBC and NES)

Fixes

  • (Sega CD) The CD-ROM image reading code no longer validates CD-ROM EDC sector checksums; this fixes some game hacks not working (e.g. the Vay random encounter reduction hack) (#614)
  • (GB) Fixed the MBC1 mapper code not correctly handling ROM banks where the lowest 5 bits are zero but the highest bits are non-zero (#615)
  • (GB) Fixed the MBC2 mapper code not correctly ignoring the highest 4 bits on reads/writes in all cases (#616)

v0.11.3

Choose a tag to compare

@jsgroth jsgroth released this 04 Mar 22:04

Another small bugfix release.

Save states are compatible with v0.11.2


Fixes

  • (Sega CD) Fixed the emulator failing to load CHD images that use zstd compression (#613)
  • (GBA) Fixed the OBJ window enabled bit in the DISPCNT register not doing anything beyond tripping the "is any window enabled" logic
  • (GBA) Fixed the sprite H mosaic implementation not correctly latching priority or the semi-transparency flag

v0.11.2

Choose a tag to compare

@jsgroth jsgroth released this 25 Feb 00:10

Mostly minor changes and a few GBA bugfixes

Save states are not compatible with previous versions


New Features

  • (Genesis) Added an anamorphic widescreen aspect ratio option that stretches the screen horizontally to a 16:9 screen aspect ratio (#605)
  • Added a new general video setting to change the wgpu power preference setting, which controls what graphics device the emulator uses if multiple are available (e.g. both a dedicated and integrated GPU) (#606)
    • (Previously this was hardcoded to always prefer a dedicated GPU if available)
  • The executable now supports a -v / --version command-line arg that prints the current version (#612)

Improvements

  • On Windows, the wgpu backend Auto setting now prefers DirectX 12 over Vulkan if both are available (#606)
    • This is to work around what seems like a bug in either wgpu or AMD's graphics drivers that can potentially cause incorrect colors when using the Vulkan backend on Windows with an AMD GPU

Fixes

  • (GB) Fixed initial value of the DMA register in CGB mode; this fixes graphical glitches in Doc Cosmos: The Saga Begins (#601)
  • (GBA) Fixed brightness increase/decrease effects incorrectly never applying to semi-transparent sprites; this fixes graphical glitches in Final Fantasy VI Advance and Mario vs. Donkey Kong (and probably other games) (#596 / #597)
  • (GBA) Fixed save memory type auto-detection incorrectly giving Iridion II SRAM, which caused the game to freeze during boss fights (#608)
  • (GBA) Adjusted initial PPU state when the "skip BIOS intro animation" option is enabled; this fixes the homebrew game Anguna failing to boot with that option enabled (#595)
  • (GBA) Fixed initial value of the VCOUNT match value in the DISPSTAT register; this fixes the homebrew demo CuteCube failing to boot (#598)
  • Fixed the Memory Viewer rendering code not respecting the wgpu backend setting

v0.11.1

Choose a tag to compare

@jsgroth jsgroth released this 04 Feb 14:59

Bugfix release for v0.11.0, fixes a major bug in the GBA audio interpolation feature:

  • (GBA) Fixed an audio filtering bug that caused loud buzzing noises in some games (e.g. Fire Emblem) when enhanced interpolation was enabled but the PSG low-pass filter was not enabled

Save states are compatible with v0.11.0

v0.11.0

Choose a tag to compare

@jsgroth jsgroth released this 02 Feb 23:11

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 at...
Read more

v0.10.1

Choose a tag to compare

@jsgroth jsgroth released this 17 Jun 15:11

Bugfix release

Only one functional change in this release, which fixes a regression introduced in v0.10.0:

  • (SNES) Corrected implementation of how Mode 7 clips scrolled center point coordinates; this fixes missing background graphics on some screens in Super Metroid (#426)
    • (The PPU does not simply clip to signed 10-bit or signed 11-bit like previous implementations did; it converts from signed 14-bit to signed 11-bit by dropping bits 10-12, combining the lowest 10 bits with the sign bit from the full 14-bit value)