1# 0.14.0 2 3## New Features 4* (**Genesis**) Sega CD 32X is now supported (Sega CD + 32X together) 5 * The emulator will automatically run in CD 32X mode if you load a Sega CD disc where the game header indicates 32X support, or you can open the File > Open Using menu and select Sega CD 32X 6* (**Genesis**) Sega CD "Mode 1" (boot from cartridge) is now supported, both with and without 32X 7 * If you load a Genesis or 32X cartridge where the game header indicates Sega CD support, the application will open a file dialog prompting for a path to the Sega CD disc image; if you cancel this out then it will run with no disc in the drive 8 * This behavior also works via File > Open Using > Sega CD (32X) as long you load the Genesis/32X cartridge first 9* (**Genesis**) Added support for the Mega Mouse controller, supported by a few dozen games across Genesis and Sega CD 10 * The emulator window will now capture mouse input if you click on it while either controller is configured to be a Mega Mouse; you can cancel this out using the Pause hotkey or the new "Cancel mouse input" hotkey (default O) 11* (**SNES**) Added support for the mouse controller (same note as above regarding mouse input) 12* (**PC Engine**) Added support for overclocking the CPU to 1.5x or 3x speed (#138) 13* Added an option to make the emulator window borderless in windowed mode (#698) 14 * Note that this is incompatible with mouse emulation and mouse input mappings due to how it makes the window draggable and resizable while borderless 15* Search directories for the game list can now be searched recursively (i.e. also search in subdirectories); you can configure this for each directory individually in Settings > Paths 16* Added a few additional command line arguments for use when running from a shell or launcher: 17 * `--no-gui` suppresses the GUI window and only opens the game specified with `-f` / `--file-path` 18 * `--hardware` allows you to explicitly specify an emulated system rather than relying on auto-detection 19 * `--config-override` allows you to override (most) individual settings without permanently modifying the settings file 20 21## Improvements 22* Input configuration now behaves the same way regardless of whether an emulator is running; no more "use the emulator window to configure input" 23* On Linux + Wayland, improved scaling behavior for the emulator and debugger windows on high DPI displays (they were very blurry before) 24* Audio buffer underruns should now produce slightly less awful noises, particularly for 32X (e.g. when fast forwarding at a higher rate than the emulator can manage) 25* The VSync Disabled option now falls back to functioning as Fast VSync (i.e. mailbox presentation) on platforms that don't support fully disabling VSync 26* In the debugger window, copy/paste is now integrated with the OS clipboard rather than only copying to / pasting from application memory 27* Reduced latency when launching a game and performing input configuration 28 29## Fixes 30* (**Genesis**) The Z80 and the YM2612 are now synchronized more closely; this fixes occasional audio crackling in _Battletoads_ when YM2612 busy flag emulation is enabled (which it is by default) 31* (**Genesis**) The YM2612 DAC channel is now initialized to the center sample value (128) instead of 0; this fixes erroneous audio pops in _Fantastic Dizzy_ 32* (**Genesis**) The logic to determine initial window size now takes into account whether horizontal/vertical border rendering is enabled, which prevents large vertical black bars in PAL mode with borders (#699) 33* (**Genesis**) When emulating the XE-1 AP controller, inputs are now latched when a data transfer begins so that analog axis values cannot potentially change between nibbles 34* (**Genesis**) Improved accuracy of CPU waitstate timings when the Z80 accesses the 68000 side of the bus 35* (**32X**) Fixed logic for how the 32X VDP determines whether Genesis VDP pixels are transparent (#688) 36* (**32X**) Fixed the emulator incorrectly rendering only the Genesis frame if the 32X VDP ended the frame in blank mode, even if it was not in blank mode for the entire frame (#692) 37* (**32X**) Fixed incorrect logic for how the 32X horizontal interrupt interval works (#686) 38* (**32X**) Fixed the VDP screen shift register incorrectly only applying in packed pixel mode (#693) 39* (**32X**) Added emulation for the hardware bug where the VDP screen shift register does nothing on lines where the low byte of the frame buffer line address is 0xFF 40* (**32X**) Fixed SH-2 DMA running _way_ too slow in some cases (this bug broke multiple CD 32X games) 41* (**32X**) Improved accuracy of VDP register latch timing and VDP interrupt timing (#686) 42* (**32X**) The SH-2s are no longer allowed to write to the cartridge (e.g. to store save data), since they cannot on actual hardware 43* (**32X**) The RV bit is now properly emulated (controls access to the cartridge between Genesis and 32X) 44* Fixed every system other than SNES and GBA crashing the application if you tried to load an empty or very small ROM file 45* Fixed entries in the File > Open Recent menu potentially loading a different game in the list if the list contained any paths to files that don't exist (or no longer exist) 46* Fixed CJK characters in game titles or cheat names displaying as empty boxes even if you have a CJK system font installed (#691) 47 * Loading CJK fonts _significantly_ increases the application's RAM usage (by roughly 150-200 MB), so they are only loaded if needed to display a CJK character 48* Fixed the "hide mouse cursor over emulator window" option also annoyingly applying to the debugger window 49 50## Removed Features 51* There is no longer a separate `jgenesis-cli` executable; the new single `jgenesis` executable (formerly `jgenesis-gui`) should now support all functionality that the CLI supported 52 53 54# 0.13.1 55 56## New Features 57* (**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) 58* (**PC Engine**) Added support for the Turbo Tap (i.e. multiple emulated gamepads, up to 5) 59* Holding the rewind and fast forward hotkeys together now rewinds at increased speed, based on the configured fast forward multiplier (#674) 60* Added a right click cut/copy/paste menu to the Cheats text edit box (#678) 61 62## Improvements 63* (**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 64 * 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 65* (**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_ 66* When mapping gamepad analog triggers to inputs, it should no longer be possible to accidentally map "trigger released" to anything (#674) 67 68## Fixes 69* (**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) 70* (**GBA**) Improved accuracy of IWRAM open bus emulation, based on the openbuster test ROM (#676) 71 72# 0.13.0 73 74## New Features 75* Added support for the PC Engine / TurboGrafx-16 76 * Only the base system is emulated right now; no CD-ROM or SuperGrafx support, or Turbo Tap / multiple gamepads 77 * Options are fairly limited, but supports video options for palette, removing sprite-per-scanline limits, and whether to crop the overscan area 78* (**Genesis** / **SMS** / **Game Gear**) Added support for cheat codes (#136) 79 * Genesis supports Game Genie codes, Pro Action Replay codes, and plain 68000 memory address/value pairs 80 * SMS/GG supports Game Genie codes and Pro Action Replay codes 81 * Cheats are also supported for Sega CD and 32X, though Sega CD only supports main working RAM overrides (memory addresses \$FF0000-\$FFFFFF) 82* (**Genesis**) Added support for the XE-1 AP analog controller (#631) 83 * This is supported by about 10 official releases, including the _After Burner_ games and _Space Harrier_ 84 * True analog control requires a gamepad with analog support (anything with an analog stick should work) 85* (**Genesis**) Added some additional debugging functionality 86 * Added interrupt breakpoints for the 68000 and SH-2 CPUs 87 * 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 88 * (**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 89 * 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 90* 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 91 * Official gamepads do not allow these, so these options are all disabled by default (i.e. not allowed) 92* Input settings windows now have a "Configure all" button so that you can configure every input without needing to click on each one individually 93* Added support for the MMPX Enhanced/EX upscaling shader by CrashGG (#644) 94 95## Improvements 96* 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) 97 * 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 98* (**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) 99 100## Fixes 101* (**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) 102* (**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) 103* (**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) 104* (**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) 105* (**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 106* (**Genesis**) Fixed various I/O port behaviors identified by test ROM, mostly related to ports that are only used by peripherals (#652) 107* (**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) 108* (**Genesis**) Fixed some inaccuracies identified by test ROMs (#669) 109 * Implemented MOVEM memory-to-register instructions performing an extra read at the end 110 * The Z80 is no longer allowed to read from main working RAM 111 * 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) 112 * Fixed transparent sprite pixels incorrectly being able to trigger the VDP sprite collision flag in some cases 113* (**Genesis**) Fixed some edge case handling in 6-button gamepad emulation 114* (**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) 115* (**SMS**) Fixed the VDP version SMS1/SMS2 setting not always taking effect immediately when changed while a game is running 116* (**SNES**) Fixed ExHiROM SRAM bank mapping (was not ignoring A23); this fixes some homebrew and post-contemporary ExHiROM games not working properly 117* (**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) 118* (**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) 119 * (Previously the emulator was leaving the SB register unchanged instead of shifting in 1 bits on each serial clock) 120* (**GBC**) Fixed HDMA length behavior when HDMA5 is written mid-HDMA with bit 7 clear 121* 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) 122* 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 123 * 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 124* 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) 125 126# 0.12.1 127 128## Settings Changes 129* 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) 130* 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 131* The --config command line arg still exists and overrides all of this behavior if it is used 132 133## Improvements 134* The rewind buffer is now compressed in memory; this significantly decreases the emulator's RAM usage, particularly when emulating Sega CD or 32X 135 * 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 136 * Compression is performed asynchronously, so this should not impact emulator performance 137* 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 138 139## Fixes 140* Fixed turbo input mappings not working properly; this was a regression in v0.12.0 141 * 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 142Fixed 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 143* (**SNES**) Cartridges that specify a nonsensically high amount of SRAM in the cartridge header now get 256 KB of SRAM instead of none (#635) 144 * 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 145 146 147# 0.12.0 148 149## New Features 150* Added an NTSC composite video shader (in Video > Filtering) 151 * 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) 152 * 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 153* Added some other video shader/filter options (#496) 154 * xBRZ image upscaling filter by Zenju, with 2x through 6x upscaling options 155 * MMPX pixel art magnification filter by Morgan McGuire & Mara Gagiu 156 * The scanlines filter now supports multiple different brightness levels instead of only 50% (previously "Dim") and 0% (previously "Black") 157 * 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 158 * 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 159* 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) 160* (**Genesis**) Lots of new debugging functionality within the Memory Viewer window: 161 * Disassembly views for each emulated CPU, including the Sega CD sub CPU and 32X SH-2s when they are present 162 * Current register values for each emulated CPU 163 * Read/write/execute breakpoints for specific memory addresses and for address ranges; emulator execution halts mid-instruction when a breakpoint is hit 164 * Interactive step-by-instruction for each emulated CPU 165 * Added register/state viewers for the YM2612 and SN76489 sound chips 166 * 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 167* (**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 168 * 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 169 * 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 170 171## Improvements 172* 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 173 * 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) 174* Horizontal blur shaders now blend colors in sRGB color space instead of linear color space 175 * 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) 176 177## Fixes 178* (**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) 179* (**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) 180* (**Sega CD**) Fixed _The Smurfs_ incorrectly being auto-detected as US/NTSC instead of EU/PAL (#624) 181* (**NES**) When the PPU is in greyscale mode, palette RAM reads through PPUDATA now always have the 4 hue bits masked out (#551) 182* (**GBA**) Fixed certain (officially) undefined ARM opcodes from crashing the emulator (#629) 183* 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 184 185## Removed Features 186* 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 187 188# 0.11.4 189 190## New Features 191* Added support for SG-1000 emulation 192* (**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) 193* (**Sega CD**) Added support for CD-ROM images that store the data track in MODE1/2048 format (e.g. most CUE/ISO/WAV images) 194 195## Improvements 196* (**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) 197* 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) 198 199## Fixes 200* (**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) 201* (**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) 202* (**GB**) Fixed the MBC2 mapper code not correctly ignoring the highest 4 bits on reads/writes in all cases (#616) 203 204# 0.11.3 205 206## Fixes 207* (**Sega CD**) Fixed the emulator failing to load CHD images that use zstd compression (#613) 208* (**GBA**) Fixed the OBJ window enabled bit in the DISPCNT register not doing anything beyond tripping the "is any window enabled" logic 209* (**GBA**) Fixed the sprite H mosaic implementation not correctly latching priority or the semi-transparency flag 210 211# 0.11.2 212 213## New Features 214* (**Genesis**) Added an anamorphic widescreen aspect ratio option that stretches the screen horizontally to a 16:9 screen aspect ratio (#605) 215* 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) 216 * (Previously this was hardcoded to always prefer a dedicated GPU if available) 217* The executable now supports a -v / --version command-line arg that prints the current version (#612) 218 219## Improvements 220* On Windows, the wgpu backend Auto setting now prefers DirectX 12 over Vulkan if both are available (#606) 221 * 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 222 223## Fixes 224* (**GB**) Fixed initial value of the DMA register in CGB mode; this fixes graphical glitches in _Doc Cosmos: The Saga Begins_ (#601) 225* (**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) 226* (**GBA**) Fixed save memory type auto-detection incorrectly giving _Iridion II_ SRAM, which caused the game to freeze during boss fights (#608) 227* (**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) 228* (**GBA**) Fixed initial value of the VCOUNT match value in the DISPSTAT register; this fixes the homebrew demo CuteCube failing to boot (#598) 229* Fixed the Memory Viewer rendering code not respecting the wgpu backend setting 230 231# 0.11.1 232 233## Fixes 234* (**GBA**) Fixed an audio filtering bug in the audio interpolation feature 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 235 236# 0.11.0 237 238## Game Boy Advance 239* Game Boy Advance emulation is now supported; requires a Game Boy Advance BIOS ROM 240* Video options for color correction and LCD ghosting emulation (frame blending), both enabled by default 241* Audio enhancement option to apply enhanced interpolation to the Direct Sound channels rather than accurately emulating actual hardware's resampling behavior 242 * 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) 243* CPU/prefetch/DMA/etc. timing is not perfect but should be moderately accurate 244* All types of cartridge save memory supported, with an option to force a specific type if auto-detection gets it wrong 245* 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 246 247## New Features 248* (**Genesis**) Added an option to ignore configured aspect ratio and display square pixels when the VDP is in H40/H320px mode (#442) 249* (**Genesis**) Added support for games with 24C64 EEPROM chips; _College Slam_ and _Frank Thomas Big Hurt Baseball_ are now playable (#459) 250* (**Genesis**) New audio option to enable/disable individual YM2612 audio channels 251* (**Genesis**) New audio option to adjust volume of individual sound sources 252* (**Genesis**) Added some additional memory/register views to the Memory Viewer window 253* (**Sega CD**) Added support for per-region BIOS configuration, where the emulator will automatically select the appropriate BIOS based on game region 254* (**32X**) Added two new color display options (#492) 255 * 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 256 * New option to apply a yellow or purple tint to 32X colors, roughly as observed on actual hardware 257* (**32X**) Added an option to overclock the SH-2s; this is extremely CPU-intensive but can reduce slowdown in some games 258* (**32X**) Added options to hide all pixels of a given priority (#494) 259* (**NES**) Added palette customization options (#424) 260 * Can now load a custom palette from a file; both 64-color and full 512-color palette files supported 261 * GUI now has a builtin NTSC palette generator with a graphic displaying the current palette 262* (**SNES**) Added support for the ST018 coprocessor, used by _Hayazashi Nidan Morita Shougi 2_ 263 * This is emulated using an ARM7TDMI implementation (ARMv4T) rather than an ARM6 (ARMv3), but this should not make any functional difference 264* (**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) 265* (**GB**) When color correction is enabled, you can now manually adjust the LCD gamma value used for gamma correction 266* (**GB**) Added support for booting from a boot ROM (#404) 267* (**GB**) Added an option to run original Game Boy software in Game Boy Color mode (#150) 268 * 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 269* (**GB**) Added (proper) support for the MBC30 mapper, used by the Japanese version of _Pocket Monsters Crystal Version_ (#478) 270* (**GB**) Added support for unlicensed/homebrew games with an SRAM size byte of \$01 (2 KB) (#485) 271* (**Game Gear**) Added a frame blending option that simulates LCD ghosting, currently disabled by default 272* (**Game Gear**) Added support for booting from a BIOS / boot ROM (#404) 273* Added turbo button support for face and shoulder buttons on all emulated systems (#554) 274* Added options to automatically pause the emulator when in the background (#585) 275 276## Improvements 277* Upgraded [SDL](https://www.libsdl.org/) 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 278 * 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) 279* 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) 280 * Auto-prescale is also now enabled by default (the previous default was a fixed 3x upscale factor) 281* (**32X**) Improved quality of PWM chip audio resampling 282 * 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) 283* (**SNES**) When using the Super Scope, the emulator now displays the new Super Scope Turbo state whenever you toggle Turbo on/off 284* (**GB**) Audio is now sampled internally at 2 MHz rather than 1 MHz, which should reduce audio aliasing from the wavetable channel 285 286## General Fixes 287* 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 288 * (**Genesis**) Loading a ROM file smaller than 1 KB or so (#434) 289 * (**Genesis**) Z80 tries to access its own memory through the 32KB 68K memory bank by mapping it to \$A00000-\$A07FFF or \$A08000-\$A0FFFF 290 * (**Genesis**) VRAM-to-VRAM copy DMA with source address higher than \$1FFFF 291 * (**Genesis**) 68000 triggers a privilege violation exception 292 * (**Genesis**) 68000 triggers an address error while handling an exception 293 * (**32X**) One of the SH-2s executes a SLEEP instruction (#431) 294 * (**32X**) One of the SH-2s executes an illegal opcode 295 * (**32X**) One of the SH-2s tries to access certain invalid memory addresses (highest 3 bits set to 100 or 101) 296 * (**32X**) 68000 performs a 16-bit read from certain invalid memory addresses 297 * (**SMS** / **Game Gear** / **Genesis**) Z80 handles an IRQ while in interrupt mode 2 298 * (**SNES**) Loading a ROM file smaller than 32 KB (#538) 299 * (**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) 300 * (**SNES**) SA-1 Character Conversion DMA Type 1 with an I-RAM destination address higher than \$7FF 301 * (**GB**) CPU executes a STOP instruction with no CGB speed switch armed (#465) 302* Fixed changes to the save path and save state path options not applying immediately if changed while an emulator is running 303* Fixed the UI theme option not applying to the Memory Viewer window 304 305## Genesis / Sega CD / 32X Fixes 306* 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) 307* Fixed the 6-button controller timeout period being a little too short (#445) 308* Fixed two games failing to boot due to the emulator not giving them the correct type of cartridge save memory 309 * _Honoo no Toukyuuji: Dodge Danpei_ has a 24C01 EEPROM chip (#460) 310 * _Al Michaels Announces HardBall III_ has 32 KB of SRAM (#546) 311* Slightly adjusted memory refresh delay timing when the main CPU is executing out of RAM; this fixes incorrectly visible CRAM dots in _Snatcher_ 312* (**Sega CD**) Fixed implementation of VDP DMA reads from word RAM being delayed; this fixes glitchy background graphics in _Snatcher_ (again) 313 * This was a regression that affected v0.10.0 and v0.10.1; it was broken by VDP DMA changes in v0.10.0 314* (**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) 315 * This was also a regression that affected v0.10.0 and v0.10.1 316* (**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) 317* (**32X**) Fixed some inaccuracies around VDP register latching; this fixes some early 32X demos not working properly (#430) 318* (**32X**) Fixed some PWM resampling bugs that sometimes caused erroneous pops in PWM audio output 319* (**32X**) Slightly improved SH-2 timing accuracy, particularly around 32-bit SDRAM writes being way too slow (#493) 320* (**32X**) Fixed 32X HINT counter behavior not matching Genesis HINT behavior, which caused SH-2 horizontal interrupts to be off by a line (#559) 321* (**32X**) Fixed 32X VDP per-line events (HBlank, line render) triggering slightly too early in the line 322* Several timing fixes that fix graphical bugs in the Chaekopon demo by Limp Ninja (#435) 323 * Adjusted low-level sprite processing timings so that sprite attribute fetching is performed slightly earlier in the line 324 * 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 325* Fixed a number of inaccuracies identified by the testpico test ROM (#482) 326 * 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 327 * Fixed the Genesis VDP's F flag starting to read 1 (VINT pending) slightly later than it's supposed to 328 * (**32X**) Fixed behaviors related to enabling/disabling/clearing SH-2 VINT during VBlank 329 * (**32X**) Fixed some register bits being incorrectly writable / not writable 330 * (**32X**) Updates to initial state at power-on to more closely match actual hardware 331 332## NES Fixes 333* Very slightly adjusted sprite 0 hit timing; this fixes glitchy lines on the title screen of _Indiana Jones and the Last Crusade_ (#314) 334* DMC DMA timing is now emulated; this fixes screen jitter in _Ultimate Air Combat_ (#268) 335* Fixed non-power-of-two CHR ROM sizes not working correctly (#573) 336* Several fixes for inaccuracies identified by the AccuracyCoin test ROM (#551) 337 * 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 338 * More accurate APU frame counter timing 339 * More accurate OAM DMA timing 340 * DMA dummy reads are now emulated (with a new option to disable dummy controller port reads because they cause input glitches in some games) 341 * CPU open bus is now properly emulated (it was previously faked by always returning the address high byte) 342 * More accurate PPU open bus emulation 343 * Most PPU registers are no longer writable immediately after reset 344 * Fixed the 6502 incorrectly polling the interrupt lines during the final cycle of BRK instructions and IRQ handling 345 * More accurate controller port behaviors around strobing and consecutive-cycle reads 346 347## SNES Fixes 348* 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) 349* 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) 350* 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) 351* Improved DMA timing accuracy; this fixes graphical glitches in _Circuit USA_ (#531) 352* 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) 353* Fixed some revisions of _Tintin in Tibet_ incorrectly defaulting to NTSC timings instead of PAL (#539) 354* 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) 355* 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) 356* Implemented multiplication/division timing; this fixes some old homebrew that accidentally depends on reading intermediate division results (#576) 357 358## Game Boy [Color] Fixes 359* 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 360* Slightly adjusted timing of when the STAT LY=LYC bit reads 1; this fixes a glitchy line in _Elevator Action_ (#472) 361* The serial port transfer data register (SB / \$FF01) is now read/write; this fixes _Card Game_ not allowing you to start the game (#471) 362* Fixed sample output behavior of pulse and wavetable channels when the DAC is enabled but the channel is inactive 363* 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) 364* Fixed VRAM DMA incorrectly terminating prematurely when the destination address increments from \$9FFF to \$A000; this fixes freezing in _F1 Championship Season 2000_ (#464) 365* 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) 366* HDMA is now able to halt the CPU mid-instruction; this fixes occasional glitchy frames in _Toy Story Racer_ 367 368# 0.10.1 369 370## Fixes 371* (**SNES**) Corrected implementation of how Mode 7 clips scrolled center point coordinates; this fixes missing background graphics on some screens in _Super Metroid_ (#426) 372 373# 0.10.0 374 375## New Features 376* (**Genesis**) CRAM dots are now emulated 377 * These are normally not visible within active display because it's uncommon to modify CRAM while the VDP is actively rendering, but they're visible in many games if vertical border rendering is enabled 378* (**Genesis** / **Sega CD**) Audio low-pass filter cutoff frequencies are now configurable 379* (**Genesis**) New option to apply a second-order low-pass filter only to YM2612 audio output, which should be similar to the audio circuitry in later Model 2 consoles (when used in combination with a first-order filter applied to all audio output) 380* (**Genesis**) Added an aspect ratio "Auto" option (now default) that will function as either NTSC (8:7 / 32:35 PAR) or PAL (11:8 / 11:10 PAR) based on the current timing mode 381* (**Genesis**) Added an option for whether to emulate YM2612 or YM3438 busy flag behavior, which affects audio in a few games (e.g. _Earthworm Jim_ and _Hellfire_) 382 * There is also an Always 0 option that is less accurate to hardware but produces the "correct" behavior for both of these games 383* (**SMS** / **Game Gear**) Added a hardware region "Auto" setting that attempts to auto-detect region from the cartridge header (#214) 384* (**SMS**) Added the option to boot from a BIOS rather than booting directly into the game 385* (**SMS** / **Sega CD**) Added the ability to boot directly into the BIOS with no cartridge/disc inserted 386* (**NES**) Added an option to disable vertical overscan cropping in NTSC mode (i.e. display in 256x240 instead of 256x224) 387* Added an audio option to mute all emulator audio output (#248) 388* Added an option to configure the initial window size when not running in fullscreen (#409) 389* GUI: Added a new File menu button and hotkey to quickly open the most recently opened ROM file (#248) 390 391## Multi-System Fixes 392* Fixed the emulator not reading gamepad inputs while the window does not have focus (#248) 393* Fixed the GUI sometimes segfaulting when you close the main GUI window while an emulator is running 394* The GUI window now remembers its size when the application is closed and reopened 395* Initial window size now takes aspect ratio into account 396 397## Genesis / Mega Drive Fixes 398* Improved both behavioral accuracy and timing accuracy of VDP ports, VDP DMA, and the VDP FIFO; this fixes a number of bugs 399 * Fixes _Clue_ sometimes having corrupted main menu graphics (#159) 400 * Fixes _Gaiares_ having flickering text on the title screen 401 * The emulator now fully passes the VDPFIFOTesting test ROM (#103) 402 * Fixes incorrect color palettes in some demos (#183) 403 * Fixes a glitch on the title screen of the homebrew _Rick Dangerous 2_ port (#102) 404* Significantly improved performance due primarily to optimizations related to the YM2612 code 405* Lots of mostly minor fixes to YM2612 sound chip emulation 406 * Fixed multiple timing precision bugs with the LFO and hardware timers 407 * Fixed vibrato / LFO FM calculations incorrectly using 11-bit precision instead of 12-bit 408 * Fixed vibrato incorrectly affecting how detune computes key code 409 * Fixed the accurate quantization option incorrectly quantizing channel outputs instead of carrier outputs 410 * More accurate emulation of DAC crossover distortion (ladder effect) 411 * Added emulation for operator evaluation pipelining in channel output calculations 412 * Fixed the DAC channel not respecting the channel 6 panning bits 413* Fixed a Z80 timing bug caused by a VDP DMA "optimization" introduced in v0.8.2; this fixes video/audio desync in Overdrive 2 414* Fixed behavior when the controller port TH pin is set to input; this fixes controls not working properly in _Micro Machines_ (#226) 415* Improved display behavior when games switch between H32 and H40 modes shortly after the start of VBlank; this fixes glitchy frames in _Bugs Bunny in Double Trouble_ (#252) 416* Fixed the window nametable address not being masked correctly in H40 mode; this fixes glitchy graphics on some screens in _Cheese Cat-Astrophe Starring Speedy Gonzales_ (#253) 417* Added a 1-instruction delay to handling HINT if a game enables HINTs while an HINT is pending; this fixes _Fatal Rewind_ / _The Killing Game Show_ failing to boot (#254) 418* Added a 1 CPU cycle delay on every 68000 access to the Z80 side of the bus; this fixes broken audio in _Pac-Man 2: The New Adventures_ (#255) 419* Fixed several major bugs in how the V counter and the VBlank status flag are emulated in interlaced modes; this fixes _Combat Cars_ freezing in 2P mode as well as occasional sprite glitches in _Sonic the Hedgehog 2_'s Vs. mode (#258) 420* Fixed the Z80 RESET line not resetting the YM2612 in addition to the Z80; this fixes audio glitches in _Fantastic Dizzy_ (#397) 421* Fixed the emulator not correctly initializing cartridge SRAM when the cartridge header specifies less common RAM types; this fixes the Mega Drive Mode 7 demo not working (#250) 422* Fixed the interlaced ODD flag in the VDP status register not toggling correctly in single-screen interlaced mode if deinterlacing is enabled (#354) 423* Fixed a number of European games with bad region headers defaulting to NTSC mode instead of PAL (#176 / #394) 424* The 68000 interrupt handler now takes 54 CPU cycles instead of 44; this is more accurate and fixes a minor glitch in Overdrive (#419) 425* Fixed the emulator crashing if a game reads from Z80 $7F0C-$7F0F or writes to Z80 $7F08-$7F0F 426* When horizontal border rendering is enabled, fixed the right border rendering as the wrong color if the backdrop color is changed between lines (Overdrive 1 does this on some screens) 427* The non-linear VDP color scale option is now enabled by default because it is more accurate to actual hardware's video output (#249) 428 429## Sega CD Fixes 430* Fixed the CDD reset register (\$FF8001) not correctly resetting CDD state; this fixes the _Pier Solar_ enhanced audio disc failing to boot in SCD Mode 2 (#215) 431* Fixed the CUE parser being too strict around parsing leading whitespace on lines (#418) 432* Fixed some bugs related to changing discs while a game is running (particularly when using a Model 1 BIOS) 433* Implemented more accurate memory mirroring in sub CPU memory map; this fixes excessive error logging in _WWF: Rage in the Cage_ (#216) 434 435## 32X Fixes 436* Fixed the Genesis VDP and 32X VDP frames incorrectly lining up exactly when the Genesis VDP is in H32 mode; this fixes some minor graphical issues in _NFL Quarterback Club_ (#230) 437* Files with .bin extensions are now auto-detected as 32X instead of Genesis if they contain the 32X security program at the expected location in ROM (#259) 438* Horizontal blur shaders now scale the effect properly when the Genesis VDP is in H32 mode 439* The "apply Genesis low-pass filter to PWM" setting is now on by default because that seems to be more accurate to actual hardware's audio circuitry 440* Fixed initial window size being slightly too small to fit integer-height-scaled output when the Genesis VDP is in H32 mode (#420) 441 442## Master System / Game Gear Fixes 443* Somewhat improved VDP-related timings; this fixes glitchy cutscene graphics in _Madou Monogatari I_ (#213) and fixes most tests in the SMSVDPTest test ROM (#190) 444* (**SMS**) Fixed sprites never displaying on the topmost line of active display 445* (**SMS**) Fixed the "crop vertical borders" setting incorrectly cropping the top 16 lines and bottom 16 lines in 224-line mode 446* (**Game Gear**) The region bit in I/O port \$00 now properly reflects the hardware region instead of being hardcoded to 1; this fixes the Start button not working on the title screen of _Pop Breaker_ (#214) 447* (**Game Gear**) Fixed the viewport Y offset being 16 lines off in 224-line mode; this fixes glitchy graphics in _Micro Machines_ (#221) 448* (**Game Gear**) I/O port \$01 is now read/write; this fixes _Primal Rage_ freezing at the title screen (#220) 449 450## NES Fixes 451* Improved accuracy of Namco 163 expansion audio emulation (used by _Megami Tensei II_ among other games) 452* Cartridge PRG RAM is now initialized to all 1s instead of all 0s; this fixes _Famicom Jump II_ crashing on first boot (#280) 453* CNROM cartridges (iNES mapper 3) are now allowed to have PRG RAM; this fixes _Hayauchi Super Igo_ effectively freezing upon starting a game (#273) 454* Fixed MMC5 PRG RAM bank mapping in MMC5 cartridges that have two 8KB RAM chips; this fixes _Uncharted Waters_ being completely broken upon starting a game (#275) 455* Added support for NROM cartridges (iNES mapper 0) with only 8KB of PRG ROM; this fixes _Galaxian_ failing to boot (#261) 456* Fixed a VRC4 mapper bug where the highest bit of the 9-bit CHR ROM bank number was not working correctly; this fixes corrupted graphics in _World Hero_ (#283) 457* Fixed the DMC sample address incorrectly defaulting to \$8000 at power-on instead of \$C000 (#292) 458* PPU palette RAM is now initialized to the palette in the power\_up\_palette test ROM instead of all 0s 459* Fixed iNES header parsing reading the wrong byte when checking for the PAL bit; this fixes the _Populous_ prototype incorrectly defaulting to NTSC instead of PAL (#391) 460* OAMADDR is now reset to 0 on every line during rendering; this fixes _Ghostbusters II_ freezing after the title screen (#421) 461 462## SNES Fixes 463* Fixed incorrect cartridge SRAM mapping for LoROM cartridges with more than 32 KB of SRAM; this fixes _Kaite Tsukutte Asoberu Dezaemon_ failing to boot (#234) 464* Fixed Mode 7 incorrectly clipping the scrolled center point to signed 11-bit rather than signed 10-bit; this fixes glitched Mode 7 graphics in _Kaite Tsukutte Asoberu Dezaemon_ 465* Fixed incorrect emulation of interactions between offset-per-tile modes and BG1/BG2 horizontal scrolling; this fixes glitchy graphics in some stages in _The Adventures of Batman & Robin_ (#246) 466* WRAM contents are now randomized at power-on; this fixes major bugs in _Power Drive_ and the European version of _PGA Tour Golf_ (#188 / #235) 467* Cartridge SRAM is now initialized to all 1s instead of all 0s; this fixes _Ken Griffey Jr. Presents Major League Baseball_ crashing when you select Season mode (#231) 468* Fixed incorrect mapping of the DSP-1 port mirrors in LoROM cartridges; this fixes the DSP-1 tech demo prototype not working properly (#233) 469* Fixed some revisions of _Dungeon Master_ being incorrectly detected as DSP-1 instead of DSP-2 470 471## Game Boy [Color] Fixes 472* The MBC5 ROM bank is now initialized to 1 instead of 0; this fixes _Project S-11_ failing to boot (#410) 473* Cartridge SRAM is now initialized to all 1s instead of all 0s 474 475# v0.9.0 476 477## New Features 478* (**Genesis** / **Sega CD** / **32X**) Replaced the low-pass filtering settings added in v0.8.3 with a new set of options that should be more accurate to actual hardware 479 * New option to apply a first-order 3.39 KHz low-pass filter to Genesis audio output; this is **ON** by default (biggest change from previous default settings) 480 * New option to apply a second-order 7.97 KHz low-pass filter to Sega CD PCM audio output; this is **ON** by default 481 * New options to individually configure whether the Genesis low-pass filter is applied to Sega CD and 32X audio output; these are all **OFF** by default 482* (**Genesis** / **SNES**) Added a new video setting to disable deinterlacing in the handful of games that use interlaced display modes (e.g. _Sonic the Hedgehog 2_ in 2P Vs. mode, _Ys III_ (Genesis) with the in-game "Int Mode" option enabled, _Air Strike Patrol_ in mission briefing screens) 483 * Deinterlacing enabled matches the behavior in previous versions: normal-resolution interlaced modes display the same as progressive mode, and high-res interlaced modes make the graphics processor render all 448/480 lines every frame 484* (**Sega CD**) Added an option to overclock the sub CPU by decreasing the master clock divider (#138) 485* (**Sega CD**) Added an option to increase the disc drive speed when reading data tracks (#138) 486 * This has low compatibility but can shorten loading times in some games. Compatibility is _slightly_ higher when the sub CPU is overclocked 487* (**Sega CD**) Added an additional PCM chip interpolation option for 6-point cubic Hermite interpolation, which in some cases produces a slightly cleaner sound than 4-point cubic Hermite (the existing setting) 488* Added a new hotkey to quickly toggle whether overclocking settings are enabled, for the systems that support overclocking (this includes Sega CD's new drive speed setting) 489 * This is mainly useful for Sega CD, where increasing the drive speed can shorten loading times during gameplay but almost always breaks FMVs and animated cutscenes 490 491## Improvements 492* Audio resampling code has been rewritten to use the windowed sinc interpolation algorithm, which is much higher quality than the previous resampling implementation at a relatively low performance cost (for most emulated systems) 493 * Windowed sinc interpolation can be very performance-intensive for NES and GB/GBC audio resampling, so these two systems have a new audio setting to choose between windowed sinc interpolation and the old resampling algorithm (low-pass filter followed by nearest neighbor interpolation) 494* (**Genesis**) Slightly improved performance by optimizing VDP rendering and tile fetching code 495* (**Genesis**) Frontends now recognize .gen and .smd as file extensions for Genesis / Mega Drive ROM images (#149) 496 * This includes attempting to auto-detect when a ROM image is interleaved (common for .smd files), and deinterleaving it during load 497* (**SMS**) The "crop vertical borders" video setting now defaults to enabled instead of disabled; unlike the left border, the vertical borders will only ever show the current backdrop color 498* (**SMS**) The SMS model setting now defaults to SMS1, which emulates a VDP hardware quirk that is required for the Japanese version of _Ys_ to render correctly (#182) 499* (**SMS** / **Game Gear**) Reduced log level of a warning message that caused excessively verbose log output in _Virtua Fighter Mini_ (#199) 500* (**SNES**) In games that use the SA-1 coprocessor, the SA-1 CPU now gets a wait cycle every time it accesses SA-1 BW-RAM, similar to actual hardware 501 * The SA-1 CPU still runs faster than actual hardware in some cases because bus conflict wait cycles are not emulated 502* GUI: When opening a game that requires a BIOS ROM or firmware ROM (e.g. any Sega CD game), if the BIOS/firmware ROM path is not configured, the error window now contains a button to configure the appropriate ROM path and immediately launch the game 503* CLI: If no config file exists, the CLI will now attempt to write out the default config to the config path so that it can be edited manually if desired 504* Save state files are now internally compressed using zstd which should reduce save state file size by at least 50%, often by 70-80% 505* Frontends should now correctly handle files with uppercase file extensions 506 507## Multi-System Fixes 508* Fixed a performance bug in the audio resampling code that could have caused intermittent extremely poor performance due to performing arithmetic on subnormal floating-point numbers, which can be up to 100 times slower than normal floating-point arithmetic on some CPUs (#135) 509* Linux: AppImage builds now exclude all Wayland-related system libraries during packaging; this fixes the emulator failing to launch in some distros, e.g. Solus Plasma (#143) 510* Linux: AppImage builds now interpret relative paths in command-line arguments as being relative to the original working directory where the AppImage was launched from, not the AppImage internal runner directory (#147) 511* Linux/BSD CLI: For these platforms only and for the CLI only, reverted the change to estimate window scale factor because `SDL_GetDisplayDPI` does not return reliable values on Linux/BSD 512* Adjusted frame time sync's sleep implementation to fix frame time sync potentially causing slowdown on some platforms 513* Save state files are now explicitly versioned, which fixes potential crashing when attempting to load an incompatible save state file from a different version 514 515## Genesis / Mega Drive Fixes 516* Fixed the 68000 incorrectly being allowed to access audio RAM while the Z80 is on the bus; this fixes freezing in _Joe & Mac_ (#144) 517* Fixed Z80 RESET not clearing the Z80's HALT status 518* Fixed writes to YM2612 F-num high / block registers (\$A4-\$A6 and \$AC-\$AE) taking effect immediately instead of after the next F-num low register write; this fixes some music glitches in _Valis_ 519* Implemented more accurate emulation of how the YM2612 computes operator amplitude from phase and envelope attenuation 520* Fixed in-game saves not working correctly when _Sonic & Knuckles_ is locked on to a cartridge with SRAM (e.g. Sonic 3) 521* Fixed certain revisions of _QuackShot_ not loading correctly due to having non-standard cartridge ROM address mappings (#174) 522* Fixed some illegal 68000 opcodes incorrectly decoding to "valid" instructions (#184 / #185) 523* Fixed an edge case related to how sprite tile/pixel overflow interacts with H=0 sprite masking (#186) 524 525## Sega CD Fixes 526* Implemented a higher minimum seek time for small seek distances; this fixes _Thunder Storm FX_ (JP) failing to boot (#178) 527* Fixed a regression introduced in v0.8.3 that caused PCM chip channels to skip the first sample after being enabled (this made little-to-no audible difference in practice because the first sample is usually 0) 528* Fixed slightly inaccurate emulation of PCM chip looping behavior at sample rates higher than 0x0800 / 32552 Hz 529* Fixed inaccurate emulation of CD-DA fader volumes 1-3 out of 1024 (should be 50-60 dB of attenuation instead of complete silence) 530* Unmapped/unknown address accesses will now log an error instead of crashing the emulator 531 532## 32X Fixes 533* Fixed a major bug in the PWM resampling code that caused PWM audio output to sound significantly more poppy and crackly than it's supposed to 534* Fixed a bug around synchronizing SH-2 accesses to 32X communication ports that could have caused writes to be skipped in some cases; this fixes freezing in the _Sonic Robo Blast 32X_ demo (#160) 535* Significantly improved timing of 32X VDP interrupts for the SH-2s (#166) 536* Significantly improved synchronization between the SH-2s and the 68000 537* Fixed PWM DMA transfer rate via DREQ1 not taking the PWM timer interval into account; this fixes broken sound effects in _BC Racers_ (#179) 538 539## Master System / Game Gear Fixes 540* Fixed the Z80's RETI instruction not correctly copying IFF2 to IFF1 like RETN does; this fixes _Desert Strike_ from freezing when you press Start/Pause (#181) 541* Fixed incorrect handling of non-power-of-two ROM sizes, which fixes several homebrew games and demos (#201 / #203 / #204) 542* (**Game Gear**) Fixed the emulator crashing if a game enables the VDP's 224-line mode, as the homebrew _GG Turrican_ does (#202) 543 544## SNES Fixes 545* Implemented more accurate clipping and truncation in Mode 7 intermediate calculations; this fixes glitched Mode 7 graphics in _Tiny Toon Adventures: Wacky Sports Challenge_ (#161) 546* Mode 7 registers are now latched about 12 pixels before line rendering begins; this fixes a glitchy line near the bottom of the play area in _Battle Clash_, where the screen transitions from Mode 1 to Mode 7 547* Implemented an obscure behavior regarding the effects of writing to OAM during active display; this fixes incorrect sprite display in _Uniracers_' Vs. mode (#164) 548* Made a best effort at implementing the effects on sprites of toggling forced blanking during active display; this mostly fixes some test ROMs that exercise this (#162) 549* Adjusted behavior of APU communication ports when the 65816 writes to a port on the same cycle that the SPC700 clears the port; this fixes _Kishin Douji Zenki: Tenchi Meidou_ failing to boot (#187) 550 551## Game Boy [Color] Fixes 552* Implemented an obscure behavior where pulse channels should output a constant 0 after power-on until after the first phase increment; this fixes missing voice samples in _Daiku no Gen-san - Robot Teikoku no Yabou_ (#151) 553* Fixed a bug related to the pulse channel phase counter reloading on the same cycle as a frequency change via NR13/NR14/NR23/NR24; this combined with the above change fixes missing voice samples in _Keitai Denjuu Telefang_ (#47) 554* Added emulation for a hardware quirk where the Mode 2 STAT interrupt appears to trigger 145 times per frame, not 144; this fixes [GBVideoPlayer](https://github.com/LIJI32/GBVideoPlayer) (#155) 555* CGB palette RAM auto-increment flags now default to 1 (#156) 556* Slightly adjusted timings related to powering on the PPU; this combined with the above change fixes [GBVideoPlayer2](https://github.com/LIJI32/GBVideoPlayer2) (#156) 557* Fixed an edge case where LYC writes at the beginning of a line were not triggering the LY=LYC STAT interrupt under certain conditions; this fixes glitchy graphics on the title screen of the _SQRKZ_ homebrew (#154) 558* The contents of OBJ palette RAM are now randomized at power-on (#152) 559 560# v0.8.3 561 562## New Features 563* (**Genesis / Sega CD / 32X**) Added an audio setting to select 1 of 4 different audio low-pass filters, with cutoff frequencies ranging from about 15000 Hz (comparable to the existing filter) to about 5000 Hz (produces a very soft sound) 564* (**Genesis / Sega CD / 32X**) Added a video setting to enable/disable individual graphics layers 565* (**Sega CD**) Added an audio enhancement setting to apply linear interpolation or cubic Hermite interpolation to PCM sound chip channels; this _significantly_ reduces audio noise and audio aliasing in games that play music or voice acting through the PCM chip (e.g. _Lunar: Eternal Blue_ all the time, _Sonic CD_ in past stages, basically every FMV game for cutscene audio) 566* (**GB**) Added an option to use a custom 4-color palette, with a color picker UI for configuring the custom palette colors 567* Added a new hotkey that completely exits the application (#140) 568 * The previous "quit" hotkey (which only closed the currently running game) has been renamed to "power off" 569 570## Improvements 571* (**32X**) PWM chip audio output resampling now uses cubic interpolation rather than a filter that assumed a source frequency of 22 KHz; this should improve audio quality in games that use PWM sample rates other than 22 KHz (e.g. _After Burner Complete_ and _Space Harrier_) 572* Input mappings that use modifier keys (Shift / Ctrl / Alt) no longer distinguish between Left and Right versions of the modifier, e.g. Left Shift and Right Shift are now both treated as simply "Shift" for input mapping purposes (#139) 573* Redesigned most of the audio low-pass filters to explicitly target a cutoff frequency of about 15000 Hz with a stopband edge frequency of about 20000 Hz, which should further reduce resampling-related audio aliasing 574 * For performance reasons, NES and GB/GBC instead target a cutoff frequency of roughly 10000 Hz with a less steep attenuation slope past the cutoff frequency 575* Implemented a performance optimization in how audio low-pass filters are applied when running on CPUs that support x86_64 AVX and FMA instructions (which is almost every x86_64 CPU made in the last 10 years; AVX2 is not needed) 576* (**SMS / Game Gear / Genesis**) Improved video memory viewer UI so that it's now possible to view CRAM and VRAM simultaneously, as well as current VDP settings (captured once per frame at the beginning of VBlank) 577* Display scale factor / DPI is now taken into account when determining initial emulator window size in windowed mode 578* GUI: The GUI window is now repainted immediately when a directory scan finishes, rather than requiring mouse movement or a keyboard input to trigger the repaint 579 580## Fixes 581* (**32X**) Fixed the 68000 incorrectly being allowed to change the PWM timer interrupt interval via \$A15130 writes; this fixes _Primal Rage_ having horribly broken sound effects 582* Fixed an input configuration bug that made it effectively impossible to correctly configure any gamepad where SDL reads digital buttons as analog axes, such as the 8BitDo M30 with its C and R buttons (#135) 583* Fixed some minor bugs in the common audio resampling code related to how low-pass filters are applied 584* CLI: For options that only accept a fixed set of possible values, the list of possible values in the help text is now auto-generated at compile time; this fixes at least one case where an option's help text listed a possible value that does not exist, and another case where an option's help text omitted a valid possible value 585 586# v0.8.2 587 588## New Features 589* Video/audio sync improvements which should enable significantly improved frame pacing without needing to rely on 60Hz VSync (which can cause very noticeable input latency on some platforms) 590 * Added a new "frame time sync" option that uses the host system clock to match the emulated system's framerate and frame timing as closely as possible without relying on host GPU synchronization (i.e. VSync) 591 * Added a new option for dynamic audio resampling ratio, which periodically adjusts the audio resampling ratio to try and avoid audio buffer underflows and overflows (which both cause audio popping) 592 * Audio sync now checks the audio buffer size every 16 samples enqueued rather than only checking once per frame, which should significantly reduce stuttering when audio sync is enabled without VSync or frame time sync 593 * Adjusted default sync/audio settings values to hopefully make stuttering and audio popping less likely when running with default settings 594 * In the GUI, video/audio sync settings have been moved to a new window under Settings > Synchronization 595* Input mapping overhaul to make input mapping/configuration more flexible (#134 / #137) 596 * Keyboard and gamepad settings are no longer separate configurations; each system now supports up to 2 mappings for each emulated button where each mapping can be a keyboard key, a gamepad input, or a mouse button 597 * Key/input/button combinations (2 or 3 simultaneous inputs) are now supported for mappings in addition to individual keys/inputs 598 * Hotkeys can now be mapped to gamepad inputs, mouse buttons, and combinations in addition to individual keyboard keys 599 * Each input settings window now has a button to apply one of two keyboard presets for P1 inputs, one with arrow keys mapped to the d-pad and one with WASD mapped to the d-pad 600 * Added a new set of hotkeys for saving/loading specific save state slots (#134) 601* (**Genesis / Sega CD / 32X**) Added an option to overclock the main Genesis CPU (the 68000) by decreasing the master clock divider, which can reduce or eliminate slowdown in games (#133) 602* (**SMS / Game Gear**) Replaced the "double Z80 CPU speed" setting with an option to overclock at finer granularity by decreasing the Z80 master clock divider 603* Added an option to only hide the mouse cursor when in fullscreen, in addition to the previous settings of "always hide" and "never hide" 604* Added an option to change the fullscreen mode from borderless to exclusive 605* Added an option to change the audio output frequency from 48000 Hz to 44100 Hz 606 607## Improvements 608* (**Genesis / Sega CD**) Slightly improved performance by advancing the emulated clock in larger intervals while a long VDP DMA is in progress 609* (**32X**) Slightly improved performance by optimizing SH-2 instruction decoding 610* (**GB**) Improved video frame delivery behavior when the PPU is powered off to make it play a little nicer with VSync and frame time sync 611* The emulator window is now explicitly focused/raised when a game is loaded; previously this wouldn't always happen automatically, particularly on Windows 612 613## Fixes 614* (**Sega CD**) Slightly extended the delay between a game sending a CDD Play/Read command and the CD drive reading the first sector; this fixes Time Gal having excruciatingly long "load times" 615* (**Sega CD**) Fixed a bug where some backend settings would not correctly persist after loading a save state (they would temporarily revert to what they were when the save state was created) 616 617# v0.8.1 618 619## New Features 620* Made the game save file and save state locations configurable (#132) 621* Added a new --load-save-state <SLOT> command-line arg to load a specific save state slot at game launch (#132) 622* Added an option to attempt to load the most recently saved state when launching a game 623* (**Game Gear**) Added an option to render at SMS resolution (256x192) instead of native resolution (160x144) 624 625## Fixes 626* (**Sega CD**) Fixed a bug where loading a save state could possibly crash the emulator due to a stack overflow; this was particularly likely to happen on Windows due to the small default stack size 627* (**SMS/Game Gear**) Fixed the VDP display disabled implementation so that it properly blanks the display rather than leaving the previous frame onscreen 628* (**SMS**) Fixed the NTSC/PAL and SMS Model settings not having any effect when loading a game from a .zip/.7z file rather than a .sms file 629* (**NES**) Fixed multiple bugs related to how the PPU determines what color to display when rendering is disabled while PPUADDR points to palette RAM; this fixes Micro Machines having a solid gray bar in the middle of the title screen, as well as several test ROMs that rely on this hardware quirk for high-color display (#53 / #55 / #56) 630* GUI: Saving or loading a save state slot from the GUI window now also changes the selected save state slot 631* CLI: Fixed the 32X option missing from the help text for the --hardware arg (#131) 632* The video memory viewer window now renders without VSync; this fixes likely stuttering and audio popping while the memory viewer window is open 633 634# v0.8.0 635 636## 32X Support 637* Added support for emulating the Sega 32X / Mega 32X 638* All released 32X games plus Doom 32X Resurrection should be playable except for the 6 FMV games that require the Sega CD 32X combo 639* SH-2 CPU cache and basic SH-2 memory access timings are emulated, so overall SH-2 speed should be moderately accurate (though still faster than actual hardware in some cases) 640* SH-2 emulation is currently not optimized well - full-speed 32X emulation requires a CPU with decent single-core performance, and fast-forward speed will be very limited 641 642## New Features 643* Added support for loading directly from .zip and .7z compressed archives for every console except Sega CD (#91) 644* (**SNES**) Added an audio enhancement option for cubic Hermite interpolation between decoded ADPCM samples, which usually makes the audio sound sharper and less muffled 645* (**Genesis**) Added an option to have no controller plugged into one or both of the controller ports, for games that behave differently based on the presence or absence of a controller (#113) 646* (**NES**) Added support for the UNROM 512 mapper (iNES mapper 30), a homebrew mapper used by a number of games including Black Box Challenge and Battle Kid 2 (#73 / #86) 647* (**GB**) Added partial support for the Hudson HuC-3 mapper, used by Robopon and a few Japan-only games (#89) 648* GUI: Added a new "Open Using" menu option to open a file using a specific emulator core, rather than always choosing the core based on file extension (#121) 649* GUI: Added an option to explicitly set the UI theme to light or dark rather than always using the system default 650 651## Improvements 652* (**Genesis**) YM2612 DAC crossover distortion (aka the "ladder effect") is now emulated, which significantly improves music accuracy in a number of games; this is extremely noticeable in Streets of Rage, Streets of Rage 2, and After Burner II, among others 653 * There is also a new option to disable ladder effect emulation, since the effect was less pronounced on later console models (and also because I think it's neat to hear how it affects the sound by toggling a checkbox) 654* (SMS/GG/Genesis) Replaced the PSG and YM2612 low-pass filters with much more aggressive ones; this should generally improve audio quality, and in some cases will remove erroneous buzzing/popping noises that were present before (e.g. in The Adventures of Batman & Robin) (#108) 655* Improved audio output behavior for all emulator backends, which should significantly reduce the likelihood of audio pops caused by audio buffer underflow 656* GUI: Added help text to most options menus 657* GUI: Improved performance when the main list table is large 658 659## Fixes (Genesis / Mega Drive) 660* Fixed the PSG's noise channel not oscillating when the period is set to 0 (which should behave the same as period of 1); this fixes missing high-frequency noise in Knuckles' Chaotix among other games 661* Fixed a degenerate case for performance when a game repeatedly writes the same value to specific VDP registers during active display, as After Burner Complete does 662* Fixed some 68000 CPU bugs discovered while working on 32X support 663 * Implemented line 1010/1111 exception handling for when the 68000 executes an illegal opcode where the highest 4 bits are 1010 or 1111; Zaxxon's Motherbase 2000 depends on this to boot 664 * Fixed divide by zero exception handling pushing the wrong PC value onto the stack; After Burner Complete frequently divides by zero and depends on correctly handling the exception 665 * Fixed the DIVS instruction finishing way too quickly in some cases where the division overflows a signed 16-bit result but the CPU doesn't detect the overflow early 666* Fixed an off-by-one error in determining whether to set the sprite overflow flag in the VDP status register; this fixes flickering sprite graphics in Alex Kidd in the Enchanted Castle (#125) 667 * This was a regression introduced in v0.6.1 as part of the changes to get Overdrive 2's textured cube effect working 668* Adjusted how writes to the controller CTRL registers (\$A10009 / \$A1000B) affect the controller's TH line; this fixes controls not working properly in Trouble Shooter (#110) 669* Made it possible for games to read the VINT flag in the VDP status register as 1 slightly before the 68000 INT6 interrupt is raised; this fixes Tyrants: Fight Through Time and Ex-Mutants failing to boot (#127) 670* Implemented undocumented behavior regarding how the Z80 BIT instruction sets the S and P/V flags; this fixes missing audio in Ex-Mutants, which relies on this behavior in its audio driver code 671* Implemented approximate emulation of memory refresh delay 672 * This is emulated by simply stalling the 68000 for 2 out of every 128 mclk cycles, unless it executes a very long instruction that doesn't access the bus mid-instruction (e.g. multiplication or division) 673 * Memory refresh delay is not emulated in 32X mode because it seemed to break audio synchronization between the Genesis and 32X hardware in some games 674* Added SRAM mappings for several games that have SRAM in the cartridge but don't declare it in the cartridge header: NHL 96, Might and Magic, and Might and Magic III (#107 / #116 / #117) 675* Little-endian ROM images are now detected and byteswapped on load; this along with a custom ROM address mapping fixes Triple Play failing to boot (#112) 676* The emulator will now recognize the unconventionial region string "EUROPE" as meaning that the game only supports PAL/EU; this fixes Another World incorrectly defaulting to NTSC/US mode instead of PAL/EU (#122) 677* Unused bits in the Z80 BUSACK register (\$A11100) now read approximate open bus instead of 0; this fixes Danny Sullivan's Indy Heat failing to boot (#120) 678* Improved VDP DMA timing; this fixes corrupted graphics in OutRunners (#118) 679* The vertical interrupt is now delayed by one 68000 instruction if a game enables vertical interrupts while a vertical interrupt is pending; this fixes Sesame Street: Counting Cafe failing to boot (#119) 680* The Z80 BUSACK line now changes immediately in response to bus arbiter register writes instead of waiting for the next Z80 instruction time slot; this fixes the Arkagis Revolution demo failing to boot (#123) 681* The emulator will now enable the bank-switching Super Street Fighter 2 mapper if the cartridge header declares the system as "SEGA DOA" in addition to the standard value of "SEGA SSF"; this fixes the Demons of Asteborg demo not working properly (#115) 682 683## Fixes (Other) 684* Fixed save state slots not working properly if the ROM filename contains multiple dots; before this fix, only one slot would ever be used 685* (**Sega CD**) When a game issues a CDD command while the drive is playing, the drive now continues to read one more sector before it changes behavior in response to the new command; this fixes Radical Rex crashing during the intro (#100) 686* (**Sega CD**) Writes to PRG RAM by the main CPU and the Z80 are now blocked unless the sub CPU is removed from the bus; this fixes Dungeon Explorer from crashing after the title screen (#104) 687* (**Sega CD**) The sub CPU is now halted if it accesses word RAM in 2M mode while word RAM is owned by the main CPU, and it remains halted until the main CPU transfers ownership back to the sub CPU. This fixes glitched graphics in Marko's Magic Football (#101) 688* (**Sega CD**) Various fixes to CDC register and DMA behavior; with this plus all of the above fixes, the emulator now fully passes the mcd-verificator test suite (#105) 689* (**NES**) The UxROM mapper code (iNES mapper 2) no longer assumes that the cartridge has no PRG RAM; this fixes Alwa's Awakening: The 8-Bit Edition failing to boot (#93) 690* (**SNES**) Adjusted timing of PPU line rendering to occur 4 mclk cycles later; this fixes Lemmings having a flickering line at the top of the screen during gameplay 691 * This worked correctly prior to v0.7.2 - it was broken by the CPU timing adjustment that fixed Rendering Ranger R2 from constantly freezing 692* (**GB**) Fixed the window X condition incorrectly being able to trigger when WX=255 and fine X scrolling is used (SCX % 8 != 0); this fixes corrupted graphics in Pocket Family GB 2 693* Fixed the emulator crashing if prescale factor is set so high that the upscaled frame size exceeds 8192x8192 in either dimension 694 695 696# Older 697 698See https://github.com/jsgroth/jgenesis/releases