summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cam900 <dbtlrchl@naver.com>2020-04-04 05:10:41 +0900
committer GitHub <noreply@github.com>2020-04-03 16:10:41 -0400
commitcd72f1d5b600f03d5ba72336c426e6648059c9de (patch)
tree92879dbd4c7515f2163f711db741114a98599039
parent1f764371b4e8fd8ce6821a920ee9e8e2df9bedbe (diff)
deco16ic.cpp Drawing behavior updates (#6514)
* deco16ic.cpp : Fix transparency/transmask handling in custom draw case Use callback for tile info and 8bpp mixing, Fix sshangha regression, Reduce unnecessary values cninja.cpp : Correct 8bpp tilemap drawing behavior in robocop2 (Same data in both tilemap RAM for tilegen[1], only tile bank is different in 8bpp tile) darkseal.cpp, sshangha.cpp : Cleanup gfxdecode layout, Correct palette entries sshangha.cpp : Both chip and PCB hasn't any stereo sound output, Correct sound output routes cninja.cpp : Correct sound routes for PCBs without stereo sound output mirage.cpp : Use pri_callback for sprite priority * cninja.cpp : Reduce unused gfx layout
-rw-r--r--src/mame/drivers/backfire.cpp4
-rw-r--r--src/mame/drivers/boogwing.cpp4
-rw-r--r--src/mame/drivers/cbuster.cpp4
-rw-r--r--src/mame/drivers/cninja.cpp91
-rw-r--r--src/mame/drivers/darkseal.cpp49
-rw-r--r--src/mame/drivers/dassault.cpp4
-rw-r--r--src/mame/drivers/dblewing.cpp2
-rw-r--r--src/mame/drivers/deco156.cpp4
-rw-r--r--src/mame/drivers/deco32.cpp48
-rw-r--r--src/mame/drivers/dietgo.cpp2
-rw-r--r--src/mame/drivers/dreambal.cpp2
-rw-r--r--src/mame/drivers/funkyjet.cpp2
-rw-r--r--src/mame/drivers/mirage.cpp26
-rw-r--r--src/mame/drivers/pktgaldx.cpp2
-rw-r--r--src/mame/drivers/rohga.cpp16
-rw-r--r--src/mame/drivers/simpl156.cpp2
-rw-r--r--src/mame/drivers/sshangha.cpp90
-rw-r--r--src/mame/drivers/supbtime.cpp2
-rw-r--r--src/mame/drivers/vaportra.cpp4
-rw-r--r--src/mame/includes/cninja.h1
-rw-r--r--src/mame/includes/deco32.h2
-rw-r--r--src/mame/includes/sshangha.h4
-rw-r--r--src/mame/video/cninja.cpp25
-rw-r--r--src/mame/video/deco16ic.cpp116
-rw-r--r--src/mame/video/deco16ic.h22
-rw-r--r--src/mame/video/deco32.cpp6
-rw-r--r--src/mame/video/sshangha.cpp15
27 files changed, 189 insertions, 360 deletions
diff --git a/src/mame/drivers/backfire.cpp b/src/mame/drivers/backfire.cpp
index b222e6fd062..14dc8e3ca4f 100644
--- a/src/mame/drivers/backfire.cpp
+++ b/src/mame/drivers/backfire.cpp
@@ -401,8 +401,6 @@ void backfire_state::backfire(machine_config &config)
m_deco_tilegen[0]->set_screen(m_lscreen);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x40);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -417,8 +415,6 @@ void backfire_state::backfire(machine_config &config)
m_deco_tilegen[1]->set_screen(m_lscreen);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x10);
m_deco_tilegen[1]->set_pf2_col_bank(0x50);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
diff --git a/src/mame/drivers/boogwing.cpp b/src/mame/drivers/boogwing.cpp
index bfd56abcc60..5eea1b374c1 100644
--- a/src/mame/drivers/boogwing.cpp
+++ b/src/mame/drivers/boogwing.cpp
@@ -350,8 +350,6 @@ void boogwing_state::boogwing(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x1f); // pf2 has 5bpp graphics
m_deco_tilegen[0]->set_pf1_col_bank(0);
m_deco_tilegen[0]->set_pf2_col_bank(0); // pf2 is non default
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -365,8 +363,6 @@ void boogwing_state::boogwing(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0);
m_deco_tilegen[1]->set_pf2_col_bank(16);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
diff --git a/src/mame/drivers/cbuster.cpp b/src/mame/drivers/cbuster.cpp
index 54b1c83bbf6..0e03b336784 100644
--- a/src/mame/drivers/cbuster.cpp
+++ b/src/mame/drivers/cbuster.cpp
@@ -286,8 +286,6 @@ void cbuster_state::twocrude(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x20);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -301,8 +299,6 @@ void cbuster_state::twocrude(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x30);
m_deco_tilegen[1]->set_pf2_col_bank(0x40);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
diff --git a/src/mame/drivers/cninja.cpp b/src/mame/drivers/cninja.cpp
index 7df1d9f149d..56a184d00ca 100644
--- a/src/mame/drivers/cninja.cpp
+++ b/src/mame/drivers/cninja.cpp
@@ -665,17 +665,6 @@ static const gfx_layout tilelayout =
64*8
};
-static const gfx_layout tilelayout_8bpp =
-{
- 16,16,
- 4096,
- 8,
- { 0x100000*8+8, 0x100000*8, 0x40000*8+8, 0x40000*8, 0xc0000*8+8, 0xc0000*8, 8, 0 },
- { STEP8(16*8*2,1), STEP8(0,1) },
- { STEP16(0,8*2) },
- 64*8
-};
-
static GFXDECODE_START( gfx_cninja )
GFXDECODE_ENTRY( "chars", 0, charlayout, 0, 32 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "tiles1", 0, tilelayout, 0, 32 ) /* Tiles 16x16 */
@@ -683,14 +672,6 @@ static GFXDECODE_START( gfx_cninja )
GFXDECODE_ENTRY( "sprites1", 0, tilelayout, 768, 32 ) /* Sprites 16x16 */
GFXDECODE_END
-static GFXDECODE_START( gfx_robocop2 )
- GFXDECODE_ENTRY( "chars", 0, charlayout, 0, 32 ) /* Characters 8x8 */
- GFXDECODE_ENTRY( "tiles1", 0, tilelayout, 0, 32 ) /* Tiles 16x16 */
- GFXDECODE_ENTRY( "tiles2", 0, tilelayout, 512, 64 ) /* Tiles 16x16 */
- GFXDECODE_ENTRY( "sprites1", 0, tilelayout, 768, 32 ) /* Sprites 16x16 */
- GFXDECODE_ENTRY( "tiles2", 0, tilelayout_8bpp, 512, 1 ) /* Tiles 16x16 */
-GFXDECODE_END
-
static GFXDECODE_START( gfx_mutantf )
GFXDECODE_ENTRY( "chars", 0, charlayout, 0, 64 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "tiles1", 0, tilelayout, 0, 64 ) /* Tiles 16x16 */
@@ -736,6 +717,11 @@ DECO16IC_BANK_CB_MEMBER(cninja_state::mutantf_2_bank_callback)
return ((bank >> 5) & 0x1) << 14;
}
+// palette bits are not effected
+u16 cninja_state::robocop2_mix_callback(u16 p, u16 p2)
+{
+ return (p & 0x70f) | ((p2 & 0xf) << 4);
+}
DECOSPR_PRIORITY_CB_MEMBER(cninja_state::pri_callback)
{
@@ -793,8 +779,6 @@ void cninja_state::cninja(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x10);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -806,8 +790,6 @@ void cninja_state::cninja(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x00);
m_deco_tilegen[1]->set_pf2_col_bank(0x30);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
@@ -880,8 +862,6 @@ void cninja_state::stoneage(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x10);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -893,8 +873,6 @@ void cninja_state::stoneage(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x00);
m_deco_tilegen[1]->set_pf2_col_bank(0x30);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
@@ -975,8 +953,6 @@ void cninja_state::cninjabl(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x10);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -988,8 +964,6 @@ void cninja_state::cninjabl(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x00);
m_deco_tilegen[1]->set_pf2_col_bank(0x30);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
@@ -1045,8 +1019,6 @@ void cninja_state::edrandy(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x10);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -1058,8 +1030,6 @@ void cninja_state::edrandy(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x00);
m_deco_tilegen[1]->set_pf2_col_bank(0x30);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
@@ -1106,8 +1076,7 @@ void cninja_state::robocop2(machine_config &config)
h6280_device &audiocpu(H6280(config, m_audiocpu, XTAL(32'220'000) / 8));
audiocpu.set_addrmap(AS_PROGRAM, &cninja_state::sound_map);
- audiocpu.add_route(ALL_OUTPUTS, "lspeaker", 0); // internal sound unused
- audiocpu.add_route(ALL_OUTPUTS, "rspeaker", 0);
+ audiocpu.add_route(ALL_OUTPUTS, "mono", 0); // internal sound unused
deco_irq_device &irq(DECO_IRQ(config, "irq", 0));
irq.set_screen_tag(m_screen);
@@ -1124,7 +1093,7 @@ void cninja_state::robocop2(machine_config &config)
MCFG_MACHINE_START_OVERRIDE(cninja_state,robocop2)
MCFG_MACHINE_RESET_OVERRIDE(cninja_state,robocop2)
- GFXDECODE(config, m_gfxdecode, m_palette, gfx_robocop2);
+ GFXDECODE(config, m_gfxdecode, m_palette, gfx_cninja);
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 2048);
BUFFERED_SPRITERAM16(config, m_spriteram[0]);
@@ -1132,8 +1101,6 @@ void cninja_state::robocop2(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x10);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -1146,14 +1113,13 @@ void cninja_state::robocop2(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x00);
m_deco_tilegen[1]->set_pf2_col_bank(0x30);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
m_deco_tilegen[1]->set_pf2_col_mask(0x0f);
m_deco_tilegen[1]->set_bank1_callback(FUNC(cninja_state::robocop2_bank_callback));
m_deco_tilegen[1]->set_bank2_callback(FUNC(cninja_state::robocop2_bank_callback));
+ m_deco_tilegen[1]->set_mix_callback(FUNC(cninja_state::robocop2_mix_callback));
m_deco_tilegen[1]->set_pf12_8x8_bank(0);
m_deco_tilegen[1]->set_pf12_16x16_bank(2);
m_deco_tilegen[1]->set_gfxdecode_tag(m_gfxdecode);
@@ -1171,26 +1137,19 @@ void cninja_state::robocop2(machine_config &config)
m_ioprot->set_use_magic_read_address_xor(true);
/* sound hardware */
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
+ SPEAKER(config, "mono").front_center();
- ym2203_device &ym1(YM2203(config, "ym1", XTAL(32'220'000) / 8));
- ym1.add_route(ALL_OUTPUTS, "lspeaker", 0.60);
- ym1.add_route(ALL_OUTPUTS, "rspeaker", 0.60);
+ YM2203(config, "ym1", XTAL(32'220'000) / 8).add_route(ALL_OUTPUTS, "mono", 0.60);
ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000) / 9));
ym2.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */
ym2.port_write_handler().set(FUNC(cninja_state::sound_bankswitch_w));
- ym2.add_route(0, "lspeaker", 0.45);
- ym2.add_route(1, "rspeaker", 0.45);
+ ym2.add_route(0, "mono", 0.45);
+ ym2.add_route(1, "mono", 0.45);
- okim6295_device &oki1(OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH));
- oki1.add_route(ALL_OUTPUTS, "lspeaker", 0.75);
- oki1.add_route(ALL_OUTPUTS, "rspeaker", 0.75);
+ OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75);
- OKIM6295(config, m_oki2, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH);
- m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.60);
- m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.60);
+ OKIM6295(config, m_oki2, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60);
}
@@ -1203,8 +1162,7 @@ void cninja_state::mutantf(machine_config &config)
h6280_device &audiocpu(H6280(config, m_audiocpu, XTAL(32'220'000) / 8));
audiocpu.set_addrmap(AS_PROGRAM, &cninja_state::sound_map_mutantf);
- audiocpu.add_route(ALL_OUTPUTS, "lspeaker", 0); // internal sound unused
- audiocpu.add_route(ALL_OUTPUTS, "rspeaker", 0);
+ audiocpu.add_route(ALL_OUTPUTS, "mono", 0); // internal sound unused
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@@ -1224,8 +1182,6 @@ void cninja_state::mutantf(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x30);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -1239,8 +1195,6 @@ void cninja_state::mutantf(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x20);
m_deco_tilegen[1]->set_pf2_col_bank(0x40);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
@@ -1266,22 +1220,17 @@ void cninja_state::mutantf(machine_config &config)
m_ioprot->soundlatch_irq_cb().set_inputline(m_audiocpu, 0);
/* sound hardware */
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
+ SPEAKER(config, "mono").front_center();
ym2151_device &ymsnd(YM2151(config, "ymsnd", XTAL(32'220'000) / 9));
ymsnd.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */
ymsnd.port_write_handler().set(FUNC(cninja_state::sound_bankswitch_w));
- ymsnd.add_route(0, "lspeaker", 0.45);
- ymsnd.add_route(1, "rspeaker", 0.45);
+ ymsnd.add_route(0, "mono", 0.45);
+ ymsnd.add_route(1, "mono", 0.45);
- okim6295_device &oki1(OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH));
- oki1.add_route(ALL_OUTPUTS, "lspeaker", 0.75);
- oki1.add_route(ALL_OUTPUTS, "rspeaker", 0.75);
+ OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75);
- OKIM6295(config, m_oki2, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH);
- m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.60);
- m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.60);
+ OKIM6295(config, m_oki2, XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60);
}
/**********************************************************************************/
diff --git a/src/mame/drivers/darkseal.cpp b/src/mame/drivers/darkseal.cpp
index f96d2f78420..cf4bbb84db2 100644
--- a/src/mame/drivers/darkseal.cpp
+++ b/src/mame/drivers/darkseal.cpp
@@ -162,31 +162,20 @@ INPUT_PORTS_END
static const gfx_layout charlayout =
{
8,8, /* 8*8 chars */
- 4096,
+ RGN_FRAC(1,2),
4, /* 4 bits per pixel */
- { 0x00000*8, 0x10000*8, 0x8000*8, 0x18000*8 },
+ { 8, 0, RGN_FRAC(1,2)+8, RGN_FRAC(1,2) },
{ STEP8(0,1) },
- { STEP8(0,8) },
- 8*8 /* every char takes 8 consecutive bytes */
+ { STEP8(0,8*2) },
+ 8*8*2 /* every char takes 8 consecutive bytes */
};
static const gfx_layout seallayout =
{
16,16,
- 4096,
+ RGN_FRAC(1,2),
4,
- { 8, 0, 0x40000*8+8, 0x40000*8 },
- { STEP8(16*8*2,1), STEP8(0,1) },
- { STEP16(0,8*2) },
- 64*8
-};
-
-static const gfx_layout seallayout2 =
-{
- 16,16,
- 4096*2,
- 4,
- { 8, 0, 0x80000*8+8, 0x80000*8 },
+ { 8, 0, RGN_FRAC(1,2)+8, RGN_FRAC(1,2) },
{ STEP8(16*8*2,1), STEP8(0,1) },
{ STEP16(0,8*2) },
64*8
@@ -196,7 +185,7 @@ static GFXDECODE_START( gfx_darkseal )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "gfx2", 0, seallayout, 768, 16 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx3", 0, seallayout, 1024, 16 ) /* Tiles 16x16 */
- GFXDECODE_ENTRY( "gfx4", 0, seallayout2, 256, 32 ) /* Sprites 16x16 */
+ GFXDECODE_ENTRY( "gfx4", 0, seallayout, 256, 32 ) /* Sprites 16x16 */
GFXDECODE_END
/******************************************************************************/
@@ -230,8 +219,6 @@ void darkseal_state::darkseal(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x64);
m_deco_tilegen[0]->set_pf2_size(DECO_64x64); // both these tilemaps need to be twice the y size of usual!
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x00);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -243,8 +230,6 @@ void darkseal_state::darkseal(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x00);
m_deco_tilegen[1]->set_pf2_col_bank(0x00);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
@@ -288,8 +273,8 @@ ROM_START( darkseal )
ROM_LOAD( "fz_06-1.j15", 0x00000, 0x10000, CRC(c4828a6d) SHA1(fbfd0c85730bbe18401879cd68c19aaec9d482d8) )
ROM_REGION( 0x020000, "gfx1", 0 )
- ROM_LOAD( "fz_02.j1", 0x000000, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) ) /* chars */
- ROM_LOAD( "fz_03.j2", 0x010000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
+ ROM_LOAD16_BYTE( "fz_02.j1", 0x000001, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) ) /* chars */
+ ROM_LOAD16_BYTE( "fz_03.j2", 0x000000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
ROM_REGION( 0x080000, "gfx2", 0 )
ROM_LOAD( "mac-03.h3", 0x000000, 0x80000, CRC(9996f3dc) SHA1(fffd9ecfe142a0c7c3c9c521778ff9c55ea8b225) ) /* tiles 1 */
@@ -319,8 +304,8 @@ ROM_START( darkseal1 )
ROM_LOAD( "fz_06-1.j15", 0x00000, 0x10000, CRC(c4828a6d) SHA1(fbfd0c85730bbe18401879cd68c19aaec9d482d8) )
ROM_REGION( 0x020000, "gfx1", 0 )
- ROM_LOAD( "fz_02-1.j1", 0x000000, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) ) /* chars */
- ROM_LOAD( "fz_03-1.j2", 0x010000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
+ ROM_LOAD16_BYTE( "fz_02-1.j1", 0x000001, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) ) /* chars */
+ ROM_LOAD16_BYTE( "fz_03-1.j2", 0x000000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
ROM_REGION( 0x080000, "gfx2", 0 )
ROM_LOAD( "mac-03.h3", 0x000000, 0x80000, CRC(9996f3dc) SHA1(fffd9ecfe142a0c7c3c9c521778ff9c55ea8b225) ) /* tiles 1 */
@@ -350,8 +335,8 @@ ROM_START( darksealj )
ROM_LOAD( "fz_06-1.j15", 0x00000, 0x10000, CRC(c4828a6d) SHA1(fbfd0c85730bbe18401879cd68c19aaec9d482d8) )
ROM_REGION( 0x020000, "gfx1", 0 )
- ROM_LOAD( "fz_02.j1", 0x000000, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) ) /* chars */
- ROM_LOAD( "fz_03.j2", 0x010000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
+ ROM_LOAD16_BYTE( "fz_02.j1", 0x000001, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) ) /* chars */
+ ROM_LOAD16_BYTE( "fz_03.j2", 0x000000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
ROM_REGION( 0x080000, "gfx2", 0 )
ROM_LOAD( "mac-03.h3", 0x000000, 0x80000, CRC(9996f3dc) SHA1(fffd9ecfe142a0c7c3c9c521778ff9c55ea8b225) ) /* tiles 1 */
@@ -381,8 +366,8 @@ ROM_START( gatedoom )
ROM_LOAD( "fz_06-1.j15", 0x00000, 0x10000, CRC(c4828a6d) SHA1(fbfd0c85730bbe18401879cd68c19aaec9d482d8) )
ROM_REGION( 0x020000, "gfx1", 0 )
- ROM_LOAD( "fz_02.j1", 0x000000, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) ) /* chars */
- ROM_LOAD( "fz_03.j2", 0x010000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
+ ROM_LOAD16_BYTE( "fz_02.j1", 0x000001, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) ) /* chars */
+ ROM_LOAD16_BYTE( "fz_03.j2", 0x000000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
ROM_REGION( 0x080000, "gfx2", 0 )
ROM_LOAD( "mac-03.h3", 0x000000, 0x80000, CRC(9996f3dc) SHA1(fffd9ecfe142a0c7c3c9c521778ff9c55ea8b225) ) /* tiles 1 */
@@ -412,8 +397,8 @@ ROM_START( gatedoom1 )
ROM_LOAD( "fz_06-1.j15", 0x00000, 0x10000, CRC(c4828a6d) SHA1(fbfd0c85730bbe18401879cd68c19aaec9d482d8) )
ROM_REGION( 0x020000, "gfx1", 0 )
- ROM_LOAD( "fz_02.j1", 0x000000, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) ) /* chars */
- ROM_LOAD( "fz_03.j2", 0x010000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
+ ROM_LOAD16_BYTE( "fz_02.j1", 0x000001, 0x10000, CRC(3c9c3012) SHA1(086c2123725d4aa32838c0b6c82317d9c789c465) ) /* chars */
+ ROM_LOAD16_BYTE( "fz_03.j2", 0x000000, 0x10000, CRC(264b90ed) SHA1(0bb1557673107c2d732a9374d5601a6eaf229473) )
ROM_REGION( 0x080000, "gfx2", 0 )
ROM_LOAD( "mac-03.h3", 0x000000, 0x80000, CRC(9996f3dc) SHA1(fffd9ecfe142a0c7c3c9c521778ff9c55ea8b225) ) /* tiles 1 */
diff --git a/src/mame/drivers/dassault.cpp b/src/mame/drivers/dassault.cpp
index 0097d2fe67d..5b53a00c76b 100644
--- a/src/mame/drivers/dassault.cpp
+++ b/src/mame/drivers/dassault.cpp
@@ -559,8 +559,6 @@ void dassault_state::dassault(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0);
m_deco_tilegen[0]->set_pf2_col_bank(16);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -574,8 +572,6 @@ void dassault_state::dassault(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0);
m_deco_tilegen[1]->set_pf2_col_bank(16);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
diff --git a/src/mame/drivers/dblewing.cpp b/src/mame/drivers/dblewing.cpp
index a70ff83430e..e23eeac735a 100644
--- a/src/mame/drivers/dblewing.cpp
+++ b/src/mame/drivers/dblewing.cpp
@@ -370,8 +370,6 @@ void dblewing_state::dblewing(machine_config &config)
DECO16IC(config, m_deco_tilegen, 0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
- m_deco_tilegen->set_pf1_trans_mask(0x0f);
- m_deco_tilegen->set_pf2_trans_mask(0x0f);
m_deco_tilegen->set_pf1_col_bank(0x00);
m_deco_tilegen->set_pf2_col_bank(0x10);
m_deco_tilegen->set_pf1_col_mask(0x0f);
diff --git a/src/mame/drivers/deco156.cpp b/src/mame/drivers/deco156.cpp
index 19660061e87..0711456fc65 100644
--- a/src/mame/drivers/deco156.cpp
+++ b/src/mame/drivers/deco156.cpp
@@ -336,8 +336,6 @@ void deco156_state::hvysmsh(machine_config &config)
DECO16IC(config, m_deco_tilegen, 0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
- m_deco_tilegen->set_pf1_trans_mask(0x0f);
- m_deco_tilegen->set_pf2_trans_mask(0x0f);
m_deco_tilegen->set_pf1_col_bank(0x00);
m_deco_tilegen->set_pf2_col_bank(0x10);
m_deco_tilegen->set_pf1_col_mask(0x0f);
@@ -388,8 +386,6 @@ void deco156_state::wcvol95(machine_config &config)
DECO16IC(config, m_deco_tilegen, 0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
- m_deco_tilegen->set_pf1_trans_mask(0x0f);
- m_deco_tilegen->set_pf2_trans_mask(0x0f);
m_deco_tilegen->set_pf1_col_bank(0x00);
m_deco_tilegen->set_pf2_col_bank(0x10);
m_deco_tilegen->set_pf1_col_mask(0x0f);
diff --git a/src/mame/drivers/deco32.cpp b/src/mame/drivers/deco32.cpp
index 41fc3007fcc..54105598fce 100644
--- a/src/mame/drivers/deco32.cpp
+++ b/src/mame/drivers/deco32.cpp
@@ -883,6 +883,18 @@ DECOSPR_PRIORITY_CB_MEMBER( fghthist_state::fghthist_pri_callback )
return mask;
}
+void captaven_state::tile_callback(u32 &tile, u32 &colour, int layer, bool is_8x8)
+{
+ // 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.
+ if (layer == 0)
+ {
+ tile |= ((colour & 0x3) << 12);
+ colour >>= 2;
+ }
+}
+
DECO16IC_BANK_CB_MEMBER( captaven_state::bank_callback )
{
return (bank & 0x20) << 9;
@@ -910,6 +922,11 @@ DECO16IC_BANK_CB_MEMBER( nslasher_state::bank_callback )
return (bank & ~0xf) << 8;
}
+u16 nslasher_state::mix_callback(u16 p, u16 p2)
+{
+ return ((p & 0x70f) + (((p & 0x30) | (p2 & 0x0f)) << 4)) & 0x7ff;
+}
+
//**************************************************************************
// INPUTS
@@ -1867,8 +1884,6 @@ void captaven_state::captaven(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x20);
m_deco_tilegen[0]->set_pf2_col_bank(0x30);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -1880,12 +1895,11 @@ void captaven_state::captaven(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0); // pf3 is in 8bpp mode, pf4 is not used
m_deco_tilegen[1]->set_pf1_size(DECO_32x32);
m_deco_tilegen[1]->set_pf2_size(DECO_32x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0xff);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x00);
- m_deco_tilegen[1]->set_pf1_col_bank(0x10);
+ m_deco_tilegen[1]->set_pf1_col_bank(0x04);
m_deco_tilegen[1]->set_pf2_col_bank(0x00);
- m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
+ m_deco_tilegen[1]->set_pf1_col_mask(0x03);
m_deco_tilegen[1]->set_pf2_col_mask(0x00);
+ m_deco_tilegen[1]->set_tile_callback(FUNC(captaven_state::tile_callback));
m_deco_tilegen[1]->set_bank1_callback(FUNC(captaven_state::bank_callback));
// no bank2 callback
m_deco_tilegen[1]->set_pf12_8x8_bank(0);
@@ -1946,8 +1960,6 @@ void fghthist_state::fghthist(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x10);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -1961,8 +1973,6 @@ void fghthist_state::fghthist(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x20);
m_deco_tilegen[1]->set_pf2_col_bank(0x30);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
@@ -2070,8 +2080,6 @@ void dragngun_state::dragngun(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x20);
m_deco_tilegen[0]->set_pf2_col_bank(0x30);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -2085,8 +2093,6 @@ void dragngun_state::dragngun(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0xff);
- m_deco_tilegen[1]->set_pf2_trans_mask(0xff);
m_deco_tilegen[1]->set_pf1_col_bank(0x04);
m_deco_tilegen[1]->set_pf2_col_bank(0x04);
m_deco_tilegen[1]->set_pf1_col_mask(0x03);
@@ -2196,8 +2202,6 @@ void dragngun_state::lockload(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x20);
m_deco_tilegen[0]->set_pf2_col_bank(0x30);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -2211,8 +2215,6 @@ void dragngun_state::lockload(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_32x32);
m_deco_tilegen[1]->set_pf2_size(DECO_32x32); // lockload definitely wants pf34 half width..
- m_deco_tilegen[1]->set_pf1_trans_mask(0xff);
- m_deco_tilegen[1]->set_pf2_trans_mask(0xff);
m_deco_tilegen[1]->set_pf1_col_bank(0x04);
m_deco_tilegen[1]->set_pf2_col_bank(0x04);
m_deco_tilegen[1]->set_pf1_col_mask(0x03);
@@ -2274,8 +2276,6 @@ void nslasher_state::tattass(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x10);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -2289,14 +2289,13 @@ void nslasher_state::tattass(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x20);
m_deco_tilegen[1]->set_pf2_col_bank(0x30);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
m_deco_tilegen[1]->set_pf2_col_mask(0x0f);
m_deco_tilegen[1]->set_bank1_callback(FUNC(nslasher_state::bank_callback));
m_deco_tilegen[1]->set_bank2_callback(FUNC(nslasher_state::bank_callback));
+ m_deco_tilegen[1]->set_mix_callback(FUNC(nslasher_state::mix_callback));
m_deco_tilegen[1]->set_pf12_8x8_bank(0);
m_deco_tilegen[1]->set_pf12_16x16_bank(2);
m_deco_tilegen[1]->set_gfxdecode_tag(m_gfxdecode);
@@ -2348,8 +2347,6 @@ void nslasher_state::nslasher(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x10);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -2363,14 +2360,13 @@ void nslasher_state::nslasher(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x20);
m_deco_tilegen[1]->set_pf2_col_bank(0x30);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
m_deco_tilegen[1]->set_pf2_col_mask(0x0f);
m_deco_tilegen[1]->set_bank1_callback(FUNC(nslasher_state::bank_callback));
m_deco_tilegen[1]->set_bank2_callback(FUNC(nslasher_state::bank_callback));
+ m_deco_tilegen[1]->set_mix_callback(FUNC(nslasher_state::mix_callback));
m_deco_tilegen[1]->set_pf12_8x8_bank(0);
m_deco_tilegen[1]->set_pf12_16x16_bank(2);
m_deco_tilegen[1]->set_gfxdecode_tag(m_gfxdecode);
diff --git a/src/mame/drivers/dietgo.cpp b/src/mame/drivers/dietgo.cpp
index 44394aa9b4e..a325f105097 100644
--- a/src/mame/drivers/dietgo.cpp
+++ b/src/mame/drivers/dietgo.cpp
@@ -222,8 +222,6 @@ void dietgo_state::dietgo(machine_config &config)
DECO16IC(config, m_deco_tilegen, 0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
- m_deco_tilegen->set_pf1_trans_mask(0x0f);
- m_deco_tilegen->set_pf2_trans_mask(0x0f);
m_deco_tilegen->set_pf1_col_bank(0x00);
m_deco_tilegen->set_pf2_col_bank(0x10);
m_deco_tilegen->set_pf1_col_mask(0x0f);
diff --git a/src/mame/drivers/dreambal.cpp b/src/mame/drivers/dreambal.cpp
index 806229b4e79..79f911bd7f0 100644
--- a/src/mame/drivers/dreambal.cpp
+++ b/src/mame/drivers/dreambal.cpp
@@ -339,8 +339,6 @@ void dreambal_state::dreambal(machine_config &config)
DECO16IC(config, m_deco_tilegen, 0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
- m_deco_tilegen->set_pf1_trans_mask(0x0f);
- m_deco_tilegen->set_pf2_trans_mask(0x0f);
m_deco_tilegen->set_pf1_col_bank(0x00);
m_deco_tilegen->set_pf2_col_bank(0x10);
m_deco_tilegen->set_pf1_col_mask(0x0f);
diff --git a/src/mame/drivers/funkyjet.cpp b/src/mame/drivers/funkyjet.cpp
index 95ce63c39fb..10eca71983d 100644
--- a/src/mame/drivers/funkyjet.cpp
+++ b/src/mame/drivers/funkyjet.cpp
@@ -336,8 +336,6 @@ void funkyjet_state::funkyjet(machine_config &config)
DECO16IC(config, m_deco_tilegen, 0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
- m_deco_tilegen->set_pf1_trans_mask(0x0f);
- m_deco_tilegen->set_pf2_trans_mask(0x0f);
m_deco_tilegen->set_pf1_col_bank(0x00);
m_deco_tilegen->set_pf2_col_bank(0x10);
m_deco_tilegen->set_pf1_col_mask(0x0f);
diff --git a/src/mame/drivers/mirage.cpp b/src/mame/drivers/mirage.cpp
index 113582978d7..a7cf6a2e9c4 100644
--- a/src/mame/drivers/mirage.cpp
+++ b/src/mame/drivers/mirage.cpp
@@ -91,6 +91,8 @@ private:
DECLARE_READ16_MEMBER(mjmux_r);
DECLARE_WRITE16_MEMBER(okim1_rombank_w);
DECLARE_WRITE16_MEMBER(okim0_rombank_w);
+ DECOSPR_PRIORITY_CB_MEMBER(pri_callback);
+
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
@@ -101,7 +103,6 @@ private:
void miragemj_state::video_start()
{
- m_sprgen->alloc_sprite_bitmap();
}
uint32_t miragemj_state::screen_update_mirage(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
@@ -111,17 +112,14 @@ uint32_t miragemj_state::screen_update_mirage(screen_device &screen, bitmap_rgb3
flip_screen_set(BIT(flip, 7));
m_sprgen->set_flip_screen(BIT(flip, 7));
- m_sprgen->draw_sprites(bitmap, cliprect, m_spriteram->buffer(), 0x400);
-
m_deco_tilegen->pf_update(m_pf1_rowscroll, m_pf2_rowscroll);
+ screen.priority().fill(0, cliprect);
bitmap.fill(256, cliprect); /* not verified */
- m_deco_tilegen->tilemap_2_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
- m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0800, 0x0800, 0x200, 0x1ff);
- m_deco_tilegen->tilemap_1_draw(screen, bitmap, cliprect, 0, 0);
- m_sprgen->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x0000, 0x0800, 0x200, 0x1ff);
-
+ m_deco_tilegen->tilemap_2_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
+ m_deco_tilegen->tilemap_1_draw(screen, bitmap, cliprect, 0, 2);
+ m_sprgen->draw_sprites(bitmap, cliprect, m_spriteram->buffer(), 0x400);
return 0;
}
@@ -263,6 +261,15 @@ static GFXDECODE_START( gfx_mirage )
GFXDECODE_END
+DECOSPR_PRIORITY_CB_MEMBER(miragemj_state::pri_callback)
+{
+ u32 mask = 0; // above everything
+ if (extpri)
+ mask |= GFX_PMASK_2; // under the uppermost playfield
+
+ return mask;
+}
+
DECO16IC_BANK_CB_MEMBER(miragemj_state::bank_callback)
{
return ((bank >> 4) & 0x7) * 0x1000;
@@ -304,8 +311,6 @@ void miragemj_state::mirage(machine_config &config)
DECO16IC(config, m_deco_tilegen, 0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
- m_deco_tilegen->set_pf1_trans_mask(0x0f);
- m_deco_tilegen->set_pf2_trans_mask(0x0f);
m_deco_tilegen->set_pf1_col_bank(0x00);
m_deco_tilegen->set_pf2_col_bank(0x10);
m_deco_tilegen->set_pf1_col_mask(0x0f);
@@ -318,6 +323,7 @@ void miragemj_state::mirage(machine_config &config)
DECO_SPRITE(config, m_sprgen, 0);
m_sprgen->set_gfx_region(2);
+ m_sprgen->set_pri_callback(FUNC(miragemj_state::pri_callback));
m_sprgen->set_gfxdecode_tag("gfxdecode");
/* sound hardware */
diff --git a/src/mame/drivers/pktgaldx.cpp b/src/mame/drivers/pktgaldx.cpp
index f6d73c3d60c..4d403610520 100644
--- a/src/mame/drivers/pktgaldx.cpp
+++ b/src/mame/drivers/pktgaldx.cpp
@@ -362,8 +362,6 @@ void pktgaldx_state::pktgaldx(machine_config &config)
DECO16IC(config, m_deco_tilegen, 0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
- m_deco_tilegen->set_pf1_trans_mask(0x0f);
- m_deco_tilegen->set_pf2_trans_mask(0x0f);
m_deco_tilegen->set_pf1_col_bank(0x00);
m_deco_tilegen->set_pf2_col_bank(0x10);
m_deco_tilegen->set_pf1_col_mask(0x0f);
diff --git a/src/mame/drivers/rohga.cpp b/src/mame/drivers/rohga.cpp
index 937919ba648..90343e117a5 100644
--- a/src/mame/drivers/rohga.cpp
+++ b/src/mame/drivers/rohga.cpp
@@ -893,8 +893,6 @@ void rohga_state::rohga(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x64);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x10);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -908,8 +906,6 @@ void rohga_state::rohga(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x00);
m_deco_tilegen[1]->set_pf2_col_bank(0x10);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
@@ -983,8 +979,6 @@ void rohga_state::wizdfire(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x10);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -998,8 +992,6 @@ void rohga_state::wizdfire(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x00);
m_deco_tilegen[1]->set_pf2_col_bank(0x10);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
@@ -1078,8 +1070,6 @@ void rohga_state::nitrobal(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_32x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x10);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -1093,8 +1083,6 @@ void rohga_state::nitrobal(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_32x32);
m_deco_tilegen[1]->set_pf2_size(DECO_32x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0);
m_deco_tilegen[1]->set_pf2_col_bank(0);
m_deco_tilegen[1]->set_pf1_col_mask(0);
@@ -1174,8 +1162,6 @@ void rohga_state::schmeisr(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x64);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x10);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -1189,8 +1175,6 @@ void rohga_state::schmeisr(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x00);
m_deco_tilegen[1]->set_pf2_col_bank(0x10);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
diff --git a/src/mame/drivers/simpl156.cpp b/src/mame/drivers/simpl156.cpp
index be31c5e2848..577cd2e4ce9 100644
--- a/src/mame/drivers/simpl156.cpp
+++ b/src/mame/drivers/simpl156.cpp
@@ -406,8 +406,6 @@ void simpl156_state::chainrec(machine_config &config)
DECO16IC(config, m_deco_tilegen, 0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
- m_deco_tilegen->set_pf1_trans_mask(0x0f);
- m_deco_tilegen->set_pf2_trans_mask(0x0f);
m_deco_tilegen->set_pf1_col_bank(0x00);
m_deco_tilegen->set_pf2_col_bank(0x10);
m_deco_tilegen->set_pf1_col_mask(0x0f);
diff --git a/src/mame/drivers/sshangha.cpp b/src/mame/drivers/sshangha.cpp
index 6a820da2c52..571bf7c52b6 100644
--- a/src/mame/drivers/sshangha.cpp
+++ b/src/mame/drivers/sshangha.cpp
@@ -155,51 +155,6 @@ WRITE16_MEMBER( sshangha_state::sshangha_protection_region_8_146_w )
m_deco146->write_data( deco146_addr, data, mem_mask, cs );
}
-/*
-
- Swizzle palette writes a bit so that the 'tilemap_12_combine_draw' code in the tilemap device works with this game (used for girl, see attract mode)
-
- Normal Palette layout
-
- 0x000 - 0x3ff Sprites 2
- 0x400 - 0x7ff Tilemap PF1
- 0x800 - 0xbff Sprites 1
- 0xc00 - 0xfff Tilemap PF2
-
- rearranged to
-
- 0x000 - 0x3ff Sprites 1
- 0x400 - 0x7ff Sprites 2
- 0x800 - 0xbff Tilemap PF2
- 0xc00 - 0xfff Tilemap PF1
-
-*/
-
-WRITE16_MEMBER(sshangha_state::palette_w)
-{
- switch (offset & 0x600)
- {
- case 0x000: offset = (offset & 0x1ff) | 0x200; break;
- case 0x200: offset = (offset & 0x1ff) | 0x600; break;
- case 0x400: offset = (offset & 0x1ff) | 0x000; break;
- case 0x600: offset = (offset & 0x1ff) | 0x400; break;
- }
-
- m_palette->write16(offset, data, mem_mask);
-}
-
-READ16_MEMBER(sshangha_state::palette_r)
-{
- switch (offset & 0x600)
- {
- case 0x000: offset = (offset & 0x1ff) | 0x200; break;
- case 0x200: offset = (offset & 0x1ff) | 0x600; break;
- case 0x400: offset = (offset & 0x1ff) | 0x000; break;
- case 0x600: offset = (offset & 0x1ff) | 0x400; break;
- }
- return m_palette->read16(offset);
-}
-
void sshangha_state::sshangha_map(address_map &map)
{
map.global_mask(0x3fffff);
@@ -223,7 +178,7 @@ void sshangha_state::sshangha_map(address_map &map)
map(0x370000, 0x370001).r(FUNC(sshangha_state::deco_71_r));
map(0x370000, 0x370007).nopw();
- map(0x380000, 0x380fff).ram().rw(FUNC(sshangha_state::palette_r),FUNC(sshangha_state::palette_w)).share("palette");
+ map(0x380000, 0x380fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x381000, 0x383fff).ram(); // unused palette area
map(0x3e0000, 0x3e3fff).rw(FUNC(sshangha_state::sshangha_protection_region_8_146_r), FUNC(sshangha_state::sshangha_protection_region_8_146_w));
map(0x3ec000, 0x3f3fff).ram();
@@ -248,7 +203,7 @@ void sshangha_state::sshanghab_map(address_map &map)
map(0x340000, 0x340fff).ram(); // original spriteram, used as a buffer here
- map(0x380000, 0x380fff).ram().rw(FUNC(sshangha_state::palette_r),FUNC(sshangha_state::palette_w)).share("palette");
+ map(0x380000, 0x380fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x381000, 0x383fff).ram(); // unused palette area
map(0x3c0000, 0x3c07ff).ram().share(m_spriteram); // bootleg spriteram
@@ -375,11 +330,11 @@ INPUT_PORTS_END
static const gfx_layout charlayout =
{
8,8, /* 8*8 chars */
- 4096,
+ RGN_FRAC(1,2),
4, /* 4 bits per pixel */
- { 8, 0, 0x100000*8+8,0x100000*8+0 },
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
+ { 8, 0, RGN_FRAC(1,2)+8,RGN_FRAC(1,2)+0 },
+ { STEP8(0,1) },
+ { STEP8(0,8*2) },
16*8
};
@@ -388,11 +343,9 @@ static const gfx_layout tilelayout =
16,16,
RGN_FRAC(1,2),
4,
- { 8, 0, 0x100000*8+8, 0x100000*8+0 },
- { 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7,
- 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
- 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
+ { 8, 0, RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0 },
+ { STEP8(16*8*2,1), STEP8(0,1) },
+ { STEP16(0,8*2) },
64*8
};
@@ -410,6 +363,12 @@ DECO16IC_BANK_CB_MEMBER(sshangha_state::bank_callback)
return (bank >> 4) * 0x1000;
}
+// similar as tattass (deco32.cpp) but base color is pf2 color bank
+u16 sshangha_state::mix_callback(u16 p, u16 p2)
+{
+ return (p2 & 0x300) ^ (((p & 0x10) << 5) | (p & 0x0f) | ((p2 & 0x0f) << 4));
+}
+
void sshangha_state::sshangha(machine_config &config)
{
/* basic machine hardware */
@@ -420,7 +379,6 @@ void sshangha_state::sshangha(machine_config &config)
Z80(config, m_audiocpu, 16_MHz_XTAL / 4);
m_audiocpu->set_addrmap(AS_PROGRAM, &sshangha_state::sound_map);
-
config.set_maximum_quantum(attotime::from_hz(6000));
screen_device& screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@@ -432,19 +390,18 @@ void sshangha_state::sshangha(machine_config &config)
GFXDECODE(config, "gfxdecode", m_palette, gfx_sshangha);
- PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 0x4000);
+ PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 0x4000/4);
DECO16IC(config, m_tilegen, 0);
m_tilegen->set_pf1_size(DECO_64x32);
m_tilegen->set_pf2_size(DECO_64x32);
- m_tilegen->set_pf1_trans_mask(0x0f);
- m_tilegen->set_pf2_trans_mask(0x0f);
- m_tilegen->set_pf1_col_bank(0x30);
- m_tilegen->set_pf2_col_bank(0x20);
+ m_tilegen->set_pf1_col_bank(0x10);
+ m_tilegen->set_pf2_col_bank(0x30);
m_tilegen->set_pf1_col_mask(0x0f);
m_tilegen->set_pf2_col_mask(0x0f);
m_tilegen->set_bank1_callback(FUNC(sshangha_state::bank_callback));
m_tilegen->set_bank2_callback(FUNC(sshangha_state::bank_callback));
+ m_tilegen->set_mix_callback(FUNC(sshangha_state::mix_callback));
m_tilegen->set_pf12_8x8_bank(0);
m_tilegen->set_pf12_16x16_bank(1);
m_tilegen->set_gfxdecode_tag("gfxdecode");
@@ -463,17 +420,14 @@ void sshangha_state::sshangha(machine_config &config)
m_deco146->port_c_cb().set_ioport("DSW");
/* sound hardware */
- SPEAKER(config, "lspeaker").front_left(); // sure it's stereo?
- SPEAKER(config, "rspeaker").front_right();
+ SPEAKER(config, "mono").front_center();
ym2203_device &ymsnd(YM2203(config, "ymsnd", 16_MHz_XTAL / 4));
ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
- ymsnd.add_route(ALL_OUTPUTS, "lspeaker", 0.33);
- ymsnd.add_route(ALL_OUTPUTS, "rspeaker", 0.33);
+ ymsnd.add_route(ALL_OUTPUTS, "mono", 0.33);
okim6295_device &oki(OKIM6295(config, "oki", 16_MHz_XTAL / 8, okim6295_device::PIN7_LOW)); // clock frequency & pin 7 not verified
- oki.add_route(ALL_OUTPUTS, "lspeaker", 0.27);
- oki.add_route(ALL_OUTPUTS, "rspeaker", 0.27);
+ oki.add_route(ALL_OUTPUTS, "mono", 0.27);
}
void sshangha_state::sshanghab(machine_config &config)
diff --git a/src/mame/drivers/supbtime.cpp b/src/mame/drivers/supbtime.cpp
index eae426e01fc..a6a6eba7c64 100644
--- a/src/mame/drivers/supbtime.cpp
+++ b/src/mame/drivers/supbtime.cpp
@@ -347,8 +347,6 @@ void supbtime_state::supbtime(machine_config &config)
DECO16IC(config, m_deco_tilegen, 0);
m_deco_tilegen->set_pf1_size(DECO_64x32);
m_deco_tilegen->set_pf2_size(DECO_64x32);
- m_deco_tilegen->set_pf1_trans_mask(0x0f);
- m_deco_tilegen->set_pf2_trans_mask(0x0f);
m_deco_tilegen->set_pf1_col_bank(0x00);
m_deco_tilegen->set_pf2_col_bank(0x10);
m_deco_tilegen->set_pf1_col_mask(0x0f);
diff --git a/src/mame/drivers/vaportra.cpp b/src/mame/drivers/vaportra.cpp
index a6f593ce1df..80881936c23 100644
--- a/src/mame/drivers/vaportra.cpp
+++ b/src/mame/drivers/vaportra.cpp
@@ -236,8 +236,6 @@ void vaportra_state::vaportra(machine_config &config)
DECO16IC(config, m_deco_tilegen[0], 0);
m_deco_tilegen[0]->set_pf1_size(DECO_64x32);
m_deco_tilegen[0]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[0]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[0]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[0]->set_pf1_col_bank(0x00);
m_deco_tilegen[0]->set_pf2_col_bank(0x20);
m_deco_tilegen[0]->set_pf1_col_mask(0x0f);
@@ -251,8 +249,6 @@ void vaportra_state::vaportra(machine_config &config)
DECO16IC(config, m_deco_tilegen[1], 0);
m_deco_tilegen[1]->set_pf1_size(DECO_64x32);
m_deco_tilegen[1]->set_pf2_size(DECO_64x32);
- m_deco_tilegen[1]->set_pf1_trans_mask(0x0f);
- m_deco_tilegen[1]->set_pf2_trans_mask(0x0f);
m_deco_tilegen[1]->set_pf1_col_bank(0x30);
m_deco_tilegen[1]->set_pf2_col_bank(0x40);
m_deco_tilegen[1]->set_pf1_col_mask(0x0f);
diff --git a/src/mame/includes/cninja.h b/src/mame/includes/cninja.h
index c0a07a7999e..a88f1b979bc 100644
--- a/src/mame/includes/cninja.h
+++ b/src/mame/includes/cninja.h
@@ -81,6 +81,7 @@ public:
DECO16IC_BANK_CB_MEMBER(mutantf_2_bank_callback);
DECOSPR_PRIORITY_CB_MEMBER(pri_callback);
+ u16 robocop2_mix_callback(u16 p, u16 p2);
DECLARE_READ16_MEMBER( edrandy_protection_region_6_146_r );
DECLARE_WRITE16_MEMBER( edrandy_protection_region_6_146_w );
diff --git a/src/mame/includes/deco32.h b/src/mame/includes/deco32.h
index afda3b5b7ea..8f6d2baca09 100644
--- a/src/mame/includes/deco32.h
+++ b/src/mame/includes/deco32.h
@@ -123,6 +123,7 @@ private:
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void tile_callback(u32 &tile, u32 &colour, int layer, bool is_8x8);
DECO16IC_BANK_CB_MEMBER(bank_callback);
DECOSPR_PRIORITY_CB_MEMBER(captaven_pri_callback);
@@ -193,6 +194,7 @@ private:
u16 port_b_tattass();
DECO16IC_BANK_CB_MEMBER(bank_callback);
+ u16 mix_callback(u16 p, u16 p2);
void nslasher_map(address_map &map);
void tattass_map(address_map &map);
diff --git a/src/mame/includes/sshangha.h b/src/mame/includes/sshangha.h
index 611ecfa76c5..a0408c59544 100644
--- a/src/mame/includes/sshangha.h
+++ b/src/mame/includes/sshangha.h
@@ -53,6 +53,7 @@ private:
int m_video_control;
DECO16IC_BANK_CB_MEMBER(bank_callback);
+ u16 mix_callback(u16 p, u16 p2);
DECLARE_READ16_MEMBER(sshangha_protection_region_8_146_r);
DECLARE_WRITE16_MEMBER(sshangha_protection_region_8_146_w);
@@ -61,9 +62,6 @@ private:
DECLARE_READ16_MEMBER(deco_71_r);
DECLARE_READ16_MEMBER(sshanghab_protection16_r);
- DECLARE_READ16_MEMBER(palette_r);
- DECLARE_WRITE16_MEMBER(palette_w);
-
DECLARE_READ8_MEMBER(sound_shared_r);
DECLARE_WRITE8_MEMBER(sound_shared_w);
diff --git a/src/mame/video/cninja.cpp b/src/mame/video/cninja.cpp
index fbd6e004ea8..3362e679f7a 100644
--- a/src/mame/video/cninja.cpp
+++ b/src/mame/video/cninja.cpp
@@ -206,20 +206,6 @@ uint32_t cninja_state::screen_update_robocop2(screen_device &screen, bitmap_ind1
uint16_t flip = m_deco_tilegen[0]->pf_control_r(0);
uint16_t priority = m_priority;
- /* One of the tilemap chips can switch between 2 tilemaps at 4bpp, or 1 at 8bpp */
- if (priority & 4)
- {
- m_deco_tilegen[1]->set_tilemap_colour_mask(0, 0);
- m_deco_tilegen[1]->set_tilemap_colour_mask(1, 0);
- m_deco_tilegen[1]->pf12_set_gfxbank(0, 4);
- }
- else
- {
- m_deco_tilegen[1]->set_tilemap_colour_mask(0, 0xf);
- m_deco_tilegen[1]->set_tilemap_colour_mask(1, 0xf);
- m_deco_tilegen[1]->pf12_set_gfxbank(0, 2);
- }
-
/* Update playfields */
flip_screen_set(BIT(flip, 7));
m_sprgen[0]->set_flip_screen(BIT(flip, 7));
@@ -238,11 +224,18 @@ uint32_t cninja_state::screen_update_robocop2(screen_device &screen, bitmap_ind1
{
case 8:
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 2);
- m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 4);
+ if (priority & 4)
+ m_deco_tilegen[1]->tilemap_12_combine_draw(screen, bitmap, cliprect, 0, 4);
+ else
+ m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 4);
break;
default:
case 0:
- m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 2);
+ if (priority & 4)
+ m_deco_tilegen[1]->tilemap_12_combine_draw(screen, bitmap, cliprect, 0, 2);
+ else
+ m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 2);
+
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 4);
break;
}
diff --git a/src/mame/video/deco16ic.cpp b/src/mame/video/deco16ic.cpp
index 142796ae82a..31d8124096c 100644
--- a/src/mame/video/deco16ic.cpp
+++ b/src/mame/video/deco16ic.cpp
@@ -186,19 +186,18 @@ deco16ic_device::deco16ic_device(const machine_config &mconfig, const char *tag,
, m_pf12_control(nullptr)
, m_pf1_rowscroll_ptr(nullptr)
, m_pf2_rowscroll_ptr(nullptr)
+ , m_tile_cb(*this)
, m_bank1_cb(*this)
, m_bank2_cb(*this)
+ , m_mix_cb(*this)
, m_use_custom_pf1(0)
, m_use_custom_pf2(0)
, m_pf1_bank(0)
, m_pf2_bank(0)
, m_pf12_last_small(0)
, m_pf12_last_big(0)
- , m_pf1_8bpp_mode(0)
, m_pf1_size(0)
, m_pf2_size(0)
- , m_pf1_trans_mask(0xf)
- , m_pf2_trans_mask(0xf)
, m_pf1_colour_bank(0)
, m_pf2_colour_bank(0)
, m_pf1_colourmask(0xf)
@@ -218,8 +217,10 @@ void deco16ic_device::device_start()
if(!m_gfxdecode->started())
throw device_missing_dependencies();
+ m_tile_cb.resolve();
m_bank1_cb.resolve();
m_bank2_cb.resolve();
+ m_mix_cb.resolve();
int fullheight1 = 0;
int fullwidth1 = 0;
@@ -251,8 +252,6 @@ void deco16ic_device::device_start()
m_pf1_tilemap_16x16->set_transparent_pen(0);
m_pf2_tilemap_16x16->set_transparent_pen(0);
- m_pf1_8bpp_mode = 0;
-
m_pf1_data = make_unique_clear<u16[]>(0x2000 / 2);
m_pf2_data = make_unique_clear<u16[]>(0x2000 / 2);
m_pf12_control = make_unique_clear<u16[]>(0x10 / 2);
@@ -266,8 +265,6 @@ void deco16ic_device::device_start()
save_item(NAME(m_pf12_last_small));
save_item(NAME(m_pf12_last_big));
- save_item(NAME(m_pf1_8bpp_mode));
-
save_pointer(NAME(m_pf1_data), 0x2000 / 2);
save_pointer(NAME(m_pf2_data), 0x2000 / 2);
save_pointer(NAME(m_pf12_control), 0x10 / 2);
@@ -296,8 +293,8 @@ TILEMAP_MAPPER_MEMBER(deco16ic_device::deco16_scan_rows)
TILE_GET_INFO_MEMBER(deco16ic_device::get_pf2_tile_info)
{
- const u16 tile = m_pf2_data[tile_index];
- u8 colour = (tile >> 12) & 0xf;
+ u32 tile = m_pf2_data[tile_index];
+ u32 colour = (tile >> 12) & 0xf;
u8 flags = 0;
if (tile & 0x8000)
@@ -314,16 +311,20 @@ TILE_GET_INFO_MEMBER(deco16ic_device::get_pf2_tile_info)
}
}
+ tile &= 0xfff;
+ if (!m_tile_cb.isnull())
+ m_tile_cb(tile, colour, 1, false);
+
tileinfo.set(m_pf12_16x16_gfx_bank,
- (tile & 0xfff) | m_pf2_bank,
+ tile + m_pf2_bank,
(colour & m_pf2_colourmask) + m_pf2_colour_bank,
flags);
}
TILE_GET_INFO_MEMBER(deco16ic_device::get_pf1_tile_info)
{
- const u16 tile = m_pf1_data[tile_index];
- u8 colour = (tile >> 12) & 0xf;
+ u32 tile = m_pf1_data[tile_index];
+ u32 colour = (tile >> 12) & 0xf;
u8 flags = 0;
if (tile & 0x8000)
@@ -340,29 +341,20 @@ TILE_GET_INFO_MEMBER(deco16ic_device::get_pf1_tile_info)
}
}
- if (m_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.
- tileinfo.set(m_pf12_16x16_gfx_bank,
- (tile & 0x3fff) | m_pf1_bank,
- ((colour & m_pf1_colourmask) + m_pf1_colour_bank)>>2,
- flags);
- }
- else
- {
- tileinfo.set(m_pf12_16x16_gfx_bank,
- (tile & 0xfff) | m_pf1_bank,
- (colour & m_pf1_colourmask) + m_pf1_colour_bank,
- flags);
- }
+ tile &= 0xfff;
+ if (!m_tile_cb.isnull())
+ m_tile_cb(tile, colour, 0, false);
+
+ tileinfo.set(m_pf12_16x16_gfx_bank,
+ tile + m_pf1_bank,
+ (colour & m_pf1_colourmask) + m_pf1_colour_bank,
+ flags);
}
TILE_GET_INFO_MEMBER(deco16ic_device::get_pf2_tile_info_b)
{
- const u16 tile = m_pf2_data[tile_index];
- u8 colour = (tile >> 12) & 0xf;
+ u32 tile = m_pf2_data[tile_index];
+ u32 colour = (tile >> 12) & 0xf;
u8 flags = 0;
if (tile & 0x8000)
@@ -379,16 +371,20 @@ TILE_GET_INFO_MEMBER(deco16ic_device::get_pf2_tile_info_b)
}
}
+ tile &= 0xfff;
+ if (!m_tile_cb.isnull())
+ m_tile_cb(tile, colour, 1, true);
+
tileinfo.set(m_pf12_8x8_gfx_bank,
- (tile & 0xfff) | m_pf2_bank,
+ tile + m_pf2_bank,
(colour & m_pf2_colourmask) + m_pf2_colour_bank,
flags);
}
TILE_GET_INFO_MEMBER(deco16ic_device::get_pf1_tile_info_b)
{
- const u16 tile = m_pf1_data[tile_index];
- u8 colour = (tile >> 12) & 0xf;
+ u32 tile = m_pf1_data[tile_index];
+ u32 colour = (tile >> 12) & 0xf;
u8 flags = 0;
if (tile & 0x8000)
@@ -405,8 +401,12 @@ TILE_GET_INFO_MEMBER(deco16ic_device::get_pf1_tile_info_b)
}
}
+ tile &= 0xfff;
+ if (!m_tile_cb.isnull())
+ m_tile_cb(tile, colour, 0, true);
+
tileinfo.set(m_pf12_8x8_gfx_bank,
- (tile & 0xfff) | m_pf1_bank,
+ tile + m_pf1_bank,
(colour & m_pf1_colourmask) + m_pf1_colour_bank,
flags);
}
@@ -438,10 +438,8 @@ void deco16ic_device::custom_tilemap_draw(
const u16 control1,
int combine_mask,
int combine_shift,
- int trans_mask,
int flags,
u8 priority,
- int is_tattoo,
u8 pmask
)
{
@@ -450,11 +448,12 @@ void deco16ic_device::custom_tilemap_draw(
if (sizeof(*dest) == 2) rgb = 0;
else rgb = 1;
- gfx_element *gfx = m_gfxdecode->gfx(BIT(control1, 7) ? m_pf12_8x8_gfx_bank : m_pf12_16x16_gfx_bank);
tilemap_t *tilemap0 = BIT(control1, 7) ? tilemap0_8x8 : tilemap0_16x16;
tilemap_t *tilemap1 = BIT(control1, 7) ? tilemap1_8x8 : tilemap1_16x16;
const bitmap_ind16 *src_bitmap0 = tilemap0 ? &tilemap0->pixmap() : nullptr;
const bitmap_ind16 *src_bitmap1 = tilemap1 ? &tilemap1->pixmap() : nullptr;
+ const bitmap_ind8 *src_flagsmap0 = tilemap0 ? &tilemap0->flagsmap() : nullptr;
+ const bitmap_ind8 *src_flagsmap1 = tilemap1 ? &tilemap1->flagsmap() : nullptr;
int column_offset, src_x = 0;
const int row_type = 1 << ((control0 >> 3) & 0xf);
const int col_type = 8 << (control0 & 7);
@@ -466,6 +465,10 @@ void deco16ic_device::custom_tilemap_draw(
if (!BIT(control0, 7))
return;
+ // initialize draw layer flags
+ if ((flags & (TILEMAP_DRAW_LAYER0 | TILEMAP_DRAW_LAYER1 | TILEMAP_DRAW_LAYER2)) == 0)
+ flags |= TILEMAP_DRAW_LAYER0;
+
const int starty = cliprect.top();
const int endy = cliprect.bottom() + 1;
@@ -492,23 +495,30 @@ void deco16ic_device::custom_tilemap_draw(
column_offset = 0;
u16 p = src_bitmap0->pix16((src_y + column_offset) & height_mask, src_x);
+ u8 f = src_flagsmap0->pix8((src_y + column_offset) & height_mask, src_x);
if (src_bitmap1)
{
- if (!is_tattoo)
+ f |= src_flagsmap1->pix8((src_y + column_offset) & height_mask, src_x) & ~TILEMAP_DRAW_CATEGORY_MASK;
+ if (!m_mix_cb.isnull())
{
- // does boogie wings actually use this, or is the tattoo assassin code correct in this mode?
- p |= (src_bitmap1->pix16((src_y + column_offset) & height_mask, src_x) & combine_mask) << combine_shift;
+ const u16 p2 = src_bitmap1->pix16((src_y + column_offset) & height_mask, src_x);
+ p = m_mix_cb(p, p2);
}
else
{
- const u16 p2 = src_bitmap1->pix16((src_y + column_offset) & height_mask, src_x);
- p = gfx->colorbase() + (m_pf1_colour_bank * gfx->granularity()) + (((p & 0x30) << 4) | (p & 0x0f) | ((p2 & 0x0f) << 4));
+ // does boogie wings actually use this, or is the tattoo assassin code correct in this mode?
+ p |= (src_bitmap1->pix16((src_y + column_offset) & height_mask, src_x) & combine_mask) << combine_shift;
}
}
src_x = (src_x + 1) & width_mask;
- if ((flags & TILEMAP_DRAW_OPAQUE) || (p & trans_mask))
+ const bool is_drawn = ((flags & TILEMAP_DRAW_OPAQUE) ||
+ ((f & TILEMAP_PIXEL_LAYER0) && (flags & TILEMAP_DRAW_LAYER0)) ||
+ ((f & TILEMAP_PIXEL_LAYER1) && (flags & TILEMAP_DRAW_LAYER1)) ||
+ ((f & TILEMAP_PIXEL_LAYER2) && (flags & TILEMAP_DRAW_LAYER2)));
+
+ if (is_drawn)
{
dest = &bitmap.pix(y);
if (!rgb) dest[x] = p;
@@ -542,12 +552,6 @@ void deco16ic_device::set_transmask(int tmap, int group, u32 fgmask, u32 bgmask)
}
}
-/* captain america seems to have a similar 8bpp feature to robocop2, investigate merging */
-void deco16ic_device::set_pf1_8bpp_mode(int mode)
-{
- m_pf1_8bpp_mode = mode;
-}
-
/* robocop 2 can switch between 2 tilemaps at 4bpp, or 1 at 8bpp */
void deco16ic_device::set_tilemap_colour_mask(int tmap, int mask)
{
@@ -954,7 +958,7 @@ void deco16ic_device::tilemap_1_draw_common(screen_device &screen, _BitmapClass
{
if (m_use_custom_pf1)
{
- custom_tilemap_draw(screen, bitmap, cliprect, m_pf1_tilemap_8x8, m_pf1_tilemap_16x16, nullptr, nullptr, m_pf1_rowscroll_ptr, m_pf12_control[1], m_pf12_control[2], m_pf12_control[5] & 0xff, m_pf12_control[6] & 0xff, 0, 0, m_pf1_trans_mask, flags, priority, 0, pmask);
+ custom_tilemap_draw(screen, bitmap, cliprect, m_pf1_tilemap_8x8, m_pf1_tilemap_16x16, nullptr, nullptr, m_pf1_rowscroll_ptr, m_pf12_control[1], m_pf12_control[2], m_pf12_control[5] & 0xff, m_pf12_control[6] & 0xff, 0, 0, flags, priority, pmask);
}
else
{
@@ -977,7 +981,7 @@ void deco16ic_device::tilemap_2_draw_common(screen_device &screen, _BitmapClass
{
if (m_use_custom_pf2)
{
- custom_tilemap_draw(screen, bitmap, cliprect, m_pf2_tilemap_8x8, m_pf2_tilemap_16x16, nullptr, nullptr, m_pf2_rowscroll_ptr, m_pf12_control[3], m_pf12_control[4], m_pf12_control[5] >> 8, m_pf12_control[6] >> 8, 0, 0, m_pf2_trans_mask, flags, priority, 0, pmask);
+ custom_tilemap_draw(screen, bitmap, cliprect, m_pf2_tilemap_8x8, m_pf2_tilemap_16x16, nullptr, nullptr, m_pf2_rowscroll_ptr, m_pf12_control[3], m_pf12_control[4], m_pf12_control[5] >> 8, m_pf12_control[6] >> 8, 0, 0, flags, priority, pmask);
}
else
{
@@ -998,12 +1002,12 @@ void deco16ic_device::tilemap_2_draw(screen_device &screen, bitmap_rgb32 &bitmap
/*****************************************************************************************/
// Combines the output of two 4BPP tilemaps into an 8BPP tilemap
-void deco16ic_device::tilemap_12_combine_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int flags, u8 priority, int is_tattoo, u8 pmask)
+void deco16ic_device::tilemap_12_combine_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int flags, u8 priority, u8 pmask)
{
- custom_tilemap_draw(screen, bitmap, cliprect, nullptr, m_pf1_tilemap_16x16, nullptr, m_pf2_tilemap_16x16, m_pf1_rowscroll_ptr, m_pf12_control[1], m_pf12_control[2], m_pf12_control[5] & 0xff, m_pf12_control[6] & 0xff, 0xf, 4, 0xff, flags, priority, is_tattoo, pmask);
+ custom_tilemap_draw(screen, bitmap, cliprect, nullptr, m_pf1_tilemap_16x16, nullptr, m_pf2_tilemap_16x16, m_pf1_rowscroll_ptr, m_pf12_control[1], m_pf12_control[2], m_pf12_control[5] & 0xff, m_pf12_control[6] & 0xff, 0xf, 4, flags, priority, pmask);
}
-void deco16ic_device::tilemap_12_combine_draw(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int flags, u8 priority, int is_tattoo, u8 pmask)
+void deco16ic_device::tilemap_12_combine_draw(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int flags, u8 priority, u8 pmask)
{
- custom_tilemap_draw(screen, bitmap, cliprect, nullptr, m_pf1_tilemap_16x16, nullptr, m_pf2_tilemap_16x16, m_pf1_rowscroll_ptr, m_pf12_control[1], m_pf12_control[2], m_pf12_control[5] & 0xff, m_pf12_control[6] & 0xff, 0xf, 4, 0xff, flags, priority, is_tattoo, pmask);
+ custom_tilemap_draw(screen, bitmap, cliprect, nullptr, m_pf1_tilemap_16x16, nullptr, m_pf2_tilemap_16x16, m_pf1_rowscroll_ptr, m_pf12_control[1], m_pf12_control[2], m_pf12_control[5] & 0xff, m_pf12_control[6] & 0xff, 0xf, 4, flags, priority, pmask);
}
diff --git a/src/mame/video/deco16ic.h b/src/mame/video/deco16ic.h
index 0a93cd6613b..15b1ad92c7d 100644
--- a/src/mame/video/deco16ic.h
+++ b/src/mame/video/deco16ic.h
@@ -25,7 +25,9 @@
TYPE DEFINITIONS
***************************************************************************/
+typedef device_delegate<void (u32 &tile, u32 &colour, int layer, bool is_8x8)> deco16_tile_cb_delegate;
typedef device_delegate<int (int bank)> deco16_bank_cb_delegate;
+typedef device_delegate<u16 (u16 p, u16 p2)> deco16_mix_cb_delegate;
class deco16ic_device : public device_t, public device_video_interface
{
@@ -35,12 +37,12 @@ public:
// configuration
template <typename T> void set_gfxdecode_tag(T &&tag) { m_gfxdecode.set_tag(std::forward<T>(tag)); }
// void set_palette_tag(const char *tag);
+ template <typename... T> void set_tile_callback(T &&... args) { m_tile_cb.set(std::forward<T>(args)...); }
template <typename... T> void set_bank1_callback(T &&... args) { m_bank1_cb.set(std::forward<T>(args)...); }
template <typename... T> void set_bank2_callback(T &&... args) { m_bank2_cb.set(std::forward<T>(args)...); }
+ template <typename... T> void set_mix_callback(T &&... args) { m_mix_cb.set(std::forward<T>(args)...); }
void set_pf1_size(int size) { m_pf1_size = size; }
void set_pf2_size(int size) { m_pf2_size = size; }
- void set_pf1_trans_mask(int mask) { m_pf1_trans_mask = mask; }
- void set_pf2_trans_mask(int mask) { m_pf2_trans_mask = mask; }
void set_pf1_col_mask(int mask) { m_pf1_colourmask = mask; }
void set_pf2_col_mask(int mask) { m_pf2_colourmask = mask; }
void set_pf1_col_bank(int bank) { m_pf1_colour_bank = bank; }
@@ -48,7 +50,6 @@ public:
void set_pf12_8x8_bank(int bank) { m_pf12_8x8_gfx_bank = bank; }
void set_pf12_16x16_bank(int bank) { m_pf12_16x16_gfx_bank = bank; }
-
void pf1_data_w(offs_t offset, u16 data, u16 mem_mask = ~0);
void pf2_data_w(offs_t offset, u16 data, u16 mem_mask = ~0);
@@ -81,16 +82,13 @@ public:
void tilemap_2_draw(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int flags, u8 priority, u8 pmask = 0xff);
/* used by boogwing, nitrobal */
- void tilemap_12_combine_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int flags, u8 priority, int is_tattoo = false, u8 pmask = 0xff);
- void tilemap_12_combine_draw(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int flags, u8 priority, int is_tattoo = false, u8 pmask = 0xff);
+ void tilemap_12_combine_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int flags, u8 priority, u8 pmask = 0xff);
+ void tilemap_12_combine_draw(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int flags, u8 priority, u8 pmask = 0xff);
/* used by robocop2 */
void set_tilemap_colour_mask(int tmap, int mask);
void pf12_set_gfxbank(int small, int big);
- /* used by captaven */
- void set_pf1_8bpp_mode(int mode);
-
/* used by cninja */
void set_transmask(int tmap, int group, u32 fgmask, u32 bgmask);
@@ -119,10 +117,8 @@ public:
const u16 control1,
int combine_mask,
int combine_shift,
- int trans_mask,
int flags,
u8 priority,
- int is_tattoo,
u8 pmask = 0xff);
protected:
@@ -141,17 +137,19 @@ private:
tilemap_t *m_pf1_tilemap_16x16, *m_pf2_tilemap_16x16;
tilemap_t *m_pf1_tilemap_8x8, *m_pf2_tilemap_8x8;
+ deco16_tile_cb_delegate m_tile_cb;
+
deco16_bank_cb_delegate m_bank1_cb;
deco16_bank_cb_delegate m_bank2_cb;
+ deco16_mix_cb_delegate m_mix_cb;
+
int m_use_custom_pf1, m_use_custom_pf2;
int m_pf1_bank, m_pf2_bank;
int m_pf12_last_small, m_pf12_last_big;
- int m_pf1_8bpp_mode;
int m_pf1_size;
int m_pf2_size;
- int m_pf1_trans_mask, m_pf2_trans_mask;
int m_pf1_colour_bank, m_pf2_colour_bank;
int m_pf1_colourmask, m_pf2_colourmask;
int m_pf12_8x8_gfx_bank, m_pf12_16x16_gfx_bank;
diff --git a/src/mame/video/deco32.cpp b/src/mame/video/deco32.cpp
index 7fd9112092b..afc17a93a69 100644
--- a/src/mame/video/deco32.cpp
+++ b/src/mame/video/deco32.cpp
@@ -104,7 +104,6 @@ void deco32_state::allocate_rowscroll(int size1, int size2, int size3, int size4
void captaven_state::video_start()
{
- m_deco_tilegen[1]->set_pf1_8bpp_mode(1);
deco32_state::allocate_spriteram(0);
deco32_state::allocate_rowscroll(0x4000/4, 0x2000/4, 0x4000/4, 0x2000/4);
deco32_state::video_start();
@@ -134,7 +133,6 @@ void nslasher_state::video_start()
void dragngun_state::video_start()
{
- //m_deco_tilegen[0]->set_pf1_8bpp_mode(1); // despite being 8bpp this doesn't require the same shifting as captaven, why not?
m_screen->register_screen_bitmap(m_temp_render_bitmap);
deco32_state::allocate_rowscroll(0x4000/4, 0x2000/4, 0x4000/4, 0x2000/4);
deco32_state::allocate_buffered_palette();
@@ -423,7 +421,7 @@ u32 nslasher_state::screen_update_nslasher(screen_device &screen, bitmap_rgb32 &
/* Draw playfields & sprites */
if (m_pri & 2)
{
- m_deco_tilegen[1]->tilemap_12_combine_draw(screen, bitmap, cliprect, 0, 1, 1);
+ m_deco_tilegen[1]->tilemap_12_combine_draw(screen, bitmap, cliprect, 0, 1);
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 4);
}
else
@@ -625,7 +623,7 @@ u32 nslasher_state::screen_update_tattass(screen_device &screen, bitmap_rgb32 &b
/* Draw playfields & sprites */
if (m_pri & 2)
{
- m_deco_tilegen[1]->tilemap_12_combine_draw(screen, bitmap, cliprect, 0, 1, 1);
+ m_deco_tilegen[1]->tilemap_12_combine_draw(screen, bitmap, cliprect, 0, 1);
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 4);
}
else
diff --git a/src/mame/video/sshangha.cpp b/src/mame/video/sshangha.cpp
index b8f4aac1cb3..7d0fe0d43ad 100644
--- a/src/mame/video/sshangha.cpp
+++ b/src/mame/video/sshangha.cpp
@@ -54,21 +54,20 @@ uint32_t sshangha_state::screen_update(screen_device &screen, bitmap_rgb32 &bitm
// TODO: fully verify draw order / priorities
/* the tilemap 4bpp + 4bpp = 8bpp mixing actually seems external to the tilemap, note video_control is not part of the tilemap chip */
- if (combine_tilemaps) {
- m_tilegen->tilemap_12_combine_draw(screen, bitmap, cliprect, 0, 0, 1);
- }
- else {
+ if (combine_tilemaps)
+ m_tilegen->tilemap_12_combine_draw(screen, bitmap, cliprect, 0, 0);
+ else
m_tilegen->tilemap_2_draw(screen, bitmap, cliprect, 0, 0);
- }
+
// pri, primask,palbase,palmask
- m_sprgen1->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x000, 0x000, 0x000, 0x0ff); // low+high pri spr1 (definitely needs to be below low pri spr2 - game tiles & definitely needs to be below tilemap1 - lightning on win screen in traditional mode)
- m_sprgen2->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x200, 0x200, 0x100, 0x0ff); // low pri spr2 (definitely needs to be below tilemap1 - 2nd level failure screen etc.)
+ m_sprgen1->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x000, 0x000, 0x200, 0x0ff); // low+high pri spr1 (definitely needs to be below low pri spr2 - game tiles & definitely needs to be below tilemap1 - lightning on win screen in traditional mode)
+ m_sprgen2->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x200, 0x200, 0x000, 0x0ff); // low pri spr2 (definitely needs to be below tilemap1 - 2nd level failure screen etc.)
if (!combine_tilemaps)
m_tilegen->tilemap_1_draw(screen, bitmap, cliprect, 0, 0);
// pri, primask,palbase,palmask
- m_sprgen2->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x000, 0x200, 0x100, 0x0ff); // high pri spr2 (definitely needs to be above tilemap1 - title logo)
+ m_sprgen2->inefficient_copy_sprite_bitmap(bitmap, cliprect, 0x000, 0x200, 0x000, 0x0ff); // high pri spr2 (definitely needs to be above tilemap1 - title logo)
return 0;
}