summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/vic10.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/vic10.cpp')
-rw-r--r--src/mame/drivers/vic10.cpp89
1 files changed, 18 insertions, 71 deletions
diff --git a/src/mame/drivers/vic10.cpp b/src/mame/drivers/vic10.cpp
index fb120e8c1c5..c740ae8b0d5 100644
--- a/src/mame/drivers/vic10.cpp
+++ b/src/mame/drivers/vic10.cpp
@@ -17,6 +17,7 @@
#include "bus/vic10/exp.h"
#include "bus/vcs_ctrl/ctrl.h"
#include "cpu/m6502/m6510.h"
+#include "machine/input_merger.h"
#include "machine/mos6526.h"
#include "machine/ram.h"
#include "sound/mos6581.h"
@@ -48,10 +49,7 @@ public:
m_color_ram(*this, "color_ram"),
m_row(*this, "ROW%u", 0),
m_restore(*this, "RESTORE"),
- m_lock(*this, "LOCK"),
- m_cia_irq(CLEAR_LINE),
- m_vic_irq(CLEAR_LINE),
- m_exp_irq(CLEAR_LINE)
+ m_lock(*this, "LOCK")
{ }
void vic10(machine_config &config);
@@ -74,19 +72,15 @@ private:
virtual void machine_start() override;
virtual void machine_reset() override;
- void check_interrupts();
-
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
- DECLARE_WRITE_LINE_MEMBER( vic_irq_w );
DECLARE_READ8_MEMBER( vic_videoram_r );
DECLARE_READ8_MEMBER( vic_colorram_r );
DECLARE_READ8_MEMBER( sid_potx_r );
DECLARE_READ8_MEMBER( sid_poty_r );
- DECLARE_WRITE_LINE_MEMBER( cia_irq_w );
DECLARE_READ8_MEMBER( cia_pa_r );
DECLARE_READ8_MEMBER( cia_pb_r );
DECLARE_WRITE8_MEMBER( cia_pb_w );
@@ -94,13 +88,8 @@ private:
DECLARE_READ8_MEMBER( cpu_r );
DECLARE_WRITE8_MEMBER( cpu_w );
- DECLARE_WRITE_LINE_MEMBER( exp_irq_w );
DECLARE_WRITE_LINE_MEMBER( exp_reset_w );
- // interrupt state
- int m_cia_irq;
- int m_vic_irq;
- int m_exp_irq;
void vic10_mem(address_map &map);
void vic_colorram_map(address_map &map);
void vic_videoram_map(address_map &map);
@@ -108,21 +97,6 @@ private:
//**************************************************************************
-// INTERRUPTS
-//**************************************************************************
-
-//-------------------------------------------------
-// check_interrupts -
-//-------------------------------------------------
-
-void vic10_state::check_interrupts()
-{
- m_maincpu->set_input_line(M6502_IRQ_LINE, m_cia_irq || m_vic_irq || m_exp_irq);
-}
-
-
-
-//**************************************************************************
// MEMORY MANAGEMENT
//**************************************************************************
@@ -378,18 +352,6 @@ INPUT_PORTS_END
//**************************************************************************
//-------------------------------------------------
-// vic2_interface vic_intf
-//-------------------------------------------------
-
-WRITE_LINE_MEMBER( vic10_state::vic_irq_w )
-{
- m_vic_irq = state;
-
- check_interrupts();
-}
-
-
-//-------------------------------------------------
// sid6581_interface sid_intf
//-------------------------------------------------
@@ -452,13 +414,6 @@ READ8_MEMBER( vic10_state::sid_poty_r )
// MOS6526_INTERFACE( cia_intf )
//-------------------------------------------------
-WRITE_LINE_MEMBER( vic10_state::cia_irq_w )
-{
- m_cia_irq = state;
-
- check_interrupts();
-}
-
READ8_MEMBER( vic10_state::cia_pa_r )
{
/*
@@ -630,13 +585,6 @@ WRITE8_MEMBER( vic10_state::cpu_w )
// VIC10_EXPANSION_INTERFACE( expansion_intf )
//-------------------------------------------------
-WRITE_LINE_MEMBER( vic10_state::exp_irq_w )
-{
- m_exp_irq = state;
-
- check_interrupts();
-}
-
WRITE_LINE_MEMBER( vic10_state::exp_reset_w )
{
if (state == ASSERT_LINE)
@@ -668,11 +616,6 @@ void vic10_state::machine_start()
m_ram->pointer()[offset] = data;
if (!(offset % 64)) data ^= 0xff;
}
-
- // state saving
- save_item(NAME(m_cia_irq));
- save_item(NAME(m_vic_irq));
- save_item(NAME(m_exp_irq));
}
@@ -706,13 +649,16 @@ MACHINE_CONFIG_START(vic10_state::vic10)
MCFG_M6510_PORT_PULLS(0x10, 0x20)
MCFG_QUANTUM_PERFECT_CPU(M6510_TAG)
+ INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m6510_device::IRQ_LINE);
+
// video hardware
- MCFG_DEVICE_ADD(MOS6566_TAG, MOS6566, XTAL(8'000'000)/8)
- MCFG_MOS6566_CPU(M6510_TAG)
- MCFG_MOS6566_IRQ_CALLBACK(WRITELINE(*this, vic10_state, vic_irq_w))
- MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
- MCFG_DEVICE_ADDRESS_MAP(0, vic_videoram_map)
- MCFG_DEVICE_ADDRESS_MAP(1, vic_colorram_map)
+ mos8566_device &mos8566(MOS8566(config, MOS6566_TAG, XTAL(8'000'000)/8));
+ mos8566.set_cpu(M6510_TAG);
+ mos8566.irq_callback().set("mainirq", FUNC(input_merger_device::in_w<1>));
+ mos8566.set_screen(SCREEN_TAG);
+ mos8566.set_addrmap(0, &vic10_state::vic_videoram_map);
+ mos8566.set_addrmap(1, &vic10_state::vic_colorram_map);
+
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
MCFG_SCREEN_REFRESH_RATE(VIC6566_VRETRACERATE)
MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES)
@@ -729,7 +675,7 @@ MACHINE_CONFIG_START(vic10_state::vic10)
// devices
MCFG_DEVICE_ADD(MOS6526_TAG, MOS6526, XTAL(8'000'000)/8)
MCFG_MOS6526_TOD(60)
- MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(*this, vic10_state, cia_irq_w))
+ MCFG_MOS6526_IRQ_CALLBACK(WRITELINE("mainirq", input_merger_device, in_w<0>))
MCFG_MOS6526_CNT_CALLBACK(WRITELINE(VIC10_EXPANSION_SLOT_TAG, vic10_expansion_slot_device, cnt_w))
MCFG_MOS6526_SP_CALLBACK(WRITELINE(VIC10_EXPANSION_SLOT_TAG, vic10_expansion_slot_device, sp_w))
MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, vic10_state, cia_pa_r))
@@ -739,11 +685,12 @@ MACHINE_CONFIG_START(vic10_state::vic10)
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr)
MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(WRITELINE(MOS6566_TAG, mos6566_device, lp_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy")
- MCFG_DEVICE_ADD(VIC10_EXPANSION_SLOT_TAG, VIC10_EXPANSION_SLOT, XTAL(8'000'000)/8, vic10_expansion_cards, nullptr)
- MCFG_VIC10_EXPANSION_SLOT_IRQ_CALLBACK(WRITELINE(*this, vic10_state, exp_irq_w))
- MCFG_VIC10_EXPANSION_SLOT_RES_CALLBACK(WRITELINE(*this, vic10_state, exp_reset_w))
- MCFG_VIC10_EXPANSION_SLOT_CNT_CALLBACK(WRITELINE(MOS6526_TAG, mos6526_device, cnt_w))
- MCFG_VIC10_EXPANSION_SLOT_SP_CALLBACK(WRITELINE(MOS6526_TAG, mos6526_device, sp_w))
+
+ VIC10_EXPANSION_SLOT(config, m_exp, XTAL(8'000'000)/8, vic10_expansion_cards, nullptr);
+ m_exp->irq_callback().set("mainirq", FUNC(input_merger_device::in_w<2>));
+ m_exp->res_callback().set(FUNC(vic10_state::exp_reset_w));
+ m_exp->cnt_callback().set(m_cia, FUNC(mos6526_device::cnt_w));
+ m_exp->sp_callback().set(m_cia, FUNC(mos6526_device::sp_w));
// software list
MCFG_SOFTWARE_LIST_ADD("cart_list", "vic10")