ti99: Unified slot options; added MEMEN signal

This commit is contained in:
Michael Zapf 2016-03-31 22:34:24 +02:00
parent 3b5b03041d
commit 20fefdb782
2 changed files with 79 additions and 50 deletions

View File

@ -235,7 +235,7 @@ peribox_device::peribox_device(const machine_config &mconfig, device_type type,
: bus8z_device(mconfig, type, name, tag, owner, clock, shortname, source), : bus8z_device(mconfig, type, name, tag, owner, clock, shortname, source),
m_console_inta(*this), m_console_inta(*this),
m_console_intb(*this), m_console_intb(*this),
m_datamux_ready(*this), m_inta_flag(0), m_intb_flag(0), m_ready_flag(0), m_address_prefix(0) m_datamux_ready(*this), m_inta_flag(0), m_intb_flag(0), m_ready_flag(0), m_address_prefix(0), m_msast(false), m_memen(false)
{ {
for (int i=2; i <= 8; i++) m_slot[i] = nullptr; for (int i=2; i <= 8; i++) m_slot[i] = nullptr;
} }
@ -258,6 +258,9 @@ WRITE8_MEMBER(peribox_device::write)
SETADDRESS_DBIN_MEMBER(peribox_device::setaddress_dbin) SETADDRESS_DBIN_MEMBER(peribox_device::setaddress_dbin)
{ {
// Ignore the address when the TI-99/8 transmits the high-order 8 bits
// if (!m_memen) return;
for (int i=2; i <= 8; i++) for (int i=2; i <= 8; i++)
{ {
if (m_slot[i]!=nullptr) m_slot[i]->setaddress_dbin(space, offset | m_address_prefix, state); if (m_slot[i]!=nullptr) m_slot[i]->setaddress_dbin(space, offset | m_address_prefix, state);
@ -300,6 +303,34 @@ WRITE_LINE_MEMBER(peribox_device::senilb)
} }
} }
/*
MEMEN input. Used to start the external memory access cycle.
*/
WRITE_LINE_MEMBER(peribox_device::memen_in)
{
m_memen = (state==ASSERT_LINE);
}
/*
MSAST input. Defined by TI-99/8; we ignore this part in the PEB.
*/
WRITE_LINE_MEMBER(peribox_device::msast_in)
{
m_msast = (state==ASSERT_LINE);
}
/*
CLKOUT line
*/
WRITE_LINE_MEMBER(peribox_device::clock_in)
{
for (int i=2; i <= 8; i++)
{
if (m_slot[i]!=nullptr) m_slot[i]->clock_in(state);
}
}
/* /*
The Genmod modification is only of interest for the Geneve. It requires The Genmod modification is only of interest for the Geneve. It requires
to modify the decoding of each single card. to modify the decoding of each single card.
@ -402,26 +433,11 @@ SLOT_INTERFACE_START( peribox_slot )
SLOT_INTERFACE("tirs232", TI99_RS232) SLOT_INTERFACE("tirs232", TI99_RS232)
SLOT_INTERFACE("speech", TI99_SPEECH) SLOT_INTERFACE("speech", TI99_SPEECH)
SLOT_INTERFACE("horizon", TI99_HORIZON) SLOT_INTERFACE("horizon", TI99_HORIZON)
SLOT_INTERFACE_END
SLOT_INTERFACE_START( peribox_slot6 )
SLOT_INTERFACE("ide", TI99_IDE)
SLOT_INTERFACE("usbsm", TI99_USBSM)
SLOT_INTERFACE("tirs232", TI99_RS232)
SLOT_INTERFACE("speech", TI99_SPEECH)
SLOT_INTERFACE_END
SLOT_INTERFACE_START( peribox_slot7 )
SLOT_INTERFACE("ide", TI99_IDE) SLOT_INTERFACE("ide", TI99_IDE)
SLOT_INTERFACE("usbsm", TI99_USBSM) SLOT_INTERFACE("usbsm", TI99_USBSM)
SLOT_INTERFACE("bwg", TI99_BWG) SLOT_INTERFACE("bwg", TI99_BWG)
SLOT_INTERFACE("hfdc", TI99_HFDC) SLOT_INTERFACE("hfdc", TI99_HFDC)
SLOT_INTERFACE_END
SLOT_INTERFACE_START( peribox_slot8 )
SLOT_INTERFACE("tifdc", TI99_FDC) SLOT_INTERFACE("tifdc", TI99_FDC)
SLOT_INTERFACE("bwg", TI99_BWG)
SLOT_INTERFACE("hfdc", TI99_HFDC)
SLOT_INTERFACE_END SLOT_INTERFACE_END
MACHINE_CONFIG_FRAGMENT( peribox_device ) MACHINE_CONFIG_FRAGMENT( peribox_device )
@ -429,9 +445,9 @@ MACHINE_CONFIG_FRAGMENT( peribox_device )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT3, peribox_slot ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT3, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT4, peribox_slot ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT4, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slot ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot6 ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot7 ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot8 ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot )
MACHINE_CONFIG_END MACHINE_CONFIG_END
machine_config_constructor peribox_device::device_mconfig_additions() const machine_config_constructor peribox_device::device_mconfig_additions() const
@ -453,29 +469,17 @@ peribox_gen_device::peribox_gen_device(const machine_config &mconfig, const char
} }
// The BwG controller will not run with the Geneve due to its wait state // The BwG controller will not run with the Geneve due to its wait state
// logic; it assumes that before reading 5FF6 (data register), address 5FF7 // logic (see bwg.c)
// is also read (by means of the datamux). Unlike the 9900, the 9995 can read
// single bytes, so it will never trigger a read operation on 5FF7.
SLOT_INTERFACE_START( peribox_slot7nobwg )
SLOT_INTERFACE("ide", TI99_IDE)
SLOT_INTERFACE("usbsm", TI99_USBSM)
SLOT_INTERFACE("hfdc", TI99_HFDC)
SLOT_INTERFACE_END
SLOT_INTERFACE_START( peribox_slot8nobwg )
SLOT_INTERFACE("tifdc", TI99_FDC)
SLOT_INTERFACE("hfdc", TI99_HFDC)
SLOT_INTERFACE_END
SLOT_INTERFACE_START( peribox_slotg ) SLOT_INTERFACE_START( peribox_slotg )
SLOT_INTERFACE("memex", TI99_MEMEX) SLOT_INTERFACE("memex", TI99_MEMEX)
SLOT_INTERFACE("myarcmem", TI99_MYARCMEM)
SLOT_INTERFACE("samsmem", TI99_SAMSMEM)
SLOT_INTERFACE("pcode", TI99_P_CODE)
SLOT_INTERFACE("tirs232", TI99_RS232) SLOT_INTERFACE("tirs232", TI99_RS232)
SLOT_INTERFACE("speech", TI99_SPEECH) SLOT_INTERFACE("speech", TI99_SPEECH)
SLOT_INTERFACE("horizon", TI99_HORIZON) SLOT_INTERFACE("horizon", TI99_HORIZON)
SLOT_INTERFACE("ide", TI99_IDE)
SLOT_INTERFACE("usbsm", TI99_USBSM)
SLOT_INTERFACE("tifdc", TI99_FDC)
SLOT_INTERFACE("hfdc", TI99_HFDC)
SLOT_INTERFACE_END SLOT_INTERFACE_END
MACHINE_CONFIG_FRAGMENT( peribox_gen_device ) MACHINE_CONFIG_FRAGMENT( peribox_gen_device )
@ -483,9 +487,9 @@ MACHINE_CONFIG_FRAGMENT( peribox_gen_device )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT3, peribox_slotg ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT3, peribox_slotg )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT4, peribox_slotg ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT4, peribox_slotg )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slotg ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slotg )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot6 ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slotg )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot7nobwg ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slotg )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot8nobwg ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slotg )
MACHINE_CONFIG_END MACHINE_CONFIG_END
machine_config_constructor peribox_gen_device::device_mconfig_additions() const machine_config_constructor peribox_gen_device::device_mconfig_additions() const
@ -509,12 +513,11 @@ peribox_998_device::peribox_998_device(const machine_config &mconfig, const char
// the 99/8; it was intended to use the Hexbus interface. None of the memory // the 99/8; it was intended to use the Hexbus interface. None of the memory
// expansions are really supposed to work here. // expansions are really supposed to work here.
SLOT_INTERFACE_START( peribox_slot998 ) SLOT_INTERFACE_START( peribox_slot998 )
SLOT_INTERFACE("myarcmem", TI99_MYARCMEM)
SLOT_INTERFACE("samsmem", TI99_SAMSMEM)
SLOT_INTERFACE("horizon", TI99_HORIZON)
SLOT_INTERFACE("ide", TI99_IDE) SLOT_INTERFACE("ide", TI99_IDE)
SLOT_INTERFACE("usbsm", TI99_USBSM) SLOT_INTERFACE("usbsm", TI99_USBSM)
SLOT_INTERFACE("tirs232", TI99_RS232) SLOT_INTERFACE("tirs232", TI99_RS232)
SLOT_INTERFACE("tifdc", TI99_FDC)
SLOT_INTERFACE("hfdc", TI99_HFDC)
SLOT_INTERFACE_END SLOT_INTERFACE_END
MACHINE_CONFIG_FRAGMENT( peribox_998_device ) MACHINE_CONFIG_FRAGMENT( peribox_998_device )
@ -524,7 +527,7 @@ MACHINE_CONFIG_FRAGMENT( peribox_998_device )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slot998 ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slot998 )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot998 ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot998 )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot998 ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot998 )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot8nobwg ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot998 )
MACHINE_CONFIG_END MACHINE_CONFIG_END
machine_config_constructor peribox_998_device::device_mconfig_additions() const machine_config_constructor peribox_998_device::device_mconfig_additions() const
@ -546,7 +549,14 @@ SLOT_INTERFACE_START( peribox_slotp )
SLOT_INTERFACE("pcode", TI99_P_CODE) SLOT_INTERFACE("pcode", TI99_P_CODE)
SLOT_INTERFACE("tirs232", TI99_RS232) SLOT_INTERFACE("tirs232", TI99_RS232)
SLOT_INTERFACE("speech", TI99_SPEECH) SLOT_INTERFACE("speech", TI99_SPEECH)
SLOT_INTERFACE("myarcmem", TI99_MYARCMEM)
SLOT_INTERFACE("samsmem", TI99_SAMSMEM)
SLOT_INTERFACE("horizon", TI99_HORIZON) SLOT_INTERFACE("horizon", TI99_HORIZON)
SLOT_INTERFACE("ide", TI99_IDE)
SLOT_INTERFACE("usbsm", TI99_USBSM)
SLOT_INTERFACE("bwg", TI99_BWG)
SLOT_INTERFACE("hfdc", TI99_HFDC)
SLOT_INTERFACE("tifdc", TI99_FDC)
SLOT_INTERFACE_END SLOT_INTERFACE_END
SLOT_INTERFACE_START( peribox_ev_slot ) SLOT_INTERFACE_START( peribox_ev_slot )
@ -562,9 +572,9 @@ MACHINE_CONFIG_FRAGMENT( peribox_sg_device )
MCFG_PERIBOX_SLOT_ADD_DEF( PEBSLOT3, peribox_hs_slot, "hsgpl" ) MCFG_PERIBOX_SLOT_ADD_DEF( PEBSLOT3, peribox_hs_slot, "hsgpl" )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT4, peribox_slotp ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT4, peribox_slotp )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slotp ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slotp )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot6 ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slotp )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot7 ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slotp )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot8 ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slotp )
MACHINE_CONFIG_END MACHINE_CONFIG_END
machine_config_constructor peribox_sg_device::device_mconfig_additions() const machine_config_constructor peribox_sg_device::device_mconfig_additions() const
@ -588,9 +598,9 @@ MACHINE_CONFIG_FRAGMENT( peribox_ev_device )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT3, peribox_slot ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT3, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT4, peribox_slot ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT4, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slot ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot6 ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot7 ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot8 ) MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot )
MACHINE_CONFIG_END MACHINE_CONFIG_END
machine_config_constructor peribox_ev_device::device_mconfig_additions() const machine_config_constructor peribox_ev_device::device_mconfig_additions() const
@ -653,6 +663,11 @@ WRITE_LINE_MEMBER( peribox_slot_device::senilb )
m_card->set_senilb(state); m_card->set_senilb(state);
} }
WRITE_LINE_MEMBER( peribox_slot_device::clock_in )
{
m_card->clock_in(state);
}
/* /*
Genmod support Genmod support
*/ */

View File

@ -43,7 +43,7 @@ public:
template<class _Object> static devcb_base &static_set_intb_callback(device_t &device, _Object object) { return downcast<peribox_device &>(device).m_console_intb.set_callback(object); } template<class _Object> static devcb_base &static_set_intb_callback(device_t &device, _Object object) { return downcast<peribox_device &>(device).m_console_intb.set_callback(object); }
template<class _Object> static devcb_base &static_set_ready_callback(device_t &device, _Object object) { return downcast<peribox_device &>(device).m_datamux_ready.set_callback(object); } template<class _Object> static devcb_base &static_set_ready_callback(device_t &device, _Object object) { return downcast<peribox_device &>(device).m_datamux_ready.set_callback(object); }
// Next seven methods are called from the console // Next eight methods are called from the console
DECLARE_READ8Z_MEMBER(readz) override; DECLARE_READ8Z_MEMBER(readz) override;
DECLARE_WRITE8_MEMBER(write) override; DECLARE_WRITE8_MEMBER(write) override;
DECLARE_SETADDRESS_DBIN_MEMBER(setaddress_dbin) override; DECLARE_SETADDRESS_DBIN_MEMBER(setaddress_dbin) override;
@ -53,6 +53,11 @@ public:
DECLARE_WRITE_LINE_MEMBER(senila); DECLARE_WRITE_LINE_MEMBER(senila);
DECLARE_WRITE_LINE_MEMBER(senilb); DECLARE_WRITE_LINE_MEMBER(senilb);
DECLARE_WRITE_LINE_MEMBER( memen_in );
DECLARE_WRITE_LINE_MEMBER( msast_in );
DECLARE_WRITE_LINE_MEMBER( clock_in );
// Part of configuration // Part of configuration
void set_prefix(int prefix) { m_address_prefix = prefix; } void set_prefix(int prefix) { m_address_prefix = prefix; }
@ -86,6 +91,12 @@ protected:
// The TI-99/4(A) Flex Cable Interface (slot 1) pulls up the AMA/AMB/AMC lines to 1/1/1. // The TI-99/4(A) Flex Cable Interface (slot 1) pulls up the AMA/AMB/AMC lines to 1/1/1.
int m_address_prefix; int m_address_prefix;
// Most significant address byte strobe. Defined by TI-99/8.
bool m_msast;
// Memory enable.
bool m_memen;
}; };
/************************************************************************ /************************************************************************
@ -157,6 +168,7 @@ public:
DECLARE_WRITE_LINE_MEMBER(senila); DECLARE_WRITE_LINE_MEMBER(senila);
DECLARE_WRITE_LINE_MEMBER(senilb); DECLARE_WRITE_LINE_MEMBER(senilb);
DECLARE_WRITE_LINE_MEMBER(clock_in);
// Called from the card (direction to box) // Called from the card (direction to box)
DECLARE_WRITE_LINE_MEMBER( set_inta ); DECLARE_WRITE_LINE_MEMBER( set_inta );
@ -207,6 +219,8 @@ public:
void set_senila(int state) { m_senila = state; } void set_senila(int state) { m_senila = state; }
void set_senilb(int state) { m_senilb = state; } void set_senilb(int state) { m_senilb = state; }
virtual DECLARE_WRITE_LINE_MEMBER(clock_in) { };
protected: protected:
peribox_slot_device *m_slot; // using a link to the slot for callbacks peribox_slot_device *m_slot; // using a link to the slot for callbacks
int m_senila; int m_senila;