sms, cleanup, add missing tms palette to gp2x
authorkub <derkub@gmail.com>
Tue, 7 Mar 2023 21:57:33 +0000 (21:57 +0000)
committerkub <derkub@gmail.com>
Tue, 7 Mar 2023 21:57:33 +0000 (21:57 +0000)
pico/mode4.c
platform/common/menu_pico.c
platform/gp2x/emu.c

index 9c1cff9..b06ca58 100644 (file)
@@ -742,30 +742,32 @@ void PicoFrameStartSMS(void)
 
   // Copy LCD enable flag for easier handling
   Pico.m.hardware &= ~PMS_HW_LCD;
-  if ((PicoIn.opt & POPT_EN_GG_LCD) && (PicoIn.AHW & PAHW_GG))
+  if ((PicoIn.opt & POPT_EN_GG_LCD) && (PicoIn.AHW & PAHW_GG)) {
     Pico.m.hardware |= PMS_HW_LCD;
 
-  if (!(Pico.m.hardware & PMS_HW_LCD) && (mode & 4) && (Pico.video.reg[0] & 0x20)) {
-    // SMS mode 4 with 1st column blanked
-    columns = 248;
-    Pico.est.rendstatus |= PDRAW_SMS_BLANK_1;
-  }
-  if (Pico.m.hardware & PMS_HW_LCD) {
     // GG LCD always has 160x144 regardless of settings
     screen_offset = 24; // nonetheless the vdp timing has 224 lines
     loffs = 48;
     lines = 144;
     columns = 160;
-  } else switch (mode) {
-  // SMS2 only 224/240 line modes, e.g. Micro Machines
-  case 0x06|0x08:
-      loffs = screen_offset = 0;
-      lines = 240;
-      break;
-  case 0x06|0x10:
-      loffs = screen_offset = 8;
-      lines = 224;
-      break;
+  } else {
+    if ((mode & 4) && (Pico.video.reg[0] & 0x20)) {
+      // SMS mode 4 with 1st column blanked
+      columns = 248;
+      Pico.est.rendstatus |= PDRAW_SMS_BLANK_1;
+    }
+
+    switch (mode) {
+    // SMS2 only 224/240 line modes, e.g. Micro Machines
+    case 0x06|0x08:
+        loffs = screen_offset = 0;
+        lines = 240;
+        break;
+    case 0x06|0x10:
+        loffs = screen_offset = 8;
+        lines = 224;
+        break;
+    }
   }
 
   line_offset = 8; // FinalizeLine requires HighCol+8
index f90fa27..b839697 100644 (file)
@@ -574,7 +574,7 @@ static int menu_loop_32x_options(int id, int keys)
 
 static const char *sms_hardwares[] = { "auto", "Game Gear", "Master System", "SG-1000", "SC-3000", NULL };
 static const char *gg_ghosting_opts[] = { "OFF", "weak", "normal", NULL };
-static const char *sms_mappers[] = { "auto", "Sega", "Codemasters", "Korea", "Korea MSX", "Korea X-in-1", "Korea 4-Pak", "Korea Janggun", "Korea Nemesis", "Taiwan 8K RAM", "Korea XOR", NULL };
+static const char *sms_mappers[] = { "auto", "Sega", "Codemasters", "Korea", "Korea MSX", "Korea X-in-1", "Korea 4-Pak", "Korea Janggun", "Korea Nemesis", "Taiwan 8K RAM", "Korea XOR", "Sega 32K RAM", NULL };
 static const char h_smsfm[] = "FM sound is only supported by few games\nOther games may crash with FM enabled";
 static const char h_ghost[] = "simulates the inertia of the GG LCD display";
 
index 1540d81..42b3043 100644 (file)
@@ -361,12 +361,16 @@ static int make_local_pal_sms(int fast_mode)
                // SMS palette for TMS modes\r
                0x0000, 0x0000, 0x00a0, 0x00f0, 0x0500, 0x0f00, 0x0005, 0x0ff0,\r
                0x000a, 0x000f, 0x0055, 0x00ff, 0x0050, 0x0f0f, 0x0555, 0x0fff,\r
+               // TMS palette\r
+               0x0000, 0x0000, 0x04c2, 0x07d6, 0x0e55, 0x0f77, 0x055c, 0x0ee4,\r
+               0x055f, 0x077f, 0x05bc, 0x08ce, 0x03a2, 0x0b5c, 0x0ccc, 0x0fff,\r
        };\r
        int i;\r
        \r
        if (!(Pico.video.reg[0] & 0x4)) {\r
                for (i = Pico.est.SonicPalCount; i >= 0; i--) {\r
-                       bgr444_to_rgb32(localPal+i*0x40, tmspal, 32);\r
+                       int sg = !!(PicoIn.AHW & (PAHW_SG|PAHW_SC));\r
+                       bgr444_to_rgb32(localPal+i*0x40, tmspal+sg*0x10, 32);\r
                        memcpy(localPal+i*0x40+0x20, localPal+i*0x40, 0x20*4);\r
                }\r
        } else if (fast_mode) {\r