- New games: Danger Express (prototype), Head On Channel (prototype, hack), OOPArts (prototype, joystick hack), SegaSonic Bros. (prototype, hack) and 'unknown Paradise Automatique / TourVision bowling themed poker game with gum prizes (France)'
- New Working games: Killer Instinct 2 (upgrade kit)
- New Non-Working games: Que Long Gao Shou, 'Unknown medal game GS471' and Zelos (Japan, terminal)
- New clones: American Poker II - Jackpot (Spanish, set 1), American Poker II - Jackpot (Spanish, set 2), American Poker II - Jackpot (Spanish, set 3), beatmania complete MIX (ver AA-C), Carnival (cocktail, earlier), Casino Five (3315-12, U5-0), Cherry Bonus III (set 5, encrypted bootleg), Jor-eop Jeungmyeongseo (Korea), Leader (version Z 2F, Greece), Missile / Circuit (bootleg of Alpha Fighter / Head On), Mushiking The King Of Beetle (2K3 2ND Ver. 1.000-, Korea), Pucman, Route 16 (Sun Electronics, set 2) and 'unknown 'Pac-Man' gambling game (set 2)'
- New AGEMAME games: Diamonds & Hearts - Power Pay (10229311, NSW/ACT), Escalera Tobogan (MPU4, set 1), Escalera Tobogan (MPU4, set 2), Escalera Tobogan (MPU4, set 3) and Peacock Flutter (01J00011, NSW/ACT)
- New PinMAME games: Alaska, Black Magic 4, Cavalier, Crazy Race, Don Quijote, Faeton (6 digits), Fair Fight, Fast Track, The Flipper Game, Hardbody (rev. D), Hook (UK 4.06, display A4.01), Hot & Cold, MotorDome (rev. B), Mr Doom, Mr Evil, Poker Plus, Screech, Swashbuckler and Torneo
- Removed games: Motor Show (set 2)
- New drivers: konmedal020.cpp and recel.cpp
- New devices: ace_sp_reelctrl, ace_sp_reelctrl_pcp, demoneye_audio, irem_m37b_audio, irem_m37b_ue17b_audio and panther_audio
- New Clrmamepro: https://mamedev.emulab.it/clrmamepro/#downloads
. Dynamic Re-Compiling: Proof-of-concept for optimisation of calling out. Resolve address space virtual member function addresses on constrcution and call them directly. Provides a small but measurable improvement to performance in drivers that use the recompiler and access the memory system a lot (cpu\drcbex64.cpp).
. Hitachi H8: Fixed NMI on H8/300 (h8\h8_intc.cpp)
. hyperstone E1-32XN: Fixed issues with SARDI instruction (e132xs\e132xsdrc_ops.hxx and e132xsop.hxx)
. Intel 8257 DMA Controller: Fixed device so TC can work with multiple devices
. Intel I386: When DEBUG_MISSING_OPCODE is defined, log a small backtrace. This way together with the full list of bytes that form the non recognized opcode there are the addresses of the previously executed instructions.
. Motorola MC68HC11xx: Added stubs for TCTL registers. Documented coding bug in asma2k (mc68hc11\mc68hc11.cpp).
. Texas Instruments TMS32082: Various bug fixes
. Ensoniq ES5503: Initialize variable properly. Clean up code a little.
. OKI MSM6295/6376/9810 ADPCM: Explicitly clamp output streams to within range
. Sound Interface
. Added compile-time option to show visible annoying red border when sound is overdriven. Leaving it on for a bit at the start of the cycle so that devs might identify and fix some of these cases (emu\sound.h and ui\ui.cpp).
. Fixed overdriven sound in various Atari games (atarig1.cpp, atarig42.cpp, atarigx2.cpp, beathead.cpp, cybstorm.cpp, eprom.cpp, harddriv.cpp, skullxbo.cpp and thunderj.cpp)
. Clip less in xexex.cpp. Rebalance audio levels in most seta.cpp games. Reduced volume in Mario Bros. so we don't clip constantly just when running around (audio\mario.cpp).
. Reduced overdriven audio volumes (ID 02099) in 20pacgal.cpp, alpha68k_n.cpp, cvs.cpp, dkong.cpp, equites.cpp (audio\ad_sound.cpp), hng64.cpp, kaneko16.cpp, lethalj.cpp, mcr68.cpp, meritm.cpp, stellafr.cpp, tank8.cpp and audio\decobsmt.cpp (deco32.cpp, de_3.cpp, de_3b.cpp and whitestar.cpp)
. Fixed overdriven sound in atarisy1.cpp, dec0.cpp, gaelco3d.cpp, Gunbird and audio\segam1audio.cpp. Clamp audio from the custom device in cps3.cpp. Fixed ridiculously overdriven sound in toaplan2.cpp. Reduced volume in Ghox (spinner) to avoid overdriving speaker.
. Reduced overall volume to prevent overdrive in m72.cpp, segas16a.cpp and segas16b.cpp. Lowered OKIM6295 volume in sbmjb.cpp. Reduced audio levels to avoid hitting the limiter in cchasm.cpp.
. Various volume level adjustements to avoid hitting limiter in astrocde.cpp, boogwing.cpp, gottlieb.cpp, ladybug.cpp, metlfrzr.cpp, mustache.cpp, pgm.cpp, terracre.cpp and xyonix.cpp.
. Make the compressor optional (clamp overdrive to -1.0-1.0 when off) (emu\sound.cpp). Note: The audio compressor temporarily reduces the overall volume when the audio output is overdriven. The default is ON (\-compressor).
. ICS2115 WaveFront Synthesizer: Implemented pan for stereo support
. Votrax SC-01: Re-balanced some Votrax stuff, attempting to keep the chip output between +/-1.0.
. 8042 Keyboard/Mouse Controller: Improved management of PS/2 mouse. Added mouse interrupt. Support more mouse commands. Use command byte to enable/disable mouse and keyboard interrupts. Now the PS/2 mouse works with Windows 98. Mouse reset answers at least one byte if mouse disabled. Makes (MESS) nforcepc BIOS happy.
. Clock: Added setters for period, duty cycle and pulse width (machine\clock.cpp). Note: Set the period either with device_t m_clock, or with set_period if it needs to be more fine-tuned (m_clock has higher priority). The duty cycle can be changed with set_duty_cycle (default is 50%), or the pulse width (active time) can be set directly with set_pulse_width. Output signal at machine start is right after falling edge.
. CHDMAN: Allow specifying the desired block size for loose files/verifying a CHD's block size (util\harddisk.cpp)
. Added head count check (formats\wd177x_dsk.cpp). Prevents further evaluation of incompatible formats.
. Fixed address usage for serial port registers (machine\fdc37c665gt.cpp)
. Imgtool: Removed opresolv.h from emu.h and some other base headers. Splitted legacy floppy image class into a separate file. Clean up a lot of #includes in src/lib and tools\imgtool.
- New Cheat.dat (Wayder): https://ss1.xrea.com/nekoziman.s601.xrea.com/cheat/
- banprestoms.cpp: Identified some DIPs
- bartop52.cpp and maxaflex.cpp: Fixed ANTIC DLISTL and DLISTH writing to only affect the high and low byte component that is spread between m_dpage and m_doffs (video\antic.cpp)
- by35.cpp and mcr.cpp: Moved several constructors out of the header, fixed a save state issue and made outputs use finders (audio\bally.cpp).
- chihiro.cpp and naomi.cpp: Dumped Sega 838-13683-91 Rev.A JVS I/O (machine\jvs13551.cpp)
- cromptons.cpp: Improved notes
- cv1k.cpp: Cleanup driver
- dooyong.cpp: Reduced volume for YM2151/M6295 sound and coalesced some machine configuration
- exidy.cpp: Split up state class and reduced reliance on driver init functions
. Royal Poker 2 fixes and updates. Game is now essentially playable, but marked not working due to settings-saving issues. Hooked up M6295.
. Fixed issues with SARDI instruction (e132xs\e132xsdrc_ops.hxx and e132xsop.hxx), fixes Mosaic (F2 System).
- funkyjet.cpp: Moved everything into the driver file, as video\funkyjet.cpp only had one method.
- galpani3.cpp, jchan.cpp and suprnova.cpp: Fixed oob access on transcient incorrect sprites, use masking instead of % (video\sknsspr.cpp). Silence watchdog access in suprnova.cpp.
- goldnpkr.cpp: Base screen parameters on how games program the CRTC. Filled in proper screen parameters for goldnpkr, witchcrd and megadpkr. There may be other games that use different parameters. Demoted megadpkr and megadpkrb to not working as they can only boot once before writing timekeeper data that prevents booting again.
. Decryption progress on clone Super Seven. It now gets in game but needs GFX and color fixes, plus decryption might have some error lurking.
. Point reel tilemap to the right GFX rom offset for Cherry Master '97
- kikikai.cpp: Added PCB infos and corrected DIPs
. Simulate CPLD for clone Killer Instinct 2 (upgrade kit) (Game now playable). Original device was reverse-engineered with a logic analyzer and test ROMs. The CPLD behaves as a slave device, returning data when selected, based on previous writes.
. Driver cleanup. Added preliminary screen raw parameters.
. Identified konslot and konslot2 (Cross Magic Mark 2 (1996) and Fruits Magic (1996)). Fixed display resolution and offsets.
. Adjusted some DIPs definitions
. Made 'Powerful Chance' show the title screen
- meritm.cpp: Removed layer enable debug keys
- merits.cpp: Correctly identified Scorpion (Mar 24, 1992) as "Pub Time Darts II"
. Identified unknown game = Multy (Deta 1987). Added its PCB ASCII layout.
. Dumped the PROM for Basket
. Merged some input ports and removed tag lookups
. Added conf setting for switching Space Fever to monochrome
- qix.cpp: Removed PIA 5 popmessage. This PIA is supposedly unused.
- redalert.cpp: Converted sound boards to devices and removed a couple of trampolines, making the driver state class considerably tidier. Tidied up the driver a little.
- royalmah.cpp: Configured banking and views for Mahjong Shinkirou Deja Vu (Japan) and Mahjong If...? [BET]
. Decouple driver class from md_base_state (machine\megadriv.cpp and includes\megadriv.h)
. Improved Waku Waku Marine controls
. Revert MAME 0.231 video attributes workaround, it just causes new problems. Fixes random graphics flickering in Altered Beast (set
and clone Altered Beast (set 6) (ID 08065).
. Decapped and dumped I8751 MCU for clone Juuouki (set 7, Japan) (8751 317-0077), fixes music does not stop when the sequence of transformation begins (ID 04022).
- srmp2.cpp: Fixed no character voices in Super Real Mahjong Part 2/3 (includes\srmp2.h) (ID 08081)
. NMI is unconditionally requested for screen clock change commands, fixes booting in (MESS + hash\saturn.xml) bigichig, capgen1, capgen4 and capgen5 (machine\smpc.cpp).
. Guard against deleting partial sectors in cmd_delete_sector_data, fixes (MESS) pstarcol crash after first attract cycle. Added fixed status for NetLink, allow (MESS) dragndrm to actually boot (on -non drc).
- taito_z.cpp: Use output finders instead of output().set_value, split up state class a little.
- tiamc1.cpp: Set games release years to 198?. Actual release dates unknown. According to one of developer Konek-Gorbunok, Billiard and Kot-Rybolov was made before 1988, Snezhnaja Koroleva after 1988.
- toaplan1.cpp, twincobr.cpp and wardner.cpp: Use single pass priority drawing for sprite vs tilemap priority. Use device-specific delegate for priority mask. Use device_video_interface to find screen (video\toaplan_scu.cpp).
. acesp.cpp: Dumped the 68705P3 MCUs on 2 different types of sp.ACE fruit machine reel driver PCBs
. aristmk6.cpp: Updated documentation. Added new game_rom's to Wild Africa - Millioniser (0351083, US).
- Agress - Missile Daisenryaku (Japan): Fixed 'Lives' dipswitch
- Baby Fruits: Added year for clone Baby Fruits (25 pts version)
- Bonze Adventure: Added PCB infos
- California Chase: Don't try to use portr for half the bus width
- Carnival: Corrected PROM label and location for Carnival sets using standard PCB
- Change Lanes: Fixed steering problem, probably (ID 08075).
- Cosmic Chasm: Combined source files, added I/O port finder and reduced audio levels to avoid hitting the limiter.
- Cyberstorm: Cleaned up inputs and added comments to match observations and behaviours in test mode
- Darius: Added 'Continue Price' dipswitch to clone Darius (US, rev 2) (ID 08077)
- Dead Connection: Fixed mislabled and misassigned dipswitches (ID 08059)
- Fantasy Zone: Revert MAME 0.231 video attributes workaround for Fantasy Zone, it just causes new problems.
- Kart Duel: Redumped data roms
- Marvel Land: Made clone Marvel Land (Japan) the parent, the US prototype is an earlier incomplete build, it ends abruptly, lacks any end credits, and is missing many of the levels plus various other incomplete elements, see https://tcrf.net/Marvel_Land_(Arcade).
- Missile Command: Eliminated space.device() calls
- Multi Baby: Added basic mappings
. barni.cpp: Added layout. WIP.
. gts1.cpp: Various fixes. Still not working though. Descriptions for DIPs.
. s3.cpp, s4.cpp, s6.cpp and s6a.cpp: Use output finders instead of output().set_value, reduced tag lookups.
. spirit76.cpp: Added a layout. Mostly working. Fixed knocker when free game attained.
. mrgame.cpp: Added tilemap drawing - Dakar works properly and World Cup 90 has some issues. Fixed 5bpp sprite layout, only put attribute handler over tilemap attribute area of object RAM. Merged Motor Show (set 1) and Motor Show (set 2) and added a third BIOS rom set (cpu_2.ic13b and cpu_2.ic14b). Added new roms to Mac Attack.
- Pipeline: Hook up sound communications and YM2203. Fixed sound PPI mapping
- Play Sonic 4: Added inputs and DIPs as per test mode
- Pole Position II: 'Freeze' dipswitch works fine (ID 08090)
- Roller Jammer: Added screen raw parameters. Modernized MSM5205 hookup, fixes broken 'SOUND TEST' in service mode (ID 08076). Added missing input.
- ROLLing eX.tre.me: Mostly playable driver. Various bug fixes to the TMS320C82 core. TODO: TMS320C82 parallel processors are not emulated. PP0 transfers polygon data from a software FIFO to the graphics processor. This is currently HLE'd. PP1 most likely does sound mixing. This is currently not emulated. 93C66 EEPROM. Alpha blending (probably based on palette index like on gaelco3d). Minor Z-buffer issues. Wrong textures in a few places (could be a CPU core bug). Networking.
- Rumba Lumber: Corrected main CPU clock, fixes sound regression.
- Space Harrier: Hook up I8751 MCU and removed simulation. The MCU for clone Space Harrier (8751 315-5163) is handcrafted and marked BAD_DUMP. There is a slight issue with the initial synchronisation, so there is a hack to ignore the problematic write.
- Speedway: Redumped u29 gfx1 rom
- Taxi Driver: Reduced tag map lookups in driver
- Vigilante: Swapped punch/kick buttons to match with arcade cabinet (ID 08078)
- Wonder Planet: Decapped and dumped MCU. Removed simulation and clean ups.
- Fixed rom names in aristmk6.cpp, namcos1.cpp, segaatom.cpp, segas16b.cpp and vicdual.cpp
- Dipswitch fixes in banprestoms.cpp, blockout.cpp, cybstorm.cpp, d9final.cpp, darius.cpp, gts1.cpp, kikikai.cpp, konmedal68k.cpp, plsonic4.cpp, polepos.cpp, spirit76.cpp and taito_f2.cpp
- Description changes of Carry On (Pcp) (sp.ACE) (set 1), Carry On (Pcp) (sp.ACE) (set 2), Cross Magic Mark 2, Faeton (7 digits), Final Frontier (Bwb) (sp.ACE), Fruits Magic - The Magic Party, Hardbody (German rev. B), Hardbody (rev. C), Killer Instinct 2 (upgrade kit), MK6 System Software/Setchips, Makaimura (Japan), Makaimura (Japan Revision C), Makaimura (Japan Revision G), Marvel Land (US, prototype), MotorDome (German rev. B), Motor Show, MotorDome (rev. D), Pub Time Darts II Plus 2 with Solo Challenger (Mar 24, 1992), Queen of Sheba (10133721, NSW/ACT), Route 16 (Sun Electronics, set 1), SegaSonic Cosmo Fighter, Sotsugyo Shousho (Japan), SF-HiSplitter (set 1), SF-HiSplitter (set 2), SF-HiSplitter (alt sound), Space Fever (new version), Space Fever (old version), Space Fever (older version), 'unknown 'Pac-Man' gambling game (set 1)', Wild Tepee - Power Pay (20230211, NSW/ACT) and Wizard Ways - Lady Luck (20139121, NSW/ACT)
- Renamed (hardbody) to (hardbodyc), (konslot) to (crossmg2), (konslot2) to (fruitsmg), (marvland) to (marvlandup), (marvlandj) to (marvland), (scrpiondc) to (pubtimed2ch) and (unkslot) to (multy)
. VIDEO RENDERING SYSTEM
. Fixed UV rounding errors in fs_blit_palette16. Switched back to direct texture upload rather than CPU copy.
. Use D32F texture format instead of D24, should fix AMD hardware (bgfx\target.cpp).
. Switched fs_blit_palette16 to expand bitmap_ind16 contents to R8. Fixes vertical off-by-one shift in games with an odd pixel count along X.
. Fixed option -bgfx_backend d3d9 not working (ID 07883)
. Use I/O filter for zlib decompression, avoiding the need to use zlib directly (emu\render.cpp).
. Polygon rendering: Removed unused flags, expose object data array directly and added ability to register other poly_arrays. Minor naming/consistency cleanups (video\poly.h). Added docs for poly_manager (docs\source\techspecs\poly_manager.rst).
. Added rectangles operators & and | (intersection and union) from the existing &= and |= ones (lib\util\bitmap.h)
. Updated the example layout links to point to 0.235 - this means there's now an example of embedded SVG (techspecs\layout_files.rst).
. MEMORY SYSTEM
. Fixed a number of problems with specific boundaries (emu\emumem*)
. Take into account the pre-offsetting when expanding handlers (emu\emumem_hedr.ipp and emumem_hedw.ipp)
. Allow devices to specify a parent for the purpose of searching for ROMs (emu\device.cpp)
. Reworked device type definition macros to eliminate one level of indirection when using device types by name. Fixed a potential initialisation order issue that could affect device parent ROMs. Eliminated the need for DEFINE_DEVICE_TYPE_NS - just use DEFINE_DEVICE_TYPE or DEFINE_DEVICE_TYPE_PRIVATE with fully-qualified names. Changed device type aliases to static auto references in the headers. Added ROM parents for m68705u3 and a2diskiing. Added Doxygen comments for system/device definition macros and system flags. Updated Doxygen configuration to be based on up-to-date template, updated bootstrapped theme so it doesn't 404 (still won't work due to lack of support for jQuery smartmenus).
. Moved a few slot devices into anonymous namespaces, getting more stuff out of headers and reducing dependencies.
. MAME CORE
. One less level of indirection for functoid delegates (util\delegate.cpp). If a delegate is set to a functoid (e.g. a lambda) with a signature that is an exact match for the delegate's signature, it will be bound directly. If arguments or the return value need conversion, a static adaptor will be generated. This removes unnecessary indirection through std::function::operator() (util\delegate.cpp and emu\devdelegate.h).
. More cleanup and future-proofing (util\strformat.h, util\delegate.h). Found a SFINAE trick to detect absence of stream-out operators. Fixes building with C++20 standard library (util\strformat.h). Fixed a commend and removed an unused declaration from MSVC member function pointer wrapper. Added support for discarding functoid return values for delegates returning void. Added support for using std::ref to bind non-copyable functoids (util\delegate.h).
. Fixed multiple issues (util\delegate.cpp): Fixed this_pointer displacement being reapplied after delegates are copied - caused issues with classes with multiple inheritance. Made null member function pointer test conformant with Itanium C++ ABI specification. Corrected size of this pointer displacement - fixes issues on big Endian targets. Fixed function addresses for virtual member functions on targets that use function descriptors (e.g. PPC64). Applied shift to this pointer displacement for targets that use the ARM variant of the Itanium ABI. Fixed this pointer displacement not being applied for virtual member functions on targets using ARM variant of the Itanium ABI. Fixed this pointer displacement being incorrectly applied to vptr on targets using ARM variant of the Itanium ABI. Made less code conditionally compiled to make it easier to catch errors (util\delegate.cpp).
. Try to catch issues earlier and some cleanup (util\delegate.cpp). Optimised generation of late bind helper functions. The late bind helper function doesn't depend on the delegate signature - only on the late bind base class and function target class. Having it inside the delegate base class means it needs to be instantiated for every combination of late bind base class, function target class and delegate signature. In a typical driver file, there is only one late bind base class (delegate_late_bind), and there will be delegates with multiple signatures bound to function members of the same class (e.g. read and write handlers, possibly of different widths, bound to members of the driver state class). By moving the late bind helper out of the delegate base class, the number of required instantiations can be reduced. By moving the body out of the enclosing class declaration, the compiler can be encouraged to coalese instantiations across translation units. While this won't give a further reduction in compile time, it should at least reduce the output binary size by reducing duplication for devices that frequently have handlers installed in memory maps. Added an additional template parameter to delegates allowing the late bind base class to be changed if desired. Moved the MSVC implementation "this" pointer optimisation out-of-line and added logging. Also cleaned up the Itanium "this" pointer adjustment and code pointer resolution implementation to reduce duplication and conditional compilation. Made binding_type_exception give a more meaningful what() message than "std::exception". Added extensive validity tests for delegate functionality. Pointers to member functions are tested, including multiple inheritance, virtual and non-virtual member functions, and checking for generational loss across copying/assigning delegates. This should properly exercise "this" pointer adjustment for the Itanium and MSVC implementations, and vtable lookup for the Itanium implementation. So-called late binding functionality is tested, including exceptions on failure. Functoids are tested, although given the encapsulation it's not possible to check that an apator isn't generated when it shouldn't be. Fixed calculation of this_pointer when casting member function pointers across virtual inheritance relationships using MSVC with /vmg (util\delegate.cpp).
. Fixed structure return with MSVC C++ ABI. Automatically use delegate_mfp_compatible to generate an adaptor for member functions that return non-scalar, non-reference types (partially addresses GitHub #8597). Enabled the MSVC delegate implemenation for MSVC on AArch64. Switched back to neater delegate types for layout item bounds and colour (util\delegate.h).
. Made MSVC delegates capable of walking past all the thunks MSVC puts in the way of actually calling a member function. I'm not accounting for the "this" pointer being passed in RDX when the return value is an oversize scalar. This is harmless because it won't see anything that looks like a virtual call thunk using RCX when RCX points to uninitialised space for the return value. It just means virtual member function calls won't be bypassed if the return value is an oversize scalar, but that doesn't happen frequently anyway (util\delegate.cpp).
. Make comparison operators more technically correct. For Itanium ABI, two null member function pointers should compare equal even if the undefined bits differ. For MSVC ABI, there's all sorts of complexity around what happens when you compare pointers to member functions for different inheritance types. You'll still occasionally get weird results comparing pointers to members of different classes (util\delegate.h).
. Recognise a couple more MSVC thunks. The MSVC C++ ABI doesn't reserve the first vtable entry for classes without a virtual destructor, so the instruction to load the virtual member function address may not need an immediate displacement. Also recognise virtual member function call thunks for AArch64. Added a couple of comments about assumptions (util\delegate.cpp).
. PowerPC-64 Little Endian drops function descriptors. At some point I'll make a proper header ABI detection. There's too much stuff to keep in the delegate sources, and it will be useful for other stuff like recompilers (util\delegate.cpp).
. Use "compatible" delegates for MinGW GCC i686. The Itanium delegate has questionable value on on MinGW i686 as it injects a conditional branch in the hot path for delegates anyway to deal with the different __thiscall convention. It's somehow breaking and causing memory corruption in full builds, but I don't have the time to work out exactly which delegate type is the problematic one, especially not with a release coming soon. This will probably cause 32-bit MinGW builds to become substantially larger (util\delegate.h).
. Use output finders instead of output().set_value for atari_s1.cpp, by17.cpp, by35.cpp, by6803.cpp, harddriv.cpp, kenseim.cpp, opwolf.cpp, play_1.cpp, s3.cpp, s4.cpp, s6.cpp, s6a.cpp, taito_z.cpp and videopkr.cpp
. Used finders instead of tagmap lookups for rombanks in d9final.cpp, igs_m027.cpp, ppmast93.cpp, tmspoker.cpp and ultrsprt.cpp
. Used finders instead of tagmap lookups and other minor cleanups in airraid.cpp and hanaawas.cpp
. Started refactoring file I/O stuff. Added more modern generic I/O interfaces with implementation backed by stdio, osd_file and core_file, replacing io_generic. Also replaced core_file's build-in zlib compression with a filter. Added option to supply abstract I/O interface to unzip.cpp and un7z.cpp rather than filename. Converted osd_file, core_file, archive_file, chd_file and device_image_interface to use std::error_condition rather than their own error enums.
. Return would block when reading a socket with no data available - no error can be confused with remote shutdown (osd\modules\file\posixsocket.cpp and winsocket.cpp).
. Added fractional zoom-out support to the tilemap viewer (ui\viewgfx.cpp). Also added IPT_UI_ZOOM_AUTO for toggling auto-zoom mode without needing to cycle through all zoom levels.
. Made zoom controls a bit more intuitive
. The UI controls are described as zoom in/out, but they had the opposite effect on the palette and tile viewers. That has been changed to make them consistent with the tilemap viewer.
. Made the default zoom key not act as a toggle. People are familiar with the function of Ctrl+0/=/- in web browsers, so making them behave similarly in MAME should make it more approachable. Also added the default zoom key to the relevant documentation page.
. Implemented the default zoom key for the palette and tile viewers.
. In the tilemap viewer, if the view is in default expand to fit mode, zoom in/out starting from the actual zoom ratio. Once again, this behaves more like the zoom controls in a web browser displaying an image so it should be more intuitive.
. Made more messages from the tilemap viewer localisable. Fixed attempted loading of loose software does not work with MAME filemanager (util\zippath.cpp) (ID 08074).
. There were multiple issues at play here. After #8443 was applied, is_root was simply never returning true on Windows, as OSD_WINDOWS isn't actually defined outside libosd and libocore. This caused phantom parent items to appear in disk roots on Windows, but it meant that the check in zippath_resolve would always fail so the trailing backslash would be trimmed. Fixing the macro test in is_root meant the trailing backslash from C:\ would no longer be trimmed, which caused the stat in zippath_resolve to fail. Reduced tag map lookups in several drivers and devices. Removed an overload of bitswap that can be avoided using if constexpr (util\coretmpl.h). Added doxygen comments to some classes, and fixed several doxygen warnings. Test for _WIN32 rather than WIN32 (util, osd).
. In C++17 mode, WIN32 is no longer a predefined macro, although various things in 3rdparty define it to maintain legacy support. We're better off moving forward anyway for when WIN32 disappears entirely. WIN32 is not a reserved name, while _WIN32 is, starting with an underscore follwed by an uppercase letter.
. Prevent UI file select menu from crashing in error cases where no files can be found (ui\filesel.cpp)
. Removed VISIBLE_SOUND_OVERDRIVE compile-time option in favor of enabling the red overdrive border when speaker_report is non-zero (ui\ui.cpp)
. Use std::optional to make code clearer (util\unzip.cpp)
. Moved endianness type into lib\util header (lib\util\endianness.h; scripts\src\lib.lua, cpu\mips\mips1.cpp, emu\debug\dvmemory.cpp, emu\emucore.cpp/h, emumem.h, emumem_mud.cpp/h, memarray.cpp, mame\luaengine_mem.cpp and tools\unidasm.cpp)
. Fixed recently-introduced path-trashing bug in zippath_resolve (util\zippath.cpp)
. Update css for sphinx_rtd_theme to latest version, which includes selectors missing from old version (docs\source\techspecs\poly_manager.rst, docs\themes\sphinx_rtd_theme\static\css\theme.css). Update the RTD theme to the 1.0.0rc1 release. I noticed no issues building docs with this, and it includes sphinx 4 CSS fixes.
. Convert JED, PLA and JEDBIN parsers to (mostly) use ioprocs instead of raw memory interfaces.
. MiniMAWS: Better equality for devices (scripts\minimaws\lib\dbaccess.py and wsgiserve.py). Made table sort widgets (and the code behind them) less ugly. Added disclosure triangle controls to many sections (scripts\minimaws).
- VGM player: Added 31 new entries (hash\vgmplay.xml)
. Fixes for building with Clang 12.0.1 on Windows (src\3rdparty.lua, osd\windows.lua and input\input_dinput.cpp/h)
. Do not build with -m64 on riscv64 (makefile)
. Use std::clamp for clamping (sound\disc_sys.hxx and sound\ymz770.cpp)
. Octalize watchpoint hit message for memory spaces defined as octal
. Initialised m_readbuf_state on construction (debugger\debuggdbstub.cpp)
. Make debugger 'out' command step over return delay slots on SH architectures (debug\debugcpu.cpp and sh\sh_dasm.cpp)