diff --git a/src/emu/cpu/m6502/m4510.c b/src/emu/cpu/m6502/m4510.c index 733b53ae91c..3c5ae08ff94 100644 --- a/src/emu/cpu/m6502/m4510.c +++ b/src/emu/cpu/m6502/m4510.c @@ -153,8 +153,9 @@ struct _m4510_Regs { UINT8 ddr; UINT8 port; - m6510_port_read_func port_read; - m6510_port_write_func port_write; + + devcb_resolved_read8 in_port_func; + devcb_resolved_write8 out_port_func; }; INLINE m4510_Regs *get_safe_token(device_t *device) @@ -202,8 +203,6 @@ static CPU_INIT( m4510 ) cpustate->interrupt_inhibit = 0; cpustate->rdmem_id = default_rdmem_id; cpustate->wrmem_id = default_wrmem_id; - cpustate->port_read = NULL; - cpustate->port_write = NULL; cpustate->irq_callback = irqcallback; cpustate->device = device; cpustate->space = device->space(AS_PROGRAM); @@ -217,11 +216,8 @@ static CPU_INIT( m4510 ) if ( intf->write_indexed_func ) cpustate->wrmem_id = intf->write_indexed_func; - if ( intf->port_read_func ) - cpustate->port_read = intf->port_read_func; - - if ( intf->port_write_func ) - cpustate->port_write = intf->port_write_func; + devcb_resolve_read8(&cpustate->in_port_func, &intf->in_port_func, device); + devcb_resolve_write8(&cpustate->out_port_func, &intf->out_port_func, device); } } @@ -366,8 +362,7 @@ static READ8_HANDLER( m4510_read_0000 ) result = cpustate->ddr; break; case 0x0001: /* Data Port */ - if (cpustate->port_read) - result = cpustate->port_read(cpustate->device, 0); + result = devcb_call_read8(&cpustate->in_port_func, 0); result = (cpustate->ddr & cpustate->port) | (~cpustate->ddr & result); break; } @@ -388,8 +383,7 @@ static WRITE8_HANDLER( m4510_write_0000 ) break; } - if (cpustate->port_write) - cpustate->port_write(cpustate->device, 0, m4510_get_port(downcast(&space->device()))); + devcb_call_write8(&cpustate->out_port_func, 0, m4510_get_port(downcast(&space->device()))); } static ADDRESS_MAP_START(m4510_mem, AS_PROGRAM, 8) diff --git a/src/emu/cpu/m6502/m6502.c b/src/emu/cpu/m6502/m6502.c index e3928dfad68..a34833243cb 100644 --- a/src/emu/cpu/m6502/m6502.c +++ b/src/emu/cpu/m6502/m6502.c @@ -81,8 +81,9 @@ struct _m6502_Regs UINT8 ddr; UINT8 port; - m6510_port_read_func port_read; - m6510_port_write_func port_write; + + devcb_resolved_read8 in_port_func; + devcb_resolved_write8 out_port_func; }; INLINE m6502_Regs *get_safe_token(device_t *device) @@ -142,8 +143,6 @@ static void m6502_common_init(legacy_cpu_device *device, device_irq_callback irq cpustate->insn = insn; cpustate->rdmem_id = default_rdmem_id; cpustate->wrmem_id = default_wdmem_id; - cpustate->port_read = NULL; - cpustate->port_write = NULL; if ( intf ) { @@ -153,11 +152,8 @@ static void m6502_common_init(legacy_cpu_device *device, device_irq_callback irq if ( intf->write_indexed_func ) cpustate->wrmem_id = intf->write_indexed_func; - if ( intf->port_read_func ) - cpustate->port_read = intf->port_read_func; - - if ( intf->port_write_func ) - cpustate->port_write = intf->port_write_func; + devcb_resolve_read8(&cpustate->in_port_func, &intf->in_port_func, device); + devcb_resolve_write8(&cpustate->out_port_func, &intf->out_port_func, device); } device->save_item(NAME(cpustate->pc.w.l)); @@ -374,8 +370,7 @@ static READ8_HANDLER( m6510_read_0000 ) result = cpustate->ddr; break; case 0x0001: /* Data Port */ - if (cpustate->port_read) - result = cpustate->port_read( cpustate->device, cpustate->ddr ); + result = devcb_call_read8(&cpustate->in_port_func, cpustate->ddr); result = (cpustate->ddr & cpustate->port) | (~cpustate->ddr & result); break; } @@ -396,8 +391,7 @@ static WRITE8_HANDLER( m6510_write_0000 ) break; } - if (cpustate->port_write) - cpustate->port_write( cpustate->device, cpustate->ddr, cpustate->port & cpustate->ddr ); + devcb_call_write8(&cpustate->out_port_func, cpustate->ddr, cpustate->port & cpustate->ddr); } static ADDRESS_MAP_START(m6510_mem, AS_PROGRAM, 8) diff --git a/src/emu/cpu/m6502/m6502.h b/src/emu/cpu/m6502/m6502.h index b478fefdb0c..c9ebf634dc7 100644 --- a/src/emu/cpu/m6502/m6502.h +++ b/src/emu/cpu/m6502/m6502.h @@ -51,9 +51,6 @@ enum positiv edge sets overflow flag */ #define M6502_SET_OVERFLOW 1 -typedef UINT8 (*m6510_port_read_func)(device_t *device, UINT8 direction); -typedef void (*m6510_port_write_func)(device_t *device, UINT8 direction, UINT8 data); - /* Optional interface to set callbacks */ typedef struct _m6502_interface m6502_interface; @@ -61,8 +58,8 @@ struct _m6502_interface { read8_space_func read_indexed_func; write8_space_func write_indexed_func; - m6510_port_read_func port_read_func; - m6510_port_write_func port_write_func; + devcb_read8 in_port_func; + devcb_write8 out_port_func; }; DECLARE_LEGACY_CPU_DEVICE(M6502, m6502);