summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2017-11-20 00:30:15 -0500
committer AJR <ajrhacker@users.noreply.github.com>2017-11-20 00:30:15 -0500
commit116b54702fbc4c840d39eb0617bccc3d236c51e2 (patch)
tree4114335469b45a8614c26d20012006cc33f2794a
parent243272fe3cd167b121e64b96a0f9dff3d7af8389 (diff)
zombraid: Add ADC device (nw)
-rw-r--r--src/devices/machine/adc083x.cpp8
-rw-r--r--src/mame/drivers/seta.cpp57
-rw-r--r--src/mame/includes/seta.h11
3 files changed, 32 insertions, 44 deletions
diff --git a/src/devices/machine/adc083x.cpp b/src/devices/machine/adc083x.cpp
index 317e2dbb18a..26323a1d146 100644
--- a/src/devices/machine/adc083x.cpp
+++ b/src/devices/machine/adc083x.cpp
@@ -46,10 +46,10 @@ enum
TYPE DEFINITIONS
***************************************************************************/
-DEFINE_DEVICE_TYPE(ADC0831, adc0831_device, "adc0831", "ADC0831")
-DEFINE_DEVICE_TYPE(ADC0832, adc0832_device, "adc0832", "ADC0832")
-DEFINE_DEVICE_TYPE(ADC0834, adc0834_device, "adc0834", "ADC0834")
-DEFINE_DEVICE_TYPE(ADC0838, adc0838_device, "adc0838", "ADC0838")
+DEFINE_DEVICE_TYPE(ADC0831, adc0831_device, "adc0831", "ADC0831 A/D Converter")
+DEFINE_DEVICE_TYPE(ADC0832, adc0832_device, "adc0832", "ADC0832 A/D Converter")
+DEFINE_DEVICE_TYPE(ADC0834, adc0834_device, "adc0834", "ADC0834 A/D Converter")
+DEFINE_DEVICE_TYPE(ADC0838, adc0838_device, "adc0838", "ADC0838 A/D Converter")
adc083x_device::adc083x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t mux_bits)
: device_t(mconfig, type, tag, owner, clock),
diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp
index ad0e51f0233..98e3c3f3c51 100644
--- a/src/mame/drivers/seta.cpp
+++ b/src/mame/drivers/seta.cpp
@@ -1925,48 +1925,32 @@ ADDRESS_MAP_END
and Zombie Raid (with slight variations)
***************************************************************************/
-READ16_MEMBER(seta_state::zombraid_gun_r)// Serial interface
+ADC083X_INPUT_CB(seta_state::zombraid_adc_cb)
{
- static const char *const portnames[] = { "GUNX1", "GUNY1", "GUNX2", "GUNY2" };
+ if (input == ADC083X_AGND)
+ return 0.0;
+ else if (input == ADC083X_VREF)
+ return 1.0;
+ else
+ return m_gun_inputs[input - ADC083X_CH0]->read() / 255.0;
+}
- int data = ioport(portnames[m_gun_input_src])->read(); // Input Ports 5-8
- return (data >> m_gun_input_bit) & 1;
+READ16_MEMBER(seta_state::zombraid_gun_r)// Serial interface
+{
+ return m_adc->do_read();
}
// Bit 0 is clock, 1 is data, 2 is reset
WRITE16_MEMBER(seta_state::zombraid_gun_w)
{
- if(data&4) { m_gun_bit_count = 0; return; } // Reset
-
- if((data&1) == m_gun_old_clock) return; // No change
-
- if(m_gun_old_clock == 0) // Rising edge
- {
- switch (m_gun_bit_count)
- {
- case 0:
- case 1: // Starting sequence 2,3,2,3. Other inputs?
- break;
- case 2: // First bit of source
- m_gun_input_src = (m_gun_input_src&2) | (data>>1);
- break;
- case 3: // Second bit of source
- m_gun_input_src = (m_gun_input_src&1) | (data&2);
- break;
- default:
- /* Gun Recoils */
- /* Note: In debug menu recoil solenoids strobe when held down. Is this correct?? */
- output().set_value("Player1_Gun_Recoil", (data & 0x10)>>4 );
- output().set_value("Player2_Gun_Recoil", (data & 0x8)>>3 );
-
- m_gun_input_bit = m_gun_bit_count - 4;
- m_gun_input_bit = 8 - m_gun_input_bit; // Reverse order
- break;
- }
- m_gun_bit_count++;
- }
-
- m_gun_old_clock = data & 1;
+ m_adc->cs_write(BIT(data, 2));
+ m_adc->di_write(BIT(data, 1));
+ m_adc->clk_write(BIT(data, 0));
+
+ /* Gun Recoils */
+ /* Note: In debug menu recoil solenoids strobe when held down. Is this correct?? */
+ output().set_value("Player1_Gun_Recoil", BIT(data, 4));
+ output().set_value("Player2_Gun_Recoil", BIT(data, 3));
}
READ16_MEMBER(seta_state::extra_r)
@@ -8694,6 +8678,9 @@ static MACHINE_CONFIG_DERIVED( zombraid, gundhara )
MCFG_CPU_PROGRAM_MAP(zombraid_map)
MCFG_NVRAM_ADD_0FILL("nvram")
+
+ MCFG_DEVICE_ADD("adc", ADC0834, 0)
+ MCFG_ADC083X_INPUT_CB(seta_state, zombraid_adc_cb)
MACHINE_CONFIG_END
/***************************************************************************
diff --git a/src/mame/includes/seta.h b/src/mame/includes/seta.h
index 27985409a91..dde0888c831 100644
--- a/src/mame/includes/seta.h
+++ b/src/mame/includes/seta.h
@@ -8,6 +8,7 @@
***************************************************************************/
#include "machine/74157.h"
+#include "machine/adc083x.h"
#include "machine/gen_latch.h"
#include "machine/ticket.h"
#include "machine/timer.h"
@@ -48,8 +49,10 @@ public:
m_soundlatch2(*this, "soundlatch2"),
m_upd4701(*this, "upd4701"),
m_buttonmux(*this, "buttonmux"),
+ m_adc(*this, "adc"),
m_dsw(*this, "DSW"),
m_rot(*this, {"ROT1", "ROT2"}),
+ m_gun_inputs(*this, {"GUNX1", "GUNY1", "GUNX2", "GUNY2"}),
m_p1(*this, "P1"),
m_p2(*this, "P2"),
m_coins(*this, "COINS"),
@@ -78,9 +81,11 @@ public:
optional_device<generic_latch_8_device> m_soundlatch2;
optional_device<upd4701_device> m_upd4701;
optional_device<hc157_device> m_buttonmux;
+ optional_device<adc083x_device> m_adc;
optional_ioport m_dsw;
optional_ioport_array<2> m_rot;
+ optional_ioport_array<4> m_gun_inputs;
optional_ioport m_p1;
optional_ioport m_p2;
optional_ioport m_coins;
@@ -120,11 +125,6 @@ public:
int m_sub_ctrl_data;
- int m_gun_input_bit;
- int m_gun_input_src;
- int m_gun_bit_count;
- int m_gun_old_clock;
-
uint8_t m_usclssic_port_select;
int m_keroppi_prize_hop;
int m_keroppi_protection_count;
@@ -155,6 +155,7 @@ public:
DECLARE_CUSTOM_INPUT_MEMBER(usclssic_trackball_x_r);
DECLARE_CUSTOM_INPUT_MEMBER(usclssic_trackball_y_r);
DECLARE_WRITE8_MEMBER(usclssic_lockout_w);
+ ADC083X_INPUT_CB(zombraid_adc_cb);
DECLARE_READ16_MEMBER(zombraid_gun_r);
DECLARE_WRITE16_MEMBER(zombraid_gun_w);
DECLARE_READ16_MEMBER(zingzipbl_unknown_r);