diff --git a/src/mame/drivers/backfire.c b/src/mame/drivers/backfire.c index 020bf7ad167..686d3da683d 100644 --- a/src/mame/drivers/backfire.c +++ b/src/mame/drivers/backfire.c @@ -41,6 +41,8 @@ public: /* devices */ device_t *maincpu; device_t *deco16ic; + device_t *deco16ic34; + device_t *lscreen; device_t *rscreen; device_t *eeprom; @@ -70,7 +72,7 @@ static VIDEO_START( backfire ) state->left = auto_bitmap_alloc(machine, 80*8, 32*8, BITMAP_FORMAT_INDEXED16); state->right = auto_bitmap_alloc(machine, 80*8, 32*8, BITMAP_FORMAT_INDEXED16); - + state->save_pointer(NAME(state->spriteram_1), 0x2000/2); state->save_pointer(NAME(state->spriteram_2), 0x2000/2); @@ -89,8 +91,8 @@ static SCREEN_UPDATE( backfire ) /* screen 1 uses pf1 as the forground and pf3 as the background */ /* screen 2 uses pf2 as the foreground and pf4 as the background */ - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); if (screen == state->lscreen) { @@ -100,14 +102,14 @@ static SCREEN_UPDATE( backfire ) if (state->left_priority[0] == 0) { - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 1); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 1); deco16ic_tilemap_1_draw(state->deco16ic, bitmap, cliprect, 0, 2); screen->machine->device("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram_1, 0x800); } else if (state->left_priority[0] == 2) { deco16ic_tilemap_1_draw(state->deco16ic, bitmap, cliprect, 0, 2); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 4); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 4); screen->machine->device("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram_1, 0x800); } else @@ -120,14 +122,14 @@ static SCREEN_UPDATE( backfire ) if (state->right_priority[0] == 0) { - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 1); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 1); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2); screen->machine->device("spritegen2")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram_2, 0x800); } else if (state->right_priority[0] == 2) { deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2); - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 4); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 4); screen->machine->device("spritegen2")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram_2, 0x800); } else @@ -248,14 +250,14 @@ static WRITE32_HANDLER( backfire_spriteram2_w ) static ADDRESS_MAP_START( backfire_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x110000, 0x111fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x114000, 0x115fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x120000, 0x120fff) AM_READWRITE(backfire_pf1_rowscroll_r, backfire_pf1_rowscroll_w) AM_RANGE(0x124000, 0x124fff) AM_READWRITE(backfire_pf2_rowscroll_r, backfire_pf2_rowscroll_w) - AM_RANGE(0x130000, 0x13001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w) - AM_RANGE(0x140000, 0x141fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w) - AM_RANGE(0x144000, 0x145fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w) + AM_RANGE(0x130000, 0x13001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) + AM_RANGE(0x140000, 0x141fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) + AM_RANGE(0x144000, 0x145fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x150000, 0x150fff) AM_READWRITE(backfire_pf3_rowscroll_r, backfire_pf3_rowscroll_w) AM_RANGE(0x154000, 0x154fff) AM_READWRITE(backfire_pf4_rowscroll_r, backfire_pf4_rowscroll_w) AM_RANGE(0x160000, 0x161fff) AM_WRITE(backfire_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) @@ -379,6 +381,7 @@ static const gfx_layout tilelayout = static GFXDECODE_START( backfire ) GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 128 ) /* Characters 8x8 */ GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */ + GFXDECODE_ENTRY( "gfx2", 0, charlayout, 0, 128 ) /* Characters 8x8 */ GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */ GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 0x200, 32 ) /* Sprites 16x16 (screen 1) */ GFXDECODE_ENTRY( "gfx4", 0, spritelayout, 0x600, 32 ) /* Sprites 16x16 (screen 2) */ @@ -414,14 +417,25 @@ static int backfire_bank_callback( int bank ) static const deco16ic_interface backfire_deco16ic_intf = { "lscreen", - 0, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0x00, 0x40, 0x10, 0x50, /* color base */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0x00, 0x40, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ backfire_bank_callback, backfire_bank_callback, + 0,1 +}; + +static const deco16ic_interface backfire_deco16ic34_intf = +{ + "lscreen", + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0x10, 0x50, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ backfire_bank_callback, - backfire_bank_callback + backfire_bank_callback, + 2,3 }; static MACHINE_START( backfire ) @@ -430,6 +444,7 @@ static MACHINE_START( backfire ) state->maincpu = machine->device("maincpu"); state->deco16ic = machine->device("deco_custom"); + state->deco16ic34 = machine->device("deco_custom34"); state->lscreen = machine->device("lscreen"); state->rscreen = machine->device("rscreen"); state->eeprom = machine->device("eeprom"); @@ -482,12 +497,14 @@ static MACHINE_CONFIG_START( backfire, backfire_state ) MCFG_VIDEO_START(backfire) MCFG_DECO16IC_ADD("deco_custom", backfire_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", backfire_deco16ic34_intf) + MCFG_DEVICE_ADD("spritegen", decospr_, 0) - decospr_device_config::set_gfx_region(device, 3); + decospr_device_config::set_gfx_region(device, 4); decospr_device_config::set_pri_callback(device, backfire_pri_callback); MCFG_DEVICE_ADD("spritegen2", decospr_, 0) - decospr_device_config::set_gfx_region(device, 4); + decospr_device_config::set_gfx_region(device, 5); decospr_device_config::set_pri_callback(device, backfire_pri_callback); diff --git a/src/mame/drivers/boogwing.c b/src/mame/drivers/boogwing.c index 1db54aa70c5..0e78e245c79 100644 --- a/src/mame/drivers/boogwing.c +++ b/src/mame/drivers/boogwing.c @@ -106,15 +106,15 @@ static ADDRESS_MAP_START( boogwing_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x24e344, 0x24e345) AM_READ_PORT("INPUTS") AM_RANGE(0x24e000, 0x24e7ff) AM_WRITE(deco16_104_prot_w) AM_BASE(&deco16_prot_ram) - AM_RANGE(0x260000, 0x26000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) + AM_RANGE(0x260000, 0x26000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w) AM_RANGE(0x264000, 0x265fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w) AM_RANGE(0x266000, 0x267fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x268000, 0x268fff) AM_RAM AM_BASE_MEMBER(boogwing_state, pf1_rowscroll) AM_RANGE(0x26a000, 0x26afff) AM_RAM AM_BASE_MEMBER(boogwing_state, pf2_rowscroll) - AM_RANGE(0x270000, 0x27000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w) - AM_RANGE(0x274000, 0x275fff) AM_RAM_DEVWRITE("deco_custom", deco16ic_pf3_data_w) - AM_RANGE(0x276000, 0x277fff) AM_RAM_DEVWRITE("deco_custom", deco16ic_pf4_data_w) + AM_RANGE(0x270000, 0x27000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_control_w) + AM_RANGE(0x274000, 0x275fff) AM_RAM_DEVWRITE("deco_custom34", deco16ic_pf1_data_w) + AM_RANGE(0x276000, 0x277fff) AM_RAM_DEVWRITE("deco_custom34", deco16ic_pf2_data_w) AM_RANGE(0x278000, 0x278fff) AM_RAM AM_BASE_MEMBER(boogwing_state, pf3_rowscroll) AM_RANGE(0x27a000, 0x27afff) AM_RAM AM_BASE_MEMBER(boogwing_state, pf4_rowscroll) @@ -311,14 +311,25 @@ static int boogwing_bank_callback2( const int bank ) static const deco16ic_interface boogwing_deco16ic_intf = { "screen", - 0, 0, 1, 1, - 0x0f, 0x1f, 0x0f, 0x0f, /* trans masks (pf2 has 5bpp graphics) */ - 0, 0, 0, 16, /* color base (pf2 is non default) */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x1f, /* trans masks (pf2 has 5bpp graphics) */ + 0, 0, /* color base (pf2 is non default) */ + 0x0f, 0x0f, /* color masks (default values) */ NULL, boogwing_bank_callback, + 0, 1 +}; + +static const deco16ic_interface boogwing_deco16ic34_intf = +{ + "screen", + 0, 1, + 0x0f, 0x0f, + 0, 16, + 0x0f, 0x0f, boogwing_bank_callback2, - boogwing_bank_callback2 + boogwing_bank_callback2, + 0, 2 }; @@ -347,6 +358,7 @@ static MACHINE_CONFIG_START( boogwing, boogwing_state ) MCFG_GFXDECODE(boogwing) MCFG_DECO16IC_ADD("deco_custom", boogwing_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", boogwing_deco16ic34_intf) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/cbuster.c b/src/mame/drivers/cbuster.c index ab2edcb4509..a268cd68da5 100644 --- a/src/mame/drivers/cbuster.c +++ b/src/mame/drivers/cbuster.c @@ -113,15 +113,15 @@ static ADDRESS_MAP_START( twocrude_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0a4000, 0x0a47ff) AM_RAM AM_BASE_MEMBER(cbuster_state, pf1_rowscroll) AM_RANGE(0x0a6000, 0x0a67ff) AM_RAM AM_BASE_MEMBER(cbuster_state, pf2_rowscroll) - AM_RANGE(0x0a8000, 0x0a8fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w) - AM_RANGE(0x0aa000, 0x0aafff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w) + AM_RANGE(0x0a8000, 0x0a8fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w) + AM_RANGE(0x0aa000, 0x0aafff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x0ac000, 0x0ac7ff) AM_RAM AM_BASE_MEMBER(cbuster_state, pf3_rowscroll) AM_RANGE(0x0ae000, 0x0ae7ff) AM_RAM AM_BASE_MEMBER(cbuster_state, pf4_rowscroll) AM_RANGE(0x0b0000, 0x0b07ff) AM_RAM AM_BASE_MEMBER(cbuster_state, spriteram16) AM_RANGE(0x0b4000, 0x0b4001) AM_WRITENOP - AM_RANGE(0x0b5000, 0x0b500f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) - AM_RANGE(0x0b6000, 0x0b600f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w) + AM_RANGE(0x0b5000, 0x0b500f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w) + AM_RANGE(0x0b6000, 0x0b600f) AM_DEVWRITE("deco_custom34", deco16ic_pf_control_w) AM_RANGE(0x0b8000, 0x0b8fff) AM_RAM_WRITE(twocrude_palette_24bit_rg_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x0b9000, 0x0b9fff) AM_RAM_WRITE(twocrude_palette_24bit_b_w) AM_BASE_GENERIC(paletteram2) AM_RANGE(0x0bc000, 0x0bc00f) AM_READWRITE(twocrude_control_r, twocrude_control_w) @@ -283,14 +283,25 @@ static int twocrude_bank_callback( const int bank ) static const deco16ic_interface twocrude_deco16ic_intf = { "screen", - 0, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0x00, 0x20, 0x30, 0x40, /* color base (default values) */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0x00, 0x20, /* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ twocrude_bank_callback, twocrude_bank_callback, + 0,1, +}; + +static const deco16ic_interface twocrude_deco16ic34_intf = +{ + "screen", + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0x30, 0x40, /* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ twocrude_bank_callback, - twocrude_bank_callback + twocrude_bank_callback, + 0,2, }; static MACHINE_START( cbuster ) @@ -300,6 +311,7 @@ static MACHINE_START( cbuster ) state->maincpu = machine->device("maincpu"); state->audiocpu = machine->device("audiocpu"); state->deco16ic = machine->device("deco_custom"); + state->deco16ic34 = machine->device("deco_custom34"); state->save_item(NAME(state->prot)); state->save_item(NAME(state->pri)); @@ -340,6 +352,8 @@ static MACHINE_CONFIG_START( twocrude, cbuster_state ) MCFG_PALETTE_LENGTH(2048) MCFG_DECO16IC_ADD("deco_custom", twocrude_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", twocrude_deco16ic34_intf) + MCFG_DEVICE_ADD("spritegen", decospr_, 0) decospr_device_config::set_gfx_region(device, 3); diff --git a/src/mame/drivers/cninja.c b/src/mame/drivers/cninja.c index 2b21b06bb8e..29e29371c71 100644 --- a/src/mame/drivers/cninja.c +++ b/src/mame/drivers/cninja.c @@ -152,7 +152,7 @@ static READ16_HANDLER( robocop2_prot_r ) static WRITE16_HANDLER( cninja_pf12_control_w ) { cninja_state *state = space->machine->driver_data(); - deco16ic_pf12_control_w(state->deco16ic, offset, data, mem_mask); + deco16ic_pf_control_w(state->deco16ic, offset, data, mem_mask); space->machine->primary_screen->update_partial(space->machine->primary_screen->vpos()); } @@ -160,7 +160,7 @@ static WRITE16_HANDLER( cninja_pf12_control_w ) static WRITE16_HANDLER( cninja_pf34_control_w ) { cninja_state *state = space->machine->driver_data(); - deco16ic_pf34_control_w(state->deco16ic, offset, data, mem_mask); + deco16ic_pf_control_w(state->deco16ic34, offset, data, mem_mask); space->machine->primary_screen->update_partial(space->machine->primary_screen->vpos()); } @@ -175,8 +175,8 @@ static ADDRESS_MAP_START( cninja_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll) AM_RANGE(0x150000, 0x15000f) AM_WRITE(cninja_pf34_control_w) - AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w) - AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w) + AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w) + AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll) AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll) @@ -209,8 +209,8 @@ static ADDRESS_MAP_START( cninjabl_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll) AM_RANGE(0x150000, 0x15000f) AM_WRITE(cninja_pf34_control_w) // not used / incorrect on this - AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w) - AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w) + AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w) + AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll) AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll) @@ -237,8 +237,8 @@ static ADDRESS_MAP_START( edrandy_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll) AM_RANGE(0x150000, 0x15000f) AM_WRITE(cninja_pf34_control_w) - AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w) - AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w) + AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w) + AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll) AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll) @@ -265,8 +265,8 @@ static ADDRESS_MAP_START( robocop2_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll) AM_RANGE(0x150000, 0x15000f) AM_WRITE(cninja_pf34_control_w) - AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w) - AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w) + AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w) + AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll) AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll) @@ -301,8 +301,8 @@ static ADDRESS_MAP_START( mutantf_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x30a000, 0x30a7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll) AM_RANGE(0x310000, 0x31000f) AM_WRITE(cninja_pf34_control_w) - AM_RANGE(0x314000, 0x315fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w) - AM_RANGE(0x316000, 0x317fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w) + AM_RANGE(0x314000, 0x315fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w) + AM_RANGE(0x316000, 0x317fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x318000, 0x3187ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll) AM_RANGE(0x31a000, 0x31a7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll) @@ -777,55 +777,104 @@ static int mutantf_2_bank_callback( const int bank ) static const deco16ic_interface cninja_deco16ic_intf = { "screen", - 0, 1, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 48, /* color base */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 1, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ NULL, NULL, - cninja_bank_callback, - cninja_bank_callback + 0, 1, }; +static const deco16ic_interface cninja_deco16ic34_intf = +{ + "screen", + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 48, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ + cninja_bank_callback, + cninja_bank_callback, + 0, 2, +}; + + + static const deco16ic_interface edrandy_deco16ic_intf = { "screen", - 0, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 48, /* color base */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ NULL, NULL, - cninja_bank_callback, - cninja_bank_callback + 0,1, }; +static const deco16ic_interface edrandy_deco16ic34_intf = +{ + "screen", + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 48, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ + cninja_bank_callback, + cninja_bank_callback, + 0,2, +}; + + static const deco16ic_interface robocop2_deco16ic_intf = { "screen", - 0, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 48, /* color base */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ NULL, robocop2_bank_callback, - robocop2_bank_callback, - robocop2_bank_callback + 0,1, }; +static const deco16ic_interface robocop2_deco16ic34_intf = +{ + "screen", + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 48, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ + robocop2_bank_callback, + robocop2_bank_callback, + 0,2, +}; + + static const deco16ic_interface mutantf_deco16ic_intf = { "screen", - 0, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 0x30, 0x20, 0x40, /* color base */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 0x30, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ mutantf_1_bank_callback, mutantf_2_bank_callback, - mutantf_1_bank_callback, - mutantf_1_bank_callback + 0,1, }; +static const deco16ic_interface mutantf_deco16ic34_intf = +{ + "screen", + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0x20, 0x40, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ + mutantf_1_bank_callback, + mutantf_1_bank_callback, + 0,2, +}; + + static MACHINE_START( cninja ) { cninja_state *state = machine->driver_data(); @@ -887,6 +936,8 @@ static MACHINE_CONFIG_START( cninja, cninja_state ) MCFG_PALETTE_LENGTH(2048) MCFG_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", cninja_deco16ic34_intf) + MCFG_DEVICE_ADD("spritegen", decospr_, 0) decospr_device_config::set_gfx_region(device, 3); decospr_device_config::set_pri_callback(device, cninja_pri_callback); @@ -940,6 +991,8 @@ static MACHINE_CONFIG_START( stoneage, cninja_state ) MCFG_VIDEO_START(stoneage) MCFG_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", cninja_deco16ic34_intf) + MCFG_DEVICE_ADD("spritegen", decospr_, 0) decospr_device_config::set_gfx_region(device, 3); decospr_device_config::set_pri_callback(device, cninja_pri_callback); @@ -989,6 +1042,7 @@ static MACHINE_CONFIG_START( cninjabl, cninja_state ) MCFG_PALETTE_LENGTH(2048) MCFG_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom32", cninja_deco16ic34_intf) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -1032,6 +1086,8 @@ static MACHINE_CONFIG_START( edrandy, cninja_state ) MCFG_PALETTE_LENGTH(2048) MCFG_DECO16IC_ADD("deco_custom", edrandy_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", edrandy_deco16ic34_intf) + MCFG_DEVICE_ADD("spritegen", decospr_, 0) decospr_device_config::set_gfx_region(device, 3); decospr_device_config::set_pri_callback(device, cninja_pri_callback); @@ -1083,6 +1139,8 @@ static MACHINE_CONFIG_START( robocop2, cninja_state ) MCFG_PALETTE_LENGTH(2048) MCFG_DECO16IC_ADD("deco_custom", robocop2_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", robocop2_deco16ic34_intf) + MCFG_DEVICE_ADD("spritegen", decospr_, 0) decospr_device_config::set_gfx_region(device, 3); decospr_device_config::set_pri_callback(device, cninja_pri_callback); @@ -1137,6 +1195,8 @@ static MACHINE_CONFIG_START( mutantf, cninja_state ) MCFG_PALETTE_LENGTH(2048) MCFG_DECO16IC_ADD("deco_custom", mutantf_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", mutantf_deco16ic34_intf) + MCFG_DEVICE_ADD("spritegen1", decospr_, 0) decospr_device_config::set_gfx_region(device, 3); diff --git a/src/mame/drivers/dassault.c b/src/mame/drivers/dassault.c index e3700d44f88..450d98e30ee 100644 --- a/src/mame/drivers/dassault.c +++ b/src/mame/drivers/dassault.c @@ -229,12 +229,12 @@ static ADDRESS_MAP_START( dassault_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x200000, 0x201fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w) AM_RANGE(0x202000, 0x203fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x212000, 0x212fff) AM_WRITEONLY AM_BASE_MEMBER(dassault_state, pf2_rowscroll) - AM_RANGE(0x220000, 0x22000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) + AM_RANGE(0x220000, 0x22000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w) - AM_RANGE(0x240000, 0x240fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w) - AM_RANGE(0x242000, 0x242fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w) + AM_RANGE(0x240000, 0x240fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w) + AM_RANGE(0x242000, 0x242fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x252000, 0x252fff) AM_WRITEONLY AM_BASE_MEMBER(dassault_state, pf4_rowscroll) - AM_RANGE(0x260000, 0x26000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w) + AM_RANGE(0x260000, 0x26000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_control_w) AM_RANGE(0x3f8000, 0x3fbfff) AM_RAM AM_BASE_MEMBER(dassault_state, ram) /* Main ram */ AM_RANGE(0x3fc000, 0x3fcfff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram2) /* Spriteram (2nd) */ @@ -541,16 +541,28 @@ static int dassault_bank_callback( const int bank ) static const deco16ic_interface dassault_deco16ic_intf = { "screen", - 0, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 16, /* color base (default values) */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ dassault_bank_callback, dassault_bank_callback, - dassault_bank_callback, - dassault_bank_callback + 0,1, }; +static const deco16ic_interface dassault_deco16ic34_intf = +{ + "screen", + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ + dassault_bank_callback, + dassault_bank_callback, + 0,2, +}; + + static MACHINE_CONFIG_START( dassault, dassault_state ) /* basic machine hardware */ @@ -582,6 +594,7 @@ static MACHINE_CONFIG_START( dassault, dassault_state ) MCFG_PALETTE_LENGTH(4096) MCFG_DECO16IC_ADD("deco_custom", dassault_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", dassault_deco16ic34_intf) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/dblewing.c b/src/mame/drivers/dblewing.c index 70be37ede18..13c19142d6c 100644 --- a/src/mame/drivers/dblewing.c +++ b/src/mame/drivers/dblewing.c @@ -90,10 +90,10 @@ UINT16 dblwings_pri_callback(UINT16 x) static SCREEN_UPDATE(dblewing) { dblewing_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); bitmap_fill(bitmap, cliprect, 0); /* not Confirmed */ bitmap_fill(screen->machine->priority_bitmap, NULL, 0); @@ -320,7 +320,7 @@ static ADDRESS_MAP_START( dblewing_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x284000, 0x284001) AM_RAM AM_RANGE(0x288000, 0x288001) AM_RAM - AM_RANGE(0x28c000, 0x28c00f) AM_RAM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) + AM_RANGE(0x28c000, 0x28c00f) AM_RAM_DEVWRITE("deco_custom", deco16ic_pf_control_w) AM_RANGE(0x300000, 0x3007ff) AM_RAM AM_BASE_SIZE_MEMBER(dblewing_state, spriteram, spriteram_size) AM_RANGE(0x320000, 0x3207ff) AM_RAM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0xff0000, 0xff3fff) AM_MIRROR(0xc000) AM_RAM @@ -543,14 +543,13 @@ static int dblewing_bank_callback( const int bank ) static const deco16ic_interface dblewing_deco16ic_intf = { "screen", - 1, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 16, /* color base (default values) */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ dblewing_bank_callback, dblewing_bank_callback, - NULL, - NULL + 0,1, }; static MACHINE_START( dblewing ) diff --git a/src/mame/drivers/deco156.c b/src/mame/drivers/deco156.c index 980f8d2b296..a2a112ae584 100644 --- a/src/mame/drivers/deco156.c +++ b/src/mame/drivers/deco156.c @@ -66,7 +66,7 @@ static SCREEN_UPDATE( wcvol95 ) bitmap_fill(screen->machine->priority_bitmap, NULL, 0); bitmap_fill(bitmap, NULL, 0); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); screen->machine->device("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram, 0x800); @@ -130,7 +130,7 @@ static ADDRESS_MAP_START( hvysmsh_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x12000c, 0x12000f) AM_DEVWRITE("oki1", hvysmsh_oki_0_bank_w) AM_RANGE(0x140000, 0x140003) AM_DEVREADWRITE8_MODERN("oki1", okim6295_device, read, write, 0x000000ff) AM_RANGE(0x160000, 0x160003) AM_DEVREADWRITE8_MODERN("oki2", okim6295_device, read, write, 0x000000ff) - AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x1a0000, 0x1a0fff) AM_READWRITE(wcvol95_pf1_rowscroll_r, wcvol95_pf1_rowscroll_w) @@ -142,7 +142,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( wcvol95_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x110000, 0x111fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x114000, 0x115fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x120000, 0x120fff) AM_READWRITE(wcvol95_pf1_rowscroll_r, wcvol95_pf1_rowscroll_w) @@ -315,14 +315,13 @@ static int deco156_bank_callback(const int bank) static const deco16ic_interface deco156_deco16ic_intf = { "screen", - 1, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 16, /* color base (default values) */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ deco156_bank_callback, deco156_bank_callback, - NULL, - NULL + 0,1, }; UINT16 deco156_pri_callback(UINT16 x) diff --git a/src/mame/drivers/deco32.c b/src/mame/drivers/deco32.c index 7539b848b9d..0f04bafa9b8 100644 --- a/src/mame/drivers/deco32.c +++ b/src/mame/drivers/deco32.c @@ -253,16 +253,28 @@ static int fghthist_bank_callback( int bank ) static const deco16ic_interface fghthist_deco16ic_intf = { "screen", - 0, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0x00, 0x10, 0x20, 0x30, /* color base */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0x00, 0x10, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ fghthist_bank_callback, fghthist_bank_callback, - fghthist_bank_callback, - fghthist_bank_callback + 0,1 }; +static const deco16ic_interface fghthist_deco16ic34_intf = +{ + "screen", + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0x20, 0x30, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ + fghthist_bank_callback, + fghthist_bank_callback, + 0,2 +}; + + #if 0 static WRITE32_HANDLER( deco32_pf12_control_w ) @@ -707,7 +719,7 @@ static WRITE32_HANDLER( deco32_buffer_spriteram_w ) { deco32_state *state = space->machine->driver_data(); memcpy(state->spriteram16_buffered, state->spriteram16, 0x1000); -} +} static READ32_HANDLER( deco32_spriteram2_r ) { @@ -727,7 +739,7 @@ static WRITE32_HANDLER( deco32_buffer_spriteram2_w ) { deco32_state *state = space->machine->driver_data(); memcpy(state->spriteram16_2_buffered, state->spriteram16_2, 0x1000); -} +} // tattass tests these as 32-bit ram, even if only 16-bits are hooked up to the tilemap chip - does it mirror parts of the dword? @@ -745,7 +757,7 @@ static ADDRESS_MAP_START( captaven_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x108000, 0x108003) AM_WRITENOP /* ? */ AM_RANGE(0x110000, 0x111fff) AM_READWRITE(deco32_spriteram_r, deco32_spriteram_w) AM_RANGE(0x120000, 0x127fff) AM_RAM AM_BASE_MEMBER(deco32_state, ram) /* Main RAM */ - + AM_RANGE(0x128000, 0x128fff) AM_READ(captaven_prot_r) AM_RANGE(0x1280c8, 0x1280cb) AM_WRITE(deco32_sound_w) AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(deco32_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) /* Palette RAM */ @@ -755,23 +767,23 @@ static ADDRESS_MAP_START( captaven_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x178000, 0x178003) AM_WRITE(deco32_pri_w) - AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x192000, 0x193fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) /* Mirror address - bug in program code */ AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32) AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32) - AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w) - AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w) - AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w) // unused + AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) + AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) + AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) // unused AM_RANGE(0x1e0000, 0x1e3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32) AM_RANGE(0x1e4000, 0x1e5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32) // unused ADDRESS_MAP_END static ADDRESS_MAP_START( fghthist_map, ADDRESS_SPACE_PROGRAM, 32 ) -// AM_RANGE(0x000000, 0x001fff) AM_ROM AM_WRITE(deco32_pf1_data_w) // wtf?? +// AM_RANGE(0x000000, 0x001fff) AM_ROM AM_WRITE(deco32_pf1_data_w) // wtf?? AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_BASE_MEMBER(deco32_state, ram) AM_RANGE(0x120020, 0x12002f) AM_READ(fghthist_control_r) @@ -790,13 +802,13 @@ static ADDRESS_MAP_START( fghthist_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32) AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32) - AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) - AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w) - AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w) + AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) + AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32) AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32) - AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w) + AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x16c000, 0x16c01f) AM_READNOP AM_RANGE(0x17c000, 0x17c03f) AM_READNOP @@ -823,13 +835,13 @@ static ADDRESS_MAP_START( fghthsta_memmap, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32) AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32) - AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) - AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w) - AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w) + AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) + AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32) AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32) - AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w) + AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x200000, 0x200fff) AM_READWRITE(deco16_146_fghthist_prot_r, deco16_146_fghthist_prot_w) AM_BASE(&deco32_prot_ram) ADDRESS_MAP_END @@ -846,15 +858,15 @@ static ADDRESS_MAP_START( dragngun_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x138000, 0x138003) AM_NOP /* Palette dma complete in bit 0x8? ack? return 0 else tight loop */ AM_RANGE(0x138008, 0x13800b) AM_WRITE(deco32_palette_dma_w) - AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32) AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32) - AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w) - AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w) - AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w) // unused + AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) + AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) + AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) // unused AM_RANGE(0x1e0000, 0x1e3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32) AM_RANGE(0x1e4000, 0x1e5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32) // unused @@ -897,15 +909,15 @@ static ADDRESS_MAP_START( lockload_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x170000, 0x170007) AM_READ(lockload_gun_mirror_r) /* Not on Dragongun */ AM_RANGE(0x178008, 0x17800f) AM_WRITENOP /* Gun read ACK's */ - AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32) AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32) - AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w) - AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w) - AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w) // unused + AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) + AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) + AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) // unused AM_RANGE(0x1e0000, 0x1e3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32) AM_RANGE(0x1e4000, 0x1e5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32) // unused @@ -963,13 +975,13 @@ static ADDRESS_MAP_START( tattass_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32) AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32) - AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) - AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w) - AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w) + AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) + AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32) AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32) - AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w) + AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x200000, 0x200fff) AM_READWRITE(tattass_prot_r, tattass_prot_w) AM_BASE(&deco32_prot_ram) ADDRESS_MAP_END @@ -1004,13 +1016,13 @@ static ADDRESS_MAP_START( nslasher_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32) AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32) - AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) - AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w) - AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w) + AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) + AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32) AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32) - AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w) + AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x200000, 0x200fff) AM_READWRITE(nslasher_prot_r, nslasher_prot_w) AM_BASE(&deco32_prot_ram) ADDRESS_MAP_END @@ -1768,14 +1780,25 @@ static int captaven_bank_callback( int bank ) static const deco16ic_interface captaven_deco16ic_intf = { "screen", - 0, 0, 1, 0, // pf12only, split, fullwidth12 / fullwidth34 - 0x0f, 0x0f, 0xff, 0x00, /* trans masks (default values) */ - 0x20, 0x20, 0x10, 0x00, /* color base */ - 0x0f, 0x0f, 0x0f, 0x00, /* color masks (default values) */ - 0, - 0, + 0, 1, // pf12only, split, fullwidth12 / fullwidth34 + 0x0f, 0x0f, /* trans masks (default values) */ + 0x20, 0x20, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ + NULL, + NULL, + 0,1 +}; + +static const deco16ic_interface captaven_deco16ic34_intf = +{ + "screen", + 0, 0, // pf12only, split, fullwidth12 / fullwidth34 + 0xff, 0x00, /* trans masks (default values) */ + 0x10, 0x00, /* color base */ + 0x0f, 0x00, /* color masks (default values) */ captaven_bank_callback, NULL, + 0,2, }; @@ -1805,6 +1828,7 @@ static MACHINE_CONFIG_START( captaven, deco32_state ) MCFG_PALETTE_LENGTH(2048) MCFG_DECO16IC_ADD("deco_custom", captaven_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", captaven_deco16ic34_intf) MCFG_DEVICE_ADD("spritegen", decospr_, 0) decospr_device_config::set_gfx_region(device, 3); @@ -1855,6 +1879,7 @@ static MACHINE_CONFIG_START( fghthist, deco32_state ) MCFG_PALETTE_LENGTH(2048) MCFG_DECO16IC_ADD("deco_custom", fghthist_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", fghthist_deco16ic34_intf) MCFG_DEVICE_ADD("spritegen", decospr_, 0) decospr_device_config::set_gfx_region(device, 3); @@ -1901,6 +1926,7 @@ static MACHINE_CONFIG_START( fghthsta, deco32_state ) MCFG_PALETTE_LENGTH(2048) MCFG_DECO16IC_ADD("deco_custom", fghthist_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", fghthist_deco16ic34_intf) MCFG_DEVICE_ADD("spritegen", decospr_, 0) decospr_device_config::set_gfx_region(device, 3); @@ -1942,27 +1968,49 @@ static int dragngun_bank2_callback( int bank ) static const deco16ic_interface dragngun_deco16ic_intf = { "screen", - 0, 0, 1, 1, // dragon gun definitely needs pf3/4 full width, bgs in 2nd attract demo. - 0x0f, 0x0f, 0xff, 0xff, /* trans masks (default values) */ - 0x20, 0x30, 0x04, 0x04, /* color base */ - 0x0f, 0x0f, 0x03, 0x03, /* color masks (default values) */ + 0, 1, // dragon gun definitely needs pf3/4 full width, bgs in 2nd attract demo. + 0x0f, 0x0f, /* trans masks (default values) */ + 0x20, 0x30, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ dragngun_bank_callback, dragngun_bank_callback, + 0,1, +}; + +static const deco16ic_interface dragngun_deco16ic34_intf = +{ + "screen", + 0, 1, // dragon gun definitely needs pf3/4 full width, bgs in 2nd attract demo. + 0xff, 0xff, /* trans masks (default values) */ + 0x04, 0x04, /* color base */ + 0x03, 0x03, /* color masks (default values) */ dragngun_bank2_callback, - NULL + NULL, + 0,2, }; static const deco16ic_interface lockload_deco16ic_intf = { "screen", - 0, 0, 1, 0, // lockload definitely wants pf34 half width.. - 0x0f, 0x0f, 0xff, 0xff, /* trans masks (default values) */ - 0x20, 0x30, 0x04, 0x04, /* color base */ - 0x0f, 0x0f, 0x03, 0x03, /* color masks (default values) */ + 0, 1, // lockload definitely wants pf34 half width.. + 0x0f, 0x0f, /* trans masks (default values) */ + 0x20, 0x30, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ dragngun_bank_callback, dragngun_bank_callback, + 0,1, +}; + +static const deco16ic_interface lockload_deco16ic34_intf = +{ + "screen", + 0, 0, // lockload definitely wants pf34 half width.. + 0xff, 0xff, /* trans masks (default values) */ + 0x04, 0x04, /* color base */ + 0x03, 0x03, /* color masks (default values) */ dragngun_bank2_callback, - NULL + NULL, + 0,2, }; static MACHINE_CONFIG_START( dragngun, dragngun_state ) @@ -1992,6 +2040,7 @@ static MACHINE_CONFIG_START( dragngun, dragngun_state ) MCFG_SCREEN_EOF(dragngun) MCFG_DECO16IC_ADD("deco_custom", dragngun_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", dragngun_deco16ic34_intf) MCFG_GFXDECODE(dragngun) MCFG_PALETTE_LENGTH(2048) @@ -2046,6 +2095,7 @@ static MACHINE_CONFIG_START( lockload, dragngun_state ) MCFG_SCREEN_EOF(dragngun) MCFG_DECO16IC_ADD("deco_custom", lockload_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", lockload_deco16ic34_intf) MCFG_GFXDECODE(dragngun) MCFG_PALETTE_LENGTH(2048) @@ -2083,16 +2133,28 @@ static int tattass_bank_callback( int bank ) static const deco16ic_interface tattass_deco16ic_intf = { "screen", - 0, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0x00, 0x10, 0x20, 0x30, /* color base */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0x00, 0x10, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ tattass_bank_callback, tattass_bank_callback, - tattass_bank_callback, - tattass_bank_callback + 0,1, }; +static const deco16ic_interface tattass_deco16ic34_intf = +{ + "screen", + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0x20, 0x30, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ + tattass_bank_callback, + tattass_bank_callback, + 0,2, +}; + + static MACHINE_CONFIG_START( tattass, deco32_state ) @@ -2112,17 +2174,18 @@ static MACHINE_CONFIG_START( tattass, deco32_state ) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_RGB32) MCFG_SCREEN_SIZE(42*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) - + MCFG_SCREEN_UPDATE(nslasher) MCFG_DECO16IC_ADD("deco_custom", tattass_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", tattass_deco16ic34_intf) MCFG_DEVICE_ADD("spritegen1", decospr_, 0) decospr_device_config::set_gfx_region(device, 3); MCFG_DEVICE_ADD("spritegen2", decospr_, 0) decospr_device_config::set_gfx_region(device, 4); - + MCFG_GFXDECODE(tattass) MCFG_PALETTE_LENGTH(2048) @@ -2161,6 +2224,7 @@ static MACHINE_CONFIG_START( nslasher, deco32_state ) MCFG_SCREEN_UPDATE(nslasher) MCFG_DECO16IC_ADD("deco_custom", tattass_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", tattass_deco16ic34_intf) MCFG_DEVICE_ADD("spritegen1", decospr_, 0) decospr_device_config::set_gfx_region(device, 3); diff --git a/src/mame/drivers/dietgo.c b/src/mame/drivers/dietgo.c index 18554a96d00..0eb87596914 100644 --- a/src/mame/drivers/dietgo.c +++ b/src/mame/drivers/dietgo.c @@ -18,7 +18,7 @@ static ADDRESS_MAP_START( dietgo_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) + AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w) AM_RANGE(0x210000, 0x211fff) AM_DEVWRITE("deco_custom", deco16ic_pf1_data_w) AM_RANGE(0x212000, 0x213fff) AM_DEVWRITE("deco_custom", deco16ic_pf2_data_w) AM_RANGE(0x220000, 0x2207ff) AM_WRITEONLY AM_BASE_MEMBER(dietgo_state, pf1_rowscroll) @@ -180,14 +180,13 @@ static int dietgo_bank_callback(const int bank) static const deco16ic_interface dietgo_deco16ic_intf = { "screen", - 1, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 16, /* color base (default values) */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ dietgo_bank_callback, dietgo_bank_callback, - NULL, - NULL + 0,1, }; @@ -227,7 +226,7 @@ static MACHINE_CONFIG_START( dietgo, dietgo_state ) MCFG_DECO16IC_ADD("deco_custom", dietgo_deco16ic_intf) MCFG_DEVICE_ADD("spritegen", decospr_, 0) decospr_device_config::set_gfx_region(device, 2); - + /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/funkyjet.c b/src/mame/drivers/funkyjet.c index de3dd47abcd..d10f2a41106 100644 --- a/src/mame/drivers/funkyjet.c +++ b/src/mame/drivers/funkyjet.c @@ -108,7 +108,7 @@ static ADDRESS_MAP_START( funkyjet_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x180000, 0x1807ff) AM_READWRITE(deco16_146_funkyjet_prot_r, deco16_146_funkyjet_prot_w) AM_BASE(&deco16_prot_ram) AM_RANGE(0x184000, 0x184001) AM_WRITENOP AM_RANGE(0x188000, 0x188001) AM_WRITENOP - AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) + AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w) AM_RANGE(0x320000, 0x321fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w) AM_RANGE(0x322000, 0x323fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x340000, 0x340bff) AM_RAM AM_BASE_MEMBER(funkyjet_state, pf1_rowscroll) @@ -289,11 +289,12 @@ static const ym2151_interface ym2151_config = static const deco16ic_interface funkyjet_deco16ic_intf = { "screen", - 1, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 16, /* color base (default values) */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ - NULL, NULL, NULL, NULL + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ + NULL, NULL, + 0,1, }; static MACHINE_START( funkyjet ) diff --git a/src/mame/drivers/mirage.c b/src/mame/drivers/mirage.c index f697fe17382..c82c8e81b01 100644 --- a/src/mame/drivers/mirage.c +++ b/src/mame/drivers/mirage.c @@ -75,13 +75,13 @@ static VIDEO_START( mirage ) static SCREEN_UPDATE( mirage ) { mirage_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); flip_screen_set(screen->machine, BIT(flip, 7)); - screen->machine->device("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 0x400); + screen->machine->device("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 0x400); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); bitmap_fill(bitmap, cliprect, 256); /* not verified */ @@ -150,7 +150,7 @@ static ADDRESS_MAP_START( mirage_map, ADDRESS_SPACE_PROGRAM, 16 ) // AM_RANGE(0x140006, 0x140007) AM_READ(random_readers) // AM_RANGE(0x150006, 0x150007) AM_READNOP AM_RANGE(0x160000, 0x160001) AM_WRITENOP - AM_RANGE(0x168000, 0x16800f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) + AM_RANGE(0x168000, 0x16800f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w) AM_RANGE(0x16a000, 0x16a001) AM_WRITENOP AM_RANGE(0x16c000, 0x16c001) AM_WRITE(okim1_rombank_w) AM_RANGE(0x16c002, 0x16c003) AM_WRITE(okim0_rombank_w) @@ -290,14 +290,13 @@ static int mirage_bank_callback( const int bank ) static const deco16ic_interface mirage_deco16ic_intf = { "screen", - 1, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 16, /* color base (default values) */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ mirage_bank_callback, mirage_bank_callback, - NULL, - NULL + 0,1, }; diff --git a/src/mame/drivers/pktgaldx.c b/src/mame/drivers/pktgaldx.c index b6d86b80cd6..37bb573d32d 100644 --- a/src/mame/drivers/pktgaldx.c +++ b/src/mame/drivers/pktgaldx.c @@ -86,7 +86,7 @@ static ADDRESS_MAP_START( pktgaldx_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x150000, 0x15000f) AM_DEVWRITE8_MODERN("oki2", okim6295_device, write, 0x00ff) AM_RANGE(0x150006, 0x150007) AM_DEVREAD8_MODERN("oki2", okim6295_device, read, 0x00ff) - AM_RANGE(0x161800, 0x16180f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) + AM_RANGE(0x161800, 0x16180f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w) AM_RANGE(0x164800, 0x164801) AM_DEVWRITE("oki2", pktgaldx_oki_bank_w) AM_RANGE(0x167800, 0x167fff) AM_READWRITE(deco16_104_pktgaldx_prot_r,deco16_104_pktgaldx_prot_w) AM_BASE(&deco16_prot_ram) AM_RANGE(0x170000, 0x17ffff) AM_RAM @@ -300,16 +300,17 @@ static int pktgaldx_bank_callback( const int bank ) static const deco16ic_interface pktgaldx_deco16ic_intf = { "screen", - 1, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 16, /* color base (default values) */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ NULL, pktgaldx_bank_callback, - NULL, - NULL + 0,1, }; + + static MACHINE_START( pktgaldx ) { pktgaldx_state *state = machine->driver_data(); diff --git a/src/mame/drivers/rohga.c b/src/mame/drivers/rohga.c index 91159f76567..c23d3a95147 100644 --- a/src/mame/drivers/rohga.c +++ b/src/mame/drivers/rohga.c @@ -136,8 +136,8 @@ static WRITE16_HANDLER( wizdfire_irq_ack_w ) static ADDRESS_MAP_START( rohga_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x1fffff) AM_ROM - AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) - AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w) + AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w) + AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_control_w) AM_RANGE(0x280000, 0x2807ff) AM_MIRROR(0x800) AM_READWRITE(deco16_104_rohga_prot_r,deco16_104_rohga_prot_w) AM_BASE(&deco16_prot_ram) /* Protection device */ @@ -152,8 +152,8 @@ static ADDRESS_MAP_START( rohga_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x3c0000, 0x3c1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w) AM_RANGE(0x3c2000, 0x3c2fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w) - AM_RANGE(0x3c4000, 0x3c4fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w) - AM_RANGE(0x3c6000, 0x3c6fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w) + AM_RANGE(0x3c4000, 0x3c4fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w) + AM_RANGE(0x3c6000, 0x3c6fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x3c8000, 0x3c8fff) AM_MIRROR(0x1000) AM_RAM AM_BASE_MEMBER(rohga_state, pf1_rowscroll) AM_RANGE(0x3ca000, 0x3cafff) AM_MIRROR(0x1000) AM_RAM AM_BASE_MEMBER(rohga_state, pf2_rowscroll) @@ -170,15 +170,15 @@ static ADDRESS_MAP_START( wizdfire_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x200000, 0x200fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w) AM_RANGE(0x202000, 0x202fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w) - AM_RANGE(0x208000, 0x208fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w) - AM_RANGE(0x20a000, 0x20afff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w) + AM_RANGE(0x208000, 0x208fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w) + AM_RANGE(0x20a000, 0x20afff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x20b000, 0x20b3ff) AM_WRITEONLY /* ? Always 0 written */ AM_RANGE(0x20c000, 0x20c7ff) AM_RAM AM_BASE_MEMBER(rohga_state, pf3_rowscroll) AM_RANGE(0x20e000, 0x20e7ff) AM_RAM AM_BASE_MEMBER(rohga_state, pf4_rowscroll) - AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) - AM_RANGE(0x310000, 0x31000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w) + AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w) + AM_RANGE(0x310000, 0x31000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_control_w) AM_RANGE(0x320000, 0x320001) AM_DEVWRITE("deco_custom", deco16ic_priority_w) /* Priority */ AM_RANGE(0x320002, 0x320003) AM_WRITENOP /* ? */ @@ -201,16 +201,16 @@ static ADDRESS_MAP_START( nitrobal_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x200000, 0x200fff) AM_MIRROR(0x1000) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w) AM_RANGE(0x202000, 0x2027ff) AM_MIRROR(0x800) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w) - AM_RANGE(0x208000, 0x2087ff) AM_MIRROR(0x800) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w) - AM_RANGE(0x20a000, 0x20a7ff) AM_MIRROR(0x800) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w) + AM_RANGE(0x208000, 0x2087ff) AM_MIRROR(0x800) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w) + AM_RANGE(0x20a000, 0x20a7ff) AM_MIRROR(0x800) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x204000, 0x2047ff) AM_RAM AM_BASE_MEMBER(rohga_state, pf1_rowscroll) AM_RANGE(0x206000, 0x2067ff) AM_RAM AM_BASE_MEMBER(rohga_state, pf2_rowscroll) AM_RANGE(0x20c000, 0x20c7ff) AM_RAM AM_BASE_MEMBER(rohga_state, pf3_rowscroll) AM_RANGE(0x20e000, 0x20e7ff) AM_RAM AM_BASE_MEMBER(rohga_state, pf4_rowscroll) - AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) - AM_RANGE(0x310000, 0x31000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w) + AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w) + AM_RANGE(0x310000, 0x31000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_control_w) AM_RANGE(0x320000, 0x320001) AM_READ_PORT("DSW3") AM_DEVWRITE("deco_custom", deco16ic_priority_w) /* Priority */ AM_RANGE(0x320002, 0x320003) AM_WRITENOP /* ? */ @@ -231,8 +231,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( schmeisr_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) - AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w) + AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w) + AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_control_w) AM_RANGE(0x280000, 0x2807ff) AM_MIRROR(0x800) AM_READWRITE(deco16_104_rohga_prot_r,deco16_104_rohga_prot_w) AM_BASE(&deco16_prot_ram) /* Protection device */ AM_RANGE(0x2c0000, 0x2c0001) AM_READ_PORT("DSW3") @@ -246,8 +246,8 @@ static ADDRESS_MAP_START( schmeisr_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x3c0000, 0x3c1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w) AM_RANGE(0x3c2000, 0x3c2fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w) - AM_RANGE(0x3c4000, 0x3c4fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w) - AM_RANGE(0x3c6000, 0x3c6fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w) + AM_RANGE(0x3c4000, 0x3c4fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w) + AM_RANGE(0x3c6000, 0x3c6fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x3c8000, 0x3c8fff) AM_MIRROR(0x1000) AM_RAM AM_BASE_MEMBER(rohga_state, pf1_rowscroll) AM_RANGE(0x3ca000, 0x3cafff) AM_MIRROR(0x1000) AM_RAM AM_BASE_MEMBER(rohga_state, pf2_rowscroll) AM_RANGE(0x3cc000, 0x3ccfff) AM_MIRROR(0x1000) AM_RAM AM_BASE_MEMBER(rohga_state, pf3_rowscroll) @@ -749,27 +749,49 @@ static int rohga_bank_callback( const int bank ) static const deco16ic_interface rohga_deco16ic_intf = { "screen", - 0, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 16, /* color base (default values) */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16,/* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ rohga_bank_callback, rohga_bank_callback, + 0, 1, +}; + +static const deco16ic_interface rohga_deco16ic34_intf = +{ + "screen", + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ rohga_bank_callback, - rohga_bank_callback + rohga_bank_callback, + 0, 2, }; static const deco16ic_interface nitrobal_deco16ic_intf = { "screen", - 0, 0, 0, 0, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 0, /* color base (pf4 is not default) */ - 0x0f, 0x0f, 0, 0, /* color masks */ + 0, 0, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base (pf4 is not default) */ + 0x0f, 0x0f, /* color masks */ rohga_bank_callback, rohga_bank_callback, + 0, 1, +}; + +static const deco16ic_interface nitrobal_deco16ic34_intf = +{ + "screen", + 0, 0, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 0, /* color base (pf4 is not default) */ + 0, 0, /* color masks */ rohga_bank_callback, - rohga_bank_callback + rohga_bank_callback, + 0, 2, }; static MACHINE_CONFIG_START( rohga, rohga_state ) @@ -799,6 +821,7 @@ static MACHINE_CONFIG_START( rohga, rohga_state ) MCFG_VIDEO_START(rohga) MCFG_DECO16IC_ADD("deco_custom", rohga_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", rohga_deco16ic34_intf) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -842,6 +865,7 @@ static MACHINE_CONFIG_START( wizdfire, rohga_state ) MCFG_PALETTE_LENGTH(2048) MCFG_DECO16IC_ADD("deco_custom", rohga_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", rohga_deco16ic34_intf) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -885,6 +909,7 @@ static MACHINE_CONFIG_START( nitrobal, rohga_state ) MCFG_PALETTE_LENGTH(2048) MCFG_DECO16IC_ADD("deco_custom", nitrobal_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", nitrobal_deco16ic34_intf) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -930,6 +955,7 @@ static MACHINE_CONFIG_START( schmeisr, rohga_state ) MCFG_VIDEO_START(rohga) MCFG_DECO16IC_ADD("deco_custom", rohga_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", rohga_deco16ic34_intf) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/simpl156.c b/src/mame/drivers/simpl156.c index e41d860622e..bfa3e1f038c 100644 --- a/src/mame/drivers/simpl156.c +++ b/src/mame/drivers/simpl156.c @@ -251,10 +251,10 @@ static WRITE32_HANDLER( simpl156_pf2_rowscroll_w ) static ADDRESS_MAP_START( joemacr_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x107fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_BASE_MEMBER(simpl156_state, mainram) // main ram - AM_RANGE(0x110000, 0x111fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) + AM_RANGE(0x110000, 0x111fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) AM_RANGE(0x120000, 0x120fff) AM_READWRITE(simpl156_palette_r, simpl156_palette_w) AM_RANGE(0x130000, 0x130003) AM_READWRITE(simpl156_system_r, simpl156_eeprom_w) - AM_RANGE(0x140000, 0x14001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x140000, 0x14001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x150000, 0x151fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x152000, 0x153fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x154000, 0x155fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) @@ -275,10 +275,10 @@ static ADDRESS_MAP_START( chainrec_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x201000, 0x201fff) AM_RAM AM_BASE_MEMBER(simpl156_state, systemram) // work ram (32-bit) AM_RANGE(0x3c0000, 0x3c0003) AM_DEVREADWRITE8_MODERN("okimusic", okim6295_device, read, write, 0x000000ff) AM_RANGE(0x400000, 0x407fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_BASE_MEMBER(simpl156_state, mainram) // main ram? - AM_RANGE(0x410000, 0x411fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) + AM_RANGE(0x410000, 0x411fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) AM_RANGE(0x420000, 0x420fff) AM_READWRITE(simpl156_palette_r,simpl156_palette_w) AM_RANGE(0x430000, 0x430003) AM_READWRITE(simpl156_system_r,simpl156_eeprom_w) - AM_RANGE(0x440000, 0x44001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x440000, 0x44001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x450000, 0x451fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x452000, 0x453fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x454000, 0x455fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) @@ -296,10 +296,10 @@ static ADDRESS_MAP_START( magdrop_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x201000, 0x201fff) AM_RAM AM_BASE_MEMBER(simpl156_state, systemram) // work ram (32-bit) AM_RANGE(0x340000, 0x340003) AM_DEVREADWRITE8_MODERN("okimusic", okim6295_device, read, write, 0x000000ff) AM_RANGE(0x380000, 0x387fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_BASE_MEMBER(simpl156_state, mainram) // main ram? - AM_RANGE(0x390000, 0x391fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) + AM_RANGE(0x390000, 0x391fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) AM_RANGE(0x3a0000, 0x3a0fff) AM_READWRITE(simpl156_palette_r,simpl156_palette_w) AM_RANGE(0x3b0000, 0x3b0003) AM_READWRITE(simpl156_system_r,simpl156_eeprom_w) - AM_RANGE(0x3c0000, 0x3c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x3c0000, 0x3c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x3d0000, 0x3d1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x3d2000, 0x3d3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x3d4000, 0x3d5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) @@ -317,10 +317,10 @@ static ADDRESS_MAP_START( magdropp_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x201000, 0x201fff) AM_RAM AM_BASE_MEMBER(simpl156_state, systemram) // work ram (32-bit) AM_RANGE(0x4c0000, 0x4c0003) AM_DEVREADWRITE8_MODERN("okimusic", okim6295_device, read, write, 0x000000ff) AM_RANGE(0x680000, 0x687fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_BASE_MEMBER(simpl156_state, mainram) // main ram? - AM_RANGE(0x690000, 0x691fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) + AM_RANGE(0x690000, 0x691fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) AM_RANGE(0x6a0000, 0x6a0fff) AM_READWRITE(simpl156_palette_r,simpl156_palette_w) AM_RANGE(0x6b0000, 0x6b0003) AM_READWRITE(simpl156_system_r,simpl156_eeprom_w) - AM_RANGE(0x6c0000, 0x6c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x6c0000, 0x6c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x6d0000, 0x6d1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x6d2000, 0x6d3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x6d4000, 0x6d5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) @@ -337,10 +337,10 @@ static ADDRESS_MAP_START( mitchell156_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x100000, 0x100003) AM_DEVREADWRITE8_MODERN("okisfx", okim6295_device, read, write, 0x000000ff) AM_RANGE(0x140000, 0x140003) AM_DEVREADWRITE8_MODERN("okimusic", okim6295_device, read, write, 0x000000ff) AM_RANGE(0x180000, 0x187fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_BASE_MEMBER(simpl156_state, mainram) // main ram - AM_RANGE(0x190000, 0x191fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) + AM_RANGE(0x190000, 0x191fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) AM_RANGE(0x1a0000, 0x1a0fff) AM_READWRITE(simpl156_palette_r,simpl156_palette_w) AM_RANGE(0x1b0000, 0x1b0003) AM_READWRITE(simpl156_system_r,simpl156_eeprom_w) - AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w) + AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w) AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x1d2000, 0x1d3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) @@ -407,14 +407,13 @@ static int simpl156_bank_callback(const int bank) static const deco16ic_interface simpl156_deco16ic_intf = { "screen", - 1, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 16, /* color base (default values) */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16,/* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ simpl156_bank_callback, simpl156_bank_callback, - NULL, - NULL + 0,1, }; UINT16 simpl156_pri_callback(UINT16 x) diff --git a/src/mame/drivers/supbtime.c b/src/mame/drivers/supbtime.c index bf438e28ec1..b34efaa256d 100644 --- a/src/mame/drivers/supbtime.c +++ b/src/mame/drivers/supbtime.c @@ -69,7 +69,7 @@ static ADDRESS_MAP_START( supbtime_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x180000, 0x18000f) AM_READ(supbtime_controls_r) AM_RANGE(0x18000a, 0x18000d) AM_WRITENOP AM_RANGE(0x1a0000, 0x1a0001) AM_WRITE(sound_w) - AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_r, deco16ic_pf12_control_w) + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_r, deco16ic_pf_control_w) AM_RANGE(0x320000, 0x321fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w) AM_RANGE(0x322000, 0x323fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x340000, 0x3407ff) AM_RAM AM_BASE_MEMBER(supbtime_state, pf1_rowscroll) @@ -84,7 +84,7 @@ static ADDRESS_MAP_START( chinatwn_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x180000, 0x18000f) AM_READ(supbtime_controls_r) AM_RANGE(0x18000a, 0x18000d) AM_WRITENOP AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM - AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_r, deco16ic_pf12_control_w) + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_r, deco16ic_pf_control_w) AM_RANGE(0x320000, 0x321fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w) AM_RANGE(0x322000, 0x323fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x340000, 0x3407ff) AM_RAM AM_BASE_MEMBER(supbtime_state, pf1_rowscroll) // unused @@ -323,11 +323,12 @@ static const ym2151_interface ym2151_config = static const deco16ic_interface supbtime_deco16ic_intf = { "screen", - 1, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 16, /* color base (default values) */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ - NULL, NULL, NULL, NULL + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ + NULL, NULL, + 0,1 }; static MACHINE_START( supbtime ) diff --git a/src/mame/drivers/tumblep.c b/src/mame/drivers/tumblep.c index 4363d620f1e..2160d611765 100644 --- a/src/mame/drivers/tumblep.c +++ b/src/mame/drivers/tumblep.c @@ -119,7 +119,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x180000, 0x18000f) AM_READ(tumblepop_controls_r) AM_RANGE(0x18000c, 0x18000d) AM_WRITENOP AM_RANGE(0x1a0000, 0x1a07ff) AM_RAM AM_BASE_SIZE_MEMBER(tumblep_state, spriteram, spriteram_size) - AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) + AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w) AM_RANGE(0x320000, 0x320fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w) AM_RANGE(0x322000, 0x322fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w) AM_RANGE(0x340000, 0x3407ff) AM_WRITEONLY AM_BASE_MEMBER(tumblep_state, pf1_rowscroll) // unused @@ -288,11 +288,12 @@ static const ym2151_interface ym2151_config = static const deco16ic_interface tumblep_deco16ic_intf = { "screen", - 1, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0, 16, 0, 16, /* color base (default values) */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ - NULL, NULL, NULL, NULL + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, /* color base (default values) */ + 0x0f, 0x0f, /* color masks (default values) */ + NULL, NULL, + 0,1 }; static MACHINE_START( tumblep ) diff --git a/src/mame/drivers/vaportra.c b/src/mame/drivers/vaportra.c index 7b47c3c2c4c..dabfab84567 100644 --- a/src/mame/drivers/vaportra.c +++ b/src/mame/drivers/vaportra.c @@ -52,12 +52,12 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x100000, 0x100003) AM_WRITE(vaportra_priority_w) AM_RANGE(0x100006, 0x100007) AM_WRITE(vaportra_sound_w) AM_RANGE(0x100000, 0x10000f) AM_READ(vaportra_control_r) - AM_RANGE(0x200000, 0x201fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w) - AM_RANGE(0x202000, 0x203fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w) - AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w) + AM_RANGE(0x200000, 0x201fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w) + AM_RANGE(0x202000, 0x203fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w) + AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_control_w) AM_RANGE(0x280000, 0x281fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w) AM_RANGE(0x282000, 0x283fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w) - AM_RANGE(0x2c0000, 0x2c000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w) + AM_RANGE(0x2c0000, 0x2c000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w) AM_RANGE(0x300000, 0x3009ff) AM_RAM_WRITE(vaportra_palette_24bit_rg_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x304000, 0x3049ff) AM_RAM_WRITE(vaportra_palette_24bit_b_w) AM_BASE_GENERIC(paletteram2) AM_RANGE(0x308000, 0x308001) AM_NOP @@ -193,6 +193,7 @@ static const gfx_layout tilelayout = static GFXDECODE_START( vaportra ) GFXDECODE_ENTRY( "gfx1", 0x000000, charlayout, 0x000, 0x500 ) /* Characters 8x8 */ GFXDECODE_ENTRY( "gfx1", 0x000000, tilelayout, 0x000, 0x500 ) /* Tiles 16x16 */ + GFXDECODE_ENTRY( "gfx2", 0x000000, charlayout, 0x000, 0x500 ) /* Characters 8x8 */ GFXDECODE_ENTRY( "gfx2", 0x000000, tilelayout, 0x000, 0x500 ) /* Tiles 16x16 */ // ok GFXDECODE_ENTRY( "gfx3", 0x000000, tilelayout, 0x100, 16 ) /* Sprites 16x16 */ GFXDECODE_END @@ -219,17 +220,28 @@ static int vaportra_bank_callback( const int bank ) static const deco16ic_interface vaportra_deco16ic_intf = { "screen", - 0, 0, 1, 1, - 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ - 0x00, 0x20, 0x30, 0x40, /* color base */ - 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0x00, 0x20, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ vaportra_bank_callback, vaportra_bank_callback, - vaportra_bank_callback, - vaportra_bank_callback + 0,1 }; +static const deco16ic_interface vaportra_deco16ic34_intf = +{ + "screen", + 0, 1, + 0x0f, 0x0f, /* trans masks (default values) */ + 0x30, 0x40, /* color base */ + 0x0f, 0x0f, /* color masks (default values) */ + vaportra_bank_callback, + vaportra_bank_callback, + 2,3 +}; + static MACHINE_START( vaportra ) { vaportra_state *state = machine->driver_data(); @@ -237,6 +249,7 @@ static MACHINE_START( vaportra ) state->maincpu = machine->device("maincpu"); state->audiocpu = machine->device("audiocpu"); state->deco16ic = machine->device("deco_custom"); + state->deco16ic34 = machine->device("deco_custom34"); state->save_item(NAME(state->priority)); } @@ -278,6 +291,8 @@ static MACHINE_CONFIG_START( vaportra, vaportra_state ) MCFG_DECO16IC_ADD("deco_custom", vaportra_deco16ic_intf) + MCFG_DECO16IC_ADD("deco_custom34", vaportra_deco16ic34_intf) + /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/includes/boogwing.h b/src/mame/includes/boogwing.h index 9fdf5ec4d70..fc7509f05b3 100644 --- a/src/mame/includes/boogwing.h +++ b/src/mame/includes/boogwing.h @@ -15,6 +15,7 @@ public: maincpu(*this, "maincpu"), audiocpu(*this, "audiocpu"), deco16ic(*this, "deco_custom"), + deco16ic34(*this, "deco_custom34"), oki1(*this, "oki1"), oki2(*this, "oki2") { } @@ -28,6 +29,7 @@ public: required_device maincpu; required_device audiocpu; required_device deco16ic; + required_device deco16ic34; required_device oki1; required_device oki2; }; diff --git a/src/mame/includes/cbuster.h b/src/mame/includes/cbuster.h index 6d8785229ed..5a6789db9f4 100644 --- a/src/mame/includes/cbuster.h +++ b/src/mame/includes/cbuster.h @@ -27,6 +27,7 @@ public: device_t *maincpu; device_t *audiocpu; device_t *deco16ic; + device_t *deco16ic34; }; diff --git a/src/mame/includes/cninja.h b/src/mame/includes/cninja.h index d7722f833f1..397e10cbd08 100644 --- a/src/mame/includes/cninja.h +++ b/src/mame/includes/cninja.h @@ -15,6 +15,7 @@ public: maincpu(*this, "maincpu"), audiocpu(*this, "audiocpu"), deco16ic(*this, "deco_custom"), + deco16ic34(*this, "deco_custom34"), raster_irq_timer(*this, "raster_timer"), oki2(*this, "oki2") { } @@ -32,6 +33,7 @@ public: required_device maincpu; required_device audiocpu; required_device deco16ic; + required_device deco16ic34; optional_device raster_irq_timer; optional_device oki2; }; diff --git a/src/mame/includes/dassault.h b/src/mame/includes/dassault.h index a56be36b753..c483be5c8e9 100644 --- a/src/mame/includes/dassault.h +++ b/src/mame/includes/dassault.h @@ -16,6 +16,7 @@ public: audiocpu(*this, "audiocpu"), subcpu(*this, "sub"), deco16ic(*this, "deco_custom"), + deco16ic34(*this, "deco_custom34"), oki2(*this, "oki2") { } /* memory pointers */ @@ -30,6 +31,7 @@ public: required_device audiocpu; required_device subcpu; required_device deco16ic; + required_device deco16ic34; required_device oki2; }; diff --git a/src/mame/includes/deco32.h b/src/mame/includes/deco32.h index dbc885a93c0..c21436637da 100644 --- a/src/mame/includes/deco32.h +++ b/src/mame/includes/deco32.h @@ -22,7 +22,7 @@ public: int ace_ram_dirty; int has_ace_ram; UINT32 *ace_ram; - + UINT8 *dirty_palette; int pri; @@ -42,8 +42,9 @@ public: UINT32 *pf2_rowscroll32; UINT32 *pf3_rowscroll32; UINT32 *pf4_rowscroll32; - + device_t *deco16ic; + device_t *deco16ic34; }; class dragngun_state : public deco32_state diff --git a/src/mame/includes/rohga.h b/src/mame/includes/rohga.h index 7de66e398aa..77a1064853b 100644 --- a/src/mame/includes/rohga.h +++ b/src/mame/includes/rohga.h @@ -15,6 +15,7 @@ public: maincpu(*this, "maincpu"), audiocpu(*this, "audiocpu"), deco16ic(*this, "deco_custom"), + deco16ic34(*this, "deco_custom34"), oki1(*this, "oki1"), oki2(*this, "oki2") { } @@ -29,6 +30,7 @@ public: required_device maincpu; required_device audiocpu; required_device deco16ic; + required_device deco16ic34; required_device oki1; required_device oki2; }; diff --git a/src/mame/includes/vaportra.h b/src/mame/includes/vaportra.h index 7202813914b..4188f2aaa17 100644 --- a/src/mame/includes/vaportra.h +++ b/src/mame/includes/vaportra.h @@ -23,6 +23,7 @@ public: device_t *maincpu; device_t *audiocpu; device_t *deco16ic; + device_t *deco16ic34; }; diff --git a/src/mame/video/boogwing.c b/src/mame/video/boogwing.c index 254975526bc..6b7809ddd03 100644 --- a/src/mame/video/boogwing.c +++ b/src/mame/video/boogwing.c @@ -140,12 +140,12 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect SCREEN_UPDATE( boogwing ) { boogwing_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); UINT16 priority = deco16ic_priority_r(state->deco16ic, 0, 0xffff); flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); /* Draw playfields */ deco16ic_clear_sprite_priority_bitmap(state->deco16ic); @@ -157,17 +157,17 @@ SCREEN_UPDATE( boogwing ) if ((priority & 0x7) == 0x5) { deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); - deco16ic_tilemap_34_combine_draw(state->deco16ic, bitmap, cliprect, 0, 32); + deco16ic_tilemap_12_combine_draw(state->deco16ic34, bitmap, cliprect, 0, 32); } else if ((priority & 0x7) == 0x1 || (priority & 0x7) == 0x2) { - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 8); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 32); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 32); } else if ((priority & 0x7) == 0x3) { - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 8); // This mode uses playfield 3 to shadow sprites & playfield 2 (instead of @@ -176,8 +176,8 @@ SCREEN_UPDATE( boogwing ) } else { - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 8); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 8); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 32); } diff --git a/src/mame/video/cbuster.c b/src/mame/video/cbuster.c index 0975892335c..a7c15c3801c 100644 --- a/src/mame/video/cbuster.c +++ b/src/mame/video/cbuster.c @@ -50,29 +50,29 @@ VIDEO_START( twocrude ) SCREEN_UPDATE( twocrude ) { cbuster_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); flip_screen_set(screen->machine, !BIT(flip, 7)); - screen->machine->device("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffer, 0x400); + screen->machine->device("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffer, 0x400); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); /* Draw playfields & sprites */ - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); screen->machine->device("spritegen")->inefficient_copy_sprite_bitmap(screen->machine, bitmap, cliprect, 0x0800, 0x0900, 0x100, 0x0ff); screen->machine->device("spritegen")->inefficient_copy_sprite_bitmap(screen->machine, bitmap, cliprect, 0x0900, 0x0900, 0x500, 0x0ff); if (state->pri) { deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 0); } else { - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 0); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0); } diff --git a/src/mame/video/cninja.c b/src/mame/video/cninja.c index aeda4de648a..d347cb60b2b 100644 --- a/src/mame/video/cninja.c +++ b/src/mame/video/cninja.c @@ -126,17 +126,17 @@ static void cninjabl_draw_sprites( running_machine *machine, bitmap_t *bitmap, c SCREEN_UPDATE( cninja ) { cninja_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); /* Draw playfields */ bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); bitmap_fill(bitmap, cliprect, 512); - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 2); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 4); screen->machine->device("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 0x400); @@ -147,17 +147,17 @@ SCREEN_UPDATE( cninja ) SCREEN_UPDATE( cninjabl ) { cninja_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); /* Draw playfields */ bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); bitmap_fill(bitmap, cliprect, 512); - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 2); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 4); cninjabl_draw_sprites(screen->machine, bitmap, cliprect); @@ -168,16 +168,16 @@ SCREEN_UPDATE( cninjabl ) SCREEN_UPDATE( edrandy ) { cninja_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); bitmap_fill(bitmap, cliprect, 0); - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 4); screen->machine->device("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 0x400); deco16ic_tilemap_1_draw(state->deco16ic, bitmap, cliprect, 0, 0); @@ -187,7 +187,7 @@ SCREEN_UPDATE( edrandy ) SCREEN_UPDATE( robocop2 ) { cninja_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); UINT16 priority = deco16ic_priority_r(state->deco16ic, 0, 0xffff); /* One of the tilemap chips can switch between 2 tilemaps at 4bpp, or 1 at 8bpp */ @@ -195,37 +195,37 @@ SCREEN_UPDATE( robocop2 ) { deco16ic_set_tilemap_colour_mask(state->deco16ic, 2, 0); deco16ic_set_tilemap_colour_mask(state->deco16ic, 3, 0); - deco16ic_pf34_set_gfxbank(state->deco16ic, 0, 4); + deco16ic_pf12_set_gfxbank(state->deco16ic34, 0, 4); } else { deco16ic_set_tilemap_colour_mask(state->deco16ic, 2, 0xf); deco16ic_set_tilemap_colour_mask(state->deco16ic, 3, 0xf); - deco16ic_pf34_set_gfxbank(state->deco16ic, 0, 2); + deco16ic_pf12_set_gfxbank(state->deco16ic34, 0, 2); } /* Update playfields */ flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); /* Draw playfields */ bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); bitmap_fill(bitmap, cliprect, 0x200); if ((priority & 4) == 0) - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); /* Switchable priority */ switch (priority & 0x8) { case 8: deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 4); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 4); break; default: case 0: - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 4); break; } @@ -244,13 +244,13 @@ VIDEO_START( mutantf ) SCREEN_UPDATE( mutantf ) { cninja_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); UINT16 priority = deco16ic_priority_r(state->deco16ic, 0, 0xffff); flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); /* Draw playfields */ bitmap_fill(bitmap, cliprect, 0x400); /* Confirmed */ @@ -272,10 +272,10 @@ SCREEN_UPDATE( mutantf ) The other bits may control alpha blend on the 2nd sprite chip, or layer order. */ - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0); - + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 0); + if (priority & 1) { diff --git a/src/mame/video/dassault.c b/src/mame/video/dassault.c index 34a7c203a8c..b34a0d82305 100644 --- a/src/mame/video/dassault.c +++ b/src/mame/video/dassault.c @@ -175,34 +175,34 @@ static void draw_sprites( running_machine* machine, bitmap_t *bitmap, const rect SCREEN_UPDATE( dassault ) { dassault_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); UINT16 priority = deco16ic_priority_r(state->deco16ic, 0, 0xffff); /* Update tilemaps */ flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, 0, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, 0, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, 0, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, 0, state->pf4_rowscroll); /* Draw playfields/update priority bitmap */ deco16ic_clear_sprite_priority_bitmap(state->deco16ic); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); bitmap_fill(bitmap, cliprect, screen->machine->pens[3072]); - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); /* The middle playfields can be swapped priority-wise */ if ((priority & 3) == 0) { deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 16); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 16); } else if ((priority & 3) == 1) { - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 64); } else if ((priority & 3) == 3) { - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 16); } else diff --git a/src/mame/video/deco16ic.c b/src/mame/video/deco16ic.c index 6d2253e9b31..c7c81c3f1f0 100644 --- a/src/mame/video/deco16ic.c +++ b/src/mame/video/deco16ic.c @@ -140,8 +140,8 @@ Rowscroll style: 2010-02: Converted to be a device. TODO: - - properly support PCBs with two ICs (i.e. no pf3/pf4 because they actually belong to a 2nd chip) - - move here emulation of the sprite chips (currently replicated in each driver)? + - convert to c++ device + - splite tilemap emulation from other emulation ***************************************************************************/ @@ -149,7 +149,6 @@ Rowscroll style: #include "video/deco16ic.h" #include "ui.h" -/* Note, each device should have 2 tilemaps, not 4.. games with 4 chips use 2 devices.. this should be fixed here! */ typedef struct _deco16ic_state deco16ic_state; struct _deco16ic_state @@ -157,35 +156,33 @@ struct _deco16ic_state screen_device *screen; UINT16 *pf1_data, *pf2_data; - UINT16 *pf3_data, *pf4_data; - UINT16 *pf12_control, *pf34_control; + UINT16 *pf12_control; UINT16 *raster_display_list; UINT8 *dirty_palette; const UINT16 *pf1_rowscroll_ptr, *pf2_rowscroll_ptr; - const UINT16 *pf3_rowscroll_ptr, *pf4_rowscroll_ptr; - tilemap_t *pf1_tilemap_16x16, *pf2_tilemap_16x16, *pf3_tilemap_16x16, *pf4_tilemap_16x16 ; + tilemap_t *pf1_tilemap_16x16, *pf2_tilemap_16x16; tilemap_t *pf1_tilemap_8x8, *pf2_tilemap_8x8; bitmap_t *sprite_priority_bitmap; - deco16_bank_cb bank_cb[4]; + deco16_bank_cb bank_cb[2]; UINT16 priority; int raster_display_position; - int use_custom_pf1, use_custom_pf2, use_custom_pf3, use_custom_pf4; + int use_custom_pf1, use_custom_pf2; - int pf1_bank, pf2_bank, pf3_bank, pf4_bank; - int pf12_16x16_gfx_bank, pf34_16x16_gfx_bank, pf12_8x8_gfx_bank; - int pf1_colourmask, pf2_colourmask, pf3_colourmask, pf4_colourmask; - int pf1_colour_bank, pf2_colour_bank, pf3_colour_bank, pf4_colour_bank; - int pf1_trans_mask, pf2_trans_mask, pf3_trans_mask, pf4_trans_mask; + int pf1_bank, pf2_bank; + int pf12_16x16_gfx_bank, pf12_8x8_gfx_bank; + int pf1_colourmask, pf2_colourmask; + int pf1_colour_bank, pf2_colour_bank; + int pf1_trans_mask, pf2_trans_mask; - int pf12_last_small, pf12_last_big, pf34_last_big; + int pf12_last_small, pf12_last_big; - int pf3_8bpp_mode; + int pf1_8bpp_mode; }; /***************************************************************************** @@ -287,76 +284,6 @@ static TILEMAP_MAPPER( deco16_scan_rows ) return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x20) << 5) + ((row & 0x20) << 6); } -static TILE_GET_INFO_DEVICE( get_pf4_tile_info ) -{ - deco16ic_state *deco16ic = get_safe_token(device); - UINT16 tile = deco16ic->pf4_data[tile_index]; - UINT8 colour = (tile >> 12) & 0xf; - UINT8 flags = 0; - - if (tile & 0x8000) - { - if ((deco16ic->pf34_control[6] >> 8) & 0x01) - { - flags |= TILE_FLIPX; - colour &= 0x7; - } - if ((deco16ic->pf34_control[6] >> 8) & 0x02) - { - flags|=TILE_FLIPY; - colour &= 0x7; - } - } - - SET_TILE_INFO_DEVICE( - deco16ic->pf34_16x16_gfx_bank, - (tile & 0xfff) | deco16ic->pf4_bank, - (colour & deco16ic->pf4_colourmask) + deco16ic->pf4_colour_bank, - flags); -} - -static TILE_GET_INFO_DEVICE( get_pf3_tile_info ) -{ - deco16ic_state *deco16ic = get_safe_token(device); - UINT16 tile = deco16ic->pf3_data[tile_index]; - UINT8 colour = (tile >> 12) & 0xf; - UINT8 flags = 0; - - if (tile & 0x8000) - { - if ((deco16ic->pf34_control[6] >> 0) & 0x01) - { - flags |= TILE_FLIPX; - colour &= 0x7; - } - if ((deco16ic->pf34_control[6] >> 0) & 0x02) - { - flags |= TILE_FLIPY; - colour &= 0x7; - } - } - - if (deco16ic->pf3_8bpp_mode) - { - // Captain America operates this chip in 8bpp mode. - // In 8bpp mode you appear to only get 1 layer, not 2, but you also - // have an extra 2 tile bits, and 2 less colour bits. - SET_TILE_INFO_DEVICE( - deco16ic->pf34_16x16_gfx_bank, - (tile & 0x3fff) | deco16ic->pf3_bank, - ((colour & deco16ic->pf3_colourmask) + deco16ic->pf3_colour_bank)>>2, - flags); - } - else - { - SET_TILE_INFO_DEVICE( - deco16ic->pf34_16x16_gfx_bank, - (tile & 0xfff) | deco16ic->pf3_bank, - ((colour & deco16ic->pf3_colourmask) + deco16ic->pf3_colour_bank), - flags); - } -} - static TILE_GET_INFO_DEVICE( get_pf2_tile_info ) { deco16ic_state *deco16ic = get_safe_token(device); @@ -406,11 +333,25 @@ static TILE_GET_INFO_DEVICE( get_pf1_tile_info ) } } - SET_TILE_INFO_DEVICE( - deco16ic->pf12_16x16_gfx_bank, - (tile & 0xfff) | deco16ic->pf1_bank, - (colour & deco16ic->pf1_colourmask) + deco16ic->pf1_colour_bank, - flags); + if (deco16ic->pf1_8bpp_mode) + { + // Captain America operates this chip in 8bpp mode. + // In 8bpp mode you appear to only get 1 layer, not 2, but you also + // have an extra 2 tile bits, and 2 less colour bits. + SET_TILE_INFO_DEVICE( + deco16ic->pf12_16x16_gfx_bank, + (tile & 0x3fff) | deco16ic->pf1_bank, + ((colour & deco16ic->pf1_colourmask) + deco16ic->pf1_colour_bank)>>2, + flags); + } + else + { + SET_TILE_INFO_DEVICE( + deco16ic->pf12_16x16_gfx_bank, + (tile & 0xfff) | deco16ic->pf1_bank, + (colour & deco16ic->pf1_colourmask) + deco16ic->pf1_colour_bank, + flags); + } } static TILE_GET_INFO_DEVICE( get_pf2_tile_info_b ) @@ -523,7 +464,7 @@ static void custom_tilemap_draw( width_mask = src_bitmap0->width - 1; height_mask = src_bitmap0->height - 1; src_y = scrolly + starty; - + for (y = starty; y < endy; y++) { @@ -547,7 +488,7 @@ static void custom_tilemap_draw( if (src_bitmap1) { - p |= (*BITMAP_ADDR16(src_bitmap1, (src_y + column_offset) & height_mask, src_x) & combine_mask) << combine_shift; + p |= (*BITMAP_ADDR16(src_bitmap1, (src_y + column_offset) & height_mask, src_x) & combine_mask) << combine_shift; } src_x = (src_x + 1) & width_mask; @@ -586,7 +527,7 @@ static void custom_tilemap_draw( { UINT16 p2 = *BITMAP_ADDR16(src_bitmap1, (src_y + column_offset) & height_mask, src_x); p = 0x200+( ((p&0x30)<<4) | (p&0x0f) | ((p2 & 0x0f)<<4)); - } + } } src_x = (src_x + 1) & width_mask; @@ -608,10 +549,10 @@ static void custom_tilemap_draw( /******************************************************************************/ /* captain america seems to have a similar 8bpp feature to robocop2, investigate merging */ -void deco16ic_set_pf3_8bpp_mode(device_t *device, int mode) +void deco16ic_set_pf1_8bpp_mode(device_t *device, int mode) { deco16ic_state *deco16ic = get_safe_token(device); - deco16ic->pf3_8bpp_mode = mode; + deco16ic->pf1_8bpp_mode = mode; } /* robocop 2 can switch between 2 tilemaps at 4bpp, or 1 at 8bpp */ @@ -623,25 +564,34 @@ void deco16ic_set_tilemap_colour_mask( device_t *device, int tmap, int mask ) { case 0: deco16ic->pf1_colourmask = mask; break; case 1: deco16ic->pf2_colourmask = mask; break; - case 2: deco16ic->pf3_colourmask = mask; break; - case 3: deco16ic->pf4_colourmask = mask; break; } } -void deco16ic_pf34_set_gfxbank( device_t *device, int small, int big ) +void deco16ic_pf12_set_gfxbank( device_t *device, int small, int big ) { deco16ic_state *deco16ic = get_safe_token(device); - if (deco16ic->pf34_last_big != big) + if (deco16ic->pf12_last_big != big) { - if (deco16ic->pf3_tilemap_16x16) - tilemap_mark_all_tiles_dirty(deco16ic->pf3_tilemap_16x16); - if (deco16ic->pf4_tilemap_16x16) - tilemap_mark_all_tiles_dirty(deco16ic->pf4_tilemap_16x16); + if (deco16ic->pf1_tilemap_16x16) + tilemap_mark_all_tiles_dirty(deco16ic->pf1_tilemap_16x16); + if (deco16ic->pf2_tilemap_16x16) + tilemap_mark_all_tiles_dirty(deco16ic->pf2_tilemap_16x16); - deco16ic->pf34_last_big = big; + deco16ic->pf12_last_big = big; } - deco16ic->pf34_16x16_gfx_bank = big; + deco16ic->pf12_16x16_gfx_bank = big; + + if (deco16ic->pf12_last_small != small) + { + if (deco16ic->pf1_tilemap_8x8) + tilemap_mark_all_tiles_dirty(deco16ic->pf1_tilemap_8x8); + if (deco16ic->pf2_tilemap_8x8) + tilemap_mark_all_tiles_dirty(deco16ic->pf2_tilemap_8x8); + + deco16ic->pf12_last_small = small; + } + deco16ic->pf12_8x8_gfx_bank = small; } /* stoneage has broken scroll registers */ @@ -663,14 +613,6 @@ void deco16ic_set_scrolldx( device_t *device, int tmap, int size, int dx, int dx else tilemap_set_scrolldx(deco16ic->pf2_tilemap_8x8, dx, dx_if_flipped); break; - case 2: - if (!size) - tilemap_set_scrolldx(deco16ic->pf3_tilemap_16x16, dx, dx_if_flipped); - break; - case 3: - if (!size) - tilemap_set_scrolldx(deco16ic->pf4_tilemap_16x16, dx, dx_if_flipped); - break; } } @@ -698,22 +640,6 @@ WRITE16_DEVICE_HANDLER( deco16ic_pf2_data_w ) tilemap_mark_tile_dirty(deco16ic->pf2_tilemap_16x16, offset); } -WRITE16_DEVICE_HANDLER( deco16ic_pf3_data_w ) -{ - deco16ic_state *deco16ic = get_safe_token(device); - - COMBINE_DATA(&deco16ic->pf3_data[offset]); - tilemap_mark_tile_dirty(deco16ic->pf3_tilemap_16x16, offset); -} - -WRITE16_DEVICE_HANDLER( deco16ic_pf4_data_w ) -{ - deco16ic_state *deco16ic = get_safe_token(device); - - COMBINE_DATA(&deco16ic->pf4_data[offset]); - tilemap_mark_tile_dirty(deco16ic->pf4_tilemap_16x16, offset); -} - READ16_DEVICE_HANDLER( deco16ic_pf1_data_r ) { deco16ic_state *deco16ic = get_safe_token(device); @@ -726,67 +652,31 @@ READ16_DEVICE_HANDLER( deco16ic_pf2_data_r ) return deco16ic->pf2_data[offset]; } -READ16_DEVICE_HANDLER( deco16ic_pf3_data_r ) -{ - deco16ic_state *deco16ic = get_safe_token(device); - return deco16ic->pf3_data[offset]; -} -READ16_DEVICE_HANDLER( deco16ic_pf4_data_r ) -{ - deco16ic_state *deco16ic = get_safe_token(device); - return deco16ic->pf4_data[offset]; -} - - -WRITE16_DEVICE_HANDLER( deco16ic_pf12_control_w ) +WRITE16_DEVICE_HANDLER( deco16ic_pf_control_w ) { deco16ic_state *deco16ic = get_safe_token(device); COMBINE_DATA(&deco16ic->pf12_control[offset]); device->machine->primary_screen->update_partial(device->machine->primary_screen->vpos()); } -WRITE16_DEVICE_HANDLER( deco16ic_pf34_control_w ) -{ - deco16ic_state *deco16ic = get_safe_token(device); - COMBINE_DATA(&deco16ic->pf34_control[offset]); - device->machine->primary_screen->update_partial(device->machine->primary_screen->vpos()); -} - -READ16_DEVICE_HANDLER( deco16ic_pf12_control_r ) +READ16_DEVICE_HANDLER( deco16ic_pf_control_r ) { deco16ic_state *deco16ic = get_safe_token(device); return deco16ic->pf12_control[offset]; } -READ16_DEVICE_HANDLER( deco16ic_pf34_control_r ) + +READ32_DEVICE_HANDLER ( deco16ic_pf_control_dword_r ) { - deco16ic_state *deco16ic = get_safe_token(device); - return deco16ic->pf34_control[offset]; + return deco16ic_pf_control_r(device, offset, 0xffff)^0xffff0000; } - -READ32_DEVICE_HANDLER ( deco16ic_pf12_control_dword_r ) +WRITE32_DEVICE_HANDLER( deco16ic_pf_control_dword_w ) { - return deco16ic_pf12_control_r(device, offset, 0xffff)^0xffff0000; + deco16ic_pf_control_w(device, offset, data & 0xffff, mem_mask & 0xffff); } -WRITE32_DEVICE_HANDLER( deco16ic_pf12_control_dword_w ) -{ - deco16ic_pf12_control_w(device, offset, data & 0xffff, mem_mask & 0xffff); -} - -READ32_DEVICE_HANDLER ( deco16ic_pf34_control_dword_r ) -{ - return deco16ic_pf34_control_r(device, offset, 0xffff)^0xffff0000; -} - -WRITE32_DEVICE_HANDLER( deco16ic_pf34_control_dword_w ) -{ - deco16ic_pf34_control_w(device, offset, data & 0xffff, mem_mask & 0xffff); -} - - READ32_DEVICE_HANDLER( deco16ic_pf1_data_dword_r ) { return deco16ic_pf1_data_r(device, offset, 0xffff)^0xffff0000; @@ -807,25 +697,6 @@ WRITE32_DEVICE_HANDLER( deco16ic_pf2_data_dword_w ) deco16ic_pf2_data_w(device, offset, data & 0xffff, mem_mask & 0xffff); } -READ32_DEVICE_HANDLER( deco16ic_pf3_data_dword_r ) -{ - return deco16ic_pf3_data_r(device, offset, 0xffff)^0xffff0000; -} - -WRITE32_DEVICE_HANDLER( deco16ic_pf3_data_dword_w ) -{ - deco16ic_pf3_data_w(device, offset, data & 0xffff, mem_mask & 0xffff); -} - -READ32_DEVICE_HANDLER( deco16ic_pf4_data_dword_r ) -{ - return deco16ic_pf4_data_r(device, offset, 0xffff)^0xffff0000; -} - -WRITE32_DEVICE_HANDLER( deco16ic_pf4_data_dword_w ) -{ - deco16ic_pf4_data_w(device, offset, data & 0xffff, mem_mask & 0xffff); -} /*****************************************************************************************/ @@ -844,9 +715,6 @@ static int deco16_pf_update( /* Toggle between 8x8 and 16x16 modes (and master enable bit) */ if (BIT(control1, 7)) { - if (!tilemap_8x8) - popmessage("Deco16: Playfield switched into 8x8 mode but no tilemap defined"); - if (tilemap_8x8) tilemap_set_enable(tilemap_8x8, BIT(control0, 7)); @@ -856,9 +724,6 @@ static int deco16_pf_update( } else { - if (!tilemap_16x16) - popmessage("Deco16: Playfield switched into 16x16 mode but no tilemap defined"); - if (tilemap_8x8) tilemap_set_enable(tilemap_8x8, 0); @@ -986,7 +851,7 @@ static int deco16_pf_update( return use_custom; } -void deco16ic_pf12_update( device_t *device, const UINT16 *rowscroll_1_ptr, const UINT16 *rowscroll_2_ptr ) +void deco16ic_pf_update( device_t *device, const UINT16 *rowscroll_1_ptr, const UINT16 *rowscroll_2_ptr ) { deco16ic_state *deco16ic = get_safe_token(device); int bank1, bank2; @@ -1029,43 +894,6 @@ void deco16ic_pf12_update( device_t *device, const UINT16 *rowscroll_1_ptr, cons } } -void deco16ic_pf34_update( device_t *device, const UINT16 *rowscroll_1_ptr, const UINT16 *rowscroll_2_ptr ) -{ - deco16ic_state *deco16ic = get_safe_token(device); - int bank1, bank2; - - /* Update scrolling and tilemap enable */ - deco16ic->pf3_rowscroll_ptr = rowscroll_1_ptr; - deco16ic->pf4_rowscroll_ptr = rowscroll_2_ptr; - deco16ic->use_custom_pf4 = deco16_pf_update(0, deco16ic->pf4_tilemap_16x16, rowscroll_2_ptr, deco16ic->pf34_control[3], deco16ic->pf34_control[4], deco16ic->pf34_control[5] >> 8, deco16ic->pf34_control[6] >> 8); - deco16ic->use_custom_pf3 = deco16_pf_update(0, deco16ic->pf3_tilemap_16x16, rowscroll_1_ptr, deco16ic->pf34_control[1], deco16ic->pf34_control[2], deco16ic->pf34_control[5] & 0xff, deco16ic->pf34_control[6] & 0xff); - - /* Update banking and global flip state */ - if (deco16ic->bank_cb[2]) - { - bank1 = deco16ic->bank_cb[2](deco16ic->pf34_control[7] & 0xff); - if (bank1 != deco16ic->pf3_bank) - { - if (deco16ic->pf3_tilemap_16x16) - tilemap_mark_all_tiles_dirty(deco16ic->pf3_tilemap_16x16); - - deco16ic->pf3_bank = bank1; - } - } - - if (deco16ic->bank_cb[3]) - { - bank2 = deco16ic->bank_cb[3](deco16ic->pf34_control[7] >> 8); - if (bank2 != deco16ic->pf4_bank) - { - if (deco16ic->pf4_tilemap_16x16) - tilemap_mark_all_tiles_dirty(deco16ic->pf4_tilemap_16x16); - - deco16ic->pf4_bank = bank2; - } - } -} - /*****************************************************************************************/ void deco16ic_print_debug_info(device_t *device, bitmap_t *bitmap) @@ -1084,16 +912,6 @@ void deco16ic_print_debug_info(device_t *device, bitmap_t *bitmap) else sprintf(buf, "\n\n"); - if (deco16ic->pf34_control) - { - sprintf(&buf[strlen(buf)],"%04X %04X %04X %04X\n", deco16ic->pf34_control[0], deco16ic->pf34_control[1], deco16ic->pf34_control[2], deco16ic->pf34_control[3]); - sprintf(&buf[strlen(buf)],"%04X %04X %04X %04X\n", deco16ic->pf34_control[4], deco16ic->pf34_control[5], deco16ic->pf34_control[6], deco16ic->pf34_control[7]); - } - else - sprintf(&buf[strlen(buf)], "\n\n"); - - sprintf(&buf[strlen(buf)],"%04X", deco16ic->priority); - ui_draw_text(&device->machine->render().ui_container(), buf, 60, 40); } @@ -1213,33 +1031,14 @@ void deco16ic_tilemap_2_draw(device_t *device, bitmap_t *bitmap, const rectangle } } -void deco16ic_tilemap_3_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority) -{ - deco16ic_state *deco16ic = get_safe_token(device); - - if (deco16ic->use_custom_pf3) - custom_tilemap_draw(device, bitmap, cliprect, 0, deco16ic->pf3_tilemap_16x16, 0, 0, deco16ic->pf3_rowscroll_ptr, deco16ic->pf34_control[1], deco16ic->pf34_control[2], deco16ic->pf34_control[5] & 0xff, deco16ic->pf34_control[6] & 0xff, 0, 0, deco16ic->pf3_trans_mask, flags, priority, 0); - else if (deco16ic->pf3_tilemap_16x16) - tilemap_draw(bitmap, cliprect, deco16ic->pf3_tilemap_16x16, flags, priority); -} - -void deco16ic_tilemap_4_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority) -{ - deco16ic_state *deco16ic = get_safe_token(device); - - if (deco16ic->use_custom_pf4) - custom_tilemap_draw(device, bitmap, cliprect, 0, deco16ic->pf4_tilemap_16x16, 0, 0, deco16ic->pf4_rowscroll_ptr, deco16ic->pf34_control[3], deco16ic->pf34_control[4], deco16ic->pf34_control[5] >> 8, deco16ic->pf34_control[6] >> 8, 0, 0, deco16ic->pf4_trans_mask, flags, priority, 0); - else if (deco16ic->pf4_tilemap_16x16) - tilemap_draw(bitmap, cliprect, deco16ic->pf4_tilemap_16x16, flags, priority); -} /*****************************************************************************************/ // Combines the output of two 4BPP tilemaps into an 8BPP tilemap -void deco16ic_tilemap_34_combine_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority, int is_tattoo) +void deco16ic_tilemap_12_combine_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority, int is_tattoo) { deco16ic_state *deco16ic = get_safe_token(device); - custom_tilemap_draw(device, bitmap, cliprect, 0, deco16ic->pf3_tilemap_16x16, 0, deco16ic->pf4_tilemap_16x16, deco16ic->pf3_rowscroll_ptr, deco16ic->pf34_control[1], deco16ic->pf34_control[2], deco16ic->pf34_control[5] & 0xff, deco16ic->pf34_control[6] & 0xff, 0xf, 4, 0xff, flags, priority, is_tattoo); + custom_tilemap_draw(device, bitmap, cliprect, 0, deco16ic->pf1_tilemap_16x16, 0, deco16ic->pf2_tilemap_16x16, deco16ic->pf1_rowscroll_ptr, deco16ic->pf12_control[1], deco16ic->pf12_control[2], deco16ic->pf12_control[5] & 0xff, deco16ic->pf12_control[6] & 0xff, 0xf, 4, 0xff, flags, priority, is_tattoo); } @@ -1261,26 +1060,23 @@ static DEVICE_START( deco16ic ) deco16ic->bank_cb[0] = intf->bank_cb0; deco16ic->bank_cb[1] = intf->bank_cb1; - deco16ic->bank_cb[2] = intf->bank_cb2; - deco16ic->bank_cb[3] = intf->bank_cb3; deco16ic->pf1_trans_mask = intf->trans_mask1; deco16ic->pf2_trans_mask = intf->trans_mask2; - deco16ic->pf3_trans_mask = intf->trans_mask3; - deco16ic->pf4_trans_mask = intf->trans_mask4; deco16ic->pf1_colour_bank = intf->col_base1; deco16ic->pf2_colour_bank = intf->col_base2; - deco16ic->pf3_colour_bank = intf->col_base3; - deco16ic->pf4_colour_bank = intf->col_base4; deco16ic->pf1_colourmask = intf->col_mask1; deco16ic->pf2_colourmask = intf->col_mask2; - deco16ic->pf3_colourmask = intf->col_mask3; - deco16ic->pf4_colourmask = intf->col_mask4; - deco16ic->pf1_tilemap_16x16 = tilemap_create_device(device, get_pf1_tile_info, deco16_scan_rows, 16, 16, 64, 32); - deco16ic->pf1_tilemap_8x8 = tilemap_create_device(device, get_pf1_tile_info_b, tilemap_scan_rows, 8, 8, 64, 32); + deco16ic->pf1_tilemap_16x16 = tilemap_create_device(device, get_pf1_tile_info, deco16_scan_rows, 16, 16, intf->full_width12 ? 64 : 32, 32); +// deco16ic->pf1_tilemap_8x8 = tilemap_create_device(device, get_pf1_tile_info_b, tilemap_scan_rows, 8, 8, intf->full_width12 ? 64 : 32, 32); + deco16ic->pf1_tilemap_8x8 = tilemap_create_device(device, get_pf1_tile_info_b, tilemap_scan_rows, 8, 8, 64 , 32); + + deco16ic->pf12_8x8_gfx_bank = intf->_8x8_gfxregion; + deco16ic->pf12_16x16_gfx_bank = intf->_16x16_gfxregion; + if (intf->split) deco16ic->pf2_tilemap_16x16 = tilemap_create_device(device, get_pf2_tile_info, deco16_scan_rows, 16, 16, intf->full_width12 ? 64 : 32, 32); @@ -1289,17 +1085,6 @@ static DEVICE_START( deco16ic ) deco16ic->pf2_tilemap_8x8 = tilemap_create_device(device, get_pf2_tile_info_b, tilemap_scan_rows, 8, 8, intf->full_width12 ? 64 : 32, 32); - if (!intf->pf12_only) - { - deco16ic->pf4_tilemap_16x16 = tilemap_create_device(device, get_pf4_tile_info, deco16_scan_rows, 16, 16, intf->full_width34 ? 64 : 32, 32); - deco16ic->pf3_tilemap_16x16 = tilemap_create_device(device, get_pf3_tile_info, deco16_scan_rows, 16, 16, intf->full_width34 ? 64 : 32, 32); - } - else - { - deco16ic->pf3_tilemap_16x16 = 0; - deco16ic->pf4_tilemap_16x16 = 0; - } - tilemap_set_transparent_pen(deco16ic->pf1_tilemap_8x8, 0); tilemap_set_transparent_pen(deco16ic->pf2_tilemap_8x8, 0); tilemap_set_transparent_pen(deco16ic->pf1_tilemap_16x16, 0); @@ -1308,73 +1093,53 @@ static DEVICE_START( deco16ic ) if (intf->split) /* Caveman Ninja only */ tilemap_set_transmask(deco16ic->pf2_tilemap_16x16, 0, 0x00ff, 0xff01); - if (!intf->pf12_only) - { - tilemap_set_transparent_pen(deco16ic->pf3_tilemap_16x16, 0); - tilemap_set_transparent_pen(deco16ic->pf4_tilemap_16x16, 0); - } - - deco16ic->pf3_8bpp_mode = 0; + deco16ic->pf1_8bpp_mode = 0; deco16ic->dirty_palette = auto_alloc_array_clear(device->machine, UINT8, 4096); deco16ic->raster_display_list = auto_alloc_array_clear(device->machine, UINT16, 20 * 256 / 2); deco16ic->pf1_data = auto_alloc_array_clear(device->machine, UINT16, 0x2000 / 2); deco16ic->pf2_data = auto_alloc_array_clear(device->machine, UINT16, 0x2000 / 2); - deco16ic->pf3_data = auto_alloc_array_clear(device->machine, UINT16, 0x2000 / 2); - deco16ic->pf4_data = auto_alloc_array_clear(device->machine, UINT16, 0x2000 / 2); deco16ic->pf12_control = auto_alloc_array_clear(device->machine, UINT16, 0x10 / 2); - deco16ic->pf34_control = auto_alloc_array_clear(device->machine, UINT16, 0x10 / 2); + device->save_item(NAME(deco16ic->priority)); device->save_item(NAME(deco16ic->raster_display_position)); device->save_item(NAME(deco16ic->use_custom_pf1)); device->save_item(NAME(deco16ic->use_custom_pf2)); - device->save_item(NAME(deco16ic->use_custom_pf3)); - device->save_item(NAME(deco16ic->use_custom_pf4)); device->save_item(NAME(deco16ic->pf1_bank)); device->save_item(NAME(deco16ic->pf2_bank)); - device->save_item(NAME(deco16ic->pf3_bank)); - device->save_item(NAME(deco16ic->pf4_bank)); device->save_item(NAME(deco16ic->pf12_8x8_gfx_bank)); device->save_item(NAME(deco16ic->pf12_16x16_gfx_bank)); - device->save_item(NAME(deco16ic->pf34_16x16_gfx_bank)); device->save_item(NAME(deco16ic->pf12_last_small)); device->save_item(NAME(deco16ic->pf12_last_big)); - device->save_item(NAME(deco16ic->pf34_last_big)); - device->save_item(NAME(deco16ic->pf3_8bpp_mode)); + + device->save_item(NAME(deco16ic->pf1_8bpp_mode)); device->save_pointer(NAME(deco16ic->dirty_palette), 4096); device->save_pointer(NAME(deco16ic->raster_display_list), 20 * 256 / 2); device->save_pointer(NAME(deco16ic->pf1_data), 0x2000 / 2); device->save_pointer(NAME(deco16ic->pf2_data), 0x2000 / 2); - device->save_pointer(NAME(deco16ic->pf3_data), 0x2000 / 2); - device->save_pointer(NAME(deco16ic->pf4_data), 0x2000 / 2); device->save_pointer(NAME(deco16ic->pf12_control), 0x10 / 2); - device->save_pointer(NAME(deco16ic->pf34_control), 0x10 / 2); + } static DEVICE_RESET( deco16ic ) { deco16ic_state *deco16ic = get_safe_token(device); - deco16ic->pf1_bank = deco16ic->pf2_bank = deco16ic->pf3_bank = deco16ic->pf4_bank = 0; + deco16ic->pf1_bank = deco16ic->pf2_bank = 0; - deco16ic->pf12_8x8_gfx_bank = 0; - deco16ic->pf12_16x16_gfx_bank = 1; - deco16ic->pf34_16x16_gfx_bank = 2; deco16ic->raster_display_position = 0; - deco16ic->pf12_last_small = deco16ic->pf12_last_big = deco16ic->pf34_last_big = -1; + deco16ic->pf12_last_small = deco16ic->pf12_last_big = -1; deco16ic->priority = 0; - deco16ic->use_custom_pf1 = deco16ic->use_custom_pf2 = deco16ic->use_custom_pf3 = deco16ic->use_custom_pf4 = 0; + deco16ic->use_custom_pf1 = deco16ic->use_custom_pf2 = 0; deco16ic->pf1_rowscroll_ptr = 0; deco16ic->pf2_rowscroll_ptr = 0; - deco16ic->pf3_rowscroll_ptr = 0; - deco16ic->pf4_rowscroll_ptr = 0; } diff --git a/src/mame/video/deco16ic.h b/src/mame/video/deco16ic.h index aef71e34145..bc07bba5965 100644 --- a/src/mame/video/deco16ic.h +++ b/src/mame/video/deco16ic.h @@ -24,15 +24,14 @@ typedef struct _deco16ic_interface deco16ic_interface; struct _deco16ic_interface { const char *screen; - int pf12_only; int split; int full_width12; - int full_width34; - int trans_mask1, trans_mask2, trans_mask3, trans_mask4; - int col_base1, col_base2, col_base3, col_base4; - int col_mask1, col_mask2, col_mask3, col_mask4; - deco16_bank_cb bank_cb0, bank_cb1, bank_cb2, bank_cb3; + int trans_mask1, trans_mask2; + int col_base1, col_base2; + int col_mask1, col_mask2; + deco16_bank_cb bank_cb0, bank_cb1; + int _8x8_gfxregion, _16x16_gfxregion; }; DECLARE_LEGACY_DEVICE(DECO16IC, deco16ic); @@ -52,37 +51,26 @@ DECLARE_LEGACY_DEVICE(DECO16IC, deco16ic); WRITE16_DEVICE_HANDLER( deco16ic_pf1_data_w ); WRITE16_DEVICE_HANDLER( deco16ic_pf2_data_w ); -WRITE16_DEVICE_HANDLER( deco16ic_pf3_data_w ); -WRITE16_DEVICE_HANDLER( deco16ic_pf4_data_w ); READ16_DEVICE_HANDLER( deco16ic_pf1_data_r ); READ16_DEVICE_HANDLER( deco16ic_pf2_data_r ); -READ16_DEVICE_HANDLER( deco16ic_pf3_data_r ); -READ16_DEVICE_HANDLER( deco16ic_pf4_data_r ); -WRITE16_DEVICE_HANDLER( deco16ic_pf12_control_w ); -WRITE16_DEVICE_HANDLER( deco16ic_pf34_control_w ); -READ16_DEVICE_HANDLER( deco16ic_pf12_control_r ); -READ16_DEVICE_HANDLER( deco16ic_pf34_control_r ); +WRITE16_DEVICE_HANDLER( deco16ic_pf_control_w ); + + +READ16_DEVICE_HANDLER( deco16ic_pf_control_r ); WRITE32_DEVICE_HANDLER( deco16ic_pf1_data_dword_w ); WRITE32_DEVICE_HANDLER( deco16ic_pf2_data_dword_w ); -WRITE32_DEVICE_HANDLER( deco16ic_pf3_data_dword_w ); -WRITE32_DEVICE_HANDLER( deco16ic_pf4_data_dword_w ); READ32_DEVICE_HANDLER( deco16ic_pf1_data_dword_r ); READ32_DEVICE_HANDLER( deco16ic_pf2_data_dword_r ); -READ32_DEVICE_HANDLER( deco16ic_pf3_data_dword_r ); -READ32_DEVICE_HANDLER( deco16ic_pf4_data_dword_r ); -WRITE32_DEVICE_HANDLER( deco16ic_pf12_control_dword_w ); -WRITE32_DEVICE_HANDLER( deco16ic_pf34_control_dword_w ); - -READ32_DEVICE_HANDLER( deco16ic_pf12_control_dword_r ); -READ32_DEVICE_HANDLER( deco16ic_pf34_control_dword_r ); +WRITE32_DEVICE_HANDLER( deco16ic_pf_control_dword_w ); +READ32_DEVICE_HANDLER( deco16ic_pf_control_dword_r ); WRITE16_DEVICE_HANDLER( deco16ic_nonbuffered_palette_w ); WRITE16_DEVICE_HANDLER( deco16ic_buffered_palette_w ); @@ -95,17 +83,13 @@ READ16_DEVICE_HANDLER( deco16ic_71_r ); void deco16ic_print_debug_info(device_t *device, bitmap_t *bitmap); -void deco16ic_pf12_update(device_t *device, const UINT16 *rowscroll_1_ptr, const UINT16 *rowscroll_2_ptr); -void deco16ic_pf34_update(device_t *device, const UINT16 *rowscroll_1_ptr, const UINT16 *rowscroll_2_ptr); +void deco16ic_pf_update(device_t *device, const UINT16 *rowscroll_1_ptr, const UINT16 *rowscroll_2_ptr); void deco16ic_tilemap_1_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority); void deco16ic_tilemap_2_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority); -void deco16ic_tilemap_3_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority); -void deco16ic_tilemap_4_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority); /* used by boogwing, nitrobal */ -void deco16ic_tilemap_34_combine_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority, int is_tattoo = false); - +void deco16ic_tilemap_12_combine_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority, int is_tattoo = false); /* used by boogwing, dassault, nitrobal */ void deco16ic_clear_sprite_priority_bitmap(device_t *device); @@ -117,10 +101,10 @@ void deco16ic_pdrawgfx( /* used by robocop2 */ void deco16ic_set_tilemap_colour_mask(device_t *device, int tmap, int mask); -void deco16ic_pf34_set_gfxbank(device_t *device, int small, int big); +void deco16ic_pf12_set_gfxbank(device_t *device, int small, int big); /* used by captaven */ -void deco16ic_set_pf3_8bpp_mode(device_t *device, int mode); +void deco16ic_set_pf1_8bpp_mode(device_t *device, int mode); /* used by stoneage */ void deco16ic_set_scrolldx(device_t *device, int tmap, int size, int dx, int dx_if_flipped); diff --git a/src/mame/video/deco32.c b/src/mame/video/deco32.c index c12290a2619..65ff38d0b21 100644 --- a/src/mame/video/deco32.c +++ b/src/mame/video/deco32.c @@ -548,7 +548,7 @@ VIDEO_START( dragngun ) { dragngun_state *state = machine->driver_data(); state->dirty_palette = auto_alloc_array(machine, UINT8, 4096); - + memset(state->dirty_palette,0,4096); state_save_register_global(machine, state->dragngun_sprite_ctrl); @@ -590,7 +590,7 @@ SCREEN_EOF( captaven ) SCREEN_EOF( dragngun ) { - + } @@ -600,34 +600,35 @@ SCREEN_UPDATE( captaven ) { deco32_state *state = screen->machine->driver_data(); state->deco16ic = screen->machine->device("deco_custom"); + state->deco16ic34 = screen->machine->device("deco_custom34"); tilemap_set_flip_all(screen->machine,flip_screen_get(screen->machine) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(bitmap,cliprect,screen->machine->pens[0x000]); // Palette index not confirmed - deco16ic_set_pf3_8bpp_mode(state->deco16ic, 1); + deco16ic_set_pf1_8bpp_mode(state->deco16ic34, 1); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); // pf4 not used (because pf3 is in 8bpp mode) if ((state->pri&1)==0) { - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 1); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 1); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2); } else { deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 1); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2); } deco16ic_tilemap_1_draw(state->deco16ic, bitmap, cliprect, 0, 4); screen->machine->device("spritegen")->set_alt_format(true); - screen->machine->device("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x400); + screen->machine->device("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x400); return 0; } @@ -636,22 +637,23 @@ SCREEN_UPDATE( dragngun ) { deco32_state *state = screen->machine->driver_data(); state->deco16ic = screen->machine->device("deco_custom"); + state->deco16ic34 = screen->machine->device("deco_custom34"); bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); //deco16ic_set_pf3_8bpp_mode(state->deco16ic, 1); // despite being 8bpp this doesn't require the same shifting as captaven, why not? - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 0); // it uses pf3 in 8bpp mode instead, like captaven - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 0); // it uses pf3 in 8bpp mode instead, like captaven + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 0); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0); // zooming sprite draw is very slow, and sprites are buffered.. however, one of the levels attempts to use // partial updates for every line, which causes things to be very slow... the sprites appear to support // multiple layers of alpha, so rendering to a buffer for layer isn't easy (maybe there are multiple sprite - // chips at work?) + // chips at work?) // // really, it needs optimizing .. the raster effects also need fixing properly, they're not correct using // partial updates right now but the old buffering of scroll values was a hack and doesn't work properly @@ -679,27 +681,28 @@ SCREEN_UPDATE( fghthist ) { deco32_state *state = screen->machine->driver_data(); state->deco16ic = screen->machine->device("deco_custom"); + state->deco16ic34 = screen->machine->device("deco_custom34"); bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(bitmap,cliprect,screen->machine->pens[0x000]); // Palette index not confirmed - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); - screen->machine->device("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x800, true); + screen->machine->device("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x800, true); /* Draw screen */ - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 1); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 1); if(state->pri&1) { deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2); screen->machine->device("spritegen")->inefficient_copy_sprite_bitmap(screen->machine, bitmap, cliprect, 0x0800, 0x0800, 1024, 0x1ff); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 4); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 4); } else { - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2); screen->machine->device("spritegen")->inefficient_copy_sprite_bitmap(screen->machine, bitmap, cliprect, 0x0800, 0x0800, 1024, 0x1ff); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 4); } @@ -730,7 +733,7 @@ static void mixDualAlphaSprites(bitmap_t *bitmap, const rectangle *cliprect, con bitmap_t* sprite0_mix_bitmap = machine->device("spritegen1")->get_sprite_temp_bitmap(); bitmap_t* sprite1_mix_bitmap = machine->device("spritegen2")->get_sprite_temp_bitmap(); - + /* Mix sprites into main bitmap, based on priority & alpha */ for (y=8; y<248; y++) { UINT8* tilemapPri=BITMAP_ADDR8(machine->priority_bitmap, y, 0); @@ -856,9 +859,10 @@ SCREEN_UPDATE( nslasher ) deco32_state *state = screen->machine->driver_data(); int alphaTilemap=0; state->deco16ic = screen->machine->device("deco_custom"); + state->deco16ic34 = screen->machine->device("deco_custom34"); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); /* This is not a conclusive test for deciding if tilemap needs alpha blending */ if (state->ace_ram[0x17]!=0x0 && state->pri) @@ -875,33 +879,33 @@ SCREEN_UPDATE( nslasher ) screen->machine->device("spritegen1")->set_pix_raw_shift(8); screen->machine->device("spritegen2")->set_pix_raw_shift(8); - screen->machine->device("spritegen1")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x800, true); - screen->machine->device("spritegen2")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_2_buffered, 0x800, true); - + screen->machine->device("spritegen1")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x800, true); + screen->machine->device("spritegen2")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_2_buffered, 0x800, true); + /* Render alpha-blended tilemap to seperate buffer for proper mixing */ bitmap_fill(state->tilemap_alpha_bitmap,cliprect,0); /* Draw playfields & sprites */ if (state->pri&2) { - deco16ic_tilemap_34_combine_draw(state->deco16ic, bitmap, cliprect, 0, 1, 1); + deco16ic_tilemap_12_combine_draw(state->deco16ic34, bitmap, cliprect, 0, 1, 1); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 4); } else { - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 1); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 1); if (state->pri&1) { deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2); if (alphaTilemap) - deco16ic_tilemap_3_draw(state->deco16ic, state->tilemap_alpha_bitmap, cliprect, 0, 4); + deco16ic_tilemap_1_draw(state->deco16ic34, state->tilemap_alpha_bitmap, cliprect, 0, 4); else - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 4); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 4); } else { - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2); if (alphaTilemap) deco16ic_tilemap_2_draw(state->deco16ic, state->tilemap_alpha_bitmap, cliprect, 0, 4); else diff --git a/src/mame/video/dietgo.c b/src/mame/video/dietgo.c index 4f730453798..3ec5afd59ab 100644 --- a/src/mame/video/dietgo.c +++ b/src/mame/video/dietgo.c @@ -6,10 +6,10 @@ SCREEN_UPDATE( dietgo ) { dietgo_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); bitmap_fill(bitmap, cliprect, 256); /* not verified */ diff --git a/src/mame/video/funkyjet.c b/src/mame/video/funkyjet.c index b5752e59135..12e64d7480d 100644 --- a/src/mame/video/funkyjet.c +++ b/src/mame/video/funkyjet.c @@ -14,10 +14,10 @@ SCREEN_UPDATE( funkyjet ) { funkyjet_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); bitmap_fill(bitmap, cliprect, 768); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); diff --git a/src/mame/video/pktgaldx.c b/src/mame/video/pktgaldx.c index ed4d0d502dd..667919b9a94 100644 --- a/src/mame/video/pktgaldx.c +++ b/src/mame/video/pktgaldx.c @@ -8,10 +8,10 @@ SCREEN_UPDATE( pktgaldx ) { pktgaldx_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); bitmap_fill(bitmap, cliprect, 0); /* not Confirmed */ bitmap_fill(screen->machine->priority_bitmap, NULL, 0); diff --git a/src/mame/video/rohga.c b/src/mame/video/rohga.c index 8612adc3ac1..ff0ae10bb8d 100644 --- a/src/mame/video/rohga.c +++ b/src/mame/video/rohga.c @@ -422,13 +422,13 @@ sprite 2: static void update_rohga( device_t *screen, bitmap_t *bitmap, const rectangle *cliprect, int is_schmeisr ) { rohga_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); UINT16 priority = deco16ic_priority_r(state->deco16ic, 0, 0xffff); /* Update playfields */ flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); /* Draw playfields */ bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); @@ -440,25 +440,25 @@ static void update_rohga( device_t *screen, bitmap_t *bitmap, const rectangle *c if (priority & 4) { // Draw as 1 8BPP layer - deco16ic_tilemap_34_combine_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 3); + deco16ic_tilemap_12_combine_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 3); } else { // Draw as 2 4BPP layers - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2); } deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 4); break; case 1: - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 4); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 4); break; case 2: deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 2); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 4); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 2); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 4); break; } @@ -483,26 +483,26 @@ SCREEN_UPDATE( schmeisr ) SCREEN_UPDATE( wizdfire ) { rohga_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); UINT16 priority = deco16ic_priority_r(state->deco16ic, 0, 0xffff); /* Update playfields */ flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, 0, 0); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, 0, 0); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); /* Draw playfields - Palette of 2nd playfield chip visible if playfields turned off */ bitmap_fill(bitmap, cliprect, screen->machine->pens[512]); - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); wizdfire_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 4, 3); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0); wizdfire_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 3, 3); if ((priority & 0x1f) == 0x1f) /* Wizdfire has bit 0x40 always set, Dark Seal 2 doesn't?! */ - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_ALPHA(0x80), 0); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_ALPHA(0x80), 0); else - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 0); /* See notes in wizdfire_draw_sprites about this */ wizdfire_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 0, 3); @@ -516,12 +516,12 @@ SCREEN_UPDATE( wizdfire ) SCREEN_UPDATE( nitrobal ) { rohga_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); /* Update playfields */ flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); - deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll); /* Draw playfields - Palette of 2nd playfield chip visible if playfields turned off */ bitmap_fill(bitmap, cliprect, screen->machine->pens[512]); @@ -529,7 +529,7 @@ SCREEN_UPDATE( nitrobal ) deco16ic_clear_sprite_priority_bitmap(state->deco16ic); /* pf3 and pf4 are combined into a single 8bpp bitmap */ - deco16ic_tilemap_34_combine_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + deco16ic_tilemap_12_combine_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 16); nitrobal_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 3); diff --git a/src/mame/video/simpl156.c b/src/mame/video/simpl156.c index 29553539615..24a2f6f62a7 100644 --- a/src/mame/video/simpl156.c +++ b/src/mame/video/simpl156.c @@ -31,7 +31,7 @@ SCREEN_UPDATE( simpl156 ) bitmap_fill(screen->machine->priority_bitmap, NULL, 0); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); bitmap_fill(bitmap, cliprect, 256); diff --git a/src/mame/video/supbtime.c b/src/mame/video/supbtime.c index b8944ed5a98..a24df4f3a7b 100644 --- a/src/mame/video/supbtime.c +++ b/src/mame/video/supbtime.c @@ -24,10 +24,10 @@ End sequence uses rowscroll '98 c0' on pf1 (jmp to 1d61a on supbtimj) SCREEN_UPDATE(supbtime) { supbtime_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); bitmap_fill(bitmap, cliprect, 768); diff --git a/src/mame/video/tumblep.c b/src/mame/video/tumblep.c index a2cf19dbc34..438851af161 100644 --- a/src/mame/video/tumblep.c +++ b/src/mame/video/tumblep.c @@ -22,10 +22,10 @@ to switch between 8*8 tiles and 16*16 tiles. SCREEN_UPDATE( tumblep ) { tumblep_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); flip_screen_set(screen->machine, BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); + deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll); bitmap_fill(bitmap, cliprect, 256); /* not verified */ diff --git a/src/mame/video/vaportra.c b/src/mame/video/vaportra.c index 32339211b6a..3d5cc25c2dc 100644 --- a/src/mame/video/vaportra.c +++ b/src/mame/video/vaportra.c @@ -110,7 +110,7 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect while (multi >= 0) { - drawgfx_transpen(bitmap,cliprect,machine->gfx[3], + drawgfx_transpen(bitmap,cliprect,machine->gfx[4], sprite - multi * inc, colour, fx,fy, @@ -125,41 +125,41 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect SCREEN_UPDATE( vaportra ) { vaportra_state *state = screen->machine->driver_data(); - UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff); + UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff); int pri = state->priority[0] & 0x03; flip_screen_set(screen->machine, !BIT(flip, 7)); - deco16ic_pf12_update(state->deco16ic, 0, 0); - deco16ic_pf34_update(state->deco16ic, 0, 0); + deco16ic_pf_update(state->deco16ic, 0, 0); + deco16ic_pf_update(state->deco16ic34, 0, 0); /* Draw playfields */ if (pri == 0) { - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 0); draw_sprites(screen->machine, bitmap, cliprect, 0); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0); } else if (pri == 1) { - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 0); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 0); draw_sprites(screen->machine, bitmap, cliprect, 0); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0); } else if (pri == 2) { - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0); draw_sprites(screen->machine, bitmap, cliprect, 0); - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 0); } else { - deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0); draw_sprites(screen->machine, bitmap, cliprect, 0); - deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 0); + deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 0); } draw_sprites(screen->machine, bitmap, cliprect, 1);