diff --git a/src/emu/bus/abcbus/abc890.c b/src/emu/bus/abcbus/abc890.c index 1dcf943a6e8..bf4c35e90ed 100644 --- a/src/emu/bus/abcbus/abc890.c +++ b/src/emu/bus/abcbus/abc890.c @@ -20,6 +20,8 @@ const device_type ABC890 = &device_creator; const device_type ABC894 = &device_creator; const device_type ABC850 = &device_creator; +const device_type ABC852 = &device_creator; +const device_type ABC856 = &device_creator; //------------------------------------------------- @@ -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(subdevice("io1")); - m_expansion_slot[1] = dynamic_cast(subdevice("io2")); - m_expansion_slot[2] = dynamic_cast(subdevice("io3")); - m_expansion_slot[3] = dynamic_cast(subdevice("io4")); - m_expansion_slot[4] = dynamic_cast(subdevice("mem1")); - m_expansion_slot[5] = dynamic_cast(subdevice("mem2")); - m_expansion_slot[6] = dynamic_cast(subdevice("mem3")); -} - -void abc894_device::device_start() -{ - // find devices - m_expansion_slot[0] = dynamic_cast(subdevice("io1")); - m_expansion_slot[1] = dynamic_cast(subdevice("io2")); - m_expansion_slot[2] = dynamic_cast(subdevice("io3")); -} - -void abc850_device::device_start() -{ - // find devices - m_expansion_slot[0] = dynamic_cast(subdevice("io1")); - m_expansion_slot[1] = dynamic_cast(subdevice("io2")); - m_expansion_slot[2] = dynamic_cast(subdevice("io3")); - m_expansion_slot[3] = dynamic_cast(subdevice("io4")); - m_expansion_slot[4] = dynamic_cast(subdevice("io5")); - m_expansion_slot[5] = dynamic_cast(subdevice("io6")); - m_expansion_slot[6] = dynamic_cast(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); } } diff --git a/src/emu/bus/abcbus/abc890.h b/src/emu/bus/abcbus/abc890.h index be3232bcb28..5876e63d44b 100644 --- a/src/emu/bus/abcbus/abc890.h +++ b/src/emu/bus/abcbus/abc890.h @@ -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; diff --git a/src/emu/bus/abcbus/abcbus.c b/src/emu/bus/abcbus/abcbus.c index 1aa8c9ecb96..fcb6c86da67 100644 --- a/src/emu/bus/abcbus/abcbus.c +++ b/src/emu/bus/abcbus/abcbus.c @@ -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) diff --git a/src/emu/bus/abcbus/abcbus.h b/src/emu/bus/abcbus/abcbus.h index 6148e9dd36c..87d668b2c02 100644 --- a/src/emu/bus/abcbus/abcbus.h +++ b/src/emu/bus/abcbus/abcbus.h @@ -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_iterator; + + + #endif diff --git a/src/emu/bus/abcbus/lux21046.c b/src/emu/bus/abcbus/lux21046.c index 3eba6c4f1a0..02a7976fe3c 100644 --- a/src/emu/bus/abcbus/lux21046.c +++ b/src/emu/bus/abcbus/lux21046.c @@ -97,6 +97,10 @@ Notes: //************************************************************************** const device_type LUXOR_55_21046 = &device_creator; +const device_type ABC830 = &device_creator; +const device_type ABC832 = &device_creator; +const device_type ABC834 = &device_creator; +const device_type ABC838 = &device_creator; //------------------------------------------------- @@ -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 diff --git a/src/emu/bus/abcbus/lux21046.h b/src/emu/bus/abcbus/lux21046.h index ee090926270..0602e704442 100644 --- a/src/emu/bus/abcbus/lux21046.h +++ b/src/emu/bus/abcbus/lux21046.h @@ -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 )[]; diff --git a/src/emu/bus/abcbus/lux21056.c b/src/emu/bus/abcbus/lux21056.c index a6d76701a45..7dc84668a36 100644 --- a/src/emu/bus/abcbus/lux21056.c +++ b/src/emu/bus/abcbus/lux21056.c @@ -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 */ diff --git a/src/mess/drivers/abc80x.c b/src/mess/drivers/abc80x.c index b70fbff137e..e431809558e 100644 --- a/src/mess/drivers/abc80x.c +++ b/src/mess/drivers/abc80x.c @@ -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)