mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
pet.cpp: Use input merger device for IRQ (nw)
This commit is contained in:
parent
492791105a
commit
b5d3e5ee4f
@ -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;
|
||||
};
|
||||
|
||||
@ -495,19 +475,6 @@ QUICKLOAD_LOAD_MEMBER( pet_state, cbm_pet )
|
||||
// INTERRUPTS
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// 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);
|
||||
|
Loading…
Reference in New Issue
Block a user