summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/segaybd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/segaybd.cpp')
-rw-r--r--src/mame/drivers/segaybd.cpp33
1 files changed, 11 insertions, 22 deletions
diff --git a/src/mame/drivers/segaybd.cpp b/src/mame/drivers/segaybd.cpp
index 10b954e1d33..ce246010953 100644
--- a/src/mame/drivers/segaybd.cpp
+++ b/src/mame/drivers/segaybd.cpp
@@ -61,6 +61,7 @@ MB89372 - Uses 3 serial data transfer protocols: ASYNC, COP & BOP. Has a built
#include "includes/segaipt.h"
#include "machine/mb8421.h"
+#include "machine/msm6253.h"
#include "machine/nvram.h"
#include "machine/315_5296.h"
#include "sound/segapcm.h"
@@ -87,29 +88,12 @@ const uint32_t SOUND_CLOCK = 32215900;
//**************************************************************************
//-------------------------------------------------
-// analog_r - handle analog input reads
+// analog_mux - handle multiplexed analog input
//-------------------------------------------------
-READ16_MEMBER(segaybd_state::analog_r)
+ioport_value segaybd_state::analog_mux()
{
- int result = 0xff;
- if (ACCESSING_BITS_0_7)
- {
- result = m_analog_data[offset & 3] & 0x80;
- m_analog_data[offset & 3] <<= 1;
- }
- return result;
-}
-
-
-//-------------------------------------------------
-// analog_w - handle analog input control writes
-//-------------------------------------------------
-
-WRITE16_MEMBER(segaybd_state::analog_w)
-{
- int selected = ((offset & 3) == 3) ? (3 + (m_misc_io_data & 3)) : (offset & 3);
- m_analog_data[offset & 3] = m_adc_ports[selected].read_safe(0xff);
+ return m_adc_ports[3 + (m_misc_io_data & 3)].read_safe(0x80);
}
@@ -642,7 +626,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, segaybd_state )
// AM_RANGE(0x086000, 0x087fff) /DEA0
AM_RANGE(0x0c0000, 0x0cffff) AM_RAM AM_SHARE("shareram")
AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE8("io", sega_315_5296_device, read, write, 0x00ff)
- AM_RANGE(0x100040, 0x100047) AM_READWRITE(analog_r, analog_w)
+ AM_RANGE(0x100040, 0x100047) AM_DEVREADWRITE8("adc", msm6253_device, d7_r, address_w, 0x00ff)
AM_RANGE(0x1f0000, 0x1fffff) AM_RAM
ADDRESS_MAP_END
@@ -1350,6 +1334,12 @@ static MACHINE_CONFIG_START( yboard, segaybd_state )
MCFG_315_5296_IN_PORTG_CB(IOPORT("COINAGE"))
MCFG_315_5296_OUT_PORTH_CB(WRITE8(segaybd_state, output2_w))
+ MCFG_DEVICE_ADD("adc", MSM6253, 0)
+ MCFG_MSM6253_IN0_ANALOG_PORT("ADC.0")
+ MCFG_MSM6253_IN1_ANALOG_PORT("ADC.1")
+ MCFG_MSM6253_IN2_ANALOG_PORT("ADC.2")
+ MCFG_MSM6253_IN3_ANALOG_READ(segaybd_state, analog_mux)
+
MCFG_SEGA_315_5248_MULTIPLIER_ADD("multiplier_main")
MCFG_SEGA_315_5248_MULTIPLIER_ADD("multiplier_subx")
MCFG_SEGA_315_5248_MULTIPLIER_ADD("multiplier_suby")
@@ -2677,7 +2667,6 @@ DRIVER_INIT_MEMBER(segaybd_state,generic)
// save state
save_item(NAME(m_pdrift_bank));
- save_item(NAME(m_analog_data));
save_item(NAME(m_irq2_scanline));
save_item(NAME(m_timer_irq_state));
save_item(NAME(m_vblank_irq_state));