ti99: devcb3 for the slot devices (nw)

This commit is contained in:
Michael Zapf 2018-08-13 16:42:24 +02:00
parent cbbfc0eb83
commit 3806487a10
16 changed files with 281 additions and 332 deletions

View File

@ -55,6 +55,15 @@ void ti99_colorbus_device::device_config_complete()
m_connected = dynamic_cast<device_ti99_colorbus_interface*>(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);
}

View File

@ -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

View File

@ -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);
}

View File

@ -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<bus::ti99::gromport::gromport_device &>(*device).set_mask(0x1fff); \
MCFG_DEVICE_SLOT_INTERFACE(gromport4, "single", false)
#define MCFG_GROMPORT8_ADD( _tag ) \
MCFG_DEVICE_ADD(_tag, TI99_GROMPORT, 0) \
downcast<bus::ti99::gromport::gromport_device &>(*device).set_mask(0x3fff); \
MCFG_DEVICE_SLOT_INTERFACE(gromport8, "single", false)
#define MCFG_GROMPORT_READY_HANDLER( _ready ) \
downcast<bus::ti99::gromport::gromport_device &>(*device).set_ready_callback(DEVCB_##_ready);
#define MCFG_GROMPORT_RESET_HANDLER( _reset ) \
downcast<bus::ti99::gromport::gromport_device &>(*device).set_reset_callback(DEVCB_##_reset);
DECLARE_DEVICE_TYPE_NS(TI99_GROMPORT, bus::ti99::gromport, gromport_device)
#endif // MAME_BUS_TI99_GROMPORT_GROMPORT_H

View File

@ -43,7 +43,7 @@ public:
DECLARE_WRITE_LINE_MEMBER( gromclk_in );
template <class Object> devcb_base &set_ready_callback(Object &&cb) { return m_ready.set_callback(std::forward<Object>(cb)); }
auto ready_cb() { return m_ready.bind(); }
protected:
/* Constructor */
@ -140,9 +140,6 @@ private:
/******************************************************************************/
#define MCFG_DMUX_READY_HANDLER( _intcallb ) \
downcast<bus::ti99::internal::datamux_device &>(*device).set_ready_callback(DEVCB_##_intcallb);
} } } // end namespace bus::ti99::internal
DECLARE_DEVICE_TYPE_NS(TI99_DATAMUX, bus::ti99::internal, datamux_device)

View File

@ -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);
}

View File

@ -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<class Object> devcb_base &set_extint_callback(Object &&cb) { return m_console_extint.set_callback(std::forward<Object>(cb)); }
template<class Object> devcb_base &set_ready_callback(Object &&cb) { return m_console_ready.set_callback(std::forward<Object>(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<bus::ti99::internal::ioport_device &>(*device).set_extint_callback(DEVCB_##_extint);
#define MCFG_IOPORT_READY_HANDLER( _ready ) \
downcast<bus::ti99::internal::ioport_device &>(*device).set_ready_callback(DEVCB_##_ready);
#endif /* __TI99IOPORT__ */

View File

@ -95,6 +95,17 @@ void joyport_device::device_config_complete()
m_connected = dynamic_cast<device_ti99_joyport_interface*>(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);
}

View File

@ -54,8 +54,8 @@ public:
void write_port(int data);
void set_interrupt(int state);
void pulse_clock();
template <class Object> devcb_base &set_int_callback(Object &&cb) { return m_interrupt.set_callback(std::forward<Object>(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<bus::ti99::joyport::joyport_device &>(*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

View File

@ -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

View File

@ -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<device_ti99_peribox_card_interface *>(subdevices().first());
m_card = dynamic_cast<device_ti99_peribox_card_interface *>(get_card_device());
peribox_device *peb = dynamic_cast<peribox_device*>(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<peribox_device*>(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.

View File

@ -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 <class Object> devcb_base &set_inta_callback(Object &&cb) { return m_slot1_inta.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_intb_callback(Object &&cb) { return m_slot1_intb.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_ready_callback(Object &&cb) { return m_slot1_ready.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_lcp_callback(Object &&cb) { return m_slot1_lcp.set_callback(std::forward<Object>(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<peribox_slot_device> m_slot2;
required_device<peribox_slot_device> m_slot3;
required_device<peribox_slot_device> m_slot4;
required_device<peribox_slot_device> m_slot5;
required_device<peribox_slot_device> m_slot6;
required_device<peribox_slot_device> m_slot7;
required_device<peribox_slot_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<bus::ti99::peb::peribox_device &>(*device).set_inta_callback(DEVCB_##_inta);
#define MCFG_PERIBOX_INTB_HANDLER( _intb ) \
downcast<bus::ti99::peb::peribox_device &>(*device).set_intb_callback(DEVCB_##_intb);
#define MCFG_PERIBOX_READY_HANDLER( _ready ) \
downcast<bus::ti99::peb::peribox_device &>(*device).set_ready_callback(DEVCB_##_ready);
#define MCFG_PERIBOX_LCP_HANDLER( _lcp ) \
downcast<bus::ti99::peb::peribox_device &>(*device).set_lcp_callback(DEVCB_##_lcp);
} } } // end namespace bus::ti99::peb
DECLARE_DEVICE_TYPE_NS(TI99_PERIBOX, bus::ti99::peb, peribox_device)

View File

@ -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 )

View File

@ -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

View File

@ -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

View File

@ -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
/*