diff --git a/src/emu/machine/z80sio.c b/src/emu/machine/z80sio.c index 88513ae95e6..ce72544e1f4 100644 --- a/src/emu/machine/z80sio.c +++ b/src/emu/machine/z80sio.c @@ -804,62 +804,50 @@ void z80sio_device::sio_channel::serial_callback() // GLOBAL STUBS //************************************************************************** -WRITE8_DEVICE_HANDLER( z80sio_c_w ) { downcast(device)->control_write(offset & 1, data); } -WRITE8_DEVICE_HANDLER( z80sio_d_w ) { downcast(device)->data_write(offset & 1, data); } -READ8_DEVICE_HANDLER( z80sio_c_r ) { return downcast(device)->control_read(offset & 1); } -READ8_DEVICE_HANDLER( z80sio_d_r ) { return downcast(device)->data_read(offset & 1); } - -READ8_DEVICE_HANDLER( z80sio_get_dtr ) { return downcast(device)->dtr(offset & 1); } -READ8_DEVICE_HANDLER( z80sio_get_rts ) { return downcast(device)->rts(offset & 1); } - -WRITE8_DEVICE_HANDLER( z80sio_set_cts ) { downcast(device)->set_cts(offset & 1, data); } -WRITE8_DEVICE_HANDLER( z80sio_set_dcd ) { downcast(device)->set_dcd(offset & 1, data); } -WRITE8_DEVICE_HANDLER( z80sio_receive_data ) { downcast(device)->receive_data(offset & 1, data); } - -READ8_DEVICE_HANDLER( z80sio_cd_ba_r ) +READ8_MEMBER( z80sio_device::read ) { switch (offset & 3) { - case 0: return z80sio_d_r(device, 0); - case 1: return z80sio_d_r(device, 1); - case 2: return z80sio_c_r(device, 0); - case 3: return z80sio_c_r(device, 1); + case 0: return data_read(0); + case 1: return data_read(1); + case 2: return control_read(0); + case 3: return control_read(1); } return 0xff; } -WRITE8_DEVICE_HANDLER( z80sio_cd_ba_w ) +WRITE8_MEMBER( z80sio_device::write ) { switch (offset & 3) { - case 0: z80sio_d_w(device, 0, data); break; - case 1: z80sio_d_w(device, 1, data); break; - case 2: z80sio_c_w(device, 0, data); break; - case 3: z80sio_c_w(device, 1, data); break; + case 0: data_write(0, data); break; + case 1: data_write(1, data); break; + case 2: control_write(0, data); break; + case 3: control_write(1, data); break; } } -READ8_DEVICE_HANDLER( z80sio_ba_cd_r ) +READ8_MEMBER( z80sio_device::read_alt ) { switch (offset & 3) { - case 0: return z80sio_d_r(device, 0); - case 1: return z80sio_c_r(device, 0); - case 2: return z80sio_d_r(device, 1); - case 3: return z80sio_c_r(device, 1); + case 0: return data_read(0); + case 1: return control_read(0); + case 2: return data_read(1); + case 3: return control_read(1); } return 0xff; } -WRITE8_DEVICE_HANDLER( z80sio_ba_cd_w ) +WRITE8_MEMBER( z80sio_device::write_alt ) { switch (offset & 3) { - case 0: z80sio_d_w(device, 0, data); break; - case 1: z80sio_c_w(device, 0, data); break; - case 2: z80sio_d_w(device, 1, data); break; - case 3: z80sio_c_w(device, 1, data); break; + case 0: data_write(0, data); break; + case 1: control_write(0, data); break; + case 2: data_write(1, data); break; + case 3: control_write(1, data); break; } } diff --git a/src/emu/machine/z80sio.h b/src/emu/machine/z80sio.h index c1141251036..2c62ebefafc 100644 --- a/src/emu/machine/z80sio.h +++ b/src/emu/machine/z80sio.h @@ -66,6 +66,14 @@ public: void set_cts(int ch, int state) { m_channel[ch].set_cts(state); } void set_dcd(int ch, int state) { m_channel[ch].set_dcd(state); } void receive_data(int ch, int data) { m_channel[ch].receive_data(data); } + + // standard read/write, with C/D in bit 1, B/A in bit 0 + DECLARE_READ8_MEMBER( read ); + DECLARE_WRITE8_MEMBER( write ); + + // alternate read/write, with C/D in bit 0, B/A in bit 1 + DECLARE_READ8_MEMBER( read_alt ); + DECLARE_WRITE8_MEMBER( write_alt ); private: // device-level overrides @@ -140,35 +148,4 @@ private: extern const device_type Z80SIO; - -//************************************************************************** -// CONTROL/DATA REGISTER READ/WRITE -//************************************************************************** - -// register access (A1=C/_D A0=B/_A) -READ8_DEVICE_HANDLER( z80sio_cd_ba_r ); -WRITE8_DEVICE_HANDLER( z80sio_cd_ba_w ); - -// register access (A1=B/_A A0=C/_D) -READ8_DEVICE_HANDLER( z80sio_ba_cd_r ); -WRITE8_DEVICE_HANDLER( z80sio_ba_cd_w ); - -WRITE8_DEVICE_HANDLER( z80sio_c_w ); -READ8_DEVICE_HANDLER( z80sio_c_r ); - -WRITE8_DEVICE_HANDLER( z80sio_d_w ); -READ8_DEVICE_HANDLER( z80sio_d_r ); - - -//************************************************************************** -// CONTROL LINE READ/WRITE -//************************************************************************** - -READ8_DEVICE_HANDLER( z80sio_get_dtr ); -READ8_DEVICE_HANDLER( z80sio_get_rts ); -WRITE8_DEVICE_HANDLER( z80sio_set_cts ); -WRITE8_DEVICE_HANDLER( z80sio_set_dcd ); -WRITE8_DEVICE_HANDLER( z80sio_receive_data ); - - #endif diff --git a/src/mame/drivers/dlair.c b/src/mame/drivers/dlair.c index bf910215778..ab0b35aa240 100644 --- a/src/mame/drivers/dlair.c +++ b/src/mame/drivers/dlair.c @@ -443,7 +443,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( dleuro_io_map, AS_IO, 8, dlair_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x03) AM_MIRROR(0x7c) AM_DEVREADWRITE("ctc", z80ctc_device, read, write) - AM_RANGE(0x80, 0x83) AM_MIRROR(0x7c) AM_DEVREADWRITE_LEGACY("sio", z80sio_ba_cd_r, z80sio_ba_cd_w) + AM_RANGE(0x80, 0x83) AM_MIRROR(0x7c) AM_DEVREADWRITE("sio", z80sio_device, read_alt, write_alt) ADDRESS_MAP_END diff --git a/src/mame/drivers/mcr.c b/src/mame/drivers/mcr.c index 53ac228413f..a5b240eeed4 100644 --- a/src/mame/drivers/mcr.c +++ b/src/mame/drivers/mcr.c @@ -577,7 +577,7 @@ READ8_MEMBER(mcr_state::nflfoot_ip2_r) WRITE8_MEMBER(mcr_state::nflfoot_op4_w) { - device_t *sio = machine().device("ipu_sio"); + z80sio_device *sio = machine().device("ipu_sio"); /* bit 7 = J3-7 on IPU board = /RXDA on SIO */ logerror("%04X:op4_w(%d%d%d)\n", cpu_get_pc(&space.device()), (data >> 7) & 1, (data >> 6) & 1, (data >> 5) & 1); @@ -607,12 +607,12 @@ WRITE8_MEMBER(mcr_state::nflfoot_op4_w) { logerror(" -- stop bit = %d; final value = %02X\n", (data >> 7) & 1, nflfoot_serial_out_bits); nflfoot_serial_out_active = FALSE; - z80sio_receive_data(sio, 0, nflfoot_serial_out_bits); + sio->receive_data(0, nflfoot_serial_out_bits); } } /* bit 6 = J3-3 on IPU board = CTSA on SIO */ - z80sio_set_cts(sio, 0, (data >> 6) & 1); + sio->set_cts(0, (data >> 6) & 1); /* bit 4 = SEL0 (J1-8) on squawk n talk board */ /* bits 3-0 = MD3-0 connected to squawk n talk (J1-4,3,2,1) */ @@ -752,7 +752,7 @@ static ADDRESS_MAP_START( ipu_91695_portmap, AS_IO, 8, mcr_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x03) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_pio0", z80pio_device, read, write) - AM_RANGE(0x04, 0x07) AM_MIRROR(0xe0) AM_DEVREADWRITE_LEGACY("ipu_sio", z80sio_cd_ba_r, z80sio_cd_ba_w) + AM_RANGE(0x04, 0x07) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_sio", z80sio_device, read, write) AM_RANGE(0x08, 0x0b) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_ctc", z80ctc_device, read, write) AM_RANGE(0x0c, 0x0f) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_pio1", z80pio_device, read, write) AM_RANGE(0x10, 0x13) AM_MIRROR(0xe0) AM_WRITE(mcr_ipu_laserdisk_w) diff --git a/src/mame/drivers/proconn.c b/src/mame/drivers/proconn.c index bb9906226fa..fa601ced8a8 100644 --- a/src/mame/drivers/proconn.c +++ b/src/mame/drivers/proconn.c @@ -38,15 +38,15 @@ public: DECLARE_WRITE8_MEMBER( ay_w0 ) { ay8910_address_data_w(m_ay, 0, data); } DECLARE_WRITE8_MEMBER( ay_w1 ) { ay8910_address_data_w(m_ay, 1, data); } - DECLARE_WRITE8_MEMBER( ctc_w0 ) { m_z80ctc->write(0, data); } - DECLARE_WRITE8_MEMBER( ctc_w1 ) { m_z80ctc->write(1, data); } - DECLARE_WRITE8_MEMBER( ctc_w2 ) { m_z80ctc->write(2, data); } - DECLARE_WRITE8_MEMBER( ctc_w3 ) { m_z80ctc->write(3, data); } + DECLARE_WRITE8_MEMBER( ctc_w0 ) { m_z80ctc->write(space, 0, data); } + DECLARE_WRITE8_MEMBER( ctc_w1 ) { m_z80ctc->write(space, 1, data); } + DECLARE_WRITE8_MEMBER( ctc_w2 ) { m_z80ctc->write(space, 2, data); } + DECLARE_WRITE8_MEMBER( ctc_w3 ) { m_z80ctc->write(space, 3, data); } - DECLARE_WRITE8_MEMBER( sio_w0 ) { z80sio_cd_ba_w(m_z80sio, 0, data); } - DECLARE_WRITE8_MEMBER( sio_w1 ) { z80sio_cd_ba_w(m_z80sio, 1, data); } - DECLARE_WRITE8_MEMBER( sio_w2 ) { z80sio_cd_ba_w(m_z80sio, 2, data); } - DECLARE_WRITE8_MEMBER( sio_w3 ) { z80sio_cd_ba_w(m_z80sio, 3, data); } + DECLARE_WRITE8_MEMBER( sio_w0 ) { m_z80sio->write(space, 0, data); } + DECLARE_WRITE8_MEMBER( sio_w1 ) { m_z80sio->write(space, 1, data); } + DECLARE_WRITE8_MEMBER( sio_w2 ) { m_z80sio->write(space, 2, data); } + DECLARE_WRITE8_MEMBER( sio_w3 ) { m_z80sio->write(space, 3, data); } DECLARE_WRITE8_MEMBER( pio1_w0 ) { m_z80pio_1->write(space, 0, data); } DECLARE_WRITE8_MEMBER( pio1_w1 ) { m_z80pio_1->write(space, 1, data); } @@ -75,15 +75,15 @@ public: DECLARE_READ8_MEMBER( ay_r0 ) { return ay8910_r(m_ay, 0); } - DECLARE_READ8_MEMBER( ctc_r0 ) { return m_z80ctc->read(0); } - DECLARE_READ8_MEMBER( ctc_r1 ) { return m_z80ctc->read(1); } - DECLARE_READ8_MEMBER( ctc_r2 ) { return m_z80ctc->read(2); } - DECLARE_READ8_MEMBER( ctc_r3 ) { return m_z80ctc->read(3); } + DECLARE_READ8_MEMBER( ctc_r0 ) { return m_z80ctc->read(space, 0); } + DECLARE_READ8_MEMBER( ctc_r1 ) { return m_z80ctc->read(space, 1); } + DECLARE_READ8_MEMBER( ctc_r2 ) { return m_z80ctc->read(space, 2); } + DECLARE_READ8_MEMBER( ctc_r3 ) { return m_z80ctc->read(space, 3); } - DECLARE_READ8_MEMBER( sio_r0 ) { return z80sio_cd_ba_r(m_z80sio, 0); } - DECLARE_READ8_MEMBER( sio_r1 ) { return z80sio_cd_ba_r(m_z80sio, 1); } - DECLARE_READ8_MEMBER( sio_r2 ) { return z80sio_cd_ba_r(m_z80sio, 2); } - DECLARE_READ8_MEMBER( sio_r3 ) { return z80sio_cd_ba_r(m_z80sio, 3); } + DECLARE_READ8_MEMBER( sio_r0 ) { return m_z80sio->read(space, 0); } + DECLARE_READ8_MEMBER( sio_r1 ) { return m_z80sio->read(space, 1); } + DECLARE_READ8_MEMBER( sio_r2 ) { return m_z80sio->read(space, 2); } + DECLARE_READ8_MEMBER( sio_r3 ) { return m_z80sio->read(space, 3); } DECLARE_READ8_MEMBER( pio1_r0 ) { return m_z80pio_1->read(space, 0); } DECLARE_READ8_MEMBER( pio1_r1 ) { return m_z80pio_1->read(space, 1); } diff --git a/src/mame/machine/mcr.c b/src/mame/machine/mcr.c index 7969d0cf3e8..5fd0583888e 100644 --- a/src/mame/machine/mcr.c +++ b/src/mame/machine/mcr.c @@ -234,7 +234,7 @@ static WRITE8_DEVICE_HANDLER( ipu_break_changed ) { logerror("DTR changed -> %d\n", data); if (data == 1) - z80sio_receive_data(device, 1, 0); + downcast(device)->receive_data(1, 0); } }