Forums

Sega Master System / Mark III / Game Gear
SG-1000 / SC-3000 / SF-7000 / OMV
Home - Forums - Games - Scans - Maps - Cheats - Credits
Music - Videos - Development - Hacks - Translations - Homebrew

View topic - Sega SC-3000 Megacart binaries for MAME / MEKA emulators

Reply to topic
Author Message
  • Joined: 03 Oct 2011
  • Posts: 179
  • Location: New Zealand
Reply with quote
Sega SC-3000 Megacart binaries for MAME / MEKA emulators
Post Posted: Wed May 29, 2019 11:29 pm
Hi All

Quick recap - the Sega SC-3000 Megacart / Mk II Multicart pack a pile of tape games like Burglar Bill, Sir Roderick's Quest, Vortex Blaster, Gold Miner etc. as well as Basic IIIB, Sega Music Editor, and SG-1000 games into a cartridge.

I've been struggling to find the time to build these, and I want the SC-3000 tape software to live on forever.

So you can now play the tape software on the Megacart in MAME v0.206 or later, and MEKA supports the Mk II Multicart.

See SC3000SurvivorsMegacartMulticartBinariesForMAMEandMEKA.zip attached to this thread for the binaries.

Instructions are here:

http://sc3000-multicart.com/news.htm#20190530

If you're still mad keen to have one of these for your SC-3000 / SG-1000 / Mark III then contact me and I might be able to help you out. You just have to be prepared to wait a while as life is very busy :)

Thanks to Nigel Barnes for adding support to MAME, and to Bock for adding support to MEKA for the Mk II Multicart back in 2015. That made debugging so much easier :)

I don't own the copyrights to anything other than the Multicart / Megacart menu system. So that part of the binary images is freely distributable for personal / non-commercial use in emulators.

You should get your own legal advice about what you can do with the other software in the binaries :)

Cheers
SC3000SurvivorsMegacartMulticartBinariesForMAMEandMEKA.zip (3.13 MB)
Sega SC-3000 Megacart / Multicart v2.31 binaries for MAME and MEKA emulators

  View user's profile Send private message Visit poster's website
  • Site Admin
  • Joined: 08 Jul 2001
  • Posts: 8198
  • Location: Paris, France
Reply with quote
Post Posted: Thu May 30, 2019 8:12 am
This is super nice. I would be happy to make a front page News post about it with some screenshots. Would you mind?

Maybe in the .ZIP file you could rename the .bin files to .sc or something more suitable for file association?

(Fun fact, I don't even remember adding that code in Meka :)
  View user's profile Send private message Visit poster's website
  • Joined: 03 Oct 2011
  • Posts: 179
  • Location: New Zealand
Reply with quote
Post Posted: Thu May 30, 2019 9:13 am
Hi Bock. Yes, that's fine to make a front page post.

The reason they have .bin file extensions instead of .sc is because the latest version of MAME appears to those require those file names and subfolders if you want to be able to launch it directly from the command line with "mame sc3000 megacart" or from the MAME GUI 'known' lists. I would have preferred .sc but it looks like that is what Nigel coded into the game definitions (and he just used the file name I sent him, so I can't complain).

The file name / extension doesn't seem to matter if you launch MAME with "mame sc3000" and then manually choose the file with the GUI. It will still correctly match the file checksum and use the Megacart or Multicart mapper.

Quote
Fun fact, I don't even remember adding that code in Meka :)

I seem to recall you were pretty busy at the time :)
  View user's profile Send private message Visit poster's website
  • Joined: 02 Aug 2015
  • Posts: 12
Reply with quote
Post Posted: Thu May 30, 2019 10:45 am
Thank you. Any way to extract those tape games from the binary file and create single game files for use on an EverDrive?

Is there a documentation on the SC-3000 Survivors MEGACART and Mk II Multicart v2.31 so that it can be recreated on an FPGA?
  View user's profile Send private message
  • Joined: 03 Oct 2011
  • Posts: 179
  • Location: New Zealand
Reply with quote
Post Posted: Thu May 30, 2019 11:01 am
pcfreak324 wrote
Thank you. Any way to extract those tape games from the binary file and create single game files for use on an EverDrive?


For the 'single-load' tape games it might be possible. However all the multi-load tape games have had the original tape routines replaced with custom routines to load directly from the paging system of the Megacart. Those are custom coded for each game and look at a particular location in the Megacart / Multicart binary

I don't know enough about the EverDrive architecture / capabilities and whether it would be possible to abstract that out, but I suspect not.

Quote
Is there a documentation on the SC-3000 Survivors MEGACART and Mk II Multicart v2.31 so that it can be recreated on an FPGA?


If I stop making them completely I'll publish a schematic. But I have parts for a few more sitting around which I'm planning to finish off. If you're really keen you should be able to reverse engineer it from the previous posts on the Multicart / Megacart architecture. And I'm actually hopeful some day to find the time to learn how make a CPLD or FPGA version myself. Some day :)

I must say my parents have had their money's worth out of the home computer they bought when I was nine. Thirty five years on and I'm still learning from it :)

Cheers
  View user's profile Send private message Visit poster's website
  • Site Admin
  • Joined: 19 Oct 1999
  • Posts: 13231
  • Location: London
Reply with quote
Post Posted: Thu May 30, 2019 8:16 pm
Everdrive can emulate a Codemasters mapper so you can place your data at any place in the lower 48KB, provided the whole game fits in 1MB (and I'm guessing nobody had the patience for a 1MB tape load). I guess the game consists of various blobs to load to RAM, at specific addresses when triggered by code in the blobs themselves. If you can give us that kind of breakdown I think it'd be easy to make one-game ROM loaders for Everdrive.
  View user's profile Send private message Visit poster's website
  • Joined: 22 Apr 2018
  • Posts: 193
Reply with quote
Post Posted: Thu Apr 16, 2020 7:21 pm
Thank you for these! I really enjoy the hardware megacart (especially now that I was able to get a 3D-printed shell for it), but sometimes it's nice to load these in Meka, too.

I looked for a meka.nam entry for the Mk II Multicart and could not find one. Here's what I have been using, in the "Homebrew" area of the "SEGA GAME 1000 (SG-1000)" section:

SG1 0084b239 4C7B10FBA777060A   SC-3000 Survivors Mk II Multicart/EMU_MAPPER=17/FLAGS=HOMEBREW/AUTHORS=honestbob/COMMENT=Version 2.31


edit: never mind, I see this is supposed to work automatically by picking up the string "SC-3000 SURVIVORS MULTICART BOOT MENU" at offset 0x1F8004 / 2064388 — not sure why it wasn't working for me before, but now it seems fine

edit 2: actually, it doesn't seem to be reliably detected. Also the MEGACART was not implemented at all. Here's a patch adding MEGACART support (apologies for skipping a mapper number, I have a reason!)

diff --git a/meka/meka.nam b/meka/meka.nam
index 50d255a..35feb99 100644
--- a/meka/meka.nam
+++ b/meka/meka.nam
@@ -41,6 +41,8 @@
 ;  14 : sms 4 Pak All Action
 ;  15 : sg-1000 II with taiwanese memory expansion adapter, 8KB RAM from 0x2000->0x3FFF + regular 2KB RAM mapped at 0xC000-0xFFFF
 ;  16 : sms korean xx-in-1, register at 0xFFFF mapping 32 KB at 0x0000->0x8000
+;  17 : sc-3000 Survivors Multicart
+;  19 : sc-3000 Survivors MEGACART
 ;-----------------------------------------------------------------------------
 
 ;-----------------------------------------------------------------------------
@@ -1514,6 +1516,7 @@ SG1 72542786 B4242BD5DE3E2CE0   Monaco GP [24k]/FLAGS=BAD/COUNTRY=JP,AU,NZ,EU/CO
 ; Homebrews
 SG1 b1cbec5a 781CA0E7EF3207BD   S_sniper/FLAGS=HOMEBREW/AUTHORS=Maechiko
 SG1 56abc493 BA07B1875BCCF2EE   Omikuji/FLAGS=HOMEBREW/AUTHORS=Maechiko
+SG1 0084b239 4C7B10FBA777060A   SC-3000 Survivors Mk II Multicart/EMU_MAPPER=17/FLAGS=HOMEBREW/AUTHORS=honestbob/COMMENT=Version 2.31
 
 ;-----------------------------------------------------------------------------
 ; DATA - SEGA COMPUTER 3000 (SC-3000)
@@ -1548,6 +1551,9 @@ SC3 ae4f92cf 1916AF8D8DF9E52A   Uranai Angel Cutie/COUNTRY=JP/PRODUCT_NO=E-119
 SC3 22f4f92a BB95690B9391EC2C   Nihonshi Nenpyou/FLAGS=BAD/PRODUCT_NO=E-108/COMMENT=COMMENT=Educational Software: Japanese History Chronology
 SC3 b67ea1c4 F563D149DA372558   Music/COUNTRY=AU,NZ,EU/FLAGS=BAD/PRODUCT_NO=E-101/EMU_MAPPER=1/COMMENT=1 bad byte. Fixed.
 
+; Homebrews
+SC3 76a3d2e2 D5C1DECC374851F0   SC-3000 Survivors MEGACART/EMU_MAPPER=19/FLAGS=HOMEBREW/AUTHORS=honestbob/COMMENT=Version 2.31
+
 ;-----------------------------------------------------------------------------
 ; DATA - SEGA SUPER CONTROL STATION (SF-7000)
 ;-----------------------------------------------------------------------------
diff --git a/meka/srcs/ioports.cpp b/meka/srcs/ioports.cpp
index 85519e8..670cda3 100644
--- a/meka/srcs/ioports.cpp
+++ b/meka/srcs/ioports.cpp
@@ -101,6 +101,8 @@ void    Out_SMS(u16 Port, u8 Value)
     case 0xE0:
         if (g_machine.mapper == MAPPER_SC3000_Survivors_Multicart)
             Out_SC3000_SurvivorsMulticarts_DataWrite(Value);
+        if (g_machine.mapper == MAPPER_SC3000_Survivors_MEGACART)
+            Out_SC3000_SurvivorsMEGACART_DataWrite(Value);
         return;
 
         // Gear-to-gear Emulation
diff --git a/meka/srcs/machine.cpp b/meka/srcs/machine.cpp
index 43cd1f9..4aff702 100644
--- a/meka/srcs/machine.cpp
+++ b/meka/srcs/machine.cpp
@@ -138,6 +138,7 @@ void    Machine_Set_Handler_Write(void)
         break;
     case MAPPER_32kRAM:                  // Used by Sega Basic, The Castle, ..
     case MAPPER_SC3000_Survivors_Multicart:
+    case MAPPER_SC3000_Survivors_MEGACART:
         WrZ80 = WrZ80_NoHook = Write_Mapper_32kRAM;
         break;
     case MAPPER_ColecoVision:            // Colecovision
@@ -207,6 +208,8 @@ void        Machine_Set_Mapper(void)
         if (DB.current_entry == NULL && tsms.Size_ROM >= 0x200000)
             if (memcmp(ROM+0x1F8004, "SC-3000 SURVIVORS MULTICART BOOT MENU", 38) == 0)
                 g_machine.mapper = MAPPER_SC3000_Survivors_Multicart;
+            if (memcmp(ROM+0x3F8004, "SC-3000 SURVIVORS MULTICART BOOT MENU", 38) == 0)
+                g_machine.mapper = MAPPER_SC3000_Survivors_MEGACART;
         return;
     case DRV_COLECO:
         g_machine.mapper = MAPPER_ColecoVision;
@@ -357,6 +360,7 @@ void    Machine_Set_Mapping (void)
         break;
 
     case MAPPER_SC3000_Survivors_Multicart:
+    case MAPPER_SC3000_Survivors_MEGACART:
         g_machine.mapper_regs_count = 1;
         for (int i = 0; i != MAPPER_REGS_MAX; i++)
             g_machine.mapper_regs[i] = 0;
diff --git a/meka/srcs/mappers.cpp b/meka/srcs/mappers.cpp
index 3a2ec73..fa9b57c 100644
--- a/meka/srcs/mappers.cpp
+++ b/meka/srcs/mappers.cpp
@@ -93,6 +93,17 @@ void    Out_SC3000_SurvivorsMulticarts_DataWrite(u8 v)
     Map_8k_ROM(3, game_no*4+3);
 }
 
+void    Out_SC3000_SurvivorsMEGACART_DataWrite(u8 v)
+{
+    g_machine.mapper_regs[0] = v;
+    int game_no = (v & 0x1f) | (v & 0xc0) >> 1;
+
+    Map_8k_ROM(0, game_no*4+0);
+    Map_8k_ROM(1, game_no*4+1);
+    Map_8k_ROM(2, game_no*4+2);
+    Map_8k_ROM(3, game_no*4+3);
+}
+
 void    Mapper_Get_RAM_Infos(int *plen, int *pstart_addr)
 {
     int len, start_addr;
@@ -107,6 +118,7 @@ void    Mapper_Get_RAM_Infos(int *plen, int *pstart_addr)
         case MAPPER_SMS_DisplayUnit:                len = 0x02800; start_addr = 0x4000; break; // FIXME: Incorrect, due to scattered mapping!
         case MAPPER_SG1000_Taiwan_MSX_Adapter_TypeA:len = 0x02000+0x800; start_addr = 0x2000; break; // FIXME: Two memory regions
         case MAPPER_SC3000_Survivors_Multicart:     len = 0x08000; start_addr = 0x8000; break;
+        case MAPPER_SC3000_Survivors_MEGACART:      len = 0x08000; start_addr = 0x8000; break;
         // FIXME: ActionReplay!!
         // default, Codemaster, Korean..
         default:                                len = 0x02000; start_addr = 0xC000; break;
diff --git a/meka/srcs/mappers.h b/meka/srcs/mappers.h
index cc0c709..3b6cf30 100644
--- a/meka/srcs/mappers.h
+++ b/meka/srcs/mappers.h
@@ -40,6 +40,7 @@
 #define MAPPER_SG1000_Taiwan_MSX_Adapter_TypeA  (15)        // 8KB RAM from 0x2000->0x3FFF + regular 2KB ram in 0xC000-0xFFFF range
 #define MAPPER_SMS_Korean_Xin1                  (16)        // Mapping register at 0xFFFF to map 32 KB at 0x0000->0x8000
 #define MAPPER_SC3000_Survivors_Multicart       (17)
+#define MAPPER_SC3000_Survivors_MEGACART        (19)
 
 #define READ_FUNC(_NAME)   u8 _NAME(register u16 Addr)
 #define WRITE_FUNC(_NAME)  void _NAME(register u16 Addr, register u8 Value)
@@ -76,8 +77,9 @@ WRITE_FUNC (Write_Mapper_SMS_Korean_Janggun);
 WRITE_FUNC (Write_Mapper_SMS_4PakAllAction);
 WRITE_FUNC (Write_Mapper_SG1000_Taiwan_MSX_Adapter_TypeA);
 WRITE_FUNC (Write_Mapper_SMS_Korean_Xin1);
 //-----------------------------------------------------------------------------
 void Out_SC3000_SurvivorsMulticarts_DataWrite(u8 v);
+void Out_SC3000_SurvivorsMEGACART_DataWrite(u8 v);
 
 extern void Map_8k_RAM    (int page, int ram_page);
 extern void Map_8k_ROM    (int page, int rom_page);
diff --git a/meka/srcs/saves.cpp b/meka/srcs/saves.cpp
index abf1455..dd4e5b2 100644
--- a/meka/srcs/saves.cpp
+++ b/meka/srcs/saves.cpp
@@ -102,8 +102,9 @@ void        Load_Game_Fixup(void)
             WrZ80_NoHook (0xFFFF, g_machine.mapper_regs[0]);
             break;
         case MAPPER_SC3000_Survivors_Multicart:
+        case MAPPER_SC3000_Survivors_MEGACART:
             Out_SMS(0xE0, g_machine.mapper_regs[0]);
             break;
         }
     }
 
@@ -260,6 +261,7 @@ int     Save_Game_MSV (FILE *f)
     {
     case MAPPER_32kRAM:
     case MAPPER_SC3000_Survivors_Multicart:
+    case MAPPER_SC3000_Survivors_MEGACART:
         fwrite (RAM, 0x08000, 1, f);
         break;
     case MAPPER_ColecoVision:
@@ -424,6 +426,7 @@ int         Load_Game_MSV(FILE *f)
     {
     case MAPPER_32kRAM:
     case MAPPER_SC3000_Survivors_Multicart:
+    case MAPPER_SC3000_Survivors_MEGACART:
         fread (RAM, 0x08000, 1, f);
         break;
     case MAPPER_ColecoVision:
  View user's profile Send private message
Reply to topic



Back to the top of this page

Back to SMS Power!