mirror of
https://github.com/holub/mame
synced 2025-05-27 16:21:34 +03:00
Added basic support for the bootleg sprites used by automat and secretab - From Haze (nw)
This commit is contained in:
parent
f5829e450b
commit
65f72e224f
@ -581,32 +581,6 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( secretab_map, AS_PROGRAM, 16, dec0_state )
|
||||
AM_RANGE(0x000000, 0x05ffff) AM_ROM
|
||||
AM_RANGE(0x240000, 0x240007) AM_DEVWRITE_LEGACY("tilegen2", deco_bac06_pf_control_0_w)
|
||||
AM_RANGE(0x240010, 0x240017) AM_DEVWRITE_LEGACY("tilegen2", deco_bac06_pf_control_1_w)
|
||||
AM_RANGE(0x246000, 0x247fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco_bac06_pf_data_r, deco_bac06_pf_data_w)
|
||||
// AM_RANGE(0x240000, 0x24007f) AM_DEVREADWRITE_LEGACY("tilegen2", deco_bac06_pf_colscroll_r, deco_bac06_pf_colscroll_w)
|
||||
// AM_RANGE(0x240400, 0x2407ff) AM_DEVREADWRITE_LEGACY("tilegen2", deco_bac06_pf_rowscroll_r, deco_bac06_pf_rowscroll_w)
|
||||
|
||||
// AM_RANGE(0x200000, 0x300007) AM_DEVWRITE_LEGACY("tilegen1", deco_bac06_pf_control_0_w)
|
||||
// AM_RANGE(0x300010, 0x300017) AM_DEVWRITE_LEGACY("tilegen1", deco_bac06_pf_control_1_w)
|
||||
AM_RANGE(0x24e000, 0x24ffff) AM_DEVREADWRITE_LEGACY("tilegen1", deco_bac06_pf_data_r, deco_bac06_pf_data_w)
|
||||
// AM_RANGE(0x340000, 0x34007f) AM_DEVREADWRITE_LEGACY("tilegen1", deco_bac06_pf_colscroll_r, deco_bac06_pf_colscroll_w)
|
||||
// AM_RANGE(0x340400, 0x3407ff) AM_DEVREADWRITE_LEGACY("tilegen1", deco_bac06_pf_rowscroll_r, deco_bac06_pf_rowscroll_w)
|
||||
|
||||
AM_RANGE(0x314008, 0x31400f) AM_READ(slyspy_controls_r)
|
||||
// AM_RANGE(0x314000, 0x314003) AM_WRITE(slyspy_control_w)
|
||||
|
||||
AM_RANGE(0x300000, 0x300007) AM_DEVWRITE_LEGACY("tilegen3", deco_bac06_pf_control_0_w)
|
||||
AM_RANGE(0x300010, 0x300017) AM_DEVWRITE_LEGACY("tilegen3", deco_bac06_pf_control_1_w)
|
||||
AM_RANGE(0x300800, 0x30087f) AM_DEVREADWRITE_LEGACY("tilegen3", deco_bac06_pf_colscroll_r, deco_bac06_pf_colscroll_w)
|
||||
AM_RANGE(0x300c00, 0x300fff) AM_DEVREADWRITE_LEGACY("tilegen3", deco_bac06_pf_rowscroll_r, deco_bac06_pf_rowscroll_w)
|
||||
AM_RANGE(0x301000, 0x3017ff) AM_DEVREADWRITE_LEGACY("tilegen3", deco_bac06_pf_data_r, deco_bac06_pf_data_w)
|
||||
AM_RANGE(0x301800, 0x307fff) AM_RAM AM_SHARE("ram") /* Sly spy main ram */
|
||||
AM_RANGE(0x310000, 0x3107ff) AM_RAM_WRITE(paletteram_xxxxBBBBGGGGRRRR_word_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0xb08000, 0xb087ff) AM_RAM AM_SHARE("spriteram") /* Sprites */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/* swizzle the palette writes around so we can use the same gfx plane ordering as the originals */
|
||||
READ16_MEMBER( dec0_automat_state::automat_palette_r )
|
||||
@ -656,15 +630,44 @@ static ADDRESS_MAP_START( automat_map, AS_PROGRAM, 16, dec0_automat_state )
|
||||
AM_RANGE(0x400008, 0x400009) AM_WRITE(dec0_priority_w)
|
||||
|
||||
AM_RANGE(0xff8000, 0xffbfff) AM_RAM AM_SHARE("ram") /* Main ram */
|
||||
AM_RANGE(0xffc000, 0xffc7ff) AM_RAM AM_SHARE("spriteram") /* Sprites */
|
||||
AM_RANGE(0xffc000, 0xffcfff) AM_RAM AM_SHARE("spriteram") /* Sprites */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( secretab_map, AS_PROGRAM, 16, dec0_automat_state )
|
||||
AM_RANGE(0x000000, 0x05ffff) AM_ROM
|
||||
// AM_RANGE(0x240000, 0x240007) AM_DEVWRITE_LEGACY("tilegen2", deco_bac06_pf_control_0_w)
|
||||
// AM_RANGE(0x240010, 0x240017) AM_DEVWRITE_LEGACY("tilegen2", deco_bac06_pf_control_1_w)
|
||||
AM_RANGE(0x246000, 0x247fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco_bac06_pf_data_r, deco_bac06_pf_data_w)
|
||||
// AM_RANGE(0x240000, 0x24007f) AM_DEVREADWRITE_LEGACY("tilegen2", deco_bac06_pf_colscroll_r, deco_bac06_pf_colscroll_w)
|
||||
// AM_RANGE(0x240400, 0x2407ff) AM_DEVREADWRITE_LEGACY("tilegen2", deco_bac06_pf_rowscroll_r, deco_bac06_pf_rowscroll_w)
|
||||
|
||||
// AM_RANGE(0x200000, 0x300007) AM_DEVWRITE_LEGACY("tilegen1", deco_bac06_pf_control_0_w)
|
||||
// AM_RANGE(0x300010, 0x300017) AM_DEVWRITE_LEGACY("tilegen1", deco_bac06_pf_control_1_w)
|
||||
AM_RANGE(0x24e000, 0x24ffff) AM_DEVREADWRITE_LEGACY("tilegen1", deco_bac06_pf_data_r, deco_bac06_pf_data_w)
|
||||
// AM_RANGE(0x340000, 0x34007f) AM_DEVREADWRITE_LEGACY("tilegen1", deco_bac06_pf_colscroll_r, deco_bac06_pf_colscroll_w)
|
||||
// AM_RANGE(0x340400, 0x3407ff) AM_DEVREADWRITE_LEGACY("tilegen1", deco_bac06_pf_rowscroll_r, deco_bac06_pf_rowscroll_w)
|
||||
|
||||
AM_RANGE(0x314008, 0x31400f) AM_READ(slyspy_controls_r)
|
||||
// AM_RANGE(0x314000, 0x314003) AM_WRITE(slyspy_control_w)
|
||||
|
||||
AM_RANGE(0x300000, 0x300007) AM_RAM
|
||||
AM_RANGE(0x300010, 0x300017) AM_RAM
|
||||
AM_RANGE(0x300800, 0x30087f) AM_RAM
|
||||
AM_RANGE(0x300c00, 0x300fff) AM_RAM
|
||||
AM_RANGE(0x301000, 0x3017ff) AM_DEVREADWRITE_LEGACY("tilegen3", deco_bac06_pf_data_r, deco_bac06_pf_data_w)
|
||||
AM_RANGE(0x301800, 0x307fff) AM_RAM AM_SHARE("ram") /* Sly spy main ram */
|
||||
AM_RANGE(0x310000, 0x3107ff) AM_READWRITE(automat_palette_r, automat_palette_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0xb08000, 0xb08fff) AM_RAM AM_SHARE("spriteram") /* Sprites */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
WRITE8_MEMBER(dec0_automat_state::automat_adpcm_w)
|
||||
{
|
||||
m_automat_adpcm_byte = data;
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( automat_s_map, AS_PROGRAM, 8, dec0_automat_state )
|
||||
AM_RANGE(0x0103, 0x0103) AM_WRITENOP
|
||||
AM_RANGE(0xc000, 0xc7ff) AM_RAM
|
||||
AM_RANGE(0xc800, 0xc801) AM_DEVWRITE_LEGACY("2203a", ym2203_w)
|
||||
AM_RANGE(0xd800, 0xd800) AM_READ(soundlatch_byte_r)
|
||||
@ -1247,6 +1250,7 @@ static const gfx_layout automat_tilelayout2 =
|
||||
8*8
|
||||
};
|
||||
|
||||
|
||||
static GFXDECODE_START( dec0 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 ) /* Characters 8x8 */
|
||||
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 512, 16 ) /* Tiles 16x16 */
|
||||
@ -1254,13 +1258,6 @@ static GFXDECODE_START( dec0 )
|
||||
GFXDECODE_ENTRY( "gfx4", 0, tilelayout, 256, 16 ) /* Sprites 16x16 */
|
||||
GFXDECODE_END
|
||||
|
||||
static GFXDECODE_START( automat )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 ) /* Characters 8x8 */
|
||||
GFXDECODE_ENTRY( "gfx2", 0, automat_tilelayout3, 512, 16 ) /* Tiles 16x16 */
|
||||
GFXDECODE_ENTRY( "gfx3", 0, automat_tilelayout2, 768, 16 ) /* Tiles 16x16 */
|
||||
GFXDECODE_ENTRY( "gfx4", 0, automat_spritelayout, 256, 16 ) /* Sprites 16x16 */
|
||||
GFXDECODE_END
|
||||
|
||||
static GFXDECODE_START( midres )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 256, 16 ) /* Characters 8x8 */
|
||||
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 512, 16 ) /* Tiles 16x16 */
|
||||
@ -1268,57 +1265,22 @@ static GFXDECODE_START( midres )
|
||||
GFXDECODE_ENTRY( "gfx4", 0, tilelayout, 0, 16 ) /* Sprites 16x16 */
|
||||
GFXDECODE_END
|
||||
|
||||
/* TODO: clean up this. */
|
||||
static const gfx_layout secretab_charlayout =
|
||||
{
|
||||
8,8,
|
||||
RGN_FRAC(1,4),
|
||||
4,
|
||||
{ RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) },
|
||||
{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
|
||||
8*8
|
||||
};
|
||||
|
||||
static const gfx_layout secretab_tilelayout =
|
||||
{
|
||||
16,16,
|
||||
0x400, // RGN_FRAC(1,16) causes divide by zero?!
|
||||
4,
|
||||
{ RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) },
|
||||
{ 0,1,2,3,4,5,6,7, 0x4000*8+0, 0x4000*8+1, 0x4000*8+2, 0x4000*8+3, 0x4000*8+4, 0x4000*8+5, 0x4000*8+6, 0x4000*8+7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 0x2000*8+0*8, 0x2000*8+1*8, 0x2000*8+2*8, 0x2000*8+3*8, 0x2000*8+4*8, 0x2000*8+5*8, 0x2000*8+6*8, 0x2000*8+7*8 },
|
||||
8*8
|
||||
};
|
||||
|
||||
static const gfx_layout secretab_tilelayout2 =
|
||||
{
|
||||
16,16,
|
||||
0x800,
|
||||
4,
|
||||
{ RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) },
|
||||
{ 0,1,2,3,4,5,6,7,0x8000*8+0, 0x8000*8+1, 0x8000*8+2, 0x8000*8+3, 0x8000*8+4, 0x8000*8+5, 0x8000*8+6, 0x8000*8+7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 0x4000*8+0*8, 0x4000*8+1*8, 0x4000*8+2*8, 0x4000*8+3*8, 0x4000*8+4*8, 0x4000*8+5*8, 0x4000*8+6*8, 0x4000*8+7*8 },
|
||||
8*8
|
||||
};
|
||||
|
||||
static const gfx_layout secretab_tilelayout3 =
|
||||
{
|
||||
16,16,
|
||||
RGN_FRAC(1,4),
|
||||
4,
|
||||
{ RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) },
|
||||
{ 0,1,2,3,4,5,6,7,16*8+0, 16*8+1,16*8+2,16*8+3,16*8+4,16*8+5,16*8+6,16*8+7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
||||
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
|
||||
16*16
|
||||
};
|
||||
|
||||
static GFXDECODE_START( automat )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 ) /* Characters 8x8 */
|
||||
GFXDECODE_ENTRY( "gfx2", 0, automat_tilelayout3, 512, 16 ) /* Tiles 16x16 */
|
||||
GFXDECODE_ENTRY( "gfx3", 0, automat_tilelayout2, 768, 16 ) /* Tiles 16x16 */
|
||||
GFXDECODE_ENTRY( "gfx4", 0, automat_spritelayout, 256, 16 ) /* Sprites 16x16 */
|
||||
GFXDECODE_END
|
||||
|
||||
static GFXDECODE_START( secretab )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, secretab_charlayout, 0x000, 0x10 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0, secretab_tilelayout, 0x200, 0x10 )
|
||||
GFXDECODE_ENTRY( "gfx3", 0, secretab_tilelayout, 0x300, 0x10 )
|
||||
GFXDECODE_ENTRY( "gfx4", 0, secretab_tilelayout3, 0x100, 0x10 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x000, 0x10 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0, automat_tilelayout2, 0x200, 0x10 )
|
||||
GFXDECODE_ENTRY( "gfx3", 0, automat_tilelayout2, 0x300, 0x10 )
|
||||
GFXDECODE_ENTRY( "gfx4", 0, automat_spritelayout, 0x100, 0x10 )
|
||||
GFXDECODE_END
|
||||
|
||||
/******************************************************************************/
|
||||
@ -1423,7 +1385,7 @@ static void automat_vclk_cb(device_t *device)
|
||||
else
|
||||
{
|
||||
msm5205_data_w(device, state->m_automat_adpcm_byte >> 4);
|
||||
// cputag_set_input_line(device->machine(), "maincpu", INPUT_LINE_NMI, PULSE_LINE);
|
||||
//cputag_set_input_line(device->machine(), "audiocpu", INPUT_LINE_NMI, PULSE_LINE); // gives some scratch samples but breaks other sounds too
|
||||
}
|
||||
|
||||
state->m_automat_msm5205_vclk_toggle ^= 1;
|
||||
@ -1452,6 +1414,7 @@ static MACHINE_CONFIG_START( automat, dec0_automat_state )
|
||||
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 57.41 Hz, 529us Vblank */)
|
||||
MCFG_SCREEN_RAW_PARAMS(DEC0_PIXEL_CLOCK,DEC0_HTOTAL,DEC0_HBEND,DEC0_HBSTART,DEC0_VTOTAL,DEC0_VBEND,DEC0_VBSTART)
|
||||
MCFG_SCREEN_UPDATE_STATIC(automat)
|
||||
MCFG_VIDEO_START(dec0_nodma)
|
||||
|
||||
MCFG_DEVICE_ADD("tilegen1", DECO_BAC06, 0)
|
||||
deco_bac06_device::set_gfx_region_wide(*device, 0,0,0);
|
||||
@ -1460,6 +1423,9 @@ static MACHINE_CONFIG_START( automat, dec0_automat_state )
|
||||
MCFG_DEVICE_ADD("tilegen3", DECO_BAC06, 0)
|
||||
deco_bac06_device::set_gfx_region_wide(*device, 0,2,0);
|
||||
|
||||
MCFG_DEVICE_ADD("spritegen", DECO_MXC06, 0)
|
||||
deco_mxc06_device::set_gfx_region(*device, 3);
|
||||
|
||||
|
||||
MCFG_PALETTE_LENGTH(1024)
|
||||
MCFG_GFXDECODE(automat)
|
||||
@ -1484,6 +1450,60 @@ static MACHINE_CONFIG_START( automat, dec0_automat_state )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
// this seems very similar to the automat bootleg
|
||||
static MACHINE_CONFIG_START( secretab, dec0_automat_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz/2) /* verified on pcb (20MHZ OSC) 68000P12 running at 10Mhz */
|
||||
MCFG_CPU_PROGRAM_MAP(secretab_map)
|
||||
MCFG_CPU_VBLANK_INT("screen", irq6_line_hold)/* VBL */
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", Z80, 3000000)// ?
|
||||
MCFG_CPU_PROGRAM_MAP(automat_s_map)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
// MCFG_SCREEN_REFRESH_RATE(57.41)
|
||||
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 57.41 Hz, 529us Vblank */)
|
||||
MCFG_SCREEN_RAW_PARAMS(DEC0_PIXEL_CLOCK,DEC0_HTOTAL,DEC0_HBEND,DEC0_HBSTART,DEC0_VTOTAL,DEC0_VBEND,DEC0_VBSTART)
|
||||
MCFG_SCREEN_UPDATE_STATIC(secretab)
|
||||
MCFG_VIDEO_START(dec0_nodma)
|
||||
|
||||
MCFG_DEVICE_ADD("tilegen1", DECO_BAC06, 0)
|
||||
deco_bac06_device::set_gfx_region_wide(*device, 0,0,0);
|
||||
MCFG_DEVICE_ADD("tilegen2", DECO_BAC06, 0)
|
||||
deco_bac06_device::set_gfx_region_wide(*device, 0,1,0);
|
||||
MCFG_DEVICE_ADD("tilegen3", DECO_BAC06, 0)
|
||||
deco_bac06_device::set_gfx_region_wide(*device, 0,2,0);
|
||||
|
||||
MCFG_DEVICE_ADD("spritegen", DECO_MXC06, 0)
|
||||
deco_mxc06_device::set_gfx_region(*device, 3);
|
||||
|
||||
|
||||
MCFG_PALETTE_LENGTH(1024)
|
||||
MCFG_GFXDECODE(secretab)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_SOUND_ADD("2203a", YM2203, 1500000)
|
||||
MCFG_SOUND_ROUTE(0, "mono", 0.90)
|
||||
MCFG_SOUND_ROUTE(1, "mono", 0.90)
|
||||
MCFG_SOUND_ROUTE(2, "mono", 0.90)
|
||||
MCFG_SOUND_ROUTE(3, "mono", 0.35)
|
||||
|
||||
MCFG_SOUND_ADD("2203b", YM2203, 1500000)
|
||||
MCFG_SOUND_ROUTE(0, "mono", 0.90)
|
||||
MCFG_SOUND_ROUTE(1, "mono", 0.90)
|
||||
MCFG_SOUND_ROUTE(2, "mono", 0.90)
|
||||
MCFG_SOUND_ROUTE(3, "mono", 0.35)
|
||||
|
||||
MCFG_SOUND_ADD("msm", MSM5205, 384000/2)
|
||||
MCFG_SOUND_CONFIG(msm5205_config)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( hbarrel, dec0_base_sound )
|
||||
|
||||
@ -1650,29 +1670,6 @@ MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( secretab, dec0_base_sound_alt )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz/2) /* verified on pcb (20MHZ OSC) 68000P12 running at 10Mhz */
|
||||
MCFG_CPU_PROGRAM_MAP(secretab_map)
|
||||
MCFG_CPU_VBLANK_INT("screen", irq6_line_hold)/* VBL */
|
||||
|
||||
/* z80 */
|
||||
// MCFG_CPU_ADD("audiocpu", H6280, XTAL_12MHz/2/3) /* verified on pcb (6Mhz is XIN on pin 10 of H6280, verified on pcb */
|
||||
// MCFG_CPU_PROGRAM_MAP(slyspy_s_map)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
// MCFG_SCREEN_REFRESH_RATE(57.41)
|
||||
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 57.41 Hz, 529us Vblank */)
|
||||
MCFG_SCREEN_RAW_PARAMS(DEC0_PIXEL_CLOCK,DEC0_HTOTAL,DEC0_HBEND,DEC0_HBSTART,DEC0_VTOTAL,DEC0_VBEND,DEC0_VBSTART)
|
||||
// MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_UPDATE_STATIC(robocop)
|
||||
|
||||
MCFG_GFXDECODE(secretab)
|
||||
MCFG_VIDEO_START(dec0_nodma)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( midres, dec0_base_sound_alt )
|
||||
|
||||
@ -2713,37 +2710,37 @@ ROM_START( secretab )
|
||||
|
||||
ROM_REGION( 0x40000, "charset", 0 )
|
||||
ROM_LOAD( "sa_08.bin", 0x00000, 0x10000,CRC(4806b951) SHA1(a2fa5b8587132747067d7d64ccfd14129a34ef58) )
|
||||
ROM_LOAD( "sa_10.bin", 0x10000, 0x10000,CRC(843c4679) SHA1(871f3e77aa7e628e924a40d06ddec700487e23fb) )
|
||||
ROM_LOAD( "sa_12.bin", 0x20000, 0x10000,CRC(f9e2cd5f) SHA1(f2c3f6e763c6f80307e9daee533d316b05cd02c5) )
|
||||
ROM_LOAD( "sa_12.bin", 0x10000, 0x10000,CRC(f9e2cd5f) SHA1(f2c3f6e763c6f80307e9daee533d316b05cd02c5) )
|
||||
ROM_LOAD( "sa_10.bin", 0x20000, 0x10000,CRC(843c4679) SHA1(871f3e77aa7e628e924a40d06ddec700487e23fb) )
|
||||
ROM_LOAD( "sa_14.bin", 0x30000, 0x10000,CRC(3dac9128) SHA1(f3a2068e90973c1f04f1bbaa209111e3f9669ee0) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx1", 0 ) /* chars */
|
||||
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT ) /* chars */
|
||||
ROM_COPY( "charset", 0x00000, 0x00000, 0x8000 )
|
||||
ROM_COPY( "charset", 0x10000, 0x08000, 0x8000 )
|
||||
ROM_COPY( "charset", 0x20000, 0x10000, 0x8000 )
|
||||
ROM_COPY( "charset", 0x30000, 0x18000, 0x8000 )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx2", 0 ) /* tiles */
|
||||
ROM_REGION( 0x20000, "gfx2", ROMREGION_INVERT ) /* tiles */
|
||||
ROM_COPY( "charset", 0x08000, 0x00000, 0x8000 )
|
||||
ROM_COPY( "charset", 0x18000, 0x08000, 0x8000 )
|
||||
ROM_COPY( "charset", 0x28000, 0x10000, 0x8000 )
|
||||
ROM_COPY( "charset", 0x38000, 0x18000, 0x8000 )
|
||||
|
||||
ROM_REGION( 0x40000, "gfx3", 0 ) /* tiles */
|
||||
ROM_REGION( 0x40000, "gfx3", ROMREGION_INVERT ) /* tiles */
|
||||
ROM_LOAD( "sa_09.bin", 0x00000, 0x10000,CRC(9e412267) SHA1(482cd6e772fa21f15db66c27acf85e8f97f7c5a5) )
|
||||
ROM_LOAD( "sa_11.bin", 0x10000, 0x10000,CRC(e87650db) SHA1(381352428b12fd4a8cd13270009ff7602aa41a0b) )
|
||||
ROM_LOAD( "sa_07.bin", 0x20000, 0x10000,CRC(6ad2e575) SHA1(b6b159cb36e222fe62fc10271602226f027440e4) )
|
||||
ROM_LOAD( "sa_13.bin", 0x30000, 0x10000,CRC(e8601057) SHA1(fd73a36fb84049154248d250ffea68b1ee39a43f) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx4", ROMREGION_INVERT ) /* sprites */
|
||||
ROM_LOAD( "sa_15.bin", 0x10000, 0x10000,CRC(54fcbc39) SHA1(293a6799193b01424c3eac86cf90cc023aa771db) )
|
||||
ROM_LOAD( "sa_16.bin", 0x00000, 0x10000,CRC(ff72b838) SHA1(fdc48ecdd2225fc69472313f34973f6add8fb558) )
|
||||
ROM_LOAD( "sa_17.bin", 0x30000, 0x10000,CRC(f61972c8) SHA1(fa9ddca3473091b4879171d8f3b302e8f2b45149) )
|
||||
ROM_LOAD( "sa_18.bin", 0x20000, 0x10000,CRC(4f989f00) SHA1(ae7ae6e62e6a516ae3c8ebbeb5e39887c1961add) )
|
||||
ROM_LOAD( "sa_19.bin", 0x50000, 0x10000,CRC(d29bc22e) SHA1(ce0935d09f7e94fa32247c86e14a74b73514b29e) )
|
||||
ROM_LOAD( "sa_20.bin", 0x40000, 0x10000,CRC(447e4f0b) SHA1(97db103e505a6e11eb9bdb3622e4aa3b796a9714) )
|
||||
ROM_LOAD( "sa_21.bin", 0x70000, 0x10000,CRC(dc6a38df) SHA1(9043df911389d3f085299f2f2202cab356473a32) )
|
||||
ROM_LOAD( "sa_22.bin", 0x60000, 0x10000,CRC(d234cae5) SHA1(0cd07bf087a4da19a5da29785385de9eee52d0fb) )
|
||||
ROM_REGION( 0x80000, "gfx4", 0 ) /* sprites */
|
||||
ROM_LOAD( "sa_20.bin", 0x00000, 0x10000,CRC(447e4f0b) SHA1(97db103e505a6e11eb9bdb3622e4aa3b796a9714) )
|
||||
ROM_LOAD( "sa_19.bin", 0x10000, 0x10000,CRC(d29bc22e) SHA1(ce0935d09f7e94fa32247c86e14a74b73514b29e) )
|
||||
ROM_LOAD( "sa_16.bin", 0x20000, 0x10000,CRC(ff72b838) SHA1(fdc48ecdd2225fc69472313f34973f6add8fb558) )
|
||||
ROM_LOAD( "sa_15.bin", 0x30000, 0x10000,CRC(54fcbc39) SHA1(293a6799193b01424c3eac86cf90cc023aa771db) )
|
||||
ROM_LOAD( "sa_22.bin", 0x40000, 0x10000,CRC(d234cae5) SHA1(0cd07bf087a4da19a5da29785385de9eee52d0fb) )
|
||||
ROM_LOAD( "sa_21.bin", 0x50000, 0x10000,CRC(dc6a38df) SHA1(9043df911389d3f085299f2f2202cab356473a32) )
|
||||
ROM_LOAD( "sa_18.bin", 0x60000, 0x10000,CRC(4f989f00) SHA1(ae7ae6e62e6a516ae3c8ebbeb5e39887c1961add) )
|
||||
ROM_LOAD( "sa_17.bin", 0x70000, 0x10000,CRC(f61972c8) SHA1(fa9ddca3473091b4879171d8f3b302e8f2b45149) )
|
||||
|
||||
ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */
|
||||
ROM_LOAD( "sa_02.bin", 0x00000, 0x10000,CRC(439eb5a9) SHA1(8d6baad8a1e89279ef0a378941d3d9b49a606864) ) // both halves identical
|
||||
@ -3060,27 +3057,35 @@ GAME( 1987, hbarrel, 0, hbarrel, hbarrel, hbarrel, ROT270, "Data Ea
|
||||
GAME( 1987, hbarrelw, hbarrel, hbarrel, hbarrel, hbarrel, ROT270, "Data East Corporation", "Heavy Barrel (World)", 0 )
|
||||
GAME( 1988, baddudes, 0, baddudes, baddudes, baddudes, ROT0, "Data East USA", "Bad Dudes vs. Dragonninja (US)", 0 )
|
||||
GAME( 1988, drgninja, baddudes, baddudes, drgninja, baddudes, ROT0, "Data East Corporation", "Dragonninja (Japan)", 0 )
|
||||
GAME( 1988, drgninjab, baddudes, baddudes, drgninja, baddudes, ROT0, "bootleg", "Dragonninja (bootleg)", 0 )
|
||||
/* A Bad Dudes bootleg with 68705 like the midres and ffantasy ones exists, but is not dumped */
|
||||
GAME( 1988, birdtry, 0, birdtry, birdtry, birdtry, ROT270, "Data East Corporation", "Birdie Try (Japan)", GAME_UNEMULATED_PROTECTION )
|
||||
GAME( 1988, robocop, 0, robocop, robocop, robocop, ROT0, "Data East Corporation", "Robocop (World revision 4)", 0 )
|
||||
GAME( 1988, robocopw, robocop, robocop, robocop, robocop, ROT0, "Data East Corporation", "Robocop (World revision 3)", 0 )
|
||||
GAME( 1988, robocopj, robocop, robocop, robocop, robocop, ROT0, "Data East Corporation", "Robocop (Japan)", 0 )
|
||||
GAME( 1988, robocopu, robocop, robocop, robocop, robocop, ROT0, "Data East USA", "Robocop (US revision 1)", 0 )
|
||||
GAME( 1988, robocopu0, robocop, robocop, robocop, robocop, ROT0, "Data East USA", "Robocop (US revision 0)", 0 )
|
||||
GAME( 1988, robocopb, robocop, robocopb, robocop, robocop, ROT0, "bootleg", "Robocop (World bootleg)", 0)
|
||||
GAME( 1988, automat, robocop, automat, robocop, robocop, ROT0, "bootleg", "Automat (bootleg of Robocop)", GAME_NOT_WORKING )
|
||||
GAME( 1989, hippodrm, 0, hippodrm, hippodrm, hippodrm, ROT0, "Data East USA", "Hippodrome (US)", 0 )
|
||||
GAME( 1989, ffantasy, hippodrm, hippodrm, ffantasy, hippodrm, ROT0, "Data East Corporation", "Fighting Fantasy (Japan revision 2)", 0 )
|
||||
GAME( 1989, ffantasya, hippodrm, hippodrm, ffantasy, hippodrm, ROT0, "Data East Corporation", "Fighting Fantasy (Japan)", 0 )
|
||||
GAME( 1989, ffantasybl, hippodrm, midres, midres, 0, ROT0, "bootleg", "Fighting Fantasy (bootleg with 68705)", GAME_NOT_WORKING ) // 68705 not dumped, might be the same as midresb
|
||||
GAME( 1989, slyspy, 0, slyspy, slyspy, slyspy, ROT0, "Data East USA", "Sly Spy (US revision 3)", 0 )
|
||||
GAME( 1989, slyspy2, slyspy, slyspy, slyspy, slyspy, ROT0, "Data East USA", "Sly Spy (US revision 2)", 0 )
|
||||
GAME( 1989, secretag, slyspy, slyspy, slyspy, slyspy, ROT0, "Data East Corporation", "Secret Agent (World)", 0 )
|
||||
GAME( 1989, secretab, slyspy, secretab, slyspy, slyspy, ROT0, "bootleg", "Secret Agent (bootleg)", GAME_NOT_WORKING )
|
||||
GAME( 1989, midres, 0, midres, midres, 0, ROT0, "Data East Corporation", "Midnight Resistance (World)", 0 )
|
||||
GAME( 1989, midresu, midres, midres, midresu, 0, ROT0, "Data East USA", "Midnight Resistance (US)", 0 )
|
||||
GAME( 1989, midresj, midres, midres, midresu, 0, ROT0, "Data East Corporation", "Midnight Resistance (Japan)", 0 )
|
||||
GAME( 1989, midresb, midres, midresb, midresb, midresb, ROT0, "bootleg", "Midnight Resistance (bootleg with 68705)", 0 ) // need to hook up 68705?
|
||||
GAME( 1990, bouldash, 0, slyspy, bouldash, slyspy, ROT0, "Data East Corporation (licensed from First Star)", "Boulder Dash / Boulder Dash Part 2 (World)", 0 )
|
||||
GAME( 1990, bouldashj, bouldash, slyspy, bouldash, slyspy, ROT0, "Data East Corporation (licensed from First Star)", "Boulder Dash / Boulder Dash Part 2 (Japan)", 0 )
|
||||
|
||||
// bootlegs
|
||||
|
||||
// more or less just an unprotected versions of the game, everything intact
|
||||
GAME( 1988, robocopb, robocop, robocopb, robocop, robocop, ROT0, "bootleg", "Robocop (World bootleg)", 0)
|
||||
GAME( 1988, drgninjab, baddudes, baddudes, drgninja, baddudes, ROT0, "bootleg", "Dragonninja (bootleg)", 0 )
|
||||
|
||||
// this is a common bootleg board
|
||||
GAME( 1989, midresb, midres, midresb, midresb, midresb, ROT0, "bootleg", "Midnight Resistance (bootleg with 68705)", 0 ) // need to hook up 68705?
|
||||
GAME( 1989, ffantasybl, hippodrm, midres, midres, 0, ROT0, "bootleg", "Fighting Fantasy (bootleg with 68705)", GAME_NOT_WORKING ) // 68705 not dumped, might be the same as midresb
|
||||
/* A Bad Dudes bootleg with 68705 like the midres and ffantasy ones exists, but is not dumped */
|
||||
|
||||
// these are different to the above but quite similar to each other
|
||||
GAME( 1988, automat, robocop, automat, robocop, robocop, ROT0, "bootleg", "Automat (bootleg of Robocop)", GAME_NOT_WORKING ) // sound rom / music from section z with mods for ADPCM?
|
||||
GAME( 1989, secretab, slyspy, secretab, slyspy, slyspy, ROT0, "bootleg", "Secret Agent (bootleg)", GAME_NOT_WORKING )
|
||||
|
@ -99,11 +99,13 @@ SCREEN_UPDATE_IND16( hbarrel );
|
||||
SCREEN_UPDATE_IND16( baddudes );
|
||||
SCREEN_UPDATE_IND16( birdtry );
|
||||
SCREEN_UPDATE_IND16( robocop );
|
||||
SCREEN_UPDATE_IND16( automat );
|
||||
SCREEN_UPDATE_IND16( hippodrm );
|
||||
SCREEN_UPDATE_IND16( slyspy );
|
||||
SCREEN_UPDATE_IND16( midres );
|
||||
|
||||
// bootlegs
|
||||
SCREEN_UPDATE_IND16( automat );
|
||||
SCREEN_UPDATE_IND16( secretab );
|
||||
|
||||
/*----------- defined in machine/dec0.c -----------*/
|
||||
|
||||
|
@ -180,7 +180,6 @@ SCREEN_UPDATE_IND16( automat )
|
||||
deco_bac06_pf_control_1_w(state->m_tilegen3,0,state->m_automat_scroll_regs[1] - 0x0108, 0xffff);
|
||||
deco_bac06_pf_control_1_w(state->m_tilegen3,1,state->m_automat_scroll_regs[0], 0xffff);
|
||||
|
||||
// sprites seem very different, probably need new functions
|
||||
|
||||
state->flip_screen_set(state->m_tilegen1->get_flip_state());
|
||||
|
||||
@ -208,15 +207,63 @@ SCREEN_UPDATE_IND16( automat )
|
||||
state->m_tilegen2->deco_bac06_pf_draw(screen.machine(),bitmap,cliprect,0, 0x00, 0x00, 0x00, 0x00);
|
||||
}
|
||||
|
||||
// if (state->m_pri & 0x02)
|
||||
// state->m_spritegen->draw_sprites(screen.machine(), bitmap, cliprect, state->m_buffered_spriteram, 0x08, trans^0x08, 0x0f);
|
||||
// else
|
||||
// state->m_spritegen->draw_sprites(screen.machine(), bitmap, cliprect, state->m_buffered_spriteram, 0x00, 0x00, 0x0f);
|
||||
if (state->m_pri & 0x02)
|
||||
state->m_spritegen->draw_sprites_bootleg(screen.machine(), bitmap, cliprect, state->m_buffered_spriteram, 0x08, trans^0x08, 0x0f);
|
||||
else
|
||||
state->m_spritegen->draw_sprites_bootleg(screen.machine(), bitmap, cliprect, state->m_buffered_spriteram, 0x00, 0x00, 0x0f);
|
||||
|
||||
state->m_tilegen1->deco_bac06_pf_draw(screen.machine(),bitmap,cliprect,0, 0x00, 0x00, 0x00, 0x00);
|
||||
return 0;
|
||||
}
|
||||
|
||||
SCREEN_UPDATE_IND16( secretab )
|
||||
{
|
||||
dec0_automat_state *state = screen.machine().driver_data<dec0_automat_state>();
|
||||
|
||||
// layer enables seem different... where are they?
|
||||
|
||||
// the bootleg doesn't write these registers, I think they're hardcoded?, so fake them for compatibility with our implementation..
|
||||
deco_bac06_pf_control_0_w(state->m_tilegen1,0,0x0003, 0x00ff); // 8x8
|
||||
deco_bac06_pf_control_0_w(state->m_tilegen1,1,0x0003, 0x00ff);
|
||||
deco_bac06_pf_control_0_w(state->m_tilegen1,2,0x0000, 0x00ff);
|
||||
deco_bac06_pf_control_0_w(state->m_tilegen1,3,0x0001, 0x00ff); // dimensions
|
||||
|
||||
deco_bac06_pf_control_0_w(state->m_tilegen2,0,0x0082, 0x00ff); // 16x16
|
||||
deco_bac06_pf_control_0_w(state->m_tilegen2,1,0x0000, 0x00ff);
|
||||
deco_bac06_pf_control_0_w(state->m_tilegen2,2,0x0000, 0x00ff);
|
||||
deco_bac06_pf_control_0_w(state->m_tilegen2,3,0x0001, 0x00ff); // dimensions
|
||||
|
||||
deco_bac06_pf_control_0_w(state->m_tilegen3,0,0x0082, 0x00ff); // 16x16
|
||||
deco_bac06_pf_control_0_w(state->m_tilegen3,1,0x0003, 0x00ff);
|
||||
deco_bac06_pf_control_0_w(state->m_tilegen3,2,0x0000, 0x00ff);
|
||||
deco_bac06_pf_control_0_w(state->m_tilegen3,3,0x0001, 0x00ff); // dimensions
|
||||
|
||||
// scroll registers got written elsewhere, copy them across
|
||||
deco_bac06_pf_control_1_w(state->m_tilegen1,0,0x0000, 0xffff); // no scroll?
|
||||
deco_bac06_pf_control_1_w(state->m_tilegen1,1,0x0000, 0xffff); // no scroll?
|
||||
|
||||
deco_bac06_pf_control_1_w(state->m_tilegen2,0,state->m_automat_scroll_regs[3] - 0x010a, 0xffff);
|
||||
deco_bac06_pf_control_1_w(state->m_tilegen2,1,state->m_automat_scroll_regs[2], 0xffff);
|
||||
|
||||
deco_bac06_pf_control_1_w(state->m_tilegen3,0,state->m_automat_scroll_regs[1] - 0x0108, 0xffff);
|
||||
deco_bac06_pf_control_1_w(state->m_tilegen3,1,state->m_automat_scroll_regs[0], 0xffff);
|
||||
|
||||
state->flip_screen_set(state->m_tilegen1->get_flip_state());
|
||||
|
||||
state->m_tilegen3->deco_bac06_pf_draw(screen.machine(),bitmap,cliprect,TILEMAP_DRAW_OPAQUE, 0x00, 0x00, 0x00, 0x00);
|
||||
state->m_tilegen2->deco_bac06_pf_draw(screen.machine(),bitmap,cliprect,0, 0x00, 0x00, 0x00, 0x00);
|
||||
|
||||
state->m_spritegen->draw_sprites_bootleg(screen.machine(), bitmap, cliprect, state->m_buffered_spriteram, 0x00, 0x00, 0x0f);
|
||||
|
||||
/* Redraw top 8 pens of top 8 palettes over sprites */
|
||||
if (state->m_pri&0x80)
|
||||
state->m_tilegen2->deco_bac06_pf_draw(screen.machine(),bitmap,cliprect,0,0x08,0x08,0x08,0x08); // upper 8 pens of upper 8 priority marked tiles
|
||||
|
||||
state->m_tilegen1->deco_bac06_pf_draw(screen.machine(),bitmap,cliprect,0, 0x00, 0x00, 0x00, 0x00);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
SCREEN_UPDATE_IND16( birdtry )
|
||||
@ -339,7 +386,7 @@ VIDEO_START( dec0 )
|
||||
|
||||
VIDEO_START( automat )
|
||||
{
|
||||
// dec0_state *state = machine.driver_data<dec0_state>();
|
||||
// dec0_state *state = machine.driver_data<dec0_state>();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -157,6 +157,39 @@ void deco_mxc06_device::draw_sprites( running_machine &machine, bitmap_ind16 &bi
|
||||
}
|
||||
}
|
||||
|
||||
/* this is used by the automat bootleg, it seems to have greatly simplified sprites compared to the real chip */
|
||||
/* spriteram is twice the size tho! */
|
||||
void deco_mxc06_device::draw_sprites_bootleg( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT16* spriteram, int pri_mask, int pri_val, int col_mask )
|
||||
{
|
||||
int offs;
|
||||
|
||||
offs = 0;
|
||||
while (offs < 0x800 / 2)
|
||||
{
|
||||
int sx, sy, code, color, flipx, flipy;
|
||||
|
||||
code = spriteram[offs];
|
||||
sy = 240-spriteram[offs + 1]; // 241- will align robocop with the ground but causes other issues too
|
||||
sx = spriteram[offs + 2];
|
||||
code |= (spriteram[offs + 3] &0x0f)<<8;
|
||||
flipx = !(spriteram[offs + 3] &0x20);
|
||||
flipy = (spriteram[offs + 3] &0x40);
|
||||
color = (spriteram[offs + 0x400]&0xf0)>>4;
|
||||
sx |= (spriteram[offs + 0x400]&0x01)<<8;
|
||||
sx -= 16;
|
||||
sx &=0x1ff;
|
||||
|
||||
sx -= 0x100;
|
||||
|
||||
drawgfx_transpen(bitmap,cliprect,machine.gfx[m_gfxregion],
|
||||
code,
|
||||
color & col_mask,
|
||||
flipx,flipy,
|
||||
sx,sy,0);
|
||||
|
||||
offs += 4;
|
||||
}
|
||||
}
|
||||
|
||||
void deco_mxc06_device::device_start()
|
||||
{
|
||||
|
@ -8,6 +8,7 @@ public:
|
||||
static void set_gfx_region(device_t &device, int region);
|
||||
void set_gfxregion(int region) { m_gfxregion = region; };
|
||||
void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT16* spriteram16, int pri_mask, int pri_val, int col_mask );
|
||||
void draw_sprites_bootleg( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT16* spriteram, int pri_mask, int pri_val, int col_mask );
|
||||
void set_pri_type( int type ) { m_priority_type = type; }
|
||||
protected:
|
||||
virtual void device_start();
|
||||
|
Loading…
Reference in New Issue
Block a user