mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
zombraid: Add ADC device (nw)
This commit is contained in:
parent
243272fe3c
commit
116b54702f
@ -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),
|
||||
|
@ -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
|
||||
|
||||
/***************************************************************************
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user