diff --git a/pico/carthw.cfg b/pico/carthw.cfg index ef507949..64e9152c 100644 --- a/pico/carthw.cfg +++ b/pico/carthw.cfg @@ -146,6 +146,16 @@ check_str = 0x150, "ALIEN 3" check_size_gt = 0x080000 hw = x_in_1_mapper +[5-in-1 Megadrive Portable] +check_str = 0x150, "TINY TOON ADVENTURES" +check_size_gt = 0x080000 +hw = x_in_1_mapper + +[40-games-in-1] +check_str = 0x160, "FS MOONWALKER" +check_size_gt = 0x080000 +hw = x_in_1_mapper + [Super 15-in-1] check_str = 0x150, " SHOVE IT!" check_size_gt = 0x020000 diff --git a/pico/carthw/carthw.c b/pico/carthw/carthw.c index e00843df..58669f59 100644 --- a/pico/carthw/carthw.c +++ b/pico/carthw/carthw.c @@ -133,7 +133,7 @@ static carthw_state_chunk carthw_Xin1_state[] = { 0, 0, NULL } }; -// TODO: test a0, reads, w16 +// TODO: reads should also work, but then we need to handle open bus static void carthw_Xin1_write8(u32 a, u32 d) { if ((a & 0xffff00) != 0xa13000) { @@ -141,12 +141,23 @@ static void carthw_Xin1_write8(u32 a, u32 d) return; } - carthw_Xin1_do(a, 0x3f, 16); + carthw_Xin1_do(a, 0x3e, 16); +} + +static void carthw_Xin1_write16(u32 a, u32 d) +{ + if ((a & 0xffff00) != 0xa13000) { + PicoWrite16_io(a, d); + return; + } + + carthw_Xin1_write8(a + 1, d); } static void carthw_Xin1_mem_setup(void) { - cpu68k_map_set(m68k_write8_map, 0xa10000, 0xa1ffff, carthw_Xin1_write8, 1); + cpu68k_map_set(m68k_write8_map, 0xa10000, 0xa1ffff, carthw_Xin1_write8, 1); + cpu68k_map_set(m68k_write16_map, 0xa10000, 0xa1ffff, carthw_Xin1_write16, 1); } static void carthw_Xin1_reset(void) diff --git a/pico/carthw_cfg.c b/pico/carthw_cfg.c index 0de53f7b..94b6d32b 100644 --- a/pico/carthw_cfg.c +++ b/pico/carthw_cfg.c @@ -15,6 +15,22 @@ static const char builtin_carthw_cfg[] = "check_str=0x100,\"IMA IKUNO\"\n" "hw=pico\n" "[]\n" + "check_str=0x120,\"32X SAMPLE PROGRAM\"\n" + "check_str=0x32b74c,\"Bishop Level\"\n" + "prop=force_6btn\n" + "[]\n" + "check_str=0x100,\"SEGA 32X\"\n" + "check_str=0x150,\"WWF RAW\"\n" + "prop=wwfraw_hack#readsbackdatawrittentohighROMadressesfromcache\n" + "[]\n" + "check_str=0x100,\"SEGA 32X\"\n" + "check_str=0x120,\"BLACKTHORNE\"\n" + "prop=blackthorne_hack#readsbackdataoverwrittenby2ndCPUfromcache\n" + "[]\n" + "check_str=0x100,\"SEGA\"\n" + "check_str=0x150,\"MARS CHECK PROGRAM\"\n" + "prop=marscheck_hack#readsbackdataoverwrittenbyDMAfromcache\n" + "[]\n" "check_str=0x120,\"PUGGSY\"\n" "prop=no_sram\n" "[]\n" @@ -27,10 +43,6 @@ static const char builtin_carthw_cfg[] = "check_str=0x150,\" HardBall III\"\n" "sram_range=0x200000,0x20ffff\n" "[]\n" - "check_str=0x150,\"32X SAMPLE PROGRAM\"\n" - "check_str=0x32b74c,\"Bishop Level\"\n" - "prop=force_6btn\n" - "[]\n" "check_str=0x100,\"SEGA SSF\"\n" "hw=ssf2_mapper\n" "[]\n" @@ -66,6 +78,14 @@ static const char builtin_carthw_cfg[] = "check_size_gt=0x080000\n" "hw=x_in_1_mapper\n" "[]\n" + "check_str=0x150,\"TINY TOON ADVENTURES\"\n" + "check_size_gt=0x080000\n" + "hw=x_in_1_mapper\n" + "[]\n" + "check_str=0x160,\"FS MOONWALKER\"\n" + "check_size_gt=0x080000\n" + "hw=x_in_1_mapper\n" + "[]\n" "check_str=0x150,\" SHOVE IT!\"\n" "check_size_gt=0x020000\n" "hw=x_in_1_mapper\n"