zombraid: Add ADC device (nw)

This commit is contained in:
AJR 2017-11-20 00:30:15 -05:00
parent 243272fe3c
commit 116b54702f
3 changed files with 31 additions and 43 deletions

View File

@ -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),

View File

@ -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
/***************************************************************************

View File

@ -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);