From 116b54702fbc4c840d39eb0617bccc3d236c51e2 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 20 Nov 2017 00:30:15 -0500 Subject: [PATCH] zombraid: Add ADC device (nw) --- src/devices/machine/adc083x.cpp | 8 ++--- src/mame/drivers/seta.cpp | 55 +++++++++++++-------------------- src/mame/includes/seta.h | 11 ++++--- 3 files changed, 31 insertions(+), 43 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) ***************************************************************************/ +ADC083X_INPUT_CB(seta_state::zombraid_adc_cb) +{ + 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; +} + READ16_MEMBER(seta_state::zombraid_gun_r)// Serial interface { - static const char *const portnames[] = { "GUNX1", "GUNY1", "GUNX2", "GUNY2" }; - - int data = ioport(portnames[m_gun_input_src])->read(); // Input Ports 5-8 - return (data >> m_gun_input_bit) & 1; + 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 + m_adc->cs_write(BIT(data, 2)); + m_adc->di_write(BIT(data, 1)); + m_adc->clk_write(BIT(data, 0)); - 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; + /* 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 m_soundlatch2; optional_device m_upd4701; optional_device m_buttonmux; + optional_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);