diff --git a/src/devices/bus/ti99/colorbus/colorbus.cpp b/src/devices/bus/ti99/colorbus/colorbus.cpp index 097f4c49924..7b0e8bd2f10 100644 --- a/src/devices/bus/ti99/colorbus/colorbus.cpp +++ b/src/devices/bus/ti99/colorbus/colorbus.cpp @@ -55,6 +55,15 @@ void ti99_colorbus_device::device_config_complete() m_connected = dynamic_cast(subdevices().first()); } +void ti99_colorbus_device::configure_slot() +{ + option_reset(); + option_add("busmouse", TI99_BUSMOUSE); + set_default_option("busmouse"); + set_fixed(false); +} + + /*****************************************************************************/ void device_ti99_colorbus_interface::interface_config_complete() @@ -63,8 +72,3 @@ void device_ti99_colorbus_interface::interface_config_complete() } } } } // end namespace bus::ti99::colorbus - -void ti99_colorbus_port(device_slot_interface &device) -{ - device.option_add("busmouse", TI99_BUSMOUSE); -} diff --git a/src/devices/bus/ti99/colorbus/colorbus.h b/src/devices/bus/ti99/colorbus/colorbus.h index 05f69aea0c5..30bbfed81ef 100644 --- a/src/devices/bus/ti99/colorbus/colorbus.h +++ b/src/devices/bus/ti99/colorbus/colorbus.h @@ -46,6 +46,7 @@ public: ti99_colorbus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); line_state left_button(); // left button is not connected to the V9938 but to a TMS9901 pin void poll(); + void configure_slot(); protected: void device_start() override { } @@ -59,12 +60,6 @@ private: } } } // end namespace bus::ti99::colorbus -void ti99_colorbus_port(device_slot_interface &device); - -#define MCFG_COLORBUS_MOUSE_ADD( _tag ) \ - MCFG_DEVICE_ADD(_tag, TI99_COLORBUS, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(ti99_colorbus_port, "busmouse", false) - DECLARE_DEVICE_TYPE_NS(TI99_COLORBUS, bus::ti99::colorbus, ti99_colorbus_device) #endif // MAME_BUS_TI99_COLORBUS_COLORBUS_H diff --git a/src/devices/bus/ti99/gromport/gromport.cpp b/src/devices/bus/ti99/gromport/gromport.cpp index 68262bde4e9..53570f22d79 100644 --- a/src/devices/bus/ti99/gromport/gromport.cpp +++ b/src/devices/bus/ti99/gromport/gromport.cpp @@ -263,6 +263,17 @@ ioport_constructor gromport_device::device_input_ports() const return INPUT_PORTS_NAME(gromport); } +void gromport_device::configure_slot(bool for998) +{ + option_reset(); + option_add("single", TI99_GROMPORT_SINGLE); + option_add("multi", TI99_GROMPORT_MULTI); + if (!for998) option_add("gkracker", TI99_GROMPORT_GK); + set_default_option("single"); + set_fixed(false); + set_mask(for998? 0x3fff : 0x1fff); +} + /*************************************************************************** Different versions of cartridge connections @@ -292,15 +303,3 @@ void cartridge_connector_device::device_config_complete() } } } // end namespace bus::ti99::gromport -void gromport4(device_slot_interface &device) -{ - device.option_add("single", TI99_GROMPORT_SINGLE); - device.option_add("multi", TI99_GROMPORT_MULTI); - device.option_add("gkracker", TI99_GROMPORT_GK); -} - -void gromport8(device_slot_interface &device) -{ - device.option_add("single", TI99_GROMPORT_SINGLE); - device.option_add("multi", TI99_GROMPORT_MULTI); -} diff --git a/src/devices/bus/ti99/gromport/gromport.h b/src/devices/bus/ti99/gromport/gromport.h index 7d370ce39d6..37460ed3f7a 100644 --- a/src/devices/bus/ti99/gromport/gromport.h +++ b/src/devices/bus/ti99/gromport/gromport.h @@ -46,6 +46,10 @@ public: void cartridge_inserted(); bool is_grom_idle(); + auto ready_cb() { return m_console_ready.bind(); } + auto reset_cb() { return m_console_reset.bind(); } + void configure_slot(bool for998); + protected: virtual void device_start() override; virtual void device_reset() override; @@ -92,25 +96,6 @@ protected: } } } // end namespace bus::ti99::gromport -void gromport4(device_slot_interface &device); -void gromport8(device_slot_interface &device); - -#define MCFG_GROMPORT4_ADD( _tag ) \ - MCFG_DEVICE_ADD(_tag, TI99_GROMPORT, 0) \ - downcast(*device).set_mask(0x1fff); \ - MCFG_DEVICE_SLOT_INTERFACE(gromport4, "single", false) - -#define MCFG_GROMPORT8_ADD( _tag ) \ - MCFG_DEVICE_ADD(_tag, TI99_GROMPORT, 0) \ - downcast(*device).set_mask(0x3fff); \ - MCFG_DEVICE_SLOT_INTERFACE(gromport8, "single", false) - -#define MCFG_GROMPORT_READY_HANDLER( _ready ) \ - downcast(*device).set_ready_callback(DEVCB_##_ready); - -#define MCFG_GROMPORT_RESET_HANDLER( _reset ) \ - downcast(*device).set_reset_callback(DEVCB_##_reset); - DECLARE_DEVICE_TYPE_NS(TI99_GROMPORT, bus::ti99::gromport, gromport_device) #endif // MAME_BUS_TI99_GROMPORT_GROMPORT_H diff --git a/src/devices/bus/ti99/internal/datamux.h b/src/devices/bus/ti99/internal/datamux.h index 72695279332..4ddc39e09e6 100644 --- a/src/devices/bus/ti99/internal/datamux.h +++ b/src/devices/bus/ti99/internal/datamux.h @@ -43,7 +43,7 @@ public: DECLARE_WRITE_LINE_MEMBER( gromclk_in ); - template devcb_base &set_ready_callback(Object &&cb) { return m_ready.set_callback(std::forward(cb)); } + auto ready_cb() { return m_ready.bind(); } protected: /* Constructor */ @@ -140,9 +140,6 @@ private: /******************************************************************************/ -#define MCFG_DMUX_READY_HANDLER( _intcallb ) \ - downcast(*device).set_ready_callback(DEVCB_##_intcallb); - } } } // end namespace bus::ti99::internal DECLARE_DEVICE_TYPE_NS(TI99_DATAMUX, bus::ti99::internal, datamux_device) diff --git a/src/devices/bus/ti99/internal/ioport.cpp b/src/devices/bus/ti99/internal/ioport.cpp index 1c9714c6682..f35f36f47f0 100644 --- a/src/devices/bus/ti99/internal/ioport.cpp +++ b/src/devices/bus/ti99/internal/ioport.cpp @@ -165,15 +165,21 @@ WRITE_LINE_MEMBER(ioport_attached_device::set_ready) m_ioport->m_console_ready(state); } +void ioport_device::configure_slot(bool withevpc) +{ + option_reset(); + if (withevpc) + { + option_add("peb", TI99_PERIBOX_EV); + set_default_option("peb"); + } + else + { + option_add("peb", TI99_PERIBOX); + set_default_option(nullptr); + } + set_fixed(false); +} + } } } // end namespace bus::ti99::internal -void ti99_io_port(device_slot_interface &device) -{ - device.option_add("peb", TI99_PERIBOX); -} - -void ti99_io_port_ev(device_slot_interface &device) -{ - device.option_add("peb", TI99_PERIBOX_EV); -} - diff --git a/src/devices/bus/ti99/internal/ioport.h b/src/devices/bus/ti99/internal/ioport.h index 0468649a72f..0cfac6a9419 100644 --- a/src/devices/bus/ti99/internal/ioport.h +++ b/src/devices/bus/ti99/internal/ioport.h @@ -59,9 +59,6 @@ class ioport_device : public device_t, public device_slot_interface public: ioport_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_extint_callback(Object &&cb) { return m_console_extint.set_callback(std::forward(cb)); } - template devcb_base &set_ready_callback(Object &&cb) { return m_console_ready.set_callback(std::forward(cb)); } - // Methods called from the console DECLARE_READ8Z_MEMBER( readz ); DECLARE_WRITE8_MEMBER( write ); @@ -72,6 +69,12 @@ public: DECLARE_WRITE_LINE_MEMBER( msast_in ); DECLARE_WRITE_LINE_MEMBER( clock_in ); + // Callbacks + auto extint_cb() { return m_console_extint.bind(); } + auto ready_cb() { return m_console_ready.bind(); } + + void configure_slot(bool withevpc); + protected: void device_start() override; void device_config_complete() override; @@ -87,21 +90,4 @@ private: DECLARE_DEVICE_TYPE_NS(TI99_IOPORT, bus::ti99::internal, ioport_device) -void ti99_io_port(device_slot_interface &device); -void ti99_io_port_ev(device_slot_interface &device); - -#define MCFG_IOPORT_ADD( _tag ) \ - MCFG_DEVICE_ADD(_tag, TI99_IOPORT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(ti99_io_port, nullptr, false) - -#define MCFG_IOPORT_ADD_WITH_PEB( _tag ) \ - MCFG_DEVICE_ADD(_tag, TI99_IOPORT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(ti99_io_port_ev, "peb", false) - -#define MCFG_IOPORT_EXTINT_HANDLER( _extint ) \ - downcast(*device).set_extint_callback(DEVCB_##_extint); - -#define MCFG_IOPORT_READY_HANDLER( _ready ) \ - downcast(*device).set_ready_callback(DEVCB_##_ready); - #endif /* __TI99IOPORT__ */ diff --git a/src/devices/bus/ti99/joyport/joyport.cpp b/src/devices/bus/ti99/joyport/joyport.cpp index 76173bf1e10..15f4bb9c4f8 100644 --- a/src/devices/bus/ti99/joyport/joyport.cpp +++ b/src/devices/bus/ti99/joyport/joyport.cpp @@ -95,6 +95,17 @@ void joyport_device::device_config_complete() m_connected = dynamic_cast(subdevices().first()); } +void joyport_device::configure_slot(bool withmouse, bool withhandset) +{ + option_reset(); + option_add("twinjoy", TI99_JOYSTICK); + if (withmouse) option_add("mecmouse", TI99_MECMOUSE); + if (withhandset) option_add("handset", TI99_HANDSET); + set_default_option("twinjoy"); + set_fixed(false); +} + + /*****************************************************************************/ void device_ti99_joyport_interface::interface_config_complete() @@ -104,21 +115,3 @@ void device_ti99_joyport_interface::interface_config_complete() } } } // end namespace bus::ti99::joyport -void ti99_joystick_port(device_slot_interface &device) -{ - device.option_add("twinjoy", TI99_JOYSTICK); - device.option_add("mecmouse", TI99_MECMOUSE); -} - -void ti99_joystick_port_gen(device_slot_interface &device) -{ - device.option_add("twinjoy", TI99_JOYSTICK); -} - -void ti99_joystick_port_994(device_slot_interface &device) -{ - device.option_add("twinjoy", TI99_JOYSTICK); - device.option_add("mecmouse", TI99_MECMOUSE); - device.option_add("handset", TI99_HANDSET); -} - diff --git a/src/devices/bus/ti99/joyport/joyport.h b/src/devices/bus/ti99/joyport/joyport.h index 3808f5bff7c..8f6a8a06572 100644 --- a/src/devices/bus/ti99/joyport/joyport.h +++ b/src/devices/bus/ti99/joyport/joyport.h @@ -54,8 +54,8 @@ public: void write_port(int data); void set_interrupt(int state); void pulse_clock(); - - template devcb_base &set_int_callback(Object &&cb) { return m_interrupt.set_callback(std::forward(cb)); } + auto int_cb() { return m_interrupt.bind(); } + void configure_slot(bool withmouse, bool withhandset); protected: void device_start() override; @@ -68,26 +68,6 @@ private: } } } // end namespace bus::ti99::joyport -void ti99_joystick_port(device_slot_interface &device); -void ti99_joystick_port_994(device_slot_interface &device); -void ti99_joystick_port_gen(device_slot_interface &device); - DECLARE_DEVICE_TYPE_NS(TI99_JOYPORT, bus::ti99::joyport, joyport_device) -#define MCFG_JOYPORT_INT_HANDLER( _intcallb ) \ - downcast(*device).set_int_callback(DEVCB_##_intcallb); - -#define MCFG_GENEVE_JOYPORT_ADD( _tag ) \ - MCFG_DEVICE_ADD(_tag, TI99_JOYPORT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(ti99_joystick_port_gen, "twinjoy", false) - -#define MCFG_TI_JOYPORT4A_ADD( _tag ) \ - MCFG_DEVICE_ADD(_tag, TI99_JOYPORT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(ti99_joystick_port, "twinjoy", false) - -#define MCFG_TI_JOYPORT4_ADD( _tag ) \ - MCFG_DEVICE_ADD(_tag, TI99_JOYPORT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(ti99_joystick_port_994, "twinjoy", false) - - #endif // MAME_BUS_TI99_JOYPORT_JOYPORT_H diff --git a/src/devices/bus/ti99/peb/evpc.cpp b/src/devices/bus/ti99/peb/evpc.cpp index 9c13e18317f..fa02660a3e5 100644 --- a/src/devices/bus/ti99/peb/evpc.cpp +++ b/src/devices/bus/ti99/peb/evpc.cpp @@ -495,7 +495,8 @@ MACHINE_CONFIG_START(snug_enhanced_video_device::device_add_mconfig) MCFG_SN76496_READY_HANDLER( WRITELINE(*this, snug_enhanced_video_device, ready_line) ) // Mouse connected to the color bus of the v9938 - MCFG_COLORBUS_MOUSE_ADD( COLORBUS_TAG ) + TI99_COLORBUS(config, m_colorbus, 0); + m_colorbus->configure_slot(); MACHINE_CONFIG_END diff --git a/src/devices/bus/ti99/peb/peribox.cpp b/src/devices/bus/ti99/peb/peribox.cpp index 8be7f7ed21a..0802d1dc1aa 100644 --- a/src/devices/bus/ti99/peb/peribox.cpp +++ b/src/devices/bus/ti99/peb/peribox.cpp @@ -233,27 +233,6 @@ namespace bus { namespace ti99 { namespace peb { #define PEBSLOT7 "slot7" #define PEBSLOT8 "slot8" -peribox_device::peribox_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock): - bus::ti99::internal::ioport_attached_device(mconfig, TI99_PERIBOX, tag, owner, clock), - m_slot1_inta(*this), - m_slot1_intb(*this), - m_slot1_lcp(*this), - m_slot1_ready(*this), - m_inta_flag(0), - m_intb_flag(0), - m_lcp_flag(0), - m_ready_flag(0), - m_msast(false), - m_memen(false), - m_ioport_connected(false) -{ - for (int i=2; i <= 8; i++) m_slot[i] = nullptr; - // The address prefix is actually created by the "Flex cable interface" - // which sits in slot 1. - m_address_prefix = 0x70000; - m_genmod = false; -} - /* Constructor called from subclasses. */ @@ -263,6 +242,13 @@ peribox_device::peribox_device(const machine_config &mconfig, device_type type, m_slot1_intb(*this), m_slot1_lcp(*this), m_slot1_ready(*this), + m_slot2(*this, PEBSLOT2), + m_slot3(*this, PEBSLOT3), + m_slot4(*this, PEBSLOT4), + m_slot5(*this, PEBSLOT5), + m_slot6(*this, PEBSLOT6), + m_slot7(*this, PEBSLOT7), + m_slot8(*this, PEBSLOT8), m_inta_flag(0), m_intb_flag(0), m_ready_flag(0), @@ -270,9 +256,18 @@ peribox_device::peribox_device(const machine_config &mconfig, device_type type, m_msast(false), m_memen(false) { + // The address prefix is actually created by the "Flex cable interface" + // which sits in slot 1. for (int i=2; i <= 8; i++) m_slot[i] = nullptr; } +peribox_device::peribox_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : peribox_device(mconfig, TI99_PERIBOX, tag, owner, clock) +{ + m_address_prefix = 0x70000; + m_genmod = false; +} + READ8Z_MEMBER(peribox_device::readz) { for (int i=2; i <= 8; i++) @@ -469,31 +464,42 @@ void peribox_device::device_config_complete() m_ready_flag = 0; } -void peribox_slot(device_slot_interface &device) +void peribox_device::configure_slot(peribox_slot_device &slot, int number) { - device.option_add("32kmem", TI99_32KMEM); - device.option_add("myarcmem", TI99_MYARCMEM); - device.option_add("samsmem", TI99_SAMSMEM); - device.option_add("pcode", TI99_P_CODE); - device.option_add("hsgpl", TI99_HSGPL); - device.option_add("tirs232", TI99_RS232); - device.option_add("speech", TI99_SPEECH); - device.option_add("horizon", TI99_HORIZON); - device.option_add("ide", TI99_IDE); - device.option_add("usbsm", TI99_USBSM); - device.option_add("bwg", TI99_BWG); - device.option_add("hfdc", TI99_HFDC); - device.option_add("tifdc", TI99_FDC); + slot.set_number(number); + slot.option_reset(); + slot.option_add("32kmem", TI99_32KMEM); + slot.option_add("myarcmem", TI99_MYARCMEM); + slot.option_add("samsmem", TI99_SAMSMEM); + slot.option_add("pcode", TI99_P_CODE); + slot.option_add("hsgpl", TI99_HSGPL); + slot.option_add("tirs232", TI99_RS232); + slot.option_add("speech", TI99_SPEECH); + slot.option_add("horizon", TI99_HORIZON); + slot.option_add("ide", TI99_IDE); + slot.option_add("usbsm", TI99_USBSM); + slot.option_add("bwg", TI99_BWG); + slot.option_add("hfdc", TI99_HFDC); + slot.option_add("tifdc", TI99_FDC); + slot.set_default_option(nullptr); + slot.set_fixed(false); } MACHINE_CONFIG_START(peribox_device::device_add_mconfig) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT2, peribox_slot ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT3, peribox_slot ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT4, peribox_slot ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slot ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot ) + TI99_PERIBOX_SLOT(config, m_slot2, 0 ); + m_slot2->configure_slot(2); + TI99_PERIBOX_SLOT(config, m_slot3, 0 ); + m_slot3->configure_slot(3); + TI99_PERIBOX_SLOT(config, m_slot4, 0 ); + m_slot4->configure_slot(4); + TI99_PERIBOX_SLOT(config, m_slot5, 0 ); + m_slot5->configure_slot(5); + TI99_PERIBOX_SLOT(config, m_slot6, 0 ); + m_slot6->configure_slot(6); + TI99_PERIBOX_SLOT(config, m_slot7, 0 ); + m_slot7->configure_slot(7); + TI99_PERIBOX_SLOT(config, m_slot8, 0 ); + m_slot8->configure_slot(8); MACHINE_CONFIG_END /**************************************************************************** @@ -507,34 +513,28 @@ peribox_ev_device::peribox_ev_device(const machine_config &mconfig, const char * m_genmod = false; } -void peribox_slotv(device_slot_interface &device) +void peribox_ev_device::configure_slot(peribox_slot_device &slot, int number) { - device.option_add("evpc", TI99_EVPC); - device.option_add("32kmem", TI99_32KMEM); - device.option_add("myarcmem", TI99_MYARCMEM); - device.option_add("samsmem", TI99_SAMSMEM); - device.option_add("pcode", TI99_P_CODE); - device.option_add("hsgpl", TI99_HSGPL); - device.option_add("tirs232", TI99_RS232); - device.option_add("speech", TI99_SPEECH); - device.option_add("horizon", TI99_HORIZON); - device.option_add("ide", TI99_IDE); - device.option_add("usbsm", TI99_USBSM); - device.option_add("bwg", TI99_BWG); - device.option_add("hfdc", TI99_HFDC); - device.option_add("tifdc", TI99_FDC); + slot.set_number(number); + slot.option_reset(); + slot.option_add("evpc", TI99_EVPC); + slot.option_add("32kmem", TI99_32KMEM); + slot.option_add("myarcmem", TI99_MYARCMEM); + slot.option_add("samsmem", TI99_SAMSMEM); + slot.option_add("pcode", TI99_P_CODE); + slot.option_add("hsgpl", TI99_HSGPL); + slot.option_add("tirs232", TI99_RS232); + slot.option_add("speech", TI99_SPEECH); + slot.option_add("horizon", TI99_HORIZON); + slot.option_add("ide", TI99_IDE); + slot.option_add("usbsm", TI99_USBSM); + slot.option_add("bwg", TI99_BWG); + slot.option_add("hfdc", TI99_HFDC); + slot.option_add("tifdc", TI99_FDC); + if (number==2) slot.set_default_option("evpc"); + slot.set_fixed(false); } -MACHINE_CONFIG_START(peribox_ev_device::device_add_mconfig) - MCFG_PERIBOX_SLOT_ADD_DEF( PEBSLOT2, peribox_slotv, "evpc" ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT3, peribox_slotv ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT4, peribox_slotv ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slotv ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slotv ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slotv ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slotv ) -MACHINE_CONFIG_END - /**************************************************************************** A variant of the box used for the Geneve. *****************************************************************************/ @@ -563,37 +563,36 @@ peribox_genmod_device::peribox_genmod_device(const machine_config &mconfig, cons // The BwG controller will not run with the Geneve due to its wait state // logic (see bwg.c) -void peribox_slotg(device_slot_interface &device) +void peribox_gen_device::configure_slot(peribox_slot_device &slot, int number) { - device.option_add("memex", TI99_MEMEX); - device.option_add("tirs232", TI99_RS232); - device.option_add("speech", TI99_SPEECH); - device.option_add("horizon", TI99_HORIZON); - device.option_add("ide", TI99_IDE); - device.option_add("usbsm", TI99_USBSM); - device.option_add("hfdc", TI99_HFDC); - device.option_add("tifdc", TI99_FDC); + slot.set_number(number); + slot.option_reset(); + slot.option_add("memex", TI99_MEMEX); + slot.option_add("tirs232", TI99_RS232); + slot.option_add("speech", TI99_SPEECH); + slot.option_add("horizon", TI99_HORIZON); + slot.option_add("ide", TI99_IDE); + slot.option_add("usbsm", TI99_USBSM); + slot.option_add("hfdc", TI99_HFDC); + slot.option_add("tifdc", TI99_FDC); + slot.set_fixed(false); } -MACHINE_CONFIG_START(peribox_gen_device::device_add_mconfig) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT2, peribox_slotg ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT3, peribox_slotg ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT4, peribox_slotg ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slotg ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slotg ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slotg ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slotg ) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(peribox_genmod_device::device_add_mconfig) - MCFG_PERIBOX_SLOT_ADD_DEF( PEBSLOT2, peribox_slotg, "memex" ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT3, peribox_slotg ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT4, peribox_slotg ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slotg ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slotg ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slotg ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slotg ) -MACHINE_CONFIG_END +void peribox_genmod_device::configure_slot(peribox_slot_device &slot, int number) +{ + slot.set_number(number); + slot.option_reset(); + slot.option_add("memex", TI99_MEMEX); + slot.option_add("tirs232", TI99_RS232); + slot.option_add("speech", TI99_SPEECH); + slot.option_add("horizon", TI99_HORIZON); + slot.option_add("ide", TI99_IDE); + slot.option_add("usbsm", TI99_USBSM); + slot.option_add("hfdc", TI99_HFDC); + slot.option_add("tifdc", TI99_FDC); + if (number==2) slot.set_default_option("memex"); + slot.set_fixed(false); +} /**************************************************************************** A variant of the box used for the SGCPU (aka TI-99/4P). @@ -606,48 +605,32 @@ peribox_sg_device::peribox_sg_device(const machine_config &mconfig, const char * m_genmod = false; } -void peribox_slotp(device_slot_interface &device) +void peribox_sg_device::configure_slot(peribox_slot_device &slot, int number) { - device.option_add("evpc", TI99_EVPC); - device.option_add("myarcmem", TI99_MYARCMEM); - device.option_add("samsmem", TI99_SAMSMEM); - device.option_add("pcode", TI99_P_CODE); - device.option_add("hsgpl", TI99_HSGPL); - device.option_add("tirs232", TI99_RS232); - device.option_add("speech", TI99_SPEECH); - device.option_add("horizon", TI99_HORIZON); - device.option_add("ide", TI99_IDE); - device.option_add("usbsm", TI99_USBSM); - device.option_add("bwg", TI99_BWG); - device.option_add("hfdc", TI99_HFDC); - device.option_add("tifdc", TI99_FDC); + slot.set_number(number); + slot.option_reset(); + slot.option_add("evpc", TI99_EVPC); + slot.option_add("myarcmem", TI99_MYARCMEM); + slot.option_add("samsmem", TI99_SAMSMEM); + slot.option_add("pcode", TI99_P_CODE); + slot.option_add("hsgpl", TI99_HSGPL); + slot.option_add("tirs232", TI99_RS232); + slot.option_add("speech", TI99_SPEECH); + slot.option_add("horizon", TI99_HORIZON); + slot.option_add("ide", TI99_IDE); + slot.option_add("usbsm", TI99_USBSM); + slot.option_add("bwg", TI99_BWG); + slot.option_add("hfdc", TI99_HFDC); + slot.option_add("tifdc", TI99_FDC); + if (number==2) slot.set_default_option("evpc"); + else if (number==3) slot.set_default_option("hsgpl"); + slot.set_fixed(false); } -MACHINE_CONFIG_START(peribox_sg_device::device_add_mconfig) - MCFG_PERIBOX_SLOT_ADD_DEF( PEBSLOT2, peribox_slotp, "evpc" ) - MCFG_PERIBOX_SLOT_ADD_DEF( PEBSLOT3, peribox_slotp, "hsgpl" ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT4, peribox_slotp ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slotp ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slotp ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slotp ) - MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slotp ) -MACHINE_CONFIG_END - /*************************************************************************** Implementation of a slot within the box. ****************************************************************************/ -int peribox_slot_device::get_index_from_tagname() -{ - const char *mytag = tag(); - int maxlen = strlen(mytag); - int i; - for (i=maxlen-1; i >=0; i--) - if (mytag[i] < 48 || mytag[i] > 57) break; - - return atoi(mytag+i+1); -} - peribox_slot_device::peribox_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, TI99_PERIBOX_SLOT, tag, owner, clock), device_slot_interface(mconfig, *this), @@ -710,13 +693,18 @@ void peribox_slot_device::device_start() void peribox_slot_device::device_config_complete() { - m_slotnumber = get_index_from_tagname(); - m_card = dynamic_cast(subdevices().first()); + m_card = dynamic_cast(get_card_device()); peribox_device *peb = dynamic_cast(owner()); if (peb) peb->set_slot_loaded(m_slotnumber, m_card ? this : nullptr); } +void peribox_slot_device::configure_slot(int number) +{ + peribox_device *peb = dynamic_cast(owner()); + if (peb) peb->configure_slot(*this, number); +} + /* These methods are called from the expansion cards. They add the slot number to identify the slot to the box. diff --git a/src/devices/bus/ti99/peb/peribox.h b/src/devices/bus/ti99/peb/peribox.h index d83c8f0aa44..7ba65b5cbd0 100644 --- a/src/devices/bus/ti99/peb/peribox.h +++ b/src/devices/bus/ti99/peb/peribox.h @@ -34,11 +34,6 @@ class peribox_device : public bus::ti99::internal::ioport_attached_device public: peribox_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_inta_callback(Object &&cb) { return m_slot1_inta.set_callback(std::forward(cb)); } - template devcb_base &set_intb_callback(Object &&cb) { return m_slot1_intb.set_callback(std::forward(cb)); } - template devcb_base &set_ready_callback(Object &&cb) { return m_slot1_ready.set_callback(std::forward(cb)); } - template devcb_base &set_lcp_callback(Object &&cb) { return m_slot1_lcp.set_callback(std::forward(cb)); } - // Next eight methods are called from the console DECLARE_READ8Z_MEMBER(readz) override; DECLARE_WRITE8_MEMBER(write) override; @@ -58,13 +53,20 @@ public: // Part of configuration void set_prefix(int prefix) { m_address_prefix = prefix; } + // Callbacks + auto inta_cb() { return m_slot1_inta.bind(); } + auto intb_cb() { return m_slot1_intb.bind(); } + auto ready_cb() { return m_slot1_ready.bind(); } + auto lcp_cb() { return m_slot1_lcp.bind(); } + protected: peribox_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); virtual void device_start() override; virtual void device_config_complete() override; - virtual void device_add_mconfig(machine_config &config) override; + void device_add_mconfig(machine_config &config) override; + virtual void configure_slot(peribox_slot_device &slot, int number); // Next three methods call back the console via slot 1 devcb_write_line m_slot1_inta; // INTA line (Box to console) @@ -75,6 +77,14 @@ protected: void set_slot_loaded(int slot, peribox_slot_device* slotdev); peribox_slot_device *m_slot[9]; // for the sake of simplicity we donate the first two positions (0,1) + required_device m_slot2; + required_device m_slot3; + required_device m_slot4; + required_device m_slot5; + required_device m_slot6; + required_device m_slot7; + required_device m_slot8; + // Propagators for the slot signals. All signals are active low, and // if any one slot asserts the line, the joint line is asserted. void inta_join(int slot, int state); @@ -116,7 +126,7 @@ public: peribox_sg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: - virtual void device_add_mconfig(machine_config &config) override; + void configure_slot(peribox_slot_device &slot, int number) override; }; /* @@ -128,7 +138,7 @@ public: peribox_ev_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: - virtual void device_add_mconfig(machine_config &config) override; + void configure_slot(peribox_slot_device &slot, int number) override; }; @@ -138,11 +148,11 @@ protected: class peribox_gen_device : public peribox_device { public: - peribox_gen_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); peribox_gen_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: - virtual void device_add_mconfig(machine_config &config) override; + peribox_gen_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + virtual void configure_slot(peribox_slot_device &slot, int number) override; }; /* @@ -154,7 +164,7 @@ public: peribox_genmod_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: - void device_add_mconfig(machine_config &config) override; + void configure_slot(peribox_slot_device &slot, int number) override; }; /***************************************************************************** @@ -229,6 +239,8 @@ public: // called from the box itself void set_genmod(bool set); + void configure_slot(int number); + void set_number(int number) { m_slotnumber = number; } protected: void device_start() override; @@ -241,26 +253,6 @@ private: const char* card_name() { return m_card->device().tag(); } }; -#define MCFG_PERIBOX_SLOT_ADD(_tag, _slot_intf) \ - MCFG_DEVICE_ADD(_tag, TI99_PERIBOX_SLOT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, nullptr, false) - -#define MCFG_PERIBOX_SLOT_ADD_DEF(_tag, _slot_intf, _default) \ - MCFG_DEVICE_ADD(_tag, TI99_PERIBOX_SLOT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _default, false) - -#define MCFG_PERIBOX_INTA_HANDLER( _inta ) \ - downcast(*device).set_inta_callback(DEVCB_##_inta); - -#define MCFG_PERIBOX_INTB_HANDLER( _intb ) \ - downcast(*device).set_intb_callback(DEVCB_##_intb); - -#define MCFG_PERIBOX_READY_HANDLER( _ready ) \ - downcast(*device).set_ready_callback(DEVCB_##_ready); - -#define MCFG_PERIBOX_LCP_HANDLER( _lcp ) \ - downcast(*device).set_lcp_callback(DEVCB_##_lcp); - } } } // end namespace bus::ti99::peb DECLARE_DEVICE_TYPE_NS(TI99_PERIBOX, bus::ti99::peb, peribox_device) diff --git a/src/mame/drivers/geneve.cpp b/src/mame/drivers/geneve.cpp index f23ef639e10..67b36f6329c 100644 --- a/src/mame/drivers/geneve.cpp +++ b/src/mame/drivers/geneve.cpp @@ -696,27 +696,30 @@ void geneve_state::machine_reset() MACHINE_CONFIG_START(geneve_state::geneve) geneve_common(config); + // Mapper MCFG_DEVICE_ADD(GENEVE_MAPPER_TAG, GENEVE_MAPPER, 0) MCFG_GENEVE_READY_HANDLER( WRITELINE(*this, geneve_state, mapper_ready) ) - // Peripheral expansion box (Geneve composition) - MCFG_DEVICE_ADD( TI_PERIBOX_TAG, TI99_PERIBOX_GEN, 0) - MCFG_PERIBOX_INTA_HANDLER( WRITELINE(*this, geneve_state, inta) ) - MCFG_PERIBOX_INTB_HANDLER( WRITELINE(*this, geneve_state, intb) ) - MCFG_PERIBOX_READY_HANDLER( WRITELINE(*this, geneve_state, ext_ready) ) + // Peripheral expansion box (Geneve composition) + TI99_PERIBOX_GEN(config, m_peribox, 0); + m_peribox->inta_cb().set(FUNC(geneve_state::inta)); + m_peribox->intb_cb().set(FUNC(geneve_state::intb)); + m_peribox->ready_cb().set(FUNC(geneve_state::ext_ready)); MACHINE_CONFIG_END MACHINE_CONFIG_START(geneve_state::genmod) geneve_common(config); + // Mapper MCFG_DEVICE_ADD(GENEVE_MAPPER_TAG, GENMOD_MAPPER, 0) MCFG_GENEVE_READY_HANDLER( WRITELINE(*this, geneve_state, mapper_ready) ) + // Peripheral expansion box (Geneve composition with Genmod and plugged-in Memex) - MCFG_DEVICE_ADD( TI_PERIBOX_TAG, TI99_PERIBOX_GENMOD, 0) - MCFG_PERIBOX_INTA_HANDLER( WRITELINE(*this, geneve_state, inta) ) - MCFG_PERIBOX_INTB_HANDLER( WRITELINE(*this, geneve_state, intb) ) - MCFG_PERIBOX_READY_HANDLER( WRITELINE(*this, geneve_state, ext_ready) ) + TI99_PERIBOX_GENMOD(config, m_peribox, 0); + m_peribox->inta_cb().set(FUNC(geneve_state::inta)); + m_peribox->intb_cb().set(FUNC(geneve_state::intb)); + m_peribox->ready_cb().set(FUNC(geneve_state::ext_ready)); MACHINE_CONFIG_END MACHINE_CONFIG_START(geneve_state::geneve_common) @@ -761,8 +764,11 @@ MACHINE_CONFIG_START(geneve_state::geneve_common) // User interface devices MCFG_DEVICE_ADD( GENEVE_KEYBOARD_TAG, GENEVE_KEYBOARD, 0 ) MCFG_GENEVE_KBINT_HANDLER( WRITELINE(*this, geneve_state, keyboard_interrupt) ) - MCFG_GENEVE_JOYPORT_ADD( TI_JOYPORT_TAG ) - MCFG_COLORBUS_MOUSE_ADD( COLORBUS_TAG ) + TI99_JOYPORT(config, m_joyport, 0); + m_joyport->configure_slot(false, false); + + TI99_COLORBUS(config, m_colorbus, 0); + m_colorbus->configure_slot(); // PFM expansion MCFG_AT29C040_ADD( GENEVE_PFM512_TAG ) diff --git a/src/mame/drivers/ti99_4p.cpp b/src/mame/drivers/ti99_4p.cpp index 316935f8ecc..0ad1a159a1f 100644 --- a/src/mame/drivers/ti99_4p.cpp +++ b/src/mame/drivers/ti99_4p.cpp @@ -1031,13 +1031,13 @@ MACHINE_CONFIG_START(ti99_4p_state::ti99_4p_60hz) MCFG_TMS9901_INTLEVEL_HANDLER( WRITE8( *this, ti99_4p_state, tms9901_interrupt) ) // Peripheral expansion box (SGCPU composition) - MCFG_DEVICE_ADD( TI_PERIBOX_TAG, TI99_PERIBOX_SG, 0) - MCFG_PERIBOX_INTA_HANDLER( WRITELINE(*this, ti99_4p_state, extint) ) - MCFG_PERIBOX_INTB_HANDLER( WRITELINE(*this, ti99_4p_state, notconnected) ) - MCFG_PERIBOX_READY_HANDLER( WRITELINE(*this, ti99_4p_state, ready_line) ) + TI99_PERIBOX_SG(config, m_peribox, 0); + m_peribox->inta_cb().set(FUNC(ti99_4p_state::extint)); + m_peribox->intb_cb().set(FUNC(ti99_4p_state::notconnected)); + m_peribox->ready_cb().set(FUNC(ti99_4p_state::ready_line)); // The SGCPU actually makes use of this pin which was unused before - MCFG_PERIBOX_LCP_HANDLER( WRITELINE(*this, ti99_4p_state, video_interrupt_in) ) + m_peribox->lcp_cb().set(FUNC(ti99_4p_state::video_interrupt_in)); // Scratch pad RAM 1024 bytes (4 times the size of the TI-99/4A) MCFG_RAM_ADD(TI99_PADRAM_TAG) @@ -1056,7 +1056,8 @@ MACHINE_CONFIG_START(ti99_4p_state::ti99_4p_60hz) WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "cass_out", 0.25); // Joystick port - MCFG_TI_JOYPORT4A_ADD( TI_JOYPORT_TAG ) + TI99_JOYPORT(config, m_joyport, 0); + m_joyport->configure_slot(false, false); MACHINE_CONFIG_END diff --git a/src/mame/drivers/ti99_4x.cpp b/src/mame/drivers/ti99_4x.cpp index cb812237501..517f90ecc81 100644 --- a/src/mame/drivers/ti99_4x.cpp +++ b/src/mame/drivers/ti99_4x.cpp @@ -885,12 +885,13 @@ MACHINE_CONFIG_START(ti99_4x_state::ti99_4) MCFG_TMS9901_P9_HANDLER( WRITELINE( *this, ti99_4x_state, cassette_output) ) MCFG_TMS9901_INTLEVEL_HANDLER( WRITE8( *this, ti99_4x_state, tms9901_interrupt) ) - MCFG_DEVICE_ADD( TI99_DATAMUX_TAG, TI99_DATAMUX, 0) - MCFG_DMUX_READY_HANDLER( WRITELINE(*this, ti99_4x_state, console_ready_dmux) ) + TI99_DATAMUX(config, m_datamux, 0); + m_datamux->ready_cb().set(FUNC(ti99_4x_state::console_ready_dmux)); - MCFG_GROMPORT4_ADD( TI99_GROMPORT_TAG ) - MCFG_GROMPORT_READY_HANDLER( WRITELINE(*this, ti99_4x_state, console_ready_cart) ) - MCFG_GROMPORT_RESET_HANDLER( WRITELINE(*this, ti99_4x_state, console_reset) ) + TI99_GROMPORT(config, m_gromport, 0); + m_gromport->ready_cb().set(FUNC(ti99_4x_state::console_ready_cart)); + m_gromport->reset_cb().set(FUNC(ti99_4x_state::console_reset)); + m_gromport->configure_slot(false); // Scratch pad RAM 256 bytes MCFG_RAM_ADD(TI99_PADRAM_TAG) @@ -906,9 +907,10 @@ MACHINE_CONFIG_START(ti99_4x_state::ti99_4) MCFG_SOFTWARE_LIST_ADD("cart_list_ti99", "ti99_cart") // Input/output port - MCFG_IOPORT_ADD( TI99_IOPORT_TAG ) - MCFG_IOPORT_EXTINT_HANDLER( WRITELINE(*this, ti99_4x_state, extint) ) - MCFG_IOPORT_READY_HANDLER( WRITELINE(TI99_DATAMUX_TAG, bus::ti99::internal::datamux_device, ready_line) ) + TI99_IOPORT(config, m_ioport, 0); + m_ioport->configure_slot(false); + m_ioport->extint_cb().set(FUNC(ti99_4x_state::extint)); + m_ioport->ready_cb().set(TI99_DATAMUX_TAG, FUNC(bus::ti99::internal::datamux_device::ready_line)); // Sound hardware SPEAKER(config, "sound_out").front_center(); @@ -929,8 +931,9 @@ MACHINE_CONFIG_START(ti99_4x_state::ti99_4) MCFG_GROM_ADD( TI99_GROM2_TAG, 2, TI99_CONSOLEGROM, 0x4000, WRITELINE(*this, ti99_4x_state, console_ready_grom)) // Joystick port - MCFG_TI_JOYPORT4_ADD( TI_JOYPORT_TAG ) - MCFG_JOYPORT_INT_HANDLER( WRITELINE(*this, ti99_4x_state, handset_interrupt_in) ) + TI99_JOYPORT(config, m_joyport, 0); + m_joyport->configure_slot(true, true); + m_joyport->int_cb().set(FUNC(ti99_4x_state::handset_interrupt_in)); MACHINE_CONFIG_END /* @@ -1004,12 +1007,13 @@ MACHINE_CONFIG_START(ti99_4x_state::ti99_4a) MCFG_TMS9901_P9_HANDLER( WRITELINE( *this, ti99_4x_state, cassette_output) ) MCFG_TMS9901_INTLEVEL_HANDLER( WRITE8( *this, ti99_4x_state, tms9901_interrupt) ) - MCFG_DEVICE_ADD( TI99_DATAMUX_TAG, TI99_DATAMUX, 0) - MCFG_DMUX_READY_HANDLER( WRITELINE(*this, ti99_4x_state, console_ready_dmux) ) + TI99_DATAMUX(config, m_datamux, 0); + m_datamux->ready_cb().set(FUNC(ti99_4x_state::console_ready_dmux)); - MCFG_GROMPORT4_ADD( TI99_GROMPORT_TAG ) - MCFG_GROMPORT_READY_HANDLER( WRITELINE(*this, ti99_4x_state, console_ready_cart) ) - MCFG_GROMPORT_RESET_HANDLER( WRITELINE(*this, ti99_4x_state, console_reset) ) + TI99_GROMPORT(config, m_gromport, 0); + m_gromport->ready_cb().set(FUNC(ti99_4x_state::console_ready_cart)); + m_gromport->reset_cb().set(FUNC(ti99_4x_state::console_reset)); + m_gromport->configure_slot(false); // Scratch pad RAM 256 bytes MCFG_RAM_ADD(TI99_PADRAM_TAG) @@ -1025,9 +1029,10 @@ MACHINE_CONFIG_START(ti99_4x_state::ti99_4a) MCFG_SOFTWARE_LIST_ADD("cart_list_ti99", "ti99_cart") // Input/output port - MCFG_IOPORT_ADD( TI99_IOPORT_TAG ) - MCFG_IOPORT_EXTINT_HANDLER( WRITELINE(*this, ti99_4x_state, extint) ) - MCFG_IOPORT_READY_HANDLER( WRITELINE(TI99_DATAMUX_TAG, bus::ti99::internal::datamux_device, ready_line) ) + TI99_IOPORT(config, m_ioport, 0); + m_ioport->configure_slot(false); + m_ioport->extint_cb().set(FUNC(ti99_4x_state::extint)); + m_ioport->ready_cb().set(TI99_DATAMUX_TAG, FUNC(bus::ti99::internal::datamux_device::ready_line)); // Sound hardware SPEAKER(config, "sound_out").front_center(); @@ -1048,7 +1053,9 @@ MACHINE_CONFIG_START(ti99_4x_state::ti99_4a) MCFG_GROM_ADD( TI99_GROM2_TAG, 2, TI99_CONSOLEGROM, 0x4000, WRITELINE(*this, ti99_4x_state, console_ready_grom)) // Joystick port - MCFG_TI_JOYPORT4A_ADD( TI_JOYPORT_TAG ) + TI99_JOYPORT(config, m_joyport, 0); + m_joyport->configure_slot(true, false); + MACHINE_CONFIG_END /* @@ -1165,11 +1172,13 @@ MACHINE_CONFIG_START(ti99_4x_state::ti99_4ev_60hz) MCFG_TMS9901_P9_HANDLER( WRITELINE( *this, ti99_4x_state, cassette_output) ) MCFG_TMS9901_INTLEVEL_HANDLER( WRITE8( *this, ti99_4x_state, tms9901_interrupt) ) - MCFG_DEVICE_ADD( TI99_DATAMUX_TAG, TI99_DATAMUX, 0) - MCFG_DMUX_READY_HANDLER( WRITELINE(*this, ti99_4x_state, console_ready_dmux) ) - MCFG_GROMPORT4_ADD( TI99_GROMPORT_TAG ) - MCFG_GROMPORT_READY_HANDLER( WRITELINE(*this, ti99_4x_state, console_ready_cart) ) - MCFG_GROMPORT_RESET_HANDLER( WRITELINE(*this, ti99_4x_state, console_reset) ) + TI99_DATAMUX(config, m_datamux, 0); + m_datamux->ready_cb().set(FUNC(ti99_4x_state::console_ready_dmux)); + + TI99_GROMPORT(config, m_gromport, 0); + m_gromport->ready_cb().set(FUNC(ti99_4x_state::console_ready_cart)); + m_gromport->reset_cb().set(FUNC(ti99_4x_state::console_reset)); + m_gromport->configure_slot(false); // Scratch pad RAM 256 bytes MCFG_RAM_ADD(TI99_PADRAM_TAG) @@ -1188,9 +1197,10 @@ MACHINE_CONFIG_START(ti99_4x_state::ti99_4ev_60hz) MCFG_SOFTWARE_LIST_ADD("cart_list_ti99", "ti99_cart") // Input/output port - MCFG_IOPORT_ADD_WITH_PEB( TI99_IOPORT_TAG ) - MCFG_IOPORT_EXTINT_HANDLER( WRITELINE(*this, ti99_4x_state, extint) ) - MCFG_IOPORT_READY_HANDLER( WRITELINE(TI99_DATAMUX_TAG, bus::ti99::internal::datamux_device, ready_line) ) + TI99_IOPORT(config, m_ioport, 0); + m_ioport->configure_slot(true); + m_ioport->extint_cb().set(FUNC(ti99_4x_state::extint)); + m_ioport->ready_cb().set(TI99_DATAMUX_TAG, FUNC(bus::ti99::internal::datamux_device::ready_line)); // Cassette drives SPEAKER(config, "cass_out").front_center(); @@ -1205,7 +1215,8 @@ MACHINE_CONFIG_START(ti99_4x_state::ti99_4ev_60hz) MCFG_GROM_ADD( TI99_GROM2_TAG, 2, TI99_CONSOLEGROM, 0x4000, WRITELINE(*this, ti99_4x_state, console_ready_grom)) // Joystick port - MCFG_TI_JOYPORT4A_ADD( TI_JOYPORT_TAG ) + TI99_JOYPORT(config, m_joyport, 0); + m_joyport->configure_slot(false, false); MACHINE_CONFIG_END diff --git a/src/mame/drivers/ti99_8.cpp b/src/mame/drivers/ti99_8.cpp index 074e450c949..164bb18c444 100644 --- a/src/mame/drivers/ti99_8.cpp +++ b/src/mame/drivers/ti99_8.cpp @@ -762,9 +762,11 @@ MACHINE_CONFIG_START(ti99_8_state::ti99_8) MCFG_MAINBOARD8_RESET_CALLBACK(WRITELINE(*this, ti99_8_state, console_reset)) MCFG_MAINBOARD8_HOLD_CALLBACK(WRITELINE(*this, ti99_8_state, cpu_hold)) - MCFG_GROMPORT8_ADD( TI99_GROMPORT_TAG ) - MCFG_GROMPORT_READY_HANDLER( WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, system_grom_ready) ) - MCFG_GROMPORT_RESET_HANDLER( WRITELINE(*this, ti99_8_state, console_reset) ) + // Cartridge port + TI99_GROMPORT(config, m_gromport, 0); + m_gromport->ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::system_grom_ready)); + m_gromport->reset_cb().set(FUNC(ti99_8_state::console_reset)); + m_gromport->configure_slot(true); // RAM MCFG_RAM_ADD(TI998_SRAM_TAG) @@ -778,9 +780,10 @@ MACHINE_CONFIG_START(ti99_8_state::ti99_8) MCFG_SOFTWARE_LIST_ADD("cart_list_ti99", "ti99_cart") // I/O port - MCFG_IOPORT_ADD( TI99_IOPORT_TAG ) - MCFG_IOPORT_EXTINT_HANDLER( WRITELINE(*this, ti99_8_state, extint) ) - MCFG_IOPORT_READY_HANDLER( WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, pbox_ready) ) + TI99_IOPORT(config, m_ioport, 0); + m_ioport->configure_slot(false); + m_ioport->extint_cb().set(FUNC(ti99_8_state::extint)); + m_ioport->ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::pbox_ready)); // Hexbus MCFG_HEXBUS_ADD( TI_HEXBUS_TAG ) @@ -833,7 +836,9 @@ MACHINE_CONFIG_START(ti99_8_state::ti99_8) MCFG_GROM_ADD( TI998_GLIB32_TAG, 2, TI998_GROMLIB3_REG, 0x4000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, p3_grom_ready)) // Joystick port - MCFG_TI_JOYPORT4A_ADD( TI_JOYPORT_TAG ) + TI99_JOYPORT(config, m_joyport, 0); + m_joyport->configure_slot(true, false); + MACHINE_CONFIG_END /*