improve fpointbl / fpointbj emulation (nw)

This commit is contained in:
David Haywood 2016-03-02 02:36:24 +00:00
parent 8acf3bacc8
commit 65134b2b42
6 changed files with 251 additions and 195 deletions

View File

@ -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

View File

@ -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 */

View File

@ -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<void ()> i8751_sim_delegate;
@ -214,6 +220,10 @@ protected:
required_device<gfxdecode_device> m_gfxdecode;
optional_shared_ptr<UINT8> m_sound_decrypted_opcodes;
optional_shared_ptr<UINT16> m_decrypted_opcodes;
optional_shared_ptr<UINT16> m_bootleg_scroll;
optional_shared_ptr<UINT16> m_bootleg_page;
};

View File

@ -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);

View File

@ -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 )

View File

@ -12,7 +12,7 @@
typedef device_delegate<void (int, UINT16*, UINT16*, UINT16*, UINT16*)> 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));