(MESS) dmv: added dipswitches to K235 for configure INT5 and INT7 source. (nw)

This commit is contained in:
Sandro Ronco 2014-11-25 22:45:09 +01:00
parent 5fcdaf0c95
commit 044f3688ac
5 changed files with 87 additions and 38 deletions

View File

@ -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);
}

View File

@ -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

View File

@ -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;

View File

@ -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;
virtual ioport_constructor device_input_ports() 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); }
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

View File

@ -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);