* Fixed empty menu in Supervision 16 in 1.
* Fixed softlist loading of GB 63 in 1 and hooked it up with a compatible board type. Removed old partially-working code.
* Removed a spurious line in PCB loader that set WRAM in SMB2J bootlegs--they don't have any!
Software list items promoted to working (nes.xml)
---------------------------------------
Ghostbusters 63 in 1
Super 128k - 16 in 1
* Automatically use delegate_mfp_compatible to generate an adaptor for
member functions that return non-scalar, non-reference types
(partially addresses #8597).
* Enabled the MSVC delegate implemenation for MSVC on AArch64.
* Switched back to neater delegate types for layout item bounds and
colour.
-docs: Updated the example layout links to point to 0.235 - this means
there's now an example of embedded SVG.
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.
- The MCU for the sharrier1 set 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
* 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.
- Removed code for both BMC-NOVEL1 and BMC-NOVEL2 which are indentical to BMC-21IN1 and BMC-GKB, respectively. This fixes graphics for the NOVEL2 game as well.
New working software list additions
-----------------------------------
9 in 1 (Journey to the West) [anonymous]
Super 8 in 1 (Supervision menu) [v5100v5100]
* util/strformat.h: Found a SFINAE trick to detect absence of stream-out
operators. Fixes building with C++20 standard library (#6275).
* util/delegate.h: Fixed a commend and removed an unused declaration
from MSVC member function pointer wrapper.
* util/delegate.h: Added support for discarding functoid return values
for delegates returning void.
* util/delegate.h: Added support for using std::ref to bind non-copyable
functoids.
* 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().
-Added a few more documentation comments.