diff --git a/src/mess/drivers/c65.c b/src/mess/drivers/c65.c index b4151441d8d..180acf22c53 100644 --- a/src/mess/drivers/c65.c +++ b/src/mess/drivers/c65.c @@ -53,7 +53,7 @@ bus serial (available in all modes), a Fast and a Burst serial bus #include "emu.h" #include "cpu/m6502/m4510.h" #include "sound/mos6581.h" -#include "machine/6526cia.h" +#include "machine/mos6526.h" #include "machine/cbmipt.h" #include "video/vic4567.h" #include "includes/cbm.h" @@ -204,7 +204,7 @@ PALETTE_INIT_MEMBER(c65_state,c65) int c65_state::c64_paddle_read( device_t *device, address_space &space, int which ) { int pot1 = 0xff, pot2 = 0xff, pot3 = 0xff, pot4 = 0xff, temp; - UINT8 cia0porta = mos6526_pa_r(machine().device("cia_0"), space, 0); + UINT8 cia0porta = machine().device("cia_0")->pa_r(space, 0); int controller1 = ioport("CTRLSEL")->read() & 0x07; int controller2 = ioport("CTRLSEL")->read() & 0x70; /* Notice that only a single input is defined for Mouse & Lightpen in both ports */ @@ -434,8 +434,12 @@ static MACHINE_CONFIG_START( c65, c65_state ) MCFG_QUICKLOAD_ADD("quickload", c65_state, cbm_c65, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) /* cia */ - MCFG_LEGACY_MOS6526R1_ADD("cia_0", 3500000, 60, c65_cia0) - MCFG_LEGACY_MOS6526R1_ADD("cia_1", 3500000, 60, c65_cia1) + MCFG_MOS6526_ADD("cia_0", 3500000, 60, WRITELINE(c65_state, c65_cia0_interrupt)) + MCFG_MOS6526_PORT_A_CALLBACKS(READ8(c65_state, c65_cia0_port_a_r), NULL) + MCFG_MOS6526_PORT_B_CALLBACKS(READ8(c65_state, c65_cia0_port_b_r), WRITE8(c65_state, c65_cia0_port_b_w), NULL) + + MCFG_MOS6526_ADD("cia_1", 3500000, 60, WRITELINE(c65_state, c65_cia1_interrupt)) + MCFG_MOS6526_PORT_A_CALLBACKS(READ8(c65_state, c65_cia1_port_a_r), WRITE8(c65_state, c65_cia1_port_a_w)) /* floppy from serial bus */ MCFG_CBM_IEC_ADD(NULL) @@ -465,8 +469,12 @@ static MACHINE_CONFIG_DERIVED( c65pal, c65 ) /* cia */ MCFG_DEVICE_REMOVE("cia_0") MCFG_DEVICE_REMOVE("cia_1") - MCFG_LEGACY_MOS6526R1_ADD("cia_0", 3500000, 50, c65_cia0) - MCFG_LEGACY_MOS6526R1_ADD("cia_1", 3500000, 50, c65_cia1) + MCFG_MOS6526_ADD("cia_0", 3500000, 50, WRITELINE(c65_state, c65_cia0_interrupt)) + MCFG_MOS6526_PORT_A_CALLBACKS(READ8(c65_state, c65_cia0_port_a_r), NULL) + MCFG_MOS6526_PORT_B_CALLBACKS(READ8(c65_state, c65_cia0_port_b_r), WRITE8(c65_state, c65_cia0_port_b_w), NULL) + + MCFG_MOS6526_ADD("cia_1", 3500000, 50, WRITELINE(c65_state, c65_cia1_interrupt)) + MCFG_MOS6526_PORT_A_CALLBACKS(READ8(c65_state, c65_cia1_port_a_r), WRITE8(c65_state, c65_cia1_port_a_w)) MACHINE_CONFIG_END diff --git a/src/mess/drivers/sbc6510.c b/src/mess/drivers/sbc6510.c index 98ff77071ac..e506a0e6b95 100644 --- a/src/mess/drivers/sbc6510.c +++ b/src/mess/drivers/sbc6510.c @@ -50,7 +50,7 @@ ToDo: #include "emu.h" #include "cpu/m6502/m6510.h" -#include "machine/6526cia.h" +#include "machine/mos6526.h" #include "sound/ay8910.h" #include "machine/terminal.h" @@ -60,8 +60,8 @@ class sbc6510_state : public driver_device public: sbc6510_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_terminal(*this, TERMINAL_TAG) , - m_maincpu(*this, "maincpu") { } + m_maincpu(*this, "maincpu") , + m_terminal(*this, TERMINAL_TAG) { } DECLARE_READ8_MEMBER(a2_r); DECLARE_WRITE8_MEMBER(a2_w); @@ -72,13 +72,13 @@ public: UINT8 m_term_data; UINT8 m_key_row; UINT8 m_2; - required_device m_terminal; virtual void machine_start(); virtual void machine_reset(); protected: ioport_port *m_io_port[8]; required_device m_maincpu; + required_device m_terminal; }; @@ -87,9 +87,9 @@ static ADDRESS_MAP_START( sbc6510_mem, AS_PROGRAM, 8, sbc6510_state ) AM_RANGE(0x0000, 0x0001) AM_RAM AM_RANGE(0x0002, 0x0002) AM_READWRITE(a2_r,a2_w) AM_RANGE(0x0003, 0xdfff) AM_RAM - AM_RANGE(0xE000, 0xE00F) AM_MIRROR(0x1f0) AM_DEVREADWRITE_LEGACY("cia6526", mos6526_r, mos6526_w) - AM_RANGE(0xE800, 0xE800) AM_MIRROR(0x1ff) AM_DEVWRITE("ay8910", ay8910_device, address_w) - AM_RANGE(0xEA00, 0xEA00) AM_MIRROR(0x1ff) AM_DEVREADWRITE("ay8910", ay8910_device, data_r, data_w) + AM_RANGE(0xe000, 0xe00f) AM_MIRROR(0x1f0) AM_DEVREADWRITE("cia6526", mos6526_device, read, write) + AM_RANGE(0xe800, 0xe800) AM_MIRROR(0x1ff) AM_DEVWRITE("ay8910", ay8910_device, address_w) + AM_RANGE(0xea00, 0xea00) AM_MIRROR(0x1ff) AM_DEVREADWRITE("ay8910", ay8910_device, data_r, data_w) AM_RANGE(0xf000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -255,18 +255,6 @@ WRITE8_MEMBER( sbc6510_state::key_w ) m_key_row = data; } -const legacy_mos6526_interface cia_intf = -{ - DEVCB_CPU_INPUT_LINE("maincpu", M6510_IRQ_LINE), // irq - DEVCB_NULL, // pc (timer related) not connected - DEVCB_NULL, // cnt (serial related) not connected - DEVCB_NULL, // sp (serial related) not connected - DEVCB_NULL, // port A in - DEVCB_DRIVER_MEMBER(sbc6510_state, key_w), // port A out - DEVCB_DRIVER_MEMBER(sbc6510_state, key_r), // port B in - DEVCB_NULL // port B out -}; - static MACHINE_CONFIG_START( sbc6510, sbc6510_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",M6510, XTAL_1MHz) @@ -282,7 +270,9 @@ static MACHINE_CONFIG_START( sbc6510, sbc6510_state ) MCFG_SOUND_CONFIG(sbc6510_ay_interface) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) - MCFG_LEGACY_MOS6526R1_ADD("cia6526", XTAL_1MHz, 50, cia_intf) + MCFG_MOS6526_ADD("cia6526", XTAL_1MHz, 50, INPUTLINE("maincpu", M6510_IRQ_LINE)) + MCFG_MOS6526_PORT_A_CALLBACKS(NULL, WRITE8(sbc6510_state, key_w)) + MCFG_MOS6526_PORT_B_CALLBACKS(READ8(sbc6510_state, key_r), NULL, NULL) MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mess/includes/c128.h b/src/mess/includes/c128.h index 1089afc0dd3..0018171ae9c 100644 --- a/src/mess/includes/c128.h +++ b/src/mess/includes/c128.h @@ -6,7 +6,6 @@ #include "emu.h" #include "machine/cbm_snqk.h" #include "cpu/m6502/m8502.h" -#include "machine/6526cia.h" #include "machine/c64exp.h" #include "machine/c64user.h" #include "machine/cbmiec.h" diff --git a/src/mess/includes/c65.h b/src/mess/includes/c65.h index f003c0432fb..dda96cf0bf5 100644 --- a/src/mess/includes/c65.h +++ b/src/mess/includes/c65.h @@ -7,7 +7,7 @@ #ifndef C65_H_ #define C65_H_ -#include "machine/6526cia.h" +#include "machine/mos6526.h" #include "machine/cbmiec.h" #include "imagedev/cartslot.h" #include "imagedev/snapquik.h" @@ -117,6 +117,7 @@ public: expansion_ram_t m_expansion_ram; int m_io_on; int m_io_dc00_on; + int m_cia0_irq, m_cia1_irq; DECLARE_DRIVER_INIT(c65); DECLARE_DRIVER_INIT(c65pal); @@ -181,10 +182,6 @@ public: required_device m_ram; }; -/*----------- defined in machine/c65.c -----------*/ -extern const legacy_mos6526_interface c65_cia0; -extern const legacy_mos6526_interface c65_cia1; - MACHINE_CONFIG_EXTERN( c64_cartslot ); #endif /* C65_H_ */ diff --git a/src/mess/machine/c65.c b/src/mess/machine/c65.c index 39010c55b79..8f2afea32f7 100644 --- a/src/mess/machine/c65.c +++ b/src/mess/machine/c65.c @@ -40,14 +40,11 @@ void c65_state::c65_nmi( ) { - device_t *cia_1 = machine().device("cia_1"); - int cia1irq = mos6526_irq_r(cia_1); - - if (m_nmilevel != (ioport("SPECIAL")->read() & 0x80) || cia1irq) /* KEY_RESTORE */ + if (m_nmilevel != (ioport("SPECIAL")->read() & 0x80) || m_cia1_irq) /* KEY_RESTORE */ { - m_maincpu->set_input_line(INPUT_LINE_NMI, (ioport("SPECIAL")->read() & 0x80) || cia1irq); + m_maincpu->set_input_line(INPUT_LINE_NMI, (ioport("SPECIAL")->read() & 0x80) || m_cia1_irq); - m_nmilevel = (ioport("SPECIAL")->read() & 0x80) || cia1irq; + m_nmilevel = (ioport("SPECIAL")->read() & 0x80) || m_cia1_irq; } } @@ -70,7 +67,7 @@ void c65_state::c65_nmi( ) READ8_MEMBER(c65_state::c65_cia0_port_a_r) { - UINT8 cia0portb = mos6526_pb_r(machine().device("cia_0"), space, 0); + UINT8 cia0portb = machine().device("cia_0")->pb_r(space, 0); return cbm_common_cia0_port_a_r(machine().device("cia_0"), cia0portb); } @@ -78,7 +75,7 @@ READ8_MEMBER(c65_state::c65_cia0_port_a_r) READ8_MEMBER(c65_state::c65_cia0_port_b_r) { UINT8 value = 0xff; - UINT8 cia0porta = mos6526_pa_r(machine().device("cia_0"), space, 0); + UINT8 cia0porta = machine().device("cia_0")->pa_r(space, 0); value &= cbm_common_cia0_port_b_r(machine().device("cia_0"), cia0porta); @@ -108,34 +105,22 @@ void c65_state::c65_irq( int level ) /* is this correct for c65 as well as c64? */ WRITE_LINE_MEMBER(c65_state::c65_cia0_interrupt) { + m_cia0_irq = state; c65_irq(state || m_vicirq); } /* is this correct for c65 as well as c64? */ WRITE_LINE_MEMBER(c65_state::c65_vic_interrupt) { - device_t *cia_0 = machine().device("cia_0"); #if 1 if (state != m_vicirq) { - c65_irq (state || mos6526_irq_r(cia_0)); + c65_irq (state || m_cia0_irq); m_vicirq = state; } #endif } -const legacy_mos6526_interface c65_cia0 = -{ - DEVCB_DRIVER_LINE_MEMBER(c65_state, c65_cia0_interrupt), - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(c65_state,c65_cia0_port_a_r), - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(c65_state,c65_cia0_port_b_r), - DEVCB_DRIVER_MEMBER(c65_state,c65_cia0_port_b_w) -}; - /* * CIA 1 - Port A * bit 7 serial bus data input @@ -185,21 +170,10 @@ WRITE8_MEMBER(c65_state::c65_cia1_port_a_w) WRITE_LINE_MEMBER(c65_state::c65_cia1_interrupt) { + m_cia1_irq = state; c65_nmi(); } -const legacy_mos6526_interface c65_cia1 = -{ - DEVCB_DRIVER_LINE_MEMBER(c65_state,c65_cia1_interrupt), - DEVCB_NULL, /* pc_func */ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(c65_state,c65_cia1_port_a_r), - DEVCB_DRIVER_MEMBER(c65_state,c65_cia1_port_a_w), - DEVCB_NULL, - DEVCB_NULL -}; - /*********************************************** Memory Handlers