From: Toni Wilen Date: Sun, 29 Oct 2017 11:36:00 +0000 (+0200) Subject: Music Master dongle. X-Git-Tag: 3600~73 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=acc6edf29b236e0a605acf3dbbd273e7d0604c36;p=francis%2Fwinuae.git Music Master dongle. --- diff --git a/cia.cpp b/cia.cpp index 4b1eb465..f34a7023 100644 --- 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: diff --git a/dongle.cpp b/dongle.cpp index 1024e602..e85aa77c 100644 --- a/dongle.cpp +++ b/dongle.cpp @@ -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; } diff --git a/include/dongle.h b/include/dongle.h index 22d425e1..61015f51 100644 --- a/include/dongle.h +++ b/include/dongle.h @@ -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);