diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp index 3c1c55cf154..d208c46848a 100644 --- a/src/mame/drivers/segas16b.cpp +++ b/src/mame/drivers/segas16b.cpp @@ -1780,6 +1780,41 @@ static ADDRESS_MAP_START( lockonph_map, AS_PROGRAM, 16, segas16b_state ) AM_RANGE(0xff0000, 0xffffff) AM_RAM AM_SHARE("workram") ADDRESS_MAP_END + + +static ADDRESS_MAP_START( fpointbl_map, AS_PROGRAM, 16, segas16b_state ) + AM_RANGE(0x000000, 0x0bffff) AM_ROM + + 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, 0x440fff) AM_RAM AM_SHARE("sprites") + + AM_RANGE(0x600006, 0x600007) AM_WRITE(sound_w16) + AM_RANGE(0x601000, 0x601001) AM_READ_PORT("SERVICE") + AM_RANGE(0x601002, 0x601003) AM_READ_PORT("P1") + AM_RANGE(0x601004, 0x601005) AM_READ_PORT("P2") + AM_RANGE(0x600000, 0x600001) AM_READ_PORT("DSW2") + AM_RANGE(0x600002, 0x600003) AM_READ_PORT("DSW1") + + AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram") + AM_RANGE(0x843000, 0x843001) AM_WRITENOP + + AM_RANGE(0xC46000, 0xC4601f) AM_RAM AM_SHARE("bootleg_scroll") + AM_RANGE(0xC46020, 0xC46027) AM_RAM AM_SHARE("bootleg_page") + + AM_RANGE(0xffc000, 0xffffff) AM_RAM AM_SHARE("workram") +ADDRESS_MAP_END +/* + Flash Point (Datsu bootlegs = fpointbl, fpointbj) + Has sound latch at $E000 instead of I/O ports $C0-FF +*/ +static ADDRESS_MAP_START( fpointbl_sound_map, AS_PROGRAM, 8, segas16b_state ) + AM_RANGE(0x0000, 0x7fff) AM_ROM + AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xf800, 0xffff) AM_RAM +ADDRESS_MAP_END + + READ16_MEMBER(segas16b_state::bootleg_custom_io_r) { return m_custom_io_r(space, offset, mem_mask); @@ -2434,6 +2469,96 @@ static INPUT_PORTS_START( fpoint ) INPUT_PORTS_END + +static INPUT_PORTS_START( fpointbl ) + PORT_START("SERVICE") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_SERVICE_NO_TOGGLE(0x04, IP_ACTIVE_LOW) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("P1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + + PORT_START("P2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + + PORT_START("DSW2") + PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW2:1" ) /* Listed as "Unused" */ + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" ) /* Listed as "Unused" */ + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:5,6") + PORT_DIPSETTING( 0x20, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x30, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x40, 0x40, "Clear Round Allowed" ) PORT_DIPLOCATION("SW2:7") /* Use button 3 */ + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x40, "2" ) + /* SW2:8 The mode in which a block falls at twice [ usual ] speed as this when playing 25 minutes or more on one coin. */ + PORT_DIPNAME( 0x80, 0x80, "2 Cell Move" ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) + + PORT_START("DSW1") + PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3,4") + PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x09, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x05, "2 Coins/1 Credit 5/3 6/4" ) + PORT_DIPSETTING( 0x04, "2 Coins/1 Credit 4/3" ) + PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x01, "1 Coin/1 Credit 2/3" ) + PORT_DIPSETTING( 0x02, "1 Coin/1 Credit 4/5" ) + PORT_DIPSETTING( 0x03, "1 Coin/1 Credit 5/6" ) + PORT_DIPSETTING( 0x06, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x00, "Free Play (if Coin B too) or 1/1" ) + PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:5,6,7,8") + PORT_DIPSETTING( 0x70, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x90, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x50, "2 Coins/1 Credit 5/3 6/4" ) + PORT_DIPSETTING( 0x40, "2 Coins/1 Credit 4/3" ) + PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x10, "1 Coin/1 Credit 2/3" ) + PORT_DIPSETTING( 0x20, "1 Coin/1 Credit 4/5" ) + PORT_DIPSETTING( 0x30, "1 Coin/1 Credit 5/6" ) + PORT_DIPSETTING( 0x60, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x00, "Free Play (if Coin A too) or 1/1" ) +INPUT_PORTS_END + + static INPUT_PORTS_START( goldnaxe ) PORT_INCLUDE( system16b_generic ) @@ -3551,6 +3676,52 @@ static MACHINE_CONFIG_DERIVED( system16b_split, system16b ) MCFG_DEVICE_REMOVE("mapper") MACHINE_CONFIG_END +void segas16b_state::tilemap_16b_fpointbl_fill_latch(int i, UINT16* latched_pageselect, UINT16* latched_yscroll, UINT16* latched_xscroll, UINT16* textram) +{ + // grab the page regsisters from where the bootleg stores them instead, then convert them to the format the original video emulation code expects + if (i == 0) + { + latched_pageselect[i] = m_bootleg_page[1]; + latched_yscroll[i] = m_bootleg_scroll[0x00/2]; + latched_xscroll[i] = -m_bootleg_scroll[0x08/2]-1; + + } + else if (i == 1) + { + // 6661 vs 1666 + latched_pageselect[i] = BITSWAP16(m_bootleg_page[3] ,3, 2, 1, 0 , 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 ) ; + latched_yscroll[i] = m_bootleg_scroll[0x10/2]+2; + latched_xscroll[i] = -m_bootleg_scroll[0x18/2]-1; + } + else + { + latched_pageselect[i] = 0x0000; + latched_yscroll[i] = 0; + latched_xscroll[i] = 0; + } +// printf("%02x returning latched page select %04x scrollx %04x scrolly %04x\n", i, latched_pageselect[i], latched_xscroll[i], latched_yscroll[i]); +} + +static MACHINE_CONFIG_DERIVED( fpointbl, system16b ) + + MCFG_DEVICE_REMOVE("mapper") + MCFG_DEVICE_REMOVE("sprites") + + /* basic machine hardware */ + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(fpointbl_map) + + MCFG_CPU_MODIFY("soundcpu") + MCFG_CPU_PROGRAM_MAP(fpointbl_sound_map) + + MCFG_BOOTLEG_SYS16B_SPRITES_ADD("sprites") + MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(75) // these align the pieces with the playfield + MCFG_BOOTLEG_SYS16B_SPRITES_YORIGIN(-2) // some other gfx don't have identical alignment to original tho (flickey character over 'good luck') + + MCFG_DEVICE_MODIFY("segaic16vid") + MCFG_SEGAIC16_VIDEO_SET_PAGELATCH_CB(segas16b_state, tilemap_16b_fpointbl_fill_latch) + +MACHINE_CONFIG_END static MACHINE_CONFIG_START( lockonph, segas16b_state ) @@ -5854,6 +6025,53 @@ ROM_START( fpointd ) ROM_LOAD( "epr-12592.a10", 0x0000, 0x8000, CRC(9a8c11bb) SHA1(399f8e9bdd7aaa4d25817fa9cd4bbf413e5baebe) ) ROM_END +// Datsu bootlegs +ROM_START( fpointbl ) + ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */ + ROM_LOAD16_BYTE( "flpoint.003", 0x000000, 0x10000, CRC(4d6df514) SHA1(168aa1629ab7152ba1984605155406b236954a2c) ) + ROM_LOAD16_BYTE( "flpoint.002", 0x000001, 0x10000, CRC(4dff2ee8) SHA1(bd157d8c168d45e7490a05d5e1e901d9bdda9599) ) + + ROM_REGION( 0x30000, "gfx1", ROMREGION_INVERT ) /* tiles */ + ROM_LOAD( "flpoint.006", 0x00000, 0x10000, CRC(c539727d) SHA1(56674effe1d273128dddd2ff9e02974ec10f3fff) ) + ROM_LOAD( "flpoint.005", 0x10000, 0x10000, CRC(82c0b8b0) SHA1(e1e2e721cb8ad53df33065582dc90edeba9c3cab) ) + ROM_LOAD( "flpoint.004", 0x20000, 0x10000, CRC(522426ae) SHA1(90fd0a19b30a8a61dc4cfa66a64115596333dcc6) ) + + ROM_REGION16_BE( 0x20000, "sprites", 0 ) /* sprites */ + ROM_LOAD16_BYTE( "12596.bin", 0x00001, 0x010000, CRC(4a4041f3) SHA1(4c52b30223d8aa80ccdbb196098cb17e64ad6583) ) + ROM_LOAD16_BYTE( "12597.bin", 0x00000, 0x010000, CRC(6961e676) SHA1(7639d2da086b57a9a8d6100fdacf40d97d7c4772) ) + + ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_LOAD( "flpoint.001", 0x0000, 0x8000, CRC(c5b8e0fe) SHA1(6cf8c67151d8604326fc6dbf976c0635b452a844) ) +ROM_END + +ROM_START( fpointbj ) + ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */ + ROM_LOAD16_BYTE( "boot2.003", 0x000000, 0x10000, CRC(6c00d1b0) SHA1(fd0c47b8ca010a64d3ef91980f93854ebc98fbda) ) + ROM_LOAD16_BYTE( "boot2.002", 0x000001, 0x10000, CRC(c1fcd704) SHA1(697bef464e53fb9891ed15ee2d6210107b693b20) ) + + ROM_REGION( 0x30000, "gfx1", ROMREGION_INVERT ) /* tiles */ + ROM_LOAD( "flpoint.006", 0x00000, 0x10000, CRC(c539727d) SHA1(56674effe1d273128dddd2ff9e02974ec10f3fff) ) + ROM_LOAD( "flpoint.005", 0x10000, 0x10000, CRC(82c0b8b0) SHA1(e1e2e721cb8ad53df33065582dc90edeba9c3cab) ) + ROM_LOAD( "flpoint.004", 0x20000, 0x10000, CRC(522426ae) SHA1(90fd0a19b30a8a61dc4cfa66a64115596333dcc6) ) + + ROM_REGION16_BE( 0x20000, "sprites", 0 ) /* sprites */ + ROM_LOAD16_BYTE( "12596.bin", 0x00001, 0x010000, CRC(4a4041f3) SHA1(4c52b30223d8aa80ccdbb196098cb17e64ad6583) ) + ROM_LOAD16_BYTE( "12597.bin", 0x00000, 0x010000, CRC(6961e676) SHA1(7639d2da086b57a9a8d6100fdacf40d97d7c4772) ) + + ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ + ROM_LOAD( "flpoint.001", 0x0000, 0x8000, CRC(c5b8e0fe) SHA1(6cf8c67151d8604326fc6dbf976c0635b452a844) ) + + /* stuff below isn't used but loaded because it was on the board .. */ + ROM_REGION( 0x0120, "proms", 0 ) + ROM_LOAD( "82s129.1", 0x0000, 0x0100, CRC(a7c22d96) SHA1(160deae8053b09c09328325246598b3518c7e20b) ) + ROM_LOAD( "82s123.2", 0x0100, 0x0020, CRC(58bcf8bd) SHA1(e4d3d179b08c0f3424a6bec0f15058fb1b56f8d8) ) + + ROM_REGION( 0x0600, "plds", 0 ) + ROM_LOAD( "fpointbj_gal16v8_1.bin", 0x0000, 0x0117, CRC(ba7f292c) SHA1(c383700d05663c9c5f29d5d04d16b05cd6adceb8) ) + ROM_LOAD( "fpointbj_gal16v8_3.bin", 0x0200, 0x0117, CRC(ce1ab1e1) SHA1(dcfc0015d8595ee6cb6bb02c95655161a7f3b017) ) + ROM_LOAD( "fpointbj_gal20v8.bin", 0x0400, 0x019d, NO_DUMP ) /* Protected */ +ROM_END + //************************************************************************************************************************* // Flash Point, Sega System 16B // CPU: FD1094 (317-0127A) @@ -8355,6 +8573,13 @@ DRIVER_INIT_MEMBER(segas16b_state, lockonph) m_spritepalbase = 0x800; // tiles are 4bpp so sprite base is 0x800 instead of 0x400 } +DRIVER_INIT_MEMBER(segas16b_state, generic_bootleg) +{ + init_generic(ROM_BOARD_KOREAN); + m_disable_screen_blanking = true; + m_segaic16vid->m_display_enable = 1; +} + //------------------------------------------------- // init_* - game-specific initialization @@ -8715,6 +8940,11 @@ GAME( 1987, sdibl4, sdi, system16b_split, sdi, segas16b GAME( 1987, sdibl5, sdi, system16b_split, sdi, segas16b_state,sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg, set 4)", 0 ) GAME( 1987, sdibl6, sdi, system16b_split, sdi, segas16b_state,sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg, set 5)", 0 ) +// 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 ) + + // ISG 'Selection Master' Type 2006 hardware @@ -9232,3 +9462,9 @@ GAME( 2006, isgsm, 0, isgsm, isgsm, isgsm_state,isgsm, ROT0, /* 01 */ // ?? unknown /* 02 */ GAME( 2006, tetrbx, isgsm, isgsm, tetrbx, isgsm_state,tetrbx, ROT0, "bootleg (ISG)", "Tetris / Bloxeed (Korean System 16 bootleg) (ISG Selection Master Type 2006)", 0 ) /* 03 */ GAME( 2008, shinfz, isgsm, isgsm, shinfz, isgsm_state,shinfz, ROT0, "bootleg (ISG)", "Shinobi / FZ-2006 (Korean System 16 bootleg) (ISG Selection Master Type 2006)", 0 ) // claims it's released in 2006, but set includes the PS2/S16 remake of Fantasy Zone II which is clearly from 2008 + + + + + + diff --git a/src/mame/drivers/system16.cpp b/src/mame/drivers/system16.cpp index 74b9d7346e4..5bef0b40fc8 100644 --- a/src/mame/drivers/system16.cpp +++ b/src/mame/drivers/system16.cpp @@ -531,17 +531,7 @@ static ADDRESS_MAP_START( bayroute_map, AS_PROGRAM, 16, segas1x_bootleg_state ) ADDRESS_MAP_END #endif -/***************************************************************************/ -/* - Flash Point (Datsu bootlegs = fpointbl, fpointbj) - Has sound latch at $E000 instead of I/O ports $C0-FF -*/ -static ADDRESS_MAP_START( fpointbl_sound_map, AS_PROGRAM, 8, segas1x_bootleg_state ) - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) - AM_RANGE(0xf800, 0xffff) AM_RAM -ADDRESS_MAP_END /***************************************************************************/ @@ -840,37 +830,6 @@ ADDRESS_MAP_END /***************************************************************************/ -static ADDRESS_MAP_START( fpointbl_map, AS_PROGRAM, 16, segas1x_bootleg_state ) - AM_RANGE(0x000000, 0x0bffff) AM_ROM - - AM_RANGE(0x400000, 0x40ffff) AM_RAM_WRITE(sys16_tileram_w) AM_SHARE("tileram") - AM_RANGE(0x410000, 0x410fff) AM_RAM_WRITE(sys16_textram_w) AM_SHARE("textram") - AM_RANGE(0x440000, 0x440fff) AM_RAM AM_SHARE("sprites") - - AM_RANGE(0x600006, 0x600007) AM_WRITE(sound_command_irq_w) - AM_RANGE(0x601000, 0x601001) AM_READ_PORT("SERVICE") - AM_RANGE(0x601002, 0x601003) AM_READ_PORT("P1") - AM_RANGE(0x601004, 0x601005) AM_READ_PORT("P2") - AM_RANGE(0x600000, 0x600001) AM_READ_PORT("DSW2") - AM_RANGE(0x600002, 0x600003) AM_READ_PORT("DSW1") - - AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0x843000, 0x843001) AM_WRITENOP - - AM_RANGE(0xC46000, 0xC46001) AM_WRITE(s16bl_fgscrolly_w) - AM_RANGE(0xC46008, 0xC46009) AM_WRITE(s16bl_fgscrollx_w) - AM_RANGE(0xC46010, 0xC46011) AM_WRITE(s16bl_bgscrolly_w) - AM_RANGE(0xC46018, 0xC46019) AM_WRITE(s16bl_bgscrollx_w) - - AM_RANGE(0xC46020, 0xC46021) AM_WRITE(datsu_page0_w) - AM_RANGE(0xc46022, 0xc46023) AM_WRITE(datsu_page1_w) - AM_RANGE(0xC46024, 0xC46025) AM_WRITE(datsu_page2_w) - AM_RANGE(0xC46026, 0xC46027) AM_WRITE(datsu_page3_w) - - AM_RANGE(0xffc000, 0xffffff) AM_RAM // work ram -ADDRESS_MAP_END - - WRITE16_MEMBER(segas1x_bootleg_state::eswat_tilebank0_w) { if (ACCESSING_BITS_0_7) @@ -1770,93 +1729,6 @@ static INPUT_PORTS_START( eswat ) PORT_DIPSETTING( 0x80, "4" ) INPUT_PORTS_END -static INPUT_PORTS_START( fpointbl ) - PORT_START("SERVICE") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_SERVICE_NO_TOGGLE(0x04, IP_ACTIVE_LOW) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("P1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - - PORT_START("P2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL - - PORT_START("DSW2") - PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW2:1" ) /* Listed as "Unused" */ - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2") - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" ) /* Listed as "Unused" */ - PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" ) /* Listed as "Unused" */ - PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:5,6") - PORT_DIPSETTING( 0x20, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x30, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x40, 0x40, "Clear Round Allowed" ) PORT_DIPLOCATION("SW2:7") /* Use button 3 */ - PORT_DIPSETTING( 0x00, "1" ) - PORT_DIPSETTING( 0x40, "2" ) - /* SW2:8 The mode in which a block falls at twice [ usual ] speed as this when playing 25 minutes or more on one coin. */ - PORT_DIPNAME( 0x80, 0x80, "2 Cell Move" ) PORT_DIPLOCATION("SW2:8") - PORT_DIPSETTING( 0x00, DEF_STR( No ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) - - PORT_START("DSW1") - PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3,4") - PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x09, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x05, "2 Coins/1 Credit 5/3 6/4" ) - PORT_DIPSETTING( 0x04, "2 Coins/1 Credit 4/3" ) - PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x01, "1 Coin/1 Credit 2/3" ) - PORT_DIPSETTING( 0x02, "1 Coin/1 Credit 4/5" ) - PORT_DIPSETTING( 0x03, "1 Coin/1 Credit 5/6" ) - PORT_DIPSETTING( 0x06, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) ) - PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) ) - PORT_DIPSETTING( 0x00, "Free Play (if Coin B too) or 1/1" ) - PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:5,6,7,8") - PORT_DIPSETTING( 0x70, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x90, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x50, "2 Coins/1 Credit 5/3 6/4" ) - PORT_DIPSETTING( 0x40, "2 Coins/1 Credit 4/3" ) - PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x10, "1 Coin/1 Credit 2/3" ) - PORT_DIPSETTING( 0x20, "1 Coin/1 Credit 4/5" ) - PORT_DIPSETTING( 0x30, "1 Coin/1 Credit 5/6" ) - PORT_DIPSETTING( 0x60, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) ) - PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) ) - PORT_DIPSETTING( 0x00, "Free Play (if Coin A too) or 1/1" ) -INPUT_PORTS_END static INPUT_PORTS_START( tetris ) PORT_INCLUDE( sys16_common ) /* unconfirmed coinage dip */ @@ -2366,18 +2238,7 @@ static MACHINE_CONFIG_DERIVED( eswatbl, system16_7759 ) MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-124) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( fpointbl, system16 ) - /* basic machine hardware */ - MCFG_CPU_MODIFY("maincpu") - MCFG_CPU_PROGRAM_MAP(fpointbl_map) - - MCFG_CPU_MODIFY("soundcpu") - MCFG_CPU_PROGRAM_MAP(fpointbl_sound_map) - - MCFG_BOOTLEG_SYS16B_SPRITES_ADD("sprites") - MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-112) -MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( tetrisbl, system16 ) @@ -3147,51 +3008,6 @@ ROM_START( eswatbl ) ROM_LOAD( "ic6", 0x10000, 0x40000, CRC(254347c2) SHA1(bf2d83a69a5be375c7e42e9f7d6e65c1095a354c) ) ROM_END -ROM_START( fpointbl ) - ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "flpoint.003", 0x000000, 0x10000, CRC(4d6df514) SHA1(168aa1629ab7152ba1984605155406b236954a2c) ) - ROM_LOAD16_BYTE( "flpoint.002", 0x000001, 0x10000, CRC(4dff2ee8) SHA1(bd157d8c168d45e7490a05d5e1e901d9bdda9599) ) - - ROM_REGION( 0x30000, "gfx1", ROMREGION_INVERT ) /* tiles */ - ROM_LOAD( "flpoint.006", 0x00000, 0x10000, CRC(c539727d) SHA1(56674effe1d273128dddd2ff9e02974ec10f3fff) ) - ROM_LOAD( "flpoint.005", 0x10000, 0x10000, CRC(82c0b8b0) SHA1(e1e2e721cb8ad53df33065582dc90edeba9c3cab) ) - ROM_LOAD( "flpoint.004", 0x20000, 0x10000, CRC(522426ae) SHA1(90fd0a19b30a8a61dc4cfa66a64115596333dcc6) ) - - ROM_REGION16_BE( 0x20000, "sprites", 0 ) /* sprites */ - ROM_LOAD16_BYTE( "12596.bin", 0x00001, 0x010000, CRC(4a4041f3) SHA1(4c52b30223d8aa80ccdbb196098cb17e64ad6583) ) - ROM_LOAD16_BYTE( "12597.bin", 0x00000, 0x010000, CRC(6961e676) SHA1(7639d2da086b57a9a8d6100fdacf40d97d7c4772) ) - - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ - ROM_LOAD( "flpoint.001", 0x0000, 0x8000, CRC(c5b8e0fe) SHA1(6cf8c67151d8604326fc6dbf976c0635b452a844) ) // bootleg rom doesn't work, but should be correct! -ROM_END - -ROM_START( fpointbj ) - ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "boot2.003", 0x000000, 0x10000, CRC(6c00d1b0) SHA1(fd0c47b8ca010a64d3ef91980f93854ebc98fbda) ) - ROM_LOAD16_BYTE( "boot2.002", 0x000001, 0x10000, CRC(c1fcd704) SHA1(697bef464e53fb9891ed15ee2d6210107b693b20) ) - - ROM_REGION( 0x30000, "gfx1", ROMREGION_INVERT ) /* tiles */ - ROM_LOAD( "flpoint.006", 0x00000, 0x10000, CRC(c539727d) SHA1(56674effe1d273128dddd2ff9e02974ec10f3fff) ) - ROM_LOAD( "flpoint.005", 0x10000, 0x10000, CRC(82c0b8b0) SHA1(e1e2e721cb8ad53df33065582dc90edeba9c3cab) ) - ROM_LOAD( "flpoint.004", 0x20000, 0x10000, CRC(522426ae) SHA1(90fd0a19b30a8a61dc4cfa66a64115596333dcc6) ) - - ROM_REGION16_BE( 0x20000, "sprites", 0 ) /* sprites */ - ROM_LOAD16_BYTE( "12596.bin", 0x00001, 0x010000, CRC(4a4041f3) SHA1(4c52b30223d8aa80ccdbb196098cb17e64ad6583) ) - ROM_LOAD16_BYTE( "12597.bin", 0x00000, 0x010000, CRC(6961e676) SHA1(7639d2da086b57a9a8d6100fdacf40d97d7c4772) ) - - ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */ - ROM_LOAD( "flpoint.001", 0x0000, 0x8000, CRC(c5b8e0fe) SHA1(6cf8c67151d8604326fc6dbf976c0635b452a844) ) // bootleg rom doesn't work, but should be correct! - - /* stuff below isn't used but loaded because it was on the board .. */ - ROM_REGION( 0x0120, "proms", 0 ) - ROM_LOAD( "82s129.1", 0x0000, 0x0100, CRC(a7c22d96) SHA1(160deae8053b09c09328325246598b3518c7e20b) ) - ROM_LOAD( "82s123.2", 0x0100, 0x0020, CRC(58bcf8bd) SHA1(e4d3d179b08c0f3424a6bec0f15058fb1b56f8d8) ) - - ROM_REGION( 0x0600, "plds", 0 ) - ROM_LOAD( "fpointbj_gal16v8_1.bin", 0x0000, 0x0117, CRC(ba7f292c) SHA1(c383700d05663c9c5f29d5d04d16b05cd6adceb8) ) - ROM_LOAD( "fpointbj_gal16v8_3.bin", 0x0200, 0x0117, CRC(ce1ab1e1) SHA1(dcfc0015d8595ee6cb6bb02c95655161a7f3b017) ) - ROM_LOAD( "fpointbj_gal20v8.bin", 0x0400, 0x019d, NO_DUMP ) /* Protected */ -ROM_END ROM_START( tetrisbl ) ROM_REGION( 0x040000, "maincpu", ROMREGION_ERASEFF ) /* 68000 code */ @@ -3773,14 +3589,7 @@ DRIVER_INIT_MEMBER(segas1x_bootleg_state,eswatbl) m_spritebank_type = 1; } -DRIVER_INIT_MEMBER(segas1x_bootleg_state,fpointbl) -{ - DRIVER_INIT_CALL(common); - //sys16_video_config(fpoint_update_proc, -0xb8, NULL); - m_back_yscroll = 2; - m_fore_yscroll = 2; -} DRIVER_INIT_MEMBER(segas1x_bootleg_state,ddcrewbl) { @@ -3945,8 +3754,6 @@ GAME( 1989, tturfbl, tturf, tturfbl, tturf, segas1x_bootleg_state, GAME( 1989, dduxbl, ddux, dduxbl, ddux, segas1x_bootleg_state, dduxbl, ROT0, "bootleg (Datsu)", "Dynamite Dux (Datsu bootleg)", MACHINE_NOT_WORKING ) GAME( 1988, altbeastbl, altbeast, tetrisbl, tetris, segas1x_bootleg_state, altbeastbl, ROT0, "bootleg (Datsu)", "Altered Beast (Datsu bootleg)", MACHINE_NOT_WORKING ) GAME( 1989, eswatbl, eswat, eswatbl, eswat, segas1x_bootleg_state, eswatbl, ROT0, "bootleg", "E-Swat - Cyber Police (bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) -GAME( 1989, fpointbl, fpoint, fpointbl, fpointbl, segas1x_bootleg_state, fpointbl, ROT0, "bootleg (Datsu)", "Flash Point (World, bootleg)", MACHINE_NOT_WORKING ) -GAME( 1989, fpointbj, fpoint, fpointbl, fpointbl, segas1x_bootleg_state, fpointbl, ROT0, "bootleg (Datsu)", "Flash Point (Japan, bootleg)", MACHINE_NOT_WORKING ) GAME( 1988, tetrisbl, tetris, tetrisbl, tetris, segas1x_bootleg_state, dduxbl, ROT0, "bootleg", "Tetris (bootleg)", 0 ) /* Tetris-based hardware */ diff --git a/src/mame/includes/segas16b.h b/src/mame/includes/segas16b.h index 7d536b7f326..ab840a0edcb 100644 --- a/src/mame/includes/segas16b.h +++ b/src/mame/includes/segas16b.h @@ -52,7 +52,9 @@ public: m_spritepalbase(0x400), m_gfxdecode(*this, "gfxdecode"), m_sound_decrypted_opcodes(*this, "sound_decrypted_opcodes"), - m_decrypted_opcodes(*this, "decrypted_opcodes") + m_decrypted_opcodes(*this, "decrypted_opcodes"), + m_bootleg_scroll(*this, "bootleg_scroll"), + m_bootleg_page(*this, "bootleg_page") { } // memory mapping @@ -89,6 +91,7 @@ public: DECLARE_DRIVER_INIT(generic_5358_small); DECLARE_DRIVER_INIT(generic_5797); DECLARE_DRIVER_INIT(generic_korean); + DECLARE_DRIVER_INIT(generic_bootleg); DECLARE_DRIVER_INIT(lockonph); // game-specific driver init DECLARE_DRIVER_INIT(isgsm); @@ -124,6 +127,9 @@ public: DECLARE_WRITE16_MEMBER( tileram_w ) { m_segaic16vid->tileram_w(space,offset,data,mem_mask); }; DECLARE_WRITE16_MEMBER( textram_w ) { m_segaic16vid->textram_w(space,offset,data,mem_mask); }; + // bootleg stuff + void tilemap_16b_fpointbl_fill_latch(int i, UINT16* latched_pageselect, UINT16* latched_yscroll, UINT16* latched_xscroll, UINT16* textram); + protected: // internal types typedef delegate i8751_sim_delegate; @@ -214,6 +220,10 @@ protected: required_device m_gfxdecode; optional_shared_ptr m_sound_decrypted_opcodes; optional_shared_ptr m_decrypted_opcodes; + optional_shared_ptr m_bootleg_scroll; + optional_shared_ptr m_bootleg_page; + + }; diff --git a/src/mame/video/sega16sp.h b/src/mame/video/sega16sp.h index e09a69e71d0..ed758b1299f 100644 --- a/src/mame/video/sega16sp.h +++ b/src/mame/video/sega16sp.h @@ -50,6 +50,8 @@ MCFG_DEVICE_ADD(_tag, SEGA_SYS16B_SPRITES, 0) #define MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(_xorigin) \ sega_sys16b_sprite_device::set_local_originx(*device, _xorigin); +#define MCFG_BOOTLEG_SYS16B_SPRITES_YORIGIN(_yorigin) \ + sega_sys16b_sprite_device::set_local_originy(*device, _yorigin); diff --git a/src/mame/video/segaic16.cpp b/src/mame/video/segaic16.cpp index 5924b3ace4a..908114af488 100644 --- a/src/mame/video/segaic16.cpp +++ b/src/mame/video/segaic16.cpp @@ -1029,6 +1029,7 @@ void segaic16_video_device::tilemap_16b_fill_latch(int i, UINT16* latched_pagese latched_pageselect[i] = textram[0xe80 / 2 + i]; latched_yscroll[i] = textram[0xe90/2 + i]; latched_xscroll[i] = textram[0xe98/2 + i]; +// printf("%02x returning latched page select %04x scrollx %04x scrolly %04x\n", i, latched_pageselect[i], latched_xscroll[i], latched_yscroll[i]); } TIMER_CALLBACK_MEMBER( segaic16_video_device::tilemap_16b_latch_values ) diff --git a/src/mame/video/segaic16.h b/src/mame/video/segaic16.h index bf01acc16a2..ce15f9a9c97 100644 --- a/src/mame/video/segaic16.h +++ b/src/mame/video/segaic16.h @@ -12,7 +12,7 @@ typedef device_delegate segaic16_video_pagelatch_delegate; -#define MCFG_segaic16_video_SET_TILE_INDIRECT( _class, _method) \ +#define MCFG_SEGAIC16_VIDEO_SET_PAGELATCH_CB( _class, _method) \ segaic16_video_device::set_pagelatch_cb(*device, segaic16_video_pagelatch_delegate(&_class::_method, #_class "::" #_method, NULL, (_class *)0));