mirror of
https://github.com/holub/mame
synced 2025-04-26 10:13:37 +03:00
Added discrete mixing and filtering to irem games using m52-sound-c boards: mpatrol, travrusa
This commit is contained in:
parent
7590822c23
commit
5ac45d5a80
@ -10,6 +10,7 @@
|
|||||||
#include "cpu/m6800/m6800.h"
|
#include "cpu/m6800/m6800.h"
|
||||||
#include "sound/ay8910.h"
|
#include "sound/ay8910.h"
|
||||||
#include "sound/msm5205.h"
|
#include "sound/msm5205.h"
|
||||||
|
#include "sound/discrete.h"
|
||||||
|
|
||||||
static UINT8 port1, port2;
|
static UINT8 port1, port2;
|
||||||
|
|
||||||
@ -120,11 +121,13 @@ static WRITE8_HANDLER( ay8910_0_portb_w )
|
|||||||
{
|
{
|
||||||
/* bits 2-4 select MSM5205 clock & 3b/4b playback mode */
|
/* bits 2-4 select MSM5205 clock & 3b/4b playback mode */
|
||||||
MSM5205_playmode_w(0, (data >> 2) & 7);
|
MSM5205_playmode_w(0, (data >> 2) & 7);
|
||||||
MSM5205_playmode_w(1, ((data >> 2) & 4) | 3); /* always in slave mode */
|
if (sndti_exists(SOUND_MSM5205, 1))
|
||||||
|
MSM5205_playmode_w(1, ((data >> 2) & 4) | 3); /* always in slave mode */
|
||||||
|
|
||||||
/* bits 0 and 1 reset the two chips */
|
/* bits 0 and 1 reset the two chips */
|
||||||
MSM5205_reset_w(0, data & 1);
|
MSM5205_reset_w(0, data & 1);
|
||||||
MSM5205_reset_w(1, data & 2);
|
if (sndti_exists(SOUND_MSM5205, 1))
|
||||||
|
MSM5205_reset_w(1, data & 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -153,7 +156,7 @@ static WRITE8_HANDLER( m52_adpcm_w )
|
|||||||
{
|
{
|
||||||
if (offset & 1)
|
if (offset & 1)
|
||||||
MSM5205_data_w(0, data);
|
MSM5205_data_w(0, data);
|
||||||
if (offset & 2)
|
if ((offset & 2) && sndti_exists(SOUND_MSM5205, 1))
|
||||||
MSM5205_data_w(1, data);
|
MSM5205_data_w(1, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,8 +179,11 @@ static void adpcm_int(int data)
|
|||||||
cpunum_set_input_line(Machine, 1, INPUT_LINE_NMI, PULSE_LINE);
|
cpunum_set_input_line(Machine, 1, INPUT_LINE_NMI, PULSE_LINE);
|
||||||
|
|
||||||
/* the first MSM5205 clocks the second */
|
/* the first MSM5205 clocks the second */
|
||||||
MSM5205_vclk_w(1,1);
|
if (sndti_exists(SOUND_MSM5205, 1))
|
||||||
MSM5205_vclk_w(1,0);
|
{
|
||||||
|
MSM5205_vclk_w(1,1);
|
||||||
|
MSM5205_vclk_w(1,0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -188,10 +194,14 @@ static void adpcm_int(int data)
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
|
/* All 6 (3*2) AY-3-8910 outputs are tied together
|
||||||
|
* and put with 470 KOhm to gnd.
|
||||||
|
* The following is a approximation */
|
||||||
|
|
||||||
static const struct AY8910interface irem_ay8910_interface_1 =
|
static const struct AY8910interface irem_ay8910_interface_1 =
|
||||||
{
|
{
|
||||||
AY8910_LEGACY_OUTPUT,
|
AY8910_SINGLE_OUTPUT,
|
||||||
AY8910_DEFAULT_LOADS,
|
{470, 0, 0},
|
||||||
soundlatch_r,
|
soundlatch_r,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
@ -200,8 +210,8 @@ static const struct AY8910interface irem_ay8910_interface_1 =
|
|||||||
|
|
||||||
static const struct AY8910interface irem_ay8910_interface_2 =
|
static const struct AY8910interface irem_ay8910_interface_2 =
|
||||||
{
|
{
|
||||||
AY8910_LEGACY_OUTPUT,
|
AY8910_SINGLE_OUTPUT,
|
||||||
AY8910_DEFAULT_LOADS,
|
{470, 0, 0},
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
ay8910_1_porta_w,
|
ay8910_1_porta_w,
|
||||||
@ -220,7 +230,91 @@ static const struct MSM5205interface irem_msm5205_interface_2 =
|
|||||||
MSM5205_SEX_4B /* default to 4KHz, but can be changed at run time, slave */
|
MSM5205_SEX_4B /* default to 4KHz, but can be changed at run time, slave */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* http://newsgroups.derkeiler.com/Archive/Rec/rec.games.video.arcade.collecting/2006-06/msg03108.html
|
||||||
|
*
|
||||||
|
* mentions, that moon patrol does work on moon ranger hardware.
|
||||||
|
* There is no MSM5250, but a 74LS00 producing white noise for explosions
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Certain values are different from schematics
|
||||||
|
* I did my test to verify against pcb pictures of "tropical angel"
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define M52_R12 RES_K(10)
|
||||||
|
#define M52_R13 RES_K(10)
|
||||||
|
#define M52_R14 RES_K(10)
|
||||||
|
#define M52_R15 RES_K(2.2) /* schematics RES_K(22) */
|
||||||
|
#define M52_R19 RES_K(10)
|
||||||
|
#define M52_R22 RES_K(4.7) /* schematics RES_K(47) */
|
||||||
|
#define M52_R23 RES_K(2.2)
|
||||||
|
#define M52_R25 RES_K(10)
|
||||||
|
#define M52_VR1 RES_K(50)
|
||||||
|
|
||||||
|
#define M52_C30 CAP_U(0.022)
|
||||||
|
#define M52_C32 CAP_U(0.022)
|
||||||
|
#define M52_C35 CAP_U(47)
|
||||||
|
#define M52_C37 CAP_U(0.1)
|
||||||
|
#define M52_C38 CAP_U(0.0068)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* C35 is disabled, the mixer would just deliver
|
||||||
|
* no signals if it is enabled.
|
||||||
|
* TODO: Check discrete mixer
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const discrete_mixer_desc m52_sound_c_stage1 =
|
||||||
|
{DISC_MIXER_IS_RESISTOR,
|
||||||
|
{M52_R19, M52_R22 },
|
||||||
|
{ 0, 0 }, /* variable resistors */
|
||||||
|
{M52_C37, 0 }, /* node capacitors */
|
||||||
|
0, M52_R23, /* rI, rF */
|
||||||
|
M52_C35*0, /* cF */
|
||||||
|
0, /* cAmp */
|
||||||
|
0, 1};
|
||||||
|
|
||||||
|
static const discrete_op_amp_filt_info m52_sound_c_sallen_key =
|
||||||
|
{ M52_R13, M52_R14, 0, 0, 0,
|
||||||
|
M52_C32, M52_C38, 0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const discrete_mixer_desc m52_sound_c_mix1 =
|
||||||
|
{DISC_MIXER_IS_RESISTOR,
|
||||||
|
{M52_R25, M52_R15 },
|
||||||
|
{ 0, 0 }, /* variable resistors */
|
||||||
|
{ 0, 0 }, /* node capacitors */
|
||||||
|
0, M52_VR1, /* rI, rF */
|
||||||
|
0, /* cF */
|
||||||
|
CAP_U(1), /* cAmp */
|
||||||
|
0, 1};
|
||||||
|
|
||||||
|
static DISCRETE_SOUND_START( m52_sound_c )
|
||||||
|
|
||||||
|
/* Chip AY8910/1 */
|
||||||
|
DISCRETE_INPUTX_STREAM(NODE_01, 0, 1.0, 0)
|
||||||
|
/* Chip AY8910/2 */
|
||||||
|
DISCRETE_INPUTX_STREAM(NODE_02, 1, 1.0, 0)
|
||||||
|
/* Chip MSM5250 */
|
||||||
|
DISCRETE_INPUTX_STREAM(NODE_03, 2, 1.0, 0)
|
||||||
|
|
||||||
|
/* Just mix the two AY8910s */
|
||||||
|
DISCRETE_ADDER2(NODE_09, 1, NODE_01, NODE_02)
|
||||||
|
DISCRETE_DIVIDE(NODE_10, 1, NODE_09, 2.0)
|
||||||
|
|
||||||
|
/* Mix in 5 V to MSM5250 signal */
|
||||||
|
DISCRETE_MIXER2(NODE_20, 1, NODE_03, 32767.0, &m52_sound_c_stage1)
|
||||||
|
|
||||||
|
/* Sallen - Key Filter */
|
||||||
|
/* TODO: R12, C30: This looks like a band pass */
|
||||||
|
DISCRETE_SALLEN_KEY_FILTER(NODE_30, 1, NODE_20, DISC_SALLEN_KEY_LOW_PASS, &m52_sound_c_sallen_key)
|
||||||
|
|
||||||
|
/* Mix signals */
|
||||||
|
DISCRETE_MIXER2(NODE_40, 1, NODE_10, NODE_30, &m52_sound_c_mix1)
|
||||||
|
|
||||||
|
DISCRETE_OUTPUT(NODE_40, 18.0)
|
||||||
|
|
||||||
|
DISCRETE_SOUND_END
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
@ -293,15 +387,35 @@ static MACHINE_DRIVER_START( irem_audio_base )
|
|||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
|
MACHINE_DRIVER_START( m52_sound_c_audio )
|
||||||
|
|
||||||
MACHINE_DRIVER_START( m52_small_audio )
|
MDRV_SOUND_START(irem_audio)
|
||||||
MDRV_IMPORT_FROM(irem_audio_base)
|
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MDRV_CPU_MODIFY("iremsound")
|
MDRV_CPU_ADD_TAG("iremsound", M6803, XTAL_3_579545MHz) /* verified on pcb */
|
||||||
|
MDRV_CPU_IO_MAP(irem_sound_portmap,0)
|
||||||
MDRV_CPU_PROGRAM_MAP(m52_small_sound_map,0)
|
MDRV_CPU_PROGRAM_MAP(m52_small_sound_map,0)
|
||||||
MACHINE_DRIVER_END
|
|
||||||
|
/* sound hardware */
|
||||||
|
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||||
|
|
||||||
|
MDRV_SOUND_ADD_TAG("ay8910.0", AY8910, XTAL_3_579545MHz/4) /* verified on pcb */
|
||||||
|
MDRV_SOUND_CONFIG(irem_ay8910_interface_1)
|
||||||
|
MDRV_SOUND_ROUTE_EX(0, "filtermix", 1.0, 0)
|
||||||
|
|
||||||
|
MDRV_SOUND_ADD_TAG("ay8910.0", AY8910, XTAL_3_579545MHz/4) /* verified on pcb */
|
||||||
|
MDRV_SOUND_CONFIG(irem_ay8910_interface_2)
|
||||||
|
MDRV_SOUND_ROUTE_EX(0, "filtermix", 1.0, 1)
|
||||||
|
|
||||||
|
MDRV_SOUND_ADD_TAG("msm5250", MSM5205, XTAL_384kHz) /* verified on pcb */
|
||||||
|
MDRV_SOUND_CONFIG(irem_msm5205_interface_1)
|
||||||
|
MDRV_SOUND_ROUTE_EX(0, "filtermix", 1.0, 2)
|
||||||
|
|
||||||
|
MDRV_SOUND_ADD_TAG("filtermix", DISCRETE, 0)
|
||||||
|
MDRV_SOUND_CONFIG_DISCRETE(m52_sound_c)
|
||||||
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||||
|
|
||||||
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
MACHINE_DRIVER_START( m52_large_audio ) /* 10 yard fight */
|
MACHINE_DRIVER_START( m52_large_audio ) /* 10 yard fight */
|
||||||
MDRV_IMPORT_FROM(irem_audio_base)
|
MDRV_IMPORT_FROM(irem_audio_base)
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
MACHINE_DRIVER_EXTERN( m52_small_audio );
|
MACHINE_DRIVER_EXTERN( m52_sound_c_audio );
|
||||||
MACHINE_DRIVER_EXTERN( m52_large_audio );
|
MACHINE_DRIVER_EXTERN( m52_large_audio );
|
||||||
MACHINE_DRIVER_EXTERN( m62_audio );
|
MACHINE_DRIVER_EXTERN( m62_audio );
|
||||||
|
|
||||||
|
@ -401,7 +401,7 @@ static MACHINE_DRIVER_START( m52 )
|
|||||||
MDRV_VIDEO_UPDATE(m52)
|
MDRV_VIDEO_UPDATE(m52)
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MDRV_IMPORT_FROM(m52_small_audio)
|
MDRV_IMPORT_FROM(m52_sound_c_audio)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -244,7 +244,7 @@ static MACHINE_DRIVER_START( m57 )
|
|||||||
MDRV_VIDEO_UPDATE(m57)
|
MDRV_VIDEO_UPDATE(m57)
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MDRV_IMPORT_FROM(m52_small_audio)
|
MDRV_IMPORT_FROM(m52_sound_c_audio)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -349,7 +349,7 @@ static MACHINE_DRIVER_START( travrusa )
|
|||||||
MDRV_VIDEO_UPDATE(travrusa)
|
MDRV_VIDEO_UPDATE(travrusa)
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MDRV_IMPORT_FROM(m52_small_audio)
|
MDRV_IMPORT_FROM(m52_sound_c_audio)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( shtrider )
|
static MACHINE_DRIVER_START( shtrider )
|
||||||
|
Loading…
Reference in New Issue
Block a user