diff --git a/src/devices/bus/cbm2/user.h b/src/devices/bus/cbm2/user.h index 55a76c2d4fb..aa963d0dccc 100644 --- a/src/devices/bus/cbm2/user.h +++ b/src/devices/bus/cbm2/user.h @@ -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(*device).set_irq_wr_callback(DEVCB_##_write); - -#define MCFG_CBM2_USER_PORT_SP_CALLBACK(_write) \ - downcast(*device).set_sp_wr_callback(DEVCB_##_write); - -#define MCFG_CBM2_USER_PORT_CNT_CALLBACK(_write) \ - downcast(*device).set_cnt_wr_callback(DEVCB_##_write); - -#define MCFG_CBM2_USER_PORT_FLAG_CALLBACK(_write) \ - downcast(*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 + 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 devcb_base &set_irq_wr_callback(Object &&cb) { return m_write_irq.set_callback(std::forward(cb)); } - template devcb_base &set_sp_wr_callback(Object &&cb) { return m_write_sp.set_callback(std::forward(cb)); } - template devcb_base &set_cnt_wr_callback(Object &&cb) { return m_write_cnt.set_callback(std::forward(cb)); } - template devcb_base &set_flag_wr_callback(Object &&cb) { return m_write_flag.set_callback(std::forward(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; } diff --git a/src/devices/bus/vic10/exp.h b/src/devices/bus/vic10/exp.h index 56754923a02..24da3f392dc 100644 --- a/src/devices/bus/vic10/exp.h +++ b/src/devices/bus/vic10/exp.h @@ -48,31 +48,6 @@ -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_VIC10_EXPANSION_SLOT_IRQ_CALLBACK(_write) \ - downcast(*device).set_irq_wr_callback(DEVCB_##_write); - -#define MCFG_VIC10_EXPANSION_SLOT_RES_CALLBACK(_write) \ - downcast(*device).set_res_wr_callback(DEVCB_##_write); - -#define MCFG_VIC10_EXPANSION_SLOT_CNT_CALLBACK(_write) \ - downcast(*device).set_cnt_wr_callback(DEVCB_##_write); - -#define MCFG_VIC10_EXPANSION_SLOT_SP_CALLBACK(_write) \ - downcast(*device).set_sp_wr_callback(DEVCB_##_write); - - -#define MCFG_VIC10_EXPANSION_SLOT_IRQ_CALLBACKS(_irq, _res) \ - downcast(device)->set_irq_callbacks(DEVCB_##_irq, DEVCB_##_res); - -#define MCFG_VIC10_EXPANSION_SLOT_SERIAL_CALLBACKS(_cnt, _sp) \ - downcast(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 devcb_base &set_irq_wr_callback(Object &&cb) { return m_write_irq.set_callback(std::forward(cb)); } - template devcb_base &set_res_wr_callback(Object &&cb) { return m_write_res.set_callback(std::forward(cb)); } - template devcb_base &set_cnt_wr_callback(Object &&cb) { return m_write_cnt.set_callback(std::forward(cb)); } - template devcb_base &set_sp_wr_callback(Object &&cb) { return m_write_sp.set_callback(std::forward(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); diff --git a/src/devices/video/mos6566.h b/src/devices/video/mos6566.h index 1cbeed1f759..6f3a52dbab5 100644 --- a/src/devices/video/mos6566.h +++ b/src/devices/video/mos6566.h @@ -85,27 +85,6 @@ -//*************************************************************************** -// DEVICE CONFIGURATION MACROS -//*************************************************************************** - -#define MCFG_MOS6566_CPU(_tag) \ - downcast(*device).set_cpu_tag(_tag); - -#define MCFG_MOS6566_IRQ_CALLBACK(_write) \ - downcast(*device).set_irq_wr_callback(DEVCB_##_write); - -#define MCFG_MOS6566_BA_CALLBACK(_write) \ - downcast(*device).set_ba_wr_callback(DEVCB_##_write); - -#define MCFG_MOS6566_AEC_CALLBACK(_write) \ - downcast(*device).set_aec_wr_callback(DEVCB_##_write); - -#define MCFG_MOS8564_K_CALLBACK(_write) \ - downcast(*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 devcb_base &set_irq_wr_callback(Object &&cb) { return m_write_irq.set_callback(std::forward(cb)); } - template devcb_base &set_ba_wr_callback(Object &&cb) { return m_write_ba.set_callback(std::forward(cb)); } - template devcb_base &set_aec_wr_callback(Object &&cb) { return m_write_aec.set_callback(std::forward(cb)); } - template devcb_base &set_k_wr_callback(Object &&cb) { return m_write_k.set_callback(std::forward(cb)); } + template 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; diff --git a/src/mame/drivers/c128.cpp b/src/mame/drivers/c128.cpp index 2f783e4a56e..7c8493634a1 100644 --- a/src/mame/drivers/c128.cpp +++ b/src/mame/drivers/c128.cpp @@ -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) diff --git a/src/mame/drivers/c64.cpp b/src/mame/drivers/c64.cpp index fe9e22db15a..24ed190ff9a 100644 --- a/src/mame/drivers/c64.cpp +++ b/src/mame/drivers/c64.cpp @@ -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) diff --git a/src/mame/drivers/cbm2.cpp b/src/mame/drivers/cbm2.cpp index a212bccd53c..3996af28449 100644 --- a/src/mame/drivers/cbm2.cpp +++ b/src/mame/drivers/cbm2.cpp @@ -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 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)) 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,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")