enum {
FILTER_NONE = 0,
FILTER_MODEL_A500,
- FILTER_MODEL_A1200
+ FILTER_MODEL_A1200,
+ FILTER_MODEL_A500_FIXEDONLY
};
/* Amiga has two separate filtering circuits per channel, a static RC filter
led_output = fs->rc5;
break;
+ case FILTER_MODEL_A500_FIXEDONLY:
+ fs->rc1 = (float)(a500e_filter1_a0 * input + (1.0f - a500e_filter1_a0) * fs->rc1 + DENORMAL_OFFSET);
+ fs->rc2 = a500e_filter2_a0 * fs->rc1 + (1.0f - a500e_filter2_a0) * fs->rc2;
+ normal_output = fs->rc2;
+ led_output = fs->rc2;
+ break;
+
case FILTER_MODEL_A1200:
normal_output = (float)input;
int const *winsinc;
if (sound_use_filter_sinc && ch_start == 0) {
- n = (sound_use_filter_sinc == FILTER_MODEL_A500) ? 0 : 2;
+ n = (sound_use_filter_sinc == FILTER_MODEL_A500 || sound_use_filter_sinc == FILTER_MODEL_A500_FIXEDONLY) ? 0 : 2;
if (led_filter_on)
n += 1;
} else {
sound_use_filter = FILTER_MODEL_A500;
else if (currprefs.sound_filter_type == FILTER_SOUND_TYPE_A1200)
sound_use_filter = FILTER_MODEL_A1200;
+ else if (currprefs.sound_filter_type == FILTER_SOUND_TYPE_A500_FIXEDONLY)
+ sound_use_filter = FILTER_MODEL_A500_FIXEDONLY;
}
a500e_filter1_a0 = rc_calculate_a0 (currprefs.sound_freq, 6200);
a500e_filter2_a0 = rc_calculate_a0 (currprefs.sound_freq, 20000);
static const TCHAR *flushmode[] = { _T("soft"), _T("hard"), 0 };
static const TCHAR *kbleds[] = { _T("none"), _T("POWER"), _T("DF0"), _T("DF1"), _T("DF2"), _T("DF3"), _T("HD"), _T("CD"), _T("DFx"), 0 };
static const TCHAR *onscreenleds[] = { _T("false"), _T("true"), _T("rtg"), _T("both"), 0 };
-static const TCHAR *soundfiltermode1[] = { _T("off"), _T("emulated"), _T("on"), 0 };
+static const TCHAR *soundfiltermode1[] = { _T("off"), _T("emulated"), _T("on"), _T("fixedonly"), 0 };
static const TCHAR *soundfiltermode2[] = { _T("standard"), _T("enhanced"), 0 };
static const TCHAR *lorestype1[] = { _T("lores"), _T("hires"), _T("superhires"), 0 };
static const TCHAR *lorestype2[] = { _T("true"), _T("false"), 0 };
#define IDS_NONE2 440
#define IDS_SOUND_CLONED71 441
#define IDS_SOUND_71 442
+#define IDS_SOUND_FILTER_ON_FIXEDONLY 443
#define IDS_QS_MODELS 1000
#define IDS_QS_MODEL_A500 1001
#define IDS_QS_MODEL_A500P 1002
IDS_NONE2 "<none>"
IDS_SOUND_CLONED71 "Cloned stereo (7.1)"
IDS_SOUND_71 "7.1 channels"
+ IDS_SOUND_FILTER_ON_FIXEDONLY "Always on (Fixed only)"
END
#endif // English (United Kingdom) resources
#define FILTER_SOUND_TYPE_A500 0
#define FILTER_SOUND_TYPE_A1200 1
+#define FILTER_SOUND_TYPE_A500_FIXEDONLY 2
struct dsaudiomodes {
int ch;
xSendDlgItemMessage (hDlg, IDC_SOUNDFILTER, CB_ADDSTRING, 0, (LPARAM)txt);
WIN32GUI_LoadUIString (IDS_SOUND_FILTER_ON_AGA, txt, sizeof (txt) / sizeof (TCHAR));
xSendDlgItemMessage (hDlg, IDC_SOUNDFILTER, CB_ADDSTRING, 0, (LPARAM)txt);
- WIN32GUI_LoadUIString (IDS_SOUND_FILTER_ON_A500, txt, sizeof (txt) / sizeof (TCHAR));
- xSendDlgItemMessage (hDlg, IDC_SOUNDFILTER, CB_ADDSTRING, 0, (LPARAM)txt);
+ WIN32GUI_LoadUIString(IDS_SOUND_FILTER_ON_A500, txt, sizeof(txt) / sizeof(TCHAR));
+ xSendDlgItemMessage(hDlg, IDC_SOUNDFILTER, CB_ADDSTRING, 0, (LPARAM)txt);
+ WIN32GUI_LoadUIString(IDS_SOUND_FILTER_ON_FIXEDONLY, txt, sizeof(txt) / sizeof(TCHAR));
+ xSendDlgItemMessage(hDlg, IDC_SOUNDFILTER, CB_ADDSTRING, 0, (LPARAM)txt);
i = 0;
switch (workprefs.sound_filter)
{
i = workprefs.sound_filter_type ? 2 : 1;
break;
case 2:
- i = workprefs.sound_filter_type ? 4 : 3;
+ i = workprefs.sound_filter_type == 2 ? 5 : (workprefs.sound_filter_type == 1 ? 4 : 3);
break;
}
xSendDlgItemMessage (hDlg, IDC_SOUNDFILTER, CB_SETCURSEL, i, 0);
workprefs.sound_filter = FILTER_SOUND_ON;
workprefs.sound_filter_type = 1;
break;
+ case 5:
+ workprefs.sound_filter = FILTER_SOUND_ON;
+ workprefs.sound_filter_type = 2;
+ break;
}
workprefs.sound_stereo_swap_paula = (xSendDlgItemMessage (hDlg, IDC_SOUNDSWAP, CB_GETCURSEL, 0, 0) & 1) ? 1 : 0;