(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 ABC890 = &device_creator<abc890_device>;
const device_type ABC894 = &device_creator<abc894_device>; const device_type ABC894 = &device_creator<abc894_device>;
const device_type ABC850 = &device_creator<abc850_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 ) static MACHINE_CONFIG_FRAGMENT( abc850 )
MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, "fast") 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_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("io3", abcbus_cards, NULL)
MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, NULL) MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, NULL)
MCFG_ABCBUS_SLOT_ADD("io5", 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 // 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) 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_t(mconfig, ABC890, "ABC 890", tag, owner, clock, "abc890", __FILE__),
device_abcbus_card_interface(mconfig, *this), device_abcbus_card_interface(mconfig, *this)
m_slots(7)
{ {
} }
abc894_device::abc894_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) 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__) : 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) 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__) : 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() 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() 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();
} }
} }
//-------------------------------------------------
//************************************************************************** // abcbus_cs - card select
// ABC BUS INTERFACE //-------------------------------------------------
//**************************************************************************
void abc890_device::abcbus_cs(UINT8 data) 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 abc890_device::abcbus_inp()
{ {
UINT8 data = 0xff; 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; return data;
} }
//-------------------------------------------------
// abcbus_out - output
//-------------------------------------------------
void abc890_device::abcbus_out(UINT8 data) 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 abc890_device::abcbus_stat()
{ {
UINT8 data = 0xff; 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; return data;
} }
//-------------------------------------------------
// abcbus_c1 - command 1
//-------------------------------------------------
void abc890_device::abcbus_c1(UINT8 data) 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) 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) 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) 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 abc890_device::abcbus_xmemfl(offs_t offset)
{ {
UINT8 data = 0xff; 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; return data;
} }
//-------------------------------------------------
// abcbus_xmemw - extended memory write
//-------------------------------------------------
void abc890_device::abcbus_xmemw(offs_t offset, UINT8 data) 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 void abcbus_c4(UINT8 data);
virtual UINT8 abcbus_xmemfl(offs_t offset); virtual UINT8 abcbus_xmemfl(offs_t offset);
virtual void abcbus_xmemw(offs_t offset, UINT8 data); 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 class abc894_device : public abc890_device
{ {
public: public:
@ -75,13 +73,11 @@ public:
// optional information overrides // optional information overrides
virtual machine_config_constructor device_mconfig_additions() const; virtual machine_config_constructor device_mconfig_additions() const;
protected:
// device-level overrides
virtual void device_start();
}; };
// ======================> abc850_device
class abc850_device : public abc890_device class abc850_device : public abc890_device
{ {
public: public:
@ -90,10 +86,32 @@ public:
// optional information overrides // optional information overrides
virtual machine_config_constructor device_mconfig_additions() const; virtual machine_config_constructor device_mconfig_additions() const;
};
protected:
// device-level overrides // ======================> abc852_device
virtual void device_start();
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 ABC890;
extern const device_type ABC894; extern const device_type ABC894;
extern const device_type ABC850; 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_START( abcbus_cards )
SLOT_INTERFACE("exp", ABC890) SLOT_INTERFACE("abc830", ABC830)
SLOT_INTERFACE("exp3", ABC894) 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("hdc", ABC_HDC)
SLOT_INTERFACE("hdd", ABC850)
SLOT_INTERFACE("dos", ABC_DOS) SLOT_INTERFACE("dos", ABC_DOS)
SLOT_INTERFACE("fd2", ABC_FD2) SLOT_INTERFACE("fd2", ABC_FD2)
SLOT_INTERFACE("sio", ABC_SIO) SLOT_INTERFACE("sio", ABC_SIO)

View File

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

View File

@ -97,6 +97,10 @@ Notes:
//************************************************************************** //**************************************************************************
const device_type LUXOR_55_21046 = &device_creator<luxor_55_21046_device>; 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 ) static MACHINE_CONFIG_FRAGMENT( luxor_55_21046 )
@ -300,6 +304,18 @@ static MACHINE_CONFIG_FRAGMENT( luxor_55_21046 )
MACHINE_CONFIG_END 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_config_additions - device-specific
// machine configurations // machine configurations
@ -310,6 +326,11 @@ machine_config_constructor luxor_55_21046_device::device_mconfig_additions() con
return MACHINE_CONFIG_NAME( luxor_55_21046 ); 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 ) // 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_DIPNAME( 0x02, 0x02, "Drive 1 Sides" ) PORT_DIPLOCATION("SW1:2") PORT_CONDITION("SW3", 0x7f, EQUALS, 0x2c)
PORT_DIPSETTING( 0x00, DEF_STR( Single ) ) PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x02, "Double" ) PORT_DIPSETTING( 0x02, "Double" )
PORT_DIPNAME( 0x04, 0x00, "Drive 0 Tracks" ) PORT_DIPLOCATION("SW1:3") PORT_CONDITION("SW3", 0x7f, EQUALS, 0x2c) PORT_DIPNAME( 0x04, 0x04, "Drive 0 Tracks" ) PORT_DIPLOCATION("SW1:3") PORT_CONDITION("SW3", 0x7f, EQUALS, 0x2c)
PORT_DIPSETTING( 0x00, "80" ) PORT_DIPSETTING( 0x00, "40" )
PORT_DIPSETTING( 0x04, "40" ) PORT_DIPSETTING( 0x04, "80" )
PORT_DIPNAME( 0x08, 0x00, "Drive 1 Tracks" ) PORT_DIPLOCATION("SW1:4") PORT_CONDITION("SW3", 0x7f, EQUALS, 0x2c) PORT_DIPNAME( 0x08, 0x08, "Drive 1 Tracks" ) PORT_DIPLOCATION("SW1:4") PORT_CONDITION("SW3", 0x7f, EQUALS, 0x2c)
PORT_DIPSETTING( 0x00, "80" ) PORT_DIPSETTING( 0x00, "40" )
PORT_DIPSETTING( 0x08, "40" ) PORT_DIPSETTING( 0x08, "80" )
PORT_START("SW2") PORT_START("SW2")
PORT_DIPNAME( 0x0f, 0x01, "Drive Type" ) PORT_DIPLOCATION("SW2:1,2,3,4") 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_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 // 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 ); 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 // device_start - device-specific startup
@ -793,56 +1064,12 @@ READ8_MEMBER( luxor_55_21046_device::_9a_r )
// LUXOR 55 21046 DEVICE INPUT DEFAULTS // 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( abc850_fast )
//------------------------------------------------- //-------------------------------------------------
DEVICE_INPUT_DEFAULTS_START( 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("SW2", 0x0f, DRIVE_BASF_6138)
DEVICE_INPUT_DEFAULTS("SW3", 0x7f, ADDRESS_ABC830) DEVICE_INPUT_DEFAULTS("SW3", 0x7f, ADDRESS_ABC832)
DEVICE_INPUT_DEFAULTS_END DEVICE_INPUT_DEFAULTS_END

View File

@ -55,6 +55,7 @@ class luxor_55_21046_device : public device_t,
{ {
public: public:
// construction/destruction // 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); luxor_55_21046_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// optional information overrides // 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 // device type definition
extern const device_type LUXOR_55_21046; 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 // 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 )[]; 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, Start the abc800 emulator with the ABC 850 attached on the ABC bus,
with the new CHD and a UFD-DOS floppy mounted: 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 abc850 -flop1 ufd631 -hard ro202.chd
$ mess abc800m -bus hdd -bus:hdd:io2 xebec,bios=basf6186 -flop1 ufd631 -hard basf6186.chd $ mess abc800m -bus abc850 -bus:abc850:io2 xebec,bios=basf6186 -flop1 ufd631 -hard basf6186.chd
or with the ABC 852 attached: or with the ABC 852 attached:
$ mess abc800m -bus hdd -bus:hdd:io2 xebec,bios=basf6185 -flop1 ufd631 -hard basf6185.chd $ mess abc800m -bus abc852 -flop1 ufd631 -hard basf6185.chd
$ mess abc800m -bus hdd -bus:hdd:io2 xebec,bios=nec5126 -flop1 ufd631 -hard nec5126.chd $ mess abc800m -bus abc852 -bus:abc852:io2 xebec,bios=nec5126 -flop1 ufd631 -hard nec5126.chd
or with the ABC 856 attached: 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: 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: 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 abc850 -flop1 ufd631 -hard abc850
$ mess abc800m -bus hdd -bus:hdd:io2 xebec,bios=basf6185 -flop1 ufd631 -hard abc852 $ mess abc800m -bus abc852 -flop1 ufd631 -hard abc852
$ mess abc800m -bus hdd -bus:hdd:io2 xebec,bios=micr1325 -flop1 ufd631 -hard abc856 $ 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)) MCFG_ABC_KEYBOARD_PORT_ADD("abc800", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
// ABC bus // ABC bus
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "fast") MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "abc830")
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc830_fast)
// internal ram // internal ram
MCFG_RAM_ADD(RAM_TAG) 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)) MCFG_ABC_KEYBOARD_PORT_ADD("abc800", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
// ABC bus // ABC bus
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "fast") MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "abc830")
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc830_fast)
// internal ram // internal ram
MCFG_RAM_ADD(RAM_TAG) 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)) MCFG_ABC_KEYBOARD_PORT_ADD("abc55", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
// ABC bus // ABC bus
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "fast") MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "abc834")
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc834_fast)
// internal ram // internal ram
MCFG_RAM_ADD(RAM_TAG) 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)) MCFG_ABC_KEYBOARD_PORT_ADD("abc77", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
// ABC bus // ABC bus
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "fast") MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "abc832")
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc832_fast)
// internal ram // internal ram
MCFG_RAM_ADD(RAM_TAG) MCFG_RAM_ADD(RAM_TAG)