(MESS) abc800: Added slot devices for the ABC 830/832/834/838 floppy disk drives, and the ABC 850/852/856 hard disk drives. [Curt Coder]

This commit is contained in:
Curt Coder 2013-11-13 20:45:50 +00:00
parent 9e1ebc7acd
commit 98c5c072e2
8 changed files with 555 additions and 146 deletions

View File

@ -20,6 +20,8 @@
const device_type ABC890 = &device_creator<abc890_device>;
const device_type ABC894 = &device_creator<abc894_device>;
const device_type ABC850 = &device_creator<abc850_device>;
const device_type ABC852 = &device_creator<abc852_device>;
const device_type ABC856 = &device_creator<abc856_device>;
//-------------------------------------------------
@ -76,8 +78,9 @@ machine_config_constructor abc894_device::device_mconfig_additions() const
static MACHINE_CONFIG_FRAGMENT( abc850 )
MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, "fast")
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc850_fast) // TODO this does not work within a device
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc850_fast)
MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, "xebec")
MCFG_DEVICE_CARD_DEFAULT_BIOS("xebec", "ro202")
MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, NULL)
MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, NULL)
MCFG_ABCBUS_SLOT_ADD("io5", abcbus_cards, NULL)
@ -97,6 +100,62 @@ machine_config_constructor abc850_device::device_mconfig_additions() const
}
//-------------------------------------------------
// MACHINE_DRIVER( abc852 )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( abc852 )
MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, "fast")
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc850_fast)
MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, "xebec")
MCFG_DEVICE_CARD_DEFAULT_BIOS("xebec", "basf6185")
MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, NULL)
MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, NULL)
MCFG_ABCBUS_SLOT_ADD("io5", abcbus_cards, NULL)
MCFG_ABCBUS_SLOT_ADD("io6", abcbus_cards, NULL)
MCFG_ABCBUS_SLOT_ADD("io7", abcbus_cards, NULL)
MACHINE_CONFIG_END
//-------------------------------------------------
// machine_config_additions - device-specific
// machine configurations
//-------------------------------------------------
machine_config_constructor abc852_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( abc852 );
}
//-------------------------------------------------
// MACHINE_DRIVER( abc856 )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( abc856 )
MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, "fast")
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc850_fast)
MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, "xebec")
MCFG_DEVICE_CARD_DEFAULT_BIOS("xebec", "micr1325")
MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, NULL)
MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, NULL)
MCFG_ABCBUS_SLOT_ADD("io5", abcbus_cards, NULL)
MCFG_ABCBUS_SLOT_ADD("io6", abcbus_cards, NULL)
MCFG_ABCBUS_SLOT_ADD("io7", abcbus_cards, NULL)
MACHINE_CONFIG_END
//-------------------------------------------------
// machine_config_additions - device-specific
// machine configurations
//-------------------------------------------------
machine_config_constructor abc856_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( abc856 );
}
//**************************************************************************
// LIVE DEVICE
@ -114,21 +173,28 @@ abc890_device::abc890_device(const machine_config &mconfig, device_type type, co
abc890_device::abc890_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, ABC890, "ABC 890", tag, owner, clock, "abc890", __FILE__),
device_abcbus_card_interface(mconfig, *this),
m_slots(7)
device_abcbus_card_interface(mconfig, *this)
{
}
abc894_device::abc894_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: abc890_device(mconfig, ABC894, "ABC 894", tag, owner, clock, "abc894", __FILE__)
{
m_slots = 3;
}
abc850_device::abc850_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: abc890_device(mconfig, ABC850, "ABC 850", tag, owner, clock, "abc850", __FILE__)
{
m_slots = 7;
}
abc852_device::abc852_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: abc890_device(mconfig, ABC852, "ABC 852", tag, owner, clock, "abc852", __FILE__)
{
}
abc856_device::abc856_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: abc890_device(mconfig, ABC856, "ABC 856", tag, owner, clock, "abc856", __FILE__)
{
}
@ -138,34 +204,6 @@ abc850_device::abc850_device(const machine_config &mconfig, const char *tag, dev
void abc890_device::device_start()
{
// find devices
m_expansion_slot[0] = dynamic_cast<abcbus_slot_device *>(subdevice("io1"));
m_expansion_slot[1] = dynamic_cast<abcbus_slot_device *>(subdevice("io2"));
m_expansion_slot[2] = dynamic_cast<abcbus_slot_device *>(subdevice("io3"));
m_expansion_slot[3] = dynamic_cast<abcbus_slot_device *>(subdevice("io4"));
m_expansion_slot[4] = dynamic_cast<abcbus_slot_device *>(subdevice("mem1"));
m_expansion_slot[5] = dynamic_cast<abcbus_slot_device *>(subdevice("mem2"));
m_expansion_slot[6] = dynamic_cast<abcbus_slot_device *>(subdevice("mem3"));
}
void abc894_device::device_start()
{
// find devices
m_expansion_slot[0] = dynamic_cast<abcbus_slot_device *>(subdevice("io1"));
m_expansion_slot[1] = dynamic_cast<abcbus_slot_device *>(subdevice("io2"));
m_expansion_slot[2] = dynamic_cast<abcbus_slot_device *>(subdevice("io3"));
}
void abc850_device::device_start()
{
// find devices
m_expansion_slot[0] = dynamic_cast<abcbus_slot_device *>(subdevice("io1"));
m_expansion_slot[1] = dynamic_cast<abcbus_slot_device *>(subdevice("io2"));
m_expansion_slot[2] = dynamic_cast<abcbus_slot_device *>(subdevice("io3"));
m_expansion_slot[3] = dynamic_cast<abcbus_slot_device *>(subdevice("io4"));
m_expansion_slot[4] = dynamic_cast<abcbus_slot_device *>(subdevice("io5"));
m_expansion_slot[5] = dynamic_cast<abcbus_slot_device *>(subdevice("io6"));
m_expansion_slot[6] = dynamic_cast<abcbus_slot_device *>(subdevice("io7"));
}
@ -175,106 +213,170 @@ void abc850_device::device_start()
void abc890_device::device_reset()
{
for (int i = 0; i < m_slots; i++)
for (device_t *device = first_subdevice(); device != NULL; device = device->next())
{
m_expansion_slot[i]->reset();
device->reset();
}
}
//**************************************************************************
// ABC BUS INTERFACE
//**************************************************************************
//-------------------------------------------------
// abcbus_cs - card select
//-------------------------------------------------
void abc890_device::abcbus_cs(UINT8 data)
{
for (int i = 0; i < m_slots; i++)
abcbus_slot_device_iterator iter(*this);
for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next())
{
m_expansion_slot[i]->cs_w(data);
slot->cs_w(data);
}
}
//-------------------------------------------------
// abcbus_inp - input
//-------------------------------------------------
UINT8 abc890_device::abcbus_inp()
{
UINT8 data = 0xff;
for (int i = 0; i < m_slots; i++)
abcbus_slot_device_iterator iter(*this);
for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next())
{
data &= m_expansion_slot[i]->inp_r();
data &= slot->inp_r();
}
return data;
}
//-------------------------------------------------
// abcbus_out - output
//-------------------------------------------------
void abc890_device::abcbus_out(UINT8 data)
{
for (int i = 0; i < m_slots; i++)
abcbus_slot_device_iterator iter(*this);
for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next())
{
m_expansion_slot[i]->out_w(data);
slot->out_w(data);
}
}
//-------------------------------------------------
// abcbus_stat - status
//-------------------------------------------------
UINT8 abc890_device::abcbus_stat()
{
UINT8 data = 0xff;
for (int i = 0; i < m_slots; i++)
abcbus_slot_device_iterator iter(*this);
for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next())
{
data &= m_expansion_slot[i]->stat_r();
data &= slot->stat_r();
}
return data;
}
//-------------------------------------------------
// abcbus_c1 - command 1
//-------------------------------------------------
void abc890_device::abcbus_c1(UINT8 data)
{
for (int i = 0; i < m_slots; i++)
abcbus_slot_device_iterator iter(*this);
for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next())
{
m_expansion_slot[i]->c1_w(data);
slot->c1_w(data);
}
}
//-------------------------------------------------
// abcbus_c2 - command 2
//-------------------------------------------------
void abc890_device::abcbus_c2(UINT8 data)
{
for (int i = 0; i < m_slots; i++)
abcbus_slot_device_iterator iter(*this);
for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next())
{
m_expansion_slot[i]->c2_w(data);
slot->c2_w(data);
}
}
//-------------------------------------------------
// abcbus_c3 - command 3
//-------------------------------------------------
void abc890_device::abcbus_c3(UINT8 data)
{
for (int i = 0; i < m_slots; i++)
abcbus_slot_device_iterator iter(*this);
for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next())
{
m_expansion_slot[i]->c3_w(data);
slot->c3_w(data);
}
}
//-------------------------------------------------
// abcbus_c4 - command 4
//-------------------------------------------------
void abc890_device::abcbus_c4(UINT8 data)
{
for (int i = 0; i < m_slots; i++)
abcbus_slot_device_iterator iter(*this);
for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next())
{
m_expansion_slot[i]->c4_w(data);
slot->c4_w(data);
}
}
//-------------------------------------------------
// abcbus_xmemfl - extended memory read
//-------------------------------------------------
UINT8 abc890_device::abcbus_xmemfl(offs_t offset)
{
UINT8 data = 0xff;
for (int i = 0; i < m_slots; i++)
abcbus_slot_device_iterator iter(*this);
for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next())
{
data &= m_expansion_slot[i]->xmemfl_r(offset);
data &= slot->xmemfl_r(offset);
}
return data;
}
//-------------------------------------------------
// abcbus_xmemw - extended memory write
//-------------------------------------------------
void abc890_device::abcbus_xmemw(offs_t offset, UINT8 data)
{
for (int i = 0; i < m_slots; i++)
abcbus_slot_device_iterator iter(*this);
for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next())
{
m_expansion_slot[i]->xmemw_w(offset, data);
slot->xmemw_w(offset, data);
}
}

View File

@ -60,13 +60,11 @@ protected:
virtual void abcbus_c4(UINT8 data);
virtual UINT8 abcbus_xmemfl(offs_t offset);
virtual void abcbus_xmemw(offs_t offset, UINT8 data);
int m_slots;
abcbus_slot_device *m_expansion_slot[MAX_SLOTS];
};
// ======================> abc894_device
class abc894_device : public abc890_device
{
public:
@ -75,13 +73,11 @@ public:
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const;
protected:
// device-level overrides
virtual void device_start();
};
// ======================> abc850_device
class abc850_device : public abc890_device
{
public:
@ -90,10 +86,32 @@ public:
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const;
};
protected:
// device-level overrides
virtual void device_start();
// ======================> abc852_device
class abc852_device : public abc890_device
{
public:
// construction/destruction
abc852_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const;
};
// ======================> abc856_device
class abc856_device : public abc890_device
{
public:
// construction/destruction
abc856_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const;
};
@ -101,6 +119,8 @@ protected:
extern const device_type ABC890;
extern const device_type ABC894;
extern const device_type ABC850;
extern const device_type ABC852;
extern const device_type ABC856;

View File

@ -84,10 +84,16 @@ void abcbus_slot_device::device_start()
//-------------------------------------------------
SLOT_INTERFACE_START( abcbus_cards )
SLOT_INTERFACE("exp", ABC890)
SLOT_INTERFACE("exp3", ABC894)
SLOT_INTERFACE("abc830", ABC830)
SLOT_INTERFACE("abc832", ABC832)
SLOT_INTERFACE("abc834", ABC834)
SLOT_INTERFACE("abc838", ABC838)
SLOT_INTERFACE("abc850", ABC850)
SLOT_INTERFACE("abc852", ABC852)
SLOT_INTERFACE("abc856", ABC856)
SLOT_INTERFACE("abc890", ABC890)
SLOT_INTERFACE("abc894", ABC894)
SLOT_INTERFACE("hdc", ABC_HDC)
SLOT_INTERFACE("hdd", ABC850)
SLOT_INTERFACE("dos", ABC_DOS)
SLOT_INTERFACE("fd2", ABC_FD2)
SLOT_INTERFACE("sio", ABC_SIO)

View File

@ -327,5 +327,9 @@ SLOT_INTERFACE_EXTERN( abcbus_cards );
SLOT_INTERFACE_EXTERN( abc1600bus_cards );
typedef device_type_iterator<&device_creator<abcbus_slot_device>, abcbus_slot_device> abcbus_slot_device_iterator;
#endif

View File

@ -97,6 +97,10 @@ Notes:
//**************************************************************************
const device_type LUXOR_55_21046 = &device_creator<luxor_55_21046_device>;
const device_type ABC830 = &device_creator<abc830_device>;
const device_type ABC832 = &device_creator<abc832_device>;
const device_type ABC834 = &device_creator<abc834_device>;
const device_type ABC838 = &device_creator<abc838_device>;
//-------------------------------------------------
@ -284,7 +288,7 @@ void luxor_55_21046_device::fdc_drq_w(bool state)
//-------------------------------------------------
// MACHINE_DRIVER( luxor_55_21046 )
// MACHINE_CONFIG( luxor_55_21046 )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( luxor_55_21046 )
@ -300,6 +304,18 @@ static MACHINE_CONFIG_FRAGMENT( luxor_55_21046 )
MACHINE_CONFIG_END
//-------------------------------------------------
// MACHINE_CONFIG( abc838 )
//-------------------------------------------------
static MACHINE_CONFIG_DERIVED( abc838, luxor_55_21046 )
MCFG_DEVICE_MODIFY(SAB1793_TAG":0")
MCFG_DEVICE_SLOT_INTERFACE(abc_floppies, "8dsdd", false)
MCFG_DEVICE_MODIFY(SAB1793_TAG":1")
MCFG_DEVICE_SLOT_INTERFACE(abc_floppies, "8dsdd", false)
MACHINE_CONFIG_END
//-------------------------------------------------
// machine_config_additions - device-specific
// machine configurations
@ -310,6 +326,11 @@ machine_config_constructor luxor_55_21046_device::device_mconfig_additions() con
return MACHINE_CONFIG_NAME( luxor_55_21046 );
}
machine_config_constructor abc838_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( abc838 );
}
//-------------------------------------------------
// INPUT_PORTS( luxor_55_21046 )
@ -340,12 +361,12 @@ INPUT_PORTS_START( luxor_55_21046 )
PORT_DIPNAME( 0x02, 0x02, "Drive 1 Sides" ) PORT_DIPLOCATION("SW1:2") PORT_CONDITION("SW3", 0x7f, EQUALS, 0x2c)
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x02, "Double" )
PORT_DIPNAME( 0x04, 0x00, "Drive 0 Tracks" ) PORT_DIPLOCATION("SW1:3") PORT_CONDITION("SW3", 0x7f, EQUALS, 0x2c)
PORT_DIPSETTING( 0x00, "80" )
PORT_DIPSETTING( 0x04, "40" )
PORT_DIPNAME( 0x08, 0x00, "Drive 1 Tracks" ) PORT_DIPLOCATION("SW1:4") PORT_CONDITION("SW3", 0x7f, EQUALS, 0x2c)
PORT_DIPSETTING( 0x00, "80" )
PORT_DIPSETTING( 0x08, "40" )
PORT_DIPNAME( 0x04, 0x04, "Drive 0 Tracks" ) PORT_DIPLOCATION("SW1:3") PORT_CONDITION("SW3", 0x7f, EQUALS, 0x2c)
PORT_DIPSETTING( 0x00, "40" )
PORT_DIPSETTING( 0x04, "80" )
PORT_DIPNAME( 0x08, 0x08, "Drive 1 Tracks" ) PORT_DIPLOCATION("SW1:4") PORT_CONDITION("SW3", 0x7f, EQUALS, 0x2c)
PORT_DIPSETTING( 0x00, "40" )
PORT_DIPSETTING( 0x08, "80" )
PORT_START("SW2")
PORT_DIPNAME( 0x0f, 0x01, "Drive Type" ) PORT_DIPLOCATION("SW2:1,2,3,4")
@ -387,6 +408,196 @@ INPUT_PORTS_START( luxor_55_21046 )
INPUT_PORTS_END
//-------------------------------------------------
// INPUT_PORTS( abc830 )
//-------------------------------------------------
INPUT_PORTS_START( abc830 )
PORT_START("SW1")
PORT_DIPNAME( 0x01, 0x00, "Drive 0 Sides" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x01, "Double" )
PORT_DIPNAME( 0x02, 0x00, "Drive 1 Sides" ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x02, "Double" )
PORT_DIPNAME( 0x04, 0x00, "Drive 0 Density" ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x04, "Double" )
PORT_DIPNAME( 0x08, 0x00, "Drive 1 Density" ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x08, "Double" )
PORT_START("SW2")
PORT_DIPNAME( 0x0f, 0x08, "Drive Type" ) PORT_DIPLOCATION("SW2:1,2,3,4")
PORT_DIPSETTING( 0x08, "BASF 6106/08" )
PORT_DIPSETTING( 0x09, "MPI 51" )
PORT_START("SW3")
PORT_DIPNAME( 0x7f, 0x2d, "Card Address" ) PORT_DIPLOCATION("SW3:1,2,3,4,5,6,7")
PORT_DIPSETTING( 0x2d, "45" )
PORT_START("S1") // also S3,S5
PORT_DIPNAME( 0x01, 0x01, "Interface Type" )
PORT_DIPSETTING( 0x00, "ABC 1600" )
PORT_DIPSETTING( 0x01, "ABC 80/800/802/806" )
PORT_START("S6")
PORT_DIPNAME( 0x01, 0x01, "RAM Size" )
PORT_DIPSETTING( 0x00, "2 KB" )
PORT_DIPSETTING( 0x01, "8 KB" )
PORT_START("S8")
PORT_DIPNAME( 0x01, 0x01, "Drive Type" )
PORT_DIPSETTING( 0x00, "8\"" )
PORT_DIPSETTING( 0x01, "5.25\"" )
PORT_START("S9")
PORT_DIPNAME( 0x01, 0x01, "RDY Pin" )
PORT_DIPSETTING( 0x00, "P2-6 (8\")" )
PORT_DIPSETTING( 0x01, "P2-34 (5.25\")" )
INPUT_PORTS_END
//-------------------------------------------------
// INPUT_PORTS( abc832 )
//-------------------------------------------------
INPUT_PORTS_START( abc832 )
PORT_START("SW1")
PORT_DIPNAME( 0x01, 0x01, "Drive 0 Sides" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x01, "Double" )
PORT_DIPNAME( 0x02, 0x02, "Drive 1 Sides" ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x02, "Double" )
PORT_DIPNAME( 0x04, 0x04, "Drive 0 Tracks" ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x00, "40" )
PORT_DIPSETTING( 0x04, "80" )
PORT_DIPNAME( 0x08, 0x08, "Drive 1 Tracks" ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x00, "40" )
PORT_DIPSETTING( 0x08, "80" )
PORT_START("SW2")
PORT_DIPNAME( 0x0f, 0x04, "Drive Type" ) PORT_DIPLOCATION("SW2:1,2,3,4")
PORT_DIPSETTING( 0x03, "Micropolis 1015F" )
PORT_DIPSETTING( 0x04, "BASF 6118" )
PORT_DIPSETTING( 0x05, "Micropolis 1115F" )
PORT_START("SW3")
PORT_DIPNAME( 0x7f, 0x2c, "Card Address" ) PORT_DIPLOCATION("SW3:1,2,3,4,5,6,7")
PORT_DIPSETTING( 0x2c, "44" )
PORT_START("S1") // also S3,S5
PORT_DIPNAME( 0x01, 0x01, "Interface Type" )
PORT_DIPSETTING( 0x00, "ABC 1600" )
PORT_DIPSETTING( 0x01, "ABC 80/800/802/806" )
PORT_START("S6")
PORT_DIPNAME( 0x01, 0x01, "RAM Size" )
PORT_DIPSETTING( 0x00, "2 KB" )
PORT_DIPSETTING( 0x01, "8 KB" )
PORT_START("S8")
PORT_DIPNAME( 0x01, 0x01, "Drive Type" )
PORT_DIPSETTING( 0x00, "8\"" )
PORT_DIPSETTING( 0x01, "5.25\"" )
PORT_START("S9")
PORT_DIPNAME( 0x01, 0x01, "RDY Pin" )
PORT_DIPSETTING( 0x00, "P2-6 (8\")" )
PORT_DIPSETTING( 0x01, "P2-34 (5.25\")" )
INPUT_PORTS_END
//-------------------------------------------------
// INPUT_PORTS( abc834 )
//-------------------------------------------------
INPUT_PORTS_START( abc834 )
PORT_START("SW1")
PORT_DIPNAME( 0x01, 0x01, "Drive 0 Sides" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x01, "Double" )
PORT_DIPNAME( 0x02, 0x02, "Drive 1 Sides" ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x02, "Double" )
PORT_DIPNAME( 0x04, 0x04, "Drive 0 Tracks" ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x00, "40" )
PORT_DIPSETTING( 0x04, "80" )
PORT_DIPNAME( 0x08, 0x08, "Drive 1 Tracks" ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x00, "40" )
PORT_DIPSETTING( 0x08, "80" )
PORT_START("SW2")
PORT_DIPNAME( 0x0f, 0x01, "Drive Type" ) PORT_DIPLOCATION("SW2:1,2,3,4")
PORT_DIPSETTING( 0x01, "TEAC FD55F" )
PORT_START("SW3")
PORT_DIPNAME( 0x7f, 0x2c, "Card Address" ) PORT_DIPLOCATION("SW3:1,2,3,4,5,6,7")
PORT_DIPSETTING( 0x2c, "44" )
PORT_START("S1") // also S3,S5
PORT_DIPNAME( 0x01, 0x01, "Interface Type" )
PORT_DIPSETTING( 0x00, "ABC 1600" )
PORT_DIPSETTING( 0x01, "ABC 80/800/802/806" )
PORT_START("S6")
PORT_DIPNAME( 0x01, 0x01, "RAM Size" )
PORT_DIPSETTING( 0x00, "2 KB" )
PORT_DIPSETTING( 0x01, "8 KB" )
PORT_START("S8")
PORT_DIPNAME( 0x01, 0x01, "Drive Type" )
PORT_DIPSETTING( 0x00, "8\"" )
PORT_DIPSETTING( 0x01, "5.25\"" )
PORT_START("S9")
PORT_DIPNAME( 0x01, 0x01, "RDY Pin" )
PORT_DIPSETTING( 0x00, "P2-6 (8\")" )
PORT_DIPSETTING( 0x01, "P2-34 (5.25\")" )
INPUT_PORTS_END
//-------------------------------------------------
// INPUT_PORTS( abc838 )
//-------------------------------------------------
INPUT_PORTS_START( abc838 )
PORT_START("SW1")
PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:1,2,3,4")
PORT_DIPSETTING( 0x00, DEF_STR( Unused ) )
PORT_START("SW2")
PORT_DIPNAME( 0x0f, 0x0e, "Drive Type" ) PORT_DIPLOCATION("SW2:1,2,3,4")
PORT_DIPSETTING( 0x0e, "BASF 6105" )
PORT_DIPSETTING( 0x0f, "BASF 6106" )
PORT_START("SW3")
PORT_DIPNAME( 0x7f, 0x2e, "Card Address" ) PORT_DIPLOCATION("SW3:1,2,3,4,5,6,7")
PORT_DIPSETTING( 0x2e, "46" )
PORT_START("S1") // also S3,S5
PORT_DIPNAME( 0x01, 0x01, "Interface Type" )
PORT_DIPSETTING( 0x00, "ABC 1600" )
PORT_DIPSETTING( 0x01, "ABC 80/800/802/806" )
PORT_START("S6")
PORT_DIPNAME( 0x01, 0x01, "RAM Size" )
PORT_DIPSETTING( 0x00, "2 KB" )
PORT_DIPSETTING( 0x01, "8 KB" )
PORT_START("S8")
PORT_DIPNAME( 0x01, 0x00, "Drive Type" )
PORT_DIPSETTING( 0x00, "8\"" )
PORT_DIPSETTING( 0x01, "5.25\"" )
PORT_START("S9")
PORT_DIPNAME( 0x01, 0x00, "RDY Pin" )
PORT_DIPSETTING( 0x00, "P2-6 (8\")" )
PORT_DIPSETTING( 0x01, "P2-34 (5.25\")" )
INPUT_PORTS_END
//-------------------------------------------------
// input_ports - device-specific input ports
//-------------------------------------------------
@ -396,6 +607,26 @@ ioport_constructor luxor_55_21046_device::device_input_ports() const
return INPUT_PORTS_NAME( luxor_55_21046 );
}
ioport_constructor abc830_device::device_input_ports() const
{
return INPUT_PORTS_NAME( abc830 );
}
ioport_constructor abc832_device::device_input_ports() const
{
return INPUT_PORTS_NAME( abc832 );
}
ioport_constructor abc834_device::device_input_ports() const
{
return INPUT_PORTS_NAME( abc834 );
}
ioport_constructor abc838_device::device_input_ports() const
{
return INPUT_PORTS_NAME( abc838 );
}
//**************************************************************************
@ -426,6 +657,46 @@ luxor_55_21046_device::luxor_55_21046_device(const machine_config &mconfig, cons
{
}
luxor_55_21046_device::luxor_55_21046_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
: device_t(mconfig, type, name, tag, owner, clock, shortname, source),
device_abcbus_card_interface(mconfig, *this),
m_maincpu(*this, Z80_TAG),
m_dma(*this, Z80DMA_TAG),
m_fdc(*this, SAB1793_TAG),
m_floppy0(*this, SAB1793_TAG":0"),
m_floppy1(*this, SAB1793_TAG":1"),
m_floppy(NULL),
m_sw1(*this, "SW1"),
m_sw2(*this, "SW2"),
m_sw3(*this, "SW3"),
m_cs(false),
m_fdc_irq(0),
m_dma_irq(0),
m_busy(0),
m_force_busy(0)
{
}
abc830_device::abc830_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: luxor_55_21046_device(mconfig, ABC830, "ABC 830", tag, owner, clock, "lux21046", __FILE__)
{
}
abc832_device::abc832_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: luxor_55_21046_device(mconfig, ABC832, "ABC 832", tag, owner, clock, "lux21046", __FILE__)
{
}
abc834_device::abc834_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: luxor_55_21046_device(mconfig, ABC834, "ABC 834", tag, owner, clock, "lux21046", __FILE__)
{
}
abc838_device::abc838_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: luxor_55_21046_device(mconfig, ABC838, "ABC 838", tag, owner, clock, "lux21046", __FILE__)
{
}
//-------------------------------------------------
// device_start - device-specific startup
@ -793,56 +1064,12 @@ READ8_MEMBER( luxor_55_21046_device::_9a_r )
// LUXOR 55 21046 DEVICE INPUT DEFAULTS
//**************************************************************************
//-------------------------------------------------
// DEVICE_INPUT_DEFAULTS( abc830_fast_intf )
//-------------------------------------------------
DEVICE_INPUT_DEFAULTS_START( abc830_fast )
DEVICE_INPUT_DEFAULTS("SW1", 0x0f, 0x03)
DEVICE_INPUT_DEFAULTS("SW2", 0x0f, DRIVE_BASF_6106_08)
DEVICE_INPUT_DEFAULTS("SW3", 0x7f, ADDRESS_ABC830)
DEVICE_INPUT_DEFAULTS_END
//-------------------------------------------------
// DEVICE_INPUT_DEFAULTS( abc832_fast )
//-------------------------------------------------
DEVICE_INPUT_DEFAULTS_START( abc832_fast )
DEVICE_INPUT_DEFAULTS("SW1", 0x0f, 0x03)
DEVICE_INPUT_DEFAULTS("SW2", 0x0f, DRIVE_TEAC_FD55F)
DEVICE_INPUT_DEFAULTS("SW3", 0x7f, ADDRESS_ABC832)
DEVICE_INPUT_DEFAULTS_END
//-------------------------------------------------
// DEVICE_INPUT_DEFAULTS( abc834_fast )
//-------------------------------------------------
DEVICE_INPUT_DEFAULTS_START( abc834_fast )
DEVICE_INPUT_DEFAULTS("SW1", 0x0f, 0x03)
DEVICE_INPUT_DEFAULTS("SW2", 0x0f, DRIVE_TEAC_FD55F)
DEVICE_INPUT_DEFAULTS("SW3", 0x7f, ADDRESS_ABC832)
DEVICE_INPUT_DEFAULTS_END
//-------------------------------------------------
// DEVICE_INPUT_DEFAULTS( abc838_fast )
//-------------------------------------------------
DEVICE_INPUT_DEFAULTS_START( abc838_fast )
DEVICE_INPUT_DEFAULTS("SW1", 0x0f, 0x03)
DEVICE_INPUT_DEFAULTS("SW2", 0x0f, DRIVE_BASF_6105)
DEVICE_INPUT_DEFAULTS("SW3", 0x7f, ADDRESS_ABC838)
DEVICE_INPUT_DEFAULTS_END
//-------------------------------------------------
// DEVICE_INPUT_DEFAULTS( abc850_fast )
//-------------------------------------------------
DEVICE_INPUT_DEFAULTS_START( abc850_fast )
DEVICE_INPUT_DEFAULTS("SW1", 0x0f, 0x03)
DEVICE_INPUT_DEFAULTS("SW1", 0x0f, 0x0f)
DEVICE_INPUT_DEFAULTS("SW2", 0x0f, DRIVE_BASF_6138)
DEVICE_INPUT_DEFAULTS("SW3", 0x7f, ADDRESS_ABC830)
DEVICE_INPUT_DEFAULTS("SW3", 0x7f, ADDRESS_ABC832)
DEVICE_INPUT_DEFAULTS_END

View File

@ -55,6 +55,7 @@ class luxor_55_21046_device : public device_t,
{
public:
// construction/destruction
luxor_55_21046_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
luxor_55_21046_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// optional information overrides
@ -117,15 +118,68 @@ private:
};
// ======================> abc830_device
class abc830_device : public luxor_55_21046_device
{
public:
// construction/destruction
abc830_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// optional information overrides
virtual ioport_constructor device_input_ports() const;
};
// ======================> abc832_device
class abc832_device : public luxor_55_21046_device
{
public:
// construction/destruction
abc832_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// optional information overrides
virtual ioport_constructor device_input_ports() const;
};
// ======================> abc834_device
class abc834_device : public luxor_55_21046_device
{
public:
// construction/destruction
abc834_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// optional information overrides
virtual ioport_constructor device_input_ports() const;
};
// ======================> abc838_device
class abc838_device : public luxor_55_21046_device
{
public:
// construction/destruction
abc838_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const;
virtual ioport_constructor device_input_ports() const;
};
// device type definition
extern const device_type LUXOR_55_21046;
extern const device_type ABC830;
extern const device_type ABC832;
extern const device_type ABC834;
extern const device_type ABC838;
// default input ports
extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME( abc830_fast )[];
extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME( abc832_fast )[];
extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME( abc834_fast )[];
extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME( abc838_fast )[];
extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME( abc850_fast )[];

View File

@ -28,17 +28,17 @@
Start the abc800 emulator with the ABC 850 attached on the ABC bus,
with the new CHD and a UFD-DOS floppy mounted:
$ mess abc800m -bus hdd -bus:hdd:io2 xebec,bios=ro202 -flop1 ufd631 -hard ro202.chd
$ mess abc800m -bus hdd -bus:hdd:io2 xebec,bios=basf6186 -flop1 ufd631 -hard basf6186.chd
$ mess abc800m -bus abc850 -flop1 ufd631 -hard ro202.chd
$ mess abc800m -bus abc850 -bus:abc850:io2 xebec,bios=basf6186 -flop1 ufd631 -hard basf6186.chd
or with the ABC 852 attached:
$ mess abc800m -bus hdd -bus:hdd:io2 xebec,bios=basf6185 -flop1 ufd631 -hard basf6185.chd
$ mess abc800m -bus hdd -bus:hdd:io2 xebec,bios=nec5126 -flop1 ufd631 -hard nec5126.chd
$ mess abc800m -bus abc852 -flop1 ufd631 -hard basf6185.chd
$ mess abc800m -bus abc852 -bus:abc852:io2 xebec,bios=nec5126 -flop1 ufd631 -hard nec5126.chd
or with the ABC 856 attached:
$ mess abc800m -bus hdd -bus:hdd:io2 xebec,bios=micr1325 -flop1 ufd631 -hard micr1325.chd
$ mess abc800m -bus abc856 -flop1 ufd631 -hard micr1325.chd
Configure the floppy controller for use with an ABC 850:
@ -68,9 +68,9 @@
Or skip all of the above and use the preformatted images in the software list:
$ mess abc800m -bus hdd -bus:hdd:io2 xebec,bios=ro202 -flop1 ufd631 -hard abc850
$ mess abc800m -bus hdd -bus:hdd:io2 xebec,bios=basf6185 -flop1 ufd631 -hard abc852
$ mess abc800m -bus hdd -bus:hdd:io2 xebec,bios=micr1325 -flop1 ufd631 -hard abc856
$ mess abc800m -bus abc850 -flop1 ufd631 -hard abc850
$ mess abc800m -bus abc852 -flop1 ufd631 -hard abc852
$ mess abc800m -bus abc856 -flop1 ufd631 -hard abc856
*/

View File

@ -1181,8 +1181,7 @@ static MACHINE_CONFIG_START( abc800c, abc800c_state )
MCFG_ABC_KEYBOARD_PORT_ADD("abc800", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
// ABC bus
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "fast")
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc830_fast)
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "abc830")
// internal ram
MCFG_RAM_ADD(RAM_TAG)
@ -1225,8 +1224,7 @@ static MACHINE_CONFIG_START( abc800m, abc800m_state )
MCFG_ABC_KEYBOARD_PORT_ADD("abc800", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
// ABC bus
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "fast")
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc830_fast)
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "abc830")
// internal ram
MCFG_RAM_ADD(RAM_TAG)
@ -1269,8 +1267,7 @@ static MACHINE_CONFIG_START( abc802, abc802_state )
MCFG_ABC_KEYBOARD_PORT_ADD("abc55", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
// ABC bus
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "fast")
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc834_fast)
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "abc834")
// internal ram
MCFG_RAM_ADD(RAM_TAG)
@ -1306,8 +1303,7 @@ static MACHINE_CONFIG_START( abc806, abc806_state )
MCFG_ABC_KEYBOARD_PORT_ADD("abc77", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
// ABC bus
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "fast")
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc832_fast)
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "abc832")
// internal ram
MCFG_RAM_ADD(RAM_TAG)