mos6566, cbm2_user_port, vic10_expansion_slot: Replace MCFG_ macros with devcb3 (nw)

cbm2.cpp, vic10.cpp: Use input merger device for IRQ (nw)
This commit is contained in:
AJR 2018-08-13 19:48:20 -04:00
parent f21ebf0ba1
commit 5ed6731658
7 changed files with 156 additions and 306 deletions

View File

@ -30,37 +30,6 @@
//**************************************************************************
// CONSTANTS
//**************************************************************************
#define CBM2_USER_PORT_TAG "user"
//**************************************************************************
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_CBM2_USER_PORT_ADD(_tag, _slot_intf, _def_slot) \
MCFG_DEVICE_ADD(_tag, CBM2_USER_PORT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
#define MCFG_CBM2_USER_PORT_IRQ_CALLBACK(_write) \
downcast<cbm2_user_port_device &>(*device).set_irq_wr_callback(DEVCB_##_write);
#define MCFG_CBM2_USER_PORT_SP_CALLBACK(_write) \
downcast<cbm2_user_port_device &>(*device).set_sp_wr_callback(DEVCB_##_write);
#define MCFG_CBM2_USER_PORT_CNT_CALLBACK(_write) \
downcast<cbm2_user_port_device &>(*device).set_cnt_wr_callback(DEVCB_##_write);
#define MCFG_CBM2_USER_PORT_FLAG_CALLBACK(_write) \
downcast<cbm2_user_port_device &>(*device).set_flag_wr_callback(DEVCB_##_write);
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@ -103,12 +72,21 @@ class cbm2_user_port_device : public device_t,
{
public:
// construction/destruction
template <typename T>
cbm2_user_port_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
: cbm2_user_port_device(mconfig, tag, owner, 0)
{
option_reset();
opts(*this);
set_default_option(dflt);
set_fixed(false);
}
cbm2_user_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
template <class Object> devcb_base &set_irq_wr_callback(Object &&cb) { return m_write_irq.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_sp_wr_callback(Object &&cb) { return m_write_sp.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_cnt_wr_callback(Object &&cb) { return m_write_cnt.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_flag_wr_callback(Object &&cb) { return m_write_flag.set_callback(std::forward<Object>(cb)); }
auto irq_callback() { return m_write_irq.bind(); }
auto sp_callback() { return m_write_sp.bind(); }
auto cnt_callback() { return m_write_cnt.bind(); }
auto flag_callback() { return m_write_flag.bind(); }
// computer interface
DECLARE_READ8_MEMBER( d1_r ) { uint8_t data = 0xff; if (m_card != nullptr) data = m_card->cbm2_d1_r(space, offset); return data; }

View File

@ -48,31 +48,6 @@
//**************************************************************************
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_VIC10_EXPANSION_SLOT_IRQ_CALLBACK(_write) \
downcast<vic10_expansion_slot_device &>(*device).set_irq_wr_callback(DEVCB_##_write);
#define MCFG_VIC10_EXPANSION_SLOT_RES_CALLBACK(_write) \
downcast<vic10_expansion_slot_device &>(*device).set_res_wr_callback(DEVCB_##_write);
#define MCFG_VIC10_EXPANSION_SLOT_CNT_CALLBACK(_write) \
downcast<vic10_expansion_slot_device &>(*device).set_cnt_wr_callback(DEVCB_##_write);
#define MCFG_VIC10_EXPANSION_SLOT_SP_CALLBACK(_write) \
downcast<vic10_expansion_slot_device &>(*device).set_sp_wr_callback(DEVCB_##_write);
#define MCFG_VIC10_EXPANSION_SLOT_IRQ_CALLBACKS(_irq, _res) \
downcast<vic10_expansion_slot_device *>(device)->set_irq_callbacks(DEVCB_##_irq, DEVCB_##_res);
#define MCFG_VIC10_EXPANSION_SLOT_SERIAL_CALLBACKS(_cnt, _sp) \
downcast<vic10_expansion_slot_device *>(device)->set_serial_callbacks(DEVCB_##_cnt, DEVCB_##_sp);
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@ -98,10 +73,10 @@ public:
}
vic10_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
template <class Object> devcb_base &set_irq_wr_callback(Object &&cb) { return m_write_irq.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_res_wr_callback(Object &&cb) { return m_write_res.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_cnt_wr_callback(Object &&cb) { return m_write_cnt.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_sp_wr_callback(Object &&cb) { return m_write_sp.set_callback(std::forward<Object>(cb)); }
auto irq_callback() { return m_write_irq.bind(); }
auto res_callback() { return m_write_res.bind(); }
auto cnt_callback() { return m_write_cnt.bind(); }
auto sp_callback() { return m_write_sp.bind(); }
// computer interface
uint8_t cd_r(address_space &space, offs_t offset, uint8_t data, int lorom, int uprom, int exram);

View File

@ -85,27 +85,6 @@
//***************************************************************************
// DEVICE CONFIGURATION MACROS
//***************************************************************************
#define MCFG_MOS6566_CPU(_tag) \
downcast<mos6566_device &>(*device).set_cpu_tag(_tag);
#define MCFG_MOS6566_IRQ_CALLBACK(_write) \
downcast<mos6566_device &>(*device).set_irq_wr_callback(DEVCB_##_write);
#define MCFG_MOS6566_BA_CALLBACK(_write) \
downcast<mos6566_device &>(*device).set_ba_wr_callback(DEVCB_##_write);
#define MCFG_MOS6566_AEC_CALLBACK(_write) \
downcast<mos6566_device &>(*device).set_aec_wr_callback(DEVCB_##_write);
#define MCFG_MOS8564_K_CALLBACK(_write) \
downcast<mos6566_device &>(*device).set_k_wr_callback(DEVCB_##_write);
//**************************************************************************
// MACROS / CONSTANTS
//**************************************************************************
@ -212,11 +191,11 @@ public:
// construction/destruction
mos6566_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
void set_cpu_tag(const char *tag) { m_cpu.set_tag(tag); }
template <class Object> devcb_base &set_irq_wr_callback(Object &&cb) { return m_write_irq.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_ba_wr_callback(Object &&cb) { return m_write_ba.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_aec_wr_callback(Object &&cb) { return m_write_aec.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_k_wr_callback(Object &&cb) { return m_write_k.set_callback(std::forward<Object>(cb)); }
template <class T> void set_cpu(T &&tag) { m_cpu.set_tag(tag); }
auto irq_callback() { return m_write_irq.bind(); }
auto ba_callback() { return m_write_ba.bind(); }
auto aec_callback() { return m_write_aec.bind(); }
auto k_callback() { return m_write_k.bind(); }
virtual space_config_vector memory_space_config() const override;

View File

@ -1717,13 +1717,14 @@ MACHINE_CONFIG_START(c128_state::ntsc)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
MCFG_SCREEN_UPDATE_DEVICE(MOS8563_TAG, mos8563_device, screen_update)
MCFG_DEVICE_ADD(MOS8564_TAG, MOS8564, XTAL(14'318'181)*2/3.5)
MCFG_MOS6566_CPU(M8502_TAG)
MCFG_MOS6566_IRQ_CALLBACK(WRITELINE(*this, c128_state, vic_irq_w))
MCFG_MOS8564_K_CALLBACK(WRITE8(*this, c128_state, vic_k_w))
MCFG_VIDEO_SET_SCREEN(SCREEN_VIC_TAG)
MCFG_DEVICE_ADDRESS_MAP(0, vic_videoram_map)
MCFG_DEVICE_ADDRESS_MAP(1, vic_colorram_map)
mos8564_device &mos8564(MOS8564(config, MOS8564_TAG, XTAL(14'318'181)*2/3.5));
mos8564.set_cpu(M8502_TAG);
mos8564.irq_callback().set(FUNC(c128_state::vic_irq_w));
mos8564.k_callback().set(FUNC(c128_state::vic_k_w));
mos8564.set_screen(SCREEN_VIC_TAG);
mos8564.set_addrmap(0, &c128_state::vic_videoram_map);
mos8564.set_addrmap(1, &c128_state::vic_colorram_map);
MCFG_SCREEN_ADD(SCREEN_VIC_TAG, RASTER)
MCFG_SCREEN_REFRESH_RATE(VIC6567_VRETRACERATE)
MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES)
@ -1891,13 +1892,14 @@ MACHINE_CONFIG_START(c128_state::pal)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
MCFG_SCREEN_UPDATE_DEVICE(MOS8563_TAG, mos8563_device, screen_update)
MCFG_DEVICE_ADD(MOS8566_TAG, MOS8566, XTAL(17'734'472)*2/4.5)
MCFG_MOS6566_CPU(M8502_TAG)
MCFG_MOS6566_IRQ_CALLBACK(WRITELINE(*this, c128_state, vic_irq_w))
MCFG_MOS8564_K_CALLBACK(WRITE8(*this, c128_state, vic_k_w))
MCFG_VIDEO_SET_SCREEN(SCREEN_VIC_TAG)
MCFG_DEVICE_ADDRESS_MAP(0, vic_videoram_map)
MCFG_DEVICE_ADDRESS_MAP(1, vic_colorram_map)
mos8566_device &mos8566(MOS8566(config, MOS8566_TAG, XTAL(17'734'472)*2/4.5));
mos8566.set_cpu(M8502_TAG);
mos8566.irq_callback().set(FUNC(c128_state::vic_irq_w));
mos8566.k_callback().set(FUNC(c128_state::vic_k_w));
mos8566.set_screen(SCREEN_VIC_TAG);
mos8566.set_addrmap(0, &c128_state::vic_videoram_map);
mos8566.set_addrmap(1, &c128_state::vic_colorram_map);
MCFG_SCREEN_ADD(SCREEN_VIC_TAG, RASTER)
MCFG_SCREEN_REFRESH_RATE(VIC6569_VRETRACERATE)
MCFG_SCREEN_SIZE(VIC6569_COLUMNS, VIC6569_LINES)

View File

@ -1337,12 +1337,13 @@ MACHINE_CONFIG_START(c64_state::ntsc)
MCFG_QUANTUM_PERFECT_CPU(M6510_TAG)
// video hardware
MCFG_DEVICE_ADD(MOS6567_TAG, MOS6567, XTAL(14'318'181)/14)
MCFG_MOS6566_CPU(M6510_TAG)
MCFG_MOS6566_IRQ_CALLBACK(WRITELINE(*this, c64_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)
mos6567_device &mos6567(MOS6567(config, MOS6567_TAG, XTAL(14'318'181)/14));
mos6567.set_cpu(M6510_TAG);
mos6567.irq_callback().set(FUNC(c64_state::vic_irq_w));
mos6567.set_screen(SCREEN_TAG);
mos6567.set_addrmap(0, &c64_state::vic_videoram_map);
mos6567.set_addrmap(1, &c64_state::vic_colorram_map);
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
MCFG_SCREEN_REFRESH_RATE(VIC6567_VRETRACERATE)
MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES)
@ -1495,12 +1496,13 @@ MACHINE_CONFIG_START(c64_state::pal)
MCFG_QUANTUM_PERFECT_CPU(M6510_TAG)
// video hardware
MCFG_DEVICE_ADD(MOS6569_TAG, MOS6569, XTAL(17'734'472)/18)
MCFG_MOS6566_CPU(M6510_TAG)
MCFG_MOS6566_IRQ_CALLBACK(WRITELINE(*this, c64_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)
mos6569_device &mos6569(MOS6569(config, MOS6569_TAG, XTAL(17'734'472)/18));
mos6569.set_cpu(M6510_TAG);
mos6569.irq_callback().set(FUNC(c64_state::vic_irq_w));
mos6569.set_screen(SCREEN_TAG);
mos6569.set_addrmap(0, &c64_state::vic_videoram_map);
mos6569.set_addrmap(1, &c64_state::vic_colorram_map);
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
MCFG_SCREEN_REFRESH_RATE(VIC6569_VRETRACERATE)
MCFG_SCREEN_SIZE(VIC6569_COLUMNS, VIC6569_LINES)
@ -1631,12 +1633,13 @@ MACHINE_CONFIG_START(c64gs_state::pal_gs)
MCFG_QUANTUM_PERFECT_CPU(M6510_TAG)
// video hardware
MCFG_DEVICE_ADD(MOS6569_TAG, MOS8565, XTAL(17'734'472)/18)
MCFG_MOS6566_CPU(M6510_TAG)
MCFG_MOS6566_IRQ_CALLBACK(WRITELINE(*this, c64_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)
mos8565_device &mos8565(MOS8565(config, MOS6569_TAG, XTAL(17'734'472)/18));
mos8565.set_cpu(M6510_TAG);
mos8565.irq_callback().set(FUNC(c64_state::vic_irq_w));
mos8565.set_screen(SCREEN_TAG);
mos8565.set_addrmap(0, &c64_state::vic_videoram_map);
mos8565.set_addrmap(1, &c64_state::vic_colorram_map);
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
MCFG_SCREEN_REFRESH_RATE(VIC6569_VRETRACERATE)
MCFG_SCREEN_SIZE(VIC6569_COLUMNS, VIC6569_LINES)

View File

@ -27,6 +27,7 @@
#include "machine/6525tpi.h"
#include "machine/ds75160a.h"
#include "machine/ds75161a.h"
#include "machine/input_merger.h"
#include "machine/mos6526.h"
#include "machine/mos6551.h"
#include "machine/pic8259.h"
@ -53,6 +54,7 @@
#define CONTROL1_TAG "joy1"
#define CONTROL2_TAG "joy2"
#define RS232_TAG "rs232"
#define USER_PORT_TAG "user"
#define EXT_I8088_TAG "ext_u1"
#define EXT_I8087_TAG "ext_u4"
@ -79,7 +81,7 @@ public:
m_joy1(*this, CONTROL1_TAG),
m_joy2(*this, CONTROL2_TAG),
m_exp(*this, CBM2_EXPANSION_SLOT_TAG),
m_user(*this, CBM2_USER_PORT_TAG),
m_user(*this, USER_PORT_TAG),
m_ram(*this, RAM_TAG),
m_cassette(*this, PET_DATASSETTE_PORT_TAG),
m_ieee(*this, IEEE488_TAG),
@ -100,9 +102,6 @@ public:
m_video_ram_size(0x800),
m_graphics(1),
m_todclk(0),
m_tpi1_irq(CLEAR_LINE),
m_acia_irq(CLEAR_LINE),
m_user_irq(CLEAR_LINE),
m_tpi2_pa(0),
m_tpi2_pb(0)
{ }
@ -167,7 +166,6 @@ public:
DECLARE_READ8_MEMBER( sid_potx_r );
DECLARE_READ8_MEMBER( sid_poty_r );
DECLARE_WRITE_LINE_MEMBER( tpi1_irq_w );
DECLARE_READ8_MEMBER( tpi1_pa_r );
DECLARE_WRITE8_MEMBER( tpi1_pa_w );
DECLARE_READ8_MEMBER( tpi1_pb_r );
@ -191,8 +189,6 @@ public:
DECLARE_READ8_MEMBER( ext_cia_pb_r );
DECLARE_WRITE8_MEMBER( ext_cia_pb_w );
DECLARE_WRITE_LINE_MEMBER( user_irq_w );
MC6845_UPDATE_ROW( crtc_update_row );
DECLARE_QUICKLOAD_LOAD_MEMBER( cbmb );
@ -208,9 +204,6 @@ public:
// interrupt state
int m_todclk;
int m_tpi1_irq;
int m_acia_irq;
int m_user_irq;
// keyboard state;
uint8_t m_tpi2_pa;
@ -268,8 +261,7 @@ public:
m_color_ram(*this, "color_ram"),
m_statvid(1),
m_vicdotsel(1),
m_vicbnksel(0x03),
m_vic_irq(CLEAR_LINE)
m_vicbnksel(0x03)
{ }
required_device<pla_device> m_pla2;
@ -301,17 +293,13 @@ public:
DECLARE_READ8_MEMBER( vic_videoram_r );
DECLARE_READ8_MEMBER( vic_colorram_r );
DECLARE_WRITE_LINE_MEMBER( vic_irq_w );
DECLARE_WRITE_LINE_MEMBER( tpi1_irq_w );
DECLARE_WRITE_LINE_MEMBER( tpi1_ca_w );
DECLARE_WRITE_LINE_MEMBER( tpi1_cb_w );
DECLARE_READ8_MEMBER( tpi2_pc_r );
DECLARE_WRITE8_MEMBER( tpi2_pc_w );
DECLARE_WRITE_LINE_MEMBER( user_irq_w );
DECLARE_QUICKLOAD_LOAD_MEMBER( p500 );
// video state
int m_statvid;
@ -319,7 +307,6 @@ public:
int m_vicbnksel;
// interrupt state
int m_vic_irq;
void p500_pal(machine_config &config);
void p500_ntsc(machine_config &config);
void p500_mem(address_map &map);
@ -1450,17 +1437,6 @@ MC6845_UPDATE_ROW( cbm2_state::crtc_update_row )
}
}
//-------------------------------------------------
// vic2_interface vic_intf
//-------------------------------------------------
WRITE_LINE_MEMBER( p500_state::vic_irq_w )
{
m_vic_irq = state;
m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_vic_irq || m_tpi1_irq || m_user_irq);
}
//-------------------------------------------------
// MOS6581_INTERFACE( sid_intf )
@ -1525,20 +1501,6 @@ READ8_MEMBER( cbm2_state::sid_poty_r )
// tpi6525_interface tpi1_intf
//-------------------------------------------------
WRITE_LINE_MEMBER( cbm2_state::tpi1_irq_w )
{
m_tpi1_irq = state;
m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_tpi1_irq || m_user_irq);
}
WRITE_LINE_MEMBER( p500_state::tpi1_irq_w )
{
m_tpi1_irq = state;
m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_vic_irq || m_tpi1_irq || m_user_irq);
}
READ8_MEMBER( cbm2_state::tpi1_pa_r )
{
/*
@ -2074,30 +2036,6 @@ WRITE8_MEMBER( cbm2_state::ext_cia_pb_w )
}
//-------------------------------------------------
// CBM2_USER_PORT_INTERFACE( user_intf )
//-------------------------------------------------
WRITE_LINE_MEMBER( cbm2_state::user_irq_w )
{
m_user_irq = state;
m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_tpi1_irq || m_user_irq);
}
//-------------------------------------------------
// CBM2_USER_PORT_INTERFACE( p500_user_intf )
//-------------------------------------------------
WRITE_LINE_MEMBER( p500_state::user_irq_w )
{
m_user_irq = state;
m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_vic_irq || m_tpi1_irq || m_user_irq);
}
//**************************************************************************
// MACHINE INITIALIZATION
@ -2140,7 +2078,6 @@ MACHINE_START_MEMBER( cbm2_state, cbm2 )
save_item(NAME(m_graphics));
save_item(NAME(m_ntsc));
save_item(NAME(m_todclk));
save_item(NAME(m_tpi1_irq));
save_item(NAME(m_tpi2_pa));
save_item(NAME(m_tpi2_pb));
save_item(NAME(m_cia_pa));
@ -2214,7 +2151,6 @@ MACHINE_START_MEMBER( p500_state, p500 )
save_item(NAME(m_statvid));
save_item(NAME(m_vicdotsel));
save_item(NAME(m_vicbnksel));
save_item(NAME(m_vic_irq));
}
@ -2248,8 +2184,6 @@ MACHINE_RESET_MEMBER( cbm2_state, cbm2 )
m_busen1 = 1;
m_busy2 = 1;
m_graphics = 1;
m_tpi1_irq = CLEAR_LINE;
m_user_irq = CLEAR_LINE;
m_ext_tpi_pb = 0xff;
m_ext_cia_pb = 0xff;
@ -2276,7 +2210,6 @@ MACHINE_RESET_MEMBER( p500_state, p500 )
m_statvid = 1;
m_vicdotsel = 1;
m_vicbnksel = 0x03;
m_vic_irq = CLEAR_LINE;
}
@ -2320,13 +2253,16 @@ MACHINE_CONFIG_START(p500_state::p500_ntsc)
MCFG_DEVICE_PROGRAM_MAP(p500_mem)
MCFG_QUANTUM_PERFECT_CPU(M6509_TAG)
INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m6509_device::IRQ_LINE);
// video hardware
MCFG_DEVICE_ADD(MOS6567_TAG, MOS6567, XTAL(14'318'181)/14)
MCFG_MOS6566_CPU(M6509_TAG)
MCFG_MOS6566_IRQ_CALLBACK(WRITELINE(*this, p500_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)
mos6567_device &mos6567(MOS6567(config, MOS6567_TAG, XTAL(14'318'181)/14));
mos6567.set_cpu(M6509_TAG);
mos6567.irq_callback().set("mainirq", FUNC(input_merger_device::in_w<0>));
mos6567.set_screen(SCREEN_TAG);
mos6567.set_addrmap(0, &p500_state::vic_videoram_map);
mos6567.set_addrmap(1, &p500_state::vic_colorram_map);
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
MCFG_SCREEN_REFRESH_RATE(VIC6567_VRETRACERATE)
MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES)
@ -2345,7 +2281,7 @@ MACHINE_CONFIG_START(p500_state::p500_ntsc)
MCFG_PLS100_ADD(PLA2_TAG)
TPI6525(config, m_tpi1, 0);
m_tpi1->out_irq_cb().set(FUNC(p500_state::tpi1_irq_w));
m_tpi1->out_irq_cb().set("mainirq", FUNC(input_merger_device::in_w<0>));
m_tpi1->in_pa_cb().set(FUNC(cbm2_state::tpi1_pa_r));
m_tpi1->out_pa_cb().set(FUNC(cbm2_state::tpi1_pa_w));
m_tpi1->in_pb_cb().set(FUNC(cbm2_state::tpi1_pb_r));
@ -2366,17 +2302,20 @@ MACHINE_CONFIG_START(p500_state::p500_ntsc)
MCFG_MOS6551_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
MCFG_MOS6551_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
MCFG_MOS6551_RXC_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_etc))
MCFG_DEVICE_ADD(MOS6526_TAG, MOS6526A, XTAL(14'318'181)/14)
MCFG_MOS6526_TOD(60)
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(MOS6525_1_TAG, tpi6525_device, i2_w))
MCFG_MOS6526_CNT_CALLBACK(WRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w))
MCFG_MOS6526_SP_CALLBACK(WRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w))
MCFG_MOS6526_CNT_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, cnt_w))
MCFG_MOS6526_SP_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, sp_w))
MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, cbm2_state, cia_pa_r))
MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, cbm2_state, cia_pa_w))
MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, cbm2_state, cia_pb_r))
MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(CBM2_USER_PORT_TAG, cbm2_user_port_device, d2_w))
MCFG_MOS6526_PC_CALLBACK(WRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, pc_w))
MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(USER_PORT_TAG, cbm2_user_port_device, d2_w))
MCFG_MOS6526_PC_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, pc_w))
MCFG_DS75160A_ADD(DS75160A_TAG, READ8(IEEE488_TAG, ieee488_device, dio_r), WRITE8(IEEE488_TAG, ieee488_device, host_dio_w))
MCFG_DEVICE_ADD(DS75161A_TAG, DS75161A, 0)
MCFG_DS75161A_IN_REN_CB(READLINE(IEEE488_TAG, ieee488_device, ren_r))
MCFG_DS75161A_IN_IFC_CB(READLINE(IEEE488_TAG, ieee488_device, ifc_r))
@ -2394,18 +2333,24 @@ MACHINE_CONFIG_START(p500_state::p500_ntsc)
MCFG_DS75161A_OUT_EOI_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_eoi_w))
MCFG_DS75161A_OUT_ATN_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_atn_w))
MCFG_DS75161A_OUT_SRQ_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_srq_w))
MCFG_CBM_IEEE488_ADD("c8050")
MCFG_IEEE488_SRQ_CALLBACK(WRITELINE(MOS6525_1_TAG, tpi6525_device, i1_w))
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, nullptr, WRITELINE(MOS6526_TAG, mos6526_device, flag_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr)
MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(WRITELINE(MOS6567_TAG, mos6567_device, lp_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, nullptr)
MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, XTAL(14'318'181)/14, cbm2_expansion_cards, nullptr)
MCFG_CBM2_USER_PORT_ADD(CBM2_USER_PORT_TAG, cbm2_user_port_cards, nullptr)
MCFG_CBM2_USER_PORT_IRQ_CALLBACK(WRITELINE(*this, p500_state, user_irq_w))
MCFG_CBM2_USER_PORT_SP_CALLBACK(WRITELINE(MOS6526_TAG, mos6526_device, sp_w))
MCFG_CBM2_USER_PORT_CNT_CALLBACK(WRITELINE(MOS6526_TAG, mos6526_device, cnt_w))
MCFG_CBM2_USER_PORT_FLAG_CALLBACK(WRITELINE(MOS6526_TAG, mos6526_device, flag_w))
CBM2_USER_PORT(config, m_user, cbm2_user_port_cards, nullptr);
m_user->irq_callback().set("mainirq", FUNC(input_merger_device::in_w<1>));
m_user->sp_callback().set(MOS6526_TAG, FUNC(mos6526_device::sp_w));
m_user->cnt_callback().set(MOS6526_TAG, FUNC(mos6526_device::cnt_w));
m_user->flag_callback().set(MOS6526_TAG, FUNC(mos6526_device::flag_w));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(MOS6551A_TAG, mos6551_device, write_rxd))
MCFG_RS232_DCD_HANDLER(WRITELINE(MOS6551A_TAG, mos6551_device, write_dcd))
@ -2439,13 +2384,16 @@ MACHINE_CONFIG_START(p500_state::p500_pal)
MCFG_DEVICE_PROGRAM_MAP(p500_mem)
MCFG_QUANTUM_PERFECT_CPU(M6509_TAG)
INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m6509_device::IRQ_LINE);
// video hardware
MCFG_DEVICE_ADD(MOS6569_TAG, MOS6569, XTAL(17'734'472)/18)
MCFG_MOS6566_CPU(M6509_TAG)
MCFG_MOS6566_IRQ_CALLBACK(WRITELINE(*this, p500_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)
mos6569_device &mos6569(MOS6569(config, MOS6569_TAG, XTAL(17'734'472)/18));
mos6569.set_cpu(M6509_TAG);
mos6569.irq_callback().set("mainirq", FUNC(input_merger_device::in_w<0>));
mos6569.set_screen(SCREEN_TAG);
mos6569.set_addrmap(0, &p500_state::vic_videoram_map);
mos6569.set_addrmap(1, &p500_state::vic_colorram_map);
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
MCFG_SCREEN_REFRESH_RATE(VIC6569_VRETRACERATE)
MCFG_SCREEN_SIZE(VIC6569_COLUMNS, VIC6569_LINES)
@ -2464,7 +2412,7 @@ MACHINE_CONFIG_START(p500_state::p500_pal)
MCFG_PLS100_ADD(PLA2_TAG)
TPI6525(config, m_tpi1, 0);
m_tpi1->out_irq_cb().set(FUNC(p500_state::tpi1_irq_w));
m_tpi1->out_irq_cb().set("mainirq", FUNC(input_merger_device::in_w<1>));
m_tpi1->in_pa_cb().set(FUNC(cbm2_state::tpi1_pa_r));
m_tpi1->out_pa_cb().set(FUNC(cbm2_state::tpi1_pa_w));
m_tpi1->in_pb_cb().set(FUNC(cbm2_state::tpi1_pb_r));
@ -2482,17 +2430,20 @@ MACHINE_CONFIG_START(p500_state::p500_pal)
MCFG_MOS6551_XTAL(XTAL(1'843'200))
MCFG_MOS6551_IRQ_HANDLER(WRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
MCFG_MOS6551_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
MCFG_DEVICE_ADD(MOS6526_TAG, MOS6526A, XTAL(17'734'472)/18)
MCFG_MOS6526_TOD(50)
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(MOS6525_1_TAG, tpi6525_device, i2_w))
MCFG_MOS6526_CNT_CALLBACK(WRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w))
MCFG_MOS6526_SP_CALLBACK(WRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w))
MCFG_MOS6526_CNT_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, cnt_w))
MCFG_MOS6526_SP_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, sp_w))
MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, cbm2_state, cia_pa_r))
MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, cbm2_state, cia_pa_w))
MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, cbm2_state, cia_pb_r))
MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(CBM2_USER_PORT_TAG, cbm2_user_port_device, d2_w))
MCFG_MOS6526_PC_CALLBACK(WRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, pc_w))
MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(USER_PORT_TAG, cbm2_user_port_device, d2_w))
MCFG_MOS6526_PC_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, pc_w))
MCFG_DS75160A_ADD(DS75160A_TAG, READ8(IEEE488_TAG, ieee488_device, dio_r), WRITE8(IEEE488_TAG, ieee488_device, host_dio_w))
MCFG_DEVICE_ADD(DS75161A_TAG, DS75161A, 0)
MCFG_DS75161A_IN_REN_CB(READLINE(IEEE488_TAG, ieee488_device, ren_r))
MCFG_DS75161A_IN_IFC_CB(READLINE(IEEE488_TAG, ieee488_device, ifc_r))
@ -2510,18 +2461,23 @@ MACHINE_CONFIG_START(p500_state::p500_pal)
MCFG_DS75161A_OUT_EOI_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_eoi_w))
MCFG_DS75161A_OUT_ATN_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_atn_w))
MCFG_DS75161A_OUT_SRQ_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_srq_w))
MCFG_CBM_IEEE488_ADD("c8050")
MCFG_IEEE488_SRQ_CALLBACK(WRITELINE(MOS6525_1_TAG, tpi6525_device, i1_w))
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, nullptr, WRITELINE(MOS6526_TAG, mos6526_device, flag_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr)
MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(WRITELINE(MOS6569_TAG, mos6569_device, lp_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, nullptr)
MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, XTAL(17'734'472)/18, cbm2_expansion_cards, nullptr)
MCFG_CBM2_USER_PORT_ADD(CBM2_USER_PORT_TAG, cbm2_user_port_cards, nullptr)
MCFG_CBM2_USER_PORT_IRQ_CALLBACK(WRITELINE(*this, p500_state, user_irq_w))
MCFG_CBM2_USER_PORT_SP_CALLBACK(WRITELINE(MOS6526_TAG, mos6526_device, sp_w))
MCFG_CBM2_USER_PORT_CNT_CALLBACK(WRITELINE(MOS6526_TAG, mos6526_device, cnt_w))
MCFG_CBM2_USER_PORT_FLAG_CALLBACK(WRITELINE(MOS6526_TAG, mos6526_device, flag_w))
CBM2_USER_PORT(config, m_user, cbm2_user_port_cards, nullptr);
m_user->irq_callback().set("mainirq", FUNC(input_merger_device::in_w<2>));
m_user->sp_callback().set(MOS6526_TAG, FUNC(mos6526_device::sp_w));
m_user->cnt_callback().set(MOS6526_TAG, FUNC(mos6526_device::cnt_w));
m_user->flag_callback().set(MOS6526_TAG, FUNC(mos6526_device::flag_w));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(MOS6551A_TAG, mos6551_device, write_rxd))
MCFG_RS232_DCD_HANDLER(WRITELINE(MOS6551A_TAG, mos6551_device, write_dcd))
@ -2555,6 +2511,8 @@ MACHINE_CONFIG_START(cbm2_state::cbm2lp_ntsc)
MCFG_DEVICE_PROGRAM_MAP(cbm2_mem)
MCFG_QUANTUM_PERFECT_CPU(M6509_TAG)
INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m6509_device::IRQ_LINE);
// video hardware
MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green())
MCFG_SCREEN_UPDATE_DEVICE(MC68B45_TAG, mc6845_device, screen_update)
@ -2582,7 +2540,7 @@ MACHINE_CONFIG_START(cbm2_state::cbm2lp_ntsc)
MCFG_PLS100_ADD(PLA1_TAG)
TPI6525(config, m_tpi1, 0);
m_tpi1->out_irq_cb().set(FUNC(cbm2_state::tpi1_irq_w));
m_tpi1->out_irq_cb().set("mainirq", FUNC(input_merger_device::in_w<1>));
m_tpi1->in_pa_cb().set(FUNC(cbm2_state::tpi1_pa_r));
m_tpi1->out_pa_cb().set(FUNC(cbm2_state::tpi1_pa_w));
m_tpi1->in_pb_cb().set(FUNC(cbm2_state::tpi1_pb_r));
@ -2598,17 +2556,20 @@ MACHINE_CONFIG_START(cbm2_state::cbm2lp_ntsc)
MCFG_MOS6551_XTAL(XTAL(1'843'200))
MCFG_MOS6551_IRQ_HANDLER(WRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
MCFG_MOS6551_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
MCFG_DEVICE_ADD(MOS6526_TAG, MOS6526A, XTAL(18'000'000)/9)
MCFG_MOS6526_TOD(60)
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(MOS6525_1_TAG, tpi6525_device, i2_w))
MCFG_MOS6526_CNT_CALLBACK(WRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w))
MCFG_MOS6526_SP_CALLBACK(WRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w))
MCFG_MOS6526_CNT_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, cnt_w))
MCFG_MOS6526_SP_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, sp_w))
MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, cbm2_state, cia_pa_r))
MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, cbm2_state, cia_pa_w))
MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, cbm2_state, cia_pb_r))
MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(CBM2_USER_PORT_TAG, cbm2_user_port_device, d2_w))
MCFG_MOS6526_PC_CALLBACK(WRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, pc_w))
MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(USER_PORT_TAG, cbm2_user_port_device, d2_w))
MCFG_MOS6526_PC_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, pc_w))
MCFG_DS75160A_ADD(DS75160A_TAG, READ8(IEEE488_TAG, ieee488_device, dio_r), WRITE8(IEEE488_TAG, ieee488_device, host_dio_w))
MCFG_DEVICE_ADD(DS75161A_TAG, DS75161A, 0)
MCFG_DS75161A_IN_REN_CB(READLINE(IEEE488_TAG, ieee488_device, ren_r))
MCFG_DS75161A_IN_IFC_CB(READLINE(IEEE488_TAG, ieee488_device, ifc_r))
@ -2626,17 +2587,22 @@ MACHINE_CONFIG_START(cbm2_state::cbm2lp_ntsc)
MCFG_DS75161A_OUT_EOI_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_eoi_w))
MCFG_DS75161A_OUT_ATN_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_atn_w))
MCFG_DS75161A_OUT_SRQ_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_srq_w))
MCFG_CBM_IEEE488_ADD("c8050")
MCFG_IEEE488_SRQ_CALLBACK(WRITELINE(MOS6525_1_TAG, tpi6525_device, i1_w))
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, nullptr, WRITELINE(MOS6526_TAG, mos6526_device, flag_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr)
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, nullptr)
MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, XTAL(18'000'000)/9, cbm2_expansion_cards, nullptr)
MCFG_CBM2_USER_PORT_ADD(CBM2_USER_PORT_TAG, cbm2_user_port_cards, nullptr)
MCFG_CBM2_USER_PORT_IRQ_CALLBACK(WRITELINE(*this, cbm2_state, user_irq_w))
MCFG_CBM2_USER_PORT_SP_CALLBACK(WRITELINE(MOS6526_TAG, mos6526_device, sp_w))
MCFG_CBM2_USER_PORT_CNT_CALLBACK(WRITELINE(MOS6526_TAG, mos6526_device, cnt_w))
MCFG_CBM2_USER_PORT_FLAG_CALLBACK(WRITELINE(MOS6526_TAG, mos6526_device, flag_w))
CBM2_USER_PORT(config, m_user, cbm2_user_port_cards, nullptr);
m_user->irq_callback().set("mainirq", FUNC(input_merger_device::in_w<2>));
m_user->sp_callback().set(MOS6526_TAG, FUNC(mos6526_device::sp_w));
m_user->cnt_callback().set(MOS6526_TAG, FUNC(mos6526_device::cnt_w));
m_user->flag_callback().set(MOS6526_TAG, FUNC(mos6526_device::flag_w));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(MOS6551A_TAG, mos6551_device, write_rxd))
MCFG_RS232_DCD_HANDLER(WRITELINE(MOS6551A_TAG, mos6551_device, write_dcd))

View File

@ -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,34 +88,14 @@ 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);
};
//**************************************************************************
// 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
//**************************************************************************
@ -377,18 +351,6 @@ INPUT_PORTS_END
// DEVICE CONFIGURATION
//**************************************************************************
//-------------------------------------------------
// 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")