summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Sandro Ronco <sandro.ronco@gmx.com>2014-11-25 22:45:09 +0100
committer Sandro Ronco <sandro.ronco@gmx.com>2014-11-25 22:45:09 +0100
commit044f3688ac51e2db2625525416024e1f913c6e7a (patch)
treefa1ea1bb79aa5136b590fabd06bae5238c6edc47
parent5fcdaf0c9535f898b519ed1704c09a0ec500728e (diff)
(MESS) dmv: added dipswitches to K235 for configure INT5 and INT7 source. (nw)
-rw-r--r--src/emu/bus/dmv/dmvbus.c32
-rw-r--r--src/emu/bus/dmv/dmvbus.h16
-rw-r--r--src/emu/bus/dmv/k230.c23
-rw-r--r--src/emu/bus/dmv/k230.h24
-rw-r--r--src/mess/drivers/dmv.c32
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<pic8259_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);