From 326a87dc2b576603c363ae961748bbde64f3559e Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 5 May 2019 14:02:37 +0900 Subject: [PATCH] tc0110pcr.cpp : Updates device_palette_interface'd palette,Simplify handlers, Reduce defines, Use shorter / correct type values ninjaw.cpp, warriorb.cpp : Split gfxdecode per each screens, Fix spacings taito_f2.cpp : Reduce duplicate in config when tc0110pcr is present --- src/mame/drivers/asuka.cpp | 55 ++++++++++++------------- src/mame/drivers/galastrm.cpp | 11 +++-- src/mame/drivers/ninjaw.cpp | 76 ++++++++++++++++++----------------- src/mame/drivers/othunder.cpp | 9 ++--- src/mame/drivers/taito_f2.cpp | 31 ++++++++------ src/mame/drivers/taito_z.cpp | 54 +++++++++++-------------- src/mame/drivers/warriorb.cpp | 52 ++++++++++++------------ src/mame/includes/galastrm.h | 4 +- src/mame/includes/ninjaw.h | 10 ++--- src/mame/includes/othunder.h | 4 +- src/mame/includes/taito_f2.h | 3 +- src/mame/includes/warriorb.h | 8 ++-- src/mame/video/ninjaw.cpp | 10 ++--- src/mame/video/tc0110pcr.cpp | 33 +++++++-------- src/mame/video/tc0110pcr.h | 26 ++++++------ src/mame/video/warriorb.cpp | 8 ++-- 16 files changed, 190 insertions(+), 204 deletions(-) diff --git a/src/mame/drivers/asuka.cpp b/src/mame/drivers/asuka.cpp index 3af63a9d581..e6fb741aed2 100644 --- a/src/mame/drivers/asuka.cpp +++ b/src/mame/drivers/asuka.cpp @@ -877,22 +877,21 @@ void asuka_state::bonzeadv(machine_config &config) screen.set_visarea(0*8, 40*8-1, 3*8, 31*8-1); screen.set_screen_update(FUNC(asuka_state::screen_update_bonzeadv)); screen.screen_vblank().set(FUNC(asuka_state::screen_vblank_asuka)); - screen.set_palette("palette"); + screen.set_palette(m_tc0110pcr); - GFXDECODE(config, "gfxdecode", "palette", gfx_asuka); - PALETTE(config, "palette").set_entries(4096); + GFXDECODE(config, "gfxdecode", m_tc0110pcr, gfx_asuka); PC090OJ(config, m_pc090oj, 0); m_pc090oj->set_offsets(0, 8); m_pc090oj->set_gfxdecode_tag("gfxdecode"); - m_pc090oj->set_palette_tag("palette"); + m_pc090oj->set_palette_tag(m_tc0110pcr); TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_gfxdecode_tag("gfxdecode"); - m_tc0100scn->set_palette("palette"); + m_tc0100scn->set_palette(m_tc0110pcr); - TC0110PCR(config, m_tc0110pcr, 0, "palette"); + TC0110PCR(config, m_tc0110pcr, 0); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -936,23 +935,22 @@ void asuka_state::asuka(machine_config &config) screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1); screen.set_screen_update(FUNC(asuka_state::screen_update_asuka)); screen.screen_vblank().set(FUNC(asuka_state::screen_vblank_asuka)); - screen.set_palette("palette"); + screen.set_palette(m_tc0110pcr); - GFXDECODE(config, "gfxdecode", "palette", gfx_asuka); - PALETTE(config, "palette").set_entries(4096); + GFXDECODE(config, "gfxdecode", m_tc0110pcr, gfx_asuka); PC090OJ(config, m_pc090oj, 0); m_pc090oj->set_offsets(0, 8); m_pc090oj->set_usebuffer(1); m_pc090oj->set_gfxdecode_tag("gfxdecode"); - m_pc090oj->set_palette_tag("palette"); + m_pc090oj->set_palette_tag(m_tc0110pcr); TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_gfxdecode_tag("gfxdecode"); - m_tc0100scn->set_palette("palette"); + m_tc0100scn->set_palette(m_tc0110pcr); - TC0110PCR(config, m_tc0110pcr, 0, "palette"); + TC0110PCR(config, m_tc0110pcr, 0); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -1008,24 +1006,23 @@ void asuka_state::cadash(machine_config &config) screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1); screen.set_screen_update(FUNC(asuka_state::screen_update_bonzeadv)); screen.screen_vblank().set(FUNC(asuka_state::screen_vblank_asuka)); - screen.set_palette("palette"); + screen.set_palette(m_tc0110pcr); - GFXDECODE(config, "gfxdecode", "palette", gfx_asuka); - PALETTE(config, "palette").set_entries(4096); + GFXDECODE(config, "gfxdecode", m_tc0110pcr, gfx_asuka); PC090OJ(config, m_pc090oj, 0); m_pc090oj->set_offsets(0, 8); m_pc090oj->set_usebuffer(1); m_pc090oj->set_gfxdecode_tag("gfxdecode"); - m_pc090oj->set_palette_tag("palette"); + m_pc090oj->set_palette_tag(m_tc0110pcr); TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_offsets(1, 0); m_tc0100scn->set_gfxdecode_tag("gfxdecode"); - m_tc0100scn->set_palette("palette"); + m_tc0100scn->set_palette(m_tc0110pcr); - TC0110PCR(config, m_tc0110pcr, 0, "palette"); + TC0110PCR(config, m_tc0110pcr, 0); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -1069,23 +1066,22 @@ void asuka_state::mofflott(machine_config &config) screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1); screen.set_screen_update(FUNC(asuka_state::screen_update_asuka)); screen.screen_vblank().set(FUNC(asuka_state::screen_vblank_asuka)); - screen.set_palette("palette"); + screen.set_palette(m_tc0110pcr); - GFXDECODE(config, "gfxdecode", "palette", gfx_asuka); - PALETTE(config, "palette").set_entries(4096); /* only Mofflott uses full palette space */ + GFXDECODE(config, "gfxdecode", m_tc0110pcr, gfx_asuka); PC090OJ(config, m_pc090oj, 0); m_pc090oj->set_offsets(0, 8); m_pc090oj->set_gfxdecode_tag("gfxdecode"); - m_pc090oj->set_palette_tag("palette"); + m_pc090oj->set_palette_tag(m_tc0110pcr); TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_offsets(1, 0); m_tc0100scn->set_gfxdecode_tag("gfxdecode"); - m_tc0100scn->set_palette("palette"); + m_tc0100scn->set_palette(m_tc0110pcr); - TC0110PCR(config, m_tc0110pcr, 0, "palette"); + TC0110PCR(config, m_tc0110pcr, 0); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -1137,23 +1133,22 @@ void asuka_state::eto(machine_config &config) screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1); screen.set_screen_update(FUNC(asuka_state::screen_update_asuka)); screen.screen_vblank().set(FUNC(asuka_state::screen_vblank_asuka)); - screen.set_palette("palette"); + screen.set_palette(m_tc0110pcr); - GFXDECODE(config, "gfxdecode", "palette", gfx_asuka); - PALETTE(config, "palette").set_entries(4096); + GFXDECODE(config, "gfxdecode", m_tc0110pcr, gfx_asuka); PC090OJ(config, m_pc090oj, 0); m_pc090oj->set_offsets(0, 8); m_pc090oj->set_gfxdecode_tag("gfxdecode"); - m_pc090oj->set_palette_tag("palette"); + m_pc090oj->set_palette_tag(m_tc0110pcr); TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_offsets(1, 0); m_tc0100scn->set_gfxdecode_tag("gfxdecode"); - m_tc0100scn->set_palette("palette"); + m_tc0100scn->set_palette(m_tc0110pcr); - TC0110PCR(config, m_tc0110pcr, 0, "palette"); + TC0110PCR(config, m_tc0110pcr, 0); /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/galastrm.cpp b/src/mame/drivers/galastrm.cpp index a19c507b24e..c6545723810 100644 --- a/src/mame/drivers/galastrm.cpp +++ b/src/mame/drivers/galastrm.cpp @@ -218,24 +218,23 @@ void galastrm_state::galastrm(machine_config &config) m_screen->set_size(64*8, 50*8); m_screen->set_visarea(0+96, 40*8-1+96, 3*8+60, 32*8-1+60); m_screen->set_screen_update(FUNC(galastrm_state::screen_update)); - m_screen->set_palette(m_palette); + m_screen->set_palette(m_tc0110pcr); - GFXDECODE(config, m_gfxdecode, m_palette, gfx_galastrm); - PALETTE(config, m_palette).set_entries(4096); + GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_galastrm); TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(0); m_tc0100scn->set_offsets(-48, -56); m_tc0100scn->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn->set_palette(m_palette); + m_tc0100scn->set_palette(m_tc0110pcr); TC0480SCP(config, m_tc0480scp, 0); m_tc0480scp->set_gfx_region(1); - m_tc0480scp->set_palette(m_palette); + m_tc0480scp->set_palette(m_tc0110pcr); m_tc0480scp->set_offsets(-40, -3); m_tc0480scp->set_gfxdecode_tag(m_gfxdecode); - TC0110PCR(config, m_tc0110pcr, 0, m_palette); + TC0110PCR(config, m_tc0110pcr, 0); /* sound hardware */ TAITO_EN(config, "taito_en", 0); diff --git a/src/mame/drivers/ninjaw.cpp b/src/mame/drivers/ninjaw.cpp index 06dac881efc..8318edb6ad4 100644 --- a/src/mame/drivers/ninjaw.cpp +++ b/src/mame/drivers/ninjaw.cpp @@ -610,9 +610,13 @@ static const gfx_layout charlayout = 32*8 /* every sprite takes 32 consecutive bytes */ }; -static GFXDECODE_START( gfx_ninjaw ) +static GFXDECODE_START( gfx_ninjaw_1 ) GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 256 ) /* sprites */ GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 256 ) /* scr tiles (screen 1) */ +GFXDECODE_END + +static GFXDECODE_START( gfx_ninjaw_23 ) + GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 256 ) /* sprites */ GFXDECODE_ENTRY( "gfx3", 0, charlayout, 0, 256 ) /* scr tiles (screens 2+) */ GFXDECODE_END @@ -743,10 +747,9 @@ void ninjaw_state::ninjaw(machine_config &config) tc0040ioc.read_7_callback().set_ioport("IN2"); /* video hardware */ - GFXDECODE(config, m_gfxdecode, m_palette, gfx_ninjaw); - PALETTE(config, m_palette).set_entries(4096); - PALETTE(config, "palette2").set_entries(4096); - PALETTE(config, "palette3").set_entries(4096); + GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_ninjaw_1); + GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_ninjaw_23); + GFXDECODE(config, m_gfxdecode[2], m_tc0110pcr[2], gfx_ninjaw_23); config.set_default_layout(layout_ninjaw); @@ -756,7 +759,7 @@ void ninjaw_state::ninjaw(machine_config &config) lscreen.set_size(36*8, 32*8); lscreen.set_visarea(0*8, 36*8-1, 3*8, 31*8-1); lscreen.set_screen_update(FUNC(ninjaw_state::screen_update_left)); - lscreen.set_palette(m_palette); + lscreen.set_palette(m_tc0110pcr[0]); screen_device &mscreen(SCREEN(config, "mscreen", SCREEN_TYPE_RASTER)); mscreen.set_refresh_hz(60); @@ -764,7 +767,7 @@ void ninjaw_state::ninjaw(machine_config &config) mscreen.set_size(36*8, 32*8); mscreen.set_visarea(0*8, 36*8-1, 3*8, 31*8-1); mscreen.set_screen_update(FUNC(ninjaw_state::screen_update_middle)); - mscreen.set_palette("palette2"); + mscreen.set_palette(m_tc0110pcr[1]); screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER)); rscreen.set_refresh_hz(60); @@ -772,37 +775,37 @@ void ninjaw_state::ninjaw(machine_config &config) rscreen.set_size(36*8, 32*8); rscreen.set_visarea(0*8, 36*8-1, 3*8, 31*8-1); rscreen.set_screen_update(FUNC(ninjaw_state::screen_update_right)); - rscreen.set_palette("palette3"); + rscreen.set_palette(m_tc0110pcr[2]); TC0100SCN(config, m_tc0100scn[0], 0); m_tc0100scn[0]->set_gfx_region(1); m_tc0100scn[0]->set_offsets(22, 0); m_tc0100scn[0]->set_multiscr_xoffs(0); m_tc0100scn[0]->set_multiscr_hack(0); - m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn[0]->set_palette(m_palette); + m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode[0]); + m_tc0100scn[0]->set_palette(m_tc0110pcr[0]); - TC0110PCR(config, m_tc0110pcr[0], 0, m_palette); + TC0110PCR(config, m_tc0110pcr[0], 0); TC0100SCN(config, m_tc0100scn[1], 0); - m_tc0100scn[1]->set_gfx_region(2); + m_tc0100scn[1]->set_gfx_region(1); m_tc0100scn[1]->set_offsets(22, 0); m_tc0100scn[1]->set_multiscr_xoffs(2); m_tc0100scn[1]->set_multiscr_hack(1); - m_tc0100scn[1]->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn[1]->set_palette("palette2"); + m_tc0100scn[1]->set_gfxdecode_tag(m_gfxdecode[1]); + m_tc0100scn[1]->set_palette(m_tc0110pcr[1]); - TC0110PCR(config, m_tc0110pcr[1], 0, "palette2"); + TC0110PCR(config, m_tc0110pcr[1], 0); TC0100SCN(config, m_tc0100scn[2], 0); - m_tc0100scn[2]->set_gfx_region(2); + m_tc0100scn[2]->set_gfx_region(1); m_tc0100scn[2]->set_offsets(22, 0); m_tc0100scn[2]->set_multiscr_xoffs(4); m_tc0100scn[2]->set_multiscr_hack(1); - m_tc0100scn[2]->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn[2]->set_palette("palette3"); + m_tc0100scn[2]->set_gfxdecode_tag(m_gfxdecode[2]); + m_tc0100scn[2]->set_palette(m_tc0110pcr[2]); - TC0110PCR(config, m_tc0110pcr[2], 0, "palette3"); + TC0110PCR(config, m_tc0110pcr[2], 0); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); @@ -856,10 +859,9 @@ void ninjaw_state::darius2(machine_config &config) tc0040ioc.read_7_callback().set_ioport("IN2"); /* video hardware */ - GFXDECODE(config, m_gfxdecode, m_palette, gfx_ninjaw); - PALETTE(config, m_palette).set_entries(4096); - PALETTE(config, "palette2").set_entries(4096); - PALETTE(config, "palette3").set_entries(4096); + GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_ninjaw_1); + GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_ninjaw_23); + GFXDECODE(config, m_gfxdecode[2], m_tc0110pcr[2], gfx_ninjaw_23); config.set_default_layout(layout_ninjaw); @@ -869,7 +871,7 @@ void ninjaw_state::darius2(machine_config &config) lscreen.set_size(36*8, 32*8); lscreen.set_visarea(0*8, 36*8-1, 3*8, 31*8-1); lscreen.set_screen_update(FUNC(ninjaw_state::screen_update_left)); - lscreen.set_palette(m_palette); + lscreen.set_palette(m_tc0110pcr[0]); screen_device &mscreen(SCREEN(config, "mscreen", SCREEN_TYPE_RASTER)); mscreen.set_refresh_hz(60); @@ -877,7 +879,7 @@ void ninjaw_state::darius2(machine_config &config) mscreen.set_size(36*8, 32*8); mscreen.set_visarea(0*8, 36*8-1, 3*8, 31*8-1); mscreen.set_screen_update(FUNC(ninjaw_state::screen_update_middle)); - mscreen.set_palette("palette2"); + mscreen.set_palette(m_tc0110pcr[1]); screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER)); rscreen.set_refresh_hz(60); @@ -885,37 +887,37 @@ void ninjaw_state::darius2(machine_config &config) rscreen.set_size(36*8, 32*8); rscreen.set_visarea(0*8, 36*8-1, 3*8, 31*8-1); rscreen.set_screen_update(FUNC(ninjaw_state::screen_update_right)); - rscreen.set_palette("palette3"); + rscreen.set_palette(m_tc0110pcr[2]); TC0100SCN(config, m_tc0100scn[0], 0); m_tc0100scn[0]->set_gfx_region(1); m_tc0100scn[0]->set_offsets(22, 0); m_tc0100scn[0]->set_multiscr_xoffs(0); m_tc0100scn[0]->set_multiscr_hack(0); - m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn[0]->set_palette(m_palette); + m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode[0]); + m_tc0100scn[0]->set_palette(m_tc0110pcr[0]); - TC0110PCR(config, m_tc0110pcr[0], 0, m_palette); + TC0110PCR(config, m_tc0110pcr[0], 0); TC0100SCN(config, m_tc0100scn[1], 0); - m_tc0100scn[1]->set_gfx_region(2); + m_tc0100scn[1]->set_gfx_region(1); m_tc0100scn[1]->set_offsets(22, 0); m_tc0100scn[1]->set_multiscr_xoffs(2); m_tc0100scn[1]->set_multiscr_hack(1); - m_tc0100scn[1]->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn[1]->set_palette("palette2"); + m_tc0100scn[1]->set_gfxdecode_tag(m_gfxdecode[1]); + m_tc0100scn[1]->set_palette(m_tc0110pcr[1]); - TC0110PCR(config, m_tc0110pcr[1], 0, "palette2"); + TC0110PCR(config, m_tc0110pcr[1], 0); TC0100SCN(config, m_tc0100scn[2], 0); - m_tc0100scn[2]->set_gfx_region(2); + m_tc0100scn[2]->set_gfx_region(1); m_tc0100scn[2]->set_offsets(22, 0); m_tc0100scn[2]->set_multiscr_xoffs(4); m_tc0100scn[2]->set_multiscr_hack(1); - m_tc0100scn[2]->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn[2]->set_palette("palette3"); + m_tc0100scn[2]->set_gfxdecode_tag(m_gfxdecode[2]); + m_tc0100scn[2]->set_palette(m_tc0110pcr[2]); - TC0110PCR(config, m_tc0110pcr[2], 0, "palette3"); + TC0110PCR(config, m_tc0110pcr[2], 0); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/othunder.cpp b/src/mame/drivers/othunder.cpp index 10e4485b26b..776d075ae1e 100644 --- a/src/mame/drivers/othunder.cpp +++ b/src/mame/drivers/othunder.cpp @@ -623,19 +623,18 @@ void othunder_state::othunder(machine_config &config) screen.set_size(40*8, 32*8); screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1); screen.set_screen_update(FUNC(othunder_state::screen_update)); - screen.set_palette(m_palette); + screen.set_palette(m_tc0110pcr); screen.screen_vblank().set(FUNC(othunder_state::vblank_w)); - GFXDECODE(config, m_gfxdecode, m_palette, gfx_othunder); - PALETTE(config, m_palette).set_entries(4096); + GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_othunder); TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_offsets(4, 0); m_tc0100scn->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn->set_palette(m_palette); + m_tc0100scn->set_palette(m_tc0110pcr); - TC0110PCR(config, m_tc0110pcr, 0, m_palette); + TC0110PCR(config, m_tc0110pcr, 0); /* sound hardware */ SPEAKER(config, "speaker").front_center(); diff --git a/src/mame/drivers/taito_f2.cpp b/src/mame/drivers/taito_f2.cpp index a98dc17e0d4..6f2b51dd281 100644 --- a/src/mame/drivers/taito_f2.cpp +++ b/src/mame/drivers/taito_f2.cpp @@ -2939,9 +2939,18 @@ void taitof2_state::taito_f2_te7750(machine_config &config) te7750.in_port9_cb().set_ioport("IN4"); } +void taitof2_state::taito_f2_tc0110pcr(machine_config &config) +{ + TC0110PCR(config, m_tc0110pcr, 0); + m_gfxdecode->set_palette(m_tc0110pcr); + m_screen->set_palette(m_tc0110pcr); +} + void taitof2_state::finalb(machine_config &config) { taito_f2_tc0220ioc(config); + taito_f2_tc0110pcr(config); + config.device_remove("palette"); /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::finalb_map); @@ -2955,9 +2964,7 @@ void taitof2_state::finalb(machine_config &config) m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_offsets(1, 0); m_tc0100scn->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn->set_palette(m_palette); - - TC0110PCR(config, m_tc0110pcr, 0, m_palette); + m_tc0100scn->set_palette(m_tc0110pcr); } void taitof2_state::dondokod(machine_config &config) @@ -3074,6 +3081,8 @@ void taitof2_state::cameltry(machine_config &config) void taitof2_state::qtorimon(machine_config &config) { taito_f2_tc0220ioc(config); + taito_f2_tc0110pcr(config); + config.device_remove("palette"); /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::qtorimon_map); @@ -3085,9 +3094,7 @@ void taitof2_state::qtorimon(machine_config &config) TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn->set_palette(m_palette); - - TC0110PCR(config, m_tc0110pcr, 0, m_palette); + m_tc0100scn->set_palette(m_tc0110pcr); } void taitof2_state::liquidk(machine_config &config) @@ -3114,6 +3121,8 @@ void taitof2_state::liquidk(machine_config &config) void taitof2_state::quizhq(machine_config &config) { taito_f2(config); + taito_f2_tc0110pcr(config); + config.device_remove("palette"); /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::quizhq_map); @@ -3125,9 +3134,7 @@ void taitof2_state::quizhq(machine_config &config) TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn->set_palette(m_palette); - - TC0110PCR(config, m_tc0110pcr, 0, m_palette); + m_tc0100scn->set_palette(m_tc0110pcr); } void taitof2_state::ssi(machine_config &config) @@ -3199,6 +3206,8 @@ void taitof2_state::growl(machine_config &config) void taitof2_state::mjnquest(machine_config &config) { taito_f2(config); + taito_f2_tc0110pcr(config); + config.device_remove("palette"); /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::mjnquest_map); @@ -3209,10 +3218,8 @@ void taitof2_state::mjnquest(machine_config &config) TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn->set_palette(m_palette); + m_tc0100scn->set_palette(m_tc0110pcr); m_tc0100scn->set_tile_callback(FUNC(taitof2_state::mjnquest_tmap_cb), this); - - TC0110PCR(config, m_tc0110pcr, 0, m_palette); } void taitof2_state::footchmp(machine_config &config) diff --git a/src/mame/drivers/taito_z.cpp b/src/mame/drivers/taito_z.cpp index 3238ae014f0..541c317ab8e 100644 --- a/src/mame/drivers/taito_z.cpp +++ b/src/mame/drivers/taito_z.cpp @@ -3194,21 +3194,20 @@ void taitoz_state::contcirc(machine_config &config) screen.set_size(40*8, 32*8); screen.set_visarea(0*8, 40*8-1, 3*8, 31*8-1); screen.set_screen_update(FUNC(taitoz_state::screen_update_contcirc)); - screen.set_palette("palette"); + screen.set_palette(m_tc0110pcr); - GFXDECODE(config, m_gfxdecode, "palette", gfx_taitoz); - PALETTE(config, "palette").set_format(palette_device::xBGR_555, 4096); + GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_taitoz); MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn->set_palette("palette"); + m_tc0100scn->set_palette(m_tc0110pcr); TC0150ROD(config, m_tc0150rod, 0); - TC0110PCR(config, m_tc0110pcr, 0, "palette"); + TC0110PCR(config, m_tc0110pcr, 0); /* sound hardware */ SPEAKER(config, "front").front_center(); @@ -3265,21 +3264,20 @@ void taitoz_state::chasehq(machine_config &config) screen.set_size(40*8, 32*8); screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1); screen.set_screen_update(FUNC(taitoz_state::screen_update_chasehq)); - screen.set_palette("palette"); + screen.set_palette(m_tc0110pcr); - GFXDECODE(config, m_gfxdecode, "palette", gfx_chasehq); - PALETTE(config, "palette").set_format(palette_device::xBGR_555, 4096); + GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_chasehq); MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn->set_palette("palette"); + m_tc0100scn->set_palette(m_tc0110pcr); TC0150ROD(config, m_tc0150rod, 0); - TC0110PCR(config, m_tc0110pcr, 0, "palette"); + TC0110PCR(config, m_tc0110pcr, 0); /* sound hardware */ SPEAKER(config, "front").front_center(); @@ -3338,21 +3336,20 @@ void taitoz_state::enforce(machine_config &config) screen.set_size(40*8, 32*8); screen.set_visarea(0*8, 40*8-1, 2*8, 31*8-1); screen.set_screen_update(FUNC(taitoz_state::screen_update_contcirc)); - screen.set_palette("palette"); + screen.set_palette(m_tc0110pcr); - GFXDECODE(config, m_gfxdecode, "palette", gfx_taitoz); - PALETTE(config, "palette").set_format(palette_device::xBGR_555, 4096); + GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_taitoz); MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn->set_palette("palette"); + m_tc0100scn->set_palette(m_tc0110pcr); TC0150ROD(config, m_tc0150rod, 0); - TC0110PCR(config, m_tc0110pcr, 0, "palette"); + TC0110PCR(config, m_tc0110pcr, 0); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); @@ -3572,21 +3569,20 @@ void taitoz_state::nightstr(machine_config &config) screen.set_size(40*8, 32*8); screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1); screen.set_screen_update(FUNC(taitoz_state::screen_update_chasehq)); - screen.set_palette("palette"); + screen.set_palette(m_tc0110pcr); - GFXDECODE(config, m_gfxdecode, "palette", gfx_chasehq); - PALETTE(config, "palette").set_format(palette_device::xBGR_555, 4096); + GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_chasehq); MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn->set_palette("palette"); + m_tc0100scn->set_palette(m_tc0110pcr); TC0150ROD(config, m_tc0150rod, 0); - TC0110PCR(config, m_tc0110pcr, 0, "palette"); + TC0110PCR(config, m_tc0110pcr, 0); /* sound hardware */ SPEAKER(config, "front").front_center(); @@ -3645,21 +3641,20 @@ void taitoz_state::aquajack(machine_config &config) screen.set_size(40*8, 32*8); screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1); screen.set_screen_update(FUNC(taitoz_state::screen_update_aquajack)); - screen.set_palette("palette"); + screen.set_palette(m_tc0110pcr); - GFXDECODE(config, m_gfxdecode, "palette", gfx_taitoz); - PALETTE(config, "palette").set_format(palette_device::xBGR_555, 4096); + GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_taitoz); MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn->set_palette("palette"); + m_tc0100scn->set_palette(m_tc0110pcr); TC0150ROD(config, m_tc0150rod, 0); - TC0110PCR(config, m_tc0110pcr, 0, "palette"); + TC0110PCR(config, m_tc0110pcr, 0); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); @@ -3723,18 +3718,17 @@ void taitoz_state::spacegun(machine_config &config) screen.set_size(40*8, 32*8); screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1); screen.set_screen_update(FUNC(taitoz_state::screen_update_spacegun)); - screen.set_palette("palette"); + screen.set_palette(m_tc0110pcr); - GFXDECODE(config, m_gfxdecode, "palette", gfx_taitoz); - PALETTE(config, "palette").set_format(palette_device::xBGR_555, 4096); + GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_taitoz); TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_gfx_region(1); m_tc0100scn->set_offsets(4, 0); m_tc0100scn->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn->set_palette("palette"); + m_tc0100scn->set_palette(m_tc0110pcr); - TC0110PCR(config, m_tc0110pcr, 0, "palette"); + TC0110PCR(config, m_tc0110pcr, 0); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/warriorb.cpp b/src/mame/drivers/warriorb.cpp index d1bb5270267..f80029c4638 100644 --- a/src/mame/drivers/warriorb.cpp +++ b/src/mame/drivers/warriorb.cpp @@ -398,9 +398,13 @@ static const gfx_layout charlayout = 32*8 /* every sprite takes 32 consecutive bytes */ }; -static GFXDECODE_START( gfx_warriorb ) +static GFXDECODE_START( gfx_warriorb_1 ) GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 256 ) /* sprites */ GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 256 ) /* scr tiles (screen 1) */ +GFXDECODE_END + +static GFXDECODE_START( gfx_warriorb_2 ) + GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 256 ) /* sprites */ GFXDECODE_ENTRY( "gfx3", 0, charlayout, 0, 256 ) /* scr tiles (screen 2) */ GFXDECODE_END @@ -440,9 +444,8 @@ void warriorb_state::darius2d(machine_config &config) m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ - GFXDECODE(config, m_gfxdecode, m_palette, gfx_warriorb); - PALETTE(config, m_palette).set_entries(4096); - PALETTE(config, "palette2").set_entries(4096); + GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_warriorb_1); + GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_warriorb_2); config.set_default_layout(layout_dualhsxs); @@ -452,15 +455,15 @@ void warriorb_state::darius2d(machine_config &config) lscreen.set_size(40*8, 32*8); lscreen.set_visarea(0*8, 40*8-1, 3*8, 32*8-1); lscreen.set_screen_update(FUNC(warriorb_state::screen_update_left)); - lscreen.set_palette(m_palette); + lscreen.set_palette(m_tc0110pcr[0]); TC0100SCN(config, m_tc0100scn[0], 0); m_tc0100scn[0]->set_gfx_region(1); m_tc0100scn[0]->set_offsets(4, 0); - m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn[0]->set_palette(m_palette); + m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode[0]); + m_tc0100scn[0]->set_palette(m_tc0110pcr[0]); - TC0110PCR(config, m_tc0110pcr[0], 0, m_palette); + TC0110PCR(config, m_tc0110pcr[0], 0); screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER)); rscreen.set_refresh_hz(60); @@ -468,16 +471,16 @@ void warriorb_state::darius2d(machine_config &config) rscreen.set_size(40*8, 32*8); rscreen.set_visarea(0*8, 40*8-1, 3*8, 32*8-1); rscreen.set_screen_update(FUNC(warriorb_state::screen_update_right)); - rscreen.set_palette("palette2"); + rscreen.set_palette(m_tc0110pcr[1]); TC0100SCN(config, m_tc0100scn[1], 0); - m_tc0100scn[1]->set_gfx_region(2); + m_tc0100scn[1]->set_gfx_region(1); m_tc0100scn[1]->set_offsets(4, 0); m_tc0100scn[1]->set_multiscr_hack(1); - m_tc0100scn[1]->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn[1]->set_palette("palette2"); + m_tc0100scn[1]->set_gfxdecode_tag(m_gfxdecode[1]); + m_tc0100scn[1]->set_palette(m_tc0110pcr[1]); - TC0110PCR(config, m_tc0110pcr[1], 0, "palette2"); + TC0110PCR(config, m_tc0110pcr[1], 0); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); @@ -521,9 +524,8 @@ void warriorb_state::warriorb(machine_config &config) m_tc0510nio->read_7_callback().set_ioport("IN2"); /* video hardware */ - GFXDECODE(config, m_gfxdecode, m_palette, gfx_warriorb); - PALETTE(config, m_palette).set_entries(4096); - PALETTE(config, "palette2").set_entries(4096); + GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_warriorb_1); + GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_warriorb_2); config.set_default_layout(layout_dualhsxs); @@ -533,15 +535,15 @@ void warriorb_state::warriorb(machine_config &config) lscreen.set_size(40*8, 32*8); lscreen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1); lscreen.set_screen_update(FUNC(warriorb_state::screen_update_left)); - lscreen.set_palette(m_palette); + lscreen.set_palette(m_tc0110pcr[0]); TC0100SCN(config, m_tc0100scn[0], 0); m_tc0100scn[0]->set_gfx_region(1); m_tc0100scn[0]->set_offsets(4, 0); - m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn[0]->set_palette(m_palette); + m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode[0]); + m_tc0100scn[0]->set_palette(m_tc0110pcr[0]); - TC0110PCR(config, m_tc0110pcr[0], 0, m_palette); + TC0110PCR(config, m_tc0110pcr[0], 0); screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER)); rscreen.set_refresh_hz(60); @@ -549,17 +551,17 @@ void warriorb_state::warriorb(machine_config &config) rscreen.set_size(40*8, 32*8); rscreen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1); rscreen.set_screen_update(FUNC(warriorb_state::screen_update_right)); - rscreen.set_palette("palette2"); + rscreen.set_palette(m_tc0110pcr[1]); TC0100SCN(config, m_tc0100scn[1], 0); - m_tc0100scn[1]->set_gfx_region(2); + m_tc0100scn[1]->set_gfx_region(1); m_tc0100scn[1]->set_offsets(4, 0); m_tc0100scn[1]->set_multiscr_xoffs(1); m_tc0100scn[1]->set_multiscr_hack(1); - m_tc0100scn[1]->set_gfxdecode_tag(m_gfxdecode); - m_tc0100scn[1]->set_palette("palette2"); + m_tc0100scn[1]->set_gfxdecode_tag(m_gfxdecode[1]); + m_tc0100scn[1]->set_palette(m_tc0110pcr[1]); - TC0110PCR(config, m_tc0110pcr[1], 0, "palette2"); + TC0110PCR(config, m_tc0110pcr[1], 0); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/includes/galastrm.h b/src/mame/includes/galastrm.h index 024f59c2593..6c7e4654d2a 100644 --- a/src/mame/includes/galastrm.h +++ b/src/mame/includes/galastrm.h @@ -53,8 +53,7 @@ public: m_tc0110pcr(*this, "tc0110pcr"), m_tc0480scp(*this, "tc0480scp"), m_gfxdecode(*this, "gfxdecode"), - m_screen(*this, "screen"), - m_palette(*this, "palette") + m_screen(*this, "screen") { } void galastrm(machine_config &config); @@ -75,7 +74,6 @@ private: required_device m_tc0480scp; required_device m_gfxdecode; required_device m_screen; - required_device m_palette; struct gs_tempsprite { diff --git a/src/mame/includes/ninjaw.h b/src/mame/includes/ninjaw.h index d7b910a7411..e89cacf7392 100644 --- a/src/mame/includes/ninjaw.h +++ b/src/mame/includes/ninjaw.h @@ -30,8 +30,7 @@ public: m_tc0110pcr(*this, "tc0110pcr_%u", 1), m_2610_l(*this, "2610.%u.l", 1), m_2610_r(*this, "2610.%u.r", 1), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), + m_gfxdecode(*this, "gfxdecode_%u", 1), m_spriteram(*this, "spriteram"), m_z80bank(*this, "z80bank") { } @@ -48,8 +47,7 @@ private: required_device_array m_tc0110pcr; required_device_array m_2610_l; required_device_array m_2610_r; - required_device m_gfxdecode; - required_device m_palette; + required_device_array m_gfxdecode; /* memory pointers */ required_shared_ptr m_spriteram; @@ -74,8 +72,8 @@ private: uint32_t screen_update_middle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void postload(); - void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int primask, int x_offs, int y_offs ); - void parse_control( ); + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int primask, int x_offs, int y_offs, int chip); + void parse_control(); uint32_t update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int xoffs, int chip); void darius2_master_map(address_map &map); void darius2_slave_map(address_map &map); diff --git a/src/mame/includes/othunder.h b/src/mame/includes/othunder.h index 4f2f387a951..d36820a8ab9 100644 --- a/src/mame/includes/othunder.h +++ b/src/mame/includes/othunder.h @@ -38,8 +38,7 @@ public: m_2610_1r(*this, "2610.1r"), m_2610_2l(*this, "2610.2l"), m_2610_2r(*this, "2610.2r"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") + m_gfxdecode(*this, "gfxdecode") { } void othunder(machine_config &config); @@ -97,7 +96,6 @@ private: required_device m_2610_2l; required_device m_2610_2r; required_device m_gfxdecode; - required_device m_palette; }; #endif // MAME_INCLUDES_OTHUNDER_H diff --git a/src/mame/includes/taito_f2.h b/src/mame/includes/taito_f2.h index 52dc8146e05..c36877be678 100644 --- a/src/mame/includes/taito_f2.h +++ b/src/mame/includes/taito_f2.h @@ -49,6 +49,7 @@ public: void taito_f2_tc0220ioc(machine_config &config); void taito_f2_tc0510nio(machine_config &config); void taito_f2_te7750(machine_config &config); + void taito_f2_tc0110pcr(machine_config &config); void taito_f2(machine_config &config); void thundfox(machine_config &config); void dinorex(machine_config &config); @@ -170,7 +171,7 @@ protected: optional_device m_tc0510nio; required_device m_gfxdecode; required_device m_screen; - required_device m_palette; + optional_device m_palette; DECLARE_WRITE8_MEMBER(coin_nibble_w); DECLARE_WRITE16_MEMBER(growl_coin_word_w); diff --git a/src/mame/includes/warriorb.h b/src/mame/includes/warriorb.h index 76f506beac9..0bdf456485e 100644 --- a/src/mame/includes/warriorb.h +++ b/src/mame/includes/warriorb.h @@ -27,8 +27,7 @@ public: m_tc0510nio(*this, "tc0510nio"), m_2610_l(*this, "2610.%u.l", 1), m_2610_r(*this, "2610.%u.r", 1), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), + m_gfxdecode(*this, "gfxdecode_%u", 1), m_spriteram(*this, "spriteram"), m_z80bank(*this, "z80bank") { } @@ -45,8 +44,7 @@ private: optional_device m_tc0510nio; required_device_array m_2610_l; required_device_array m_2610_r; - required_device m_gfxdecode; - required_device m_palette; + required_device_array m_gfxdecode; /* memory pointers */ required_shared_ptr m_spriteram; @@ -67,7 +65,7 @@ private: uint32_t screen_update_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int x_offs, int y_offs ); + void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int x_offs, int y_offs, int chip); uint32_t update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int xoffs, int chip); void darius2d_map(address_map &map); diff --git a/src/mame/video/ninjaw.cpp b/src/mame/video/ninjaw.cpp index 26d859cd716..2c96c0cfd5f 100644 --- a/src/mame/video/ninjaw.cpp +++ b/src/mame/video/ninjaw.cpp @@ -7,7 +7,7 @@ SPRITE DRAW ROUTINE ************************************************************/ -void ninjaw_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int primask, int x_offs, int y_offs ) +void ninjaw_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int primask, int x_offs, int y_offs, int chip) { int offs, data, tilenum, color, flipx, flipy; int x, y, priority, curx, cury; @@ -69,7 +69,7 @@ void ninjaw_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect cury = y; code = tilenum; - m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, + m_gfxdecode[chip]->gfx(0)->transpen(bitmap,cliprect, code, color, flipx, flipy, curx, cury, 0); @@ -104,15 +104,15 @@ uint32_t ninjaw_state::update_screen(screen_device &screen, bitmap_ind16 &bitmap /* Ensure screen blanked even when bottom layers not drawn due to disable bit */ if (nodraw) - bitmap.fill(m_palette->black_pen(), cliprect); + bitmap.fill(m_tc0110pcr[chip]->black_pen(), cliprect); /* Sprites can be under/over the layer below text layer */ - draw_sprites(bitmap, cliprect, 1, xoffs, 8); // draw sprites with priority 1 which are under the mid layer + draw_sprites(bitmap, cliprect, 1, xoffs, 8, chip); // draw sprites with priority 1 which are under the mid layer // draw middle layer tc0100scn->tilemap_draw(screen, bitmap, cliprect, layer[1], 0, 0); - draw_sprites(bitmap,cliprect,0,xoffs,8); // draw sprites with priority 0 which are over the mid layer + draw_sprites(bitmap, cliprect, 0, xoffs, 8, chip); // draw sprites with priority 0 which are over the mid layer // draw top(text) layer tc0100scn->tilemap_draw(screen, bitmap, cliprect, layer[2], 0, 0); diff --git a/src/mame/video/tc0110pcr.cpp b/src/mame/video/tc0110pcr.cpp index 6ad26828d6c..8abacae788a 100644 --- a/src/mame/video/tc0110pcr.cpp +++ b/src/mame/video/tc0110pcr.cpp @@ -15,17 +15,15 @@ The data bus is 16 bits wide. #include "emu.h" #include "tc0110pcr.h" -#define TC0110PCR_RAM_SIZE 0x2000 - DEFINE_DEVICE_TYPE(TC0110PCR, tc0110pcr_device, "tc0110pcr", "Taito TC0110PCR") -tc0110pcr_device::tc0110pcr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +tc0110pcr_device::tc0110pcr_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, TC0110PCR, tag, owner, clock) + , device_palette_interface(mconfig, *this) , m_ram(nullptr) , m_type(0) , m_addr(0) - , m_palette(*this, finder_base::DUMMY_TAG) { } @@ -66,12 +64,11 @@ void tc0110pcr_device::device_post_load() void tc0110pcr_device::restore_colors() { - int i, color, r = 0, g = 0, b = 0; - - for (i = 0; i < (256 * 16); i++) + for (int i = 0; i < (256 * 16); i++) { - color = m_ram[i]; + const u16 color = m_ram[i]; + u8 r = 0, g = 0, b = 0; switch (m_type) { case 0x00: @@ -99,12 +96,12 @@ void tc0110pcr_device::restore_colors() } } - m_palette->set_pen_color(i, rgb_t(r, g, b)); + set_pen_color(i, rgb_t(r, g, b)); } } -READ16_MEMBER(tc0110pcr_device::word_r ) +u16 tc0110pcr_device::word_r(offs_t offset) { switch (offset) { @@ -117,7 +114,7 @@ READ16_MEMBER(tc0110pcr_device::word_r ) } } -WRITE16_MEMBER(tc0110pcr_device::word_w ) +void tc0110pcr_device::word_w(offs_t offset, u16 data) { switch (offset) { @@ -130,7 +127,7 @@ WRITE16_MEMBER(tc0110pcr_device::word_w ) case 1: m_ram[m_addr] = data & 0xffff; - m_palette->set_pen_color(m_addr, pal5bit(data >> 0), pal5bit(data >> 5), pal5bit(data >> 10)); + set_pen_color(m_addr, pal5bit(data >> 0), pal5bit(data >> 5), pal5bit(data >> 10)); break; default: @@ -139,7 +136,7 @@ WRITE16_MEMBER(tc0110pcr_device::word_w ) } } -WRITE16_MEMBER(tc0110pcr_device::step1_word_w ) +void tc0110pcr_device::step1_word_w(offs_t offset, u16 data) { switch (offset) { @@ -151,7 +148,7 @@ WRITE16_MEMBER(tc0110pcr_device::step1_word_w ) case 1: m_ram[m_addr] = data & 0xffff; - m_palette->set_pen_color(m_addr, pal5bit(data >> 0), pal5bit(data >> 5), pal5bit(data >> 10)); + set_pen_color(m_addr, pal5bit(data >> 0), pal5bit(data >> 5), pal5bit(data >> 10)); break; default: @@ -160,7 +157,7 @@ WRITE16_MEMBER(tc0110pcr_device::step1_word_w ) } } -WRITE16_MEMBER(tc0110pcr_device::step1_rbswap_word_w ) +void tc0110pcr_device::step1_rbswap_word_w(offs_t offset, u16 data) { m_type = 1; /* xRRRRRGGGGGBBBBB */ @@ -174,7 +171,7 @@ WRITE16_MEMBER(tc0110pcr_device::step1_rbswap_word_w ) case 1: m_ram[m_addr] = data & 0xffff; - m_palette->set_pen_color(m_addr, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0)); + set_pen_color(m_addr, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0)); break; default: @@ -183,7 +180,7 @@ WRITE16_MEMBER(tc0110pcr_device::step1_rbswap_word_w ) } } -WRITE16_MEMBER(tc0110pcr_device::step1_4bpg_word_w ) +void tc0110pcr_device::step1_4bpg_word_w(offs_t offset, u16 data) { m_type = 2; /* xxxxBBBBGGGGRRRR */ @@ -197,7 +194,7 @@ WRITE16_MEMBER(tc0110pcr_device::step1_4bpg_word_w ) case 1: m_ram[m_addr] = data & 0xffff; - m_palette->set_pen_color(m_addr, pal4bit(data >> 0), pal4bit(data >> 4), pal4bit(data >> 8)); + set_pen_color(m_addr, pal4bit(data >> 0), pal4bit(data >> 4), pal4bit(data >> 8)); break; default: diff --git a/src/mame/video/tc0110pcr.h b/src/mame/video/tc0110pcr.h index cb0b4be2772..573e5d54ad4 100644 --- a/src/mame/video/tc0110pcr.h +++ b/src/mame/video/tc0110pcr.h @@ -8,22 +8,16 @@ #include "emupal.h" -class tc0110pcr_device : public device_t +class tc0110pcr_device : public device_t, public device_palette_interface { public: - template tc0110pcr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&palette_tag) - : tc0110pcr_device(mconfig, tag, owner, clock) - { - m_palette.set_tag(std::forward(palette_tag)); - } + tc0110pcr_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - tc0110pcr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - DECLARE_READ16_MEMBER( word_r ); - DECLARE_WRITE16_MEMBER( word_w ); /* color index goes up in step of 2 */ - DECLARE_WRITE16_MEMBER( step1_word_w ); /* color index goes up in step of 1 */ - DECLARE_WRITE16_MEMBER( step1_rbswap_word_w ); /* swaps red and blue components */ - DECLARE_WRITE16_MEMBER( step1_4bpg_word_w ); /* only 4 bits per color gun */ + u16 word_r(offs_t offset); + void word_w(offs_t offset, u16 data); /* color index goes up in step of 2 */ + void step1_word_w(offs_t offset, u16 data); /* color index goes up in step of 1 */ + void step1_rbswap_word_w(offs_t offset, u16 data); /* swaps red and blue components */ + void step1_4bpg_word_w(offs_t offset, u16 data); /* only 4 bits per color gun */ void restore_colors(); @@ -33,11 +27,15 @@ protected: virtual void device_reset() override; virtual void device_post_load() override; + // device_palette_interface overrides + virtual u32 palette_entries() const override { return TC0110PCR_RAM_SIZE; } + private: + static const unsigned TC0110PCR_RAM_SIZE = 0x2000 / 2; + std::unique_ptr m_ram; int m_type; int m_addr; - required_device m_palette; }; DECLARE_DEVICE_TYPE(TC0110PCR, tc0110pcr_device) diff --git a/src/mame/video/warriorb.cpp b/src/mame/video/warriorb.cpp index 2af06ebd4aa..ec51b5e18a9 100644 --- a/src/mame/video/warriorb.cpp +++ b/src/mame/video/warriorb.cpp @@ -8,7 +8,7 @@ SPRITE DRAW ROUTINE ************************************************************/ -void warriorb_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int x_offs, int y_offs ) +void warriorb_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int x_offs, int y_offs, int chip) { int offs, data, data2, tilenum, color, flipx, flipy; int x, y, priority, pri_mask; @@ -54,7 +54,7 @@ void warriorb_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, if (x > 0x3c0) x -= 0x400; if (y > 0x180) y -= 0x200; - m_gfxdecode->gfx(0)->prio_transpen(bitmap,cliprect, + m_gfxdecode[chip]->gfx(0)->prio_transpen(bitmap,cliprect, tilenum, color, flipx,flipy, @@ -93,13 +93,13 @@ uint32_t warriorb_state::update_screen(screen_device &screen, bitmap_ind16 &bitm /* Ensure screen blanked even when bottom layers not drawn due to disable bit */ if (nodraw) - bitmap.fill(m_palette->black_pen(), cliprect); + bitmap.fill(m_tc0110pcr[chip]->black_pen(), cliprect); // draw middle layer tc0100scn->tilemap_draw(screen, bitmap, cliprect, layer[1], 0, 1); /* Sprites can be under/over the layer below text layer */ - draw_sprites(screen, bitmap, cliprect, xoffs * chip, 8); // draw sprites + draw_sprites(screen, bitmap, cliprect, xoffs * chip, 8, chip); // draw sprites // draw top(text) layer tc0100scn->tilemap_draw(screen, bitmap, cliprect, layer[2], 0, 0);