_T("none"),
_T("robocop 3"), _T("leaderboard"), _T("b.a.t. ii"), _T("italy'90 soccer"), _T("dames grand maitre"),
_T("rugby coach"), _T("cricket captain"), _T("leviathan"), _T("musicmaster"),
+ _T("logistics"), _T("scala red"), _T("scala green"),
NULL
};
static const TCHAR *cdmodes[] = { _T("disabled"), _T(""), _T("image"), _T("ioctl"), _T("spti"), _T("aspi"), 0 };
#define LEVIATHAN 8
#define MUSICMASTER 9
#define LOGISTIX 10
+#define SCALA_RED 11
+#define SCALA_GREEN 12
-static int flag;
+static int dflag;
static unsigned int cycles;
/*
- first JOY1DAT AND 0x0303 must be zero.
- following JOY1DAT AND 0x0303 reads must be nonzero.
+Scala MM (Green)
+
+- 470nF Capacitor between fire button and second button pin
+- Drives firebutton high, then low
+- Polls POTGOR second button pin, it must go low between about 30000-150000 DMA cycles.
+
+Scala MM (Red)
+
+- 10uF Capacitor between fire button and second button pin
+- Drives firebutton high, then low
+- Polls POTGOR second button pin, it must go low between about ?? DMA cycles.
+
*/
static uae_u8 oldcia[2][16];
void dongle_reset (void)
{
- flag = 0;
+ dflag = 0;
memset (oldcia, 0, sizeof oldcia);
}
{
case BAT2:
if (cia == 1 && reg == 0) {
- if (!flag || get_cycles () > cycles + CYCLE_UNIT * 200) {
+ if (!dflag || get_cycles () > cycles + CYCLE_UNIT * 200) {
val &= ~0x10;
- flag = 0;
+ dflag = 0;
} else {
val |= 0x10;
}
return;
switch (currprefs.dongle)
{
+ case SCALA_GREEN:
+ case SCALA_RED:
+ if (cia == 0 && reg == 0) {
+ if ((val & 0x80) != dflag) {
+ dflag = val & 0x80;
+ cycles = get_cycles();
+ }
+ }
+ break;
case ROBOCOP3:
if (cia == 0 && reg == 0 && (val & 0x80))
- flag ^= 1;
+ dflag ^= 1;
break;
case BAT2:
if (cia == 1 && reg == 0 && !(val & 0x80)) {
- flag = 1;
+ dflag = 1;
cycles = get_cycles ();
}
break;
case MUSICMASTER:
if (cia == 0 && reg == 0) {
if (!(val & 0x80) && (extra & 0x80)) {
- flag = 1;
+ dflag = 1;
} else {
- flag = 0;
+ dflag = 0;
}
}
break;
switch (currprefs.dongle)
{
case ROBOCOP3:
- if (port == 1 && flag)
+ if (port == 1 && dflag)
val += 0x100;
break;
case LEADERBOARD:
case CRICKETCAPTAIN:
if (port == 0) {
val &= ~0x0003;
- if (flag == 0)
+ if (dflag == 0)
val |= 0x0001;
else
val |= 0x0002;
}
- flag ^= 1;
+ dflag ^= 1;
break;
case MUSICMASTER:
- if (port == 1 && !flag) {
+ if (port == 1 && !dflag) {
val = 0;
- } else if (port == 1 && flag == 1) {
+ } else if (port == 1 && dflag == 1) {
val = 0;
- flag++;
- } else if (port == 1 && flag == 2) {
+ dflag++;
+ } else if (port == 1 && dflag == 2) {
val = 0x0303;
}
break;
case ITALY90:
case LOGISTIX:
case DAMESGRANDMAITRE:
- flag = (uaerand () & 7) - 3;
+ dflag = (uaerand () & 7) - 3;
break;
}
case LOGISTIX:
val |= 1 << 14;
break;
+ case SCALA_RED:
+ case SCALA_GREEN:
+ if ((dflag & 1) || get_cycles() >= cycles + CYCLE_UNIT * 80000 * (currprefs.dongle == SCALA_RED ? 21 : 1)) {
+ if (dflag & 0x80)
+ val |= 1 << 14;
+ else
+ val &= ~(1 << 14);
+ dflag |= 1;
+ }
+ break;
}
return val;
}
}
if (v >= 0) {
- v += flag;
+ v += dflag;
if (v < 0)
v = 0;
}
SendDlgItemMessage(hDlg, IDC_DONGLELIST, CB_ADDSTRING, 0, (LPARAM)_T("Cricket Captain"));
SendDlgItemMessage(hDlg, IDC_DONGLELIST, CB_ADDSTRING, 0, (LPARAM)_T("Leviathan"));
SendDlgItemMessage(hDlg, IDC_DONGLELIST, CB_ADDSTRING, 0, (LPARAM)_T("Music Master"));
+ SendDlgItemMessage(hDlg, IDC_DONGLELIST, CB_ADDSTRING, 0, (LPARAM)_T("Logistics/SuperBase"));
+ SendDlgItemMessage(hDlg, IDC_DONGLELIST, CB_ADDSTRING, 0, (LPARAM)_T("Scala MM (Red)"));
+ SendDlgItemMessage(hDlg, IDC_DONGLELIST, CB_ADDSTRING, 0, (LPARAM)_T("Scala MM (Green)"));
SendDlgItemMessage (hDlg, IDC_SERIAL, CB_RESETCONTENT, 0, 0L);
SendDlgItemMessage (hDlg, IDC_SERIAL, CB_ADDSTRING, 0, (LPARAM)szNone.c_str());