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),
m_console_inta(*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;
}
@ -258,6 +258,9 @@ WRITE8_MEMBER(peribox_device::write)
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++)
{
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
to modify the decoding of each single card.
@ -402,26 +433,11 @@ SLOT_INTERFACE_START( peribox_slot )
SLOT_INTERFACE("tirs232", TI99_RS232)
SLOT_INTERFACE("speech", TI99_SPEECH)
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("usbsm", TI99_USBSM)
SLOT_INTERFACE("bwg", TI99_BWG)
SLOT_INTERFACE("hfdc", TI99_HFDC)
SLOT_INTERFACE_END
SLOT_INTERFACE_START( peribox_slot8 )
SLOT_INTERFACE("tifdc", TI99_FDC)
SLOT_INTERFACE("bwg", TI99_BWG)
SLOT_INTERFACE("hfdc", TI99_HFDC)
SLOT_INTERFACE_END
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( PEBSLOT4, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot6 )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot7 )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot8 )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot )
MACHINE_CONFIG_END
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
// logic; it assumes that before reading 5FF6 (data register), address 5FF7
// 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
// logic (see bwg.c)
SLOT_INTERFACE_START( peribox_slotg )
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("speech", TI99_SPEECH)
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
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( PEBSLOT4, peribox_slotg )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slotg )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot6 )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot7nobwg )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot8nobwg )
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_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
// expansions are really supposed to work here.
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("usbsm", TI99_USBSM)
SLOT_INTERFACE("tirs232", TI99_RS232)
SLOT_INTERFACE("tifdc", TI99_FDC)
SLOT_INTERFACE("hfdc", TI99_HFDC)
SLOT_INTERFACE_END
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( PEBSLOT6, 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_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("tirs232", TI99_RS232)
SLOT_INTERFACE("speech", TI99_SPEECH)
SLOT_INTERFACE("myarcmem", TI99_MYARCMEM)
SLOT_INTERFACE("samsmem", TI99_SAMSMEM)
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_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( PEBSLOT4, peribox_slotp )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slotp )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot6 )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot7 )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot8 )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slotp )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slotp )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slotp )
MACHINE_CONFIG_END
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( PEBSLOT4, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT5, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot6 )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot7 )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot8 )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT6, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT7, peribox_slot )
MCFG_PERIBOX_SLOT_ADD( PEBSLOT8, peribox_slot )
MACHINE_CONFIG_END
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);
}
WRITE_LINE_MEMBER( peribox_slot_device::clock_in )
{
m_card->clock_in(state);
}
/*
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_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_WRITE8_MEMBER(write) override;
DECLARE_SETADDRESS_DBIN_MEMBER(setaddress_dbin) override;
@ -53,6 +53,11 @@ public:
DECLARE_WRITE_LINE_MEMBER(senila);
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
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.
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(senilb);
DECLARE_WRITE_LINE_MEMBER(clock_in);
// Called from the card (direction to box)
DECLARE_WRITE_LINE_MEMBER( set_inta );
@ -207,6 +219,8 @@ public:
void set_senila(int state) { m_senila = state; }
void set_senilb(int state) { m_senilb = state; }
virtual DECLARE_WRITE_LINE_MEMBER(clock_in) { };
protected:
peribox_slot_device *m_slot; // using a link to the slot for callbacks
int m_senila;