summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Dirk Best <mail@dirk-best.de>2010-03-08 13:23:37 +0000
committer Dirk Best <mail@dirk-best.de>2010-03-08 13:23:37 +0000
commit5c85b8f39c7a3d9ad2eeb4e97378570de5744069 (patch)
tree3269b1f98115578c568bc7d3e3826f4a93fe623c /src
parentd1ebfa9d2ed8d2125825bb0b7d2dc575dcf72952 (diff)
z80sio: Added register access functions to prevent trampoline functions [Dirk Best]
Diffstat (limited to 'src')
-rw-r--r--src/emu/machine/z80sio.c52
-rw-r--r--src/emu/machine/z80sio.h17
-rw-r--r--src/mame/drivers/dlair.c24
-rw-r--r--src/mame/drivers/mcr.c2
-rw-r--r--src/mame/includes/mcr.h2
-rw-r--r--src/mame/machine/mcr.c15
6 files changed, 63 insertions, 49 deletions
diff --git a/src/emu/machine/z80sio.c b/src/emu/machine/z80sio.c
index a449ae6d400..0cf01579e41 100644
--- a/src/emu/machine/z80sio.c
+++ b/src/emu/machine/z80sio.c
@@ -486,6 +486,58 @@ READ8_DEVICE_HANDLER( z80sio_d_r )
}
+/***************************************************************************
+ CONTROL/DATA REGISTER
+***************************************************************************/
+
+READ8_DEVICE_HANDLER( z80sio_cd_ba_r )
+{
+ 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);
+ }
+
+ return 0xff;
+}
+
+WRITE8_DEVICE_HANDLER( z80sio_cd_ba_w )
+{
+ 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;
+ }
+}
+
+READ8_DEVICE_HANDLER( z80sio_ba_cd_r )
+{
+ 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);
+ }
+
+ return 0xff;
+}
+
+WRITE8_DEVICE_HANDLER( z80sio_ba_cd_w )
+{
+ 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;
+ }
+}
+
/***************************************************************************
CONTROL LINE READ/WRITE
diff --git a/src/emu/machine/z80sio.h b/src/emu/machine/z80sio.h
index 433395cddc5..93b73e91ab4 100644
--- a/src/emu/machine/z80sio.h
+++ b/src/emu/machine/z80sio.h
@@ -39,23 +39,24 @@ struct _z80sio_interface
/***************************************************************************
- CONTROL REGISTER READ/WRITE
+ CONTROL/DATA REGISTER READ/WRITE
***************************************************************************/
-WRITE8_DEVICE_HANDLER( z80sio_c_w );
-READ8_DEVICE_HANDLER( z80sio_c_r );
+/* 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 );
-
-/***************************************************************************
- DATA REGISTER READ/WRITE
-***************************************************************************/
+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
***************************************************************************/
diff --git a/src/mame/drivers/dlair.c b/src/mame/drivers/dlair.c
index 856258f39f1..8a285271f51 100644
--- a/src/mame/drivers/dlair.c
+++ b/src/mame/drivers/dlair.c
@@ -346,28 +346,6 @@ static WRITE8_HANDLER( laserdisc_w )
/*************************************
*
- * Z80 SIO/DART handlers
- *
- *************************************/
-
-static READ8_DEVICE_HANDLER( sio_r )
-{
- return (offset & 1) ? z80sio_c_r(device, (offset >> 1) & 1) : z80sio_d_r(device, (offset >> 1) & 1);
-}
-
-
-static WRITE8_DEVICE_HANDLER( sio_w )
-{
- if (offset & 1)
- z80sio_c_w(device, (offset >> 1) & 1, data);
- else
- z80sio_d_w(device, (offset >> 1) & 1, data);
-}
-
-
-
-/*************************************
- *
* U.S. version memory map
*
*************************************/
@@ -420,7 +398,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( dleuro_io_map, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x03) AM_MIRROR(0x7c) AM_DEVREADWRITE("ctc", z80ctc_r, z80ctc_w)
- AM_RANGE(0x80, 0x83) AM_MIRROR(0x7c) AM_DEVREADWRITE("sio", sio_r, sio_w)
+ AM_RANGE(0x80, 0x83) AM_MIRROR(0x7c) AM_DEVREADWRITE("sio", z80sio_ba_cd_r, z80sio_ba_cd_w)
ADDRESS_MAP_END
diff --git a/src/mame/drivers/mcr.c b/src/mame/drivers/mcr.c
index 03d1d31184b..1a6db608895 100644
--- a/src/mame/drivers/mcr.c
+++ b/src/mame/drivers/mcr.c
@@ -709,7 +709,7 @@ static ADDRESS_MAP_START( ipu_91695_portmap, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x03) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_pio0", z80pio_cd_ba_r, z80pio_cd_ba_w)
- AM_RANGE(0x04, 0x07) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_sio", mcr_ipu_sio_r, mcr_ipu_sio_w)
+ AM_RANGE(0x04, 0x07) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_sio", z80sio_cd_ba_r, z80sio_cd_ba_w)
AM_RANGE(0x08, 0x0b) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_ctc", z80ctc_r, z80ctc_w)
AM_RANGE(0x0c, 0x0f) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_pio1", z80pio_cd_ba_r, z80pio_cd_ba_w)
AM_RANGE(0x10, 0x13) AM_MIRROR(0xe0) AM_WRITE(mcr_ipu_laserdisk_w)
diff --git a/src/mame/includes/mcr.h b/src/mame/includes/mcr.h
index ff66786885b..da5f867ff75 100644
--- a/src/mame/includes/mcr.h
+++ b/src/mame/includes/mcr.h
@@ -64,8 +64,6 @@ WRITE16_HANDLER( mcr68_6840_lower_w );
READ16_HANDLER( mcr68_6840_upper_r );
READ16_HANDLER( mcr68_6840_lower_r );
-READ8_DEVICE_HANDLER( mcr_ipu_sio_r );
-WRITE8_DEVICE_HANDLER( mcr_ipu_sio_w );
WRITE8_HANDLER( mcr_ipu_laserdisk_w );
READ8_HANDLER( mcr_ipu_watchdog_r );
WRITE8_HANDLER( mcr_ipu_watchdog_w );
diff --git a/src/mame/machine/mcr.c b/src/mame/machine/mcr.c
index 734ad8f40c5..6d38617c93d 100644
--- a/src/mame/machine/mcr.c
+++ b/src/mame/machine/mcr.c
@@ -940,21 +940,6 @@ static WRITE8_DEVICE_HANDLER( ipu_break_changed )
}
-READ8_DEVICE_HANDLER( mcr_ipu_sio_r )
-{
- return (offset & 2) ? z80sio_c_r(device, offset & 1) : z80sio_d_r(device, offset & 1);
-}
-
-
-WRITE8_DEVICE_HANDLER( mcr_ipu_sio_w )
-{
- if (offset & 2)
- z80sio_c_w(device, offset & 1, data);
- else
- z80sio_d_w(device, offset & 1, data);
-}
-
-
WRITE8_HANDLER( mcr_ipu_laserdisk_w )
{
/* bit 3 enables (1) LD video regardless of PIX SW */