* Adjusted levels in mustache.cpp, metlfrzr.cpp, xyonix.cpp, labybug.cpp, pgm.cpp, terracre.cpp, boogwing.cpp, astrocde.cpp, and gottlieb.cpp.
* Re-balanced some Votrax stuff, attempting to keep the chip output between +/-1.0.
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.
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.
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.
Also 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.
- Also, corrected previous related PCB name.
- Separately, set correct board type for Grandia games.
New working software list additions (nes.xml)
-----------------------------------
Donkey Kong 8 in 1 (JY-041) [anonymous]
fm_towns_cd.xml:
- Added the missing floppy disk to amarant3 [akira_2020]
- Added the missing floppy disk to hypnote [cyo.the.vile]
- Added the Planet's Edge bonus audio CD [redump.org]
- Removed the floppy part_id from uwaki, as it's not part of the floppy label
New working software list additions
-----------------------------------
CRI Postman [redump.org]
Dynamic English 3 - Upper Basic [redump.org, cyo.the.vile]
FM Towns Shougaku Ongaku (5-6-nensei-you) [redump.org, cyo.the.vile]
Hyper Aquarium - Kaisui-hen [redump.org]
Hyper Aquarium - Tansui-hen [redump.org]
Hyper Eigo Gakushuu System - New Crown Series 1 [redump.org]
Igo Doujou Yaburi - Menkyo Kaiden!! Mezase 7-kyuu [redump.org]
J.League 1994 Professional Soccer [redump.org]
Master CD - Fresh Series-you [redump.org]
Meikyoku Master (FM Towns Marty version) [redump.org]
Nihon no Rekishi - Sengoku-hen - Oda Nobunaga [redump.org]
Nihongo Nyuumon Dai-1-kan - Fundamental Japanese [redump.org]
Steepia [redump.org]
Touch the Music by Casiopea [redump.org, cyo.the.vile]
TownsPAINT V1.1 L21 [redump.org]
New not working software list additions
---------------------------------------
Dynamic English 2 - Basic [redump.org]
Replaced software list items
----------------------------
Highlight CD 20 [redump.org]
Okiraku TownsGEAR [redump.org]
Oshare Cooking [redump.org]
Sangokushi II [redump.org]
SimCity (HMB-121A) [redump.org]
Uwaki na Anata - Switch o Irete [redump.org]
Zak McKracken and The Alien Mindbenders [redump.org]
Software list items promoted to working
---------------------------------------
Hyper Note [cyo.the.vile]
- fmtowns_flop_*: renamed the Houma Hunter Lime entries to be more accurate to the disk labels
- fmtowns_flop_misc.xml: marked dpssg2, dpssg3, hhunt01, hhunt02, hhunt03 and superdps as alternate versions of the ones in the original list
- fmtowns_flop_misc.xml: removed duplicate entries that have been moved to the original list (drstop, rance, rance2) and were left here by mistake in the last update
New working software list additions (fmtowns_flop_orig.xml)
-----------------------------------------------------------
Houma Hunter Lime Dai-1-wa [cyo.the.vile]
Houma Hunter Lime Dai-2-wa [cyo.the.vile]
Houma Hunter Lime Dai-3-wa [cyo.the.vile]
Kitty World 2 [cyo.the.vile]
Metal Eye Special Disk [r09]
Sadistic Gamers Part-3 - Telephone Play [cyo.the.vile]
Sadistic Gamers Part-5 - Burusera Play [cyo.the.vile]
New working software list additions
-----------------------------------
* Sinnaneun Susjanala 2 (KR) [Gaming Alexandria, Dave "Foxhack" Silva]
* Ulihamkke Bulleoyo - Jayeongwa Hamkke (KR) [Gaming Alexandria, Dave "Foxhack" Silva]
* Ulihamkke Bulleoyo - Chinguwa Hamkke (KR) [Gaming Alexandria, Dave "Foxhack" Silva]
New NON_WORKING software list additions
-----------------------------------
* Depression - The Search For The NaSSA (NL)[DVC] [Gaming Alexandria, Dave "Foxhack" Silva]
* Nijmegen 'n rijk aan mogelijkheden (NL)[DVC] [Gaming Alexandria, Dave "Foxhack" Silva]
* 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.