+ else {\r
+ bgr444_to_rgb32(localPal, Pico.est.SonicPal, 64);\r
+ memcpy(localPal+0x40, localPal, 0x40*4); // for spr prio mess\r
+ memcpy(localPal+0x80, localPal, 0x80*4); // for spr prio mess\r
+ }\r
+ localPal[0xc0] = 0x0000c000;\r
+ localPal[0xd0] = 0x00c00000;\r
+ localPal[0xe0] = 0x00000000; // reserved pixels for OSD\r
+ localPal[0xf0] = 0x00ffffff;\r
+\r
+ if (Pico.m.dirtyPal == 2)\r
+ Pico.m.dirtyPal = 0;\r
+ return pallen;\r
+}\r
+\r
+static int make_local_pal_sms(int fast_mode)\r
+{\r
+ static u16 tmspal[32] = {\r
+ // 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
+ 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
+ for (i = 0;i >= 0; i--) {\r
+ bgr444_to_rgb32(localPal+i*0x40, PicoMem.cram+i*0x40, 32);\r
+ memcpy(localPal+i*0x40+0x20, localPal+i*0x40, 0x20*4);\r
+ }\r
+ } else {\r
+ for (i = Pico.est.SonicPalCount; i >= 0; i--) {\r
+ bgr444_to_rgb32(localPal+i*0x40, Pico.est.SonicPal+i*0x40, 32);\r
+ memcpy(localPal+i*0x40+0x20, localPal+i*0x40, 0x20*4);\r
+ }\r