diff --git a/src/emu/sound/x1_010.c b/src/emu/sound/x1_010.c index 1025f9d99d4..4d6741c844c 100644 --- a/src/emu/sound/x1_010.c +++ b/src/emu/sound/x1_010.c @@ -90,6 +90,7 @@ x1_010_device::x1_010_device(const machine_config &mconfig, const char *tag, dev m_region(*this, DEVICE_SELF), m_rate(0), m_adr(0), + m_divider(0), m_stream(NULL), m_sound_enable(0), m_base_clock(0) @@ -212,7 +213,7 @@ void x1_010_device::sound_stream_update(sound_stream &stream, stream_sample_t ** volL = ((reg->volume>>4)&0xf)*VOL_BASE; volR = ((reg->volume>>0)&0xf)*VOL_BASE; smp_offs = m_smp_offset[ch]; - freq = reg->frequency; + freq = reg->frequency>>m_divider; // Meta Fox does write the frequency register, but this is a hack to make it "work" with the current setup // This is broken for Arbalester (it writes 8), but that'll be fixed later. if( freq == 0 ) freq = 4; @@ -238,7 +239,7 @@ void x1_010_device::sound_stream_update(sound_stream &stream, stream_sample_t ** } else { // Wave form start = (INT8 *)&(m_reg[reg->volume*128+0x1000]); smp_offs = m_smp_offset[ch]; - freq = (reg->pitch_hi<<8)+reg->frequency; + freq = ((reg->pitch_hi<<8)+reg->frequency)>>m_divider; smp_step = (UINT32)((float)m_base_clock/128.0f/1024.0f/4.0f*freq*(1<end*128]); diff --git a/src/emu/sound/x1_010.h b/src/emu/sound/x1_010.h index a5026124210..7b6e8b6c883 100644 --- a/src/emu/sound/x1_010.h +++ b/src/emu/sound/x1_010.h @@ -16,7 +16,8 @@ public: // static configuration static void set_address(device_t &device, int addr) { downcast(device).m_adr = addr; } - + static void set_divider(device_t &device, int div) { downcast(device).m_divider = div; } + DECLARE_READ8_MEMBER ( read ); DECLARE_WRITE8_MEMBER( write ); @@ -38,6 +39,7 @@ private: required_region_ptr m_region; // ROM int m_rate; // Output sampling rate (Hz) int m_adr; // address + int m_divider; // Frequency divider (used by downtown) sound_stream * m_stream; // Stream handle int m_sound_enable; // sound output enable/disable UINT8 m_reg[0x2000]; // X1-010 Register & wave form area @@ -53,6 +55,7 @@ extern const device_type X1_010; #define MCFG_X1_010_ADDRESS(_addr) \ x1_010_device::set_address(*device, _addr); - +#define MCFG_X1_010_DIVIDER(_div) \ + x1_010_device::set_divider(*device, _div); #endif /* __X1_010_H__ */ diff --git a/src/mame/drivers/seta.c b/src/mame/drivers/seta.c index 08c7af95f61..63bded42e7d 100644 --- a/src/mame/drivers/seta.c +++ b/src/mame/drivers/seta.c @@ -7823,6 +7823,7 @@ static MACHINE_CONFIG_START( downtown, seta_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("x1snd", X1_010, 16000000) /* 16 MHz */ + MCFG_X1_010_DIVIDER(1) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END