diff --git a/src/emu/machine/6526cia.c b/src/emu/machine/6526cia.c index 872be2850da..1eb80c81fc7 100644 --- a/src/emu/machine/6526cia.c +++ b/src/emu/machine/6526cia.c @@ -77,15 +77,24 @@ inline attotime legacy_mos6526_device::cycles_to_time(int c) //------------------------------------------------- legacy_mos6526_device::legacy_mos6526_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) - : device_t(mconfig, type, name, tag, owner, clock, shortname, source) + : device_t(mconfig, type, name, tag, owner, clock, shortname, source), + m_write_irq(*this), + m_write_pc(*this), + m_write_cnt(*this), + m_write_sp(*this), + m_read_pa(*this), + m_write_pa(*this), + m_read_pb(*this), + m_write_pb(*this), + m_tod_clock(0) { } legacy_mos6526r1_device::legacy_mos6526r1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : legacy_mos6526_device(mconfig, LEGACY_MOS6526R1, "MOS6526r1", tag, owner, clock, "legacy_mos6526r1", __FILE__) { } + : legacy_mos6526_device(mconfig, LEGACY_MOS6526R1, "LEGACY_MOS6526R1", tag, owner, clock, "legacy_mos6526r1", __FILE__) { } legacy_mos6526r2_device::legacy_mos6526r2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : legacy_mos6526_device(mconfig, LEGACY_MOS6526R2, "MOS6526r2", tag, owner, clock, "legacy_mos6526r2", __FILE__) { } + : legacy_mos6526_device(mconfig, LEGACY_MOS6526R2, "LEGACY_MOS6526R2", tag, owner, clock, "legacy_mos6526r2", __FILE__) { } legacy_mos8520_device::legacy_mos8520_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : legacy_mos6526_device(mconfig, LEGACY_MOS8520, "LEGACY_MOS8520", tag, owner, clock, "legacy_mos8520", __FILE__) { } @@ -94,14 +103,6 @@ legacy_mos5710_device::legacy_mos5710_device(const machine_config &mconfig, cons : legacy_mos6526_device(mconfig, LEGACY_MOS5710, "LEGACY_MOS5710", tag, owner, clock, "legacy_mos5710", __FILE__) { } -void legacy_mos6526_device::static_set_tod_clock(device_t &device, int tod_clock) -{ - legacy_mos6526_device &cia = dynamic_cast(device); - - cia.m_tod_clock = tod_clock; -} - - //------------------------------------------------- // device_reset - device-specific reset //------------------------------------------------- @@ -148,53 +149,26 @@ void legacy_mos6526_device::device_reset() } -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void legacy_mos6526_device::device_config_complete() -{ - // inherit a copy of the static data - const legacy_mos6526_interface *intf = reinterpret_cast(static_config()); - if (intf != NULL) - *static_cast(this) = *intf; - - // or initialize to defaults if none provided - else - { - memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb)); - memset(&m_out_pc_cb, 0, sizeof(m_out_pc_cb)); - memset(&m_out_cnt_cb, 0, sizeof(m_out_cnt_cb)); - memset(&m_out_sp_cb, 0, sizeof(m_out_sp_cb)); - memset(&m_in_pa_cb, 0, sizeof(m_in_pa_cb)); - memset(&m_out_pa_cb, 0, sizeof(m_out_pa_cb)); - memset(&m_in_pb_cb, 0, sizeof(m_in_pb_cb)); - memset(&m_out_pb_cb, 0, sizeof(m_out_pb_cb)); - } -} - - //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- void legacy_mos6526_device::device_start() { + // resolve callbacks + m_write_irq.resolve_safe(); + m_write_pc.resolve_safe(); + m_write_cnt.resolve_safe(); + m_write_sp.resolve_safe(); + m_read_pa.resolve_safe(0xff); + m_write_pa.resolve_safe(); + m_read_pb.resolve_safe(0xff); + m_write_pb.resolve_safe(); + /* clear out CIA structure, and copy the interface */ - m_out_irq_func.resolve(m_out_irq_cb, *this); - m_out_pc_func.resolve(m_out_pc_cb, *this); - m_out_cnt_func.resolve(m_out_cnt_cb, *this); - m_out_sp_func.resolve(m_out_sp_cb, *this); m_flag = 1; /* setup ports */ - m_port[0].m_read.resolve(m_in_pa_cb, *this); - m_port[0].m_write.resolve(m_out_pa_cb, *this); - m_port[1].m_read.resolve(m_in_pb_cb, *this); - m_port[1].m_write.resolve(m_out_pb_cb, *this); - for (int p = 0; p < (sizeof(m_port) / sizeof(m_port[0])); p++) { m_port[p].m_mask_value = 0xff; @@ -263,7 +237,7 @@ void legacy_mos6526_device::device_timer(emu_timer &timer, device_timer_id id, i switch (id) { case TIMER_PC: - m_out_pc_func(1); + m_write_pc(1); break; case TIMER_TOD: @@ -288,7 +262,7 @@ void legacy_mos6526_device::set_port_mask_value(int port, int data) void legacy_mos6526_device::update_pc() { - m_out_pc_func(0); + m_write_pc(0); m_pc_timer->adjust(cycles_to_time(1)); } @@ -316,7 +290,7 @@ void legacy_mos6526_device::update_interrupts() if (m_irq != new_irq) { m_irq = new_irq; - m_out_irq_func(m_irq); + m_write_irq(m_irq); } } @@ -389,11 +363,11 @@ void legacy_mos6526_device::timer_underflow(int timer) /* transmit MSB */ m_sp = BIT(m_serial, 7); - m_out_sp_func(m_sp); + m_write_sp(m_sp); /* toggle CNT */ m_cnt = !m_cnt; - m_out_cnt_func(m_cnt); + m_write_cnt(m_cnt); /* shift data */ m_serial <<= 1; @@ -410,7 +384,7 @@ void legacy_mos6526_device::timer_underflow(int timer) { /* toggle CNT */ m_cnt = !m_cnt; - m_out_cnt_func(m_cnt); + m_write_cnt(m_cnt); if (m_shift == 8) { @@ -609,7 +583,7 @@ UINT8 legacy_mos6526_device::reg_r(UINT8 offset) case CIA_PRA: case CIA_PRB: port = &m_port[offset & 1]; - data = port->m_read(0); + data = (offset & 1) ? m_read_pb(0) : m_read_pa(0); data = ((data & ~port->m_ddr) | (port->m_latch & port->m_ddr)) & port->m_mask_value; port->m_in = data; @@ -749,7 +723,10 @@ void legacy_mos6526_device::reg_w(UINT8 offset, UINT8 data) port = &m_port[offset & 1]; port->m_latch = data; port->m_out = (data & port->m_ddr) | (port->m_in & ~port->m_ddr); - port->m_write(0, port->m_out); + if (offset & 1) + m_write_pb((offs_t)0, port->m_out); + else + m_write_pa((offs_t)0, port->m_out); /* pulse /PC following the write */ if (offset == CIA_PRB) diff --git a/src/emu/machine/6526cia.h b/src/emu/machine/6526cia.h index 49b2ce7166e..5eb32c1d47b 100644 --- a/src/emu/machine/6526cia.h +++ b/src/emu/machine/6526cia.h @@ -1,4 +1,8 @@ /********************************************************************** + + WARNING: DO NOT USE! WILL BE REMOVED IN FAVOR OF machine/mos6526.h + +********************************************************************** MOS 6526/8520 Complex Interface Adapter emulation @@ -43,32 +47,32 @@ // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define MCFG_LEGACY_MOS6526R1_ADD(_tag, _clock, _tod_clock, _config) \ - MCFG_DEVICE_ADD(_tag, LEGACY_MOS6526R1, _clock) \ - MCFG_DEVICE_CONFIG(_config) \ - legacy_mos6526_device::static_set_tod_clock(*device, _tod_clock); +#define MCFG_MOS6526_TOD(_clock) \ + legacy_mos6526_device::static_set_tod_clock(*device, _clock); -#define MCFG_LEGACY_MOS6526R2_ADD(_tag, _clock, _tod_clock, _config) \ - MCFG_DEVICE_ADD(_tag, LEGACY_MOS6526R2, _clock) \ - MCFG_DEVICE_CONFIG(_config) \ - legacy_mos6526_device::static_set_tod_clock(*device, _tod_clock); +#define MCFG_MOS6526_IRQ_CALLBACK(_write) \ + devcb = &legacy_mos6526_device::set_irq_wr_callback(*device, DEVCB2_##_write); -#define MCFG_LEGACY_MOS8520_ADD(_tag, _clock, _tod_clock, _config) \ - MCFG_DEVICE_ADD(_tag, LEGACY_MOS8520, _clock) \ - MCFG_DEVICE_CONFIG(_config) \ - legacy_mos6526_device::static_set_tod_clock(*device, _tod_clock); +#define MCFG_MOS6526_CNT_CALLBACK(_write) \ + devcb = &legacy_mos6526_device::set_cnt_wr_callback(*device, DEVCB2_##_write); -#define MCFG_LEGACY_MOS5710_ADD(_tag, _clock, _tod_clock, _config) \ - MCFG_DEVICE_ADD(_tag, LEGACY_MOS5710, _clock) \ - MCFG_DEVICE_CONFIG(_config) \ - legacy_mos6526_device::static_set_tod_clock(*device, _tod_clock); +#define MCFG_MOS6526_SP_CALLBACK(_write) \ + devcb = &legacy_mos6526_device::set_sp_wr_callback(*device, DEVCB2_##_write); +#define MCFG_MOS6526_PA_INPUT_CALLBACK(_read) \ + devcb = &legacy_mos6526_device::set_pa_rd_callback(*device, DEVCB2_##_read); -#define LEGACY_MOS6526_INTERFACE(name) \ - const legacy_mos6526_interface (name)= +#define MCFG_MOS6526_PA_OUTPUT_CALLBACK(_write) \ + devcb = &legacy_mos6526_device::set_pa_wr_callback(*device, DEVCB2_##_write); -#define LEGACY_MOS8520_INTERFACE(name) \ - const legacy_mos6526_interface (name)= +#define MCFG_MOS6526_PB_INPUT_CALLBACK(_read) \ + devcb = &legacy_mos6526_device::set_pb_rd_callback(*device, DEVCB2_##_read); + +#define MCFG_MOS6526_PB_OUTPUT_CALLBACK(_write) \ + devcb = &legacy_mos6526_device::set_pb_wr_callback(*device, DEVCB2_##_write); + +#define MCFG_MOS6526_PC_CALLBACK(_write) \ + devcb = &legacy_mos6526_device::set_pc_wr_callback(*device, DEVCB2_##_write); @@ -76,37 +80,24 @@ TYPE DEFINITIONS ***************************************************************************/ - -// ======================> legacy_mos6526_interface - -struct legacy_mos6526_interface -{ - devcb_write_line m_out_irq_cb; - devcb_write_line m_out_pc_cb; - devcb_write_line m_out_cnt_cb; - devcb_write_line m_out_sp_cb; - - devcb_read8 m_in_pa_cb; - devcb_write8 m_out_pa_cb; - - devcb_read8 m_in_pb_cb; - devcb_write8 m_out_pb_cb; -}; - - - // ======================> legacy_mos6526_device -class legacy_mos6526_device : public device_t, - public legacy_mos6526_interface +class legacy_mos6526_device : public device_t { -protected: +public: // construction/destruction legacy_mos6526_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); -public: - // inline configuration - static void static_set_tod_clock(device_t &device, int tod_clock); + static void static_set_tod_clock(device_t &device, int clock) { downcast(device).m_tod_clock = clock; } + + template static devcb2_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_irq.set_callback(object); } + template static devcb2_base &set_cnt_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_sp.set_callback(object); } + template static devcb2_base &set_sp_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_cnt.set_callback(object); } + template static devcb2_base &set_pa_rd_callback(device_t &device, _Object object) { return downcast(device).m_read_pa.set_callback(object); } + template static devcb2_base &set_pa_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_pa.set_callback(object); } + template static devcb2_base &set_pb_rd_callback(device_t &device, _Object object) { return downcast(device).m_read_pb.set_callback(object); } + template static devcb2_base &set_pb_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_pb.set_callback(object); } + template static devcb2_base &set_pc_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_pc.set_callback(object); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); @@ -119,30 +110,29 @@ public: UINT8 pb_r(UINT8 offset) { return (m_port[1].m_latch | ~m_port[1].m_ddr); } /* interrupt request */ - UINT8 irq_r() { return m_irq; } + DECLARE_READ_LINE_MEMBER( irq_r ) { return m_irq; } /* time of day clock */ - void tod_w(UINT8 state) { if(state) clock_tod(); } + DECLARE_WRITE_LINE_MEMBER( tod_w ) { if(state) clock_tod(); } /* serial counter */ - UINT8 cnt_r() { return m_cnt; } + DECLARE_READ_LINE_MEMBER( cnt_r ) { return m_cnt; } void cnt_w(UINT8 state); DECLARE_WRITE_LINE_MEMBER( cnt_w ) { cnt_w(state); } /* serial port */ - UINT8 sp_r() { return m_sp; } - void sp_w(UINT8 state) { m_sp = state; } - DECLARE_WRITE_LINE_MEMBER( sp_w ) { sp_w(state); } + DECLARE_READ_LINE_MEMBER( sp_r ) { return m_sp; } + DECLARE_WRITE_LINE_MEMBER( sp_w ) { m_sp = state; } /* flag */ void flag_w(UINT8 state); + DECLARE_WRITE_LINE_MEMBER( flag_w ) { flag_w(state); } /* port mask */ void set_port_mask_value(int port, int data); protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); virtual void device_reset(); virtual void device_post_load() { } @@ -186,19 +176,22 @@ private: struct cia_port { + public: UINT8 m_ddr; UINT8 m_latch; UINT8 m_in; UINT8 m_out; - devcb_resolved_read8 m_read; - devcb_resolved_write8 m_write; UINT8 m_mask_value; /* in READ operation the value can be forced by a extern electric circuit */ }; - devcb_resolved_write_line m_out_irq_func; - devcb_resolved_write_line m_out_pc_func; - devcb_resolved_write_line m_out_cnt_func; - devcb_resolved_write_line m_out_sp_func; + devcb2_write_line m_write_irq; + devcb2_write_line m_write_pc; + devcb2_write_line m_write_cnt; + devcb2_write_line m_write_sp; + devcb2_read8 m_read_pa; + devcb2_write8 m_write_pa; + devcb2_read8 m_read_pb; + devcb2_write8 m_write_pb; cia_port m_port[2]; cia_timer m_timer[2]; @@ -255,10 +248,10 @@ public: // device type definition -extern const device_type LEGACY_MOS6526R1; -extern const device_type LEGACY_MOS6526R2; -extern const device_type LEGACY_MOS8520; -extern const device_type LEGACY_MOS5710; +extern const ATTR_DEPRECATED device_type LEGACY_MOS6526R1; +extern const ATTR_DEPRECATED device_type LEGACY_MOS6526R2; +extern const ATTR_DEPRECATED device_type LEGACY_MOS8520; +extern const ATTR_DEPRECATED device_type LEGACY_MOS5710; @@ -266,28 +259,6 @@ extern const device_type LEGACY_MOS5710; FUNCTION PROTOTYPES ***************************************************************************/ -/* register access */ -DECLARE_READ8_DEVICE_HANDLER( mos6526_r ); -DECLARE_WRITE8_DEVICE_HANDLER( mos6526_w ); - -/* port access */ -DECLARE_READ8_DEVICE_HANDLER( mos6526_pa_r ); -DECLARE_READ8_DEVICE_HANDLER( mos6526_pb_r ); - -/* interrupt request */ -READ_LINE_DEVICE_HANDLER( mos6526_irq_r ); - -/* time of day clock */ -WRITE_LINE_DEVICE_HANDLER( mos6526_tod_w ); - -/* serial counter */ -READ_LINE_DEVICE_HANDLER( mos6526_cnt_r ); -WRITE_LINE_DEVICE_HANDLER( mos6526_cnt_w ); - -/* serial port */ -READ_LINE_DEVICE_HANDLER( mos6526_sp_r ); -WRITE_LINE_DEVICE_HANDLER( mos6526_sp_w ); - /* port mask */ void cia_set_port_mask_value(device_t *device, int port, int data); diff --git a/src/emu/machine/amigafdc.c b/src/emu/machine/amigafdc.c index 8895e3fdd3f..2349a3b7ce0 100644 --- a/src/emu/machine/amigafdc.c +++ b/src/emu/machine/amigafdc.c @@ -1,6 +1,6 @@ // license:BSD-3-Clause // copyright-holders:Olivier Galibert -/****************************************************f*********************** +/*************************************************************************** Amiga floppy disk controller emulation @@ -19,12 +19,15 @@ FLOPPY_FORMATS_MEMBER( amiga_fdc::floppy_formats ) FLOPPY_FORMATS_END amiga_fdc::amiga_fdc(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, AMIGA_FDC, "Amiga FDC", tag, owner, clock, "amiga_fdc", __FILE__) + device_t(mconfig, AMIGA_FDC, "Amiga FDC", tag, owner, clock, "amiga_fdc", __FILE__), + m_write_index(*this) { } void amiga_fdc::device_start() { + m_write_index.resolve_safe(); + static const char *names[] = { "0", "1", "2", "3" }; for(int i=0; i != 4; i++) { floppy_connector *con = subdevice(names[i]); @@ -415,8 +418,7 @@ UINT8 amiga_fdc::ciaapra_r() void amiga_fdc::index_callback(floppy_image_device *floppy, int state) { /* Issue a index pulse when a disk revolution completes */ - legacy_mos6526_device *cia = machine().device("cia_1"); - cia->flag_w(!state); + m_write_index(!state); } void amiga_fdc::pll_t::set_clock(attotime period) diff --git a/src/emu/machine/amigafdc.h b/src/emu/machine/amigafdc.h index f4f2c775651..2d442c5a043 100644 --- a/src/emu/machine/amigafdc.h +++ b/src/emu/machine/amigafdc.h @@ -4,13 +4,15 @@ #include "emu.h" #include "imagedev/floppy.h" -#define MCFG_AMIGA_FDC_ADD(_tag, _clock) \ - MCFG_DEVICE_ADD(_tag, AMIGA_FDC, _clock) +#define MCFG_AMIGA_FDC_INDEX_CALLBACK(_write) \ + devcb = &amiga_fdc::set_index_wr_callback(*device, DEVCB2_##_write); class amiga_fdc : public device_t { public: amiga_fdc(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + template static devcb2_base &set_index_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_index.set_callback(object); } + DECLARE_WRITE8_MEMBER(ciaaprb_w); UINT8 ciaapra_r(); @@ -73,6 +75,8 @@ private: pll_t pll; }; + devcb2_write_line m_write_index; + floppy_image_device *floppy; floppy_image_device *floppy_devices[4]; diff --git a/src/mame/drivers/alg.c b/src/mame/drivers/alg.c index f44f0ddfec1..6e73eb499da 100644 --- a/src/mame/drivers/alg.c +++ b/src/mame/drivers/alg.c @@ -413,30 +413,6 @@ INPUT_PORTS_END * *************************************/ -static const legacy_mos6526_interface cia_0_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_0_irq), /* irq_func */ - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(alg_state,alg_cia_0_porta_r), - DEVCB_DRIVER_MEMBER(alg_state,alg_cia_0_porta_w), /* port A */ - DEVCB_DRIVER_MEMBER(alg_state,alg_cia_0_portb_r), - DEVCB_DRIVER_MEMBER(alg_state,alg_cia_0_portb_w) /* port B */ -}; - -static const legacy_mos6526_interface cia_1_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_1_irq), /* irq_func */ - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(alg_state,alg_cia_1_porta_r), - DEVCB_DRIVER_MEMBER(alg_state,alg_cia_1_porta_w), /* port A */ - DEVCB_NULL, - DEVCB_NULL /* port B */ -}; - static MACHINE_CONFIG_START( alg_r1, alg_state ) /* basic machine hardware */ @@ -477,11 +453,20 @@ static MACHINE_CONFIG_START( alg_r1, alg_state ) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) /* cia */ - MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_0_intf) - MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_1_intf) + MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq)) + MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(alg_state,alg_cia_0_porta_r)) + MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(alg_state,alg_cia_0_porta_w)) + MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(alg_state,alg_cia_0_portb_r)) + MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(alg_state,alg_cia_0_portb_w)) + MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq)) + MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(alg_state,alg_cia_1_porta_r)) + MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(alg_state,alg_cia_1_porta_w)) /* fdc */ - MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK) + MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK) + MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/arcadia.c b/src/mame/drivers/arcadia.c index d52efc0f36d..2317b0c312c 100644 --- a/src/mame/drivers/arcadia.c +++ b/src/mame/drivers/arcadia.c @@ -302,30 +302,6 @@ INPUT_PORTS_END * *************************************/ -static const legacy_mos6526_interface cia_0_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_0_irq), /* irq_func */ - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_INPUT_PORT("CIA0PORTA"), - DEVCB_DRIVER_MEMBER(arcadia_amiga_state,arcadia_cia_0_porta_w), /* port A */ - DEVCB_INPUT_PORT("CIA0PORTB"), - DEVCB_DRIVER_MEMBER(arcadia_amiga_state,arcadia_cia_0_portb_w) /* port B */ -}; - -static const legacy_mos6526_interface cia_1_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_1_irq), /* irq_func */ - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL -}; - static MACHINE_CONFIG_START( arcadia, arcadia_amiga_state ) /* basic machine hardware */ @@ -361,11 +337,18 @@ static MACHINE_CONFIG_START( arcadia, arcadia_amiga_state ) MCFG_SOUND_ROUTE(3, "lspeaker", 0.50) /* cia */ - MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_0_intf) - MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_1_intf) + MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq)) + MCFG_MOS6526_PA_INPUT_CALLBACK(IOPORT("CIA0PORTA")) + MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(arcadia_amiga_state,arcadia_cia_0_porta_w)) + MCFG_MOS6526_PB_INPUT_CALLBACK(IOPORT("CIA0PORTB")) + MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(arcadia_amiga_state,arcadia_cia_0_portb_w)) + MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq)) /* fdc */ - MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK) + MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK) + MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w)) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( argh, arcadia ) diff --git a/src/mame/drivers/cd32.c b/src/mame/drivers/cd32.c index 28771145343..e63dce5964a 100644 --- a/src/mame/drivers/cd32.c +++ b/src/mame/drivers/cd32.c @@ -89,7 +89,7 @@ WRITE8_MEMBER(cd32_state::cd32_cia_0_porta_w) /* bit 2 = Power Led on Amiga */ set_led_status(machine(), 0, (data & 2) ? 0 : 1); - handle_cd32_joystick_cia(machine(), data, mos6526_r(m_cia_0, space, 2)); + handle_cd32_joystick_cia(machine(), data, m_cia_0->read(space, 2)); } /************************************* @@ -736,30 +736,6 @@ INPUT_PORTS_END * *************************************/ -static const legacy_mos6526_interface cia_0_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_0_irq), /* irq_func */ - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_INPUT_PORT("CIA0PORTA"), - DEVCB_DRIVER_MEMBER(cd32_state,cd32_cia_0_porta_w), /* port A */ - DEVCB_DRIVER_MEMBER(cd32_state,cd32_cia_0_portb_r), - DEVCB_DRIVER_MEMBER(cd32_state,cd32_cia_0_portb_w) /* port B */ -}; - -static const legacy_mos6526_interface cia_1_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_1_irq), /* irq_func */ - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL -}; - #define NVRAM_SIZE 1024 #define NVRAM_PAGE_SIZE 16 /* max size of one write request */ @@ -803,13 +779,20 @@ static MACHINE_CONFIG_START( cd32base, cd32_state ) /* cia */ // these are setup differently on other amiga drivers (needed for floppy to work) which is correct / why? - MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68EC020_PAL_CLOCK / 10, 0, cia_0_intf) - MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68EC020_PAL_CLOCK / 10, 0, cia_1_intf) + MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68EC020_PAL_CLOCK / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq)) + MCFG_MOS6526_PA_INPUT_CALLBACK(IOPORT("CIA0PORTA")) + MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(cd32_state,cd32_cia_0_porta_w)) + MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(cd32_state,cd32_cia_0_portb_r)) + MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(cd32_state,cd32_cia_0_portb_w)) + MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68EC020_PAL_CLOCK / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq)) MCFG_MICROTOUCH_ADD( "microtouch", WRITE8(cd32_state, microtouch_tx) ) /* fdc */ - MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK) + MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK) + MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w)) MACHINE_CONFIG_END struct cdrom_interface cd32_cdrom = diff --git a/src/mame/drivers/mquake.c b/src/mame/drivers/mquake.c index 93358441ff6..1784448c805 100644 --- a/src/mame/drivers/mquake.c +++ b/src/mame/drivers/mquake.c @@ -353,30 +353,6 @@ MACHINE_RESET_MEMBER(mquake_state,mquake) * *************************************/ -static const legacy_mos6526_interface cia_0_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_0_irq), /* irq_func */ - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_INPUT_PORT("CIA0PORTA"), - DEVCB_DRIVER_MEMBER(mquake_state,mquake_cia_0_porta_w), /* port A */ - DEVCB_DRIVER_MEMBER(mquake_state,mquake_cia_0_portb_r), - DEVCB_DRIVER_MEMBER(mquake_state,mquake_cia_0_portb_w) /* port B */ -}; - -static const legacy_mos6526_interface cia_1_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_1_irq), /* irq_func */ - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL -}; - static MACHINE_CONFIG_START( mquake, mquake_state ) /* basic machine hardware */ @@ -418,11 +394,18 @@ static MACHINE_CONFIG_START( mquake, mquake_state ) MCFG_SOUND_ROUTE(0, "rspeaker", 0.50) /* cia */ - MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_0_intf) - MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_1_intf) + MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq)) + MCFG_MOS6526_PA_INPUT_CALLBACK(IOPORT("CIA0PORTA")) + MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(mquake_state,mquake_cia_0_porta_w)) + MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(mquake_state,mquake_cia_0_portb_r)) + MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(mquake_state,mquake_cia_0_portb_w)) + MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq)) /* fdc */ - MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK) + MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK) + MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/upscope.c b/src/mame/drivers/upscope.c index 054428ed6e3..ae4adf50aaf 100644 --- a/src/mame/drivers/upscope.c +++ b/src/mame/drivers/upscope.c @@ -283,30 +283,6 @@ INPUT_PORTS_END * *************************************/ -static const legacy_mos6526_interface cia_0_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_0_irq), /* irq_func */ - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(upscope_state,upscope_cia_0_porta_w), /* port A */ - DEVCB_DRIVER_MEMBER(upscope_state,upscope_cia_0_portb_r), - DEVCB_DRIVER_MEMBER(upscope_state,upscope_cia_0_portb_w) /* port B */ -}; - -static const legacy_mos6526_interface cia_1_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_1_irq), /* irq_func */ - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(upscope_state,upscope_cia_1_porta_r), - DEVCB_DRIVER_MEMBER(upscope_state,upscope_cia_1_porta_w), /* port A */ - DEVCB_NULL, - DEVCB_NULL -}; - static MACHINE_CONFIG_START( upscope, upscope_state ) /* basic machine hardware */ @@ -342,11 +318,19 @@ static MACHINE_CONFIG_START( upscope, upscope_state ) MCFG_SOUND_ROUTE(3, "rspeaker", 0.50) /* cia */ - MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_0_intf) - MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_1_intf) + MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq)) + MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(upscope_state,upscope_cia_0_porta_w)) + MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(upscope_state,upscope_cia_0_portb_r)) + MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(upscope_state,upscope_cia_0_portb_w)) + MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq)) + MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(upscope_state,upscope_cia_1_porta_r)) + MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(upscope_state,upscope_cia_1_porta_w)) /* fdc */ - MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK) + MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK) + MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w)) MACHINE_CONFIG_END diff --git a/src/mame/includes/amiga.h b/src/mame/includes/amiga.h index 2cbfb9c5bcf..825257bae13 100644 --- a/src/mame/includes/amiga.h +++ b/src/mame/includes/amiga.h @@ -498,7 +498,6 @@ public: DECLARE_WRITE_LINE_MEMBER(amiga_cia_0_irq); DECLARE_WRITE_LINE_MEMBER(amiga_cia_1_irq); DECLARE_READ8_MEMBER( amiga_cia_0_portA_r ); - DECLARE_READ8_MEMBER( amiga_cia_0_cdtv_portA_r ); DECLARE_WRITE8_MEMBER( amiga_cia_0_portA_w ); DECLARE_READ16_MEMBER( amiga_clock_r ); diff --git a/src/mame/machine/amiga.c b/src/mame/machine/amiga.c index 8d10cddd850..59be13a7325 100644 --- a/src/mame/machine/amiga.c +++ b/src/mame/machine/amiga.c @@ -340,7 +340,8 @@ TIMER_CALLBACK_MEMBER(amiga_state::scanline_callback) amiga_custom_w(m_maincpu->space(AS_PROGRAM), REG_INTREQ, 0x8000 | INTENA_VERTB, 0xffff); /* clock the first CIA TOD */ - mos6526_tod_w(m_cia_0, 1); + m_cia_0->tod_w(1); + m_cia_0->tod_w(0); /* call the system-specific callback */ if (m_intf->scanline0_callback != NULL) @@ -348,7 +349,8 @@ TIMER_CALLBACK_MEMBER(amiga_state::scanline_callback) } /* on every scanline, clock the second CIA TOD */ - mos6526_tod_w(m_cia_1, 1); + m_cia_1->tod_w(1); + m_cia_1->tod_w(0); /* render up to this scanline */ if (!m_screen->update_partial(scanline)) @@ -1044,7 +1046,7 @@ READ16_MEMBER( amiga_state::amiga_cia_r ) amiga_state *state = space.machine().driver_data(); UINT8 data; int shift; - device_t *cia; + legacy_mos6526_device *cia; /* offsets 0000-07ff reference CIA B, and are accessed via the MSB */ if ((offset & 0x0800) == 0) @@ -1061,7 +1063,7 @@ READ16_MEMBER( amiga_state::amiga_cia_r ) } /* handle the reads */ - data = mos6526_r(cia, space, offset >> 7); + data = cia->read(space, offset >> 7); if (LOG_CIA) logerror("%06x:cia_%c_read(%03x) = %04x & %04x\n", space.device().safe_pc(), 'A' + ((~offset & 0x0800) >> 11), offset * 2, data << shift, mem_mask); @@ -1080,7 +1082,7 @@ READ16_MEMBER( amiga_state::amiga_cia_r ) WRITE16_MEMBER( amiga_state::amiga_cia_w ) { amiga_state *state = space.machine().driver_data(); - device_t *cia; + legacy_mos6526_device *cia; if (LOG_CIA) logerror("%06x:cia_%c_write(%03x) = %04x & %04x\n", space.device().safe_pc(), 'A' + ((~offset & 0x0800) >> 11), offset * 2, data, mem_mask); @@ -1104,7 +1106,7 @@ WRITE16_MEMBER( amiga_state::amiga_cia_w ) } /* handle the writes */ - mos6526_w(cia, space, offset >> 7, (UINT8) data); + cia->write(space, offset >> 7, (UINT8) data); } @@ -1458,8 +1460,8 @@ WRITE16_MEMBER( amiga_state::amiga_custom_w ) CUSTOM_REG(REG_SERDATR) &= ~0x8000; data = (data & 0x8000) ? (CUSTOM_REG(offset) | (data & 0x7fff)) : (CUSTOM_REG(offset) & ~(data & 0x7fff)); - if ( mos6526_irq_r( state->m_cia_0 ) ) data |= INTENA_PORTS; - if ( mos6526_irq_r( state->m_cia_1 ) ) data |= INTENA_EXTER; + if ( state->m_cia_0->irq_r() ) data |= INTENA_PORTS; + if ( state->m_cia_1->irq_r() ) data |= INTENA_EXTER; CUSTOM_REG(offset) = data; if ( temp & 0x8000 ) /* if we're generating irq's, delay a bit */ diff --git a/src/mess/drivers/amiga.c b/src/mess/drivers/amiga.c index 43e118fed63..5fb0f811ad4 100644 --- a/src/mess/drivers/amiga.c +++ b/src/mess/drivers/amiga.c @@ -390,12 +390,10 @@ WRITE32_MEMBER(a1200_state::aga_overlay_w) WRITE8_MEMBER(a1200_state::ami1200_cia_0_porta_w) { - device_t *device = machine().device("cia_0"); - /* bit 2 = Power Led on Amiga */ output_set_value("audio_led", !BIT(data, 1)); - handle_cd32_joystick_cia(this, data, mos6526_r(device, space, 2)); + handle_cd32_joystick_cia(this, data, m_cia_0->read(space, 2)); } /************************************* @@ -504,66 +502,6 @@ MACHINE_RESET_MEMBER(cdtv_state,cdtv) MACHINE_RESET_CALL_LEGACY( amigacd ); } -static const legacy_mos6526_interface cia_0_ntsc_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state, amiga_cia_0_irq), /* irq_func */ - DEVCB_DEVICE_LINE_MEMBER("centronics", centronics_device, write_strobe), /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_0_portA_r), - DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_0_portA_w), /* port A */ - DEVCB_NULL, - DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write) /* port B */ -}; - -static const legacy_mos6526_interface cia_0_pal_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state, amiga_cia_0_irq), /* irq_func */ - DEVCB_DEVICE_LINE_MEMBER("centronics", centronics_device, write_strobe), /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_0_portA_r), - DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_0_portA_w), /* port A */ - DEVCB_NULL, - DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write) /* port B */ -}; - -static const legacy_mos6526_interface cia_1_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state, amiga_cia_1_irq), /* irq_func */ - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_1_porta_r), - DEVCB_NULL, /* port A */ - DEVCB_NULL, - DEVCB_DEVICE_MEMBER("fdc", amiga_fdc, ciaaprb_w) /* port B */ -}; - -static const legacy_mos6526_interface cia_0_cdtv_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state, amiga_cia_0_irq), /* irq_func */ - DEVCB_DEVICE_LINE_MEMBER("centronics", centronics_device, write_strobe), /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_0_cdtv_portA_r), - DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_0_portA_w), /* port A */ - DEVCB_NULL, - DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write) /* port B */ -}; - -static const legacy_mos6526_interface cia_1_cdtv_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state, amiga_cia_1_irq), /* irq_func */ - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_1_porta_r), - DEVCB_NULL, /* port A */ - DEVCB_NULL, - DEVCB_NULL /* port B */ -}; - static const tpi6525_interface cdtv_tpi_intf = { DEVCB_DRIVER_LINE_MEMBER(amiga_state, amigacd_tpi6525_irq), @@ -673,11 +611,21 @@ static MACHINE_CONFIG_START( ntsc, amiga_state ) MCFG_SOUND_ROUTE(3, "lspeaker", 0.50) /* cia */ - MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_NTSC_CLOCK / 10, 60, cia_0_ntsc_intf) - MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_1_intf) + MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10) + MCFG_MOS6526_TOD(60) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq)) + MCFG_MOS6526_PC_CALLBACK(DEVWRITELINE("centronics", centronics_device, write_strobe)) + MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(amiga_state, amiga_cia_0_portA_r)) + MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(amiga_state, amiga_cia_0_portA_w)) + MCFG_MOS6526_PB_OUTPUT_CALLBACK(DEVWRITE8("cent_data_out", output_latch_device, write)) + MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq)) + MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(amiga_state, amiga_cia_1_porta_r)) + MCFG_MOS6526_PB_OUTPUT_CALLBACK(DEVWRITE8("fdc", amiga_fdc, ciaaprb_w)) /* fdc */ - MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK) + MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK) + MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w)) MCFG_FLOPPY_DRIVE_ADD("fdc:0", amiga_floppies, "35dd", amiga_fdc::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:1", amiga_floppies, 0, amiga_fdc::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:2", amiga_floppies, 0, amiga_fdc::floppy_formats) @@ -694,6 +642,9 @@ static MACHINE_CONFIG_DERIVED( a1000ntsc, ntsc ) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( a500ntsc, ntsc ) + MCFG_DEVICE_MODIFY("cia_0") + MCFG_MOS6526_TOD(0) + MCFG_FRAGMENT_ADD(amiga_cartslot) MCFG_SOFTWARE_LIST_ADD("flop_misc","amiga_flop") @@ -735,15 +686,8 @@ static MACHINE_CONFIG_DERIVED_CLASS( cdtv, ntsc, cdtv_state) MCFG_TPI6525_ADD("tpi6525", cdtv_tpi_intf) - /* cia */ - MCFG_DEVICE_REMOVE("cia_0") - MCFG_DEVICE_REMOVE("cia_1") - MCFG_LEGACY_MOS8520_ADD("cia_0", CDTV_CLOCK_X1 / 4 / 40, 0, cia_0_cdtv_intf) - MCFG_LEGACY_MOS8520_ADD("cia_1", CDTV_CLOCK_X1 / 4 / 40, 0, cia_1_cdtv_intf) - - /* fdc */ - MCFG_DEVICE_MODIFY("fdc") - MCFG_DEVICE_CLOCK(CDTV_CLOCK_X1 / 4) + MCFG_DEVICE_MODIFY("cia_0") + MCFG_MOS6526_TOD(0) // connected to vsync MACHINE_CONFIG_END @@ -762,10 +706,11 @@ static MACHINE_CONFIG_DERIVED( pal, ntsc ) // MCFG_SCREEN_VISIBLE_AREA(214, (228*4)-1, 34, 312-1) /* cia */ - MCFG_DEVICE_REMOVE("cia_0") - MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_PAL_CLOCK / 10, 50, cia_0_pal_intf) - MCFG_DEVICE_REMOVE("cia_1") - MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_PAL_CLOCK / 10, 0, cia_1_intf) + MCFG_DEVICE_MODIFY("cia_0") + MCFG_DEVICE_CLOCK(AMIGA_68000_PAL_CLOCK / 10) + MCFG_MOS6526_TOD(50) + MCFG_DEVICE_MODIFY("cia_1") + MCFG_DEVICE_CLOCK(AMIGA_68000_PAL_CLOCK / 10) /* fdc */ MCFG_DEVICE_MODIFY("fdc") @@ -773,6 +718,9 @@ static MACHINE_CONFIG_DERIVED( pal, ntsc ) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( a500p, pal ) + MCFG_DEVICE_MODIFY("cia_0") + MCFG_MOS6526_TOD(0) // connected to vsync + MCFG_FRAGMENT_ADD(amiga_cartslot) MCFG_SOFTWARE_LIST_ADD("flop_misc","amiga_flop") @@ -882,11 +830,20 @@ static MACHINE_CONFIG_START( a1200n, a1200_state ) MCFG_SOUND_ROUTE(3, "lspeaker", 0.50) /* cia */ - MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68EC020_NTSC_CLOCK /2 / 10, 60, cia_0_ntsc_intf) - MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68EC020_NTSC_CLOCK /2 / 10, 0, cia_1_intf) + MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68EC020_NTSC_CLOCK /2 / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq)) + MCFG_MOS6526_PC_CALLBACK(DEVWRITELINE("centronics", centronics_device, write_strobe)) + MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(amiga_state, amiga_cia_0_portA_r)) + MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(amiga_state, amiga_cia_0_portA_w)) + MCFG_MOS6526_PB_OUTPUT_CALLBACK(DEVWRITE8("cent_data_out", output_latch_device, write)) + MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68EC020_NTSC_CLOCK /2 / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq)) + MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(amiga_state, amiga_cia_1_porta_r)) + MCFG_MOS6526_PB_OUTPUT_CALLBACK(DEVWRITE8("fdc", amiga_fdc, ciaaprb_w)) /* fdc */ - MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68EC020_NTSC_CLOCK / 2) + MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68EC020_NTSC_CLOCK / 2) + MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w)) MCFG_FLOPPY_DRIVE_ADD("fdc:0", amiga_floppies, "35dd", amiga_fdc::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:1", amiga_floppies, 0, amiga_fdc::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:2", amiga_floppies, 0, amiga_fdc::floppy_formats) @@ -992,11 +949,21 @@ static MACHINE_CONFIG_START( a3000n, amiga_state ) MCFG_SOUND_ROUTE(3, "lspeaker", 0.50) /* cia */ - MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_NTSC_CLOCK / 10, 60, cia_0_ntsc_intf) - MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_1_intf) + MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10) + MCFG_MOS6526_TOD(60) // jumper selectable TICK or VSYNC + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq)) + MCFG_MOS6526_PC_CALLBACK(DEVWRITELINE("centronics", centronics_device, write_strobe)) + MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(amiga_state, amiga_cia_0_portA_r)) + MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(amiga_state, amiga_cia_0_portA_w)) + MCFG_MOS6526_PB_OUTPUT_CALLBACK(DEVWRITE8("cent_data_out", output_latch_device, write)) + MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10) + MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq)) + MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(amiga_state, amiga_cia_1_porta_r)) + MCFG_MOS6526_PB_OUTPUT_CALLBACK(DEVWRITE8("fdc", amiga_fdc, ciaaprb_w)) /* fdc */ - MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK) + MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK) + MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w)) MCFG_FLOPPY_DRIVE_ADD("fdc:0", amiga_floppies, "35dd", amiga_fdc::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:1", amiga_floppies, 0, amiga_fdc::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:2", amiga_floppies, 0, amiga_fdc::floppy_formats) @@ -1021,10 +988,11 @@ static MACHINE_CONFIG_DERIVED( a3000, a3000n ) // MCFG_SCREEN_VISIBLE_AREA(214, (228*4)-1, 34, 312-1) /* cia */ - MCFG_DEVICE_REMOVE("cia_0") - MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_PAL_CLOCK / 10, 50, cia_0_pal_intf) - MCFG_DEVICE_REMOVE("cia_1") - MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_PAL_CLOCK / 10, 0, cia_1_intf) + MCFG_DEVICE_MODIFY("cia_0") + MCFG_DEVICE_CLOCK(AMIGA_68000_PAL_CLOCK / 10) + MCFG_MOS6526_TOD(50) // jumper selectable TICK or VSYNC + MCFG_DEVICE_MODIFY("cia_1") + MCFG_DEVICE_CLOCK(AMIGA_68000_PAL_CLOCK / 10) /* fdc */ MCFG_DEVICE_MODIFY("fdc") @@ -1046,11 +1014,6 @@ READ8_MEMBER( amiga_state::amiga_cia_0_portA_r ) } -READ8_MEMBER( amiga_state::amiga_cia_0_cdtv_portA_r ) -{ - return space.machine().root_device().ioport("CIA0PORTA")->read() & 0xc0; /* Gameport 1 and 0 buttons */ -} - WRITE8_MEMBER( amiga_state::amiga_cia_0_portA_w ) {