summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/pet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/pet.cpp')
-rw-r--r--src/mame/drivers/pet.cpp90
1 files changed, 10 insertions, 80 deletions
diff --git a/src/mame/drivers/pet.cpp b/src/mame/drivers/pet.cpp
index c6597fcc414..720cbc68e01 100644
--- a/src/mame/drivers/pet.cpp
+++ b/src/mame/drivers/pet.cpp
@@ -167,6 +167,7 @@ ROM sockets: UA3 2K or 4K character
#include "machine/6522via.h"
#include "machine/6821pia.h"
#include "machine/cbm_snqk.h"
+#include "machine/input_merger.h"
#include "machine/pla.h"
#include "machine/ram.h"
#include "machine/timer.h"
@@ -216,12 +217,6 @@ public:
m_sync(0),
m_graphic(0),
m_blanktv(0),
- m_via_irq(CLEAR_LINE),
- m_pia1a_irq(CLEAR_LINE),
- m_pia1b_irq(CLEAR_LINE),
- m_pia2a_irq(CLEAR_LINE),
- m_pia2b_irq(CLEAR_LINE),
- m_exp_irq(CLEAR_LINE),
m_user_diag(1)
{ }
@@ -249,23 +244,17 @@ public:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
- DECLARE_WRITE_LINE_MEMBER( via_irq_w );
DECLARE_WRITE8_MEMBER( via_pa_w );
DECLARE_READ8_MEMBER( via_pb_r );
DECLARE_WRITE8_MEMBER( via_pb_w );
DECLARE_WRITE_LINE_MEMBER( via_ca2_w );
DECLARE_WRITE_LINE_MEMBER( via_cb2_w );
- DECLARE_WRITE_LINE_MEMBER( pia1_irqa_w );
- DECLARE_WRITE_LINE_MEMBER( pia1_irqb_w );
DECLARE_READ8_MEMBER( pia1_pa_r );
DECLARE_READ8_MEMBER( pia1_pb_r );
DECLARE_WRITE8_MEMBER( pia1_pa_w );
DECLARE_WRITE_LINE_MEMBER( pia1_ca2_w );
- DECLARE_WRITE_LINE_MEMBER( pia2_irqa_w );
- DECLARE_WRITE_LINE_MEMBER( pia2_irqb_w );
-
DECLARE_WRITE_LINE_MEMBER( user_diag_w );
MC6845_BEGIN_UPDATE( pet_begin_update );
@@ -313,8 +302,6 @@ protected:
DECLARE_MACHINE_START( pet2001 );
DECLARE_MACHINE_RESET( pet );
-
- void check_interrupts();
void update_speaker();
enum
@@ -352,13 +339,6 @@ protected:
uint8_t m_via_pa;
- // interrupt state
- int m_via_irq;
- int m_pia1a_irq;
- int m_pia1b_irq;
- int m_pia2a_irq;
- int m_pia2b_irq;
- int m_exp_irq;
int m_user_diag;
};
@@ -496,19 +476,6 @@ QUICKLOAD_LOAD_MEMBER( pet_state, cbm_pet )
//**************************************************************************
//-------------------------------------------------
-// check_interrupts -
-//-------------------------------------------------
-
-void pet_state::check_interrupts()
-{
- int irq = m_via_irq || m_pia1a_irq || m_pia1b_irq || m_pia2a_irq || m_pia2b_irq || m_exp_irq;
-
- m_maincpu->set_input_line(M6502_IRQ_LINE, irq);
- m_exp->irq_w(irq);
-}
-
-
-//-------------------------------------------------
// update_speaker -
//-------------------------------------------------
@@ -1154,13 +1121,6 @@ INPUT_PORTS_END
// DEVICE CONFIGURATION
//**************************************************************************
-WRITE_LINE_MEMBER( pet_state::via_irq_w )
-{
- m_via_irq = state;
-
- check_interrupts();
-}
-
WRITE8_MEMBER( pet_state::via_pa_w )
{
m_user->write_c((data>>0)&1);
@@ -1246,20 +1206,6 @@ WRITE_LINE_MEMBER( pet_state::via_cb2_w )
}
-WRITE_LINE_MEMBER( pet_state::pia1_irqa_w )
-{
- m_pia1a_irq = state;
-
- check_interrupts();
-}
-
-WRITE_LINE_MEMBER( pet_state::pia1_irqb_w )
-{
- m_pia1b_irq = state;
-
- check_interrupts();
-}
-
READ8_MEMBER( pet_state::pia1_pa_r )
{
/*
@@ -1370,20 +1316,6 @@ WRITE_LINE_MEMBER( pet_state::pia1_ca2_w )
}
-WRITE_LINE_MEMBER( pet_state::pia2_irqa_w )
-{
- m_pia2a_irq = state;
-
- check_interrupts();
-}
-
-WRITE_LINE_MEMBER( pet_state::pia2_irqb_w )
-{
- m_pia2b_irq = state;
-
- check_interrupts();
-}
-
WRITE_LINE_MEMBER( pet_state::user_diag_w )
{
m_user_diag = state;
@@ -1611,12 +1543,6 @@ MACHINE_START_MEMBER( pet_state, pet )
save_item(NAME(m_sync));
save_item(NAME(m_graphic));
save_item(NAME(m_blanktv));
- save_item(NAME(m_via_irq));
- save_item(NAME(m_pia1a_irq));
- save_item(NAME(m_pia1b_irq));
- save_item(NAME(m_pia2a_irq));
- save_item(NAME(m_pia2b_irq));
- save_item(NAME(m_exp_irq));
save_item(NAME(m_user_diag));
}
@@ -1731,6 +1657,10 @@ void pet_state::_32k(machine_config &config)
void pet_state::base_pet_devices(machine_config &config, const char *default_drive)
{
+ input_merger_device &mainirq(INPUT_MERGER_ANY_HIGH(config, "mainirq")); // open collector
+ mainirq.output_handler().set_inputline(m_maincpu, m6502_device::IRQ_LINE);
+ mainirq.output_handler().append(m_exp, FUNC(pet_expansion_slot_device::irq_w));
+
PALETTE(config, m_palette, palette_device::MONOCHROME);
VIA6522(config, m_via, XTAL(16'000'000)/16);
@@ -1739,7 +1669,7 @@ void pet_state::base_pet_devices(machine_config &config, const char *default_dri
m_via->writepb_handler().set(FUNC(pet_state::via_pb_w));
m_via->ca2_handler().set(FUNC(pet_state::via_ca2_w));
m_via->cb2_handler().set(FUNC(pet_state::via_cb2_w));
- m_via->irq_handler().set(FUNC(pet_state::via_irq_w));
+ m_via->irq_handler().set("mainirq", FUNC(input_merger_device::in_w<0>));
PIA6821(config, m_pia1, 0);
m_pia1->readpa_handler().set(FUNC(pet_state::pia1_pa_r));
@@ -1748,16 +1678,16 @@ void pet_state::base_pet_devices(machine_config &config, const char *default_dri
m_pia1->writepa_handler().set(FUNC(pet_state::pia1_pa_w));
m_pia1->ca2_handler().set(FUNC(pet_state::pia1_ca2_w));
m_pia1->cb2_handler().set(PET_DATASSETTE_PORT_TAG, FUNC(pet_datassette_port_device::motor_w));
- m_pia1->irqa_handler().set(FUNC(pet_state::pia1_irqa_w));
- m_pia1->irqb_handler().set(FUNC(pet_state::pia1_irqb_w));
+ m_pia1->irqa_handler().set("mainirq", FUNC(input_merger_device::in_w<1>));
+ m_pia1->irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<2>));
PIA6821(config, m_pia2, 0);
m_pia2->readpa_handler().set(IEEE488_TAG, FUNC(ieee488_device::dio_r));
m_pia2->writepb_handler().set(IEEE488_TAG, FUNC(ieee488_device::host_dio_w));
m_pia2->ca2_handler().set(IEEE488_TAG, FUNC(ieee488_device::host_ndac_w));
m_pia2->cb2_handler().set(IEEE488_TAG, FUNC(ieee488_device::host_dav_w));
- m_pia2->irqa_handler().set(FUNC(pet_state::pia2_irqa_w));
- m_pia2->irqb_handler().set(FUNC(pet_state::pia2_irqb_w));
+ m_pia2->irqa_handler().set("mainirq", FUNC(input_merger_device::in_w<3>));
+ m_pia2->irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<4>));
ieee488_slot_device::add_cbm_defaults(config, default_drive);
IEEE488(config, m_ieee, 0);