summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/sound/disc_flt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/sound/disc_flt.c')
-rw-r--r--src/emu/sound/disc_flt.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/emu/sound/disc_flt.c b/src/emu/sound/disc_flt.c
index 8e7ad3df977..155126afe71 100644
--- a/src/emu/sound/disc_flt.c
+++ b/src/emu/sound/disc_flt.c
@@ -148,7 +148,7 @@ static DISCRETE_STEP(dst_crfilter)
{
struct dst_rcfilter_context *context = (struct dst_rcfilter_context *)node->context;
- if (context->has_rc_nodes)
+ if (UNEXPECTED(context->has_rc_nodes))
{
double rc = DST_CRFILTER__R * DST_CRFILTER__C;
if (rc != context->rc)
@@ -1033,7 +1033,7 @@ static DISCRETE_STEP(dst_rcfilter)
{
struct dst_rcfilter_context *context = (struct dst_rcfilter_context *)node->context;
- if (context->has_rc_nodes)
+ if (UNEXPECTED(context->has_rc_nodes))
{
double rc = DST_RCFILTER__R * DST_RCFILTER__C;
if (rc != context->rc)
@@ -1051,6 +1051,12 @@ static DISCRETE_STEP(dst_rcfilter)
node->output[0] = context->vCap + DST_RCFILTER__VREF;
}
+static DISCRETE_STEP(dst_rcfilter_fast)
+{
+ struct dst_rcfilter_context *context = (struct dst_rcfilter_context *)node->context;
+ node->output[0] += ((DST_RCFILTER__VIN - node->output[0]) * context->exponent);
+}
+
static DISCRETE_RESET(dst_rcfilter)
{
struct dst_rcfilter_context *context = (struct dst_rcfilter_context *)node->context;
@@ -1060,6 +1066,8 @@ static DISCRETE_RESET(dst_rcfilter)
context->exponent = RC_CHARGE_EXP(context->rc);
context->vCap = 0;
node->output[0] = 0;
+ if (!context->has_rc_nodes && DST_RCFILTER__VREF == 0)
+ node->step = DISCRETE_STEP_NAME(dst_rcfilter_fast);
}
/************************************************************************