Merge pull request #5207 from cam900/tc0100scn_gfx

tc0100scn.cpp : Updates
This commit is contained in:
R. Belmont 2019-06-11 09:39:13 -04:00 committed by GitHub
commit 61e5786702
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 272 additions and 441 deletions

View file

@ -755,15 +755,6 @@ static INPUT_PORTS_START( eto )
INPUT_PORTS_END
/**************************************************************
GFX DECODING
**************************************************************/
static GFXDECODE_START( gfx_asuka )
GFXDECODE_ENTRY( "tc0100scn", 0, gfx_8x8x4_packed_msb, 0, 256 ) /* SCR */
GFXDECODE_END
/***********************************************************
MACHINE DRIVERS
***********************************************************/
@ -845,16 +836,12 @@ void asuka_state::bonzeadv(machine_config &config)
screen.screen_vblank().set(FUNC(asuka_state::screen_vblank));
screen.set_palette(m_tc0110pcr);
GFXDECODE(config, "gfxdecode", m_tc0110pcr, gfx_asuka);
PC090OJ(config, m_pc090oj, 0);
m_pc090oj->set_offsets(0, 8);
m_pc090oj->set_palette(m_tc0110pcr);
m_pc090oj->set_colpri_callback(FUNC(asuka_state::bonzeadv_colpri_cb), this);
TC0100SCN(config, m_tc0100scn, 0);
m_tc0100scn->set_gfx_region(0);
m_tc0100scn->set_gfxdecode_tag("gfxdecode");
m_tc0100scn->set_palette(m_tc0110pcr);
TC0110PCR(config, m_tc0110pcr, 0);
@ -903,8 +890,6 @@ void asuka_state::asuka(machine_config &config)
screen.screen_vblank().set(FUNC(asuka_state::screen_vblank));
screen.set_palette(m_tc0110pcr);
GFXDECODE(config, "gfxdecode", m_tc0110pcr, gfx_asuka);
PC090OJ(config, m_pc090oj, 0);
m_pc090oj->set_offsets(0, 8);
m_pc090oj->set_usebuffer(true);
@ -912,8 +897,6 @@ void asuka_state::asuka(machine_config &config)
m_pc090oj->set_colpri_callback(FUNC(asuka_state::asuka_colpri_cb), this);
TC0100SCN(config, m_tc0100scn, 0);
m_tc0100scn->set_gfx_region(0);
m_tc0100scn->set_gfxdecode_tag("gfxdecode");
m_tc0100scn->set_palette(m_tc0110pcr);
TC0110PCR(config, m_tc0110pcr, 0);
@ -974,8 +957,6 @@ void asuka_state::cadash(machine_config &config)
screen.screen_vblank().set(FUNC(asuka_state::screen_vblank));
screen.set_palette(m_tc0110pcr);
GFXDECODE(config, "gfxdecode", m_tc0110pcr, gfx_asuka);
PC090OJ(config, m_pc090oj, 0);
m_pc090oj->set_offsets(0, 8);
m_pc090oj->set_usebuffer(true);
@ -983,9 +964,7 @@ void asuka_state::cadash(machine_config &config)
m_pc090oj->set_colpri_callback(FUNC(asuka_state::bonzeadv_colpri_cb), this);
TC0100SCN(config, m_tc0100scn, 0);
m_tc0100scn->set_gfx_region(0);
m_tc0100scn->set_offsets(1, 0);
m_tc0100scn->set_gfxdecode_tag("gfxdecode");
m_tc0100scn->set_palette(m_tc0110pcr);
TC0110PCR(config, m_tc0110pcr, 0);
@ -1034,17 +1013,13 @@ void asuka_state::mofflott(machine_config &config)
screen.screen_vblank().set(FUNC(asuka_state::screen_vblank));
screen.set_palette(m_tc0110pcr);
GFXDECODE(config, "gfxdecode", m_tc0110pcr, gfx_asuka);
PC090OJ(config, m_pc090oj, 0);
m_pc090oj->set_offsets(0, 8);
m_pc090oj->set_palette(m_tc0110pcr);
m_pc090oj->set_colpri_callback(FUNC(asuka_state::asuka_colpri_cb), this);
TC0100SCN(config, m_tc0100scn, 0);
m_tc0100scn->set_gfx_region(0);
m_tc0100scn->set_offsets(1, 0);
m_tc0100scn->set_gfxdecode_tag("gfxdecode");
m_tc0100scn->set_palette(m_tc0110pcr);
TC0110PCR(config, m_tc0110pcr, 0);
@ -1101,17 +1076,13 @@ void asuka_state::eto(machine_config &config)
screen.screen_vblank().set(FUNC(asuka_state::screen_vblank));
screen.set_palette(m_tc0110pcr);
GFXDECODE(config, "gfxdecode", m_tc0110pcr, gfx_asuka);
PC090OJ(config, m_pc090oj, 0);
m_pc090oj->set_offsets(0, 8);
m_pc090oj->set_palette(m_tc0110pcr);
m_pc090oj->set_colpri_callback(FUNC(asuka_state::asuka_colpri_cb), this);
TC0100SCN(config, m_tc0100scn, 0);
m_tc0100scn->set_gfx_region(0);
m_tc0100scn->set_offsets(1, 0);
m_tc0100scn->set_gfxdecode_tag("gfxdecode");
m_tc0100scn->set_palette(m_tc0110pcr);
TC0110PCR(config, m_tc0110pcr, 0);

View file

@ -165,7 +165,7 @@ static const gfx_layout tile16x16_layout =
};
static GFXDECODE_START( gfx_galastrm )
GFXDECODE_ENTRY( "sprites", 0x0, tile16x16_layout, 0, 4096/16 )
GFXDECODE_ENTRY( "sprites", 0x0, tile16x16_layout, 0, 4096/16 )
GFXDECODE_END
@ -210,9 +210,7 @@ void galastrm_state::galastrm(machine_config &config)
GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_galastrm);
TC0100SCN(config, m_tc0100scn, 0);
m_tc0100scn->set_gfx_region(0); // TODO : no ROMs?
m_tc0100scn->set_offsets(-48, -56);
m_tc0100scn->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn->set_palette(m_tc0110pcr);
TC0480SCP(config, m_tc0480scp, 0);
@ -238,6 +236,8 @@ ROM_START( galastrm )
ROM_LOAD16_BYTE( "c99_23.ic8", 0x100000, 0x20000, CRC(5718ee92) SHA1(33cfa60c5bceb1525498f27b598067d2dc620431) )
ROM_LOAD16_BYTE( "c99_22.ic7", 0x100001, 0x20000, CRC(b90f7c42) SHA1(e2fa9ee10ad61ae1a672c3357c0072b79ec7fbcb) )
ROM_REGION( 0x100, "tc0100scn", ROMREGION_ERASE00 ) // no roms for tc0100scn, dummy
ROM_REGION( 0x200000, "tc0480scp", 0 )
ROM_LOAD32_WORD( "c99-05.ic1", 0x000000, 0x100000, CRC(a91ffba4) SHA1(467af9646ddad5fbb520b6bc13517ed4deacf479) ) /* SCR 16x16 tiles */
ROM_LOAD32_WORD( "c99-06.ic2", 0x000002, 0x100000, CRC(812ed3ae) SHA1(775904dd42643d0e3a30890590d5f8eac1fe78db) )

View file

@ -138,8 +138,8 @@ void groundfx_state::groundfx_map(address_map &map)
map(0x700000, 0x7007ff).rw("taito_en:dpram", FUNC(mb8421_device::left_r), FUNC(mb8421_device::left_w));
map(0x800000, 0x80ffff).rw(m_tc0480scp, FUNC(tc0480scp_device::ram_r), FUNC(tc0480scp_device::ram_w)); /* tilemaps */
map(0x830000, 0x83002f).rw(m_tc0480scp, FUNC(tc0480scp_device::ctrl_r), FUNC(tc0480scp_device::ctrl_w)); // debugging
map(0x900000, 0x90ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* 6bpp tilemaps */
map(0x920000, 0x92000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).rw(m_tc0620scc, FUNC(tc0620scc_device::ram_r), FUNC(tc0620scc_device::ram_w)); /* 6bpp tilemaps */
map(0x920000, 0x92000f).rw(m_tc0620scc, FUNC(tc0620scc_device::ctrl_r), FUNC(tc0620scc_device::ctrl_w));
map(0xa00000, 0xa0ffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
map(0xb00000, 0xb003ff).ram(); // ?? single bytes, blending ??
map(0xc00000, 0xc00007).nopr(); /* Network? */
@ -194,21 +194,8 @@ static const gfx_layout tile16x16_layout =
16*16 /* every sprite takes 128 consecutive bytes */
};
static const gfx_layout layout_scc_6bpp_hi =
{
8,8,
RGN_FRAC(1,1),
2,
{ STEP2(0,1) },
{ STEP8(0,2) },
{ STEP8(0,8*2) },
8*8*2
};
static GFXDECODE_START( gfx_groundfx )
GFXDECODE_ENTRY( "sprites", 0x0, tile16x16_layout, 4096, 512 )
GFXDECODE_ENTRY( "tc0100scn", 0x0, gfx_8x8x4_packed_msb, 0, 512 ) // low 4bpp of 6bpp scc tiles
GFXDECODE_ENTRY( "tc0100scn:hi_gfx", 0x0, layout_scc_6bpp_hi, 0, 512 ) // hi 2bpp of 6bpp scc tiles
GFXDECODE_ENTRY( "sprites", 0x0, tile16x16_layout, 4096, 512 )
GFXDECODE_END
@ -260,11 +247,9 @@ void groundfx_state::groundfx(machine_config &config)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_groundfx);
PALETTE(config, m_palette).set_format(palette_device::xRGB_888, 16384);
TC0100SCN(config, m_tc0100scn, 0);
m_tc0100scn->set_gfx_region(1);
m_tc0100scn->set_offsets(50, 8);
m_tc0100scn->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn->set_palette(m_palette);
TC0620SCC(config, m_tc0620scc, 0);
m_tc0620scc->set_offsets(50, 8);
m_tc0620scc->set_palette(m_palette);
TC0480SCP(config, m_tc0480scp, 0);
m_tc0480scp->set_palette(m_palette);
@ -301,11 +286,11 @@ ROM_START( groundfx )
ROM_LOAD16_WORD_SWAP( "d51-06.50", 0x600000, 0x200000, CRC(d33ce2a0) SHA1(92c4504344672ea798cd6dd34f4b46848bf9f82b) )
ROM_LOAD16_WORD_SWAP( "d51-07.51", 0x800000, 0x200000, CRC(24b2f97d) SHA1(6980e67b435d189ce897c0301e0411763410ab47) )
ROM_REGION( 0x200000, "tc0100scn", 0 )
ROM_REGION( 0x200000, "tc0620scc", 0 )
ROM_LOAD16_BYTE( "d51-10.95", 0x000001, 0x100000, CRC(d5910604) SHA1(8efe13884cfdef208394ddfe19f43eb1b9f78ff3) ) /* SCC 8x8 tiles, 4bpp */
ROM_LOAD16_BYTE( "d51-11.96", 0x000000, 0x100000, CRC(fee5f5c6) SHA1(1be88747f9c71c348dd61a8f0040007df3a3e6a6) )
ROM_REGION( 0x100000, "tc0100scn:hi_gfx", 0 )
ROM_REGION( 0x100000, "tc0620scc:hi_gfx", 0 )
ROM_LOAD ( "d51-12.97", 0x000000, 0x100000, CRC(d630287b) SHA1(2fa09e1821b7280d193ca9a2a270759c3c3189d1) ) /* SCC 8x8 tiles, 2bpp */
ROM_REGION16_LE( 0x80000, "spritemap", 0 )
@ -344,41 +329,6 @@ void groundfx_state::init_groundfx()
{
/* Speedup handlers */
m_maincpu->space(AS_PROGRAM).install_read_handler(0x20b574, 0x20b577, read32_delegate(FUNC(groundfx_state::irq_speedup_r),this));
/* make SCC tile GFX format suitable for gfxdecode */
gfx_element *gx0 = m_gfxdecode->gfx(1);
gfx_element *gx1 = m_gfxdecode->gfx(2);
// allocate memory for the assembled data
u8 *srcdata = auto_alloc_array(machine(), u8, gx0->elements() * gx0->width() * gx0->height());
// loop over elements
u8 *dest = srcdata;
for (int c = 0; c < gx0->elements(); c++)
{
const u8 *c0base = gx0->get_data(c);
const u8 *c1base = gx1->get_data(c);
// loop over height
for (int y = 0; y < gx0->height(); y++)
{
const u8 *c0 = c0base;
const u8 *c1 = c1base;
for (int x = 0; x < gx0->width(); x++)
{
u8 hipix = *c1++;
*dest++ = (*c0++ & 0xf) | ((hipix << 4) & 0x30);
}
c0base += gx0->rowbytes();
c1base += gx1->rowbytes();
}
}
gx0->set_raw_layout(srcdata, gx0->width(), gx0->height(), gx0->elements(), 8 * gx0->width(), 8 * gx0->width() * gx0->height());
gx0->set_granularity(64);
m_gfxdecode->set_gfx(2, nullptr);
m_tc0100scn->update_granularity();
}

View file

@ -596,19 +596,8 @@ static const gfx_layout tilelayout =
128*8 /* every sprite takes 128 consecutive bytes */
};
static GFXDECODE_START( gfx_ninjaw_1 )
GFXDECODE_ENTRY( "sprites", 0, tilelayout, 0, 256 ) /* sprites */
GFXDECODE_ENTRY( "tc0100scn_1", 0, gfx_8x8x4_packed_msb, 0, 256 ) /* scr tiles (screen 1) */
GFXDECODE_END
static GFXDECODE_START( gfx_ninjaw_2 )
GFXDECODE_ENTRY( "sprites", 0, tilelayout, 0, 256 ) /* sprites */
GFXDECODE_ENTRY( "tc0100scn_2", 0, gfx_8x8x4_packed_msb, 0, 256 ) /* scr tiles (screen 2) */
GFXDECODE_END
static GFXDECODE_START( gfx_ninjaw_3 )
GFXDECODE_ENTRY( "sprites", 0, tilelayout, 0, 256 ) /* sprites */
GFXDECODE_ENTRY( "tc0100scn_3", 0, gfx_8x8x4_packed_msb, 0, 256 ) /* scr tiles (screen 3) */
static GFXDECODE_START( gfx_ninjaw )
GFXDECODE_ENTRY( "sprites", 0, tilelayout, 0, 256 ) /* sprites */
GFXDECODE_END
@ -737,9 +726,9 @@ void ninjaw_state::ninjaw(machine_config &config)
tc0040ioc.read_7_callback().set_ioport("IN2");
/* video hardware */
GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_ninjaw_1);
GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_ninjaw_2);
GFXDECODE(config, m_gfxdecode[2], m_tc0110pcr[2], gfx_ninjaw_3);
GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_ninjaw);
GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_ninjaw);
GFXDECODE(config, m_gfxdecode[2], m_tc0110pcr[2], gfx_ninjaw);
config.set_default_layout(layout_ninjaw);
@ -768,31 +757,25 @@ void ninjaw_state::ninjaw(machine_config &config)
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[0]);
m_tc0100scn[0]->set_palette(m_tc0110pcr[0]);
TC0110PCR(config, m_tc0110pcr[0], 0);
TC0100SCN(config, m_tc0100scn[1], 0);
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[1]);
m_tc0100scn[1]->set_palette(m_tc0110pcr[1]);
TC0110PCR(config, m_tc0110pcr[1], 0);
TC0100SCN(config, m_tc0100scn[2], 0);
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[2]);
m_tc0100scn[2]->set_palette(m_tc0110pcr[2]);
TC0110PCR(config, m_tc0110pcr[2], 0);
@ -849,9 +832,9 @@ void ninjaw_state::darius2(machine_config &config)
tc0040ioc.read_7_callback().set_ioport("IN2");
/* video hardware */
GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_ninjaw_1);
GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_ninjaw_2);
GFXDECODE(config, m_gfxdecode[2], m_tc0110pcr[2], gfx_ninjaw_3);
GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_ninjaw);
GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_ninjaw);
GFXDECODE(config, m_gfxdecode[2], m_tc0110pcr[2], gfx_ninjaw);
config.set_default_layout(layout_ninjaw);
@ -880,31 +863,25 @@ void ninjaw_state::darius2(machine_config &config)
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[0]);
m_tc0100scn[0]->set_palette(m_tc0110pcr[0]);
TC0110PCR(config, m_tc0110pcr[0], 0);
TC0100SCN(config, m_tc0100scn[1], 0);
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[1]);
m_tc0100scn[1]->set_palette(m_tc0110pcr[1]);
TC0110PCR(config, m_tc0110pcr[1], 0);
TC0100SCN(config, m_tc0100scn[2], 0);
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[2]);
m_tc0100scn[2]->set_palette(m_tc0110pcr[2]);
TC0110PCR(config, m_tc0110pcr[2], 0);

View file

@ -562,8 +562,7 @@ static const gfx_layout tile16x8_layout =
};
static GFXDECODE_START( gfx_othunder )
GFXDECODE_ENTRY( "sprites", 0, tile16x8_layout, 0, 256 ) /* sprite parts */
GFXDECODE_ENTRY( "tc0100scn", 0, gfx_8x8x4_packed_msb, 0, 256 ) /* sprites & playfield */
GFXDECODE_ENTRY( "sprites", 0, tile16x8_layout, 0, 256 ) /* sprite parts */
GFXDECODE_END
@ -618,9 +617,7 @@ void othunder_state::othunder(machine_config &config)
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_tc0110pcr);
TC0110PCR(config, m_tc0110pcr, 0);

View file

@ -2703,29 +2703,12 @@ static const gfx_layout layout_6bpp_hi =
};
static GFXDECODE_START( gfx_taitof2 )
GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_lsb, 0, 256 ) /* sprites */
GFXDECODE_ENTRY( "tc0100scn_1", 0, gfx_8x8x4_packed_msb, 0, 256 ) /* playfield */
GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_lsb, 0, 256 ) /* sprites */
GFXDECODE_END
static GFXDECODE_START( gfx_finalb )
GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_lsb, 0, 256 ) // low 4bpp of 6bpp sprites
GFXDECODE_ENTRY( "tc0100scn_1", 0, gfx_8x8x4_packed_msb, 0, 256 ) /* playfield */
GFXDECODE_ENTRY( "sprites_hi", 0, layout_6bpp_hi, 0, 256 ) // hi 2bpp of 6bpp sprites
GFXDECODE_END
static GFXDECODE_START( gfx_thundfox )
GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_lsb, 0, 256 ) /* sprites */
GFXDECODE_ENTRY( "tc0100scn_1", 0, gfx_8x8x4_packed_msb, 0, 256 ) /* playfield */
GFXDECODE_ENTRY( "tc0100scn_2", 0, gfx_8x8x4_packed_msb, 0, 256 ) /* playfield */
GFXDECODE_END
static GFXDECODE_START( gfx_yuyugogo )
GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_lsb, 0, 256 ) /* sprites */
GFXDECODE_ENTRY( "tc0100scn_1", 0, gfx_8x8x1, 0, 256 ) /* playfield */
GFXDECODE_END
static GFXDECODE_START( gfx_deadconx )
GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_lsb, 0, 256 ) /* sprites */
GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_lsb, 0, 256 ) // low 4bpp of 6bpp sprites
GFXDECODE_ENTRY( "sprites_hi", 0, layout_6bpp_hi, 0, 256 ) // hi 2bpp of 6bpp sprites
GFXDECODE_END
static const gfx_layout footchmpbl_tilelayout =
@ -2878,9 +2861,7 @@ void taitof2_state::finalb(machine_config &config)
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(1, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_tc0110pcr);
}
@ -2892,15 +2873,12 @@ void taitof2_state::dondokod(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::dondokod_map);
/* video hardware */
m_gfxdecode->set_info(gfx_taitof2);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,dondokod)
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri_roz));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0280GRD(config, m_tc0280grd, 0);
@ -2928,9 +2906,7 @@ void taitof2_state::megab(machine_config &config)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
@ -2944,27 +2920,22 @@ void taitof2_state::thundfox(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::thundfox_map);
/* video hardware */
m_gfxdecode->set_info(gfx_thundfox);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,thundfox)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_thundfox));
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed_thundfox));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_offsets_flip(5, 0);
m_tc0100scn[0]->set_offsets_fliptx(4, 1);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0100SCN(config, m_tc0100scn[1], 0);
m_tc0100scn[1]->set_gfx_region(2);
m_tc0100scn[1]->set_offsets(3, 0);
m_tc0100scn[1]->set_offsets_flip(5, 0);
m_tc0100scn[1]->set_offsets_fliptx(4, 1);
m_tc0100scn[1]->set_multiscr_xoffs(tc0100scn_device::SINGLE_VDU);
m_tc0100scn[1]->set_multiscr_hack(1);
m_tc0100scn[1]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[1]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
@ -2978,14 +2949,11 @@ void taitof2_state::cameltry(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::cameltry_map);
/* video hardware */
m_gfxdecode->set_info(gfx_taitof2);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,dondokod)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri_roz));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0280GRD(config, m_tc0280grd, 0);
@ -3005,12 +2973,10 @@ void taitof2_state::qtorimon(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::qtorimon_map);
/* video hardware */
m_gfxdecode->set_info(gfx_yuyugogo);
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_gfxlayout(TC0100SCN_LAYOUT_1BPP);
m_tc0100scn[0]->set_palette(m_tc0110pcr);
}
@ -3027,9 +2993,7 @@ void taitof2_state::liquidk(machine_config &config)
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
@ -3045,12 +3009,10 @@ void taitof2_state::quizhq(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::quizhq_map);
/* video hardware */
m_gfxdecode->set_info(gfx_yuyugogo);
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_gfxlayout(TC0100SCN_LAYOUT_1BPP);
m_tc0100scn[0]->set_palette(m_tc0110pcr);
}
@ -3069,9 +3031,7 @@ void taitof2_state::ssi(machine_config &config)
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed_thundfox));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
}
@ -3090,9 +3050,7 @@ void taitof2_state::gunfront(machine_config &config)
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
@ -3112,9 +3070,7 @@ void taitof2_state::growl(machine_config &config)
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 4096);
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
@ -3133,8 +3089,6 @@ void taitof2_state::mjnquest(machine_config &config)
MCFG_VIDEO_START_OVERRIDE(taitof2_state,mjnquest)
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_tc0110pcr);
m_tc0100scn[0]->set_tile_callback(FUNC(taitof2_state::mjnquest_tmap_cb), this);
}
@ -3147,7 +3101,6 @@ void taitof2_state::footchmp(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::footchmp_map);
/* video hardware */
m_gfxdecode->set_info(gfx_deadconx);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,footchmp)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_deadconx));
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_full_buffer_delayed));
@ -3178,7 +3131,6 @@ void taitof2_state::hthero(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::footchmp_map);
/* video hardware */
m_gfxdecode->set_info(gfx_deadconx);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,hthero)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_deadconx));
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_full_buffer_delayed));
@ -3206,10 +3158,8 @@ void taitof2_state::koshien(machine_config &config)
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 4096);
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(1, 0);
m_tc0100scn[0]->set_offsets_flip(2, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
@ -3225,14 +3175,12 @@ void taitof2_state::yuyugogo(machine_config &config)
m_palette->set_format(palette_device::RGBx_444, 4096);
/* video hardware */
m_gfxdecode->set_info(gfx_yuyugogo);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,yuyugogo)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_yesnoj));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_gfxlayout(TC0100SCN_LAYOUT_1BPP);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
}
@ -3258,9 +3206,7 @@ void taitof2_state::ninjak(machine_config &config)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(1, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
@ -3278,11 +3224,9 @@ void taitof2_state::solfigtr(machine_config &config)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_offsets_flip(6, 0);
m_tc0100scn[0]->set_offsets_fliptx(6, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
@ -3299,8 +3243,6 @@ void taitof2_state::qzquest(machine_config &config)
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
}
@ -3312,14 +3254,11 @@ void taitof2_state::pulirula(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::pulirula_map);
/* video hardware */
m_gfxdecode->set_info(gfx_taitof2);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,pulirula)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri_roz));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0430GRW(config, m_tc0430grw, 0);
@ -3337,7 +3276,6 @@ void taitof2_state::metalb(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::metalb_map);
/* video hardware */
m_gfxdecode->set_info(gfx_deadconx);
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 8192);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,metalb)
@ -3365,11 +3303,9 @@ void taitof2_state::qzchikyu(machine_config &config)
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed_qzchikyu));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(0, 0);
m_tc0100scn[0]->set_offsets_flip(-4, 0);
m_tc0100scn[0]->set_offsets_fliptx(-11, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
}
@ -3381,16 +3317,14 @@ void taitof2_state::yesnoj(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::yesnoj_map);
/* video hardware */
m_gfxdecode->set_info(gfx_yuyugogo);
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 4096);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,yesnoj)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_yesnoj));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_gfxlayout(TC0100SCN_LAYOUT_1BPP);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC8521(config, "rtc", XTAL(32'768));
@ -3404,7 +3338,6 @@ void taitof2_state::deadconx(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::deadconx_map);
/* video hardware */
m_gfxdecode->set_info(gfx_deadconx);
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 4096);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,deadconx)
@ -3427,7 +3360,6 @@ void taitof2_state::deadconxj(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::deadconx_map);
/* video hardware */
m_gfxdecode->set_info(gfx_deadconx);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,deadconxj)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_deadconx));
@ -3454,9 +3386,7 @@ void taitof2_state::dinorex(machine_config &config)
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 4096);
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
@ -3476,9 +3406,7 @@ void taitof2_state::qjinsei(machine_config &config)
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 4096);
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
@ -3498,9 +3426,7 @@ void taitof2_state::qcrayon(machine_config &config)
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 4096);
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
@ -3520,9 +3446,7 @@ void taitof2_state::qcrayon2(machine_config &config)
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 4096);
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
@ -3536,15 +3460,11 @@ void taitof2_state::driftout(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::driftout_map);
/* video hardware */
m_gfxdecode->set_info(gfx_taitof2);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,driftout)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri_roz));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0430GRW(config, m_tc0430grw, 0);
@ -3588,9 +3508,7 @@ void taitof2_state::cameltrya(machine_config &config)
MCFG_VIDEO_START_OVERRIDE(taitof2_state,dondokod)
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0280GRD(config, m_tc0280grd, 0);
@ -3652,9 +3570,7 @@ void taitof2_state::driveout(machine_config &config)
MCFG_VIDEO_START_OVERRIDE(taitof2_state,driftout)
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfx_region(1);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn[0]->set_palette(m_palette);
TC0430GRW(config, m_tc0430grw, 0);
@ -5373,7 +5289,7 @@ void taitof2_state::init_finalb()
{
/* convert from 2bits into 4bits format */
gfx_element *gx0 = m_gfxdecode->gfx(0);
gfx_element *gx1 = m_gfxdecode->gfx(2);
gfx_element *gx1 = m_gfxdecode->gfx(1);
// allocate memory for the assembled data
u8 *srcdata = auto_alloc_array(machine(), u8, gx0->elements() * gx0->width() * gx0->height());
@ -5404,7 +5320,7 @@ void taitof2_state::init_finalb()
gx0->set_raw_layout(srcdata, gx0->width(), gx0->height(), gx0->elements(), 8 * gx0->width(), 8 * gx0->width() * gx0->height());
gx0->set_colors(4096 / 64);
gx0->set_granularity(64);
m_gfxdecode->set_gfx(2, nullptr);
m_gfxdecode->set_gfx(1, nullptr);
}
void taitof2_state::init_cameltry()

View file

@ -3051,21 +3051,12 @@ static const gfx_layout tile16x16_layout =
};
static GFXDECODE_START( gfx_taitoz )
GFXDECODE_ENTRY( "sprites", 0x0, tile16x8_layout, 0, 256 ) /* sprite parts */
GFXDECODE_ENTRY( "tc0100scn", 0x0, gfx_8x8x4_packed_msb, 0, 256 ) /* playfield */
GFXDECODE_ENTRY( "sprites", 0x0, tile16x8_layout, 0, 256 ) /* sprite parts */
GFXDECODE_END
/* taitoic.c TC0100SCN routines expect scr stuff to be in second gfx
slot, so 2nd batch of obj must be placed third */
static GFXDECODE_START( gfx_chasehq )
GFXDECODE_ENTRY( "sprites", 0x0, tile16x16_layout, 0, 256 ) /* sprite parts */
GFXDECODE_ENTRY( "tc0100scn", 0x0, gfx_8x8x4_packed_msb, 0, 256 ) /* playfield */
GFXDECODE_ENTRY( "sprites2", 0x0, tile16x16_layout, 0, 256 ) /* sprite parts */
GFXDECODE_END
static GFXDECODE_START( gfx_dblaxle )
GFXDECODE_ENTRY( "sprites", 0x0, tile16x8_layout, 0, 256 ) /* sprite parts */
GFXDECODE_ENTRY( "sprites", 0x0, tile16x16_layout, 0, 256 ) /* sprite parts */
GFXDECODE_ENTRY( "sprites2", 0x0, tile16x16_layout, 0, 256 ) /* sprite parts */
GFXDECODE_END
@ -3176,8 +3167,6 @@ void taitoz_state::contcirc(machine_config &config)
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(m_tc0110pcr);
TC0150ROD(config, m_tc0150rod, 0);
@ -3245,8 +3234,6 @@ void taitoz_state::chasehq(machine_config &config)
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(m_tc0110pcr);
TC0150ROD(config, m_tc0150rod, 0);
@ -3314,8 +3301,6 @@ void taitoz_state::enforce(machine_config &config)
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(m_tc0110pcr);
TC0150ROD(config, m_tc0150rod, 0);
@ -3381,8 +3366,6 @@ void taitoz_state::bshark_base(machine_config &config)
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");
TC0150ROD(config, m_tc0150rod, 0);
@ -3464,8 +3447,6 @@ void taitoz_state::sci(machine_config &config)
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");
TC0150ROD(config, m_tc0150rod, 0);
@ -3538,8 +3519,6 @@ void taitoz_state::nightstr(machine_config &config)
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(m_tc0110pcr);
TC0150ROD(config, m_tc0150rod, 0);
@ -3607,8 +3586,6 @@ void taitoz_state::aquajack(machine_config &config)
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(m_tc0110pcr);
TC0150ROD(config, m_tc0150rod, 0);
@ -3679,9 +3656,7 @@ void taitoz_state::spacegun(machine_config &config)
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(m_tc0110pcr);
TC0110PCR(config, m_tc0110pcr, 0);
@ -3739,7 +3714,7 @@ void taitoz_state::dblaxle(machine_config &config)
screen.set_screen_update(FUNC(taitoz_state::screen_update_dblaxle));
screen.set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_dblaxle);
GFXDECODE(config, m_gfxdecode, "palette", gfx_taitoz);
PALETTE(config, "palette").set_format(palette_device::xBGR_555, 4096);
MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz)
@ -3806,7 +3781,7 @@ void taitoz_state::racingb(machine_config &config)
screen.set_screen_update(FUNC(taitoz_state::screen_update_racingb));
screen.set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_dblaxle);
GFXDECODE(config, m_gfxdecode, "palette", gfx_taitoz);
PALETTE(config, "palette").set_format(palette_device::xBGR_555, 4096);
MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz)

View file

@ -330,8 +330,8 @@ void undrfire_state::undrfire_map(address_map &map)
map(0x700000, 0x7007ff).rw("taito_en:dpram", FUNC(mb8421_device::left_r), FUNC(mb8421_device::left_w));
map(0x800000, 0x80ffff).rw(m_tc0480scp, FUNC(tc0480scp_device::ram_r), FUNC(tc0480scp_device::ram_w)); /* tilemaps */
map(0x830000, 0x83002f).rw(m_tc0480scp, FUNC(tc0480scp_device::ctrl_r), FUNC(tc0480scp_device::ctrl_w));
map(0x900000, 0x90ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* 6bpp tilemaps */
map(0x920000, 0x92000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).rw(m_tc0620scc, FUNC(tc0620scc_device::ram_r), FUNC(tc0620scc_device::ram_w)); /* 6bpp tilemaps */
map(0x920000, 0x92000f).rw(m_tc0620scc, FUNC(tc0620scc_device::ctrl_r), FUNC(tc0620scc_device::ctrl_w));
map(0xa00000, 0xa0ffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
map(0xb00000, 0xb003ff).ram(); /* single bytes, blending ??? */
map(0xd00000, 0xd00003).w(FUNC(undrfire_state::rotate_control_w)); /* perhaps port based rotate control? */
@ -350,8 +350,8 @@ void undrfire_state::cbombers_cpua_map(address_map &map)
map(0x700000, 0x7007ff).rw("taito_en:dpram", FUNC(mb8421_device::left_r), FUNC(mb8421_device::left_w));
map(0x800000, 0x80ffff).rw(m_tc0480scp, FUNC(tc0480scp_device::ram_r), FUNC(tc0480scp_device::ram_w)); /* tilemaps */
map(0x830000, 0x83002f).rw(m_tc0480scp, FUNC(tc0480scp_device::ctrl_r), FUNC(tc0480scp_device::ctrl_w));
map(0x900000, 0x90ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* 6bpp tilemaps */
map(0x920000, 0x92000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).rw(m_tc0620scc, FUNC(tc0620scc_device::ram_r), FUNC(tc0620scc_device::ram_w)); /* 6bpp tilemaps */
map(0x920000, 0x92000f).rw(m_tc0620scc, FUNC(tc0620scc_device::ctrl_r), FUNC(tc0620scc_device::ctrl_w));
map(0xa00000, 0xa0ffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
map(0xb00000, 0xb0000f).ram(); /* TC0360PRI */
map(0xc00000, 0xc00007).ram(); /* LAN controller? */
@ -497,21 +497,8 @@ static const gfx_layout tile16x16_layout =
16*16 /* every sprite takes 128 consecutive bytes */
};
static const gfx_layout layout_scc_6bpp_hi =
{
8,8,
RGN_FRAC(1,1),
2,
{ STEP2(0,1) },
{ STEP8(0,2) },
{ STEP8(0,8*2) },
8*8*2
};
static GFXDECODE_START( gfx_undrfire )
GFXDECODE_ENTRY( "sprites", 0x0, tile16x16_layout, 0, 512 )
GFXDECODE_ENTRY( "tc0100scn", 0x0, gfx_8x8x4_packed_msb, 0, 512 ) // low 4bpp of 6bpp scc tiles
GFXDECODE_ENTRY( "tc0100scn:hi_gfx", 0x0, layout_scc_6bpp_hi, 0, 512 ) // hi 2bpp of 6bpp scc tiles
GFXDECODE_ENTRY( "sprites", 0x0, tile16x16_layout, 0, 512 )
GFXDECODE_END
/***********************************************************
@ -557,11 +544,9 @@ void undrfire_state::undrfire(machine_config &config)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_undrfire);
PALETTE(config, m_palette).set_format(palette_device::xRGB_888, 16384);
TC0100SCN(config, m_tc0100scn, 0);
m_tc0100scn->set_gfx_region(1);
m_tc0100scn->set_offsets(50, 8);
m_tc0100scn->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn->set_palette(m_palette);
TC0620SCC(config, m_tc0620scc, 0);
m_tc0620scc->set_offsets(50, 8);
m_tc0620scc->set_palette(m_palette);
TC0480SCP(config, m_tc0480scp, 0);
m_tc0480scp->set_palette(m_palette);
@ -616,11 +601,9 @@ void undrfire_state::cbombers(machine_config &config)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_undrfire);
PALETTE(config, m_palette).set_format(palette_device::xRGB_888, 16384);
TC0100SCN(config, m_tc0100scn, 0);
m_tc0100scn->set_gfx_region(1);
m_tc0100scn->set_offsets(50, 8);
m_tc0100scn->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn->set_palette(m_palette);
TC0620SCC(config, m_tc0620scc, 0);
m_tc0620scc->set_offsets(50, 8);
m_tc0620scc->set_palette(m_palette);
TC0480SCP(config, m_tc0480scp, 0);
m_tc0480scp->set_palette(m_palette);
@ -659,11 +642,11 @@ ROM_START( undrfire )
ROM_LOAD16_WORD_SWAP( "d67-06", 0x600000, 0x200000, CRC(a2a63488) SHA1(a1ed140cc3757c3c05a0a822089c6efc83bf4805) )
ROM_LOAD16_WORD_SWAP( "d67-07", 0x800000, 0x200000, CRC(189c0ee5) SHA1(de85b39dc67f31ef80800ff6ec9a391652eb12e4) )
ROM_REGION( 0x200000, "tc0100scn", 0 )
ROM_REGION( 0x200000, "tc0620scc", 0 )
ROM_LOAD16_BYTE( "d67-10", 0x000001, 0x100000, CRC(d79e6ce9) SHA1(8b38302971816d599cdaa3279cb6395441373c6f) ) /* PIV 8x8 tiles, 4bpp */
ROM_LOAD16_BYTE( "d67-11", 0x000000, 0x100000, CRC(7a401bb3) SHA1(47257a6a4b37ec1ceb4e974b776ee3ea30db06fa) )
ROM_REGION( 0x100000, "tc0100scn:hi_gfx", 0 )
ROM_REGION( 0x100000, "tc0620scc:hi_gfx", 0 )
ROM_LOAD ( "d67-12", 0x000000, 0x100000, CRC(67b16fec) SHA1(af0f9f50516331780ef6cfab1e12a23edf87daa7) ) /* PIV 8x8 tiles, 2bpp */
ROM_REGION16_LE( 0x80000, "spritemap", 0 )
@ -700,11 +683,11 @@ ROM_START( undrfireu )
ROM_LOAD16_WORD_SWAP( "d67-06", 0x600000, 0x200000, CRC(a2a63488) SHA1(a1ed140cc3757c3c05a0a822089c6efc83bf4805) )
ROM_LOAD16_WORD_SWAP( "d67-07", 0x800000, 0x200000, CRC(189c0ee5) SHA1(de85b39dc67f31ef80800ff6ec9a391652eb12e4) )
ROM_REGION( 0x200000, "tc0100scn", 0 )
ROM_REGION( 0x200000, "tc0620scc", 0 )
ROM_LOAD16_BYTE( "d67-10", 0x000001, 0x100000, CRC(d79e6ce9) SHA1(8b38302971816d599cdaa3279cb6395441373c6f) ) /* PIV 8x8 tiles, 4bpp */
ROM_LOAD16_BYTE( "d67-11", 0x000000, 0x100000, CRC(7a401bb3) SHA1(47257a6a4b37ec1ceb4e974b776ee3ea30db06fa) )
ROM_REGION( 0x100000, "tc0100scn:hi_gfx", 0 )
ROM_REGION( 0x100000, "tc0620scc:hi_gfx", 0 )
ROM_LOAD ( "d67-12", 0x000000, 0x100000, CRC(67b16fec) SHA1(af0f9f50516331780ef6cfab1e12a23edf87daa7) ) /* PIV 8x8 tiles, 2bpp */
ROM_REGION16_LE( 0x80000, "spritemap", 0 )
@ -740,11 +723,11 @@ ROM_START( undrfirej )
ROM_LOAD16_WORD_SWAP( "d67-06", 0x600000, 0x200000, CRC(a2a63488) SHA1(a1ed140cc3757c3c05a0a822089c6efc83bf4805) )
ROM_LOAD16_WORD_SWAP( "d67-07", 0x800000, 0x200000, CRC(189c0ee5) SHA1(de85b39dc67f31ef80800ff6ec9a391652eb12e4) )
ROM_REGION( 0x200000, "tc0100scn", 0 )
ROM_REGION( 0x200000, "tc0620scc", 0 )
ROM_LOAD16_BYTE( "d67-10", 0x000001, 0x100000, CRC(d79e6ce9) SHA1(8b38302971816d599cdaa3279cb6395441373c6f) ) /* PIV 8x8 tiles, 4bpp */
ROM_LOAD16_BYTE( "d67-11", 0x000000, 0x100000, CRC(7a401bb3) SHA1(47257a6a4b37ec1ceb4e974b776ee3ea30db06fa) )
ROM_REGION( 0x100000, "tc0100scn:hi_gfx", 0 )
ROM_REGION( 0x100000, "tc0620scc:hi_gfx", 0 )
ROM_LOAD ( "d67-12", 0x000000, 0x100000, CRC(67b16fec) SHA1(af0f9f50516331780ef6cfab1e12a23edf87daa7) ) /* PIV 8x8 tiles, 2bpp */
ROM_REGION16_LE( 0x80000, "spritemap", 0 )
@ -789,11 +772,11 @@ ROM_START( cbombers )
ROM_LOAD16_WORD_SWAP( "d83_14.ic44", 0xb00000, 0x100000, CRC(8b6f4f12) SHA1(6a28004d287f00627622376aa3d6704f2684a6f3) )
ROM_LOAD16_WORD_SWAP( "d83_15.ic42", 0xe00000, 0x100000, CRC(1b71175e) SHA1(60ad38ce97fd7995ff2f29d6b1a3b873dc2f0eb3) )
ROM_REGION( 0x200000, "tc0100scn", 0 )
ROM_REGION( 0x200000, "tc0620scc", 0 )
ROM_LOAD16_BYTE( "d83_16.ic19", 0x000001, 0x100000, CRC(d364cf1e) SHA1(ee43f50edf50ec840acfb98b1314140ee9693839) )
ROM_LOAD16_BYTE( "d83_17.ic5", 0x000000, 0x100000, CRC(0ffe737c) SHA1(5923a4edf9d0c8339f793840c2bdc691e2c651e6) )
ROM_REGION( 0x100000, "tc0100scn:hi_gfx", 0 )
ROM_REGION( 0x100000, "tc0620scc:hi_gfx", 0 )
ROM_LOAD ( "d83_18.ic6", 0x000000, 0x100000, CRC(87979155) SHA1(0ffafa970f9f9c98f8938104b97e63d2b5757804) )
ROM_REGION16_LE( 0x80000, "spritemap", 0 )
@ -844,11 +827,11 @@ ROM_START( cbombersj )
ROM_LOAD16_WORD_SWAP( "d83_14.ic44", 0xb00000, 0x100000, CRC(8b6f4f12) SHA1(6a28004d287f00627622376aa3d6704f2684a6f3) )
ROM_LOAD16_WORD_SWAP( "d83_15.ic42", 0xe00000, 0x100000, CRC(1b71175e) SHA1(60ad38ce97fd7995ff2f29d6b1a3b873dc2f0eb3) )
ROM_REGION( 0x200000, "tc0100scn", 0 )
ROM_REGION( 0x200000, "tc0620scc", 0 )
ROM_LOAD16_BYTE( "d83_16.ic19", 0x000001, 0x100000, CRC(d364cf1e) SHA1(ee43f50edf50ec840acfb98b1314140ee9693839) )
ROM_LOAD16_BYTE( "d83_17.ic5", 0x000000, 0x100000, CRC(0ffe737c) SHA1(5923a4edf9d0c8339f793840c2bdc691e2c651e6) )
ROM_REGION( 0x100000, "tc0100scn:hi_gfx", 0 )
ROM_REGION( 0x100000, "tc0620scc:hi_gfx", 0 )
ROM_LOAD ( "d83_18.ic6", 0x000000, 0x100000, CRC(87979155) SHA1(0ffafa970f9f9c98f8938104b97e63d2b5757804) )
ROM_REGION16_LE( 0x80000, "spritemap", 0 )
@ -930,13 +913,13 @@ ROM_START( cbombersp )
ROM_LOAD16_BYTE( "ic80_d511.bin", 0x0b00000, 0x80000, CRC(37da5baf) SHA1(a78ac413de08a1ff70ab14561b75df633a9e5be8) ) // bp 4
ROM_LOAD16_BYTE( "ic82_3d3d.bin", 0x0e00000, 0x80000, CRC(3e62970e) SHA1(82970accb4ce29034e7b97b74c831ec0314c5a8f) ) // bp 5
ROM_REGION( 0x200000, "tc0100scn", 0 )
ROM_REGION( 0x200000, "tc0620scc", 0 )
ROM_LOAD16_BYTE( "ic44_scc1.bin", 0x000000, 0x080000, CRC(868d0d3d) SHA1(29251d545548856296b5ae32a96f2eeef2418dc4) )
ROM_LOAD16_BYTE( "ic43_scc4.bin", 0x000001, 0x080000, CRC(2f170ee4) SHA1(2b8f07186c9f7589e1af131b8c377443a29bd149) )
ROM_LOAD16_BYTE( "ic58_f357.bin", 0x100000, 0x080000, CRC(16486967) SHA1(c2fd6c9f21232656b52ab589ac61f94aa728524e) )
ROM_LOAD16_BYTE( "ic57_1a62.bin", 0x100001, 0x080000, CRC(afd45e35) SHA1(6d7c0729c7d2b204473679b97923130e289f429d) )
ROM_REGION( 0x100000, "tc0100scn:hi_gfx", 0 )
ROM_REGION( 0x100000, "tc0620scc:hi_gfx", 0 )
ROM_LOAD ( "ic45_5cc2.bin", 0x000000, 0x080000, CRC(7ae48d63) SHA1(2a8b291f0a683ed5b0c39d221737956b6fc72fa5) )
ROM_LOAD ( "ic59_7cce.bin", 0x080000, 0x080000, CRC(ee762199) SHA1(d56e96feeedba8b77f8f18cb380d2902ca3f1e50) )
@ -967,48 +950,9 @@ ROM_START( cbombersp )
ROM_END
void undrfire_state::driver_init()
{
/* make SCC tile GFX format suitable for gfxdecode */
gfx_element *gx0 = m_gfxdecode->gfx(1);
gfx_element *gx1 = m_gfxdecode->gfx(2);
// allocate memory for the assembled data
u8 *srcdata = auto_alloc_array(machine(), u8, gx0->elements() * gx0->width() * gx0->height());
// loop over elements
u8 *dest = srcdata;
for (int c = 0; c < gx0->elements(); c++)
{
const u8 *c0base = gx0->get_data(c);
const u8 *c1base = gx1->get_data(c);
// loop over height
for (int y = 0; y < gx0->height(); y++)
{
const u8 *c0 = c0base;
const u8 *c1 = c1base;
for (int x = 0; x < gx0->width(); x++)
{
u8 hipix = *c1++;
*dest++ = (*c0++ & 0xf) | ((hipix << 4) & 0x30);
}
c0base += gx0->rowbytes();
c1base += gx1->rowbytes();
}
}
gx0->set_raw_layout(srcdata, gx0->width(), gx0->height(), gx0->elements(), 8 * gx0->width(), 8 * gx0->width() * gx0->height());
gx0->set_granularity(64);
m_gfxdecode->set_gfx(2, nullptr);
m_tc0100scn->update_granularity();
}
GAME( 1993, undrfire, 0, undrfire, undrfire, undrfire_state, driver_init, ROT0, "Taito Corporation Japan", "Under Fire (World)", 0 )
GAME( 1993, undrfireu, undrfire, undrfire, undrfire, undrfire_state, driver_init, ROT0, "Taito America Corporation", "Under Fire (US)", 0 )
GAME( 1993, undrfirej, undrfire, undrfire, undrfire, undrfire_state, driver_init, ROT0, "Taito Corporation", "Under Fire (Japan)", 0 )
GAMEL(1994, cbombers, 0, cbombers, cbombers, undrfire_state, driver_init, ROT0, "Taito Corporation Japan", "Chase Bombers (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN, layout_cbombers )
GAMEL(1994, cbombersj, cbombers, cbombers, cbombers, undrfire_state, driver_init, ROT0, "Taito Corporation", "Chase Bombers (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN, layout_cbombers )
GAMEL(1994, cbombersp, cbombers, cbombers, cbombers, undrfire_state, driver_init, ROT0, "Taito Corporation", "Chase Bombers (Japan Prototype)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN, layout_cbombers )
GAME( 1993, undrfire, 0, undrfire, undrfire, undrfire_state, empty_init, ROT0, "Taito Corporation Japan", "Under Fire (World)", 0 )
GAME( 1993, undrfireu, undrfire, undrfire, undrfire, undrfire_state, empty_init, ROT0, "Taito America Corporation", "Under Fire (US)", 0 )
GAME( 1993, undrfirej, undrfire, undrfire, undrfire, undrfire_state, empty_init, ROT0, "Taito Corporation", "Under Fire (Japan)", 0 )
GAMEL(1994, cbombers, 0, cbombers, cbombers, undrfire_state, empty_init, ROT0, "Taito Corporation Japan", "Chase Bombers (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN, layout_cbombers )
GAMEL(1994, cbombersj, cbombers, cbombers, cbombers, undrfire_state, empty_init, ROT0, "Taito Corporation", "Chase Bombers (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN, layout_cbombers )
GAMEL(1994, cbombersp, cbombers, cbombers, cbombers, undrfire_state, empty_init, ROT0, "Taito Corporation", "Chase Bombers (Japan Prototype)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN, layout_cbombers )

View file

@ -376,14 +376,8 @@ INPUT_PORTS_END
GFX DECODING
***********************************************************/
static GFXDECODE_START( gfx_warriorb_1 )
GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_lsb, 0, 256 ) /* sprites */
GFXDECODE_ENTRY( "tc0100scn_1", 0, gfx_8x8x4_packed_msb, 0, 256 ) /* scr tiles (screen 1) */
GFXDECODE_END
static GFXDECODE_START( gfx_warriorb_2 )
GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_lsb, 0, 256 ) /* sprites */
GFXDECODE_ENTRY( "tc0100scn_2", 0, gfx_8x8x4_packed_msb, 0, 256 ) /* scr tiles (screen 2) */
static GFXDECODE_START( gfx_warriorb )
GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_lsb, 0, 256 ) /* sprites */
GFXDECODE_END
/***********************************************************
@ -422,8 +416,8 @@ void warriorb_state::darius2d(machine_config &config)
m_tc0220ioc->read_7_callback().set_ioport("IN2");
/* video hardware */
GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_warriorb_1);
GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_warriorb_2);
GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_warriorb);
GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_warriorb);
config.set_default_layout(layout_dualhsxs);
@ -436,9 +430,7 @@ void warriorb_state::darius2d(machine_config &config)
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[0]);
m_tc0100scn[0]->set_palette(m_tc0110pcr[0]);
TC0110PCR(config, m_tc0110pcr[0], 0);
@ -452,10 +444,8 @@ void warriorb_state::darius2d(machine_config &config)
rscreen.set_palette(m_tc0110pcr[1]);
TC0100SCN(config, m_tc0100scn[1], 0);
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[1]);
m_tc0100scn[1]->set_palette(m_tc0110pcr[1]);
TC0110PCR(config, m_tc0110pcr[1], 0);
@ -502,8 +492,8 @@ void warriorb_state::warriorb(machine_config &config)
m_tc0510nio->read_7_callback().set_ioport("IN2");
/* video hardware */
GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_warriorb_1);
GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_warriorb_2);
GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_warriorb);
GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_warriorb);
config.set_default_layout(layout_dualhsxs);
@ -516,9 +506,7 @@ void warriorb_state::warriorb(machine_config &config)
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[0]);
m_tc0100scn[0]->set_palette(m_tc0110pcr[0]);
TC0110PCR(config, m_tc0110pcr[0], 0);
@ -532,11 +520,9 @@ void warriorb_state::warriorb(machine_config &config)
rscreen.set_palette(m_tc0110pcr[1]);
TC0100SCN(config, m_tc0100scn[1], 0);
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[1]);
m_tc0100scn[1]->set_palette(m_tc0110pcr[1]);
TC0110PCR(config, m_tc0110pcr[1], 0);

View file

@ -637,8 +637,7 @@ void wgp_state::cpu2_map(address_map &map)
map(0x140000, 0x143fff).ram().share("sharedram");
map(0x200001, 0x200001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w));
map(0x200003, 0x200003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
// AM_RANGE(0x380000, 0x383fff) AM_READONLY // LAN RAM
// AM_RANGE(0x380000, 0x383fff) AM_WRITEONLY // LAN RAM
// map(0x380000, 0x383fff).ram(); // LAN RAM
map(0x380000, 0x380001).r(FUNC(wgp_state::lan_status_r)); // ??
// a lan input area is read somewhere above the status
// (make the status return 0 and log)...
@ -831,11 +830,9 @@ INPUT_PORTS_END
GFX DECODING
***********************************************************/
/* taitoic.c TC0100SCN routines expect scr stuff to be in second gfx slot */
static GFXDECODE_START( gfx_wgp )
GFXDECODE_ENTRY( "sprites", 0x0, gfx_16x16x4_packed_lsb, 0, 256 ) /* sprites */
GFXDECODE_ENTRY( "tc0100scn", 0x0, gfx_8x8x4_packed_msb, 0, 256 ) /* playfield */
GFXDECODE_ENTRY( "piv", 0x0, gfx_16x16x4_packed_lsb, 0, 256 ) /* piv */
GFXDECODE_ENTRY( "sprites", 0x0, gfx_16x16x4_packed_lsb, 0, 256 ) /* sprites */
GFXDECODE_ENTRY( "piv", 0x0, gfx_16x16x4_packed_lsb, 0, 256 ) /* piv */
GFXDECODE_END
@ -916,8 +913,6 @@ void wgp_state::wgp(machine_config &config)
PALETTE(config, m_palette).set_format(palette_device::RGBx_444, 4096);
TC0100SCN(config, m_tc0100scn, 0);
m_tc0100scn->set_gfx_region(1);
m_tc0100scn->set_gfxdecode_tag(m_gfxdecode);
m_tc0100scn->set_palette(m_palette);
/* sound hardware */

View file

@ -27,7 +27,7 @@ public:
m_ram(*this, "ram"),
m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"),
m_tc0100scn(*this, "tc0100scn"),
m_tc0620scc(*this, "tc0620scc"),
m_tc0480scp(*this, "tc0480scp"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
@ -45,7 +45,7 @@ private:
required_shared_ptr<u32> m_spriteram;
required_device<cpu_device> m_maincpu;
required_device<tc0100scn_device> m_tc0100scn;
required_device<tc0620scc_device> m_tc0620scc;
required_device<tc0480scp_device> m_tc0480scp;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;

View file

@ -17,7 +17,7 @@ public:
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_subcpu(*this, "sub"),
m_tc0100scn(*this, "tc0100scn"),
m_tc0620scc(*this, "tc0620scc"),
m_tc0480scp(*this, "tc0480scp"),
m_eeprom(*this, "eeprom"),
m_ram(*this, "ram"),
@ -35,8 +35,6 @@ public:
void undrfire(machine_config &config);
void cbombers(machine_config &config);
void driver_init() override;
protected:
enum
{
@ -58,7 +56,7 @@ private:
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_subcpu;
required_device<tc0100scn_device> m_tc0100scn;
required_device<tc0620scc_device> m_tc0620scc;
required_device<tc0480scp_device> m_tc0480scp;
required_device<eeprom_serial_93cxx_device> m_eeprom;
optional_shared_ptr<u32> m_ram;

View file

@ -194,7 +194,7 @@ u32 groundfx_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
u8 layer[5];
u8 scclayer[3];
m_tc0100scn->tilemap_update();
m_tc0620scc->tilemap_update();
m_tc0480scp->tilemap_update();
const u16 priority = m_tc0480scp->get_bg_priority();
@ -205,15 +205,15 @@ u32 groundfx_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
layer[3] = (priority & 0x000f) >> 0; /* tells us which is top */
layer[4] = 4; /* text layer always over bg layers */
scclayer[0] = m_tc0100scn->bottomlayer();
scclayer[0] = m_tc0620scc->bottomlayer();
scclayer[1] = scclayer[0]^1;
scclayer[2] = 2;
screen.priority().fill(0, cliprect);
bitmap.fill(0, cliprect); /* wrong color? */
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[0], TILEMAP_DRAW_OPAQUE, 0);
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[1], 0, 0);
m_tc0620scc->tilemap_draw(screen, bitmap, cliprect, scclayer[0], TILEMAP_DRAW_OPAQUE, 0);
m_tc0620scc->tilemap_draw(screen, bitmap, cliprect, scclayer[1], 0, 0);
/* BIG HACK!
@ -231,14 +231,14 @@ u32 groundfx_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
it's contents the usual way.
*/
if (m_tc0100scn->ram_r(0x4090 / 2) || m_tc0100scn->ram_r(0x4092 / 2) ||
if (m_tc0620scc->ram_r(0x4090 / 2) || m_tc0620scc->ram_r(0x4092 / 2) ||
((m_tc0480scp->ram_r(0x20 / 2) == 0x24) && (m_tc0480scp->ram_r(0x22 / 2) == 0x0866))) /* Anything in text layer - really stupid hack */
{
m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[1], 0, 2);
m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[2], 0, 4);
m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[3], 0, 8);
//m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, 0, scclayer[2], 0, 0);
//m_tc0620scc->tilemap_draw(screen, bitmap, cliprect, 0, scclayer[2], 0, 0);
if ((m_tc0480scp->ram_r(0x20 / 2) != 0x24) && (m_tc0480scp->ram_r(0x22 / 2) != 0x0866)) /* Stupid hack for start of race */
m_tc0480scp->tilemap_draw(screen, bitmap, m_hack_cliprect, layer[0], 0, 0);
@ -251,7 +251,7 @@ u32 groundfx_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[2], 0, 4);
m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[3], 0, 8);
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[2], 0, 0);
m_tc0620scc->tilemap_draw(screen, bitmap, cliprect, scclayer[2], 0, 0);
draw_sprites(screen, bitmap, cliprect, 0, 44, -574);
}

View file

@ -351,7 +351,7 @@ void taitoz_state::chasehq_draw_sprites_16x16(screen_device &screen, bitmap_ind1
flipy = !flipy;
}
m_gfxdecode->gfx(2)->prio_zoom_transpen(bitmap,cliprect,
m_gfxdecode->gfx(1)->prio_zoom_transpen(bitmap,cliprect,
code,
color,
flipx,flipy,
@ -394,7 +394,7 @@ void taitoz_state::chasehq_draw_sprites_16x16(screen_device &screen, bitmap_ind1
flipy = !flipy;
}
m_gfxdecode->gfx(2)->prio_zoom_transpen(bitmap,cliprect,
m_gfxdecode->gfx(1)->prio_zoom_transpen(bitmap,cliprect,
code,
color,
flipx,flipy,

View file

@ -150,10 +150,12 @@ the wide tilemap mode)
#define TC0100SCN_TOTAL_CHARS 256
DEFINE_DEVICE_TYPE(TC0100SCN, tc0100scn_device, "tc0100scn", "Taito TC0100SCN")
DEFINE_DEVICE_TYPE(TC0620SCC, tc0620scc_device, "tc0620scc", "Taito TC0620SCC")
tc0100scn_device::tc0100scn_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, TC0100SCN, tag, owner, clock)
tc0100scn_base_device::tc0100scn_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, type, tag, owner, clock)
, device_gfx_interface(mconfig, *this)
, m_gfxlayout(TC0100SCN_LAYOUT_DEFAULT)
, m_ram(nullptr)
, m_bgscroll_ram(nullptr)
, m_fgscroll_ram(nullptr)
@ -165,7 +167,6 @@ tc0100scn_device::tc0100scn_device(const machine_config &mconfig, const char *ta
, m_tx_colbank(0)
, m_dblwidth(0)
, m_dirty(false)
, m_gfxnum(0)
, m_x_offset(0)
, m_y_offset(0)
, m_flip_xoffs(0)
@ -174,16 +175,56 @@ tc0100scn_device::tc0100scn_device(const machine_config &mconfig, const char *ta
, m_flip_text_yoffs(0)
, m_multiscrn_xoffs(0)
, m_multiscrn_hack(0)
, m_gfxdecode(*this, finder_base::DUMMY_TAG)
, m_col_base(0)
{
std::fill(std::begin(m_bg_colbank), std::end(m_bg_colbank), 0);
}
tc0100scn_device::tc0100scn_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: tc0100scn_base_device(mconfig, TC0100SCN, tag, owner, clock)
{
}
tc0620scc_device::tc0620scc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: tc0100scn_base_device(mconfig, TC0620SCC, tag, owner, clock)
{
}
/*************************************
*
* Graphics definitions
*
*************************************/
GFXDECODE_MEMBER(tc0100scn_device::gfxinfo_default)
GFXDECODE_DEVICE(DEVICE_SELF, 0, gfx_8x8x4_packed_msb, 0, 256)
GFXDECODE_END
GFXDECODE_MEMBER(tc0100scn_device::gfxinfo_1bpp)
GFXDECODE_DEVICE(DEVICE_SELF, 0, gfx_8x8x1, 0, 256)
GFXDECODE_END
static const gfx_layout layout_scc_6bpp_hi =
{
8,8,
RGN_FRAC(1,1),
6,
{ STEP2(0,1)/**/,0,0,0,0/**/ },
{ STEP8(0,2) },
{ STEP8(0,8*2) },
8*8*2
};
GFXDECODE_MEMBER(tc0620scc_device::gfxinfo_6bpp)
GFXDECODE_DEVICE(DEVICE_SELF, 0, gfx_8x8x4_packed_msb, 0, 256) // low 4bpp of 6bpp tiles
GFXDECODE_DEVICE("hi_gfx", 0, layout_scc_6bpp_hi, 0, 256) // hi 2bpp of 6bpp tiles
GFXDECODE_END
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void tc0100scn_device::device_start()
void tc0100scn_base_device::device_start()
{
// bind callbacks
m_tc0100scn_cb.bind_relative_to(*owner());
@ -199,9 +240,6 @@ void tc0100scn_device::device_start()
16*8 /* every sprite takes 16 consecutive bytes */
};
if(!m_gfxdecode->started())
throw device_missing_dependencies();
int xd, yd;
/* Set up clipping for multi-TC0100SCN games. We assume
@ -210,14 +248,14 @@ void tc0100scn_device::device_start()
we're safe as it uses single width tilemaps. */
/* Single width versions */
m_tilemap[0][0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(&tc0100scn_device::get_bg_tile_info<0x00000, 0>, "bg0_std", this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
m_tilemap[1][0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(&tc0100scn_device::get_bg_tile_info<0x04000, 1>, "bg1_std", this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
m_tilemap[2][0] = &machine().tilemap().create(*this, tilemap_get_info_delegate(&tc0100scn_device::get_tx_tile_info<0x02000, 0>, "txt_std", this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
m_tilemap[0][0] = &machine().tilemap().create(*this, tilemap_get_info_delegate(&tc0100scn_base_device::get_bg_tile_info<0x00000, 0>, "bg0_std", this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
m_tilemap[1][0] = &machine().tilemap().create(*this, tilemap_get_info_delegate(&tc0100scn_base_device::get_bg_tile_info<0x04000, 1>, "bg1_std", this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
m_tilemap[2][0] = &machine().tilemap().create(*this, tilemap_get_info_delegate(&tc0100scn_base_device::get_tx_tile_info<0x02000, 1>, "txt_std", this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
/* Double width versions */
m_tilemap[0][1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(&tc0100scn_device::get_bg_tile_info<0x00000, 0>, "bg0_wide", this), TILEMAP_SCAN_ROWS, 8, 8, 128, 64);
m_tilemap[1][1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(&tc0100scn_device::get_bg_tile_info<0x04000, 1>, "bg1_wide", this), TILEMAP_SCAN_ROWS, 8, 8, 128, 64);
m_tilemap[2][1] = &machine().tilemap().create(*this, tilemap_get_info_delegate(&tc0100scn_device::get_tx_tile_info<0x09000, 1>, "txt_wide", this), TILEMAP_SCAN_ROWS, 8, 8, 128, 32);
m_tilemap[0][1] = &machine().tilemap().create(*this, tilemap_get_info_delegate(&tc0100scn_base_device::get_bg_tile_info<0x00000, 0>, "bg0_wide", this), TILEMAP_SCAN_ROWS, 8, 8, 128, 64);
m_tilemap[1][1] = &machine().tilemap().create(*this, tilemap_get_info_delegate(&tc0100scn_base_device::get_bg_tile_info<0x04000, 1>, "bg1_wide", this), TILEMAP_SCAN_ROWS, 8, 8, 128, 64);
m_tilemap[2][1] = &machine().tilemap().create(*this, tilemap_get_info_delegate(&tc0100scn_base_device::get_tx_tile_info<0x09000, 2>, "txt_wide", this), TILEMAP_SCAN_ROWS, 8, 8, 128, 32);
m_tilemap[0][0]->set_transparent_pen(0);
m_tilemap[1][0]->set_transparent_pen(0);
@ -266,12 +304,13 @@ void tc0100scn_device::device_start()
set_layer_ptrs();
/* create the char set (gfx will then be updated dynamically from RAM) */
set_gfx(0, std::make_unique<gfx_element>(&palette(), charlayout, (u8 *)&m_ram[0x6000 / 2], NATIVE_ENDIAN_VALUE_LE_BE(8,0), 256, 0));
set_gfx(1, std::make_unique<gfx_element>(&palette(), charlayout, (u8 *)&m_ram[0x11000 / 2], NATIVE_ENDIAN_VALUE_LE_BE(8,0), 256, 0));
gfx(0)->set_colorbase(m_col_base);
set_gfx(1, std::make_unique<gfx_element>(&palette(), charlayout, (u8 *)&m_ram[0x6000 / 2], NATIVE_ENDIAN_VALUE_LE_BE(8,0), 64, m_col_base));
set_gfx(2, std::make_unique<gfx_element>(&palette(), charlayout, (u8 *)&m_ram[0x11000 / 2], NATIVE_ENDIAN_VALUE_LE_BE(8,0), 64, m_col_base));
gfx_element *bg_gfx = m_gfxdecode->gfx(m_gfxnum);
gfx_element *txt0 = gfx(0);
gfx_element *txt1 = gfx(1);
gfx_element *bg_gfx = gfx(0);
gfx_element *txt0 = gfx(1);
gfx_element *txt1 = gfx(2);
if (bg_gfx->granularity() == 2) /* Yuyugogo, Yesnoj */
bg_gfx->set_granularity(16);
@ -287,11 +326,62 @@ void tc0100scn_device::device_start()
save_item(NAME(m_dblwidth));
}
void tc0100scn_device::device_start()
{
switch (m_gfxlayout)
{
case TC0100SCN_LAYOUT_DEFAULT:
default:
decode_gfx(gfxinfo_default);
break;
case TC0100SCN_LAYOUT_1BPP:
decode_gfx(gfxinfo_1bpp);
break;
}
tc0100scn_base_device::device_start();
}
void tc0620scc_device::device_start()
{
decode_gfx(gfxinfo_6bpp);
/* make SCC tile GFX format suitable for gfxdecode */
gfx_element *gx0 = gfx(0);
gfx_element *gx1 = gfx(1);
// allocate memory for the assembled data
u8 *srcdata = auto_alloc_array(machine(), u8, gx0->elements() * gx0->width() * gx0->height());
// loop over elements
u8 *dest = srcdata;
for (int c = 0; c < gx0->elements(); c++)
{
const u8 *c0base = gx0->get_data(c);
const u8 *c1base = gx1->get_data(c);
// loop over height
for (int y = 0; y < gx0->height(); y++)
{
const u8 *c0 = c0base;
const u8 *c1 = c1base;
for (int x = 0; x < gx0->width(); x++)
*dest++ = (*c0++ & 0xf) | (*c1++ & 0x30);
c0base += gx0->rowbytes();
c1base += gx1->rowbytes();
}
}
gx0->set_raw_layout(srcdata, gx0->width(), gx0->height(), gx0->elements(), 8 * gx0->width(), 8 * gx0->width() * gx0->height());
gx0->set_granularity(64);
tc0100scn_base_device::device_start();
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void tc0100scn_device::device_reset()
void tc0100scn_base_device::device_reset()
{
m_dblwidth = 0;
@ -305,7 +395,7 @@ void tc0100scn_device::device_reset()
*****************************************************************************/
template<unsigned Offset, unsigned Colbank>
TILE_GET_INFO_MEMBER(tc0100scn_device::get_bg_tile_info)
TILE_GET_INFO_MEMBER(tc0100scn_base_device::get_bg_tile_info)
{
u32 code = m_ram[(2 * tile_index) + 1 + Offset];
const u16 attr = m_ram[(2 * tile_index) + Offset];
@ -315,14 +405,14 @@ TILE_GET_INFO_MEMBER(tc0100scn_device::get_bg_tile_info)
if (!m_tc0100scn_cb.isnull())
m_tc0100scn_cb(&code, &color);
SET_TILE_INFO_MEMBER(m_gfxnum,
SET_TILE_INFO_MEMBER(0,
code,
((color + m_bg_colbank[Colbank]) & 0xff),
TILE_FLIPYX((attr & 0xc000) >> 14));
}
template<unsigned Offset, unsigned Gfx>
TILE_GET_INFO_MEMBER(tc0100scn_device::get_tx_tile_info)
TILE_GET_INFO_MEMBER(tc0100scn_base_device::get_tx_tile_info)
{
int attr = m_ram[Offset + tile_index];
@ -332,20 +422,20 @@ TILE_GET_INFO_MEMBER(tc0100scn_device::get_tx_tile_info)
TILE_FLIPYX((attr & 0xc000) >> 14));
}
void tc0100scn_device::set_colbanks( int bg0, int bg1, int tx )
void tc0100scn_base_device::set_colbanks( int bg0, int bg1, int tx )
{
m_bg_colbank[0] = bg0;
m_bg_colbank[1] = bg1;
m_tx_colbank = tx;
}
void tc0100scn_device::tilemap_set_dirty()
void tc0100scn_base_device::tilemap_set_dirty()
{
if (!m_dirty)
m_dirty = true;
}
void tc0100scn_device::set_layer_ptrs()
void tc0100scn_base_device::set_layer_ptrs()
{
if (!m_dblwidth)
{
@ -361,7 +451,7 @@ void tc0100scn_device::set_layer_ptrs()
}
}
void tc0100scn_device::restore_scroll()
void tc0100scn_base_device::restore_scroll()
{
int flip;
@ -388,7 +478,7 @@ void tc0100scn_device::restore_scroll()
// device_post_load - device-specific postload
//-------------------------------------------------
void tc0100scn_device::device_post_load()
void tc0100scn_base_device::device_post_load()
{
set_layer_ptrs();
restore_scroll();
@ -401,12 +491,12 @@ void tc0100scn_device::device_post_load()
m_tilemap[2][1]->mark_all_dirty();
}
u16 tc0100scn_device::ram_r(offs_t offset)
u16 tc0100scn_base_device::ram_r(offs_t offset)
{
return m_ram[offset];
}
void tc0100scn_device::ram_w(offs_t offset, u16 data, u16 mem_mask)
void tc0100scn_base_device::ram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_ram[offset]);
/* Double-width tilemaps have a different memory map */
@ -422,7 +512,7 @@ void tc0100scn_device::ram_w(offs_t offset, u16 data, u16 mem_mask)
}
else if (offset < 0x3800)
{
gfx(0)->mark_dirty((offset - 0x3000) / 8);
gfx(1)->mark_dirty((offset - 0x3000) / 8);
m_tilemap[0][1]->mark_tile_dirty(offset / 2);
}
else if (offset < 0x4000)
@ -435,18 +525,18 @@ void tc0100scn_device::ram_w(offs_t offset, u16 data, u16 mem_mask)
else if (offset < 0x8000)
m_tilemap[1][1]->mark_tile_dirty((offset & 0x3fff) / 2);
else if (offset >= 0x8800 && offset < 0x9000)
gfx(1)->mark_dirty((offset - 0x8800) / 8);
gfx(2)->mark_dirty((offset - 0x8800) / 8);
else if (offset >= 0x9000)
m_tilemap[2][1]->mark_tile_dirty((offset & 0x0fff));
}
u16 tc0100scn_device::ctrl_r(offs_t offset)
u16 tc0100scn_base_device::ctrl_r(offs_t offset)
{
return m_ctrl[offset];
}
void tc0100scn_device::ctrl_w(offs_t offset, u16 data, u16 mem_mask)
void tc0100scn_base_device::ctrl_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_ctrl[offset]);
@ -511,7 +601,7 @@ void tc0100scn_device::ctrl_w(offs_t offset, u16 data, u16 mem_mask)
}
void tc0100scn_device::tilemap_update()
void tc0100scn_base_device::tilemap_update()
{
if (m_dirty)
{
@ -536,7 +626,7 @@ void tc0100scn_device::tilemap_update()
m_tilemap[1][m_dblwidth]->set_scrollx((j + m_fgscrolly) & 0x1ff, m_fgscrollx - m_fgscroll_ram[j]);
}
void tc0100scn_device::tilemap_draw_fg( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, tilemap_t* tmap, int flags, u8 priority, u8 pmask )
void tc0100scn_base_device::tilemap_draw_fg( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, tilemap_t* tmap, int flags, u8 priority, u8 pmask )
{
const bitmap_ind16 &src_bitmap = tmap->pixmap();
int width_mask, height_mask, x, y, p;
@ -582,7 +672,7 @@ void tc0100scn_device::tilemap_draw_fg( screen_device &screen, bitmap_ind16 &bit
}
}
int tc0100scn_device::tilemap_draw( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer, int flags, u8 priority, u8 pmask )
int tc0100scn_base_device::tilemap_draw( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer, int flags, u8 priority, u8 pmask )
{
int disable = m_ctrl[6] & 0xf7;
rectangle clip = cliprect;
@ -614,7 +704,7 @@ if (disable != 0 && disable != 3 && disable != 7)
return 0;
}
int tc0100scn_device::bottomlayer()
int tc0100scn_base_device::bottomlayer()
{
return (m_ctrl[6] & 0x8) >> 3;
}

View file

@ -7,18 +7,25 @@
#include "emupal.h"
enum {
TC0100SCN_LAYOUT_DEFAULT = 0,
TC0100SCN_LAYOUT_1BPP
};
enum {
TC0620SCC_LAYOUT_DEFAULT = 0 // default TC0620SCC layout is 6bpp
};
typedef device_delegate<void (u32 *code, u16 *color)> tc0100scn_cb_delegate;
#define TC0100SCN_CB_MEMBER(_name) void _name(u32 *code, u16 *color)
class tc0100scn_device : public device_t, public device_gfx_interface
class tc0100scn_base_device : public device_t, public device_gfx_interface
{
public:
tc0100scn_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
// configuration
template <typename T> void set_gfxdecode_tag(T &&tag) { m_gfxdecode.set_tag(std::forward<T>(tag)); }
void set_gfxlayout(int layout) { m_gfxlayout = layout; }
void set_color_base(u16 base) { m_col_base = base; }
template <typename... T> void set_tile_callback(T &&... args) { m_tc0100scn_cb = tc0100scn_cb_delegate(std::forward<T>(args)...); }
void set_gfx_region(int gfxregion) { m_gfxnum = gfxregion; }
void set_multiscr_xoffs(int xoffs) { m_multiscrn_xoffs = xoffs; }
void set_multiscr_hack(int hack) { m_multiscrn_hack = hack; }
void set_offsets(int x_offset, int y_offset)
@ -36,11 +43,6 @@ public:
m_flip_text_xoffs = x_offset;
m_flip_text_yoffs = y_offset;
}
void update_granularity()
{
if (gfx(0)) gfx(0)->set_granularity(m_gfxdecode->gfx(m_gfxnum)->granularity());
if (gfx(1)) gfx(1)->set_granularity(m_gfxdecode->gfx(m_gfxnum)->granularity());
}
static constexpr unsigned SINGLE_VDU = 1024; // for set_multiscr_xoffs
@ -62,11 +64,14 @@ public:
int bottomlayer();
protected:
tc0100scn_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_post_load() override;
int m_gfxlayout;
private:
// internal state
tc0100scn_cb_delegate m_tc0100scn_cb;
@ -87,14 +92,13 @@ private:
int m_dblwidth;
bool m_dirty;
int m_gfxnum;
int m_x_offset, m_y_offset;
int m_flip_xoffs, m_flip_yoffs;
int m_flip_text_xoffs, m_flip_text_yoffs;
int m_multiscrn_xoffs;
int m_multiscrn_hack;
required_device<gfxdecode_device> m_gfxdecode;
u16 m_col_base;
template<unsigned Offset, unsigned Colbank> TILE_GET_INFO_MEMBER(get_bg_tile_info);
template<unsigned Offset, unsigned Gfx> TILE_GET_INFO_MEMBER(get_tx_tile_info);
@ -104,6 +108,36 @@ private:
void restore_scroll();
};
class tc0100scn_device : public tc0100scn_base_device
{
public:
tc0100scn_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual void device_start() override;
private:
// decoding info
DECLARE_GFXDECODE_MEMBER(gfxinfo_default);
DECLARE_GFXDECODE_MEMBER(gfxinfo_1bpp);
};
class tc0620scc_device : public tc0100scn_base_device
{
public:
tc0620scc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual void device_start() override;
private:
// decoding info
DECLARE_GFXDECODE_MEMBER(gfxinfo_6bpp);
};
DECLARE_DEVICE_TYPE(TC0100SCN, tc0100scn_device)
DECLARE_DEVICE_TYPE(TC0620SCC, tc0620scc_device)
#endif // MAME_VIDEO_TC0100SCN_H

View file

@ -328,7 +328,6 @@ u32 undrfire_state::screen_update_undrfire(screen_device &screen, bitmap_ind16 &
{
u8 layer[5];
u8 scclayer[3];
u16 priority;
#ifdef MAME_DEBUG
if (machine().input().code_pressed_once (KEYCODE_X))
@ -367,10 +366,10 @@ u32 undrfire_state::screen_update_undrfire(screen_device &screen, bitmap_ind16 &
}
#endif
m_tc0100scn->tilemap_update();
m_tc0620scc->tilemap_update();
m_tc0480scp->tilemap_update();
priority = m_tc0480scp->get_bg_priority();
const u16 priority = m_tc0480scp->get_bg_priority();
layer[0] = (priority & 0xf000) >> 12; /* tells us which bg layer is bottom */
layer[1] = (priority & 0x0f00) >> 8;
@ -378,7 +377,7 @@ u32 undrfire_state::screen_update_undrfire(screen_device &screen, bitmap_ind16 &
layer[3] = (priority & 0x000f) >> 0; /* tells us which is top */
layer[4] = 4; /* text layer always over bg layers */
scclayer[0] = m_tc0100scn->bottomlayer();
scclayer[0] = m_tc0620scc->bottomlayer();
scclayer[1] = scclayer[0] ^ 1;
scclayer[2] = 2;
@ -392,8 +391,8 @@ u32 undrfire_state::screen_update_undrfire(screen_device &screen, bitmap_ind16 &
pointless - it's always hidden by other layers. Does it
serve some blending pupose ? */
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[0], TILEMAP_DRAW_OPAQUE, 0);
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[1], 0, 0);
m_tc0620scc->tilemap_draw(screen, bitmap, cliprect, scclayer[0], TILEMAP_DRAW_OPAQUE, 0);
m_tc0620scc->tilemap_draw(screen, bitmap, cliprect, scclayer[1], 0, 0);
#ifdef MAME_DEBUG
if (m_dislayer[layer[0]]==0)
@ -435,7 +434,7 @@ u32 undrfire_state::screen_update_undrfire(screen_device &screen, bitmap_ind16 &
#ifdef MAME_DEBUG
if (m_dislayer[5]==0)
#endif
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[2], 0, 0); /* TC0620SCC text layer */
m_tc0620scc->tilemap_draw(screen, bitmap, cliprect, scclayer[2], 0, 0); /* TC0620SCC text layer */
m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[4], 0, 0); /* TC0480SCP text layer */
@ -468,7 +467,6 @@ u32 undrfire_state::screen_update_cbombers(screen_device &screen, bitmap_ind16 &
{
u8 layer[5];
u8 scclayer[3];
u16 priority;
#ifdef MAME_DEBUG
if (machine().input().code_pressed_once (KEYCODE_X))
@ -507,10 +505,10 @@ u32 undrfire_state::screen_update_cbombers(screen_device &screen, bitmap_ind16 &
}
#endif
m_tc0100scn->tilemap_update();
m_tc0620scc->tilemap_update();
m_tc0480scp->tilemap_update();
priority = m_tc0480scp->get_bg_priority();
const u16 priority = m_tc0480scp->get_bg_priority();
layer[0] = (priority & 0xf000) >> 12; /* tells us which bg layer is bottom */
layer[1] = (priority & 0x0f00) >> 8;
@ -518,7 +516,7 @@ u32 undrfire_state::screen_update_cbombers(screen_device &screen, bitmap_ind16 &
layer[3] = (priority & 0x000f) >> 0; /* tells us which is top */
layer[4] = 4; /* text layer always over bg layers */
scclayer[0] = m_tc0100scn->bottomlayer();
scclayer[0] = m_tc0620scc->bottomlayer();
scclayer[1] = scclayer[0] ^ 1;
scclayer[2] = 2;
@ -533,8 +531,8 @@ u32 undrfire_state::screen_update_cbombers(screen_device &screen, bitmap_ind16 &
serve some blending pupose ? */
// TODO : Wrong; TC0360PRI isn't hooked up
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[0], TILEMAP_DRAW_OPAQUE, 0);
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[1], 0, 0);
m_tc0620scc->tilemap_draw(screen, bitmap, cliprect, scclayer[0], TILEMAP_DRAW_OPAQUE, 0);
m_tc0620scc->tilemap_draw(screen, bitmap, cliprect, scclayer[1], 0, 0);
#ifdef MAME_DEBUG
if (m_dislayer[layer[0]]==0)
@ -576,7 +574,7 @@ u32 undrfire_state::screen_update_cbombers(screen_device &screen, bitmap_ind16 &
#ifdef MAME_DEBUG
if (m_dislayer[5]==0)
#endif
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[2], 0, 0); /* TC0620SCC text layer */
m_tc0620scc->tilemap_draw(screen, bitmap, cliprect, scclayer[2], 0, 0); /* TC0620SCC text layer */
m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[4], 0, 0); /* TC0480SCP text layer */

View file

@ -14,7 +14,7 @@ TILE_GET_INFO_MEMBER(wgp_state::get_piv_tile_info)
const u16 tilenum = m_pivram[tile_index + Offset]; /* 3 blocks of $2000 */
const u16 attr = m_pivram[tile_index + Offset + 0x8000]; /* 3 blocks of $2000 */
SET_TILE_INFO_MEMBER(2,
SET_TILE_INFO_MEMBER(1,
tilenum & 0x3fff,
(attr & 0x3f), /* attr & 0x1 ?? */
TILE_FLIPYX((attr & 0xc0) >> 6));