+#endif\r
+\r
+\r
+/* check: jaguar xj 220 (draws entire world using decode) */\r
+static void decode_write8(u32 a, u8 d, int r3)\r
+{\r
+ u8 *pd = Pico_mcd->word_ram1M[!(r3 & 1)] + (((a>>1)^1)&0x1ffff);\r
+ u8 oldmask = (a&1) ? 0xf0 : 0x0f;\r
+\r
+ r3 &= 0x18;\r
+ d &= 0x0f;\r
+ if (!(a&1)) d <<= 4;\r
+\r
+ //dprintf("FIXME: decode, r3 = %02x", r3);\r
+\r
+ if (r3 == 8) {\r
+ if ((!(*pd & (~oldmask))) && d) goto do_it;\r
+ } else if (r3 > 8) {\r
+ if (d) goto do_it;\r
+ } else {\r
+ goto do_it;\r
+ }\r
+\r
+ return;\r
+do_it:\r
+ *pd = d | (*pd & oldmask);\r
+}\r
+\r
+\r
+static void decode_write16(u32 a, u16 d, int r3)\r
+{\r
+ u8 *pd = Pico_mcd->word_ram1M[!(r3 & 1)] + (((a>>1)^1)&0x1ffff);\r
+\r
+ //if ((a & 0x3ffff) < 0x28000) return;\r
+\r
+ r3 &= 0x18;\r
+ d &= 0x0f0f;\r
+ d |= d >> 4;\r
+\r
+ if (r3 == 8) {\r
+ u8 dold = *pd;\r
+ if (!(dold & 0xf0)) dold |= d & 0xf0;\r
+ if (!(dold & 0x0f)) dold |= d & 0x0f;\r
+ *pd = dold;\r
+ } else if (r3 > 8) {\r
+ u8 dold = *pd;\r
+ if (!(d & 0xf0)) d |= dold & 0xf0;\r
+ if (!(d & 0x0f)) d |= dold & 0x0f;\r
+ *pd = d;\r
+ } else {\r
+ *pd = d;\r
+ }\r
+\r
+ //dprintf("FIXME: decode");\r
+}\r