Removed static config in RC filter and small cleanup (nw)

This commit is contained in:
Miodrag Milanovic 2014-09-13 13:51:34 +00:00
parent 0ef3b9ec0b
commit c3746c52b5
3 changed files with 41 additions and 41 deletions

View File

@ -2,9 +2,6 @@
#include "flt_rc.h" #include "flt_rc.h"
const flt_rc_config flt_rc_ac_default = {FLT_RC_AC, 10000, 0, 0, CAP_U(1)};
// device type definition // device type definition
const device_type FILTER_RC = &device_creator<filter_rc_device>; const device_type FILTER_RC = &device_creator<filter_rc_device>;
@ -23,7 +20,11 @@ filter_rc_device::filter_rc_device(const machine_config &mconfig, const char *ta
m_stream(NULL), m_stream(NULL),
m_k(0), m_k(0),
m_memory(0), m_memory(0),
m_type(0) m_type(FLT_RC_LOWPASS),
m_R1(1),
m_R2(1),
m_R3(1),
m_C(0)
{ {
} }
@ -34,13 +35,8 @@ filter_rc_device::filter_rc_device(const machine_config &mconfig, const char *ta
void filter_rc_device::device_start() void filter_rc_device::device_start()
{ {
const flt_rc_config *conf = (const flt_rc_config *)static_config();
m_stream = stream_alloc(1, 1, machine().sample_rate()); m_stream = stream_alloc(1, 1, machine().sample_rate());
if (conf) recalc();
set_RC_info(conf->type, conf->R1, conf->R2, conf->R3, conf->C);
else
set_RC_info(FLT_RC_LOWPASS, 1, 1, 1, 0);
} }
@ -76,33 +72,31 @@ void filter_rc_device::sound_stream_update(sound_stream &stream, stream_sample_t
} }
void filter_rc_device::set_RC_info(int type, double R1, double R2, double R3, double C) void filter_rc_device::recalc()
{ {
double Req; double Req;
m_type = type;
switch (m_type) switch (m_type)
{ {
case FLT_RC_LOWPASS: case FLT_RC_LOWPASS:
if (C == 0.0) if (m_C == 0.0)
{ {
/* filter disabled */ /* filter disabled */
m_k = 0x10000; m_k = 0x10000;
return; return;
} }
Req = (R1 * (R2 + R3)) / (R1 + R2 + R3); Req = (m_R1 * (m_R2 + m_R3)) / (m_R1 + m_R2 + m_R3);
break; break;
case FLT_RC_HIGHPASS: case FLT_RC_HIGHPASS:
case FLT_RC_AC: case FLT_RC_AC:
if (C == 0.0) if (m_C == 0.0)
{ {
/* filter disabled */ /* filter disabled */
m_k = 0x0; m_k = 0x0;
m_memory = 0x0; m_memory = 0x0;
return; return;
} }
Req = R1; Req = m_R1;
break; break;
default: default:
fatalerror("filter_rc_setRC: Wrong filter type %d\n", m_type); fatalerror("filter_rc_setRC: Wrong filter type %d\n", m_type);
@ -110,12 +104,26 @@ void filter_rc_device::set_RC_info(int type, double R1, double R2, double R3, do
/* Cut Frequency = 1/(2*Pi*Req*C) */ /* Cut Frequency = 1/(2*Pi*Req*C) */
/* k = (1-(EXP(-TIMEDELTA/RC))) */ /* k = (1-(EXP(-TIMEDELTA/RC))) */
m_k = 0x10000 - 0x10000 * (exp(-1 / (Req * C) / machine().sample_rate())); m_k = 0x10000 - 0x10000 * (exp(-1 / (Req * m_C) / machine().sample_rate()));
} }
void filter_rc_device::filter_rc_set_RC(int type, double R1, double R2, double R3, double C) void filter_rc_device::filter_rc_set_RC(int type, double R1, double R2, double R3, double C)
{ {
m_stream->update(); m_stream->update();
set_RC_info(type, R1, R2, R3, C); m_type = type;
m_R1 = R1;
m_R2 = R2;
m_R3 = R3;
m_C = C;
recalc();
}
void filter_rc_device::static_set_rc(device_t &device, int type, double R1, double R2, double R3, double C)
{
downcast<filter_rc_device &>(device).m_type = type;
downcast<filter_rc_device &>(device).m_R1 = R1;
downcast<filter_rc_device &>(device).m_R2 = R2;
downcast<filter_rc_device &>(device).m_R3 = R3;
downcast<filter_rc_device &>(device).m_C = C;
} }

View File

@ -31,8 +31,8 @@
* Same as FLT_RC_HIGHPASS, but with standard frequency of 16 HZ * Same as FLT_RC_HIGHPASS, but with standard frequency of 16 HZ
* This filter may be setup just with * This filter may be setup just with
* *
* MCFG_SOUND_ADD("tag", FILTER_RC, 0) * MCFG_FILTER_RC_ADD("tag", 0)
* MCFG_SOUND_CONFIG(&flt_rc_ac_default) * MCFG_FILTER_RC_AC(&flt_rc_ac_default)
* *
* Default behaviour: * Default behaviour:
* *
@ -46,9 +46,13 @@
#define MCFG_FILTER_RC_ADD(_tag, _clock) \ #define MCFG_FILTER_RC_ADD(_tag, _clock) \
MCFG_DEVICE_ADD(_tag, FILTER_RC, _clock) MCFG_DEVICE_ADD(_tag, FILTER_RC, _clock)
#define MCFG_FILTER_RC_REPLACE(_tag, _clock) \ #define MCFG_FILTER_RC_REPLACE(_tag, _clock) \
MCFG_DEVICE_REPLACE(_tag, FILTER_RC, _clock) MCFG_DEVICE_REPLACE(_tag, FILTER_RC, _clock)
#define MCFG_FILTER_RC_AC() \
filter_rc_device::static_set_rc(*device, FLT_RC_AC, 10000, 0, 0, CAP_U(1));
//************************************************************************** //**************************************************************************
// TYPE DEFINITIONS // TYPE DEFINITIONS
@ -58,18 +62,6 @@
#define FLT_RC_HIGHPASS 1 #define FLT_RC_HIGHPASS 1
#define FLT_RC_AC 2 #define FLT_RC_AC 2
struct flt_rc_config
{
int type;
double R1;
double R2;
double R3;
double C;
};
extern const flt_rc_config flt_rc_ac_default;
// ======================> filter_rc_device // ======================> filter_rc_device
class filter_rc_device : public device_t, class filter_rc_device : public device_t,
@ -79,6 +71,9 @@ public:
filter_rc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); filter_rc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
~filter_rc_device() { } ~filter_rc_device() { }
// static configuration
static void static_set_rc(device_t &device, int type, double R1, double R2, double R3, double C);
void filter_rc_set_RC(int type, double R1, double R2, double R3, double C); void filter_rc_set_RC(int type, double R1, double R2, double R3, double C);
protected: protected:
@ -89,16 +84,19 @@ protected:
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
private: private:
void set_RC_info(int type, double R1, double R2, double R3, double C); void recalc();
private: private:
sound_stream* m_stream; sound_stream* m_stream;
int m_k; int m_k;
int m_memory; int m_memory;
int m_type; int m_type;
double m_R1;
double m_R2;
double m_R3;
double m_C;
}; };
extern const device_type FILTER_RC; extern const device_type FILTER_RC;
#endif /* __FLT_RC_H__ */ #endif /* __FLT_RC_H__ */

View File

@ -1519,10 +1519,6 @@ void _39in1_state::pxa255_start()
{ {
int index = 0; int index = 0;
//pxa255_t* pxa255 = pxa255_get_safe_token( device );
//pxa255->iface = device->base_config().static_config();
for(index = 0; index < 16; index++) for(index = 0; index < 16; index++)
{ {
m_dma_regs.dcsr[index] = 0x00000008; m_dma_regs.dcsr[index] = 0x00000008;
@ -1543,8 +1539,6 @@ void _39in1_state::pxa255_start()
m_lcd_regs.dma[1].eof = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(_39in1_state::pxa255_lcd_dma_eof),this)); m_lcd_regs.dma[1].eof = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(_39in1_state::pxa255_lcd_dma_eof),this));
m_lcd_regs.trgbr = 0x00aa5500; m_lcd_regs.trgbr = 0x00aa5500;
m_lcd_regs.tcr = 0x0000754f; m_lcd_regs.tcr = 0x0000754f;
//pxa255_register_state_save(device);
} }
void _39in1_state::machine_start() void _39in1_state::machine_start()