Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add mapper detection for "Mega Mode Super Game 78 (KR) [SMS-MD]" #121

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

bsittler
Copy link
Contributor

Add mapper detection for "Mega Mode Super Game 78 (KR) [SMS-MD]"

This is yet another SMS-MD multicart full of SMS games. It runs entirely in SMS mode

A consistent name for indexing would probably be "Mega Mode Super Game 78 (KR) [SMS-MD]"

I've been calling it "Super Game 78 - Mega Game 16 (KR) [SMS-MD]" but the actual names are in Korean:
image
슈퍼게임 78 (Super Game 78) [cartridge label top]
image
메가게임16 (Mega Game 16) [cartridge label front]
image
메가모드 슈퍼게임 (Mega Mode Super Game) [menu title]
image
A different menu title 메가모드 게임머쉰 (Mega Mode Game Machine) very briefly flashes at startup before it is replaced, likely indicating some genetic relationship to multigame SMS arcade boards

This is a "space menu" multicart of SMS games in a Mega Drive-shaped cartridge. It runs entirely in SMS mode.

Dumping was via a temporarily hacked version of the Sanni Open Source Cart Reader https://github.com/sanni/cartreader
image

The SMS dumping script was temporarily modified as follows to allow FFF5 outer paging and 2MB dumps:

--- SMS.ino	2023-09-19 21:41:28.439252000 -0700
+++ "SMS.ino"	2023-09-19 23:08:35.180869200 -0700
@@ -33,8 +33,9 @@
 static const char SMSRomSizeItem9[] PROGMEM = "256 KB";
 static const char SMSRomSizeItem10[] PROGMEM = "512 KB";
 static const char SMSRomSizeItem11[] PROGMEM = "1024 KB";
+static const char SMSRomSizeItem12[] PROGMEM = "2048 KB";
 static const char* const SG1RomSizeMenu[] PROGMEM = { SMSRomSizeItem1, SMSRomSizeItem2, SMSRomSizeItem3, SMSRomSizeItem4 };                                      // Rom sizes for SG-1000
-static const char* const SMSRomSizeMenu[] PROGMEM = { SMSRomSizeItem4, SMSRomSizeItem7, SMSRomSizeItem8, SMSRomSizeItem9, SMSRomSizeItem10, SMSRomSizeItem11 };  // Rom sizes for SMS and GG
+static const char* const SMSRomSizeMenu[] PROGMEM = { SMSRomSizeItem4, SMSRomSizeItem7, SMSRomSizeItem8, SMSRomSizeItem9, SMSRomSizeItem10, SMSRomSizeItem11, SMSRomSizeItem12 };  // Rom sizes for SMS and GG
 
 // Init systems
 static bool system_sms = false;     // SMS or MarkIII
@@ -208,6 +209,9 @@
     writeByte_SMS(0xFFFD, 0);
     writeByte_SMS(0xFFFE, 1);
     writeByte_SMS(0xFFFF, 2);
+
+    // Space Menu SMS-MD Multicart
+    writeByte_SMS(0xFFF5, 0);
   }
 
   delay(400);
@@ -482,8 +486,8 @@
       }
     } else {
       // Rom sizes for SMS and GG
-      convertPgm(SMSRomSizeMenu, 6);
-      SMSRomSize = question_box(F("Select ROM size"), menuOptions, 6, 0);
+      convertPgm(SMSRomSizeMenu, 7);
+      SMSRomSize = question_box(F("Select ROM size"), menuOptions, 7, 0);
       switch (SMSRomSize) {
         case 0:
           cartSize = 32 * 1024UL;  // 32KB
@@ -503,6 +507,9 @@
         case 5:
           cartSize = 1024 * 1024UL;  // 1MB
           break;
+        case 6:
+          cartSize = 2048 * 1024UL;  // 2MB
+          break;
       }
     }
 
@@ -600,6 +607,9 @@
   draw_progressbar(0, totalProgressBar);
 
   for (byte currBank = 0x0; currBank < (cartSize / bankSize); currBank++) {
+    // Space Menu SMS-MD Multicart
+    writeByte_SMS(0xFFF5, currBank >> 1);
+
     // Write current 16KB bank to slot 2 register 0xFFFF
     if (!system_sg1000) {
       writeByte_SMS(0xFFFF, currBank);

The 2MB turned out to be overdump, as the ROM is only 1MB and contains just 15 distinct games

This uses the multicart mapper known to Meka as Mapper_SMS_Korean_MD_FFF5

Outer paging is by mapper register 0xFFF5 which can reach the whole 1MB ROM in 32KB pages. Inner paging is by Sega mapper registers but can only read 128KB in 16KB pages. Outer and inner paging seem to combine by shift and bitwise OR. The FFF5 register remains active even after the initial write

This 1MB multicart contains a menu and 15 SMS games: 32KB Satellite-7, Astro Flash, Machinegun Joe, Pit Pot, Teddyboy Blues, Great Baseball, Super Arkanoid, Seishun Scandal, and Ghost House; 64KB Super Tetris; and 128KB Makai Retsuden, Rambo, Inja, Double Target, and Fantasy Zone

The menu has an animation showing "SELECT MENU" and alternately "선택하세요。" (i.e. "Choose.")

The menu has five screens with 16 items per screen except for the last screen which has only 14

Screen 1:
image

01 환타지 죤 (Fantasy Zone) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
02 더블타게트 (Double Target) [0xFFF5=0x18]; it's part-18-double-target-128k.sms
03 람   보 (Rambo) [0xFFF5=0x10]; it's part-10-rambo-128k.sms
04 마계 열전 (ma'gye yeolcheon, i.e. Makai Retsuden) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
05 검   객 (geomgaeg, i.e. swordsman) [0xFFF5=0x14]; it's part-14-inja-128k.sms
06 테트 리스 (Tetris) [0xFFF5=0x08]; it's part-08-super-tetris-64k.sms
07 유령의 집 (yuryeong-ui jib, i.e. haunted house) [0xFFF5=0x0b]; it's part-0b-ghost-house-32k.sms
08 프로 야구 (Pro ya'gu, i.e. Pro baseball) [0xFFF5=0x06]; it's part-06-great-baseball-32k.sms
09 청춘 보이 (cheongchun Boy, i.e. youth Boy) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms
10 테디 보이 (Teddy Boy) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
11 알카로이드 (alkaroideu, i.e. Arkaroid) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms
12 공주 구출 (gongchu gu'chul, i.e. princess rescue) [0xFFF5=0x04]; it's part-04-pit-pot-32k.sms
13 머 신 건 (Machine Gun) [0xFFF5=0x03]; it's part-03-machinegun-joe-32k.sms
14 아스 트로 (Astro) [0xFFF5=0x02]; it's part-02-astro-flash-32k.sms
15 세터라이트 (Sattelite) [0xFFF5=0x01]; it's part-01-satellite-7-32k.sms
16 나무 요정 (na'mu yo'jeong, i.e. tree fairy) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms

Screen 2:
image

17 정글특공대 (Jungle teug'gongdae, i.e. Jungle commando) [0xFFF5=0x10]; it's part-10-rambo-128k.sms
18 무림 고수 (murim go'su, i.e. murim expert/wǔlín master) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
19 기습 작전 (gi'seub jagjeon, i.e. surprise operation) [0xFFF5=0x14]; it's part-14-inja-128k.sms
20 드라 큐라 (Dracula) [0xFFF5=0x0b]; it's part-0b-ghost-house-32k.sms
21 쿵후 보이 (Kung-Fu Boy) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms
22 벽돌 깨기 (byeogdol ggae'gi, i.e. breaking bricks) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms
23 환타지월드 (Fantasy World) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
24 이중 표적 (i'jung pyo'jeog, i.e. double target) [0xFFF5=0x18]; it's part-18-double-target-128k.sms
25 습격 작전 (seubgyeog jagjeon, i.e. raid operation) [0xFFF5=0x14]; it's part-14-inja-128k.sms
26 부 르 스 (Blues) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
27 홍콩 강시 (Hong Kong gangsi, i.e. Hong Kong Jiangshi) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
28 해저 도시 (haejeo dosi, i.e. undersea city) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
29 홈런 게임 (Home Run Game) [0xFFF5=0x06]; it's part-06-great-baseball-32k.sms
30 피트 포트 (Pit Pot) [0xFFF5=0x04]; it's part-04-pit-pot-32k.sms
31 다운 타운 (Down Town) [0xFFF5=0x03]; it's part-03-machinegun-joe-32k.sms
32 곤충 위기 (gon'chung wi'gi, i.e. insect crisis) [0xFFF5=0x01]; it's part-01-satellite-7-32k.sms

Screen 3:
image

33 동굴타게트 (dong'gul Target, i.e. cave Target) [0xFFF5=0x18]; it's part-18-double-target-128k.sms
34 표창 달인 (pyo'chang dal'in, possibly "commendation: master"?) [0xFFF5=0x14]; it's part-14-inja-128k.sms
35 고 스 트 (Ghost) [0xFFF5=0x0b]; it's part-0b-ghost-house-32k.sms
36 블럭 격파 (Block gyeogpa, i.e. Block breaking) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms
37 마계 탈출 (ma'gye talchul, i.e. Makai escape) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
38 미로 탈출 (miro talchul, i.e. maze escape) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
39 미데ᅵ나이트 (Midnight) [0xFFF5=0x03]; it's part-03-machinegun-joe-32k.sms
40 파이터보이 (Fighter Boy) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms
41 후 레 쉬 (Flash) [0xFFF5=0x02]; it's part-02-astro-flash-32k.sms
42 목성환타지 (mogseong Fantasy, i.e. Jupiter Fantasy) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
43 스카이세븐 (Sky Seven) [0xFFF5=0x01]; it's part-01-satellite-7-32k.sms
44 보물 찾기 (bo'mul chajgi, i.e. treasure hunt) [0xFFF5=0x04]; it's part-04-pit-pot-32k.sms
45 우 디 팦 (Woody Pop) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms
46 소년 테디 (so'nyeon Teddy, i.e. boy Teddy) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
47 습   격 (seubgyeog, i.e. raid) [0xFFF5=0x14]; it's part-14-inja-128k.sms
48 도시게릴라 (do'si Guerrilla, i.e. urban Guerrilla) [0xFFF5=0x10]; it's part-10-rambo-128k.sms

Screen 4:
image

49 메리의모험 (Mary-ui mo'heum, i.e. Mary's adventure) [0xFFF5=0x18]; it's part-18-double-target-128k.sms
50 표창 명인 (pyo'chang myeong'in, possibly "recognition: master"?) [0xFFF5=0x14]; it's part-14-inja-128k.sms
51 숲속의결투 (sup sog-ui gyeoltu, i.e. forest duel) [0xFFF5=0x03]; it's part-03-machinegun-joe-32k.sms
52 용 의 성 (yong-ui seong, i.e. dragon's castle) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
53 특   명 (teug'myeong, i.e. mission) [0xFFF5=0x10]; it's part-10-rambo-128k.sms
54 블럭 월드 (Block World) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms
55 소녀 구출 (so'nyeo gu'chul, i.e. girl rescue) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms
56 마법의 성 (ma'beob-ui seong, i.e. enchanted castle) [0xFFF5=0x04]; it's part-04-pit-pot-32k.sms
57 살롱의결투 (Saloon-ui gyeoltu, i.e. Saloon duel) [0xFFF5=0x03]; it's part-03-machinegun-joe-32k.sms
58 우주 탐험 (uju tam'heom, i.e. space exploration) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
59 인공 위성 (in'gong wi'seong, i.e. satellite) [0xFFF5=0x01]; it's part-01-satellite-7-32k.sms
60 비문 전달 (bi'mul jeondal, possibly "inscription: delivered"?) [0xFFF5=0x14]; it's part-14-inja-128k.sms
61 환상 특급 (hwansang teug'geub, i.e. fantastic express) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
62 메카폴리스 (Mechapolis) [0xFFF5=0x18]; it's part-18-double-target-128k.sms
63 강시 공포 (gangsi gongpo, i.e. Jiangshi horror) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
64 철권 소년 (cheolgweon so'nyeon, i.e. iron fist boy) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms

Screen 5:
image

65 전   투 (jeontu, i.e. battle) [0xFFF5=0x10]; it's part-10-rambo-128k.sms
66 설원 비행 (seolweon bihaeng, i.e. snowfield flight) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
67 천상 세계 (cheonsang se'gye, i.e. heavenly world) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
68 태권 소년 (Taekwon so'nyeon, i.e. Taekwon boy) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms
69 석양의결투 (seog'yang-ui gyeoltu, i.e. sunset duel) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms
70 테디의모험 (Teddy-ui mo'heom, i.e. Teddy's adventure) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
71 환상 탐험 (hwansang tam'heom, i.e. fantasy exploration) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
72 요 술 성 (yosul seong, i.e. witchcraft castle) [0xFFF5=0x04]; it's part-04-pit-pot-32k.sms
73 샤 도 우 (Shadow) [0xFFF5=0x14]; it's part-14-inja-128k.sms
74 슈 퍼 볼 (Super Ball) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms
75 미로 월드 (miro World, i.e. maze World) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
76 코메디 죠 (Comedy Joe) [0xFFF5=0x03]; it's part-03-machinegun-joe-32k.sms
77 해상 침투 (haesang chimtu, i.e. maritime infiltration) [0xFFF5=0x10]; it's part-10-rambo-128k.sms
78 위험한임무 (wiheomhan immu, i.e. dangerous mission) [0xFFF5=0x18]; it's part-18-double-target-128k.sms

ROM fingerprint info:

1.0M Super Game 78 - Mega Game 16 (KR) [SMS-MD].sms crc32:2c22af67 mekacrc:48904ABB002FF202 md5:c550257f1f718c58c69b44b315b6e566 sha1:529b8220765db8a1262c477d8cce8a02c9e1769e sha256:386c2211d162495001cca0e933e55b34fe5bcdad78d766ca09e3cadaee4cc218

32K part-00-menu-32k.sms crc32:f0c1219b mekacrc:38B26358316D17A6 md5:4bf0f25ca2570da8691fa52fd84e4bf4 sha1:1c7aacc40a6e9db35e081ff6c502e9a4fa3a3b9e sha256:b138b05936f1aaa51af51bd3ce26d52ac87e94201339fa98f104cee15ab893a7

32K part-01-satellite-7-32k.sms crc32:e905f779 mekacrc:BF0BB019104E927D md5:cb36bacb114abef2657ad403575284ec sha1:cb12a9bb901e75d9d354559ad07e91fbed27c8fa sha256:9f10cf93e82b13563265a5b3fdc0de1a095443147517cbc6edd38cb44e736117

32K part-02-astro-flash-32k.sms crc32:e96fa9aa mekacrc:1F0A1121D0278826 md5:33ca5c31a55ecaafef8794d13af14321 sha1:91187c55b9e6d22d3b734105028e5d6db1a8e68e sha256:ec7ae5be5b89f8b2c5eb6d072d2d9f3d871f14c6b65034fae836387b462c032f

32K part-03-machinegun-joe-32k.sms crc32:0c82b325 mekacrc:657C87C5BC491CB2 md5:1cda2406b4a8d9049480ac9e4d4698c3 sha1:dc395557d9e15bb392ca7886e79f703ba5fe4204 sha256:37efbddc02420ed5eb9302552c9f51389453dff064ffe92796bfa620a71a3f18

32K part-04-pit-pot-32k.sms crc32:90e69f40 mekacrc:E8647F6AAB818817 md5:1aedb4be5be8b9a82262f71b1c1b3be0 sha1:0a280d4db62d331636bccb4f1b48fdaaf487467b sha256:cf0ec5e5c1cb04e1d1f3a537291a97a3605553cd303044384245383cb55e4de9

32K part-05-teddyboy-blues-32k.sms crc32:ee5fd3a2 mekacrc:F524AC40F55CF3B7 md5:fce0d54020dd47051f0e7ee2e31b8fa1 sha1:24062d7a2e5e322f8dc86ca7ef1989d042b2a147 sha256:8bbf945c9eb8935d7c9035f2e4015842f2e1a1a1c60b2967be57909dc0993496

32K part-06-great-baseball-32k.sms crc32:9d7bf9df mekacrc:6E9004822AF4A4BA md5:6de6087feae1b4452c19331e0f3215c1 sha1:5e003c813b4e637c194039d99026f324ec7c3276 sha256:496e941ef2803a3561a790d9043fb2f2a917757b6f931cdca9a0382e75b74c5d

32K part-07-super-arkanoid-32k.sms crc32:433338d6 mekacrc:7C299AACD5544AA2 md5:156095211b5bbb62aa3a42bf55604a3d sha1:8d69ff29c08874fa38096f6c571da85b2647984a sha256:0b9316e9b21952ba4ee3949dd80eb58e81c759e708af8d47a102c11b475d91e4

64K part-08-super-tetris-64k.sms crc32:995e33c9 mekacrc:35095B2A342839A8 md5:9aa1340168ef6df6efce3191f2732a5d sha1:30d636f46c57109cc7581891b1663564adbf489c sha256:8a03ce9bef205741583ca8e243df88bd567169b2d5d91d2ddfe29a42ff0399d1

32K part-0a-seishun-scandal-32k.sms crc32:6894b8f4 mekacrc:1C106FCBBD3C1C85 md5:fa1afe7f752ad78abac96a3aeb59d012 sha1:52beae0533d1dfcd92039ff4d11dc1c85d21549b sha256:3b94d175fb784c6f86e3de26b321b7c30072727f329ec63dfa1c343361af8684

32K part-0b-ghost-house-32k.sms crc32:40461bfc mekacrc:887B27E3E66E9708 md5:8909e91122cb558fd59c9632743e46c0 sha1:5da3299b68d12cbf4f6d1ded92e135ffdc7e21a0 sha256:37d65977e08f04051dc6f5615f23289c901ebf9daa0e6d49b17ce17af2804117

128K part-0c-makai-retsuden-128k.sms crc32:9f0b36f3 mekacrc:F0CCA56EAB164927 md5:da6c2cfe32b47a839ae62da3c608d281 sha1:8f81dd64eb24e176d9004c716dfcf76c47a1d6b4 sha256:432432576768b073556528937bf81090e63feef6673bb83bc72329d5161dffe3

128K part-10-rambo-128k.sms crc32:8860ac5b mekacrc:035F3D6EF00F24D0 md5:6663e1ccc10b2c3622545edb3cc31f9d sha1:48733266210072a5ff0e75d628df8e778defb77a sha256:503b168083a9f317455557059471428e30e97f5b4eb704fd4a2dd87ee451f9c0

128K part-14-inja-128k.sms crc32:70cbe3d4 mekacrc:F8EFD201AFC4686B md5:8d86dc81b59bc2d935e272b9885c5839 sha1:4b86e4381cd77a16e041c6d1592811864f83e50d sha256:6bd243b0e2c5a6501c44e1f2f4f7e5dd28d3d857b89761042b2591f3c297a3b8

128K part-18-double-target-128k.sms crc32:25851e9f mekacrc:BB26B2F89129FAC1 md5:20647e24a146dc1a55e789b12c964714 sha1:e531b5bf439225d382a3c7488ab2a86ae9b02779 sha256:80123513a0cadc866bd616988630b360ea8ce25dac9718efac9e263506c31567

128K part-1c-fantasy-zone-128k.sms crc32:855ff46e mekacrc:87387FDFE2FB8185 md5:c97570ac3f441b3c6b79d8eb283a4bd5 sha1:96c1fdebbd2def19acb1f0e7d8411deae9ef5345 sha256:264035711477bccf9e5e23712c639378703855ac298f6899938fdb721268d15d

This is yet another SMS-MD multicart full of SMS games. It runs entirely in SMS mode

A consistent name for indexing would probably be "Mega Mode Super Game 78 (KR) [SMS-MD]"

I've been calling it "Super Game 78 - Mega Game 16 (KR) [SMS-MD]" but the actual names are in Korean:

슈퍼게임 78 (Super Game 78) [cartridge label top]
메가게임16 (Mega Game 16) [cartridge label front]
메가모드 슈퍼게임 (Mega Mode Super Game) [menu title]

This is a "space menu" multicart of SMS games in a Mega Drive-shaped cartridge. It runs entirely in SMS mode.

Dumping was via a temporarily hacked version of the Sanni Open Source Cart Reader https://github.com/sanni/cartreader

The SMS dumping script was temporarily modified as follows to allow FFF5 outer paging and 2MB dumps:

```
--- SMS.ino	2023-09-19 21:41:28.439252000 -0700
+++ "SMS.ino"	2023-09-19 23:08:35.180869200 -0700
@@ -33,8 +33,9 @@
 static const char SMSRomSizeItem9[] PROGMEM = "256 KB";
 static const char SMSRomSizeItem10[] PROGMEM = "512 KB";
 static const char SMSRomSizeItem11[] PROGMEM = "1024 KB";
+static const char SMSRomSizeItem12[] PROGMEM = "2048 KB";
 static const char* const SG1RomSizeMenu[] PROGMEM = { SMSRomSizeItem1, SMSRomSizeItem2, SMSRomSizeItem3, SMSRomSizeItem4 };                                      // Rom sizes for SG-1000
-static const char* const SMSRomSizeMenu[] PROGMEM = { SMSRomSizeItem4, SMSRomSizeItem7, SMSRomSizeItem8, SMSRomSizeItem9, SMSRomSizeItem10, SMSRomSizeItem11 };  // Rom sizes for SMS and GG
+static const char* const SMSRomSizeMenu[] PROGMEM = { SMSRomSizeItem4, SMSRomSizeItem7, SMSRomSizeItem8, SMSRomSizeItem9, SMSRomSizeItem10, SMSRomSizeItem11, SMSRomSizeItem12 };  // Rom sizes for SMS and GG

 // Init systems
 static bool system_sms = false;     // SMS or MarkIII
@@ -208,6 +209,9 @@
     writeByte_SMS(0xFFFD, 0);
     writeByte_SMS(0xFFFE, 1);
     writeByte_SMS(0xFFFF, 2);
+
+    // Space Menu SMS-MD Multicart
+    writeByte_SMS(0xFFF5, 0);
   }

   delay(400);
@@ -482,8 +486,8 @@
       }
     } else {
       // Rom sizes for SMS and GG
-      convertPgm(SMSRomSizeMenu, 6);
-      SMSRomSize = question_box(F("Select ROM size"), menuOptions, 6, 0);
+      convertPgm(SMSRomSizeMenu, 7);
+      SMSRomSize = question_box(F("Select ROM size"), menuOptions, 7, 0);
       switch (SMSRomSize) {
         case 0:
           cartSize = 32 * 1024UL;  // 32KB
@@ -503,6 +507,9 @@
         case 5:
           cartSize = 1024 * 1024UL;  // 1MB
           break;
+        case 6:
+          cartSize = 2048 * 1024UL;  // 2MB
+          break;
       }
     }

@@ -600,6 +607,9 @@
   draw_progressbar(0, totalProgressBar);

   for (byte currBank = 0x0; currBank < (cartSize / bankSize); currBank++) {
+    // Space Menu SMS-MD Multicart
+    writeByte_SMS(0xFFF5, currBank >> 1);
+
     // Write current 16KB bank to slot 2 register 0xFFFF
     if (!system_sg1000) {
       writeByte_SMS(0xFFFF, currBank);
```

The 2MB turned out to be overdump, as the ROM is only 1MB and contains just 15 distinct games

This uses the multicart mapper known to Meka as Mapper_SMS_Korean_MD_FFF5

Outer paging is by mapper register 0xFFF5 which can reach the whole 1MB ROM in 32KB pages. Inner paging is by Sega mapper registers but can only read 128KB in 16KB pages. Outer and inner paging seem to combine by shift and bitwise OR. The FFF5 register remains active even after the initial write

This 1MB multicart contains a menu and 15 SMS games: 32KB Satellite-7, Astro Flash, Machinegun Joe, Pit Pot, Teddyboy Blues, Great Baseball, Super Arkanoid, Seishun Scandal, and Ghost House; 64KB Super Tetris; and 128KB Makai Retsuden, Rambo, Inja, Double Target, and Fantasy Zone

The menu has an animation showing "SELECT MENU" and alternately "선택하세요。" (i.e. "Choose.")

The menu has five screens with 16 items per screen except for the last screen which has only 14

Screen 1:
```
01 환타지 죤 (Fantasy Zone) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
02 더블타게트 (Double Target) [0xFFF5=0x18]; it's part-18-double-target-128k.sms
03 람   보 (Rambo) [0xFFF5=0x10]; it's part-10-rambo-128k.sms
04 마계 열전 (ma'gye yeolcheon, i.e. Makai Retsuden) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
05 검   객 (geomgaeg, i.e. swordsman) [0xFFF5=0x14]; it's part-14-inja-128k.sms
06 테트 리스 (Tetris) [0xFFF5=0x08]; it's part-08-super-tetris-64k.sms
07 유령의 집 (yuryeong-ui jib, i.e. haunted house) [0xFFF5=0x0b]; it's part-0b-ghost-house-32k.sms
08 프로 야구 (Pro ya'gu, i.e. Pro baseball) [0xFFF5=0x06]; it's part-06-great-baseball-32k.sms
09 청춘 보이 (cheongchun Boy, i.e. youth Boy) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms
10 테디 보이 (Teddy Boy) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
11 알카로이드 (alkaroideu, i.e. Arkaroid) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms
12 공주 구출 (gongchu gu'chul, i.e. princess rescue) [0xFFF5=0x04]; it's part-04-pit-pot-32k.sms
13 머 신 건 (Machine Gun) [0xFFF5=0x03]; it's part-03-machinegun-joe-32k.sms
14 아스 트로 (Astro) [0xFFF5=0x02]; it's part-02-astro-flash-32k.sms
15 세터라이트 (Sattelite) [0xFFF5=0x01]; it's part-01-satellite-7-32k.sms
16 나무 요정 (na'mu yo'jeong, i.e. tree fairy) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms
```

Screen 2:
```
17 정글특공대 (Jungle teug'gongdae, i.e. Jungle commando) [0xFFF5=0x10]; it's part-10-rambo-128k.sms
18 무림 고수 (murim go'su, i.e. murim expert/wǔlín master) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
19 기습 작전 (gi'seub jagjeon, i.e. surprise operation) [0xFFF5=0x14]; it's part-14-inja-128k.sms
20 드라 큐라 (Dracula) [0xFFF5=0x0b]; it's part-0b-ghost-house-32k.sms
21 쿵후 보이 (Kung-Fu Boy) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms
22 벽돌 깨기 (byeogdol ggae'gi, i.e. breaking bricks) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms
23 환타지월드 (Fantasy World) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
24 이중 표적 (i'jung pyo'jeog, i.e. double target) [0xFFF5=0x18]; it's part-18-double-target-128k.sms
25 습격 작전 (seubgyeog jagjeon, i.e. raid operation) [0xFFF5=0x14]; it's part-14-inja-128k.sms
26 부 르 스 (Blues) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
27 홍콩 강시 (Hong Kong gangsi, i.e. Hong Kong Jiangshi) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
28 해저 도시 (haejeo dosi, i.e. undersea city) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
29 홈런 게임 (Home Run Game) [0xFFF5=0x06]; it's part-06-great-baseball-32k.sms
30 피트 포트 (Pit Pot) [0xFFF5=0x04]; it's part-04-pit-pot-32k.sms
31 다운 타운 (Down Town) [0xFFF5=0x03]; it's part-03-machinegun-joe-32k.sms
32 곤충 위기 (gon'chung wi'gi, i.e. insect crisis) [0xFFF5=0x01]; it's part-01-satellite-7-32k.sms
```

Screen 3:
```
33 동굴타게트 (dong'gul Target, i.e. cave Target) [0xFFF5=0x18]; it's part-18-double-target-128k.sms
34 표창 달인 (pyo'chang dal'in, possibly "commendation: master"?) [0xFFF5=0x14]; it's part-14-inja-128k.sms
35 고 스 트 (Ghost) [0xFFF5=0x0b]; it's part-0b-ghost-house-32k.sms
36 블럭 격파 (Block gyeogpa, i.e. Block breaking) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms
37 마계 탈출 (ma'gye talchul, i.e. Makai escape) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
38 미로 탈출 (miro talchul, i.e. maze escape) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
39 미데ᅵ나이트 (Midnight) [0xFFF5=0x03]; it's part-03-machinegun-joe-32k.sms
40 파이터보이 (Fighter Boy) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms
41 후 레 쉬 (Flash) [0xFFF5=0x02]; it's part-02-astro-flash-32k.sms
42 목성환타지 (mogseong Fantasy, i.e. Jupiter Fantasy) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
43 스카이세븐 (Sky Seven) [0xFFF5=0x01]; it's part-01-satellite-7-32k.sms
44 보물 찾기 (bo'mul chajgi, i.e. treasure hunt) [0xFFF5=0x04]; it's part-04-pit-pot-32k.sms
45 우 디 팦 (Woody Pop) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms
46 소년 테디 (so'nyeon Teddy, i.e. boy Teddy) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
47 습   격 (seubgyeog, i.e. raid) [0xFFF5=0x14]; it's part-14-inja-128k.sms
48 도시게릴라 (do'si Guerrilla, i.e. urban Guerrilla) [0xFFF5=0x10]; it's part-10-rambo-128k.sms
```

Screen 4:
```
49 메리의모험 (Mary-ui mo'heum, i.e. Mary's adventure) [0xFFF5=0x18]; it's part-18-double-target-128k.sms
50 표창 명인 (pyo'chang myeong'in, possibly "recognition: master"?) [0xFFF5=0x14]; it's part-14-inja-128k.sms
51 숲속의결투 (sup sog-ui gyeoltu, i.e. forest duel) [0xFFF5=0x03]; it's part-03-machinegun-joe-32k.sms
52 용 의 성 (yong-ui seong, i.e. dragon's castle) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
53 특   명 (teug'myeong, i.e. mission) [0xFFF5=0x10]; it's part-10-rambo-128k.sms
54 블럭 월드 (Block World) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms
55 소녀 구출 (so'nyeo gu'chul, i.e. girl rescue) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms
56 마법의 성 (ma'beob-ui seong, i.e. enchanted castle) [0xFFF5=0x04]; it's part-04-pit-pot-32k.sms
57 살롱의결투 (Saloon-ui gyeoltu, i.e. Saloon duel) [0xFFF5=0x03]; it's part-03-machinegun-joe-32k.sms
58 우주 탐험 (uju tam'heom, i.e. space exploration) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
59 인공 위성 (in'gong wi'seong, i.e. satellite) [0xFFF5=0x01]; it's part-01-satellite-7-32k.sms
60 비문 전달 (bi'mul jeondal, possibly "inscription: delivered"?) [0xFFF5=0x14]; it's part-14-inja-128k.sms
61 환상 특급 (hwansang teug'geub, i.e. fantastic express) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
62 메카폴리스 (Mechapolis) [0xFFF5=0x18]; it's part-18-double-target-128k.sms
63 강시 공포 (gangsi gongpo, i.e. Jiangshi horror) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
64 철권 소년 (cheolgweon so'nyeon, i.e. iron fist boy) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms
```

Screen 5:
```
65 전   투 (jeontu, i.e. battle) [0xFFF5=0x10]; it's part-10-rambo-128k.sms
66 설원 비행 (seolweon bihaeng, i.e. snowfield flight) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
67 천상 세계 (cheonsang se'gye, i.e. heavenly world) [0xFFF5=0x0c]; it's part-0c-makai-retsuden-128k.sms
68 태권 소년 (Taekwon so'nyeon, i.e. Taekwon boy) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms
69 석양의결투 (seog'yang-ui gyeoltu, i.e. sunset duel) [0xFFF5=0x0a]; it's part-0a-seishun-scandal-32k.sms
70 테디의모험 (Teddy-ui mo'heom, i.e. Teddy's adventure) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
71 환상 탐험 (hwansang tam'heom, i.e. fantasy exploration) [0xFFF5=0x1c]; it's part-1c-fantasy-zone-128k.sms
72 요 술 성 (yosul seong, i.e. witchcraft castle) [0xFFF5=0x04]; it's part-04-pit-pot-32k.sms
73 샤 도 우 (Shadow) [0xFFF5=0x14]; it's part-14-inja-128k.sms
74 슈 퍼 볼 (Super Ball) [0xFFF5=0x07]; it's part-07-super-arkanoid-32k.sms
75 미로 월드 (miro World, i.e. maze World) [0xFFF5=0x05]; it's part-05-teddyboy-blues-32k.sms
76 코메디 죠 (Comedy Joe) [0xFFF5=0x03]; it's part-03-machinegun-joe-32k.sms
77 해상 침투 (haesang chimtu, i.e. maritime infiltration) [0xFFF5=0x10]; it's part-10-rambo-128k.sms
78 위험한임무 (wiheomhan immu, i.e. dangerous mission) [0xFFF5=0x18]; it's part-18-double-target-128k.sms
```

ROM fingerprint info:

1.0M Super Game 78 - Mega Game 16 (KR) [SMS-MD].sms crc32:2c22af67 mekacrc:48904ABB002FF202 md5:c550257f1f718c58c69b44b315b6e566 sha1:529b8220765db8a1262c477d8cce8a02c9e1769e sha256:386c2211d162495001cca0e933e55b34fe5bcdad78d766ca09e3cadaee4cc218

32K part-00-menu-32k.sms crc32:f0c1219b mekacrc:38B26358316D17A6 md5:4bf0f25ca2570da8691fa52fd84e4bf4 sha1:1c7aacc40a6e9db35e081ff6c502e9a4fa3a3b9e sha256:b138b05936f1aaa51af51bd3ce26d52ac87e94201339fa98f104cee15ab893a7

32K part-01-satellite-7-32k.sms crc32:e905f779 mekacrc:BF0BB019104E927D md5:cb36bacb114abef2657ad403575284ec sha1:cb12a9bb901e75d9d354559ad07e91fbed27c8fa sha256:9f10cf93e82b13563265a5b3fdc0de1a095443147517cbc6edd38cb44e736117

32K part-02-astro-flash-32k.sms crc32:e96fa9aa mekacrc:1F0A1121D0278826 md5:33ca5c31a55ecaafef8794d13af14321 sha1:91187c55b9e6d22d3b734105028e5d6db1a8e68e sha256:ec7ae5be5b89f8b2c5eb6d072d2d9f3d871f14c6b65034fae836387b462c032f

32K part-03-machinegun-joe-32k.sms crc32:0c82b325 mekacrc:657C87C5BC491CB2 md5:1cda2406b4a8d9049480ac9e4d4698c3 sha1:dc395557d9e15bb392ca7886e79f703ba5fe4204 sha256:37efbddc02420ed5eb9302552c9f51389453dff064ffe92796bfa620a71a3f18

32K part-04-pit-pot-32k.sms crc32:90e69f40 mekacrc:E8647F6AAB818817 md5:1aedb4be5be8b9a82262f71b1c1b3be0 sha1:0a280d4db62d331636bccb4f1b48fdaaf487467b sha256:cf0ec5e5c1cb04e1d1f3a537291a97a3605553cd303044384245383cb55e4de9

32K part-05-teddyboy-blues-32k.sms crc32:ee5fd3a2 mekacrc:F524AC40F55CF3B7 md5:fce0d54020dd47051f0e7ee2e31b8fa1 sha1:24062d7a2e5e322f8dc86ca7ef1989d042b2a147 sha256:8bbf945c9eb8935d7c9035f2e4015842f2e1a1a1c60b2967be57909dc0993496

32K part-06-great-baseball-32k.sms crc32:9d7bf9df mekacrc:6E9004822AF4A4BA md5:6de6087feae1b4452c19331e0f3215c1 sha1:5e003c813b4e637c194039d99026f324ec7c3276 sha256:496e941ef2803a3561a790d9043fb2f2a917757b6f931cdca9a0382e75b74c5d

32K part-07-super-arkanoid-32k.sms crc32:433338d6 mekacrc:7C299AACD5544AA2 md5:156095211b5bbb62aa3a42bf55604a3d sha1:8d69ff29c08874fa38096f6c571da85b2647984a sha256:0b9316e9b21952ba4ee3949dd80eb58e81c759e708af8d47a102c11b475d91e4

64K part-08-super-tetris-64k.sms crc32:995e33c9 mekacrc:35095B2A342839A8 md5:9aa1340168ef6df6efce3191f2732a5d sha1:30d636f46c57109cc7581891b1663564adbf489c sha256:8a03ce9bef205741583ca8e243df88bd567169b2d5d91d2ddfe29a42ff0399d1

32K part-0a-seishun-scandal-32k.sms crc32:6894b8f4 mekacrc:1C106FCBBD3C1C85 md5:fa1afe7f752ad78abac96a3aeb59d012 sha1:52beae0533d1dfcd92039ff4d11dc1c85d21549b sha256:3b94d175fb784c6f86e3de26b321b7c30072727f329ec63dfa1c343361af8684

32K part-0b-ghost-house-32k.sms crc32:40461bfc mekacrc:887B27E3E66E9708 md5:8909e91122cb558fd59c9632743e46c0 sha1:5da3299b68d12cbf4f6d1ded92e135ffdc7e21a0 sha256:37d65977e08f04051dc6f5615f23289c901ebf9daa0e6d49b17ce17af2804117

128K part-0c-makai-retsuden-128k.sms crc32:9f0b36f3 mekacrc:F0CCA56EAB164927 md5:da6c2cfe32b47a839ae62da3c608d281 sha1:8f81dd64eb24e176d9004c716dfcf76c47a1d6b4 sha256:432432576768b073556528937bf81090e63feef6673bb83bc72329d5161dffe3

128K part-10-rambo-128k.sms crc32:8860ac5b mekacrc:035F3D6EF00F24D0 md5:6663e1ccc10b2c3622545edb3cc31f9d sha1:48733266210072a5ff0e75d628df8e778defb77a sha256:503b168083a9f317455557059471428e30e97f5b4eb704fd4a2dd87ee451f9c0

128K part-14-inja-128k.sms crc32:70cbe3d4 mekacrc:F8EFD201AFC4686B md5:8d86dc81b59bc2d935e272b9885c5839 sha1:4b86e4381cd77a16e041c6d1592811864f83e50d sha256:6bd243b0e2c5a6501c44e1f2f4f7e5dd28d3d857b89761042b2591f3c297a3b8

128K part-18-double-target-128k.sms crc32:25851e9f mekacrc:BB26B2F89129FAC1 md5:20647e24a146dc1a55e789b12c964714 sha1:e531b5bf439225d382a3c7488ab2a86ae9b02779 sha256:80123513a0cadc866bd616988630b360ea8ce25dac9718efac9e263506c31567

128K part-1c-fantasy-zone-128k.sms crc32:855ff46e mekacrc:87387FDFE2FB8185 md5:c97570ac3f441b3c6b79d8eb283a4bd5 sha1:96c1fdebbd2def19acb1f0e7d8411deae9ef5345 sha256:264035711477bccf9e5e23712c639378703855ac298f6899938fdb721268d15d
@bsittler
Copy link
Contributor Author

central figure in the label art seems to be from the cover of https://segaretro.org/Shining_and_the_Darkness_Koushiki_Guide_Book

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant