]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Music Master dongle.
authorToni Wilen <twilen@winuae.net>
Sun, 29 Oct 2017 11:36:00 +0000 (13:36 +0200)
committerToni Wilen <twilen@winuae.net>
Sun, 29 Oct 2017 11:36:00 +0000 (13:36 +0200)
cia.cpp
dongle.cpp
include/dongle.h

diff --git a/cia.cpp b/cia.cpp
index 4b1eb465cd78d108d031f846a5151ae88d58f7e1..f34a7023519624c075a6564fb3eb0e2091fa31da 100644 (file)
--- a/cia.cpp
+++ b/cia.cpp
@@ -1045,7 +1045,7 @@ static uae_u8 ReadCIAA (unsigned int addr, uae_u32 *flags)
                uae_u8 v = DISK_status_ciaa() & 0x3c;
                v |= handle_joystick_buttons (ciaapra, ciaadra);
                v |= (ciaapra | (ciaadra ^ 3)) & 0x03;
-               v = dongle_cia_read (0, reg, v);
+               v = dongle_cia_read (0, reg, ciaadra, v);
                v = alg_joystick_buttons(ciaapra, ciaadra, v);
 #if DONGLE_DEBUG > 0
                if (notinrom())
@@ -1084,7 +1084,7 @@ static uae_u8 ReadCIAA (unsigned int addr, uae_u32 *flags)
 
                } else {
                        tmp = handle_parport_joystick (0, ciaaprb, ciaadrb);
-                       tmp = dongle_cia_read (1, reg, tmp);
+                       tmp = dongle_cia_read (1, reg, ciaadrb, tmp);
 #if DONGLE_DEBUG > 0
                        if (notinrom())
                                write_log (_T("BFE101 R %02X %s\n"), tmp, debuginfo(0));
@@ -1224,7 +1224,7 @@ static uae_u8 ReadCIAB (unsigned int addr, uae_u32 *flags)
                        tmp |= handle_parport_joystick (1, ciabpra, ciabdra);
                }
 #endif
-               tmp = dongle_cia_read (1, reg, tmp);
+               tmp = dongle_cia_read (1, reg, ciabpra, tmp);
 #if DONGLE_DEBUG > 0
                if (notinrom ())
                        write_log (_T("BFD000 R %02X %s\n"), tmp, debuginfo(0));
@@ -1237,7 +1237,7 @@ static uae_u8 ReadCIAB (unsigned int addr, uae_u32 *flags)
 #endif
                tmp = ciabprb;
                tmp = DISK_status_ciab(tmp);
-               tmp = dongle_cia_read (1, reg, tmp);
+               tmp = dongle_cia_read (1, reg, ciabprb, tmp);
                if (ciabcrb & 2) {
                        int pb7 = 0;
                        if (ciabcrb & 4)
@@ -1349,7 +1349,7 @@ static void WriteCIAA (uae_u16 addr, uae_u8 val, uae_u32 *flags)
                ciaapra = (ciaapra & ~0xc3) | (val & 0xc3);
                bfe001_change ();
                handle_cd32_joystick_cia (ciaapra, ciaadra);
-               dongle_cia_write (0, reg, val);
+               dongle_cia_write (0, reg, ciaadra, val);
 #ifdef AMAX
                if (is_device_rom(&currprefs, ROMTYPE_AMAX, 0) > 0)
                        amax_bfe001_write (val, ciaadra);
@@ -1361,7 +1361,7 @@ static void WriteCIAA (uae_u16 addr, uae_u8 val, uae_u32 *flags)
                        write_log (_T("BFE101 W %02X %s\n"), val, debuginfo(0));
 #endif
                ciaaprb = val;
-               dongle_cia_write (0, reg, val);
+               dongle_cia_write (0, reg, ciaadrb, val);
 #ifdef PARALLEL_PORT
                if (isprinter() > 0) {
                        doprinter (val);
@@ -1384,12 +1384,12 @@ static void WriteCIAA (uae_u16 addr, uae_u8 val, uae_u32 *flags)
                        write_log (_T("BFE201 W %02X %s\n"), val, debuginfo(0));
 #endif
                ciaadra = val;
-               dongle_cia_write (0, reg, val);
+               dongle_cia_write (0, reg, ciaapra, val);
                bfe001_change ();
                break;
        case 3:
                ciaadrb = val;
-               dongle_cia_write (0, reg, val);
+               dongle_cia_write (0, reg, ciaaprb, val);
 #if DONGLE_DEBUG > 0
                if (notinrom ())
                        write_log (_T("BFE301 W %02X %s\n"), val, debuginfo(0));
@@ -1537,7 +1537,7 @@ static void WriteCIAB (uae_u16 addr, uae_u8 val, uae_u32 *flags)
                if (notinrom ())
                        write_log (_T("BFD000 W %02X %s\n"), val, debuginfo(0));
 #endif
-               dongle_cia_write (1, reg, val);
+               dongle_cia_write (1, reg, ciabdra, val);
                ciabpra = val;
 #ifdef SERIAL_PORT
                if (currprefs.use_serial)
@@ -1557,7 +1557,7 @@ static void WriteCIAB (uae_u16 addr, uae_u8 val, uae_u32 *flags)
                if (notinrom ())
                        write_log (_T("BFD100 W %02X %s\n"), val, debuginfo(0));
 #endif
-               dongle_cia_write (1, reg, val);
+               dongle_cia_write (1, ciabdrb, reg, val);
                ciabprb = val;
                DISK_select (val);
                break;
@@ -1566,7 +1566,7 @@ static void WriteCIAB (uae_u16 addr, uae_u8 val, uae_u32 *flags)
                if (notinrom ())
                        write_log (_T("BFD200 W %02X %s\n"), val, debuginfo(0));
 #endif
-               dongle_cia_write (1, reg, val);
+               dongle_cia_write (1, reg, ciabpra, val);
                ciabdra = val;
 #ifdef SERIAL_PORT
                if (currprefs.use_serial)
@@ -1578,7 +1578,7 @@ static void WriteCIAB (uae_u16 addr, uae_u8 val, uae_u32 *flags)
                if (notinrom ())
                        write_log (_T("BFD300 W %02X %s\n"), val, debuginfo(0));
 #endif
-               dongle_cia_write (1, reg, val);
+               dongle_cia_write (1, reg, ciabprb, val);
                ciabdrb = val;
                break;
        case 4:
index 1024e6024b1610916e7e3dbea2f7ab08683ca6de..e85aa77cdb9a26b0869e35da65ed805467472d69 100644 (file)
@@ -24,6 +24,7 @@
 #define RUGBYCOACH 6
 #define CRICKETCAPTAIN 7
 #define LEVIATHAN 8
+#define MUSICMASTER 9
 #define LOGISTIX 10
 
 static int flag;
@@ -73,6 +74,10 @@ Logistix/SuperBase
 - POT1Y = 100k
 - POT1X * 10 / POT1Y must be between 12 and 33
 
+Music Master
+- sets joystick port 2 fire button output + low
+- first JOY1DAT AND 0x0303 must be zero.
+- following JOY1DAT AND 0x0303 reads must be nonzero.
 
 */
 
@@ -84,7 +89,7 @@ void dongle_reset (void)
        memset (oldcia, 0, sizeof oldcia);
 }
 
-uae_u8 dongle_cia_read (int cia, int reg, uae_u8 val)
+uae_u8 dongle_cia_read (int cia, int reg, uae_u8 extra, uae_u8 val)
 {
        if (!currprefs.dongle)
                return val;
@@ -104,7 +109,7 @@ uae_u8 dongle_cia_read (int cia, int reg, uae_u8 val)
        return val;
 }
 
-void dongle_cia_write (int cia, int reg, uae_u8 val)
+void dongle_cia_write (int cia, int reg, uae_u8 extra, uae_u8 val)
 {
        if (!currprefs.dongle)
                return;
@@ -120,6 +125,15 @@ void dongle_cia_write (int cia, int reg, uae_u8 val)
                        cycles = get_cycles ();
                }
                break;
+       case MUSICMASTER:
+               if (cia == 0 && reg == 0) {
+                       if (!(val & 0x80) && (extra & 0x80)) {
+                               flag = 1;
+                       } else {
+                               flag = 0;
+                       }
+               }
+               break;
        }
        oldcia[cia][reg] = val;
 }
@@ -166,6 +180,16 @@ uae_u16 dongle_joydat (int port, uae_u16 val)
                }
                flag ^= 1;
                break;
+       case MUSICMASTER:
+               if (port == 1 && !flag) {
+                       val = 0;
+               } else if (port == 1 && flag == 1) {
+                       val = 0;
+                       flag++;
+               } else if (port == 1 && flag == 2) {
+                       val = 0x0303;
+               }
+               break;
        }
        return val;
 }
index 22d425e1a9f63607f3f1aa2494eadb97aa89f69b..61015f51c7123fdb361237a85eefdd6fdd3726b9 100644 (file)
@@ -4,8 +4,8 @@
 #include "uae/types.h"
 
 extern void dongle_reset (void);
-extern uae_u8 dongle_cia_read (int, int, uae_u8);
-extern void dongle_cia_write (int, int, uae_u8);
+extern uae_u8 dongle_cia_read (int, int, uae_u8, uae_u8);
+extern void dongle_cia_write (int, int, uae_u8, uae_u8);
 extern void dongle_joytest (uae_u16);
 extern uae_u16 dongle_joydat (int, uae_u16);
 extern void dongle_potgo (uae_u16);