From 044f3688ac51e2db2625525416024e1f913c6e7a Mon Sep 17 00:00:00 2001 From: Sandro Ronco Date: Tue, 25 Nov 2014 22:45:09 +0100 Subject: (MESS) dmv: added dipswitches to K235 for configure INT5 and INT7 source. (nw) --- src/emu/bus/dmv/dmvbus.c | 32 ++++++++++++++++++++++---------- src/emu/bus/dmv/dmvbus.h | 16 ++++++++++------ src/emu/bus/dmv/k230.c | 23 ++++++++++++++++++++++- src/emu/bus/dmv/k230.h | 24 ++++++++++++++---------- src/mess/drivers/dmv.c | 32 ++++++++++++++++++++------------ 5 files changed, 88 insertions(+), 39 deletions(-) diff --git a/src/emu/bus/dmv/dmvbus.c b/src/emu/bus/dmv/dmvbus.c index ba40d69dd30..7e1a45779c9 100644 --- a/src/emu/bus/dmv/dmvbus.c +++ b/src/emu/bus/dmv/dmvbus.c @@ -320,16 +320,28 @@ void dmvcart_slot_device::switch16_w(int state) m_cart->switch16_w(state); } -void dmvcart_slot_device::irq0_w(int state) +void dmvcart_slot_device::timint_w(int state) { if (m_cart) - m_cart->irq0_w(state); + m_cart->timint_w(state); } -void dmvcart_slot_device::irq1_w(int state) +void dmvcart_slot_device::keyint_w(int state) { if (m_cart) - m_cart->irq1_w(state); + m_cart->keyint_w(state); +} + +void dmvcart_slot_device::busint_w(int state) +{ + if (m_cart) + m_cart->busint_w(state); +} + +void dmvcart_slot_device::flexint_w(int state) +{ + if (m_cart) + m_cart->flexint_w(state); } void dmvcart_slot_device::irq2_w(int state) @@ -338,6 +350,12 @@ void dmvcart_slot_device::irq2_w(int state) m_cart->irq2_w(state); } +void dmvcart_slot_device::irq2a_w(int state) +{ + if (m_cart) + m_cart->irq2a_w(state); +} + void dmvcart_slot_device::irq3_w(int state) { if (m_cart) @@ -361,9 +379,3 @@ void dmvcart_slot_device::irq6_w(int state) if (m_cart) m_cart->irq6_w(state); } - -void dmvcart_slot_device::irq7_w(int state) -{ - if (m_cart) - m_cart->irq7_w(state); -} diff --git a/src/emu/bus/dmv/dmvbus.h b/src/emu/bus/dmv/dmvbus.h index e4a3d035677..7043423dc1a 100644 --- a/src/emu/bus/dmv/dmvbus.h +++ b/src/emu/bus/dmv/dmvbus.h @@ -35,14 +35,16 @@ public: virtual bool av16bit() { return false; } virtual void hold_w(int state) { } virtual void switch16_w(int state) { } - virtual void irq0_w(int state) { } - virtual void irq1_w(int state) { } + virtual void timint_w(int state) { } + virtual void keyint_w(int state) { } + virtual void busint_w(int state) { } + virtual void flexint_w(int state) { } virtual void irq2_w(int state) { } + virtual void irq2a_w(int state) { } virtual void irq3_w(int state) { } virtual void irq4_w(int state) { } virtual void irq5_w(int state) { } virtual void irq6_w(int state) { } - virtual void irq7_w(int state) { } }; @@ -74,14 +76,16 @@ public: virtual void io_write(address_space &space, int ifsel, offs_t offset, UINT8 data); virtual void hold_w(int state); virtual void switch16_w(int state); - virtual void irq0_w(int state); - virtual void irq1_w(int state); + virtual void timint_w(int state); + virtual void keyint_w(int state); + virtual void busint_w(int state); + virtual void flexint_w(int state); virtual void irq2_w(int state); + virtual void irq2a_w(int state); virtual void irq3_w(int state); virtual void irq4_w(int state); virtual void irq5_w(int state); virtual void irq6_w(int state); - virtual void irq7_w(int state); virtual bool av16bit(); // internal state diff --git a/src/emu/bus/dmv/k230.c b/src/emu/bus/dmv/k230.c index 0818c91a7d0..4ce6a97f807 100644 --- a/src/emu/bus/dmv/k230.c +++ b/src/emu/bus/dmv/k230.c @@ -78,6 +78,17 @@ static MACHINE_CONFIG_FRAGMENT( dmv_k235 ) MACHINE_CONFIG_END +static INPUT_PORTS_START( dmv_k235 ) + PORT_START("DSW") + PORT_DIPNAME( 0x01, 0x00, "K235 INT7" ) PORT_DIPLOCATION("S:1") + PORT_DIPSETTING( 0x00, "Slot 5" ) + PORT_DIPSETTING( 0x01, "Slot 6" ) + PORT_DIPNAME( 0x02, 0x00, "K235 INT5" ) PORT_DIPLOCATION("S:2") + PORT_DIPSETTING( 0x00, "Slot 2a" ) + PORT_DIPSETTING( 0x02, "Slot 2" ) +INPUT_PORTS_END + + //************************************************************************** // GLOBAL VARIABLES //************************************************************************** @@ -135,7 +146,8 @@ dmv_k234_device::dmv_k234_device(const machine_config &mconfig, const char *tag, dmv_k235_device::dmv_k235_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : dmv_k230_device(mconfig, DMV_K235, "K235 8088 with interrupt controller", tag, owner, clock, "dmv_k235", __FILE__), - m_pic(*this, "pic8259") + m_pic(*this, "pic8259"), + m_dsw(*this, "DSW") { } @@ -216,6 +228,15 @@ const rom_entry *dmv_k235_device::device_rom_region() const return ROM_NAME( dmv_k235 ); } +//------------------------------------------------- +// input_ports - device-specific input ports +//------------------------------------------------- + +ioport_constructor dmv_k235_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( dmv_k235 ); +} + bool dmv_k230_device::av16bit() { return true; diff --git a/src/emu/bus/dmv/k230.h b/src/emu/bus/dmv/k230.h index 4660a3f5aba..6c658f2d2c3 100644 --- a/src/emu/bus/dmv/k230.h +++ b/src/emu/bus/dmv/k230.h @@ -115,22 +115,26 @@ public: // construction/destruction dmv_k235_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +protected: // optional information overrides virtual const rom_entry *device_rom_region() const; virtual machine_config_constructor device_mconfig_additions() const; - - void irq0_w(int state) { m_pic->ir0_w(state); } - void irq1_w(int state) { m_pic->ir1_w(state); } - void irq2_w(int state) { m_pic->ir2_w(state); } - void irq3_w(int state) { m_pic->ir3_w(state); } - void irq4_w(int state) { m_pic->ir4_w(state); } - void irq5_w(int state) { m_pic->ir5_w(state); } - void irq6_w(int state) { m_pic->ir6_w(state); } - void irq7_w(int state) { m_pic->ir7_w(state); } + virtual ioport_constructor device_input_ports() const; + + void timint_w(int state) { m_pic->ir0_w(state); } + void keyint_w(int state) { m_pic->ir1_w(state); } + void busint_w(int state) { m_pic->ir2_w(state); } + void flexint_w(int state) { m_pic->ir6_w(state); } + void irq2a_w(int state) { if (!(m_dsw->read() & 0x02)) m_pic->ir5_w(state); } + void irq2_w(int state) { if ( (m_dsw->read() & 0x02)) m_pic->ir5_w(state); } + void irq3_w(int state) { m_pic->ir3_w(state); } + void irq4_w(int state) { m_pic->ir4_w(state); } + void irq5_w(int state) { if (!(m_dsw->read() & 0x01)) m_pic->ir7_w(state); } + void irq6_w(int state) { if ( (m_dsw->read() & 0x01)) m_pic->ir7_w(state); } private: required_device m_pic; - + required_ioport m_dsw; }; // device type definition diff --git a/src/mess/drivers/dmv.c b/src/mess/drivers/dmv.c index 9d64ca8f894..86936ee4839 100644 --- a/src/mess/drivers/dmv.c +++ b/src/mess/drivers/dmv.c @@ -422,8 +422,8 @@ void dmv_state::update_busint(int slot, int state) break; } - m_slot7a->irq2_w(new_state); - m_slot7->irq2_w(new_state); + m_slot7a->busint_w(new_state); + m_slot7->busint_w(new_state); m_maincpu->set_input_line(0, new_state); } @@ -433,9 +433,13 @@ void dmv_state::update_irqs(int slot, int state) switch(slot) { + case 0: // slot 2 + m_slot7->irq2_w(state); + m_slot7a->irq2_w(state); + break; case 1: // slot 2a - m_slot7->irq5_w(state); - m_slot7a->irq5_w(state); + m_slot7->irq2a_w(state); + m_slot7a->irq2a_w(state); break; case 2: // slot 3 m_slot7->irq3_w(state); @@ -446,8 +450,12 @@ void dmv_state::update_irqs(int slot, int state) m_slot7a->irq4_w(state); break; case 4: // slot 5 - m_slot7->irq7_w(state); - m_slot7a->irq7_w(state); + m_slot7->irq5_w(state); + m_slot7a->irq5_w(state); + break; + case 5: // slot 6 + m_slot7->irq6_w(state); + m_slot7a->irq6_w(state); break; } } @@ -537,8 +545,8 @@ WRITE8_MEMBER(dmv_state::kb_mcu_port1_w) WRITE8_MEMBER(dmv_state::kb_mcu_port2_w) { m_speaker->level_w(BIT(data, 0)); - m_slot7a->irq1_w(BIT(data, 4)); - m_slot7->irq1_w(BIT(data, 4)); + m_slot7a->keyint_w(BIT(data, 4)); + m_slot7->keyint_w(BIT(data, 4)); } static ADDRESS_MAP_START( dmv_kb_ctrl_io, AS_IO, 8, dmv_state ) @@ -652,14 +660,14 @@ WRITE_LINE_MEMBER( dmv_state::pit_out0 ) WRITE_LINE_MEMBER( dmv_state::timint_w ) { - m_slot7a->irq0_w(state); - m_slot7->irq0_w(state); + m_slot7a->timint_w(state); + m_slot7->timint_w(state); } WRITE_LINE_MEMBER( dmv_state::fdc_irq ) { - m_slot7a->irq6_w(state); - m_slot7->irq6_w(state); + m_slot7a->flexint_w(state); + m_slot7->flexint_w(state); if (state) m_fdc->tc_w(false); -- cgit v1.2.3