mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
ti99: Unified slot options; added MEMEN signal
This commit is contained in:
parent
3b5b03041d
commit
20fefdb782
@ -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
|
||||
*/
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user