diff options
28 files changed, 678 insertions, 506 deletions
diff --git a/.gitattributes b/.gitattributes index 9e0f3428865..101870ee26b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1271,6 +1271,8 @@ src/emu/machine/mos6526.c svneol=native#text/plain src/emu/machine/mos6526.h svneol=native#text/plain src/emu/machine/mos6529.c svneol=native#text/plain src/emu/machine/mos6529.h svneol=native#text/plain +src/emu/machine/mos6551.c svneol=native#text/plain +src/emu/machine/mos6551.h svneol=native#text/plain src/emu/machine/msm5832.c svneol=native#text/plain src/emu/machine/msm5832.h svneol=native#text/plain src/emu/machine/msm58321.c svneol=native#text/plain diff --git a/src/emu/emu.mak b/src/emu/emu.mak index 7158fac1ead..3e62d08b914 100644 --- a/src/emu/emu.mak +++ b/src/emu/emu.mak @@ -226,6 +226,7 @@ EMUMACHINEOBJS = \ $(EMUMACHINE)/microtch.o \ $(EMUMACHINE)/mos6526.o \ $(EMUMACHINE)/mos6529.o \ + $(EMUMACHINE)/mos6551.o \ $(EMUMACHINE)/msm5832.o \ $(EMUMACHINE)/msm58321.o \ $(EMUMACHINE)/msm6242.o \ diff --git a/src/emu/machine/ds75160a.c b/src/emu/machine/ds75160a.c index f265316678a..9e12c66d3c2 100644 --- a/src/emu/machine/ds75160a.c +++ b/src/emu/machine/ds75160a.c @@ -29,6 +29,8 @@ const device_type DS75160A = &device_creator<ds75160a_device>; ds75160a_device::ds75160a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, DS75160A, "DS75160A", tag, owner, clock), + m_read(*this), + m_write(*this), m_data(0xff), m_te(0), m_pe(0) @@ -37,36 +39,14 @@ ds75160a_device::ds75160a_device(const machine_config &mconfig, const char *tag, //------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void ds75160a_device::device_config_complete() -{ - // inherit a copy of the static data - const ds75160a_interface *intf = reinterpret_cast<const ds75160a_interface *>(static_config()); - if (intf != NULL) - *static_cast<ds75160a_interface *>(this) = *intf; - - // or initialize to defaults if none provided - else - { - memset(&m_in_bus_cb, 0, sizeof(m_in_bus_cb)); - memset(&m_out_bus_cb, 0, sizeof(m_out_bus_cb)); - } -} - - -//------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- void ds75160a_device::device_start() { // resolve callbacks - m_in_bus_func.resolve(m_in_bus_cb, *this); - m_out_bus_func.resolve(m_out_bus_cb, *this); + m_read.resolve_safe(0); + m_write.resolve_safe(); // register for state saving save_item(NAME(m_data)); @@ -85,7 +65,7 @@ READ8_MEMBER( ds75160a_device::read ) if (!m_te) { - data = m_in_bus_func(0); + data = m_read(0); } return data; @@ -102,7 +82,7 @@ WRITE8_MEMBER( ds75160a_device::write ) if (m_te) { - m_out_bus_func(0, m_data); + m_write((offs_t)0, m_data); } } @@ -115,7 +95,7 @@ WRITE_LINE_MEMBER( ds75160a_device::te_w ) { if (m_te != state) { - m_out_bus_func(0, m_te ? m_data : 0xff); + m_write((offs_t)0, m_te ? m_data : 0xff); } m_te = state; diff --git a/src/emu/machine/ds75160a.h b/src/emu/machine/ds75160a.h index eb246ab02dc..46916c9f6d9 100644 --- a/src/emu/machine/ds75160a.h +++ b/src/emu/machine/ds75160a.h @@ -33,13 +33,9 @@ // INTERFACE CONFIGURATION MACROS ///************************************************************************* -#define MCFG_DS75160A_ADD(_tag, _config) \ +#define MCFG_DS75160A_ADD(_tag, _read, _write) \ MCFG_DEVICE_ADD(_tag, DS75160A, 0) \ - MCFG_DEVICE_CONFIG(_config) - - -#define DS75160A_INTERFACE(name) \ - const ds75160a_interface (name) = + downcast<ds75160a_device *>(device)->set_callbacks(DEVCB2_##_read, DEVCB2_##_write); @@ -47,24 +43,19 @@ // TYPE DEFINITIONS ///************************************************************************* -// ======================> ds75160a_interface - -struct ds75160a_interface -{ - devcb_read8 m_in_bus_cb; - devcb_write8 m_out_bus_cb; -}; - - // ======================> ds75160a_device -class ds75160a_device : public device_t, - public ds75160a_interface +class ds75160a_device : public device_t { public: // construction/destruction ds75160a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + template<class _read, class _write> void set_callbacks(_read rd, _write wr) { + m_read.set_callback(rd); + m_write.set_callback(wr); + } + DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); @@ -73,12 +64,11 @@ public: protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); private: - devcb_resolved_read8 m_in_bus_func; - devcb_resolved_write8 m_out_bus_func; + devcb2_read8 m_read; + devcb2_write8 m_write; UINT8 m_data; diff --git a/src/emu/machine/mos6529.c b/src/emu/machine/mos6529.c index f81f6b42a77..7a6db300541 100644 --- a/src/emu/machine/mos6529.c +++ b/src/emu/machine/mos6529.c @@ -20,41 +20,27 @@ //************************************************************************** -// LIVE DEVICE +// DEVICE DEFINITIONS //************************************************************************** // device type definition const device_type MOS6529 = &device_creator<mos6529_device>; -//------------------------------------------------- -// mos6529_device - constructor -//------------------------------------------------- -mos6529_device::mos6529_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, MOS6529, "MOS6529", tag, owner, clock) -{ -} +//************************************************************************** +// LIVE DEVICE +//************************************************************************** //------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete +// mos6529_device - constructor //------------------------------------------------- -void mos6529_device::device_config_complete() +mos6529_device::mos6529_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, MOS6529, "MOS6529", tag, owner, clock), + m_read_port(*this), + m_write_port(*this) { - // inherit a copy of the static data - const mos6529_interface *intf = reinterpret_cast<const mos6529_interface *>(static_config()); - if (intf != NULL) - *static_cast<mos6529_interface *>(this) = *intf; - - // or initialize to defaults if none provided - else - { - memset(&m_in_p_cb, 0, sizeof(m_in_p_cb)); - memset(&m_out_p_cb, 0, sizeof(m_out_p_cb)); - } } @@ -65,8 +51,8 @@ void mos6529_device::device_config_complete() void mos6529_device::device_start() { // resolve callbacks - m_in_p_func.resolve(m_in_p_cb, *this); - m_out_p_func.resolve(m_out_p_cb, *this); + m_read_port.resolve_safe(0); + m_write_port.resolve_safe(); } @@ -76,7 +62,7 @@ void mos6529_device::device_start() READ8_MEMBER( mos6529_device::read ) { - return m_in_p_func(0); + return m_read_port(0); } @@ -86,5 +72,5 @@ READ8_MEMBER( mos6529_device::read ) WRITE8_MEMBER( mos6529_device::write ) { - m_out_p_func(0, data); + m_write_port((offs_t)0, data); } diff --git a/src/emu/machine/mos6529.h b/src/emu/machine/mos6529.h index d81da3fe108..352dedc2849 100644 --- a/src/emu/machine/mos6529.h +++ b/src/emu/machine/mos6529.h @@ -33,12 +33,9 @@ // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define MCFG_MOS6529_ADD(_tag, _config) \ - MCFG_DEVICE_ADD(_tag, MOS6529, 0) \ - MCFG_DEVICE_CONFIG(_config) - -#define MOS6529_INTERFACE(name) \ - const mos6529_interface (name) = +#define MCFG_MOS6529_ADD(_tag, _read, _write) \ + MCFG_DEVICE_ADD(_tag, MOS6529, 0) \ + downcast<mos6529_device *>(device)->set_callbacks(DEVCB2_##_read, DEVCB2_##_write); @@ -46,35 +43,29 @@ // TYPE DEFINITIONS //************************************************************************** -// ======================> mos6529_interface - -struct mos6529_interface -{ - devcb_read8 m_in_p_cb; - devcb_write8 m_out_p_cb; -}; - - // ======================> mos6529_device -class mos6529_device : public device_t, - public mos6529_interface +class mos6529_device : public device_t { public: // construction/destruction mos6529_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + template<class _read, class _write> void set_callbacks(_read rd, _write wr) { + m_read_port.set_callback(rd); + m_write_port.set_callback(wr); + } + DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); private: - devcb_resolved_read8 m_in_p_func; - devcb_resolved_write8 m_out_p_func; + devcb2_read8 m_read_port; + devcb2_write8 m_write_port; }; diff --git a/src/emu/machine/mos6551.c b/src/emu/machine/mos6551.c new file mode 100644 index 00000000000..9f09ebee54b --- /dev/null +++ b/src/emu/machine/mos6551.c @@ -0,0 +1,277 @@ +/********************************************************************** + + MOS Technology 6551 Asynchronous Communication Interface Adapter + + Copyright MESS Team. + Visit http://mamedev.org for licensing and usage restrictions. + +**********************************************************************/ + +#include "mos6551.h" + + + +//************************************************************************** +// MACROS / CONSTANTS +//************************************************************************** + +#define LOG 0 + + +const int mos6551_device::brg_divider[] = { + 0, 2304, 1536, 1048, 856, 768, 384, 192, 96, 64, 48, 32, 24, 16, 12, 6 +}; + + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +// device type definition +const device_type MOS6551 = &device_creator<mos6551_device>; + + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// mos6551_device - constructor +//------------------------------------------------- + +mos6551_device::mos6551_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, MOS6551, "MOS6551", tag, owner, clock), + device_serial_interface(mconfig, *this), + m_irq_handler(*this), + m_ctrl(0), + m_cmd(CMD_RIE), + m_st(ST_TDRE), + m_ext_rxc(0) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void mos6551_device::device_start() +{ + m_irq_handler.resolve_safe(); + + transmit_register_reset(); + receive_register_reset(); +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void mos6551_device::device_reset() +{ + m_ctrl = 0; + m_cmd = CMD_RIE; + + update_serial(); +} + + +//------------------------------------------------- +// tra_complete - +//------------------------------------------------- + +void mos6551_device::tra_complete() +{ + if ((m_cmd & CMD_TC_MASK) == CMD_TC_TIE_RTS_LO) + { + m_st |= ST_IRQ; + m_irq_handler(ASSERT_LINE); + } + + if (!(m_st & ST_TDRE)) + { + transmit_register_setup(m_tdr); + m_st |= ST_TDRE; + } +} + + +//------------------------------------------------- +// rcv_complete - +//------------------------------------------------- + +void mos6551_device::rcv_complete() +{ + if (m_st & ST_RDRF) + { + m_st |= ST_OR; + } + else + { + m_st |= ST_RDRF; + + if (!(m_cmd & CMD_RIE)) + { + m_st |= ST_IRQ; + m_irq_handler(ASSERT_LINE); + } + } +} + + +//------------------------------------------------- +// input_callback - +//------------------------------------------------- + +void mos6551_device::input_callback(UINT8 state) +{ + m_input_state = state; +} + + +//------------------------------------------------- +// update_serial - +//------------------------------------------------- + +void mos6551_device::update_serial() +{ + int brg = m_ctrl & CTRL_BRG_MASK; + + if (brg == CTRL_BRG_16X_EXTCLK) + { + set_rcv_rate(m_ext_rxc / 16); + set_tra_rate(m_ext_rxc / 16); + } + else + { + int baud = clock() / brg_divider[brg] / 16; + + set_tra_rate(baud); + + if (m_ctrl & CTRL_RXC_BRG) + { + set_rcv_rate(baud); + } + else + { + set_rcv_rate(m_ext_rxc / 16); + } + + int num_data_bits = 8; + int stop_bit_count = 1; + int parity_code = SERIAL_PARITY_NONE; + + switch (m_ctrl & CTRL_WL_MASK) + { + case CTRL_WL_8: num_data_bits = 8; break; + case CTRL_WL_7: num_data_bits = 7; break; + case CTRL_WL_6: num_data_bits = 6; break; + case CTRL_WL_5: num_data_bits = 5; break; + } + + set_data_frame(num_data_bits, stop_bit_count, parity_code); + } + + if (m_cmd & CMD_DTR) + m_connection_state |= SERIAL_STATE_DTR; + else + m_connection_state &= ~SERIAL_STATE_DTR; + + if ((m_cmd & CMD_TC_MASK) == CMD_TC_RTS_HI) + m_connection_state &= ~SERIAL_STATE_RTS; + else + m_connection_state |= SERIAL_STATE_RTS; + + serial_connection_out(); +} + + +//------------------------------------------------- +// read - +//------------------------------------------------- + +READ8_MEMBER( mos6551_device::read ) +{ + UINT8 data = 0; + + switch (offset & 0x03) + { + case 0: + if (is_receive_register_full()) + { + receive_register_extract(); + data = get_received_char(); + } + + m_st &= ~(ST_RDRF | ST_OR | ST_FE | ST_PE); + break; + + case 1: + data = m_st; + m_st &= ~ST_IRQ; + m_irq_handler(CLEAR_LINE); + break; + + case 2: + data = m_cmd; + break; + + case 3: + data = m_ctrl; + break; + } + + return data; +} + + +//------------------------------------------------- +// write - +//------------------------------------------------- + +WRITE8_MEMBER( mos6551_device::write ) +{ + switch (offset & 0x03) + { + case 0: + m_tdr = data; + m_st &= ~ST_TDRE; + + if (is_transmit_register_empty()) + { + transmit_register_setup(m_tdr); + m_st |= ST_TDRE; + } + break; + + case 1: + // programmed reset + m_cmd = (m_cmd & 0xe0) | CMD_RIE; + m_st &= ~ST_OR; + update_serial(); + break; + + case 2: + m_cmd = data; + update_serial(); + break; + + case 3: + m_ctrl = data; + update_serial(); + break; + } +} + + +//------------------------------------------------- +// set_rxc - set external receiver clock +//------------------------------------------------- + +void mos6551_device::set_rxc(int clock) +{ + m_ext_rxc = clock; +} diff --git a/src/emu/machine/mos6551.h b/src/emu/machine/mos6551.h new file mode 100644 index 00000000000..b3b1367461a --- /dev/null +++ b/src/emu/machine/mos6551.h @@ -0,0 +1,166 @@ +/********************************************************************** + + MOS Technology 6551 Asynchronous Communication Interface Adapter + + Copyright MESS Team. + Visit http://mamedev.org for licensing and usage restrictions. + +********************************************************************** + _____ _____ + GND 1 |* \_/ | 28 R/_W + CS0 2 | | 27 phi2 + _CS1 3 | | 26 _IRQ + _RES 4 | | 25 DB7 + RxC 5 | | 24 DB6 + XTAL1 6 | | 23 DB5 + XTAL2 7 | MOS6551 | 22 DB4 + _RTS 8 | | 21 DB3 + _CTS 9 | | 20 DB2 + TxD 10 | | 19 DB1 + _DTR 11 | | 18 DB0 + RxD 12 | | 17 _DBR + RS0 13 | | 16 _DCD + RS1 14 |_____________| 15 Vcc + +**********************************************************************/ + +#pragma once + +#ifndef __MOS6551__ +#define __MOS6551__ + +#include "emu.h" + + + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_MOS6551_ADD(_tag, _clock, _irq) \ + MCFG_DEVICE_ADD(_tag, MOS6551, _clock) \ + devcb = &mos6551_device::set_irq_handler(*device, DEVCB2_##_irq); + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> mos6551_device + +class mos6551_device : public device_t, + public device_serial_interface +{ +public: + // construction/destruction + mos6551_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // static configuration helpers + template<class _Object> static devcb2_base &set_irq_handler(device_t &device, _Object object) { return downcast<mos6551_device &>(device).m_irq_handler.set_callback(object); } + + DECLARE_READ8_MEMBER( read ); + DECLARE_WRITE8_MEMBER( write ); + + void set_rxc(int clock); + +protected: + // device-level overrides + virtual void device_start(); + virtual void device_reset(); + + // device_serial_interface overrides + virtual void tra_complete(); + virtual void rcv_complete(); + virtual void input_callback(UINT8 state); + + enum + { + CTRL_BRG_16X_EXTCLK = 0, + CTRL_BRG_50, + CTRL_BRG_75, + CTRL_BRG_109_92, + CTRL_BRG_134_58, + CTRL_BRG_150, + CTRL_BRG_300, + CTRL_BRG_600, + CTRL_BRG_1200, + CTRL_BRG_1800, + CTRL_BRG_2400, + CTRL_BRG_3600, + CTRL_BRG_4800, + CTRL_BRG_7200, + CTRL_BRG_9600, + CTRL_BRG_19200, + CTRL_BRG_MASK = 0x0f, + + CTRL_RXC_EXT = 0x00, + CTRL_RXC_BRG = 0x10, + CTRL_RXC_MASK = 0x10, + + CTRL_WL_8 = 0x00, + CTRL_WL_7 = 0x20, + CTRL_WL_6 = 0x40, + CTRL_WL_5 = 0x60, + CTRL_WL_MASK = 0x60, + + CTRL_SB_1 = 0x00, + CTRL_SB_2 = 0x80, + CTRL_SB_MASK = 0x80 + }; + + enum + { + CMD_DTR = 0x01, + + CMD_RIE = 0x02, + + CMD_TC_RTS_HI = 0x00, + CMD_TC_TIE_RTS_LO = 0x04, + CMD_TC_RTS_LO = 0x08, + CMD_TC_BRK = 0x0c, + CMD_TC_MASK = 0x0c, + + CMD_ECHO = 0x10, + + CMD_PARITY = 0x20, + CMD_PARITY_ODD = 0x00, + CMD_PARITY_EVEN = 0x40, + CMD_PARITY_MARK = 0x80, + CMD_PARITY_SPACE = 0xc0, + CMD_PARITY_MASK = 0xc0 + }; + + enum + { + ST_PE = 0x01, + ST_FE = 0x02, + ST_OR = 0x04, + ST_RDRF = 0x08, + ST_TDRE = 0x10, + ST_DCD = 0x20, + ST_DSR = 0x40, + ST_IRQ = 0x80 + }; + + void update_serial(); + + devcb2_write_line m_irq_handler; + + UINT8 m_ctrl; + UINT8 m_cmd; + UINT8 m_st; + UINT8 m_tdr; + + int m_ext_rxc; + + static const int brg_divider[16]; +}; + + +// device type definition +extern const device_type MOS6551; + + + +#endif diff --git a/src/mess/drivers/c128.c b/src/mess/drivers/c128.c index 2caef85cff5..2454ce1e68d 100644 --- a/src/mess/drivers/c128.c +++ b/src/mess/drivers/c128.c @@ -50,10 +50,6 @@ inline void c128_state::check_interrupts() m_subcpu->set_input_line(M8502_IRQ_LINE, irq); m_subcpu->set_input_line(INPUT_LINE_NMI, nmi); - - int flag = m_cass_rd && m_iec_srq; - - m_cia1->flag_w(flag); } @@ -1328,23 +1324,6 @@ static CBM_IEC_INTERFACE( cbm_iec_intf ) //------------------------------------------------- -// PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) -//------------------------------------------------- - -WRITE_LINE_MEMBER( c128_state::tape_read_w ) -{ - m_cass_rd = state; - - check_interrupts(); -} - -static PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) -{ - DEVCB_DRIVER_LINE_MEMBER(c128_state, tape_read_w), -}; - - -//------------------------------------------------- // C64_EXPANSION_INTERFACE( expansion_intf ) //------------------------------------------------- @@ -1462,8 +1441,6 @@ void c128_state::machine_start() save_item(NAME(m_exp_irq)); save_item(NAME(m_exp_nmi)); save_item(NAME(m_exp_dma)); - save_item(NAME(m_cass_rd)); - save_item(NAME(m_iec_srq)); save_item(NAME(m_vic_k)); save_item(NAME(m_caps_lock)); } @@ -1531,24 +1508,27 @@ static MACHINE_CONFIG_START( ntsc, c128_state ) MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6567_CLOCK, 60, cia1_intf) MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6567_CLOCK, 60, cia2_intf) MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c1530", NULL) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL) + MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS8564_TAG, mos8564_device, lp_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL) MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6567_CLOCK, expansion_intf, c64_expansion_cards, NULL, NULL) MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL) // software list MCFG_SOFTWARE_LIST_ADD("cart_list_vic10", "vic10") - MCFG_SOFTWARE_LIST_FILTER("cart_list_vic10", "NTSC") MCFG_SOFTWARE_LIST_ADD("cart_list_c64", "c64_cart") - MCFG_SOFTWARE_LIST_FILTER("cart_list_c64", "NTSC") - MCFG_SOFTWARE_LIST_ADD("cart_list_c128", "c128_cart") - MCFG_SOFTWARE_LIST_FILTER("cart_list_c128", "NTSC") - MCFG_SOFTWARE_LIST_ADD("disk_list_c64", "c64_flop") - MCFG_SOFTWARE_LIST_FILTER("disk_list_c64", "NTSC") - MCFG_SOFTWARE_LIST_ADD("disk_list_c128", "c128_flop") - MCFG_SOFTWARE_LIST_FILTER("disk_list_c128", "NTSC") + MCFG_SOFTWARE_LIST_ADD("cart_list", "c128_cart") + MCFG_SOFTWARE_LIST_ADD("cass_list_c64", "c64_cass") + MCFG_SOFTWARE_LIST_ADD("flop_list_c64", "c64_flop") + MCFG_SOFTWARE_LIST_ADD("flop_list", "c128_flop") MCFG_SOFTWARE_LIST_ADD("from_list", "c128_rom") + MCFG_SOFTWARE_LIST_FILTER("cart_list_vic10", "NTSC") + MCFG_SOFTWARE_LIST_FILTER("cart_list_c64", "NTSC") + MCFG_SOFTWARE_LIST_FILTER("cart_list", "NTSC") + MCFG_SOFTWARE_LIST_FILTER("cass_list_c64", "NTSC") + MCFG_SOFTWARE_LIST_FILTER("flop_list_c64", "NTSC") + MCFG_SOFTWARE_LIST_FILTER("flop_list", "NTSC") MCFG_SOFTWARE_LIST_FILTER("from_list", "NTSC") // function ROM @@ -1635,24 +1615,27 @@ static MACHINE_CONFIG_START( pal, c128_state ) MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6569_CLOCK, 50, cia1_intf) MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6569_CLOCK, 50, cia2_intf) MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c1530", NULL) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL) + MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS8566_TAG, mos8566_device, lp_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL) MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6569_CLOCK, expansion_intf, c64_expansion_cards, NULL, NULL) MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL) // software list MCFG_SOFTWARE_LIST_ADD("cart_list_vic10", "vic10") - MCFG_SOFTWARE_LIST_FILTER("cart_list_vic10", "PAL") MCFG_SOFTWARE_LIST_ADD("cart_list_c64", "c64_cart") - MCFG_SOFTWARE_LIST_FILTER("cart_list_c64", "PAL") - MCFG_SOFTWARE_LIST_ADD("cart_list_c128", "c128_cart") - MCFG_SOFTWARE_LIST_FILTER("cart_list_c128", "PAL") - MCFG_SOFTWARE_LIST_ADD("disk_list_c64", "c64_flop") - MCFG_SOFTWARE_LIST_FILTER("disk_list_c64", "PAL") - MCFG_SOFTWARE_LIST_ADD("disk_list_c128", "c128_flop") - MCFG_SOFTWARE_LIST_FILTER("disk_list_c128", "PAL") + MCFG_SOFTWARE_LIST_ADD("cart_list", "c128_cart") + MCFG_SOFTWARE_LIST_ADD("cass_list_c64", "c64_cass") + MCFG_SOFTWARE_LIST_ADD("flop_list_c64", "c64_flop") + MCFG_SOFTWARE_LIST_ADD("flop_list", "c128_flop") MCFG_SOFTWARE_LIST_ADD("from_list", "c128_rom") + MCFG_SOFTWARE_LIST_FILTER("cart_list_vic10", "PAL") + MCFG_SOFTWARE_LIST_FILTER("cart_list_c64", "PAL") + MCFG_SOFTWARE_LIST_FILTER("cart_list", "PAL") + MCFG_SOFTWARE_LIST_FILTER("cass_list_c64", "PAL") + MCFG_SOFTWARE_LIST_FILTER("flop_list_c64", "PAL") + MCFG_SOFTWARE_LIST_FILTER("flop_list", "PAL") MCFG_SOFTWARE_LIST_FILTER("from_list", "PAL") // function ROM diff --git a/src/mess/drivers/c64.c b/src/mess/drivers/c64.c index 28a8f2bd748..1dab7f4ab2c 100644 --- a/src/mess/drivers/c64.c +++ b/src/mess/drivers/c64.c @@ -48,10 +48,6 @@ void c64_state::check_interrupts() m_maincpu->set_input_line(M6510_IRQ_LINE, irq); m_maincpu->set_input_line(INPUT_LINE_NMI, nmi); - - int flag = m_cass_rd && m_iec_srq; - - m_cia1->flag_w(flag); } @@ -999,36 +995,12 @@ WRITE8_MEMBER( c64gs_state::cpu_w ) //------------------------------------------------- -// PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) -//------------------------------------------------- - -WRITE_LINE_MEMBER( c64_state::tape_read_w ) -{ - m_cass_rd = state; - - check_interrupts(); -} - -static PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) -{ - DEVCB_DRIVER_LINE_MEMBER(c64_state, tape_read_w), -}; - - -//------------------------------------------------- // CBM_IEC_INTERFACE( iec_intf ) //------------------------------------------------- -WRITE_LINE_MEMBER( c64_state::iec_srq_w ) -{ - m_iec_srq = state; - - check_interrupts(); -} - static CBM_IEC_INTERFACE( iec_intf ) { - DEVCB_DRIVER_LINE_MEMBER(c64_state, iec_srq_w), + DEVCB_DEVICE_LINE_MEMBER(MOS6526_1_TAG, mos6526_device, flag_w), DEVCB_DEVICE_LINE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, atn_w), DEVCB_NULL, DEVCB_NULL, @@ -1143,8 +1115,6 @@ void c64_state::machine_start() save_item(NAME(m_exp_irq)); save_item(NAME(m_exp_nmi)); save_item(NAME(m_exp_dma)); - save_item(NAME(m_cass_rd)); - save_item(NAME(m_iec_srq)); } @@ -1194,9 +1164,10 @@ static MACHINE_CONFIG_START( ntsc, c64_state ) MCFG_PLS100_ADD(PLA_TAG) MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6567_CLOCK, 60, cia1_intf) MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6567_CLOCK, 60, cia2_intf) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c1530", NULL) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_1_TAG, mos6526_device, flag_w)) MCFG_CBM_IEC_ADD(iec_intf, "c1541") MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL) + MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6567_TAG, mos6567_device, lp_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL) MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6567_CLOCK, expansion_intf, c64_expansion_cards, NULL, NULL) MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL) @@ -1294,9 +1265,10 @@ static MACHINE_CONFIG_START( pal, c64_state ) MCFG_PLS100_ADD(PLA_TAG) MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6569_CLOCK, 50, cia1_intf) MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6569_CLOCK, 50, cia2_intf) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c1530", NULL) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_1_TAG, mos6526_device, flag_w)) MCFG_CBM_IEC_ADD(iec_intf, "c1541") MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL) + MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL) MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6569_CLOCK, expansion_intf, c64_expansion_cards, NULL, NULL) MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL) @@ -1374,6 +1346,7 @@ static MACHINE_CONFIG_START( pal_gs, c64gs_state ) MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6569_CLOCK, 50, cia2_intf) MCFG_CBM_IEC_BUS_ADD(iec_intf) MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL) + MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL) MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6569_CLOCK, expansion_intf, c64_expansion_cards, NULL, NULL) MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL) diff --git a/src/mess/drivers/cbm2.c b/src/mess/drivers/cbm2.c index 7747a80b0df..87c3f2b3225 100644 --- a/src/mess/drivers/cbm2.c +++ b/src/mess/drivers/cbm2.c @@ -1663,34 +1663,6 @@ static MOS6526_INTERFACE( cia_intf ) //------------------------------------------------- -// PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) -//------------------------------------------------- - -WRITE_LINE_MEMBER( cbm2_state::tape_read_w ) -{ - m_cass_rd = state; - - m_cia->flag_w(m_cass_rd && m_user_flag); -} - -static PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) -{ - DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tape_read_w) -}; - - -//------------------------------------------------- -// DS75160A_INTERFACE( ds75160a_intf ) -//------------------------------------------------- - -static DS75160A_INTERFACE( ds75160a_intf ) -{ - DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_r), - DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_w) -}; - - -//------------------------------------------------- // DS75161A_INTERFACE( ds75161a_intf ) //------------------------------------------------- @@ -2012,8 +1984,6 @@ MACHINE_START_MEMBER( cbm2_state, cbm2 ) save_item(NAME(m_ntsc)); save_item(NAME(m_todclk)); save_item(NAME(m_tpi1_irq)); - save_item(NAME(m_cass_rd)); - save_item(NAME(m_user_flag)); save_item(NAME(m_tpi2_pa)); save_item(NAME(m_tpi2_pb)); save_item(NAME(m_cia_pa)); @@ -2132,7 +2102,6 @@ MACHINE_RESET_MEMBER( cbm2_state, cbm2 ) m_busy2 = 1; m_graphics = 1; m_tpi1_irq = CLEAR_LINE; - m_cass_rd = 1; m_user_irq = CLEAR_LINE; m_maincpu->reset(); @@ -2214,13 +2183,14 @@ static MACHINE_CONFIG_START( p500_ntsc, p500_state ) MCFG_PLS100_ADD(PLA2_TAG) MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf) MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf) - MCFG_ACIA6551_ADD(MOS6551A_TAG) + MCFG_MOS6551_ADD(MOS6551A_TAG, XTAL_1_8432MHz, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w)) MCFG_MOS6526_ADD(MOS6526_TAG, VIC6567_CLOCK, 60, cia_intf) - MCFG_DS75160A_ADD(DS75160A_TAG, ds75160a_intf) + MCFG_DS75160A_ADD(DS75160A_TAG, DEVREAD8(IEEE488_TAG, ieee488_device, dio_r), DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w)) MCFG_DS75161A_ADD(DS75161A_TAG, ds75161a_intf) MCFG_CBM_IEEE488_ADD(ieee488_intf, "c8050") - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, NULL, NULL) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL) + MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6567_TAG, mos6567_device, lp_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, NULL, NULL) MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, VIC6567_CLOCK, cbm2_expansion_cards, NULL, NULL) MCFG_CBM2_USER_PORT_ADD(CBM2_USER_PORT_TAG, p500_user_intf, cbm2_user_port_cards, NULL, NULL) @@ -2264,13 +2234,14 @@ static MACHINE_CONFIG_START( p500_pal, p500_state ) MCFG_PLS100_ADD(PLA2_TAG) MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf) MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf) - MCFG_ACIA6551_ADD(MOS6551A_TAG) + MCFG_MOS6551_ADD(MOS6551A_TAG, XTAL_1_8432MHz, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w)) MCFG_MOS6526_ADD(MOS6526_TAG, VIC6569_CLOCK, 50, cia_intf) - MCFG_DS75160A_ADD(DS75160A_TAG, ds75160a_intf) + MCFG_DS75160A_ADD(DS75160A_TAG, DEVREAD8(IEEE488_TAG, ieee488_device, dio_r), DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w)) MCFG_DS75161A_ADD(DS75161A_TAG, ds75161a_intf) MCFG_CBM_IEEE488_ADD(ieee488_intf, "c8050") - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, NULL, NULL) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL) + MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, NULL, NULL) MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, VIC6569_CLOCK, cbm2_expansion_cards, NULL, NULL) MCFG_CBM2_USER_PORT_ADD(CBM2_USER_PORT_TAG, p500_user_intf, cbm2_user_port_cards, NULL, NULL) @@ -2321,12 +2292,12 @@ static MACHINE_CONFIG_START( cbm2lp_ntsc, cbm2_state ) MCFG_PLS100_ADD(PLA1_TAG) MCFG_TPI6525_ADD(MOS6525_1_TAG, tpi1_intf) MCFG_TPI6525_ADD(MOS6525_2_TAG, tpi2_intf) - MCFG_ACIA6551_ADD(MOS6551A_TAG) + MCFG_MOS6551_ADD(MOS6551A_TAG, XTAL_1_8432MHz, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w)) MCFG_MOS6526_ADD(MOS6526_TAG, XTAL_18MHz/9, 60, cia_intf) - MCFG_DS75160A_ADD(DS75160A_TAG, ds75160a_intf) + MCFG_DS75160A_ADD(DS75160A_TAG, DEVREAD8(IEEE488_TAG, ieee488_device, dio_r), DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w)) MCFG_DS75161A_ADD(DS75161A_TAG, ds75161a_intf) MCFG_CBM_IEEE488_ADD(ieee488_intf, "c8050") - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, NULL, NULL) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL) MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, NULL, NULL) MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, XTAL_18MHz/9, cbm2_expansion_cards, NULL, NULL) @@ -2345,8 +2316,7 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( b128 ) //------------------------------------------------- -static MACHINE_CONFIG_START( b128, cbm2_state ) - MCFG_FRAGMENT_ADD(cbm2lp_ntsc) +static MACHINE_CONFIG_DERIVED( b128, cbm2lp_ntsc ) MCFG_FRAGMENT_ADD(128k) MACHINE_CONFIG_END @@ -2355,8 +2325,7 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( b256 ) //------------------------------------------------- -static MACHINE_CONFIG_START( b256, cbm2_state ) - MCFG_FRAGMENT_ADD(cbm2lp_ntsc) +static MACHINE_CONFIG_DERIVED( b256, cbm2lp_ntsc ) MCFG_FRAGMENT_ADD(256k) MACHINE_CONFIG_END @@ -2365,9 +2334,7 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( cbm2lp_pal ) //------------------------------------------------- -static MACHINE_CONFIG_START( cbm2lp_pal, cbm2_state ) - MCFG_FRAGMENT_ADD(cbm2lp_ntsc) - +static MACHINE_CONFIG_DERIVED( cbm2lp_pal, cbm2lp_ntsc ) MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal) MCFG_DEVICE_REMOVE(MOS6526_TAG) @@ -2379,8 +2346,7 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( cbm610 ) //------------------------------------------------- -static MACHINE_CONFIG_START( cbm610, cbm2_state ) - MCFG_FRAGMENT_ADD(cbm2lp_pal) +static MACHINE_CONFIG_DERIVED( cbm610, cbm2lp_pal ) MCFG_FRAGMENT_ADD(128k) MACHINE_CONFIG_END @@ -2389,8 +2355,7 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( cbm620 ) //------------------------------------------------- -static MACHINE_CONFIG_START( cbm620, cbm2_state ) - MCFG_FRAGMENT_ADD(cbm2lp_pal) +static MACHINE_CONFIG_DERIVED( cbm620, cbm2lp_pal ) MCFG_FRAGMENT_ADD(256k) MACHINE_CONFIG_END @@ -2399,10 +2364,7 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( cbm2hp_ntsc ) //------------------------------------------------- -static MACHINE_CONFIG_START( cbm2hp_ntsc, cbm2hp_state ) - MCFG_FRAGMENT_ADD(cbm2lp_ntsc) - - // devices +static MACHINE_CONFIG_DERIVED_CLASS( cbm2hp_ntsc, cbm2lp_ntsc, cbm2hp_state ) MCFG_DEVICE_REMOVE(MOS6525_2_TAG) MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf) MACHINE_CONFIG_END @@ -2412,8 +2374,7 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( b128hp ) //------------------------------------------------- -static MACHINE_CONFIG_START( b128hp, cbm2hp_state ) - MCFG_FRAGMENT_ADD(cbm2hp_ntsc) +static MACHINE_CONFIG_DERIVED( b128hp, cbm2hp_ntsc ) MCFG_FRAGMENT_ADD(128k) MACHINE_CONFIG_END @@ -2422,8 +2383,7 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( b256hp ) //------------------------------------------------- -static MACHINE_CONFIG_START( b256hp, cbm2hp_state ) - MCFG_FRAGMENT_ADD(cbm2hp_ntsc) +static MACHINE_CONFIG_DERIVED( b256hp, cbm2hp_ntsc ) MCFG_FRAGMENT_ADD(256k) MACHINE_CONFIG_END @@ -2432,9 +2392,7 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( bx256hp ) //------------------------------------------------- -static MACHINE_CONFIG_START( bx256hp, cbm2hp_state ) - MCFG_FRAGMENT_ADD(b256hp) - +static MACHINE_CONFIG_DERIVED( bx256hp, b256hp ) MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2x_ntsc) MCFG_CPU_ADD(EXT_I8088_TAG, I8088, XTAL_12MHz) @@ -2451,9 +2409,7 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( cbm2hp_pal ) //------------------------------------------------- -static MACHINE_CONFIG_START( cbm2hp_pal, cbm2hp_state ) - MCFG_FRAGMENT_ADD(cbm2hp_ntsc) - +static MACHINE_CONFIG_DERIVED( cbm2hp_pal, cbm2hp_ntsc ) MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal) // devices @@ -2469,8 +2425,7 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( cbm710 ) //------------------------------------------------- -static MACHINE_CONFIG_START( cbm710, cbm2hp_state ) - MCFG_FRAGMENT_ADD(cbm2hp_pal) +static MACHINE_CONFIG_DERIVED( cbm710, cbm2hp_pal ) MCFG_FRAGMENT_ADD(128k) MACHINE_CONFIG_END @@ -2479,8 +2434,7 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( cbm720 ) //------------------------------------------------- -static MACHINE_CONFIG_START( cbm720, cbm2hp_state ) - MCFG_FRAGMENT_ADD(cbm2hp_pal) +static MACHINE_CONFIG_DERIVED( cbm720, cbm2hp_pal ) MCFG_FRAGMENT_ADD(256k) MACHINE_CONFIG_END @@ -2489,9 +2443,7 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( cbm730 ) //------------------------------------------------- -static MACHINE_CONFIG_START( cbm730, cbm2hp_state ) - MCFG_FRAGMENT_ADD(cbm720) - +static MACHINE_CONFIG_DERIVED( cbm730, cbm720 ) MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2x_pal) MCFG_CPU_ADD(EXT_I8088_TAG, I8088, XTAL_12MHz) @@ -2537,11 +2489,6 @@ ROM_START( p500 ) ROM_LOAD( "906114-03.u88", 0x00, 0xf5, CRC(668c073e) SHA1(1115858bb2dc91ea9e2016ba2e23ec94239358b4) ) ROM_END - -//------------------------------------------------- -// ROM( p500p ) -//------------------------------------------------- - #define rom_p500p rom_p500 @@ -2590,6 +2537,9 @@ ROM_START( b128 ) ROM_LOAD( "906114-04.u18", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) ) ROM_END +#define rom_cbm610 rom_b128 +#define rom_cbm620 rom_b256 + //------------------------------------------------- // ROM( b256 ) @@ -2616,20 +2566,6 @@ ROM_END //------------------------------------------------- -// ROM( cbm610 ) -//------------------------------------------------- - -#define rom_cbm610 rom_b128 - - -//------------------------------------------------- -// ROM( cbm620 ) -//------------------------------------------------- - -#define rom_cbm620 rom_b256 - - -//------------------------------------------------- // ROM( cbm620_hu ) //------------------------------------------------- @@ -2673,6 +2609,8 @@ ROM_START( b128hp ) ROM_LOAD( "906114-05.u75", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) ) ROM_END +#define rom_cbm710 rom_b128hp + //------------------------------------------------- // ROM( b256hp ) @@ -2697,6 +2635,8 @@ ROM_START( b256hp ) ROM_LOAD( "906114-05.u75", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) ) ROM_END +#define rom_cbm720 rom_b256hp + //------------------------------------------------- // ROM( bx256hp ) @@ -2724,25 +2664,6 @@ ROM_START( bx256hp ) ROM_LOAD( "906114-05.u75", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) ) ROM_END - -//------------------------------------------------- -// ROM( cbm710 ) -//------------------------------------------------- - -#define rom_cbm710 rom_b128hp - - -//------------------------------------------------- -// ROM( cbm720 ) -//------------------------------------------------- - -#define rom_cbm720 rom_b256hp - - -//------------------------------------------------- -// ROM( cbm730 ) -//------------------------------------------------- - #define rom_cbm730 rom_bx256hp diff --git a/src/mess/drivers/pet2001.c b/src/mess/drivers/pet2001.c index 1ae8cef1566..6a1eca61ff7 100644 --- a/src/mess/drivers/pet2001.c +++ b/src/mess/drivers/pet2001.c @@ -881,37 +881,6 @@ static IEEE488_INTERFACE( ieee488_intf ) //------------------------------------------------- -// PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) -//------------------------------------------------- - -static PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) -{ - DEVCB_DEVICE_LINE_MEMBER(M6520_1_TAG, pia6821_device, ca1_w) -}; - - -//------------------------------------------------- -// PET_DATASSETTE_PORT_INTERFACE( datassette2_intf ) -//------------------------------------------------- - -static PET_DATASSETTE_PORT_INTERFACE( datassette2_intf ) -{ - DEVCB_DEVICE_LINE_MEMBER(M6522_TAG, via6522_device, write_cb1) -}; - - -//------------------------------------------------- -// PET_EXPANSION_INTERFACE( exp_intf ) -//------------------------------------------------- - -static PET_EXPANSION_INTERFACE( exp_intf ) -{ - DEVCB_DRIVER_MEMBER(pet_state, read), - DEVCB_DRIVER_MEMBER(pet_state, write) -}; - - -//------------------------------------------------- // PET_USER_PORT_INTERFACE( user_intf ) //------------------------------------------------- @@ -1202,9 +1171,10 @@ static MACHINE_CONFIG_START( pet, pet_state ) MCFG_PIA6821_ADD(M6520_1_TAG, pia1_intf) MCFG_PIA6821_ADD(M6520_2_TAG, pia2_intf) MCFG_CBM_IEEE488_ADD(ieee488_intf, "c4040") - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c2n", NULL) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, datassette2_intf, cbm_datassette_devices, NULL, NULL) - MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_8MHz/8, exp_intf, pet_expansion_cards, NULL, NULL) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c2n", NULL, DEVWRITELINE(M6520_1_TAG, pia6821_device, ca1_w)) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(M6522_TAG, via6522_device, write_cb1)) + MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_8MHz/8, pet_expansion_cards, NULL, NULL) + MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write)) MCFG_PET_USER_PORT_ADD(PET_USER_PORT_TAG, user_intf, pet_user_port_cards, NULL, NULL) MCFG_QUICKLOAD_ADD("quickload", cbm_pet, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) @@ -1478,9 +1448,10 @@ static MACHINE_CONFIG_START( pet80, pet80_state ) MCFG_PIA6821_ADD(M6520_1_TAG, pia1_intf) MCFG_PIA6821_ADD(M6520_2_TAG, pia2_intf) MCFG_CBM_IEEE488_ADD(ieee488_intf, "c8050") - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c2n", NULL) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, datassette2_intf, cbm_datassette_devices, NULL, NULL) - MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, exp_intf, pet_expansion_cards, NULL, NULL) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c2n", NULL, DEVWRITELINE(M6520_1_TAG, pia6821_device, ca1_w)) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(M6522_TAG, via6522_device, write_cb1)) + MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, pet_expansion_cards, NULL, NULL) + MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write)) MCFG_PET_USER_PORT_ADD(PET_USER_PORT_TAG, user_intf, pet_user_port_cards, NULL, NULL) MCFG_QUICKLOAD_ADD("quickload", cbm_pet, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) @@ -1505,7 +1476,8 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED_CLASS( superpet, pet8032, superpet_state ) MCFG_DEVICE_REMOVE(PET_EXPANSION_SLOT_TAG) - MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, exp_intf, pet_expansion_cards, "superpet", NULL) + MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, pet_expansion_cards, "superpet", NULL) + MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write)) MCFG_SOFTWARE_LIST_ADD("flop_list2", "superpet_flop") MACHINE_CONFIG_END diff --git a/src/mess/drivers/plus4.c b/src/mess/drivers/plus4.c index df53832f4e1..f5ae1e5074f 100644 --- a/src/mess/drivers/plus4.c +++ b/src/mess/drivers/plus4.c @@ -503,7 +503,7 @@ READ8_MEMBER( plus4_state::cpu_r ) return data; } -READ8_MEMBER( plus4_state::c16_cpu_r ) +READ8_MEMBER( c16_state::cpu_r ) { /* @@ -650,45 +650,25 @@ static MOS7360_INTERFACE( ted_intf ) //------------------------------------------------- -// MOS6529_INTERFACE( spi_user_intf ) -//------------------------------------------------- - -static MOS6529_INTERFACE( spi_user_intf ) -{ - DEVCB_DEVICE_MEMBER(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_r), - DEVCB_DEVICE_MEMBER(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_w) -}; - - -//------------------------------------------------- // MOS6529_INTERFACE( spi_kb_intf ) //------------------------------------------------- -READ8_MEMBER( plus4_state::spi_kb_r ) -{ - return 0xff; -} - WRITE8_MEMBER( plus4_state::spi_kb_w ) { m_kb = data; } -static MOS6529_INTERFACE( spi_kb_intf ) -{ - DEVCB_DRIVER_MEMBER(plus4_state, spi_kb_r), - DEVCB_DRIVER_MEMBER(plus4_state, spi_kb_w) -}; - //------------------------------------------------- -// PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) +// MOS6551_INTERFACE( acia_intf ) //------------------------------------------------- -static PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) +WRITE_LINE_MEMBER( plus4_state::acia_irq_w ) { - DEVCB_NULL -}; + m_acia_irq = state; + + check_interrupts(); +} //------------------------------------------------- @@ -821,7 +801,7 @@ static MACHINE_CONFIG_START( ntsc, plus4_state ) MCFG_M7501_PORT_PULLS(0x00, 0xc0) MCFG_CPU_VBLANK_INT_DRIVER(SCREEN_TAG, plus4_state, c16_frame_interrupt) MCFG_CPU_PERIODIC_INT_DRIVER(plus4_state, c16_raster_interrupt, TED7360_HRETRACERATE) - MCFG_QUANTUM_TIME(attotime::from_hz(60)) + MCFG_QUANTUM_PERFECT_CPU(MOS7501_TAG) // video and sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") @@ -830,10 +810,10 @@ static MACHINE_CONFIG_START( ntsc, plus4_state ) // devices MCFG_PLS100_ADD(PLA_TAG) - MCFG_ACIA6551_ADD(MOS6551_TAG) - MCFG_MOS6529_ADD(MOS6529_USER_TAG, spi_user_intf) - MCFG_MOS6529_ADD(MOS6529_KB_TAG, spi_kb_intf) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, plus4_datassette_devices, "c1531", NULL) + MCFG_MOS6551_ADD(MOS6551_TAG, XTAL_1_8432MHz, DEVWRITELINE(DEVICE_SELF, plus4_state, acia_irq_w)) + MCFG_MOS6529_ADD(MOS6529_USER_TAG, DEVREAD8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_r), DEVWRITE8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_w)) + MCFG_MOS6529_ADD(MOS6529_KB_TAG, CONSTANT(0xff), DEVWRITE8(DEVICE_SELF, plus4_state, spi_kb_w)) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, plus4_datassette_devices, "c1531", NULL, NULL) MCFG_CBM_IEC_ADD(iec_intf, NULL) MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL) MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL) @@ -867,7 +847,7 @@ static MACHINE_CONFIG_START( pal, plus4_state ) MCFG_M7501_PORT_PULLS(0x00, 0xc0) MCFG_CPU_VBLANK_INT_DRIVER(SCREEN_TAG, plus4_state, c16_frame_interrupt) MCFG_CPU_PERIODIC_INT_DRIVER(plus4_state, c16_raster_interrupt, TED7360_HRETRACERATE) - MCFG_QUANTUM_TIME(attotime::from_hz(60)) + MCFG_QUANTUM_PERFECT_CPU(MOS7501_TAG) // video and sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") @@ -876,16 +856,16 @@ static MACHINE_CONFIG_START( pal, plus4_state ) // devices MCFG_PLS100_ADD(PLA_TAG) - MCFG_ACIA6551_ADD(MOS6551_TAG) - MCFG_MOS6529_ADD(MOS6529_USER_TAG, spi_user_intf) - MCFG_MOS6529_ADD(MOS6529_KB_TAG, spi_kb_intf) - MCFG_QUICKLOAD_ADD("quickload", cbm_c16, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, plus4_datassette_devices, "c1531", NULL) + MCFG_MOS6551_ADD(MOS6551_TAG, XTAL_1_8432MHz, DEVWRITELINE(DEVICE_SELF, plus4_state, acia_irq_w)) + MCFG_MOS6529_ADD(MOS6529_USER_TAG, DEVREAD8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_r), DEVWRITE8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_w)) + MCFG_MOS6529_ADD(MOS6529_KB_TAG, CONSTANT(0xff), DEVWRITE8(DEVICE_SELF, plus4_state, spi_kb_w)) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, plus4_datassette_devices, "c1531", NULL, NULL) MCFG_CBM_IEC_ADD(iec_intf, NULL) MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL) MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL) MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL_17_73447MHz/20, expansion_intf, plus4_expansion_cards, "c1551", NULL) MCFG_PLUS4_USER_PORT_ADD(PLUS4_USER_PORT_TAG, plus4_user_port_cards, NULL, NULL) + MCFG_QUICKLOAD_ADD("quickload", cbm_c16, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) // internal ram MCFG_RAM_ADD(RAM_TAG) @@ -905,9 +885,9 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( c16n ) //------------------------------------------------- -static MACHINE_CONFIG_DERIVED( c16n, ntsc ) +static MACHINE_CONFIG_DERIVED_CLASS( c16n, ntsc, c16_state ) MCFG_CPU_MODIFY(MOS7501_TAG) - MCFG_M7501_PORT_CALLBACKS(READ8(plus4_state, c16_cpu_r), WRITE8(plus4_state, cpu_w)) + MCFG_M7501_PORT_CALLBACKS(READ8(c16_state, cpu_r), WRITE8(plus4_state, cpu_w)) MCFG_M7501_PORT_PULLS(0x00, 0xc0) MCFG_DEVICE_REMOVE(MOS6551_TAG) @@ -927,9 +907,9 @@ MACHINE_CONFIG_END // MACHINE_CONFIG( c16p ) //------------------------------------------------- -static MACHINE_CONFIG_DERIVED( c16p, pal ) +static MACHINE_CONFIG_DERIVED_CLASS( c16p, pal, c16_state ) MCFG_CPU_MODIFY(MOS7501_TAG) - MCFG_M7501_PORT_CALLBACKS(READ8(plus4_state, c16_cpu_r), WRITE8(plus4_state, cpu_w)) + MCFG_M7501_PORT_CALLBACKS(READ8(c16_state, cpu_r), WRITE8(plus4_state, cpu_w)) MCFG_M7501_PORT_PULLS(0x00, 0xc0) MCFG_DEVICE_REMOVE(MOS6551_TAG) diff --git a/src/mess/drivers/vic10.c b/src/mess/drivers/vic10.c index a4e93e24017..e94d7c31518 100644 --- a/src/mess/drivers/vic10.c +++ b/src/mess/drivers/vic10.c @@ -555,15 +555,6 @@ WRITE8_MEMBER( vic10_state::cpu_w ) m_cassette->motor_w(BIT(data, 5)); } -//------------------------------------------------- -// PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) -//------------------------------------------------- - -static PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) -{ - DEVCB_DEVICE_LINE_MEMBER(MOS6526_TAG, mos6526_device, flag_w) -}; - //------------------------------------------------- // C64_EXPANSION_INTERFACE( expansion_intf ) @@ -652,13 +643,12 @@ static MACHINE_CONFIG_START( vic10, vic10_state ) MCFG_SOUND_ADD(MOS6581_TAG, SID6581, VIC6566_CLOCK) MCFG_SOUND_CONFIG(sid_intf) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) - MCFG_SOUND_ADD("dac", DAC, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) // devices MCFG_MOS6526_ADD(MOS6526_TAG, VIC6566_CLOCK, 60, cia_intf) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, NULL, NULL) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL) + MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6566_TAG, mos6566_device, lp_w)) MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL) MCFG_VIC10_EXPANSION_SLOT_ADD(VIC10_EXPANSION_SLOT_TAG, VIC6566_CLOCK, expansion_intf, vic10_expansion_cards, NULL, NULL) diff --git a/src/mess/drivers/vic20.c b/src/mess/drivers/vic20.c index 865be41ba60..b5b34530d5b 100644 --- a/src/mess/drivers/vic20.c +++ b/src/mess/drivers/vic20.c @@ -702,16 +702,6 @@ static const via6522_interface via1_intf = //------------------------------------------------- -// PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) -//------------------------------------------------- - -static PET_DATASSETTE_PORT_INTERFACE( datassette_intf ) -{ - DEVCB_DEVICE_LINE_MEMBER(M6522_1_TAG, via6522_device, write_ca1), -}; - - -//------------------------------------------------- // CBM_IEC_INTERFACE( cbm_iec_intf ) //------------------------------------------------- @@ -822,9 +812,8 @@ static MACHINE_CONFIG_START( vic20, vic20_state ) // devices MCFG_VIA6522_ADD(M6522_0_TAG, 0, via0_intf) MCFG_VIA6522_ADD(M6522_1_TAG, 0, via1_intf) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c1530", NULL) + MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(M6522_1_TAG, via6522_device, write_ca1)) MCFG_CBM_IEC_ADD(cbm_iec_intf, "c1541") - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, "joy", NULL) MCFG_VIC20_USER_PORT_ADD(VIC20_USER_PORT_TAG, user_intf, vic20_user_port_cards, NULL, NULL) MCFG_QUICKLOAD_ADD("quickload", cbm_vc20, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) @@ -853,11 +842,11 @@ static MACHINE_CONFIG_DERIVED( ntsc, vic20 ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_MOS6560_ADD(M6560_TAG, SCREEN_TAG, MOS6560_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - MCFG_SOUND_ADD("dac", DAC, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) // devices MCFG_VIC20_EXPANSION_SLOT_ADD(VIC20_EXPANSION_SLOT_TAG, MOS6560_CLOCK, expansion_intf, vic20_expansion_cards, NULL, NULL) + MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, "joy", NULL) + MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(M6560_TAG, mos6560_device, lp_w)) // software lists MCFG_SOFTWARE_LIST_FILTER("cart_list", "NTSC") @@ -880,11 +869,11 @@ static MACHINE_CONFIG_DERIVED( pal, vic20 ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_MOS6561_ADD(M6560_TAG, SCREEN_TAG, MOS6561_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - MCFG_SOUND_ADD("dac", DAC, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) // devices MCFG_VIC20_EXPANSION_SLOT_ADD(VIC20_EXPANSION_SLOT_TAG, MOS6561_CLOCK, expansion_intf, vic20_expansion_cards, NULL, NULL) + MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, "joy", NULL) + MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(M6561_TAG, mos6561_device, lp_w)) // software lists MCFG_SOFTWARE_LIST_FILTER("cart_list", "PAL") diff --git a/src/mess/includes/c128.h b/src/mess/includes/c128.h index 1220dc438eb..bcc632205f7 100644 --- a/src/mess/includes/c128.h +++ b/src/mess/includes/c128.h @@ -181,8 +181,6 @@ public: DECLARE_READ8_MEMBER( cpu_r ); DECLARE_WRITE8_MEMBER( cpu_w ); - DECLARE_WRITE_LINE_MEMBER( tape_read_w ); - DECLARE_WRITE_LINE_MEMBER( iec_srq_w ); DECLARE_WRITE_LINE_MEMBER( iec_data_w ); diff --git a/src/mess/includes/c64.h b/src/mess/includes/c64.h index deccbbc4637..aaab110519d 100644 --- a/src/mess/includes/c64.h +++ b/src/mess/includes/c64.h @@ -71,9 +71,7 @@ public: m_cia2_irq(CLEAR_LINE), m_vic_irq(CLEAR_LINE), m_exp_irq(CLEAR_LINE), - m_exp_nmi(CLEAR_LINE), - m_cass_rd(1), - m_iec_srq(1) + m_exp_nmi(CLEAR_LINE) { } required_device<m6510_device> m_maincpu; @@ -134,10 +132,6 @@ public: DECLARE_READ8_MEMBER( cpu_r ); DECLARE_WRITE8_MEMBER( cpu_w ); - DECLARE_WRITE_LINE_MEMBER( tape_read_w ); - - DECLARE_WRITE_LINE_MEMBER( iec_srq_w ); - DECLARE_READ8_MEMBER( exp_dma_r ); DECLARE_WRITE8_MEMBER( exp_dma_w ); DECLARE_WRITE_LINE_MEMBER( exp_irq_w ); @@ -161,8 +155,6 @@ public: int m_exp_irq; int m_exp_nmi; int m_exp_dma; - int m_cass_rd; - int m_iec_srq; }; diff --git a/src/mess/includes/cbm2.h b/src/mess/includes/cbm2.h index abda82ca54b..7ca9afea486 100644 --- a/src/mess/includes/cbm2.h +++ b/src/mess/includes/cbm2.h @@ -9,7 +9,6 @@ #include "formats/cbm_snqk.h" #include "includes/cbm.h" #include "machine/6525tpi.h" -#include "machine/6551acia.h" #include "machine/cbm2exp.h" #include "machine/cbm2user.h" #include "machine/cbmipt.h" @@ -17,6 +16,7 @@ #include "machine/ds75161a.h" #include "machine/ieee488.h" #include "machine/mos6526.h" +#include "machine/mos6551.h" #include "machine/petcass.h" #include "machine/pic8259.h" #include "machine/pla.h" @@ -104,8 +104,7 @@ public: m_graphics(1), m_todclk(0), m_tpi1_irq(CLEAR_LINE), - m_cass_rd(1), - m_user_flag(0), + m_acia_irq(CLEAR_LINE), m_user_irq(CLEAR_LINE), m_tpi2_pa(0), m_tpi2_pb(0) @@ -117,7 +116,7 @@ public: required_device<sid6581_device> m_sid; required_device<tpi6525_device> m_tpi1; required_device<tpi6525_device> m_tpi2; - required_device<acia6551_device> m_acia; + required_device<mos6551_device> m_acia; required_device<mos6526_device> m_cia; required_device<ds75160a_device> m_ieee1; required_device<ds75161a_device> m_ieee2; @@ -225,8 +224,7 @@ public: // interrupt state int m_todclk; int m_tpi1_irq; - int m_cass_rd; - int m_user_flag; + int m_acia_irq; int m_user_irq; // keyboard state; diff --git a/src/mess/includes/plus4.h b/src/mess/includes/plus4.h index b3de53367af..5b1e15d54f9 100644 --- a/src/mess/includes/plus4.h +++ b/src/mess/includes/plus4.h @@ -69,7 +69,7 @@ public: required_device<m7501_device> m_maincpu; required_device<pls100_device> m_pla; required_device<mos7360_device> m_ted; - optional_device<acia6551_device> m_acia; + optional_device<mos6551_device> m_acia; optional_device<mos6529_device> m_spi_user; required_device<mos6529_device> m_spi_kb; optional_device<t6721_device> m_t6721; @@ -106,7 +106,6 @@ public: DECLARE_READ8_MEMBER( ted_videoram_r ); DECLARE_READ8_MEMBER( cpu_r ); - DECLARE_READ8_MEMBER( c16_cpu_r ); DECLARE_WRITE8_MEMBER( cpu_w ); DECLARE_WRITE_LINE_MEMBER( ted_irq_w ); @@ -114,9 +113,10 @@ public: DECLARE_READ8_MEMBER( ted_rom_r ); DECLARE_READ8_MEMBER( ted_k_r ); - DECLARE_READ8_MEMBER( spi_kb_r ); DECLARE_WRITE8_MEMBER( spi_kb_w ); + DECLARE_WRITE_LINE_MEMBER( acia_irq_w ); + DECLARE_READ8_MEMBER( exp_dma_r ); DECLARE_WRITE8_MEMBER( exp_dma_w ); DECLARE_WRITE_LINE_MEMBER( exp_irq_w ); @@ -153,5 +153,16 @@ public: }; +class c16_state : public plus4_state +{ +public: + c16_state(const machine_config &mconfig, device_type type, const char *tag) + : plus4_state(mconfig, type, tag) + { } + + DECLARE_READ8_MEMBER( cpu_r ); +}; + + #endif diff --git a/src/mess/machine/petcass.c b/src/mess/machine/petcass.c index 6ebe89e6bb0..bfe065a6d48 100644 --- a/src/mess/machine/petcass.c +++ b/src/mess/machine/petcass.c @@ -53,8 +53,9 @@ device_pet_datassette_port_interface::~device_pet_datassette_port_interface() //------------------------------------------------- pet_datassette_port_device::pet_datassette_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, PET_DATASSETTE_PORT, "Datassette Port", tag, owner, clock), - device_slot_interface(mconfig, *this) + device_t(mconfig, PET_DATASSETTE_PORT, "Datassette Port", tag, owner, clock), + device_slot_interface(mconfig, *this), + m_read_handler(*this) { } @@ -69,29 +70,6 @@ pet_datassette_port_device::~pet_datassette_port_device() //------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void pet_datassette_port_device::device_config_complete() -{ - // inherit a copy of the static data - const pet_datassette_port_interface *intf = reinterpret_cast<const pet_datassette_port_interface *>(static_config()); - if (intf != NULL) - { - *static_cast<pet_datassette_port_interface *>(this) = *intf; - } - - // or initialize to defaults if none provided - else - { - memset(&m_out_read_cb, 0, sizeof(m_out_read_cb)); - } -} - - -//------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- @@ -100,7 +78,7 @@ void pet_datassette_port_device::device_start() m_cart = dynamic_cast<device_pet_datassette_port_interface *>(get_card_device()); // resolve callbacks - m_out_read_func.resolve(m_out_read_cb, *this); + m_read_handler.resolve_safe(); } @@ -109,4 +87,4 @@ WRITE_LINE_MEMBER( pet_datassette_port_device::write ) { if (m_cart != NULL) m_c READ_LINE_MEMBER( pet_datassette_port_device::sense_r ) { int state = 1; if (m_cart != NULL) state = m_cart->datassette_sense(); return state; } WRITE_LINE_MEMBER( pet_datassette_port_device::motor_w ) { if (m_cart != NULL) m_cart->datassette_motor(state); } -WRITE_LINE_MEMBER( pet_datassette_port_device::read_w ) { m_out_read_func(state); } +WRITE_LINE_MEMBER( pet_datassette_port_device::read_w ) { m_read_handler(state); } diff --git a/src/mess/machine/petcass.h b/src/mess/machine/petcass.h index 99353ea657b..f8d0316b4ad 100644 --- a/src/mess/machine/petcass.h +++ b/src/mess/machine/petcass.h @@ -38,14 +38,10 @@ // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define PET_DATASSETTE_PORT_INTERFACE(_name) \ - const pet_datassette_port_interface (_name) = - - -#define MCFG_PET_DATASSETTE_PORT_ADD(_tag, _config, _slot_intf, _def_slot, _def_inp) \ +#define MCFG_PET_DATASSETTE_PORT_ADD(_tag, _slot_intf, _def_slot, _def_inp, _devcb) \ MCFG_DEVICE_ADD(_tag, PET_DATASSETTE_PORT, 0) \ - MCFG_DEVICE_CONFIG(_config) \ - MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false) + MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false) \ + devcb = &pet_datassette_port_device::set_read_handler(*device, DEVCB2_##_devcb); @@ -53,20 +49,11 @@ // TYPE DEFINITIONS //************************************************************************** -// ======================> pet_datassette_port_interface - -struct pet_datassette_port_interface -{ - devcb_write_line m_out_read_cb; -}; - - // ======================> pet_datassette_port_device class device_pet_datassette_port_interface; class pet_datassette_port_device : public device_t, - public pet_datassette_port_interface, public device_slot_interface { public: @@ -74,6 +61,9 @@ public: pet_datassette_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); virtual ~pet_datassette_port_device(); + // static configuration helpers + template<class _Object> static devcb2_base &set_read_handler(device_t &device, _Object object) { return downcast<pet_datassette_port_device &>(device).m_read_handler.set_callback(object); } + // computer interface DECLARE_READ_LINE_MEMBER( read ); DECLARE_WRITE_LINE_MEMBER( write ); @@ -85,10 +75,9 @@ public: protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); - devcb_resolved_write_line m_out_read_func; + devcb2_write_line m_read_handler; device_pet_datassette_port_interface *m_cart; }; diff --git a/src/mess/machine/petexp.c b/src/mess/machine/petexp.c index 63dd877dd29..04f9c7fdcc4 100644 --- a/src/mess/machine/petexp.c +++ b/src/mess/machine/petexp.c @@ -37,7 +37,9 @@ const device_type PET_EXPANSION_SLOT = &device_creator<pet_expansion_slot_device pet_expansion_slot_device::pet_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, PET_EXPANSION_SLOT, "PET memory expansion port", tag, owner, clock), - device_slot_interface(mconfig, *this) + device_slot_interface(mconfig, *this), + m_read_dma(*this), + m_write_dma(*this) { } @@ -72,30 +74,6 @@ device_pet_expansion_card_interface::~device_pet_expansion_card_interface() //------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void pet_expansion_slot_device::device_config_complete() -{ - // inherit a copy of the static data - const pet_expansion_slot_interface *intf = reinterpret_cast<const pet_expansion_slot_interface *>(static_config()); - if (intf != NULL) - { - *static_cast<pet_expansion_slot_interface *>(this) = *intf; - } - - // or initialize to defaults if none provided - else - { - memset(&m_in_dma_bd_cb, 0, sizeof(m_in_dma_bd_cb)); - memset(&m_out_dma_bd_cb, 0, sizeof(m_out_dma_bd_cb)); - } -} - - -//------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- @@ -104,8 +82,8 @@ void pet_expansion_slot_device::device_start() m_card = dynamic_cast<device_pet_expansion_card_interface *>(get_card_device()); // resolve callbacks - m_in_dma_bd_func.resolve(m_in_dma_bd_cb, *this); - m_out_dma_bd_func.resolve(m_out_dma_bd_cb, *this); + m_read_dma.resolve_safe(0); + m_write_dma.resolve_safe(); } @@ -186,7 +164,7 @@ WRITE_LINE_MEMBER( pet_expansion_slot_device::irq_w ) UINT8 pet_expansion_slot_device::dma_bd_r(offs_t offset) { - return m_in_dma_bd_func(offset); + return m_read_dma(offset); } @@ -196,7 +174,7 @@ UINT8 pet_expansion_slot_device::dma_bd_r(offs_t offset) void pet_expansion_slot_device::dma_bd_w(offs_t offset, UINT8 data) { - m_out_dma_bd_func(offset, data); + m_write_dma(offset, data); } diff --git a/src/mess/machine/petexp.h b/src/mess/machine/petexp.h index a02ff2fa655..fcf263a8077 100644 --- a/src/mess/machine/petexp.h +++ b/src/mess/machine/petexp.h @@ -30,43 +30,37 @@ // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define PET_EXPANSION_INTERFACE(_name) \ - const pet_expansion_slot_interface (_name) = - - -#define MCFG_PET_EXPANSION_SLOT_ADD(_tag, _clock, _config, _slot_intf, _def_slot, _def_inp) \ +#define MCFG_PET_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot, _def_inp) \ MCFG_DEVICE_ADD(_tag, PET_EXPANSION_SLOT, _clock) \ - MCFG_DEVICE_CONFIG(_config) \ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false) +#define MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(_read, _write) \ + downcast<pet_expansion_slot_device *>(device)->set_callbacks(DEVCB2_##_read, DEVCB2_##_write); + + //************************************************************************** // TYPE DEFINITIONS //************************************************************************** -// ======================> pet_expansion_slot_interface - -struct pet_expansion_slot_interface -{ - devcb_read8 m_in_dma_bd_cb; - devcb_write8 m_out_dma_bd_cb; -}; - - // ======================> pet_expansion_slot_device class device_pet_expansion_card_interface; class pet_expansion_slot_device : public device_t, - public device_slot_interface, - public pet_expansion_slot_interface + public device_slot_interface { public: // construction/destruction pet_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); virtual ~pet_expansion_slot_device(); + template<class _read, class _write> void set_callbacks(_read rd, _write wr) { + m_read_dma.set_callback(rd); + m_write_dma.set_callback(wr); + } + // computer interface int norom_r(address_space &space, offs_t offset, int sel); UINT8 read(address_space &space, offs_t offset, UINT8 data, int sel); @@ -81,14 +75,13 @@ public: protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); virtual void device_reset(); device_pet_expansion_card_interface *m_card; - devcb_resolved_read8 m_in_dma_bd_func; - devcb_resolved_write8 m_out_dma_bd_func; + devcb2_read8 m_read_dma; + devcb2_write8 m_write_dma; }; diff --git a/src/mess/machine/superpet.c b/src/mess/machine/superpet.c index b9e6e131a6c..99dac336444 100644 --- a/src/mess/machine/superpet.c +++ b/src/mess/machine/superpet.c @@ -70,7 +70,7 @@ static MACHINE_CONFIG_FRAGMENT( superpet ) MCFG_CPU_ADD(M6809_TAG, M6809, XTAL_16MHz/16) MCFG_CPU_PROGRAM_MAP(superpet_mem) - MCFG_ACIA6551_ADD(M6551_TAG) // XTAL_1_8432MHz + MCFG_MOS6551_ADD(M6551_TAG, XTAL_1_8432MHz, DEVWRITELINE(DEVICE_SELF, superpet_device, acia_irq_w)) MCFG_MOS6702_ADD(MOS6702_TAG, XTAL_16MHz/16) MACHINE_CONFIG_END @@ -384,3 +384,15 @@ WRITE8_MEMBER( superpet_device::write ) { m_slot->dma_bd_w(offset, data); } + + +//------------------------------------------------- +// acia_irq_w - +//------------------------------------------------- + +WRITE_LINE_MEMBER( superpet_device::acia_irq_w ) +{ + m_acia_irq = state; + + //m_maincpu->set_input_line(M6809_IRQ_LINE, m_pet_irq || m_acia_irq); +} diff --git a/src/mess/machine/superpet.h b/src/mess/machine/superpet.h index 738228bea95..acb1e3bd1ae 100644 --- a/src/mess/machine/superpet.h +++ b/src/mess/machine/superpet.h @@ -15,7 +15,7 @@ #include "emu.h" #include "cpu/m6809/m6809.h" -#include "machine/6551acia.h" +#include "machine/mos6551.h" #include "machine/mos6702.h" #include "machine/petexp.h" @@ -41,6 +41,7 @@ public: DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); + DECLARE_WRITE_LINE_MEMBER( acia_irq_w ); protected: // device-level overrides @@ -77,7 +78,7 @@ protected: private: required_device<cpu_device> m_maincpu; - required_device<acia6551_device> m_acia; + required_device<mos6551_device> m_acia; required_device<mos6702_device> m_dongle; required_memory_region m_rom; optional_shared_ptr<UINT8> m_ram; diff --git a/src/mess/machine/vcs_lightpen.c b/src/mess/machine/vcs_lightpen.c index c9ec39a4383..1a84bb94fa0 100644 --- a/src/mess/machine/vcs_lightpen.c +++ b/src/mess/machine/vcs_lightpen.c @@ -21,6 +21,7 @@ const device_type VCS_LIGHTPEN = &device_creator<vcs_lightpen_device>; INPUT_CHANGED_MEMBER( vcs_lightpen_device::trigger ) { // TODO trigger timer at correct screen position + m_port->trigger_w(newval); } @@ -30,10 +31,10 @@ static INPUT_PORTS_START( vcs_lightpen ) PORT_BIT( 0xdf, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("LIGHTX") - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X) PORT_NAME("Lightpen X Axis") PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) PORT_PLAYER(1) + PORT_BIT( 0xff, 0x00, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15) PORT_START("LIGHTY") - PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y) PORT_NAME("Lightpen Y Axis") PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) PORT_PLAYER(1) + PORT_BIT( 0xff, 0x00, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15) INPUT_PORTS_END diff --git a/src/mess/machine/vcsctrl.c b/src/mess/machine/vcsctrl.c index 8b7158b0cde..60bb1e14b4c 100644 --- a/src/mess/machine/vcsctrl.c +++ b/src/mess/machine/vcsctrl.c @@ -54,7 +54,8 @@ device_vcs_control_port_interface::~device_vcs_control_port_interface() vcs_control_port_device::vcs_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, VCS_CONTROL_PORT, "Atari VCS control port", tag, owner, clock), - device_slot_interface(mconfig, *this) + device_slot_interface(mconfig, *this), + m_trigger_handler(*this) { } @@ -75,6 +76,8 @@ vcs_control_port_device::~vcs_control_port_device() void vcs_control_port_device::device_start() { m_device = dynamic_cast<device_vcs_control_port_interface *>(get_card_device()); + + m_trigger_handler.resolve_safe(); } @@ -90,6 +93,11 @@ bool vcs_control_port_device::exists() { return m_device != NULL; } bool vcs_control_port_device::has_pot_x() { return exists() && m_device->has_pot_x(); } bool vcs_control_port_device::has_pot_y() { return exists() && m_device->has_pot_y(); } +void vcs_control_port_device::trigger_w(int state) +{ + m_trigger_handler(state); +} + //------------------------------------------------- // SLOT_INTERFACE( vcs_control_port_devices ) //------------------------------------------------- diff --git a/src/mess/machine/vcsctrl.h b/src/mess/machine/vcsctrl.h index 004c3c54210..9fbc932fb9d 100644 --- a/src/mess/machine/vcsctrl.h +++ b/src/mess/machine/vcsctrl.h @@ -28,6 +28,10 @@ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false) +#define MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(_devcb) \ + devcb = &vcs_control_port_device::set_trigger_handler(*device, DEVCB2_##_devcb); + + //************************************************************************** // TYPE DEFINITIONS @@ -45,6 +49,9 @@ public: vcs_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); virtual ~vcs_control_port_device(); + // static configuration helpers + template<class _Object> static devcb2_base &set_trigger_handler(device_t &device, _Object object) { return downcast<vcs_control_port_device &>(device).m_trigger_handler.set_callback(object); } + // computer interface // Data returned by the joy_r methods: @@ -72,11 +79,16 @@ public: bool has_pot_x(); bool has_pot_y(); + void trigger_w(int state); + protected: // device-level overrides virtual void device_start(); device_vcs_control_port_interface *m_device; + +private: + devcb2_write_line m_trigger_handler; }; |