From a9ee09aee53848c633a8fab4ad7802815a78c426 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Thu, 28 Sep 2017 22:28:40 +0100 Subject: [PATCH 1/3] dumped touchgo SRAM from 2 more boards, used that dump to verify / correct the SRAM image [Peter Wilhelmsen, Morten Shearman Kirkegaard, David Haywood] --- src/mame/drivers/gaelco2.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/mame/drivers/gaelco2.cpp b/src/mame/drivers/gaelco2.cpp index 282e042ffba..77a302c97d2 100644 --- a/src/mame/drivers/gaelco2.cpp +++ b/src/mame/drivers/gaelco2.cpp @@ -1185,10 +1185,10 @@ ROM_START( touchgo ) /* REF: 950906 */ ROM_LOAD16_BYTE( "tg_57", 0x000001, 0x080000, CRC(0dfd3f65) SHA1(afb2ce8988c84f211ac71b84928ce4c421de7fee) ) ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) /* DS5002FP code */ - ROM_LOAD( "touchgo_ds5002fp_sram.bin", 0x00000, 0x8000, BAD_DUMP CRC(a497e1af) SHA1(68ee1f87631183541adadf927fb18ed4422d5bb6) ) /* marked as BAD_DUMP until a 2nd board is used to verify */ + ROM_LOAD( "touchgo_ds5002fp_sram.bin", 0x00000, 0x8000, CRC(6a238adb) SHA1(4ac5ff8e3d90454f764477146a0b8dc8c8062420) ) ROM_REGION( 0x100, "gaelco_ds5002fp:mcu:internal", ROMREGION_ERASE00 ) - /* touchgo requires some valids in scratchram to be initialized or it won't copy the high score table when it boots */ + /* touchgo requires some values in scratchram to be initialized or it won't copy the high score table when it boots */ ROM_LOAD( "touchgo_scratch", 0x00, 0x80, CRC(f9ca54ff) SHA1(416f7bd89442dc1f736efe457b0f9a7f4f9f0bd5) ) /* these are the default states stored in NVRAM */ DS5002FP_SET_MON( 0x19 ) @@ -1212,10 +1212,10 @@ ROM_START( touchgon ) /* REF 950906, no plug-in daughterboard, Non North America ROM_LOAD16_BYTE( "tg57.bin", 0x000001, 0x080000, CRC(ee891835) SHA1(9f8c60e5e3696b70f756c3521e10313005053cc7) ) ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) /* DS5002FP code */ - ROM_LOAD( "touchgo_ds5002fp_sram.bin", 0x00000, 0x8000, BAD_DUMP CRC(e977d2db) SHA1(d6a4ef74eb776d9e898f25a70f0302f3199b4fa1) ) /* marked as BAD_DUMP until a 2nd board is used to verify */ + ROM_LOAD( "touchgo_ds5002fp_sram.bin", 0x00000, 0x8000, CRC(6a238adb) SHA1(4ac5ff8e3d90454f764477146a0b8dc8c8062420) ) ROM_REGION( 0x100, "gaelco_ds5002fp:mcu:internal", ROMREGION_ERASE00 ) - /* touchgo requires some valids in scratchram to be initialized or it won't copy the high score table when it boots */ + /* touchgo requires some values in scratchram to be initialized or it won't copy the high score table when it boots */ ROM_LOAD( "touchgo_scratch", 0x00, 0x80, CRC(f9ca54ff) SHA1(416f7bd89442dc1f736efe457b0f9a7f4f9f0bd5) ) /* these are the default states stored in NVRAM */ DS5002FP_SET_MON( 0x19 ) @@ -1239,10 +1239,10 @@ ROM_START( touchgoe ) /* REF: 950510-1 */ ROM_LOAD16_BYTE( "tg57", 0x000001, 0x080000, CRC(845787b5) SHA1(27c9910cd9f38328326ecb5cd093dfeb6d4f6244) ) ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) /* DS5002FP code */ - ROM_LOAD( "touchgo_ds5002fp_sram.bin", 0x00000, 0x8000, BAD_DUMP CRC(e977d2db) SHA1(d6a4ef74eb776d9e898f25a70f0302f3199b4fa1) ) /* marked as BAD_DUMP until a 2nd board is used to verify */ + ROM_LOAD( "touchgo_ds5002fp_sram.bin", 0x00000, 0x8000, CRC(6a238adb) SHA1(4ac5ff8e3d90454f764477146a0b8dc8c8062420) ) ROM_REGION( 0x100, "gaelco_ds5002fp:mcu:internal", ROMREGION_ERASE00 ) - /* touchgo requires some valids in scratchram to be initialized or it won't copy the high score table when it boots */ + /* touchgo requires some values in scratchram to be initialized or it won't copy the high score table when it boots */ ROM_LOAD( "touchgo_scratch", 0x00, 0x80, CRC(f9ca54ff) SHA1(416f7bd89442dc1f736efe457b0f9a7f4f9f0bd5) ) /* these are the default states stored in NVRAM */ DS5002FP_SET_MON( 0x19 ) From fa49f73ac775bd0e6729b8a4afdaefde68544ff3 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Thu, 28 Sep 2017 22:30:26 +0100 Subject: [PATCH 2/3] update androidp year to 1987 based on ingame date showing after end credits --- src/mame/drivers/himesiki.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mame/drivers/himesiki.cpp b/src/mame/drivers/himesiki.cpp index ee067fe50e6..4e9b4ed85d1 100644 --- a/src/mame/drivers/himesiki.cpp +++ b/src/mame/drivers/himesiki.cpp @@ -565,6 +565,6 @@ ROM_END GAME( 1989, himesiki, 0, himesiki, himesiki, himesiki_state, 0, ROT90, "Hi-Soft", "Himeshikibu (Japan)", MACHINE_SUPPORTS_SAVE ) -// the game changed significantly between these 2 versions -GAME( 198?, androidp, 0, himesiki, androidp, himesiki_state, 0, ROT90, "Nasco", "Android (prototype, later build)", MACHINE_SUPPORTS_SAVE ) +// the game changed significantly between these 2 versions, it is possible the later build was actually released +GAME( 1987, androidp, 0, himesiki, androidp, himesiki_state, 0, ROT90, "Nasco", "Android (prototype, later build)", MACHINE_SUPPORTS_SAVE ) // shows 1987 copyright after staff list during ending GAME( 198?, androidpo, androidp, himesiki, androidpo, himesiki_state, 0, ROT90, "Nasco", "Android (prototype, early build)", MACHINE_SUPPORTS_SAVE ) From 19ad8edfc7161d5a1cea3d51ca6c2e0165089b11 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Sat, 30 Sep 2017 16:29:20 +0100 Subject: [PATCH 3/3] new clones marked as NOT WORKING Flash Point (bootleg) [farzeno, David Haywood] I've taken care of the encryption, but like most bootlegs it's going to need a bit more tweaking as registers are moved around etc. --- src/mame/drivers/segas16b.cpp | 65 +++++++++++++++++++++++++++++++++++ src/mame/includes/segas16b.h | 3 ++ src/mame/mame.lst | 1 + 3 files changed, 69 insertions(+) diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp index 58cd3ae5456..c235793f4ac 100644 --- a/src/mame/drivers/segas16b.cpp +++ b/src/mame/drivers/segas16b.cpp @@ -1750,11 +1750,34 @@ static ADDRESS_MAP_START( system16b_bootleg_map, AS_PROGRAM, 16, segas16b_state AM_RANGE(0xffc000, 0xffffff) AM_RAM AM_SHARE("workram") ADDRESS_MAP_END +static ADDRESS_MAP_START( map_fpointbla, AS_PROGRAM, 16, segas16b_state ) + AM_RANGE(0x000000, 0x01ffff) AM_ROM + AM_RANGE(0x02002e, 0x02002f) AM_READ(fpointbla_2002e_r) + + AM_RANGE(0x443002, 0x443003) AM_READ(fpointbla_2002e_r) + AM_RANGE(0x44301a, 0x44301b) AM_READ(fpointbla_2002e_r) + AM_RANGE(0x44302a, 0x44302b) AM_READ(fpointbla_2002e_r) + + AM_RANGE(0x400000, 0x40ffff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, tileram_r, tileram_w) AM_SHARE("tileram") + AM_RANGE(0x410000, 0x410fff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, textram_r, textram_w) AM_SHARE("textram") + AM_RANGE(0x440000, 0x4407ff) AM_RAM AM_SHARE("sprites") + AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram") + + AM_RANGE(0x843000, 0x843001) AM_READWRITE(bootleg_custom_io_r, bootleg_custom_io_w) + AM_RANGE(0x843018, 0x843019) AM_READ(fpointbla_2002e_r) + + AM_RANGE(0xffc000, 0xffffff) AM_RAM AM_SHARE("workram") +ADDRESS_MAP_END + static ADDRESS_MAP_START( decrypted_opcodes_map_x, AS_OPCODES, 16, segas16b_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_SHARE("decrypted_opcodes") ADDRESS_MAP_END +static ADDRESS_MAP_START( decrypted_opcodes_map_fpointbla, AS_OPCODES, 16, segas16b_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x000000, 0x01ffff) AM_ROM AM_SHARE("decrypted_opcodes") +ADDRESS_MAP_END static ADDRESS_MAP_START( lockonph_map, AS_PROGRAM, 16, segas16b_state ) // this still appears to have a mapper device, does the hardware use it? should we move this to all be configured by it? @@ -1814,6 +1837,11 @@ static ADDRESS_MAP_START( fpointbl_sound_map, AS_PROGRAM, 8, segas16b_state ) ADDRESS_MAP_END +READ16_MEMBER(segas16b_state::fpointbla_2002e_r) +{ + return 0xffff; +} + READ16_MEMBER(segas16b_state::bootleg_custom_io_r) { return m_custom_io_r(space, offset, mem_mask); @@ -3690,6 +3718,12 @@ static MACHINE_CONFIG_DERIVED( system16b_split, system16b ) MCFG_DEVICE_REMOVE("mapper") MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( system16b_fpointbla, system16b_split ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(map_fpointbla) + MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map_fpointbla) +MACHINE_CONFIG_END + void segas16b_state::tilemap_16b_fpointbl_fill_latch(int i, uint16_t* latched_pageselect, uint16_t* latched_yscroll, uint16_t* latched_xscroll, uint16_t* textram) { // grab the page regsisters from where the bootleg stores them instead, then convert them to the format the original video emulation code expects @@ -6089,6 +6123,25 @@ ROM_START( fpointbj ) ROM_LOAD( "fpointbj_gal20v8.bin", 0x0400, 0x019d, NO_DUMP ) /* Protected */ ROM_END +ROM_START( fpointbla ) + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code + ROM_LOAD16_BYTE( "B3-ic59.bin", 0x000000, 0x10000, CRC(3b7d3b3a) SHA1(6c440f7706d392336a1e9165ac125b45695b9e0c) ) + ROM_LOAD16_BYTE( "B2-ic55.bin", 0x000001, 0x10000, CRC(4b7e2a54) SHA1(598d16be99491fe13485ec2b546444d92dad49c7) ) + + ROM_REGION( 0x30000, "gfx1", ROMREGION_INVERT ) // tiles + ROM_LOAD( "B8-9.bin", 0x00000, 0x10000, CRC(c539727d) SHA1(56674effe1d273128dddd2ff9e02974ec10f3fff) ) + ROM_LOAD( "B7-8.bin", 0x10000, 0x10000, CRC(82c0b8b0) SHA1(e1e2e721cb8ad53df33065582dc90edeba9c3cab) ) + ROM_LOAD( "B6-7.bin", 0x20000, 0x10000, CRC(522426ae) SHA1(90fd0a19b30a8a61dc4cfa66a64115596333dcc6) ) + + ROM_REGION16_BE( 0x10000, "sprites", 0 ) // sprites + ROM_LOAD16_BYTE( "B5-5.bin", 0x00001, 0x08000, CRC(93181d2e) SHA1(1d25bfea889012a9616ed03791f830f2a8139367) ) + ROM_LOAD16_BYTE( "B4-3.bin", 0x00000, 0x08000, CRC(ae466f37) SHA1(5fb423695a1d862f628ad2ea7651831ef48f6f0b) ) + + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU + ROM_LOAD( "B1-ic19.bin", 0x0000, 0x8000, CRC(9a8c11bb) SHA1(399f8e9bdd7aaa4d25817fa9cd4bbf413e5baebe) ) +ROM_END + + //************************************************************************************************************************* // Flash Point, Sega System 16B // CPU: FD1094 (317-0127A) @@ -8726,6 +8779,17 @@ DRIVER_INIT_MEMBER(segas16b_state,sdi_5358_small) } } +DRIVER_INIT_MEMBER(segas16b_state, generic_5358_fpointbla) +{ + init_generic(ROM_BOARD_171_5358); + + uint16_t* rom = (uint16_t*)memregion("maincpu")->base(); + + for (int i = 0;i < 0x10000;i++) + { + m_decrypted_opcodes[i] = BITSWAP16(rom[i], 8,9,10,11,12,13,14,15, 0, 1, 2, 3, 4, 5, 6, 7); + } +} DRIVER_INIT_MEMBER(segas16b_state,defense_5358_small) { @@ -8980,6 +9044,7 @@ GAME( 1987, sdibl6, sdi, system16b_split, sdi, segas16b // bootlegs with modified hardware GAME( 1989, fpointbl, fpoint, fpointbl, fpointbl, segas16b_state, generic_bootleg, ROT0, "bootleg (Datsu)", "Flash Point (World, bootleg)", 0 ) GAME( 1989, fpointbj, fpoint, fpointbl, fpointbl, segas16b_state, generic_bootleg, ROT0, "bootleg (Datsu)", "Flash Point (Japan, bootleg)", 0 ) +GAME( 1989, fpointbla, fpoint, system16b_fpointbla, fpoint, segas16b_state, generic_5358_fpointbla, ROT0, "bootleg", "Flash Point (bootleg)", MACHINE_NOT_WORKING ) diff --git a/src/mame/includes/segas16b.h b/src/mame/includes/segas16b.h index 5d255e7f8b9..f8dbc6aafbb 100644 --- a/src/mame/includes/segas16b.h +++ b/src/mame/includes/segas16b.h @@ -85,6 +85,8 @@ public: DECLARE_READ16_MEMBER( bootleg_custom_io_r ); DECLARE_WRITE16_MEMBER( bootleg_custom_io_w ); + DECLARE_READ16_MEMBER( fpointbla_2002e_r ); + // sound CPU read/write handlers DECLARE_WRITE8_MEMBER( upd7759_control_w ); DECLARE_READ8_MEMBER( upd7759_status_r ); @@ -111,6 +113,7 @@ public: DECLARE_DRIVER_INIT(hwchamp_5521); DECLARE_DRIVER_INIT(altbeas5_5521); DECLARE_DRIVER_INIT(sdi_5358_small); + DECLARE_DRIVER_INIT(generic_5358_fpointbla); DECLARE_DRIVER_INIT(altbeasj_5521); DECLARE_DRIVER_INIT(ddux_5704); DECLARE_DRIVER_INIT(snapper); diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 2790ca79cc2..98e66bdecdf 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -33418,6 +33418,7 @@ fpoint1 // (c) 1989 (Japan, FD1094) fpoint1d // fpointbj // (c) 1989 (Datsu bootleg, Japan) fpointbl // (c) 1989 (Datsu bootleg) +fpointbla // fpointd // goldnaxe // (c) 1989 (8751) goldnaxe1 // (c) 1989 (FD1094)