mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
mw8080bw.cpp: fix clowns, move desertgu out of giant class, reduce
runtime tag lookups, use blend modes for spcenctr layout (nw) boothill, dplay, spacwalk and dogpatch are probably broken - I'll fix them later
This commit is contained in:
parent
b94b14469e
commit
b33785affb
@ -16,62 +16,6 @@
|
||||
|
||||
namespace {
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Implementation of tone generator used
|
||||
* by a few of these games
|
||||
*
|
||||
*************************************/
|
||||
|
||||
#define MIDWAY_TONE_EN NODE_100
|
||||
#define MIDWAY_TONE_DATA_L NODE_101
|
||||
#define MIDWAY_TONE_DATA_H NODE_102
|
||||
#define MIDWAY_TONE_SND NODE_103
|
||||
#define MIDWAY_TONE_TRASFORM_OUT NODE_104
|
||||
#define MIDWAY_TONE_BEFORE_AMP_SND NODE_105
|
||||
|
||||
|
||||
#define MIDWAY_TONE_GENERATOR(discrete_op_amp_tvca_info) \
|
||||
/* bit 0 of tone data is always 0 */ \
|
||||
/* join the L & H tone bits */ \
|
||||
DISCRETE_INPUT_LOGIC(MIDWAY_TONE_EN) \
|
||||
DISCRETE_INPUT_DATA (MIDWAY_TONE_DATA_L) \
|
||||
DISCRETE_INPUT_DATA (MIDWAY_TONE_DATA_H) \
|
||||
DISCRETE_TRANSFORM4(MIDWAY_TONE_TRASFORM_OUT, MIDWAY_TONE_DATA_H, 0x40, MIDWAY_TONE_DATA_L, 0x02, "01*23*+") \
|
||||
DISCRETE_NOTE(MIDWAY_TONE_BEFORE_AMP_SND, 1, (double)MW8080BW_MASTER_CLOCK/10/2, MIDWAY_TONE_TRASFORM_OUT, 0xfff, 1, DISC_CLK_IS_FREQ) \
|
||||
DISCRETE_OP_AMP_TRIG_VCA(MIDWAY_TONE_SND, MIDWAY_TONE_BEFORE_AMP_SND, MIDWAY_TONE_EN, 0, 12, 0, &discrete_op_amp_tvca_info)
|
||||
|
||||
|
||||
// most common values based on clowns schematic
|
||||
discrete_op_amp_tvca_info const midway_music_tvca_info =
|
||||
{
|
||||
RES_M(3.3), // r502
|
||||
RES_K(10) + RES_K(680), // r505 + r506
|
||||
0,
|
||||
RES_K(680), // r503
|
||||
RES_K(10), // r500
|
||||
0,
|
||||
RES_K(680), // r501
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
CAP_U(.001), // c500
|
||||
0,
|
||||
0, 0,
|
||||
12, // v1
|
||||
0, // v2
|
||||
0, // v3
|
||||
12, // vP
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_TRG0,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_TRG1,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE
|
||||
};
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Implementation of the common
|
||||
@ -613,8 +557,9 @@ discrete_mixer_desc const invaders_mixer =
|
||||
*
|
||||
*************************************/
|
||||
|
||||
DEFINE_DEVICE_TYPE(SEAWOLF_AUDIO, seawolf_audio_device, "seawolf_audio", "Nutting Sea Wolf Audio")
|
||||
DEFINE_DEVICE_TYPE(GUNFIGHT_AUDIO, gunfight_audio_device, "gunfight_audio", "Nutting Gun Fight Audio")
|
||||
DEFINE_DEVICE_TYPE(SEAWOLF_AUDIO, seawolf_audio_device, "seawolf_audio", "Midway Sea Wolf Audio")
|
||||
DEFINE_DEVICE_TYPE(GUNFIGHT_AUDIO, gunfight_audio_device, "gunfight_audio", "Midway Gun Fight Audio")
|
||||
DEFINE_DEVICE_TYPE(DESERTGU_AUDIO, desertgu_audio_device, "desertgu_audio", "Midway Desert Gun Audio")
|
||||
DEFINE_DEVICE_TYPE(GMISSILE_AUDIO, gmissile_audio_device, "gmissile_audio", "Midway Guided Missile Audio")
|
||||
DEFINE_DEVICE_TYPE(M4_AUDIO, m4_audio_device, "m4_audio", "Midway M-4 Audio")
|
||||
DEFINE_DEVICE_TYPE(CLOWNS_AUDIO, clowns_audio_device, "clowns_audio", "Midway Clowns Audio")
|
||||
@ -624,6 +569,83 @@ DEFINE_DEVICE_TYPE(INVADERS_AUDIO, invaders_audio_device, "invaders_audio", "Tai
|
||||
DEFINE_DEVICE_TYPE(INVAD2CT_AUDIO, invad2ct_audio_device, "invad2ct_audio", "Midway Space Invaders II Audio")
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Implementation of tone generator used
|
||||
* by a few of these games
|
||||
*
|
||||
*************************************/
|
||||
|
||||
#define MIDWAY_TONE_EN NODE_100
|
||||
#define MIDWAY_TONE_DATA_L NODE_101
|
||||
#define MIDWAY_TONE_DATA_H NODE_102
|
||||
#define MIDWAY_TONE_SND NODE_103
|
||||
#define MIDWAY_TONE_TRASFORM_OUT NODE_104
|
||||
#define MIDWAY_TONE_BEFORE_AMP_SND NODE_105
|
||||
|
||||
#define MIDWAY_TONE_GENERATOR(discrete_op_amp_tvca_info) \
|
||||
/* bit 0 of tone data is always 0 */ \
|
||||
/* join the L & H tone bits */ \
|
||||
DISCRETE_INPUT_LOGIC(MIDWAY_TONE_EN) \
|
||||
DISCRETE_INPUT_DATA (MIDWAY_TONE_DATA_L) \
|
||||
DISCRETE_INPUT_DATA (MIDWAY_TONE_DATA_H) \
|
||||
DISCRETE_TRANSFORM4(MIDWAY_TONE_TRASFORM_OUT, MIDWAY_TONE_DATA_H, 0x40, MIDWAY_TONE_DATA_L, 0x02, "01*23*+") \
|
||||
DISCRETE_NOTE(MIDWAY_TONE_BEFORE_AMP_SND, 1, (double)MW8080BW_MASTER_CLOCK/10/2, MIDWAY_TONE_TRASFORM_OUT, 0xfff, 1, DISC_CLK_IS_FREQ) \
|
||||
DISCRETE_OP_AMP_TRIG_VCA(MIDWAY_TONE_SND, MIDWAY_TONE_BEFORE_AMP_SND, MIDWAY_TONE_EN, 0, 12, 0, &discrete_op_amp_tvca_info)
|
||||
|
||||
// most common values based on clowns schematic
|
||||
static discrete_op_amp_tvca_info const midway_music_tvca_info =
|
||||
{
|
||||
RES_M(3.3), // r502
|
||||
RES_K(10) + RES_K(680), // r505 + r506
|
||||
0,
|
||||
RES_K(680), // r503
|
||||
RES_K(10), // r500
|
||||
0,
|
||||
RES_K(680), // r501
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
CAP_U(.001), // c500
|
||||
0,
|
||||
0, 0,
|
||||
12, // v1
|
||||
0, // v2
|
||||
0, // v3
|
||||
12, // vP
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_TRG0,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_TRG1,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE
|
||||
};
|
||||
|
||||
midway_tone_generator_device_base::midway_tone_generator_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock) :
|
||||
device_t(mconfig, type, tag, owner, clock),
|
||||
m_discrete(*this, "discrete")
|
||||
{
|
||||
}
|
||||
|
||||
void midway_tone_generator_device_base::tone_generator_lo_w(u8 data)
|
||||
{
|
||||
m_discrete->write(MIDWAY_TONE_EN, (data >> 0) & 0x01);
|
||||
|
||||
m_discrete->write(MIDWAY_TONE_DATA_L, (data >> 1) & 0x1f);
|
||||
|
||||
// D6 and D7 are not connected
|
||||
}
|
||||
|
||||
|
||||
void midway_tone_generator_device_base::tone_generator_hi_w(u8 data)
|
||||
{
|
||||
m_discrete->write(MIDWAY_TONE_DATA_H, data & 0x3f);
|
||||
|
||||
// D6 and D7 are not connected
|
||||
}
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Sea Wolf
|
||||
@ -748,6 +770,255 @@ void gunfight_audio_device::device_start()
|
||||
}
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Desert Gun
|
||||
*
|
||||
* Discrete sound emulation: Jan 2007, D.R.
|
||||
*
|
||||
*************************************/
|
||||
|
||||
// nodes - inputs
|
||||
#define DESERTGU_GAME_ON_EN NODE_01
|
||||
#define DESERTGU_RIFLE_SHOT_EN NODE_02
|
||||
#define DESERTGU_BOTTLE_HIT_EN NODE_03
|
||||
#define DESERTGU_ROAD_RUNNER_HIT_EN NODE_04
|
||||
#define DESERTGU_CREATURE_HIT_EN NODE_05
|
||||
#define DESERTGU_ROADRUNNER_BEEP_BEEP_EN NODE_06
|
||||
#define DESERTGU_TRIGGER_CLICK_EN NODE_07
|
||||
|
||||
// nodes - sounds
|
||||
#define DESERTGU_NOISE NODE_08
|
||||
#define DESERTGU_RIFLE_SHOT_SND NODE_09
|
||||
#define DESERTGU_BOTTLE_HIT_SND NODE_10
|
||||
#define DESERTGU_ROAD_RUNNER_HIT_SND NODE_11
|
||||
#define DESERTGU_CREATURE_HIT_SND NODE_12
|
||||
#define DESERTGU_ROADRUNNER_BEEP_BEEP_SND NODE_13
|
||||
#define DESERTGU_TRIGGER_CLICK_SND DESERTGU_TRIGGER_CLICK_EN
|
||||
|
||||
// nodes - adjusters
|
||||
#define DESERTGU_MUSIC_ADJ NODE_15
|
||||
|
||||
static discrete_op_amp_tvca_info const desertgu_rifle_shot_tvca_info =
|
||||
{
|
||||
RES_M(2.7),
|
||||
RES_K(680),
|
||||
0,
|
||||
RES_K(680),
|
||||
RES_K(10),
|
||||
0,
|
||||
RES_K(680),
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
CAP_U(0.47),
|
||||
0,
|
||||
0, 0,
|
||||
12, // v1
|
||||
0, // v2
|
||||
0, // v3
|
||||
12, // vP
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_TRG0,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE
|
||||
};
|
||||
|
||||
|
||||
static discrete_mixer_desc const desertgu_filter_mixer =
|
||||
{
|
||||
DISC_MIXER_IS_RESISTOR,
|
||||
{ RES_K(2),
|
||||
RES_K(27),
|
||||
RES_K(2) + RES_K(1) },
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1
|
||||
};
|
||||
|
||||
|
||||
static discrete_op_amp_filt_info const desertgu_filter =
|
||||
{
|
||||
1.0 / ( 1.0 / RES_K(2) + 1.0 / RES_K(27) + 1.0 / (RES_K(2) + RES_K(1))),
|
||||
0,
|
||||
68,
|
||||
0,
|
||||
RES_K(39),
|
||||
CAP_U(0.033),
|
||||
CAP_U(0.033),
|
||||
0,
|
||||
0,
|
||||
12,
|
||||
0
|
||||
};
|
||||
|
||||
|
||||
static const discrete_mixer_desc desertgu_mixer =
|
||||
{
|
||||
DISC_MIXER_IS_OP_AMP,
|
||||
{ RES_K(12) + RES_K(68) + RES_K(30),
|
||||
RES_K(56),
|
||||
RES_K(180),
|
||||
RES_K(47),
|
||||
RES_K(30) },
|
||||
{ 0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
DESERTGU_MUSIC_ADJ },
|
||||
{ CAP_U(0.1),
|
||||
CAP_U(0.1),
|
||||
CAP_U(0.1),
|
||||
CAP_U(0.1),
|
||||
CAP_U(0.1) },
|
||||
0,
|
||||
RES_K(100),
|
||||
0,
|
||||
CAP_U(0.1),
|
||||
0,
|
||||
6000 // final gain
|
||||
};
|
||||
|
||||
|
||||
static DISCRETE_SOUND_START(desertgu_discrete)
|
||||
|
||||
/************************************************
|
||||
* Input register mapping
|
||||
************************************************/
|
||||
DISCRETE_INPUT_LOGIC(DESERTGU_GAME_ON_EN)
|
||||
DISCRETE_INPUT_LOGIC(DESERTGU_RIFLE_SHOT_EN)
|
||||
DISCRETE_INPUT_LOGIC(DESERTGU_BOTTLE_HIT_EN)
|
||||
DISCRETE_INPUT_LOGIC(DESERTGU_ROAD_RUNNER_HIT_EN)
|
||||
DISCRETE_INPUT_LOGIC(DESERTGU_CREATURE_HIT_EN)
|
||||
DISCRETE_INPUT_LOGIC(DESERTGU_ROADRUNNER_BEEP_BEEP_EN)
|
||||
DISCRETE_INPUTX_LOGIC(DESERTGU_TRIGGER_CLICK_SND, 12, 0, 0)
|
||||
|
||||
// The low value of the pot is set to 75000. A real 1M pot will never go to 0 anyways.
|
||||
// This will give the control more apparent volume range.
|
||||
// The music way overpowers the rest of the sounds anyways.
|
||||
DISCRETE_ADJUSTMENT(DESERTGU_MUSIC_ADJ, RES_M(1), 75000, DISC_LOGADJ, "MUSIC_ADJ")
|
||||
|
||||
/************************************************
|
||||
* Tone generator
|
||||
************************************************/
|
||||
MIDWAY_TONE_GENERATOR(midway_music_tvca_info)
|
||||
|
||||
/************************************************
|
||||
* Rifle shot sound
|
||||
************************************************/
|
||||
// Noise clock was breadboarded and measured at 7515Hz
|
||||
DISCRETE_LFSR_NOISE(DESERTGU_NOISE, 1, 1, 7515, 12.0, 0, 12.0/2, &midway_lfsr)
|
||||
|
||||
DISCRETE_OP_AMP_TRIG_VCA(NODE_30, DESERTGU_RIFLE_SHOT_EN, 0, 0, DESERTGU_NOISE, 0, &desertgu_rifle_shot_tvca_info)
|
||||
DISCRETE_RCFILTER(NODE_31, NODE_30, RES_K(12), CAP_U(.01))
|
||||
DISCRETE_CRFILTER(DESERTGU_RIFLE_SHOT_SND, NODE_31, RES_K(12) + RES_K(68), CAP_U(.0022))
|
||||
|
||||
/************************************************
|
||||
* Bottle hit sound
|
||||
************************************************/
|
||||
DISCRETE_CONSTANT(DESERTGU_BOTTLE_HIT_SND, 0) // placeholder for incomplete sound
|
||||
|
||||
/************************************************
|
||||
* Road Runner hit sound
|
||||
************************************************/
|
||||
DISCRETE_CONSTANT(DESERTGU_ROAD_RUNNER_HIT_SND, 0) // placeholder for incomplete sound
|
||||
|
||||
/************************************************
|
||||
* Creature hit sound
|
||||
************************************************/
|
||||
DISCRETE_CONSTANT(DESERTGU_CREATURE_HIT_SND, 0) // placeholder for incomplete sound
|
||||
|
||||
/************************************************
|
||||
* Beep-Beep sound
|
||||
************************************************/
|
||||
DISCRETE_CONSTANT(DESERTGU_ROADRUNNER_BEEP_BEEP_SND, 0) // placeholder for incomplete sound
|
||||
|
||||
/************************************************
|
||||
* Mix and filter
|
||||
************************************************/
|
||||
DISCRETE_MIXER3(NODE_80, 1, DESERTGU_BOTTLE_HIT_SND, DESERTGU_ROADRUNNER_BEEP_BEEP_SND, DESERTGU_TRIGGER_CLICK_SND, &desertgu_filter_mixer)
|
||||
DISCRETE_OP_AMP_FILTER(NODE_81, 1, NODE_80, 0, DISC_OP_AMP_FILTER_IS_BAND_PASS_1, &desertgu_filter)
|
||||
|
||||
/************************************************
|
||||
* Combine all sound sources.
|
||||
************************************************/
|
||||
DISCRETE_MIXER5(NODE_91, DESERTGU_GAME_ON_EN, DESERTGU_RIFLE_SHOT_SND, DESERTGU_ROAD_RUNNER_HIT_SND, DESERTGU_CREATURE_HIT_SND, NODE_81, MIDWAY_TONE_SND, &desertgu_mixer)
|
||||
|
||||
DISCRETE_OUTPUT(NODE_91, 1)
|
||||
DISCRETE_SOUND_END
|
||||
|
||||
INPUT_PORTS_START(desertgu_audio)
|
||||
PORT_START("MUSIC_ADJ") // 3
|
||||
PORT_ADJUSTER( 60, "Music Volume" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
desertgu_audio_device::desertgu_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
|
||||
midway_tone_generator_device_base(mconfig, DESERTGU_AUDIO, tag, owner, clock),
|
||||
m_ctrl_sel_out(*this),
|
||||
m_recoil(*this, "Player1_Gun_Recoil"),
|
||||
m_p2(0U)
|
||||
{
|
||||
}
|
||||
|
||||
void desertgu_audio_device::p1_w(u8 data)
|
||||
{
|
||||
// D0 and D1 are not connected
|
||||
|
||||
machine().bookkeeping().coin_counter_w(0, BIT(data, 2));
|
||||
|
||||
m_discrete->write(DESERTGU_GAME_ON_EN, (data >> 3) & 0x01);
|
||||
m_discrete->write(DESERTGU_RIFLE_SHOT_EN, (data >> 4) & 0x01);
|
||||
m_discrete->write(DESERTGU_BOTTLE_HIT_EN, (data >> 5) & 0x01);
|
||||
m_discrete->write(DESERTGU_ROAD_RUNNER_HIT_EN, (data >> 6) & 0x01);
|
||||
m_discrete->write(DESERTGU_CREATURE_HIT_EN, (data >> 7) & 0x01);
|
||||
}
|
||||
|
||||
void desertgu_audio_device::p2_w(u8 data)
|
||||
{
|
||||
u8 const changed(data ^ m_p2);
|
||||
m_p2 = data;
|
||||
|
||||
m_discrete->write(DESERTGU_ROADRUNNER_BEEP_BEEP_EN, (data >> 0) & 0x01);
|
||||
m_discrete->write(DESERTGU_TRIGGER_CLICK_EN, (data >> 1) & 0x01);
|
||||
|
||||
m_recoil = BIT(data, 2);
|
||||
|
||||
if (BIT(changed, 3)) m_ctrl_sel_out(BIT(data, 3));
|
||||
|
||||
// D4-D7 are not connected
|
||||
}
|
||||
|
||||
void desertgu_audio_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
SPEAKER(config, "mono").front_center();
|
||||
DISCRETE(config, m_discrete, desertgu_discrete);
|
||||
m_discrete->add_route(ALL_OUTPUTS, "mono", 0.8);
|
||||
}
|
||||
|
||||
ioport_constructor desertgu_audio_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(desertgu_audio);
|
||||
}
|
||||
|
||||
void desertgu_audio_device::device_start()
|
||||
{
|
||||
m_ctrl_sel_out.resolve();
|
||||
m_recoil.resolve();
|
||||
|
||||
m_p2 = 0U;
|
||||
|
||||
save_item(NAME(m_p2));
|
||||
}
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Guided Missile
|
||||
@ -1103,10 +1374,14 @@ static DISCRETE_SOUND_START(clowns_discrete)
|
||||
DISCRETE_OUTPUT(NODE_91, 11000)
|
||||
DISCRETE_SOUND_END
|
||||
|
||||
static INPUT_PORTS_START(clowns_audio)
|
||||
PORT_START("R507")
|
||||
PORT_ADJUSTER( 40, "R507 - Music Volume" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
clowns_audio_device::clowns_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
|
||||
device_t(mconfig, CLOWNS_AUDIO, tag, owner, clock),
|
||||
midway_tone_generator_device_base(mconfig, CLOWNS_AUDIO, tag, owner, clock),
|
||||
m_samples(*this, "samples"),
|
||||
m_discrete(*this, "discrete"),
|
||||
m_ctrl_sel_out(*this),
|
||||
m_p1(0U),
|
||||
m_p2(0U)
|
||||
@ -1161,6 +1436,11 @@ void clowns_audio_device::device_add_mconfig(machine_config &config)
|
||||
m_discrete->add_route(ALL_OUTPUTS, "mono", 0.25);
|
||||
}
|
||||
|
||||
ioport_constructor clowns_audio_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(clowns_audio);
|
||||
}
|
||||
|
||||
void clowns_audio_device::device_start()
|
||||
{
|
||||
m_ctrl_sel_out.resolve_safe();
|
||||
@ -2973,234 +3253,6 @@ WRITE8_MEMBER(mw8080bw_state::checkmat_audio_w)
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Desert Gun
|
||||
*
|
||||
* Discrete sound emulation: Jan 2007, D.R.
|
||||
*
|
||||
*************************************/
|
||||
|
||||
/* nodes - inputs */
|
||||
#define DESERTGU_GAME_ON_EN NODE_01
|
||||
#define DESERTGU_RIFLE_SHOT_EN NODE_02
|
||||
#define DESERTGU_BOTTLE_HIT_EN NODE_03
|
||||
#define DESERTGU_ROAD_RUNNER_HIT_EN NODE_04
|
||||
#define DESERTGU_CREATURE_HIT_EN NODE_05
|
||||
#define DESERTGU_ROADRUNNER_BEEP_BEEP_EN NODE_06
|
||||
#define DESERTGU_TRIGGER_CLICK_EN NODE_07
|
||||
|
||||
/* nodes - sounds */
|
||||
#define DESERTGU_NOISE NODE_08
|
||||
#define DESERTGU_RIFLE_SHOT_SND NODE_09
|
||||
#define DESERTGU_BOTTLE_HIT_SND NODE_10
|
||||
#define DESERTGU_ROAD_RUNNER_HIT_SND NODE_11
|
||||
#define DESERTGU_CREATURE_HIT_SND NODE_12
|
||||
#define DESERTGU_ROADRUNNER_BEEP_BEEP_SND NODE_13
|
||||
#define DESERTGU_TRIGGER_CLICK_SND DESERTGU_TRIGGER_CLICK_EN
|
||||
|
||||
/* nodes - adjusters */
|
||||
#define DESERTGU_MUSIC_ADJ NODE_15
|
||||
|
||||
|
||||
static const discrete_op_amp_tvca_info desertgu_rifle_shot_tvca_info =
|
||||
{
|
||||
RES_M(2.7),
|
||||
RES_K(680),
|
||||
0,
|
||||
RES_K(680),
|
||||
RES_K(10),
|
||||
0,
|
||||
RES_K(680),
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
CAP_U(0.47),
|
||||
0,
|
||||
0, 0,
|
||||
12, /* v1 */
|
||||
0, /* v2 */
|
||||
0, /* v3 */
|
||||
12, /* vP */
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_TRG0,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE,
|
||||
DISC_OP_AMP_TRIGGER_FUNCTION_NONE
|
||||
};
|
||||
|
||||
|
||||
static const discrete_mixer_desc desertgu_filter_mixer =
|
||||
{
|
||||
DISC_MIXER_IS_RESISTOR,
|
||||
{ RES_K(2),
|
||||
RES_K(27),
|
||||
RES_K(2) + RES_K(1) },
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1
|
||||
};
|
||||
|
||||
|
||||
static const discrete_op_amp_filt_info desertgu_filter =
|
||||
{
|
||||
1.0 / ( 1.0 / RES_K(2) + 1.0 / RES_K(27) + 1.0 / (RES_K(2) + RES_K(1))),
|
||||
0,
|
||||
68,
|
||||
0,
|
||||
RES_K(39),
|
||||
CAP_U(0.033),
|
||||
CAP_U(0.033),
|
||||
0,
|
||||
0,
|
||||
12,
|
||||
0
|
||||
};
|
||||
|
||||
|
||||
static const discrete_mixer_desc desertgu_mixer =
|
||||
{
|
||||
DISC_MIXER_IS_OP_AMP,
|
||||
{ RES_K(12) + RES_K(68) + RES_K(30),
|
||||
RES_K(56),
|
||||
RES_K(180),
|
||||
RES_K(47),
|
||||
RES_K(30) },
|
||||
{ 0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
DESERTGU_MUSIC_ADJ },
|
||||
{ CAP_U(0.1),
|
||||
CAP_U(0.1),
|
||||
CAP_U(0.1),
|
||||
CAP_U(0.1),
|
||||
CAP_U(0.1) },
|
||||
0,
|
||||
RES_K(100),
|
||||
0,
|
||||
CAP_U(0.1),
|
||||
0,
|
||||
6000 /* final gain */
|
||||
};
|
||||
|
||||
|
||||
static DISCRETE_SOUND_START(desertgu_discrete)
|
||||
|
||||
/************************************************
|
||||
* Input register mapping
|
||||
************************************************/
|
||||
DISCRETE_INPUT_LOGIC(DESERTGU_GAME_ON_EN)
|
||||
DISCRETE_INPUT_LOGIC(DESERTGU_RIFLE_SHOT_EN)
|
||||
DISCRETE_INPUT_LOGIC(DESERTGU_BOTTLE_HIT_EN)
|
||||
DISCRETE_INPUT_LOGIC(DESERTGU_ROAD_RUNNER_HIT_EN)
|
||||
DISCRETE_INPUT_LOGIC(DESERTGU_CREATURE_HIT_EN)
|
||||
DISCRETE_INPUT_LOGIC(DESERTGU_ROADRUNNER_BEEP_BEEP_EN)
|
||||
DISCRETE_INPUTX_LOGIC(DESERTGU_TRIGGER_CLICK_SND, 12, 0, 0)
|
||||
|
||||
/* The low value of the pot is set to 75000. A real 1M pot will never go to 0 anyways. */
|
||||
/* This will give the control more apparent volume range. */
|
||||
/* The music way overpowers the rest of the sounds anyways. */
|
||||
DISCRETE_ADJUSTMENT(DESERTGU_MUSIC_ADJ, RES_M(1), 75000, DISC_LOGADJ, "MUSIC_ADJ")
|
||||
|
||||
/************************************************
|
||||
* Tone generator
|
||||
************************************************/
|
||||
MIDWAY_TONE_GENERATOR(midway_music_tvca_info)
|
||||
|
||||
/************************************************
|
||||
* Rifle shot sound
|
||||
************************************************/
|
||||
/* Noise clock was breadboarded and measured at 7515Hz */
|
||||
DISCRETE_LFSR_NOISE(DESERTGU_NOISE, 1, 1, 7515, 12.0, 0, 12.0/2, &midway_lfsr)
|
||||
|
||||
DISCRETE_OP_AMP_TRIG_VCA(NODE_30, DESERTGU_RIFLE_SHOT_EN, 0, 0, DESERTGU_NOISE, 0, &desertgu_rifle_shot_tvca_info)
|
||||
DISCRETE_RCFILTER(NODE_31, NODE_30, RES_K(12), CAP_U(.01))
|
||||
DISCRETE_CRFILTER(DESERTGU_RIFLE_SHOT_SND, NODE_31, RES_K(12) + RES_K(68), CAP_U(.0022))
|
||||
|
||||
/************************************************
|
||||
* Bottle hit sound
|
||||
************************************************/
|
||||
DISCRETE_CONSTANT(DESERTGU_BOTTLE_HIT_SND, 0) /* placeholder for incomplete sound */
|
||||
|
||||
/************************************************
|
||||
* Road Runner hit sound
|
||||
************************************************/
|
||||
DISCRETE_CONSTANT(DESERTGU_ROAD_RUNNER_HIT_SND, 0) /* placeholder for incomplete sound */
|
||||
|
||||
/************************************************
|
||||
* Creature hit sound
|
||||
************************************************/
|
||||
DISCRETE_CONSTANT(DESERTGU_CREATURE_HIT_SND, 0) /* placeholder for incomplete sound */
|
||||
|
||||
/************************************************
|
||||
* Beep-Beep sound
|
||||
************************************************/
|
||||
DISCRETE_CONSTANT(DESERTGU_ROADRUNNER_BEEP_BEEP_SND, 0) /* placeholder for incomplete sound */
|
||||
|
||||
/************************************************
|
||||
* Mix and filter
|
||||
************************************************/
|
||||
DISCRETE_MIXER3(NODE_80, 1, DESERTGU_BOTTLE_HIT_SND, DESERTGU_ROADRUNNER_BEEP_BEEP_SND, DESERTGU_TRIGGER_CLICK_SND, &desertgu_filter_mixer)
|
||||
DISCRETE_OP_AMP_FILTER(NODE_81, 1, NODE_80, 0, DISC_OP_AMP_FILTER_IS_BAND_PASS_1, &desertgu_filter)
|
||||
|
||||
/************************************************
|
||||
* Combine all sound sources.
|
||||
************************************************/
|
||||
DISCRETE_MIXER5(NODE_91, DESERTGU_GAME_ON_EN, DESERTGU_RIFLE_SHOT_SND, DESERTGU_ROAD_RUNNER_HIT_SND, DESERTGU_CREATURE_HIT_SND, NODE_81, MIDWAY_TONE_SND, &desertgu_mixer)
|
||||
|
||||
DISCRETE_OUTPUT(NODE_91, 1)
|
||||
DISCRETE_SOUND_END
|
||||
|
||||
|
||||
void mw8080bw_state::desertgu_audio(machine_config &config)
|
||||
{
|
||||
SPEAKER(config, "mono").front_center();
|
||||
DISCRETE(config, m_discrete, desertgu_discrete);
|
||||
m_discrete->add_route(ALL_OUTPUTS, "mono", 0.8);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(mw8080bw_state::desertgu_audio_1_w)
|
||||
{
|
||||
/* D0 and D1 are not connected */
|
||||
|
||||
machine().bookkeeping().coin_counter_w(0, (data >> 2) & 0x01);
|
||||
|
||||
m_discrete->write(DESERTGU_GAME_ON_EN, (data >> 3) & 0x01);
|
||||
|
||||
m_discrete->write(DESERTGU_RIFLE_SHOT_EN, (data >> 4) & 0x01);
|
||||
|
||||
m_discrete->write(DESERTGU_BOTTLE_HIT_EN, (data >> 5) & 0x01);
|
||||
|
||||
m_discrete->write(DESERTGU_ROAD_RUNNER_HIT_EN, (data >> 6) & 0x01);
|
||||
|
||||
m_discrete->write(DESERTGU_CREATURE_HIT_EN, (data >> 7) & 0x01);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(mw8080bw_state::desertgu_audio_2_w)
|
||||
{
|
||||
m_discrete->write(DESERTGU_ROADRUNNER_BEEP_BEEP_EN, (data >> 0) & 0x01);
|
||||
|
||||
m_discrete->write(DESERTGU_TRIGGER_CLICK_EN, (data >> 1) & 0x01);
|
||||
|
||||
output().set_value("Player1_Gun_Recoil", (data >> 2) & 0x01);
|
||||
|
||||
m_desertgun_controller_select = (data >> 3) & 0x01;
|
||||
|
||||
/* D4-D7 are not connected */
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Double Play / Extra Inning
|
||||
|
@ -16,6 +16,19 @@
|
||||
#include "sound/sn76477.h"
|
||||
|
||||
|
||||
class midway_tone_generator_device_base : public device_t
|
||||
{
|
||||
public:
|
||||
void tone_generator_lo_w(u8 data);
|
||||
void tone_generator_hi_w(u8 data);
|
||||
|
||||
protected:
|
||||
midway_tone_generator_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock);
|
||||
|
||||
required_device<discrete_sound_device> m_discrete;
|
||||
};
|
||||
|
||||
|
||||
class seawolf_audio_device : public device_t
|
||||
{
|
||||
public:
|
||||
@ -49,6 +62,27 @@ private:
|
||||
};
|
||||
|
||||
|
||||
class desertgu_audio_device : public midway_tone_generator_device_base
|
||||
{
|
||||
public:
|
||||
auto ctrl_sel_out() { return m_ctrl_sel_out.bind(); }
|
||||
|
||||
desertgu_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
|
||||
|
||||
void p1_w(u8 data);
|
||||
void p2_w(u8 data);
|
||||
|
||||
protected:
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
virtual void device_start() override;
|
||||
|
||||
private:
|
||||
devcb_write_line m_ctrl_sel_out;
|
||||
output_finder<> m_recoil;
|
||||
u8 m_p2;
|
||||
};
|
||||
|
||||
|
||||
class gmissile_audio_device : public device_t
|
||||
{
|
||||
@ -90,7 +124,7 @@ private:
|
||||
};
|
||||
|
||||
|
||||
class clowns_audio_device : public device_t
|
||||
class clowns_audio_device : public midway_tone_generator_device_base
|
||||
{
|
||||
public:
|
||||
auto ctrl_sel_out() { return m_ctrl_sel_out.bind(); }
|
||||
@ -102,11 +136,11 @@ public:
|
||||
|
||||
protected:
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
virtual void device_start() override;
|
||||
|
||||
private:
|
||||
required_device<samples_device> m_samples;
|
||||
required_device<discrete_sound_device> m_discrete;
|
||||
devcb_write_line m_ctrl_sel_out;
|
||||
u8 m_p1;
|
||||
u8 m_p2;
|
||||
@ -202,6 +236,7 @@ private:
|
||||
|
||||
DECLARE_DEVICE_TYPE(SEAWOLF_AUDIO, seawolf_audio_device)
|
||||
DECLARE_DEVICE_TYPE(GUNFIGHT_AUDIO, gunfight_audio_device)
|
||||
DECLARE_DEVICE_TYPE(DESERTGU_AUDIO, desertgu_audio_device)
|
||||
DECLARE_DEVICE_TYPE(GMISSILE_AUDIO, gmissile_audio_device)
|
||||
DECLARE_DEVICE_TYPE(M4_AUDIO, m4_audio_device)
|
||||
DECLARE_DEVICE_TYPE(CLOWNS_AUDIO, clowns_audio_device)
|
||||
|
@ -395,7 +395,7 @@ static INPUT_PORTS_START( seawolf )
|
||||
|
||||
// 2 fake ports for the 'Reset High Score' input, which has a DIP to enable it
|
||||
PORT_START(SEAWOLF_ERASE_SW_PORT_TAG)
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Reset High Score") PORT_CODE(KEYCODE_F2)
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MEMORY_RESET ) PORT_NAME("Reset High Score")
|
||||
PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_START(SEAWOLF_ERASE_DIP_PORT_TAG)
|
||||
@ -1178,69 +1178,52 @@ void mw8080bw_state::checkmat(machine_config &config)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
#define DESERTGU_DIP_SW_0_1_SET_1_TAG ("DIPSW01SET1")
|
||||
#define DESERTGU_DIP_SW_0_1_SET_2_TAG ("DIPSW01SET2")
|
||||
|
||||
|
||||
MACHINE_START_MEMBER(mw8080bw_state,desertgu)
|
||||
void desertgu_state::machine_start()
|
||||
{
|
||||
mw8080bw_state::machine_start();
|
||||
|
||||
/* setup for save states */
|
||||
save_item(NAME(m_desertgun_controller_select));
|
||||
m_controller_select = 0U;
|
||||
|
||||
save_item(NAME(m_controller_select));
|
||||
}
|
||||
|
||||
|
||||
CUSTOM_INPUT_MEMBER(mw8080bw_state::desertgu_gun_input_r)
|
||||
CUSTOM_INPUT_MEMBER(desertgu_state::gun_input_r)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
if (m_desertgun_controller_select)
|
||||
ret = ioport(DESERTGU_GUN_X_PORT_TAG)->read();
|
||||
else
|
||||
ret = ioport(DESERTGU_GUN_Y_PORT_TAG)->read();
|
||||
|
||||
return ret;
|
||||
return m_gun_port[m_controller_select]->read();
|
||||
}
|
||||
|
||||
|
||||
CUSTOM_INPUT_MEMBER(mw8080bw_state::desertgu_dip_sw_0_1_r)
|
||||
CUSTOM_INPUT_MEMBER(desertgu_state::dip_sw_0_1_r)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
if (m_desertgun_controller_select)
|
||||
ret = ioport(DESERTGU_DIP_SW_0_1_SET_2_TAG)->read();
|
||||
else
|
||||
ret = ioport(DESERTGU_DIP_SW_0_1_SET_1_TAG)->read();
|
||||
|
||||
return ret;
|
||||
return m_dip_sw_0_1[m_controller_select]->read();
|
||||
}
|
||||
|
||||
|
||||
void mw8080bw_state::desertgu_io_map(address_map &map)
|
||||
void desertgu_state::io_map(address_map &map)
|
||||
{
|
||||
map.global_mask(0x7);
|
||||
map(0x00, 0x00).mirror(0x04).r(FUNC(mw8080bw_state::mw8080bw_shift_result_rev_r));
|
||||
map(0x00, 0x00).mirror(0x04).r(FUNC(desertgu_state::mw8080bw_shift_result_rev_r));
|
||||
map(0x01, 0x01).mirror(0x04).portr("IN0");
|
||||
map(0x02, 0x02).mirror(0x04).portr("IN1");
|
||||
map(0x03, 0x03).mirror(0x04).r(m_mb14241, FUNC(mb14241_device::shift_result_r));
|
||||
|
||||
map(0x01, 0x01).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
|
||||
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
|
||||
map(0x03, 0x03).w(FUNC(mw8080bw_state::desertgu_audio_1_w));
|
||||
map(0x03, 0x03).w("soundboard", FUNC(desertgu_audio_device::p1_w));
|
||||
map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
|
||||
map(0x05, 0x05).w(FUNC(mw8080bw_state::midway_tone_generator_lo_w));
|
||||
map(0x06, 0x06).w(FUNC(mw8080bw_state::midway_tone_generator_hi_w));
|
||||
map(0x07, 0x07).w(FUNC(mw8080bw_state::desertgu_audio_2_w));
|
||||
map(0x05, 0x05).w("soundboard", FUNC(desertgu_audio_device::tone_generator_lo_w));
|
||||
map(0x06, 0x06).w("soundboard", FUNC(desertgu_audio_device::tone_generator_hi_w));
|
||||
map(0x07, 0x07).w("soundboard", FUNC(desertgu_audio_device::p2_w));
|
||||
}
|
||||
|
||||
|
||||
static INPUT_PORTS_START( desertgu )
|
||||
PORT_START("IN0")
|
||||
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, desertgu_gun_input_r)
|
||||
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(desertgu_state, gun_input_r)
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, desertgu_dip_sw_0_1_r)
|
||||
PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(desertgu_state, dip_sw_0_1_r)
|
||||
PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Language ) ) PORT_CONDITION("IN1", 0x30, NOTEQUALS, 0x30) PORT_DIPLOCATION("C2:5,6")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( English ) )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( German ) )
|
||||
@ -1278,28 +1261,23 @@ static INPUT_PORTS_START( desertgu )
|
||||
PORT_DIPSETTING( 0x02, "60 seconds + 30 extended" )
|
||||
PORT_DIPSETTING( 0x03, "70 seconds + 30 extended" )
|
||||
PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_START("MUSIC_ADJ") /* 3 */
|
||||
PORT_ADJUSTER( 60, "Music Volume" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
void mw8080bw_state::desertgu(machine_config &config)
|
||||
void desertgu_state::desertgu(machine_config &config)
|
||||
{
|
||||
mw8080bw_root(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
m_maincpu->set_addrmap(AS_IO, &mw8080bw_state::desertgu_io_map);
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(mw8080bw_state,desertgu)
|
||||
// basic machine hardware
|
||||
m_maincpu->set_addrmap(AS_IO, &desertgu_state::io_map);
|
||||
|
||||
WATCHDOG_TIMER(config, m_watchdog).set_time(255 * attotime::from_hz(MW8080BW_60HZ));
|
||||
|
||||
/* add shifter */
|
||||
// add shifter
|
||||
MB14241(config, m_mb14241);
|
||||
|
||||
/* audio hardware */
|
||||
desertgu_audio(config);
|
||||
// audio hardware
|
||||
DESERTGU_AUDIO(config, "soundboard").ctrl_sel_out().set([this] (int state) { m_controller_select = state ? 1U : 0U; });
|
||||
}
|
||||
|
||||
|
||||
@ -1741,8 +1719,8 @@ void mw8080bw_state::clowns_io_map(address_map &map)
|
||||
map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
|
||||
map(0x03, 0x03).w("soundboard", FUNC(clowns_audio_device::p1_w));
|
||||
map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
|
||||
map(0x05, 0x05).w(FUNC(mw8080bw_state::midway_tone_generator_lo_w));
|
||||
map(0x06, 0x06).w(FUNC(mw8080bw_state::midway_tone_generator_hi_w));
|
||||
map(0x05, 0x05).w("soundboard", FUNC(clowns_audio_device::tone_generator_lo_w));
|
||||
map(0x06, 0x06).w("soundboard", FUNC(clowns_audio_device::tone_generator_hi_w));
|
||||
map(0x07, 0x07).w("soundboard", FUNC(clowns_audio_device::p2_w));
|
||||
}
|
||||
|
||||
@ -1790,9 +1768,6 @@ static INPUT_PORTS_START( clowns )
|
||||
|
||||
PORT_START(CLOWNS_CONTROLLER_P2_TAG)
|
||||
PORT_BIT( 0xff, 0x7f, IPT_PADDLE ) PORT_MINMAX(0x01,0xfe) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_PLAYER(2)
|
||||
|
||||
PORT_START("R507")
|
||||
PORT_ADJUSTER( 40, "R507 - Music Volume" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -1837,9 +1812,6 @@ static INPUT_PORTS_START( clowns1 )
|
||||
|
||||
PORT_START(CLOWNS_CONTROLLER_P2_TAG)
|
||||
PORT_BIT( 0xff, 0x7f, IPT_PADDLE ) PORT_MINMAX(0x01,0xfe) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_PLAYER(2)
|
||||
|
||||
PORT_START("R507")
|
||||
PORT_ADJUSTER( 40, "R507 - Music Volume" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -3171,8 +3143,8 @@ ROM_END
|
||||
/* 611 */ GAMEL( 1976, maze, 0, maze, maze, mw8080bw_state, empty_init, ROT0, "Midway", "Amazing Maze", MACHINE_SUPPORTS_SAVE, layout_maze )
|
||||
/* 612 */ GAME( 1977, boothill, 0, boothill, boothill, mw8080bw_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Boot Hill", MACHINE_SUPPORTS_SAVE )
|
||||
/* 615 */ GAME( 1977, checkmat, 0, checkmat, checkmat, mw8080bw_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Checkmate", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
/* 618 */ GAME( 1977, desertgu, 0, desertgu, desertgu, mw8080bw_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Desert Gun", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
/* 618 */ GAME( 1977, roadrunm, desertgu, desertgu, desertgu, mw8080bw_state, empty_init, ROT0, "Midway", "Road Runner (Midway)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
/* 618 */ GAME( 1977, desertgu, 0, desertgu, desertgu, desertgu_state, empty_init, ROT0, "Dave Nutting Associates / Midway", "Desert Gun", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
/* 618 */ GAME( 1977, roadrunm, desertgu, desertgu, desertgu, desertgu_state, empty_init, ROT0, "Midway", "Road Runner (Midway)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
/* 619 */ GAME( 1977, dplay, 0, dplay, dplay, mw8080bw_state, empty_init, ROT0, "Midway", "Double Play", MACHINE_SUPPORTS_SAVE )
|
||||
/* 622 */ GAMEL( 1977, lagunar, 0, zzzap, lagunar, mw8080bw_state, empty_init, ROT90, "Midway", "Laguna Racer", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE, layout_lagunar )
|
||||
/* 623 */ GAME( 1977, gmissile, 0, gmissile, gmissile, mw8080bw_state, empty_init, ROT0, "Midway", "Guided Missile", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -62,7 +62,6 @@ public:
|
||||
void bowler(machine_config &config);
|
||||
void checkmat(machine_config &config);
|
||||
void clowns(machine_config &config);
|
||||
void desertgu(machine_config &config);
|
||||
void dogpatch(machine_config &config);
|
||||
void dplay(machine_config &config);
|
||||
void gmissile(machine_config &config);
|
||||
@ -84,8 +83,6 @@ public:
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(tornbase_pitch_left_input_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(tornbase_pitch_right_input_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(tornbase_score_input_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(desertgu_gun_input_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(desertgu_dip_sw_0_1_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(dplay_pitch_left_input_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(dplay_pitch_right_input_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(clowns_controller_r);
|
||||
@ -130,7 +127,6 @@ private:
|
||||
uint16_t m_phantom2_cloud_counter;
|
||||
uint8_t m_rev_shift_res;
|
||||
uint8_t m_maze_tone_timing_state; // output of IC C1, pin 5
|
||||
uint8_t m_desertgun_controller_select;
|
||||
uint8_t m_clowns_controller_select;
|
||||
|
||||
// timers
|
||||
@ -157,7 +153,6 @@ private:
|
||||
DECLARE_WRITE8_MEMBER(bowler_audio_6_w);
|
||||
DECLARE_MACHINE_START(maze);
|
||||
DECLARE_MACHINE_START(boothill);
|
||||
DECLARE_MACHINE_START(desertgu);
|
||||
DECLARE_MACHINE_START(gmissile);
|
||||
DECLARE_MACHINE_START(m4);
|
||||
DECLARE_MACHINE_START(clowns);
|
||||
@ -172,8 +167,6 @@ private:
|
||||
DECLARE_WRITE8_MEMBER(tornbase_audio_w);
|
||||
DECLARE_WRITE8_MEMBER(boothill_audio_w);
|
||||
DECLARE_WRITE8_MEMBER(checkmat_audio_w);
|
||||
DECLARE_WRITE8_MEMBER(desertgu_audio_1_w);
|
||||
DECLARE_WRITE8_MEMBER(desertgu_audio_2_w);
|
||||
DECLARE_WRITE8_MEMBER(dplay_audio_w);
|
||||
DECLARE_WRITE8_MEMBER(spacwalk_audio_1_w);
|
||||
DECLARE_WRITE8_MEMBER(spacwalk_audio_2_w);
|
||||
@ -194,7 +187,6 @@ private:
|
||||
void boothill_audio(machine_config &config);
|
||||
void bowler_audio(machine_config &config);
|
||||
void checkmat_audio(machine_config &config);
|
||||
void desertgu_audio(machine_config &config);
|
||||
void dogpatch_audio(machine_config &config);
|
||||
void dplay_audio(machine_config &config);
|
||||
void maze_audio(machine_config &config);
|
||||
@ -208,7 +200,6 @@ private:
|
||||
void bowler_io_map(address_map &map);
|
||||
void checkmat_io_map(address_map &map);
|
||||
void clowns_io_map(address_map &map);
|
||||
void desertgu_io_map(address_map &map);
|
||||
void dogpatch_io_map(address_map &map);
|
||||
void dplay_io_map(address_map &map);
|
||||
void gmissile_io_map(address_map &map);
|
||||
@ -284,6 +275,39 @@ private:
|
||||
};
|
||||
|
||||
|
||||
#define DESERTGU_GUN_X_PORT_TAG ("GUNX")
|
||||
#define DESERTGU_GUN_Y_PORT_TAG ("GUNY")
|
||||
|
||||
#define DESERTGU_DIP_SW_0_1_SET_1_TAG ("DIPSW01SET1")
|
||||
#define DESERTGU_DIP_SW_0_1_SET_2_TAG ("DIPSW01SET2")
|
||||
|
||||
class desertgu_state : public mw8080bw_state
|
||||
{
|
||||
public:
|
||||
desertgu_state(machine_config const &mconfig, device_type type, char const *tag) :
|
||||
mw8080bw_state(mconfig, type, tag),
|
||||
m_gun_port(*this, { DESERTGU_GUN_Y_PORT_TAG, DESERTGU_GUN_X_PORT_TAG }),
|
||||
m_dip_sw_0_1(*this, { DESERTGU_DIP_SW_0_1_SET_1_TAG, DESERTGU_DIP_SW_0_1_SET_2_TAG })
|
||||
{
|
||||
}
|
||||
|
||||
void desertgu(machine_config &config);
|
||||
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(gun_input_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(dip_sw_0_1_r);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
|
||||
private:
|
||||
void io_map(address_map &map);
|
||||
|
||||
required_ioport_array<2> m_gun_port;
|
||||
required_ioport_array<2> m_dip_sw_0_1;
|
||||
u8 m_controller_select;
|
||||
};
|
||||
|
||||
|
||||
class spcenctr_state : public mw8080bw_state
|
||||
{
|
||||
public:
|
||||
@ -318,9 +342,6 @@ private:
|
||||
#define TORNBASE_CAB_TYPE_UPRIGHT_NEW (1)
|
||||
#define TORNBASE_CAB_TYPE_COCKTAIL (2)
|
||||
|
||||
#define DESERTGU_GUN_X_PORT_TAG ("GUNX")
|
||||
#define DESERTGU_GUN_Y_PORT_TAG ("GUNY")
|
||||
|
||||
#define INVADERS_CAB_TYPE_PORT_TAG ("CAB")
|
||||
#define INVADERS_P1_CONTROL_PORT_TAG ("CONTP1")
|
||||
#define INVADERS_P2_CONTROL_PORT_TAG ("CONTP2")
|
||||
|
@ -1,45 +1,29 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
license:CC0
|
||||
copyright-holders:Vas Crabb
|
||||
Midway Space Encounters layout
|
||||
-->
|
||||
<mamelayout version="2">
|
||||
<element name="reflection" defstate="0"><rect state="1" /></element>
|
||||
|
||||
<element name="lamp_red" defstate="0">
|
||||
<rect state="0">
|
||||
<color red="0" green="0" blue="0" />
|
||||
</rect>
|
||||
<rect state="1">
|
||||
<color red="1.0" green="0.25" blue="0.1" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="lamp_strobe" defstate="0">
|
||||
<rect state="0">
|
||||
<color red="0" green="0" blue="0" />
|
||||
</rect>
|
||||
<rect state="1">
|
||||
<color red="1" green="1" blue="1" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
|
||||
<!-- NOTE: color overlay is known, -->
|
||||
<!-- but as of yet (10-2012) can't be created with internal .lay -->
|
||||
|
||||
<view name="Lamps Reflection">
|
||||
|
||||
<!-- left and right edges are stripped on the cabinet -->
|
||||
<view name="Lamp/Strobe Reflection">
|
||||
<!-- left and right edges are stripped on the cabinet -->
|
||||
<bounds left="0" top="0" right="376" bottom="300" />
|
||||
<screen index="0">
|
||||
<bounds left="-8" top="0" right="392" bottom="300" />
|
||||
</screen>
|
||||
|
||||
<!-- lamp and strobe reflect onto the inner bezel (and screen) -->
|
||||
<bezel name="LAMP" element="lamp_red">
|
||||
<bounds left="0" top="0" right="376" bottom="300" />
|
||||
<color alpha="0.2" />
|
||||
</bezel>
|
||||
<bezel name="STROBE" element="lamp_strobe">
|
||||
<bounds left="0" top="0" right="376" bottom="300" />
|
||||
<color alpha="0.4" />
|
||||
</bezel>
|
||||
<!-- NOTE: color overlay is known, but as of yet (10-2012) can't be created with internal .lay -->
|
||||
|
||||
<!-- lamp and strobe reflect onto the inner bezel (and screen) -->
|
||||
<element ref="reflection" name="LAMP" blend="add">
|
||||
<color red="0.5" green="0.125" blue="0.05" />
|
||||
<bounds left="0" top="0" right="376" bottom="300" />
|
||||
</element>
|
||||
<element ref="reflection" name="STROBE" blend="add">
|
||||
<color red="0.7" green="0.7" blue="0.7" />
|
||||
<bounds left="0" top="0" right="376" bottom="300" />
|
||||
</element>
|
||||
</view>
|
||||
</mamelayout>
|
||||
|
Loading…
Reference in New Issue
Block a user