Table of contents
Upgrade Notes and Prerequisites
- The readme on GitHub has more instructions, and is usually more up-to-date than this page.
- Never mix different versions of BizHawk. Keep each version in its own folder.
- Windows users: Don't forget to run the prereq installer first!
- Due to how BizHawk has evolved, earlier releases (1.x and 2.x before 2.4) might not work unless you also run an older version of the prereq installer.
- BizHawk versions starting from 2.0 require a 64-bit OS. A "backport" release, 1.13.2, is available for users of Windows XP, 7, or 8.1 32-bit.
- Linux users: Distro-specific build instructions / packages are linked from the readme. A list of known bugs affecting the latest release can be found in issue #1430.
BizHawk 2.10
- Windows download
- Linux download
- Released January 7th, 2025
- New cores
- Encore (Citra) for 3DS
- UAE for Amiga
- Based on libretro-uae 5.0.0
- Stella for Atari2600
- ChannelFHawk
- A7800Hawk
- Fixed #3895 - Change A7800Hawk's default peripherals to 2xProLine (from 2xJoystick)
- Ares64
- Fixed #3710 - Pull Ares64 from upstream to fix Rareware games
- BSNES (v115)
- provide proper OAM memory domain
- update to latest upstream commit
- update included sameboy (used for SGB emulation) to ~0.16.5
- C64Hawk
- Warning: SaveRAM is incompatible to previous versions!
- Merged #4162 - Fix Domark/HES/MagicDesk cartridge mapper bank loading
- Merged #4161 - Fix filter stage passing sound when no filters are enabled
- Fixed #4153 - SID: Filtered voices are audible when no filter output is selected
- Merged #4160 - EasyFlash overhaul
- Merged #4152 - Fix memory performance issues
- Fixed #4151 - DeltaSerializer allocates tons of memory with disk drive active
- Genplus-gx
- update to latest upstream version
- implement paddle controller
- disasm: limit pc to 24 bits, not just disasm address
- Merged #3889 - Update Genesis Plus GX Core
- Merged #3902 - Wiring up GPGX as core for SMS, GG, and SG
- Fixed #3955 - Jeopardy for Sega CD crash
- Fixed #3942 - SMS - Pause button missing in controller config
- Fixed #3919 - SMS Paddle games don't load and use SMSHawk instead
- Fixed #3906 - Enabling BIOS does not launch the game after the startup sequence.
- Fixed #3850 - SegaCD: Dungeon Explorer broken in Bizhawk
- Fixed #3662 - CRAM memorydomain is scrambled
- Fixed #2901 - Manually editing CRAM in Genesis does not work correctly
- Enhancement #4120 - Unable to shoot outside the screen to reload (Menacer et al. for MD)
- Enhancement #4069 - swap A and D regs in gpgx_getregs()
- Enhancement #3905 - option for overscan
- Enhancement #3917 - "VDP mode" option (to eliminate region lockups / megakey behavior)
- Enhancement #2230 - Add TMSS to Genesis Core
- MAME
- Add soft reset input
- add driver source code file to dump info
- mnemonics for Robotron 2084, Jurassic Park, defender
- Fixed #3721
- Allow view selection
- Enhancement #3715 - option to hide the gear hud in certain games
- Fixed #3704 - crashes when trying to record some games that have duplicate / mirrored controls
- melonDS
- Add many more missing TMDs
- Fixed #4028 - Can't launch 2 iQue DSiWare Titles due to missing TMD
- Fixed #3535 - Error when creating any NDS cheats
- Fixed #3534 - MelonDS: screen rotate doesn't work correctly with window size 2x and higher and "Maintain aspect ratio" set
- Fixed #3397 - Hotel Dusk - Room 215, Chapter 8 puzzle is impossible
- Add many more missing TMDs
- mGBA
- Mupen64Plus
- NesHawk
- Merged #3964 - Neshawk Tracelogger no longer prints incorrect addresses if a branch would overflow/underflow the PC
- Fixed #3963 - Tracelogger shows a 32 bit address when a branch wraps around address $FFFF
- Fixed #3856 - NESHawk initial RAM pattern override length must be a multiple of 2, otherwise changes cannot be applied
- Fixed #3664 - NullReferenceException on Gimmick! (JP) (NesHawk, Mapper 69)
- Enhancement #3854 - NESHawk: missing palette RAM memory domain
- Merged #3964 - Neshawk Tracelogger no longer prints incorrect addresses if a branch would overflow/underflow the PC
- QuickerNes
- Sameboy
- Update sameboy to ~0.16.5
- Snes9x
- SubGBHawk
- SubNesHawk
- Fixed #3949 - SubNesHawk doesn't recognize FDS disk operations
- TIC-80
- TurboNyma
- Fixed #3663 - pce bug Lady Sword - Ryakudatsu Sareta 10-nin no Otome (Japan) (Unl)
- DiscoHawk
- Fixed #3859 - Discohawk About Page has Google Code link
- EmuHawk
- various performance improvements related to movie recording
- fixed subtitles button in the Play Movie dialog
- fixed movie loading duplicating subtitles in movies
- allowed editing subtitles and comments from the Play Movie dialog
- optimized the lsmv importer (other importers may also be faster)
- include debug information in binary: this will improve reported exception messages
- fixed a possible crash when savestating while recording a movie by disabling savestates past movie end
- updated core preferences picker
- prefer ideal over acceptable firmware when both exist
- improved axis input value calculation (420cf323a)
- fixed some default axis controls incorrectly having deadzone
- fixed potential exception when an invalid path was set in the Path Configuration
- fixed middle mouse button input bind not working
- rework firmware icons, better tooltip for ideal bind
- video dumper: mention dependency for AVC AVI (x264vfw or ffmpeg based decoder)
- fixed GmvImport's six button controller handling
- Add support for game controller touchpads (i.e. on PS4/PS5 controllers)
- Fixed #4144 - SaveRAM filename collision when using Libretro
- Fixed #4159 - Movies preserve old input text
- Fixed #3966 - Config > Save Config doesn't save core settings
- Merged #4087 - order firmware groups in the dialog and in the code
- Merged #4029 - Main window auto-size fixes
- Fixed #2850 - Window Size & position incorrectly adjusted when exiting Fullscreen
- Merged #4027 - Cheat load/save fixes
- Fixed #3085 - tool savefile paths doesn't track current rom
- Merged #4024 - Fix Sega CD/Saturn disc hashing
- Merged #4022 - Disk Drive Activity LED ToolTip enhancement
- Merged #4011 - Add option to disable automatic resize of main window
- Fixed #1560 - Window is spontaneously moved/recreated during Yoshi's island's opening
- Fixed #3039 - N64 Graphics Plugin's "graphics resolution" shouldn't govern the size of the application Window
- Fixed #3410 - Nymashock changes emulator window size between each game resolution change, no matter the settings
- Merged #4010 - Fix movie header values being potentially outdated upon starting a movie record
- Fixed #3980 - GB: Default settings don't properly save the boot ROM in movie settings
- Merged #4008 - Change OnMovieEnd default to 'Pause' instead of 'Finish'
- Fixed #4007
- Merged #3987 - Make external tools path independent of working directory
- Merged #3981 - movies: normalize loaded hashes to upper case
- Fixes #3979 - Hashes in movie headers should not be case-sensitive
- Merged #3975 - Fix Uzebox framerate
- Merged #3751 - Dispose disks in Nyma cores
- Fixed #3750 - EmuHawk 2.9.1 doesn't release file after closing game
- Merged #3935 - Refactor IControlMainform handling in Mainform
- Merged #3914 - Expanded color palette object inside Nes PPU Viewer
- Merged #3913 - Updated Amstrad CPC Non-Sync Settings name
- Fixed #3845 - CPCHawk - Incorrect Text Label Under "Other Non-Sync Settings"
- Merged #3869 - Replace SortedSet with SortedList<T> in InputRoll (better performance)
- Merged #3876 - Remove DInput input adapter
- Merged #3872 - Add some larger sizes to View -> Window Size
- Enhancement #3826 - Add more window size option?
- Merged #3747 - Set inputdisplay correctly on LoadState
- Fixed #3741 - Input display doesn't update when loading states in read-only mode
- Merged #3733 - Allow migrating non-SHA1 hashes on movie import
- Fixed #3727 - BizHawk handles imported SNES9x CRC32 incorrectly
- Merged #3728 - Change Odyssey 2 framerate
- Enhancement #3709
- Merged #3691 - Update CurrentlyOpenRom before Tools.Restart
- Fixed #3527 - Hex editor shows wrong "File on Disk" when switching games
- Merged #3690 - Add StringFormat to pixeltext DrawString parameters
- Fixed #3669 - gui.pixeltext is misaligned when message starts with too many spaces
- Merged #3684 - Sanitize text pasted into hex text boxes
- Enhancement #3682 - Allow pasting 0xHHHH-formatted numbers in a HexTextBox (e.g. in WatchEditor)
- Fixed #4136 - Duplicate firmware filenames
- Fixed #4086 - Auto-Hide Mouse Cursor Doesn't work
- Fixed #3986 - GameInfo is not cleared when rom loading fails
- Fixed #3983 - Opening/closing tools from Lua can crash BizHawk
- Fixed #3957 - N64 Background analog input being read even when turned off
- Fixed #3842 - Key priority setting doesn't compare individually mapped keys to key combinations
- Fixed #3833 - Freezing many values in hex editor, then choosing not to freeze will still freeze the first value (Bizhawk 2.8)
- Fixed #3779 - fm2 movies for FDS games cause an IndexOutOfRangeException
- Fixed #3776 - Problems when adding padding to the EmuCore drawing surface
- Fixed #3679 - FFmpeg custom commands can mess up video output extension
- Fixed #3567 - NES cheats compare byte changes every core reboot
- Fixed #3523 - Cheat serialisation is borked
- Fixed #3341 - Crash when any of cropping parameters are set to very high negative value (ex. -1000000)
- Enhancement #4132 - Display keyboard keys at the end of input OSD
- Enhancement #4108 - Mapping Analog to dpad gives too narrow diagonals when using XInput controllers
- Enhancement #4070 - Rename "AVI/WAV" in menus
- Enhancement #4017 - When Dumping Create a Warning if/when Closing the Program
- Enhancement #3915 - Bump up FFmpeg Writer above AVI Writer
- Enhancement #3900 - Restore Default Current Tab in Hotkeys
- Enhancement #3835 - Make the Admin privs warning less useless for the user
- Enhancement #3763 - Movie creation: GB firmware defaulting is unintuitive
- Enhancement #3737 - EmuHawk consumes extra GPU while paused
- Enhancement #3644 - BizHawk does not inhibit display or system sleep while running
- Enhancement #3570 - Movie importing requires a rom to be loaded
- Enhancement #3532 - "IOException: The device is not ready" when loading .cue
- Enhancement #3481 - Hotkey to accept background input
- Enhancement #3177 - [import Movie] .smv import on BSNES Core, when Snes9X core selected
- Enhancement #2605 - OSD not affected by system UI scale
- Enhancement #1879 - Add low-level support for the Nintendo GameCube Controller Adapter drivers (on host)
- Enhancement #1482 - Request: CHD file format support
- Linux port
- Fixed #4145 - Host audio stops when MainForm dragged
- Fixed #4021 - BizHawk 2.9.1 crashes when trying to encode with FFmpeg
- Fixed #3972 - Hang when using "Hide Lag Frames" on Linux
- Fixed #3912 - Problems on drag-and-drop of lua script
- Fixed #3843 - Random crashes when playing PS1 games on Manjaro Linux
- Fixed #3828 - Crashing when open any rom file
- Fixed #3678 - LUA Console instant crash on startup
- Debugger
- Hex Editor
- Merged #3998 - HexEditor "File on Disk" fixes
- MultiDisk Bundler
- Lua Console
- Lua
- improved bundled input display script's handling of unsupported systems
- Fixed #3897 - Script using tastudio.onqueryitemtext gets IndexOutOfRangeException after updating from 2.8
- Enhancement #3651 - Lua functions search filter doesn't search through description
- Enhancement #2600 - Unable to fully display two .lua scripts at the same time in 2.6
- Ram Search
- Ram Watch
- Fixed #4044 - 8 character limit when poking a 4 byte binary value
- Fixed #4045 - Invalid input produces no error when poking 4 byte binary values
- Fixed #4001 - "Changes" column is broken in certain cases in RAM watch
- Enhancement #4046 - "New watch" window layout
- Enhancement #4051 - Context menu for RAM Watch separator rows has split, poke, and un/freeze options
- Enhancement #3688 - Input display seems to use hardcoded 0 instead of AxisSpec.Neutral when under specific circumstances
- Enhancement #3802 - Add setting to control what happens when double-clicking RAM watch
- RetroAchievements
- TAStudio
- bump default undo count to 1000
- removed unused tastudio menus and config params
- use normal control BG color for tastudio color editor
- don't let branch screenshot appear below screen edge
- allowed TAStudio to save cycle count in bk2 export
- optimized performance and reduced memory allocations
- sped up the state history integrity checker by more than an order of magnitude
- improved autofire / autohold handling (15ff0ec2c)
- Fixed #4068 - TAStudio does not handle movie start failures gracefully
- Fixed #4065 - TAStudio will save even when you press "no" in certain cases
- Fixed #3675 - Deleting too many frames is massively inefficient
- WIP #3708 - TAStudio horizontal layout problems
- fix axis value editing logic: specifically allow typing without immediately clamping to the min value when the user isn't finished
- Fixed #4115 - GunCon unable to type any aY value besides 16X (and 16)
- Merged #3936 - Fix possible TAStudio NRE
- Fixed #3499 - TAStudio NullReferenceException after movie playback
- Fixed #4125 - Right-clicking TAStudio Frame# column header causes exception
- Fixed #4068 - TAStudio does not handle movie start failures gracefully
- Fixed #4058 - Recording mode gets extremely slow for longer movies
- Fixed #3968 - Opening a .tasproj file and reordering branches would cause exception
- Fixed #3933 - TAStudio suggests to save tasproj changes on every bk2 import
- Fixed #3899 - Marker changes to branches can save even when the branch itself isn't saved
- Fixed #3870 - Loading a tasproj does not dispose the rewind buffer
- Fixed #3685 - TAStudio axis cell is set to 0 instead of AxisSpec.Neutral under specific circumstances
- Fixed #3500 - TAStudio recording mode may get toggled on erroneously
- Fixed #3478 - Max Undo Level keeps resetting to 100
- Fixed #3220 - Possible Bug With Lag Log / Follow Cursor / TASProj Loading
- Fixed #2292 - TAStudio records extra frames at the end during playback
- Fixed #2081 - Turbo seek doesn't render the proper frame
- Fixed #734 - Auto-adjust input according to lag
- Enhancement #3992 - Add a hotkey for "Clone # Times" in the TAStudio tab
- Enhancement #3969 - Improved Clear Frame performance
- Enhancement #3714 - marker edit dialogue box spawns in bad locations
- Enhancement #3504 - TAStudio .bk2 export is disabled until a .tasproj is saved
- Enhancement #3124 - Add tooltip to TAStudio column headers w/ full name of button/axis
- Enhancement #2369 - context menu spawns a bit too close to the cursor
- Enhancement #2144 - Painting input on TAStudio's tiles should disable recording mode
- ApiHawk
- meta: The .NET 8 SDK is now required for working with BizHawk. The VS installer will automatically include this with VS2022 updates.
- Fix confusing failures when an
ApiContainer
prop is accidentally marked with[RequiredApi]
/[OptionalApi]
- Ext. tools now receive
ToolFormUpdateType.General
events regularly while paused (and while unpaused! you should have been checking the enum anyway)- If you're subclassing
ToolFormBase
, this will have no impact on your existing code, but you can choose to overrideGeneralUpdate
to make use of it
- If you're subclassing
- Fix signature of
IMemoryApi.WriteFloat
(the value param is now float and not double—the implementation was converting it to a float anyway) - Add an overload
IGuiApi.WithSurface(DisplaySurfaceID, Action<IGuiApi>)
and deprecate the old one- For the time being, there will be no difference between using the lambda parameter as instructed, and discarding it and continuing to make calls to whatever
IGuiApi
instance you were using.
- For the time being, there will be no difference between using the lambda parameter as instructed, and discarding it and continuing to make calls to whatever
- Remove the deprecated
IGameInfoApi
library - Remove the deprecated attributes
[RomWhitelist]
,[SingleRom(CoreSystem, string)]
, and[SingleSystem(CoreSystem)]
- Rewrite most of
GuiApi
(the implementation ofIGuiApi
). Parity with the old implementation is a goal, but there may be bugs
BizHawk 2.9.1
- Windows download
- Linux download
- Released May 3, 2023
- Linux port
- fixed last issue in #2951 properly
- AppleII / C64
- fixed states sometimes crashing when a disk change actually happens
- BSNESv115+
- Gambatte
- fixed #3648 ([GameBoy Link] Buzzing noise when one of the Players is muted)
- MAME
- fixed BIOS selection menu
- added emulation issues and ROM info to RomDetails dialog
- report emulation status via ROM info icon and text
- fixed #3631 (bgaregga locks up the process)
- hide settings for optional dip switches (for now)
- use 0x3ffffffc as framerate numerator, like actual MAME does since 0.254 (fixes MP4 processing on YouTube)
- fixed #3565 (kinst + kinst2 = crash)
- fixed #3615 (rom loading regression)
- fixed crash with games using
k001006_device
(e.g. windheat)
- NESHawk
- fix open bus execution following write instructions (#3633)
- Octoshock
- fixed exe load crash
- SMSHawk
- fix noise audio channel on SMS VDP (LFSR is 16 bit wide) (#3602)
- EmuHawk
- fixed #3268 ("Unthrottled" setting burns cpu when paused)
- If a PSX
.bin
is loaded, try synthesising a.cue
- don't keep multidisk flag on after it was set once
- speedup the PlayMovie dialog
- Prevent annoying waits when using firmware manager with DSi NANDs present
- Lua
- fixed #3616 (error loading module in lua (socket.dll))
- TAStudio
- speedup column drawing
- fixed bugs with entries in patternsform (#3649)
- RetroAchievements
- fixed RetroAchievements rich presence not working
- fixed Jaguar CD homebrew hashing wrt retroachievements
- disabled leaderboard list form
- fixed various crashes and deadlocks
BizHawk 2.9
- Windows download
- SHA256 checksum: 9c456b7ccadc8b8859879343444d7284cd42c7268f9d7db5100ce08bd3ab3c54
- Linux download
- SHA256 checksum: eabd9ab68fa0636fad8e62e75bb8b10b7f75b2ba3218c7132da1cf6cf95a46d9
- Released April 7, 2023
- Linux port
- fixed various file pickers using case-sensitive file extensions
- added short-circuit to Mupen64Plus loading to avoid error messages and any strange failure state
- enabled menu mnemonics (Alt+X) for MainForm
- fixed inconsistent application of colours from GTK theme when Mono is able to use it
- added Gentoo to Linux run script
- New cores
- MAME
- Arcade-only build of MAME 0.252
- Ares64
- Interim version after v130.1
- Angrylion-rdp for RDP and VI emulation
- Transfer Pak support and N64 Mouse support
- Debugging features: disassembler, get registers, System Bus domain
- SIMD RSP implementation
- N64DD support
- VirtualJaguar
- Jaguar and Jaguar CD emulation
- TIC-80
- core for the TIC-80 fantasy computer, using nesbox's own reference implementation
- SubBSNESv115+
- subframe capable variant of the BSNESv115+ core (#3281)
- MAME
- A2600Hawk
- fixed crash when pushing Select on Karate title screen
- BSNESv115+
- made this core default in places where the old BSNES core was
- reworked Payload peripheral and fixed Virtual Pads
- improved peripheral selection for P1
- reimplemented MSU1 properly
- added fast DSP and fast coprocessor settings
- fixed crash when loading a savestate after a reset (#3173)
- added region override setting
- added overscan and aspect ratio correction settings
- implemented an
ExtendedGamepad
controller which acts like a normal gamepad with 4 extra buttons - fixed justifier controller
- added option to disable ppu sprite limit (#3440)
- implemented SNES graphics debugger
- updated internal sameboy version for SGB by linking it to the standalone sameboy core, fix SGB saveRAM
- fixed CARTROM and CARTRAM memory domain names (#3405), provide SGB memory domains, set MainMemory and SystemBus domains properly
- fixed lag detection in certain games
- implemented bsx + bs memory loading (#3457)
- added RTC support (#3577)
- (old) BSNES
- C64Hawk
- various savestate fixes
- added SaveRAM support
- CPCHawk
- removed redundant
AmstradCpcPokeMemory
tool - renamed some bundled firmware files (#3494)
- removed redundant
- Cygne
- allowed .pc2 (Pocket Challenge v2) files to be loaded
- Faust
- updated to Mednafen 1.29.0
- Gambatte
- improved MBC1/MBC1M emulation
- improved HuC1 emulation and implement HuC1 IR support
- improved HuC3 emulation and implement support for mapper sound (HuC3 is currently the only use case)
- implemented MMM01 emulation
- implemented M161 emulation
- improved heuristics for various multicart mappers and remove the multicart detection setting (now effectively always true)
- implemented remote control controls, expanded remote control emulation for HuC1 IR and CGB IR (previously only HuC3 IR had this implemented, using a hardcoded value)
- cleaned up the mapper internals, IR, and RTC code
- made various optimizations to the CPU loop and read/write code (around 10-15% performance increase)
- trimmed down initial time settings to a single setting, using total number of seconds
- implemented quirk with bit 4 of rLCDC, fixes cgb-acid-hell testrom compliance
- fixed sprite priority in CGB-DMG mode
- prevent crashes due to "negative" numbers being added to the sound buffer pointer (#3425)
- fixed audio output being too quiet (#3338)
- added a CGB color correction option using the same formula as SameBoy, and made that the default
- time fixes (long periods of pausing causing rtc overflows in real time mode; time incorrectly advancing when loading in a save file)
- GBHawk
- fixed Code-Data Logger crashing due to typo'd mem domain name (#3497)
- fixed wrong MBC5 mapper being given a battery
- Genplus-gx
- stopped byteswapping Z80 domains (#3290)
- changed default peripheral to 3-button Genesis gamepad (#2775, #3262)
- added option to disable ppu sprite limit (#3440)
- prevent svp dereferences when not using an svp cart (#3297)
- give NHL 96 (Genesis) SRAM (#3300)
- fixed disc swapping, re-enabled the disc buttons
- fixed disabled layers being wrongly re-enabled on a load state (#3388)
- fixed pattern cache invalidation (#3363)
- HyperNyma
- updated to Mednafen 1.29.0
- Libretro
- melonDS
- updated to interim version after 0.9.5
- fixed SaveRAM not getting written to disk when unloading/reloading core (#3165)
- implemented threaded renderer support
- replaced darm with a new DS centric disassembler, fixing various issues with tracing/disassembly
- r13/r14/r15 reported as sp/lr/pc for tracelogs
- split ARM7/touch screen polls to an "alt lag" variable and added a setting for whether to consider this "alt lag" (#3278)
- reduced state size a bit
- improve audio resampling; get rid of libspeex dependency
- added missing TMD for Zombie Skape, improved error message when TMD cannot be found
- ensured firmware settings match up with sync settings if real firmware is not used (#3377)
- did various internal cleanups
- add TCM memory areas for melonDS core (#3420)
- added Clear NAND setting
- added dsiware saveram support
- mGBA
- Mupen64Plus
- NeoPop
- updated to Mednafen 1.29.0
- NesHawk
- relaxed restriction on VRC1 PRG registers, so they can be larger than the original VRC1 chip allows (for rom-expanding hacks)
- fixed PGR writes for VRC1 not using mask for address
- fixed SXROM detection (#3168)
- fixed crash for Namco 163 mapper (#3192)
- "un-implemented"
ICycleTiming
so that NesHawk no longer tries to use the cycle timing intended for SubNesHawk
- Nymashock
- SameBoy
- Saturnus
- updated to Mednafen 1.29.0
- fixed disc switching
- fixed light guns (#3359)
- SMSHawk
- Snes9x
- fixed typo in sound settings bitfield (#1208)
- T. S. T.
- updated to Mednafen 1.29.0
- TurboNyma
- updated to Mednafen 1.29.0
- Virtu
- fixed some internal state not being overwritten by savestates
- changed RTC to use deterministic time when recording instead of (host) system time
- changed up AppleII's "main ram" domain, added aux ram domain
- added SaveRAM support
- VirtualBoyee
- refactored core to use the same Nyma system as the other Mednafen ports
- updated to Mednafen 1.29.0
- ZXHawk
- removed redundant
ZXSpectrumPokeMemory
tool - renamed some bundled firmware files (#3494)
- removed redundant
- EmuHawk
- fixed keybinds not working after waking from lock screen on Windows (#3161)
- added warning when current firmware customization does not match the one specified in the movie header (#2498)
- refactored memory poking, allowing negative values for fixed-point watches and fixing other bugs (#3175)
- fixed
.gmv
importer not setting the core name in the.bk2
header - fixed regression where screenshots from some cores were transparent (#3166)
- fixed Lua referencing a core after it's unloaded, making scripts crash (#3226)
- made DirectX optional on Windows (it's still in the prereq installer because it's usually faster)
- fixed opening roms from "jump list" in Windows shell / file manager (#3224)
- improved UX of loading a savestate from an older (or newer) version
- fixed shaders' height being used for width
- finished UX for merging/unmerging LShift+RShift and other modifier keys (#3184, #3257)
- fixed
.dsm
importer which relied on non-deterministicDictionary
(hashmap) ordering for axis names, also parse RTC in DsmImport - stopped offering to remove missing file from recent roms when it's not actually missing, just failed to load (#3006)
- fixed hotkeys triggering accidentally in Virtual Pad on Windows (#3087)
- increased precision when tweaking axis sensitivity/deadzone (#3038)
- fixed category radio buttons being cut off in Messages config
- restored "priority" option for U+D/L+R policy, and made it the default again (#2752)
- refactored firmware config so the acceptability status icons make sense (#3157)
- fixed Screenshot (raw) -> Clipboard not showing keybind hint
- added UI for editing any* core's settings/syncsettings without it being loaded
- fixed strange behaviour when trying to extract archive which contains folders
- bumped FFmpeg to 4.4.1, added auto-download to Linux port (#3259)
- reordered Config -> Preferred Cores submenu
- removed some unnecessary prompts to reboot core
- moved "Save Window Position" for main window to Config -> Display... -> Window and added a "Stay on Top"
- fixed Windows version detection and enabled warning for unsupported versions (#2972, #3194)
- fixed some systems not having a name to display in the window title
- fixed MSX rom loading
- made file extension check for disc images case-insensitive
- added warning dialog when running as Superuser/Administrator
- fixed overlapping UI elements in Config -> Controllers... when Windows UI scale is not 100% (#2605)
- fixed overlapping UI elements in Record Movie dialog when Windows UI scale is not 100% and on Linux (#2605)
- fixed the autoselection of a movie when opening the Play Movie dialog
- fixed
%recent%
being expanded to the wrong path - fixed window title being blank when chromeless mode is enabled
- improved handling of host sound init failure
- added prompt for if you start movie playback while cheats are enabled (#3389)
- improved cheat editing UX
- removed default bindings for virtual keyboards
- updated virtualpads immediately when the movie status changes between read-only and record mode
- fix key releases not getting handled correctly when modifier keys are pressed (#3327)
- fix a crash when selecting user shaders (#3495)
- fix gamedb loading not blocking when loading a rom, potentially causing a miss with a slow hdd (#3489)
- fix crashes when setting absurdly large padding values (#3321)
- make
DisplayConfig
defaults button set padding back to 0 - add auto save state on close (#1861)
- zstd compression is used instead of deflate compression where possible (rewind, .wbx cores, internal resource files, binary blobs in movies, savestates, etc)
- hardware accelerated CRC32 and SHA1 algorithms are used if the user's hardware allows it
- add hash for newly discovered GBC-GBA bootrom
- removed gongshell, added "simple" code for opening win32 context menu (gongshell's only actual use) (#2261)
- fixed firmware fields with a dummy checksum using the wrong firmware info (#3159)
- fixed "Toggle All Cheats" hotkey behaviour
- did minor refactors to byteswapping (N64 rom loading and Lua bit library)
- implemented RetroAchievements support (#3407)
- fixed pause at end of movie when playing a tasproj without tastudio
- fixed NaN values displaying in RewindConfig, use system's canonical framerate for rewind duration estimate
- various NES PPU viewer fixes
- updated Windows version check to reflect 8.1 EOL
- fix audio not getting muted when opening modal dialogs (see #3545)
- added hotkey for toggling on-screen messages
- renamed quicksave slot 0 to 10
- strip "SHA1:" and "MD5:" when copying lines in the log window
- have TAS profile also enable NDS BIOS
- improved DisplaySurface performance (#3517)
- fix malformed PC Engine gamedb entry ("Sounds" was interpreted as the sysID)
- add N64 to multidisk bundler list
- add some sort of documentation for B/V gamedb flags
- hide debug tools from Tool Box and add ext. tools
- added Magnum (FBX) and Wavebeam NES palettes
- added
--userdata
CLI flag - added .cdi support
- fixed window title after loading rom via FW config (#3581)
- clear
MovieSession._queuedMovie
if rom load fails (#3582) - .bin file Mode2/2336 support (#3387)
- added keybind (hardcoded) for MainForm context menu
- persist A/V settings to disk properly (#1226)
- fixes and improvements to SNES lightguns
- RAM Watch
- fix CTRL+A not working properly
- RAM Search
- added Select All/None
- switch
_watchList
from a List to an Array (faster) - fix hang with "Go to Address" dialog in RamSearch (#3384)
- Hex Editor
- fixed incorrect handling of big / little endian (#3516)
- disabled "Save [to rom file]" when not looking at rom
- TAStudio
- fixed "Select between Markers" hotkey not working
- fixed
.tasproj
headers being written differently based on locale (i.e. ',' instead of '.') - don't autorestore if current frame remained valid
- refactors for selection in
InputRoll
, standardising behaviour of Select All and Insert Separator buttons - resolve some inputs showing ! in Nymashock and hide some columns by default
- when starting new
.tasproj
from SaveRAM, don't clone SaveRAM twice - fixed modifier key check in
TAStudio.TasView_MouseDown
- added 'Edit marker frame' feature
- fixed
ArgumentOutOfRangeException
when loading TAStudio with cheats - improved input copy/paste behavior (#3506)
- fixed incorrect behavior when switching systems and improve handling of
default.tasproj
(#3462) - improved clarity of label texts in custom color dialog (#2119)
- fix KeyLog not being respected in TAStudio and custom LogKey getting discarded (#2843)
- Lua
- replace the two lua engines with an updated version of NLua, backed internally by native lua 5.4.4
- update lua documentation in reflection of new lua features
- rely on a system provided lua 5.4 .so (or lua 5.3 if needed) when on Linux, resolving issues due to providing our own lua
- various changes due to real integer support in new lua
- deprecate bit library functions which have direct operator counterparts in new lua
- add in a migration helper for lua bitwise ops (put
bit = (require "migration_helpers").EmuHawk_pre_2_9_bit();
at top of file) - added arguments to memory callback functions (cb will be called with addr, val, flags)—check
event.can_use_callback_params("memory")
when writing polyfills - fixed setting size of Lua Forms (#3034)
- fixed encoding bug which caused e.g. Japanese text to become mojibake/garbled (#190, #2041)
- fixed the
forms.*
functions forLuaPictureBox
es erroneously affecting every form instead of the one specified (#3395) - renamed (deprecated)
event.onmemory{read,write,exec,execany
} toevent.on_bus_{read,write,exec,exec_any
} (#759) - added
bizstring.pad_{start,end
} convenience functions - changed Lua Console to trigger a clear of drawing surfaces and the OSD when removing a Lua script, and to reset padding when removing the last script
- fixed
require
not looking in Lua dir on Linux - added "Clear Output" button to Lua Console
- fix documentation error in
client.gettool
- set
Form.Owner
to MainForm for Lua-made forms - fixed wiki export, add more notes to fill in some of the holes
- documented frameadvance loop
- documented socket response format
- fixed possible crash in print (#3513)
- fixed
mainmemory
lib keeping reference to unloaded core's memdomain - suppress updates while rebooting core (#3424)
- fixed various things in the LuaConsole (#3476)
- fixed unwrapped lua exceptions not being correctly thrown
- properly handle errors when running a lua script, using Resume/Yield methods added to the LuaThread class (see https://github.com/TASEmulators/NLua/commit/f904fa0d53b06c67dd8e9b409dcbb9fa8aa721f2)
- fix mainmemory.write_bytes_as_dict
- Pass through input/hotkeys while Lua form is focused (to restore previous behaviour, call
forms.setproperty(form_handle, "BlocksInputWhenFocused", true);
) - fix PictureBox when width or height is null
- use LuaPictureBox' custom resize in all cases
-
CloseRom
acts like rebooting the core, so make it just reset Lua libs (fixes #3226) - fix detaching registered functions
- support marshalling arrays of length 0 through BizInvoker, fixing a crash with lua
- fixed
event.onmemoryread
behaviour under mGBA (#3230) - improved how removing callbacks from within a callback is processed (#1823)
- have
MemoryDomain
inheritIMonitor
, which can be used to avoid waterbox overhead for many nonsequential memory accesses (already used internally to speedup RAM Search and some lua functions; no-op for non-waterbox cores) (#3296)
- ApiHawk
- improve error message for
IToolFormAutoConfig
ext. tool missing menu - merged
IGameInfoApi
intoIEmulationApi
, and some other minor API method signature changes - changed injector to include non-public properties when looking for
ApiContainer
- deprecated some
ExternalToolApplicability.*
attributes - added
IMovieApi.PlayFromStart
/movie.play_from_start
(#384) - added
saveChanges
parameter toIMovieApi.Stop
/movie.stop
- fixed edge cases for
MemoryApi.{Read,Write}ByteRange
/{memory,mainmemory}.read_bytes_as_{array,dict
}/{memory,mainmemory}.write_bytes_as_array
- added
IUserDataApi.Keys
/userdata.get_keys
- fixed trying to load tool Forms when services aren't satisfied, causing NREs (#3329)
- fixed HTTP and sockets not being initialised in time for tools autoloaded on startup
- added "memory" of which ext. tools the user has vetted so the prompt does not appear when restarting EmuHawk
- added length prefix to
ICommApi.Sockets.SendScreenshot
/comm.socketServerScreenShot
to matchSendString
/socketServerSend
- return success bool from
OpenRom
APIs (#3514) - have
IMovieApi.Stop
implementation useMainForm.StopMovie
- fix
--open-ext-tool-dll
- made ext. tool build and run scripts pass args through to dotnet
- deprecated `IGuiApi.DrawText` in favour of new method `PixelText` to match Lua
- made `ApiContainer` props `MemoryEvents` and `MemorySaveState` return `null` if req. services unavailable
- Use bulk peek in
IMemoryApi.{ReadByteRange,HashRegion
}
- improve error message for
- Basic Bot
- added warning when loading a
.bot
into the Basic Bot which was made on a different game or system, or on an older version - increased max frames from 999 to 9999
- added NOT operator
- fixed anchor points and a misaligned label
- fixed code logic error for 3 way tie breakers
- refactor
BasicBot.IsBetter
- fixed issue where the Copy button was not toggled on/off properly
- change addresses to
ulong?
(fixes empty address fields being saved as0x0
)
- added warning when loading a
- Debugger
- fixed the "To PC" button not updating the disassembler view
- fixed breakpoint crash with mGBA (#3287)
BizHawk 2.8
- Windows binary
- Linux binary
- Released February 19th, 2022
- Misc. changes to EmuHawk:
- fixed various bugs with the Paths config dialog
- fixed "Close and reload ROM" in Firmware Manager crashing if it was opened from missing FW dialog (#3054)
- fixed typos which broke INTV, NES, and PSX gamedb lookups
- fixed known good Saturn BIOS choices marked as unknown (#3095)
- updated list of Sega CD / Mega CD BIOSes in firmware database
- many gamedb additions and updates
- fixed RAM Search difference fields can't fit all possible values (#3117)
- fixed
File
>Load State
>Auto-load Last Slot
breaking movie recording/playback (#2384) - fixed .dsm importer
- fixed .smv importer nagging about core choice thousands of times (#3022)
- fixed .vbm importer
- made OSD message duration (time to fade) configurable in UI, and allow API calls to override it
- added option to split RAM Watch entries (#1024)
- fixed drag+drop bug (#1483)
- made
Config
>Customize...
>Pause when menu activated
behave consistently - fixed overlapping UI elements in Debugger (#3026)
- tidied up numbering of save slots and TAStudio branches (#3112)
- fixed
ObjectDisposedException
when triggering single-instance passthrough - fixed throttle edge cases
- fixed edge cases where post-frame tool updates would run twice after a frame advance
- added more logging and warning dialogs for edge cases
- many smaller fixes and even some frontend speed optimisations (not sarcasm, this is a first)
- Linux port:
- added support for PSX (see Nymashock below) and technically N64 and TI-83 (see Ares64 and Emu83 below)
- fixed various problems w/ alignment and size under Mono
- fixed hotkeys triggering accidentally when typing in Virtual Pad fields (#3087)
- added Nix expression for reproducible EmuHawk (and DiscoHawk) builds without dependency issues
- TAStudio:
- re-enabled editing of movie comments (#3063)
- added an edit dialog for TAStudio palette (#2119)
- fixed branch screenshots (#1513)
- fixed weird edge case putting TAStudio in an unaccounted-for state (#3066)
- fixed error when autoloading a rom and TAStudio AND a .tasproj for a different rom
- fixed incorrect behaviour when jumping to frame 0
- Lua/ApiHawk:
- added support for
"#RRGGBB"
format when parsing colours ("luacolor" in docs) in Lua API - fixed
joypad.setfrommnemonicstr
not working without reinitialising MovieSession (#2525)
- added support for
- DiscoHawk:
- fixed deadlocks (#3128)
- New and graduating cores:
- Nymashock:
- new PSX core ported from Mednafen (like Octoshock, though this is newer and more easily updated, which also means it has more peripherals)
- SameBoy:
- new ported GB/C core with comparable accuracy to Gambatte and GBHawk (not to be confused with the SameBoy SGB core in older releases)
- Emu83:
- new TI-83 core
- BSNESv115+:
- BSNESv115+ (the "new BSNES port") is no longer experimental
- fixed Hex Editor and others using read instead of peek (#3060)
- implemented memory callbacks
- fixed ram and rom memory domains
- increased MmapHeapSize to prevent crashes, affected Star Ocean
- refactored latching to improve dumping/verification
- reduced savestate size (increased frequency for TAStudio/rewind)
- improved speed of fast ppu check
- MSXHawk:
- MSXHawk is no longer experimental
- implemented more hardware/mappers
- added Linux port
- Ares64:
- 2 new experimental cores ported from Ares: one for casual play which is slow and desync-prone ("Performance"), and one for TASing which is even slower but will sync ("Accuracy")
- Nymashock:
- Other cores:
- A7800Hawk:
- fixed nondeterminism caused by incorrect savestate code
- fixed Basketbrawl and summer games
- fixed off pixel detection in write mode, affected baby pac man
- Atari2600Hawk:
- fixed audio issues, affected ms pac man
- Gambatte:
- updated core
- fixed error when attempting to write to some registers e.g. with the Debugger (#3028)
- fixed crash on Linux
- refactored GambatteLink to be more modular and add support for 3x/4x
- added proper memory callback scopes for link play
- enabled disassembly in link play
- allowed linking w/ GBC cart IR
- stopped using fine-grained timing for link play when the link is disconnected
- added more scopes for memory callbacks
- GBHawk:
- updated GBA startup state, affected Konami collection vol. 4
- fixed link play, affected perfect dark
- Genplus-gx:
- Handy:
- fixed crash on Linux (#2425)
- IntelliHawk:
- adjusted sme timings and fixed accesses to registers, affected motocross
- cleaned up CPU, fix trace logger and throw less exceptions
- fixed intellicart, affected various homebrew roms
- fixed MOBs with x-coord 0 being visible, affected bowling
- fixed overflow flag calculation, affected checkers and reversi
- more compatibility work
- MAME:
- stopped treating warnings as errors
- set System Bus correctly
- melonDS:
- updated core, adding experimental DSiWare support
- enabled memory callbacks
- fixed empty strings in firmware settings preventing roms from loading (#3030)
- Mupen64Plus:
- fixed haptic feedback causing movie playback to crash
- enabled GLideN64's texture wildcard support (#3104)
- NesHawk:
- added mapper for Pokemon bootlegs
- fixed not parsing iNES v2 headers (#3082)
- other small accuracy improvements and bugfixes
- O2Hawk:
- fixed blobbers and Popeye
- PCEHawk:
- fixed crash related to framebuffer resizing (#3018)
- SMSHawk:
- fixed sprite collision inaccuracy (#1611), affected Ecco the Dolphin
- fixed Fray (vert lock update)
- fixed SMS backdrop colors
- fixed ys (JPN) by emulating VRAM masking bit
- improved SG-1000 8kb ram adapter emulation
- VectrexHawk:
- implemented 64K bank switching
- A7800Hawk: