From 32a73f450da82c345b0f694bee311af34a5e717d Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Fri, 4 May 2018 03:01:32 +1000 Subject: Make MCFG_DEVICE_ADD and callable device types more flexible: * Allows defaulted clocks (see subtle example with vboy) * Allows additional constructors (see RS232 port in tranz330) * Allows use of device finder in place of tag in MCFG_DEVICE_ADD * Requires out-of-line destructor for devices using incomplete types * Requires XTAL or explicit u32 for clocks for devices with private types Devices must still define the standard constructor. When writing additional constructors, be aware that the constructor runs before device_add_mconfig in the context of the existing device, not the new device. See osborne1, zorba, tranz330, and vboy for examples of this in use. Compilation is a bit slower, but this is temporary while refactoring is in progress. Eliminated the need for MCFG_SOUND_ROUTE_EX. Removed macros from slot option configuration - they just obfuscated code and slowed it down with needless dynamic casts, but didn't actually simplify it. --- src/devices/bus/psx/ctlrport.cpp | 18 ++++++----- src/devices/bus/psx/ctlrport.h | 2 +- src/devices/bus/psx/gamebooster.cpp | 63 +++++++++++++++++++------------------ src/devices/bus/psx/multitap.h | 2 +- src/devices/bus/psx/parallel.cpp | 7 +++-- src/devices/bus/psx/parallel.h | 2 +- 6 files changed, 49 insertions(+), 45 deletions(-) (limited to 'src/devices/bus/psx') diff --git a/src/devices/bus/psx/ctlrport.cpp b/src/devices/bus/psx/ctlrport.cpp index 328c338c45f..2c9dd6ee957 100644 --- a/src/devices/bus/psx/ctlrport.cpp +++ b/src/devices/bus/psx/ctlrport.cpp @@ -58,18 +58,20 @@ void psxcontrollerports_device::device_start() // add controllers to define so they can be connected to the multitap #define PSX_CONTROLLERS \ - SLOT_INTERFACE("digital_pad", PSX_STANDARD_CONTROLLER) \ - SLOT_INTERFACE("dualshock_pad", PSX_DUALSHOCK) \ - SLOT_INTERFACE("analog_joystick", PSX_ANALOG_JOYSTICK) + device.option_add("digital_pad", PSX_STANDARD_CONTROLLER); \ + device.option_add("dualshock_pad", PSX_DUALSHOCK); \ + device.option_add("analog_joystick", PSX_ANALOG_JOYSTICK); -SLOT_INTERFACE_START(psx_controllers) +void psx_controllers(device_slot_interface &device) +{ PSX_CONTROLLERS - SLOT_INTERFACE("multitap", PSX_MULTITAP) -SLOT_INTERFACE_END + device.option_add("multitap", PSX_MULTITAP); +} -SLOT_INTERFACE_START(psx_controllers_nomulti) +void psx_controllers_nomulti(device_slot_interface &device) +{ PSX_CONTROLLERS -SLOT_INTERFACE_END +} WRITE_LINE_MEMBER(psxcontrollerports_device::write_dtr) { diff --git a/src/devices/bus/psx/ctlrport.h b/src/devices/bus/psx/ctlrport.h index 55c8d4473d3..3c6a44da0eb 100644 --- a/src/devices/bus/psx/ctlrport.h +++ b/src/devices/bus/psx/ctlrport.h @@ -12,7 +12,7 @@ MCFG_DEVICE_ADD(_tag, PSX_CONTROLLER_PORT, 0) \ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) -SLOT_INTERFACE_EXTERN(psx_controllers); +void psx_controllers(device_slot_interface &device); DECLARE_DEVICE_TYPE(PSXCONTROLLERPORTS, psxcontrollerports_device) DECLARE_DEVICE_TYPE(PSX_CONTROLLER_PORT, psx_controller_port_device) diff --git a/src/devices/bus/psx/gamebooster.cpp b/src/devices/bus/psx/gamebooster.cpp index 9b50b4754a0..230ebfea49b 100644 --- a/src/devices/bus/psx/gamebooster.cpp +++ b/src/devices/bus/psx/gamebooster.cpp @@ -117,37 +117,38 @@ WRITE16_MEMBER(psx_gamebooster_device::exp_w) } } -static SLOT_INTERFACE_START(gb_cart) - SLOT_INTERFACE_INTERNAL("rom", GB_STD_ROM) - SLOT_INTERFACE_INTERNAL("rom_mbc1", GB_ROM_MBC1) - SLOT_INTERFACE_INTERNAL("rom_mbc1col", GB_ROM_MBC1) - SLOT_INTERFACE_INTERNAL("rom_mbc2", GB_ROM_MBC2) - SLOT_INTERFACE_INTERNAL("rom_mbc3", GB_ROM_MBC3) - SLOT_INTERFACE_INTERNAL("rom_huc1", GB_ROM_MBC3) - SLOT_INTERFACE_INTERNAL("rom_huc3", GB_ROM_MBC3) - SLOT_INTERFACE_INTERNAL("rom_mbc5", GB_ROM_MBC5) - SLOT_INTERFACE_INTERNAL("rom_mbc6", GB_ROM_MBC6) - SLOT_INTERFACE_INTERNAL("rom_mbc7", GB_ROM_MBC7) - SLOT_INTERFACE_INTERNAL("rom_tama5", GB_ROM_TAMA5) - SLOT_INTERFACE_INTERNAL("rom_mmm01", GB_ROM_MMM01) - SLOT_INTERFACE_INTERNAL("rom_m161", GB_ROM_M161) - SLOT_INTERFACE_INTERNAL("rom_sachen1", GB_ROM_SACHEN1) - SLOT_INTERFACE_INTERNAL("rom_sachen2", GB_ROM_SACHEN2) - SLOT_INTERFACE_INTERNAL("rom_wisdom", GB_ROM_WISDOM) - SLOT_INTERFACE_INTERNAL("rom_yong", GB_ROM_YONG) - SLOT_INTERFACE_INTERNAL("rom_lasama", GB_ROM_LASAMA) - SLOT_INTERFACE_INTERNAL("rom_atvrac", GB_ROM_ATVRAC) - SLOT_INTERFACE_INTERNAL("rom_camera", GB_STD_ROM) - SLOT_INTERFACE_INTERNAL("rom_188in1", GB_ROM_188IN1) - SLOT_INTERFACE_INTERNAL("rom_sintax", GB_ROM_SINTAX) - SLOT_INTERFACE_INTERNAL("rom_chong", GB_ROM_CHONGWU) - SLOT_INTERFACE_INTERNAL("rom_licheng", GB_ROM_LICHENG) - SLOT_INTERFACE_INTERNAL("rom_digimon", GB_ROM_DIGIMON) - SLOT_INTERFACE_INTERNAL("rom_rock8", GB_ROM_ROCKMAN8) - SLOT_INTERFACE_INTERNAL("rom_sm3sp", GB_ROM_SM3SP) -// SLOT_INTERFACE_INTERNAL("rom_dkong5", GB_ROM_DKONG5) -// SLOT_INTERFACE_INTERNAL("rom_unk01", GB_ROM_UNK01) -SLOT_INTERFACE_END +static void gb_cart(device_slot_interface &device) +{ + device.option_add_internal("rom", GB_STD_ROM); + device.option_add_internal("rom_mbc1", GB_ROM_MBC1); + device.option_add_internal("rom_mbc1col", GB_ROM_MBC1); + device.option_add_internal("rom_mbc2", GB_ROM_MBC2); + device.option_add_internal("rom_mbc3", GB_ROM_MBC3); + device.option_add_internal("rom_huc1", GB_ROM_MBC3); + device.option_add_internal("rom_huc3", GB_ROM_MBC3); + device.option_add_internal("rom_mbc5", GB_ROM_MBC5); + device.option_add_internal("rom_mbc6", GB_ROM_MBC6); + device.option_add_internal("rom_mbc7", GB_ROM_MBC7); + device.option_add_internal("rom_tama5", GB_ROM_TAMA5); + device.option_add_internal("rom_mmm01", GB_ROM_MMM01); + device.option_add_internal("rom_m161", GB_ROM_M161); + device.option_add_internal("rom_sachen1", GB_ROM_SACHEN1); + device.option_add_internal("rom_sachen2", GB_ROM_SACHEN2); + device.option_add_internal("rom_wisdom", GB_ROM_WISDOM); + device.option_add_internal("rom_yong", GB_ROM_YONG); + device.option_add_internal("rom_lasama", GB_ROM_LASAMA); + device.option_add_internal("rom_atvrac", GB_ROM_ATVRAC); + device.option_add_internal("rom_camera", GB_STD_ROM); + device.option_add_internal("rom_188in1", GB_ROM_188IN1); + device.option_add_internal("rom_sintax", GB_ROM_SINTAX); + device.option_add_internal("rom_chong", GB_ROM_CHONGWU); + device.option_add_internal("rom_licheng", GB_ROM_LICHENG); + device.option_add_internal("rom_digimon", GB_ROM_DIGIMON); + device.option_add_internal("rom_rock8", GB_ROM_ROCKMAN8); + device.option_add_internal("rom_sm3sp", GB_ROM_SM3SP); +// device.option_add_internal("rom_dkong5", GB_ROM_DKONG5); +// device.option_add_internal("rom_unk01", GB_ROM_UNK01); +} MACHINE_CONFIG_START(psx_gamebooster_device::device_add_mconfig) /* cartslot */ diff --git a/src/devices/bus/psx/multitap.h b/src/devices/bus/psx/multitap.h index e4b40f1caf1..0ac7e6626f7 100644 --- a/src/devices/bus/psx/multitap.h +++ b/src/devices/bus/psx/multitap.h @@ -5,7 +5,7 @@ #include "ctlrport.h" -SLOT_INTERFACE_EXTERN(psx_controllers_nomulti); +void psx_controllers_nomulti(device_slot_interface &device); class psx_multitap_device : public device_t, public device_psx_controller_interface diff --git a/src/devices/bus/psx/parallel.cpp b/src/devices/bus/psx/parallel.cpp index 4fa5b29da66..b7947e11921 100644 --- a/src/devices/bus/psx/parallel.cpp +++ b/src/devices/bus/psx/parallel.cpp @@ -108,7 +108,8 @@ WRITE16_MEMBER(psx_parallel_slot_device::exp_w) // slot devices #include "gamebooster.h" -SLOT_INTERFACE_START( psx_parallel_devices ) - SLOT_INTERFACE("gamebooster", PSX_GAMEBOOSTER) -SLOT_INTERFACE_END +void psx_parallel_devices(device_slot_interface &device) +{ + device.option_add("gamebooster", PSX_GAMEBOOSTER); +} diff --git a/src/devices/bus/psx/parallel.h b/src/devices/bus/psx/parallel.h index 4ef05c52233..129b123ba3f 100644 --- a/src/devices/bus/psx/parallel.h +++ b/src/devices/bus/psx/parallel.h @@ -68,7 +68,7 @@ protected: // device type definition DECLARE_DEVICE_TYPE(PSX_PARALLEL_SLOT, psx_parallel_slot_device) -SLOT_INTERFACE_EXTERN( psx_parallel_devices ); +void psx_parallel_devices(device_slot_interface &device); #endif // MAME_BUS_PSX_PARALLEL_H -- cgit v1.2.3-70-g09d2