Merge pull request #5028 from cam900/tc0080vco_intgfx

tc0080vco.cpp : Updates
This commit is contained in:
R. Belmont 2019-05-10 11:36:47 -04:00 committed by GitHub
commit ce01dd0beb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 261 additions and 619 deletions

View File

@ -589,44 +589,6 @@ INPUT_PORTS_END
***************************************************************************/ ***************************************************************************/
static const gfx_layout tilelayout =
{
16,16, /* 16x16 pixels */
RGN_FRAC(1,1), /* 32768 tiles */
4,
{ STEP4(0,1) },
{ STEP16(15*4, -4) },
{ STEP16(0, 16*4) },
16*16*4
};
#if 0
static const gfx_layout charlayout =
{
8, 8, /* 8x8 pixels */
256, /* 256 chars */
4, /* 4 bit per pixel */
{ 0x1000*8 + 8, 0x1000*8, 8, 0 },
{ 0, 1, 2, 3, 4, 5, 6, 7 },
{ 16*0, 16*1, 16*2, 16*3, 16*4, 16*5, 16*6, 16*7 },
16*8
};
#endif
static GFXDECODE_START( gfx_syvalion )
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 32 )
GFXDECODE_END
static GFXDECODE_START( gfx_recordbr )
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 32 )
GFXDECODE_END
static GFXDECODE_START( gfx_dleague )
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 32 )
GFXDECODE_END
void taitoh_state::machine_reset() void taitoh_state::machine_reset()
{ {
} }
@ -666,15 +628,12 @@ void taitoh_state::syvalion(machine_config &config)
screen.set_screen_update(FUNC(taitoh_state::screen_update_syvalion)); screen.set_screen_update(FUNC(taitoh_state::screen_update_syvalion));
screen.set_palette(m_palette); screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_syvalion);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 33*16); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 33*16);
TC0080VCO(config, m_tc0080vco, 0); TC0080VCO(config, m_tc0080vco, 0);
m_tc0080vco->set_gfx_region(0);
m_tc0080vco->set_tx_region(1);
m_tc0080vco->set_offsets(1, 1); m_tc0080vco->set_offsets(1, 1);
m_tc0080vco->set_bgflip_yoffs(-2); m_tc0080vco->set_bgflip_yoffs(-2);
m_tc0080vco->set_gfxdecode_tag(m_gfxdecode); m_tc0080vco->set_palette(m_palette);
/* sound hardware */ /* sound hardware */
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
@ -719,15 +678,12 @@ void taitoh_state::recordbr(machine_config &config)
screen.set_screen_update(FUNC(taitoh_state::screen_update_recordbr)); screen.set_screen_update(FUNC(taitoh_state::screen_update_recordbr));
screen.set_palette(m_palette); screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_recordbr);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 32*16); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 32*16);
TC0080VCO(config, m_tc0080vco, 0); TC0080VCO(config, m_tc0080vco, 0);
m_tc0080vco->set_gfx_region(0);
m_tc0080vco->set_tx_region(1);
m_tc0080vco->set_offsets(1, 1); m_tc0080vco->set_offsets(1, 1);
m_tc0080vco->set_bgflip_yoffs(-2); m_tc0080vco->set_bgflip_yoffs(-2);
m_tc0080vco->set_gfxdecode_tag(m_gfxdecode); m_tc0080vco->set_palette(m_palette);
/* sound hardware */ /* sound hardware */
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
@ -782,15 +738,12 @@ void taitoh_state::dleague(machine_config &config)
screen.set_screen_update(FUNC(taitoh_state::screen_update_dleague)); screen.set_screen_update(FUNC(taitoh_state::screen_update_dleague));
screen.set_palette(m_palette); screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_dleague);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 33*16); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 33*16);
TC0080VCO(config, m_tc0080vco, 0); TC0080VCO(config, m_tc0080vco, 0);
m_tc0080vco->set_gfx_region(0);
m_tc0080vco->set_tx_region(1);
m_tc0080vco->set_offsets(1, 1); m_tc0080vco->set_offsets(1, 1);
m_tc0080vco->set_bgflip_yoffs(-2); m_tc0080vco->set_bgflip_yoffs(-2);
m_tc0080vco->set_gfxdecode_tag(m_gfxdecode); m_tc0080vco->set_palette(m_palette);
/* sound hardware */ /* sound hardware */
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
@ -823,7 +776,7 @@ ROM_START( syvalion )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
ROM_LOAD( "b51-23.bin", 0x00000, 0x10000, CRC(734662de) SHA1(0058d6de68f26cd58b9eb8859e15f3ced6bd3489) ) ROM_LOAD( "b51-23.bin", 0x00000, 0x10000, CRC(734662de) SHA1(0058d6de68f26cd58b9eb8859e15f3ced6bd3489) )
ROM_REGION( 0x200000, "gfx1", 0 ) ROM_REGION( 0x200000, "tc0080vco", 0 )
ROM_LOAD64_BYTE( "b51-16.bin", 0x000007, 0x20000, CRC(c0fcf7a5) SHA1(4550ba6d822ba12ad39576bcbed09b5fa54279e8) ) ROM_LOAD64_BYTE( "b51-16.bin", 0x000007, 0x20000, CRC(c0fcf7a5) SHA1(4550ba6d822ba12ad39576bcbed09b5fa54279e8) )
ROM_LOAD64_BYTE( "b51-12.bin", 0x000006, 0x20000, CRC(6b36d358) SHA1(4101c110e99fe2ac1a989c84857f6438439b79a1) ) ROM_LOAD64_BYTE( "b51-12.bin", 0x000006, 0x20000, CRC(6b36d358) SHA1(4101c110e99fe2ac1a989c84857f6438439b79a1) )
ROM_LOAD64_BYTE( "b51-08.bin", 0x000005, 0x20000, CRC(9f6a535c) SHA1(40d52d3f572dd87b41d89707a2ec189760d806b0) ) ROM_LOAD64_BYTE( "b51-08.bin", 0x000005, 0x20000, CRC(9f6a535c) SHA1(40d52d3f572dd87b41d89707a2ec189760d806b0) )
@ -858,7 +811,7 @@ ROM_START( syvalionu )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
ROM_LOAD( "b51-23.bin", 0x00000, 0x10000, CRC(734662de) SHA1(0058d6de68f26cd58b9eb8859e15f3ced6bd3489) ) ROM_LOAD( "b51-23.bin", 0x00000, 0x10000, CRC(734662de) SHA1(0058d6de68f26cd58b9eb8859e15f3ced6bd3489) )
ROM_REGION( 0x200000, "gfx1", 0 ) ROM_REGION( 0x200000, "tc0080vco", 0 )
ROM_LOAD64_BYTE( "b51-16.bin", 0x000007, 0x20000, CRC(c0fcf7a5) SHA1(4550ba6d822ba12ad39576bcbed09b5fa54279e8) ) ROM_LOAD64_BYTE( "b51-16.bin", 0x000007, 0x20000, CRC(c0fcf7a5) SHA1(4550ba6d822ba12ad39576bcbed09b5fa54279e8) )
ROM_LOAD64_BYTE( "b51-12.bin", 0x000006, 0x20000, CRC(6b36d358) SHA1(4101c110e99fe2ac1a989c84857f6438439b79a1) ) ROM_LOAD64_BYTE( "b51-12.bin", 0x000006, 0x20000, CRC(6b36d358) SHA1(4101c110e99fe2ac1a989c84857f6438439b79a1) )
ROM_LOAD64_BYTE( "b51-08.bin", 0x000005, 0x20000, CRC(9f6a535c) SHA1(40d52d3f572dd87b41d89707a2ec189760d806b0) ) ROM_LOAD64_BYTE( "b51-08.bin", 0x000005, 0x20000, CRC(9f6a535c) SHA1(40d52d3f572dd87b41d89707a2ec189760d806b0) )
@ -893,7 +846,7 @@ ROM_START( syvalionw )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
ROM_LOAD( "b51-23.bin", 0x00000, 0x10000, CRC(734662de) SHA1(0058d6de68f26cd58b9eb8859e15f3ced6bd3489) ) ROM_LOAD( "b51-23.bin", 0x00000, 0x10000, CRC(734662de) SHA1(0058d6de68f26cd58b9eb8859e15f3ced6bd3489) )
ROM_REGION( 0x200000, "gfx1", 0 ) ROM_REGION( 0x200000, "tc0080vco", 0 )
ROM_LOAD64_BYTE( "b51-16.bin", 0x000007, 0x20000, CRC(c0fcf7a5) SHA1(4550ba6d822ba12ad39576bcbed09b5fa54279e8) ) ROM_LOAD64_BYTE( "b51-16.bin", 0x000007, 0x20000, CRC(c0fcf7a5) SHA1(4550ba6d822ba12ad39576bcbed09b5fa54279e8) )
ROM_LOAD64_BYTE( "b51-12.bin", 0x000006, 0x20000, CRC(6b36d358) SHA1(4101c110e99fe2ac1a989c84857f6438439b79a1) ) ROM_LOAD64_BYTE( "b51-12.bin", 0x000006, 0x20000, CRC(6b36d358) SHA1(4101c110e99fe2ac1a989c84857f6438439b79a1) )
ROM_LOAD64_BYTE( "b51-08.bin", 0x000005, 0x20000, CRC(9f6a535c) SHA1(40d52d3f572dd87b41d89707a2ec189760d806b0) ) ROM_LOAD64_BYTE( "b51-08.bin", 0x000005, 0x20000, CRC(9f6a535c) SHA1(40d52d3f572dd87b41d89707a2ec189760d806b0) )
@ -928,7 +881,7 @@ ROM_START( syvalionp )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
ROM_LOAD( "c69b.ic58", 0x00000, 0x10000, CRC(07d3d789) SHA1(dbbe308f74637bb5a2651654bbada6a07f99ae14) ) ROM_LOAD( "c69b.ic58", 0x00000, 0x10000, CRC(07d3d789) SHA1(dbbe308f74637bb5a2651654bbada6a07f99ae14) )
ROM_REGION( 0x200000, "gfx1", 0 ) ROM_REGION( 0x200000, "tc0080vco", 0 )
ROM_LOAD64_BYTE( "chr-00.ic16", 0x000007, 0x20000, CRC(b0c66db7) SHA1(e3a1e9b0d6157e5085a55fdac1daa61f5a03b048) ) ROM_LOAD64_BYTE( "chr-00.ic16", 0x000007, 0x20000, CRC(b0c66db7) SHA1(e3a1e9b0d6157e5085a55fdac1daa61f5a03b048) )
ROM_LOAD64_BYTE( "chr-01.ic12", 0x000006, 0x20000, CRC(dd07db12) SHA1(76317c27b1e649d73f639b565b67f42af0233118) ) ROM_LOAD64_BYTE( "chr-01.ic12", 0x000006, 0x20000, CRC(dd07db12) SHA1(76317c27b1e649d73f639b565b67f42af0233118) )
ROM_LOAD64_BYTE( "chr-02.ic8", 0x000005, 0x20000, CRC(323a9ad9) SHA1(7ae6fa2dcc2078ae64d6d28cadacb52c6a069575) ) ROM_LOAD64_BYTE( "chr-02.ic8", 0x000005, 0x20000, CRC(323a9ad9) SHA1(7ae6fa2dcc2078ae64d6d28cadacb52c6a069575) )
@ -974,7 +927,7 @@ ROM_START( recordbr )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
ROM_LOAD( "b56-19.bin", 0x00000, 0x10000, CRC(c68085ee) SHA1(78634216a622a08c20dae0422283c4a7ed360546) ) ROM_LOAD( "b56-19.bin", 0x00000, 0x10000, CRC(c68085ee) SHA1(78634216a622a08c20dae0422283c4a7ed360546) )
ROM_REGION( 0x100000, "gfx1", 0 ) ROM_REGION( 0x100000, "tc0080vco", 0 )
ROM_LOAD64_BYTE( "b56-04.bin", 0x000007, 0x20000, CRC(f7afdff0) SHA1(8f8ea0e8da20913426ff3b58d7bb63bd352d3fb4) ) ROM_LOAD64_BYTE( "b56-04.bin", 0x000007, 0x20000, CRC(f7afdff0) SHA1(8f8ea0e8da20913426ff3b58d7bb63bd352d3fb4) )
ROM_LOAD64_BYTE( "b56-08.bin", 0x000006, 0x20000, CRC(c9f0d38a) SHA1(aa22f1a06e00f90c546eebcd8b42da3e3c7d0781) ) ROM_LOAD64_BYTE( "b56-08.bin", 0x000006, 0x20000, CRC(c9f0d38a) SHA1(aa22f1a06e00f90c546eebcd8b42da3e3c7d0781) )
ROM_LOAD64_BYTE( "b56-03.bin", 0x000005, 0x20000, CRC(4045fd44) SHA1(a84be9eedba7aed30d4f2841016784f8024d9443) ) ROM_LOAD64_BYTE( "b56-03.bin", 0x000005, 0x20000, CRC(4045fd44) SHA1(a84be9eedba7aed30d4f2841016784f8024d9443) )
@ -1004,7 +957,7 @@ ROM_START( gogold )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
ROM_LOAD( "b56-19.bin", 0x00000, 0x10000, CRC(c68085ee) SHA1(78634216a622a08c20dae0422283c4a7ed360546) ) ROM_LOAD( "b56-19.bin", 0x00000, 0x10000, CRC(c68085ee) SHA1(78634216a622a08c20dae0422283c4a7ed360546) )
ROM_REGION( 0x100000, "gfx1", 0 ) ROM_REGION( 0x100000, "tc0080vco", 0 )
ROM_LOAD64_BYTE( "b56-04.bin", 0x000007, 0x20000, CRC(f7afdff0) SHA1(8f8ea0e8da20913426ff3b58d7bb63bd352d3fb4) ) ROM_LOAD64_BYTE( "b56-04.bin", 0x000007, 0x20000, CRC(f7afdff0) SHA1(8f8ea0e8da20913426ff3b58d7bb63bd352d3fb4) )
ROM_LOAD64_BYTE( "b56-08.bin", 0x000006, 0x20000, CRC(c9f0d38a) SHA1(aa22f1a06e00f90c546eebcd8b42da3e3c7d0781) ) ROM_LOAD64_BYTE( "b56-08.bin", 0x000006, 0x20000, CRC(c9f0d38a) SHA1(aa22f1a06e00f90c546eebcd8b42da3e3c7d0781) )
ROM_LOAD64_BYTE( "b56-03.bin", 0x000005, 0x20000, CRC(4045fd44) SHA1(a84be9eedba7aed30d4f2841016784f8024d9443) ) ROM_LOAD64_BYTE( "b56-03.bin", 0x000005, 0x20000, CRC(4045fd44) SHA1(a84be9eedba7aed30d4f2841016784f8024d9443) )
@ -1036,7 +989,7 @@ ROM_START( tetristh )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
ROM_LOAD( "c26-13.ic56", 0x00000, 0x10000, CRC(efa89dfa) SHA1(556e77c63cb95e441ea1d1beb3d43c61a48a3bb1) ) ROM_LOAD( "c26-13.ic56", 0x00000, 0x10000, CRC(efa89dfa) SHA1(556e77c63cb95e441ea1d1beb3d43c61a48a3bb1) )
ROM_REGION( 0x100000, "gfx1", 0 ) ROM_REGION( 0x100000, "tc0080vco", 0 )
ROM_LOAD64_BYTE( "c26-04.ic51", 0x000007, 0x20000, CRC(23ddf00f) SHA1(f7bb19db62d5e6cb27a6e98db68c54c01e34b776) ) ROM_LOAD64_BYTE( "c26-04.ic51", 0x000007, 0x20000, CRC(23ddf00f) SHA1(f7bb19db62d5e6cb27a6e98db68c54c01e34b776) )
ROM_LOAD64_BYTE( "c26-08.ic65", 0x000006, 0x20000, CRC(86071824) SHA1(00ba24b35ad93aa0f29e05068ddc9276f2d333af) ) ROM_LOAD64_BYTE( "c26-08.ic65", 0x000006, 0x20000, CRC(86071824) SHA1(00ba24b35ad93aa0f29e05068ddc9276f2d333af) )
ROM_LOAD64_BYTE( "c26-03.ic50", 0x000005, 0x20000, CRC(341be9ac) SHA1(a93c55cb20cb0433855ceb125bffcbcecb0e552d) ) ROM_LOAD64_BYTE( "c26-03.ic50", 0x000005, 0x20000, CRC(341be9ac) SHA1(a93c55cb20cb0433855ceb125bffcbcecb0e552d) )
@ -1067,7 +1020,7 @@ ROM_START( dleague )
ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "c02-23.40", 0x00000, 0x10000, CRC(5632ee49) SHA1(90dedaf40ab526529cd7d569b78a9d5451ec3e25) ) ROM_LOAD( "c02-23.40", 0x00000, 0x10000, CRC(5632ee49) SHA1(90dedaf40ab526529cd7d569b78a9d5451ec3e25) )
ROM_REGION( 0x400000, "gfx1", 0 ) ROM_REGION( 0x400000, "tc0080vco", 0 )
ROM_LOAD64_WORD_SWAP( "c02-02.15", 0x000006, 0x80000, CRC(b273f854) SHA1(5961b9fe2c49fb05f5bc3e27e05925dbef8577e9) ) ROM_LOAD64_WORD_SWAP( "c02-02.15", 0x000006, 0x80000, CRC(b273f854) SHA1(5961b9fe2c49fb05f5bc3e27e05925dbef8577e9) )
ROM_LOAD64_WORD_SWAP( "c02-03.17", 0x000004, 0x80000, CRC(c3fd0dcd) SHA1(43f32cefbca203bd0453e1c3d4523f0834900418) ) ROM_LOAD64_WORD_SWAP( "c02-03.17", 0x000004, 0x80000, CRC(c3fd0dcd) SHA1(43f32cefbca203bd0453e1c3d4523f0834900418) )
ROM_LOAD64_WORD_SWAP( "c02-24.19", 0x000002, 0x80000, CRC(18ef740a) SHA1(27f0445c053e28267e5688627d4f91d158d4fb07) ) ROM_LOAD64_WORD_SWAP( "c02-24.19", 0x000002, 0x80000, CRC(18ef740a) SHA1(27f0445c053e28267e5688627d4f91d158d4fb07) )
@ -1098,7 +1051,7 @@ ROM_START( dleaguej )
ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "c02-23.40", 0x00000, 0x10000, CRC(5632ee49) SHA1(90dedaf40ab526529cd7d569b78a9d5451ec3e25) ) ROM_LOAD( "c02-23.40", 0x00000, 0x10000, CRC(5632ee49) SHA1(90dedaf40ab526529cd7d569b78a9d5451ec3e25) )
ROM_REGION( 0x400000, "gfx1", 0 ) ROM_REGION( 0x400000, "tc0080vco", 0 )
ROM_LOAD64_WORD_SWAP( "c02-02.15", 0x000006, 0x80000, CRC(b273f854) SHA1(5961b9fe2c49fb05f5bc3e27e05925dbef8577e9) ) ROM_LOAD64_WORD_SWAP( "c02-02.15", 0x000006, 0x80000, CRC(b273f854) SHA1(5961b9fe2c49fb05f5bc3e27e05925dbef8577e9) )
ROM_LOAD64_WORD_SWAP( "c02-03.17", 0x000004, 0x80000, CRC(c3fd0dcd) SHA1(43f32cefbca203bd0453e1c3d4523f0834900418) ) ROM_LOAD64_WORD_SWAP( "c02-03.17", 0x000004, 0x80000, CRC(c3fd0dcd) SHA1(43f32cefbca203bd0453e1c3d4523f0834900418) )
ROM_LOAD64_WORD_SWAP( "c02-24.19", 0x000002, 0x80000, CRC(18ef740a) SHA1(27f0445c053e28267e5688627d4f91d158d4fb07) ) ROM_LOAD64_WORD_SWAP( "c02-24.19", 0x000002, 0x80000, CRC(18ef740a) SHA1(27f0445c053e28267e5688627d4f91d158d4fb07) )

View File

@ -193,21 +193,6 @@ static INPUT_PORTS_START( parentj )
INPUT_PORTS_END INPUT_PORTS_END
static const gfx_layout parentj_layout =
{
16,16,
RGN_FRAC(1,1),
4,
{ STEP4(0,1) },
{ STEP16(15*4, -4) },
{ STEP16(0, 16*4) },
16*16*4
};
static GFXDECODE_START( gfx_parentj )
GFXDECODE_ENTRY( "gfx1", 0, parentj_layout, 0x0, 0x400/16 )
GFXDECODE_END
/* unknown sources ... */ /* unknown sources ... */
TIMER_DEVICE_CALLBACK_MEMBER(taitoo_state::parentj_interrupt) TIMER_DEVICE_CALLBACK_MEMBER(taitoo_state::parentj_interrupt)
{ {
@ -240,15 +225,12 @@ void taitoo_state::parentj(machine_config &config)
screen.set_screen_update(FUNC(taitoo_state::screen_update)); screen.set_screen_update(FUNC(taitoo_state::screen_update));
screen.set_palette(m_palette); screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_parentj);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 33*16); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 33*16);
TC0080VCO(config, m_tc0080vco, 0); TC0080VCO(config, m_tc0080vco, 0);
m_tc0080vco->set_gfx_region(0);
m_tc0080vco->set_tx_region(1);
m_tc0080vco->set_offsets(1, 1); m_tc0080vco->set_offsets(1, 1);
m_tc0080vco->set_bgflip_yoffs(-2); m_tc0080vco->set_bgflip_yoffs(-2);
m_tc0080vco->set_gfxdecode_tag(m_gfxdecode); m_tc0080vco->set_palette(m_palette);
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
@ -263,7 +245,7 @@ ROM_START( parentj )
ROM_LOAD16_BYTE( "c42-13.21", 0x00000, 0x10000, CRC(823623eb) SHA1(7302cc0ac532f6190ae35218ea05bf8cf11fd687) ) ROM_LOAD16_BYTE( "c42-13.21", 0x00000, 0x10000, CRC(823623eb) SHA1(7302cc0ac532f6190ae35218ea05bf8cf11fd687) )
ROM_LOAD16_BYTE( "c42-12.20", 0x00001, 0x10000, CRC(8654b0ab) SHA1(edd23a731c1c60cab353e51ef5e66d33bc3fde61) ) ROM_LOAD16_BYTE( "c42-12.20", 0x00001, 0x10000, CRC(8654b0ab) SHA1(edd23a731c1c60cab353e51ef5e66d33bc3fde61) )
ROM_REGION( 0x100000, "gfx1", 0 ) ROM_REGION( 0x100000, "tc0080vco", 0 )
ROM_LOAD64_BYTE( "c42-05.06", 0x00000, 0x20000, CRC(7af0d45d) SHA1(bc527b74185596e4e77b34d08eb3e1678614b451) ) ROM_LOAD64_BYTE( "c42-05.06", 0x00000, 0x20000, CRC(7af0d45d) SHA1(bc527b74185596e4e77b34d08eb3e1678614b451) )
ROM_LOAD64_BYTE( "c42-04.05", 0x00001, 0x20000, CRC(133009a1) SHA1(fae5dd600384790225c24a62d1f8a00f0366dae9) ) ROM_LOAD64_BYTE( "c42-04.05", 0x00001, 0x20000, CRC(133009a1) SHA1(fae5dd600384790225c24a62d1f8a00f0366dae9) )
ROM_LOAD64_BYTE( "c42-09.13", 0x00002, 0x20000, CRC(ba35fb03) SHA1(b76e50d298ccc0f230c865b563cd8e02866a4ffb) ) ROM_LOAD64_BYTE( "c42-09.13", 0x00002, 0x20000, CRC(ba35fb03) SHA1(b76e50d298ccc0f230c865b563cd8e02866a4ffb) )

View File

@ -642,26 +642,6 @@ static INPUT_PORTS_START( ainferno )
INPUT_PORTS_END INPUT_PORTS_END
/************************************************************
GFX DECODING
************************************************************/
static const gfx_layout tilelayout =
{
16,16, /* 16x16 pixels */
RGN_FRAC(1,1),
4,
{ STEP4(0, 1) },
{ STEP16(15*4, -4) },
{ STEP16(0, 16*4) },
16*16*4
};
static GFXDECODE_START( gfx_airsys )
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 32*16 )
GFXDECODE_END
/************************************************************ /************************************************************
MACHINE DRIVERS MACHINE DRIVERS
************************************************************/ ************************************************************/
@ -730,16 +710,12 @@ void taitoair_state::airsys(machine_config &config)
m_screen->set_screen_update(FUNC(taitoair_state::screen_update)); m_screen->set_screen_update(FUNC(taitoair_state::screen_update));
m_screen->set_palette(m_palette); m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_airsys);
PALETTE(config, m_palette, palette_device::BLACK, 512*16+512*16); PALETTE(config, m_palette, palette_device::BLACK, 512*16+512*16);
TC0080VCO(config, m_tc0080vco, 0); TC0080VCO(config, m_tc0080vco, 0);
m_tc0080vco->set_gfx_region(0);
m_tc0080vco->set_tx_region(1);
m_tc0080vco->set_offsets(1, 1); m_tc0080vco->set_offsets(1, 1);
m_tc0080vco->set_bgflip_yoffs(-2); m_tc0080vco->set_bgflip_yoffs(-2);
m_tc0080vco->set_gfxdecode_tag(m_gfxdecode); m_tc0080vco->set_palette(m_palette);
/* sound hardware */ /* sound hardware */
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
@ -798,7 +774,7 @@ ROM_START( topland )
ROM_REGION( 0x10000, "mechacpu", 0 ) ROM_REGION( 0x10000, "mechacpu", 0 )
ROM_LOAD( "b62_mecha.rom", 0x00000, 0x08000, NO_DUMP ) ROM_LOAD( "b62_mecha.rom", 0x00000, 0x08000, NO_DUMP )
ROM_REGION( 0x100000, "gfx1", 0 ) /* 16x16 tiles */ ROM_REGION( 0x100000, "tc0080vco", 0 ) /* 16x16 tiles */
ROM_LOAD64_BYTE( "b62-33.39", 0x000007, 0x20000, CRC(38786867) SHA1(7292e3fa69cad6494f2e8e7efa9c3f989bdf958d) ) ROM_LOAD64_BYTE( "b62-33.39", 0x000007, 0x20000, CRC(38786867) SHA1(7292e3fa69cad6494f2e8e7efa9c3f989bdf958d) )
ROM_LOAD64_BYTE( "b62-36.48", 0x000006, 0x20000, CRC(4259e76a) SHA1(eb0dc5d0a6f875e3b8335fb30d4c2ad3880c31b9) ) ROM_LOAD64_BYTE( "b62-36.48", 0x000006, 0x20000, CRC(4259e76a) SHA1(eb0dc5d0a6f875e3b8335fb30d4c2ad3880c31b9) )
ROM_LOAD64_BYTE( "b62-29.27", 0x000005, 0x20000, CRC(efdd5c51) SHA1(6df3e9782946cf6f4a21ee3d335548c53cd21e3a) ) ROM_LOAD64_BYTE( "b62-29.27", 0x000005, 0x20000, CRC(efdd5c51) SHA1(6df3e9782946cf6f4a21ee3d335548c53cd21e3a) )
@ -847,7 +823,7 @@ ROM_START( toplandj )
ROM_REGION( 0x10000, "mechacpu", 0 ) ROM_REGION( 0x10000, "mechacpu", 0 )
ROM_LOAD( "b62_mecha.rom", 0x00000, 0x08000, NO_DUMP ) ROM_LOAD( "b62_mecha.rom", 0x00000, 0x08000, NO_DUMP )
ROM_REGION( 0x100000, "gfx1", 0 ) /* 16x16 tiles */ ROM_REGION( 0x100000, "tc0080vco", 0 ) /* 16x16 tiles */
ROM_LOAD64_BYTE( "b62-33.39", 0x000007, 0x20000, CRC(38786867) SHA1(7292e3fa69cad6494f2e8e7efa9c3f989bdf958d) ) ROM_LOAD64_BYTE( "b62-33.39", 0x000007, 0x20000, CRC(38786867) SHA1(7292e3fa69cad6494f2e8e7efa9c3f989bdf958d) )
ROM_LOAD64_BYTE( "b62-36.48", 0x000006, 0x20000, CRC(4259e76a) SHA1(eb0dc5d0a6f875e3b8335fb30d4c2ad3880c31b9) ) ROM_LOAD64_BYTE( "b62-36.48", 0x000006, 0x20000, CRC(4259e76a) SHA1(eb0dc5d0a6f875e3b8335fb30d4c2ad3880c31b9) )
ROM_LOAD64_BYTE( "b62-29.27", 0x000005, 0x20000, CRC(efdd5c51) SHA1(6df3e9782946cf6f4a21ee3d335548c53cd21e3a) ) ROM_LOAD64_BYTE( "b62-29.27", 0x000005, 0x20000, CRC(efdd5c51) SHA1(6df3e9782946cf6f4a21ee3d335548c53cd21e3a) )
@ -897,7 +873,7 @@ ROM_START( ainferno )
ROM_REGION( 0x10000, "mechacpu", 0 ) // on "Controller P.C.B." ROM_REGION( 0x10000, "mechacpu", 0 ) // on "Controller P.C.B."
ROM_LOAD( "c45-30.9", 0x00000, 0x10000, CRC(fa2db40f) SHA1(91c34a53d2fec619f2536ca79fdc6a17fb0d21e4) ) // 27c512, 1111xxxxxxxxxxxx = 0xFF ROM_LOAD( "c45-30.9", 0x00000, 0x10000, CRC(fa2db40f) SHA1(91c34a53d2fec619f2536ca79fdc6a17fb0d21e4) ) // 27c512, 1111xxxxxxxxxxxx = 0xFF
ROM_REGION( 0x100000, "gfx1", 0 ) /* 16x16 tiles */ ROM_REGION( 0x100000, "tc0080vco", 0 ) /* 16x16 tiles */
ROM_LOAD64_BYTE( "c45-11.28", 0x000007, 0x20000, CRC(d9b4b77c) SHA1(69d570efa8146fb0a712ff45e77bda6fd85769f8) ) ROM_LOAD64_BYTE( "c45-11.28", 0x000007, 0x20000, CRC(d9b4b77c) SHA1(69d570efa8146fb0a712ff45e77bda6fd85769f8) )
ROM_LOAD64_BYTE( "c45-15.40", 0x000006, 0x20000, CRC(d4610698) SHA1(5de519a23300d5b3b09ce7cf8c02a1a6b2fb985c) ) ROM_LOAD64_BYTE( "c45-15.40", 0x000006, 0x20000, CRC(d4610698) SHA1(5de519a23300d5b3b09ce7cf8c02a1a6b2fb985c) )
ROM_LOAD64_BYTE( "c45-12.29", 0x000005, 0x20000, CRC(4ae305b8) SHA1(2bbb981853a7abbba90afb8eb58f6869357551d3) ) ROM_LOAD64_BYTE( "c45-12.29", 0x000005, 0x20000, CRC(4ae305b8) SHA1(2bbb981853a7abbba90afb8eb58f6869357551d3) )
@ -952,7 +928,7 @@ ROM_START( ainfernoj )
ROM_REGION( 0x10000, "mechacpu", 0 ) // on "Controller P.C.B." ROM_REGION( 0x10000, "mechacpu", 0 ) // on "Controller P.C.B."
ROM_LOAD( "c45-30.9", 0x00000, 0x10000, CRC(fa2db40f) SHA1(91c34a53d2fec619f2536ca79fdc6a17fb0d21e4) ) // 27c512, 1111xxxxxxxxxxxx = 0xFF ROM_LOAD( "c45-30.9", 0x00000, 0x10000, CRC(fa2db40f) SHA1(91c34a53d2fec619f2536ca79fdc6a17fb0d21e4) ) // 27c512, 1111xxxxxxxxxxxx = 0xFF
ROM_REGION( 0x100000, "gfx1", 0 ) /* 16x16 tiles */ ROM_REGION( 0x100000, "tc0080vco", 0 ) /* 16x16 tiles */
ROM_LOAD64_BYTE( "c45-11.28", 0x000007, 0x20000, CRC(d9b4b77c) SHA1(69d570efa8146fb0a712ff45e77bda6fd85769f8) ) ROM_LOAD64_BYTE( "c45-11.28", 0x000007, 0x20000, CRC(d9b4b77c) SHA1(69d570efa8146fb0a712ff45e77bda6fd85769f8) )
ROM_LOAD64_BYTE( "c45-15.40", 0x000006, 0x20000, CRC(d4610698) SHA1(5de519a23300d5b3b09ce7cf8c02a1a6b2fb985c) ) ROM_LOAD64_BYTE( "c45-15.40", 0x000006, 0x20000, CRC(d4610698) SHA1(5de519a23300d5b3b09ce7cf8c02a1a6b2fb985c) )
ROM_LOAD64_BYTE( "c45-12.29", 0x000005, 0x20000, CRC(4ae305b8) SHA1(2bbb981853a7abbba90afb8eb58f6869357551d3) ) ROM_LOAD64_BYTE( "c45-12.29", 0x000005, 0x20000, CRC(4ae305b8) SHA1(2bbb981853a7abbba90afb8eb58f6869357551d3) )

View File

@ -24,7 +24,6 @@ public:
m_audiocpu(*this, "audiocpu"), m_audiocpu(*this, "audiocpu"),
m_tc0080vco(*this, "tc0080vco"), m_tc0080vco(*this, "tc0080vco"),
m_tc0040ioc(*this, "tc0040ioc"), m_tc0040ioc(*this, "tc0040ioc"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"), m_palette(*this, "palette"),
m_z80bank(*this, "z80bank"), m_z80bank(*this, "z80bank"),
m_io_p1x(*this, "P1X"), m_io_p1x(*this, "P1X"),
@ -48,7 +47,6 @@ private:
required_device<cpu_device> m_audiocpu; required_device<cpu_device> m_audiocpu;
required_device<tc0080vco_device> m_tc0080vco; required_device<tc0080vco_device> m_tc0080vco;
optional_device<tc0040ioc_device> m_tc0040ioc; optional_device<tc0040ioc_device> m_tc0040ioc;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
required_memory_bank m_z80bank; required_memory_bank m_z80bank;
@ -67,7 +65,6 @@ private:
void syvalion_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); void syvalion_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
void recordbr_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority); void recordbr_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority);
void dleague_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority); void dleague_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority);
inline void draw_single_sprite(bitmap_ind16 &bitmap, const rectangle &cliprect, u32 tile_offs, int sx, int sy, int ysize, int dx, int dy, int zx, int zy);
void taitoh_log_vram(); void taitoh_log_vram();
void dleague_map(address_map &map); void dleague_map(address_map &map);
void recordbr_map(address_map &map); void recordbr_map(address_map &map);

View File

@ -23,7 +23,6 @@ public:
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_watchdog(*this, "watchdog"), m_watchdog(*this, "watchdog"),
m_tc0080vco(*this, "tc0080vco"), m_tc0080vco(*this, "tc0080vco"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"), m_palette(*this, "palette"),
m_io_in(*this, "IN%u", 0U) m_io_in(*this, "IN%u", 0U)
{ } { }
@ -38,7 +37,6 @@ private:
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<watchdog_timer_device> m_watchdog; required_device<watchdog_timer_device> m_watchdog;
required_device<tc0080vco_device> m_tc0080vco; required_device<tc0080vco_device> m_tc0080vco;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
required_ioport_array<2> m_io_in; required_ioport_array<2> m_io_in;

View File

@ -47,7 +47,6 @@ public:
, m_tc0080vco(*this, "tc0080vco") , m_tc0080vco(*this, "tc0080vco")
, m_tc0220ioc(*this, "tc0220ioc") , m_tc0220ioc(*this, "tc0220ioc")
, m_yoke(*this, "yokectrl") , m_yoke(*this, "yokectrl")
, m_gfxdecode(*this, "gfxdecode")
, m_screen(*this, "screen") , m_screen(*this, "screen")
, m_palette(*this, "palette") , m_palette(*this, "palette")
, m_z80bank(*this, "z80bank") , m_z80bank(*this, "z80bank")
@ -77,7 +76,6 @@ private:
required_device<tc0080vco_device> m_tc0080vco; required_device<tc0080vco_device> m_tc0080vco;
required_device<tc0220ioc_device> m_tc0220ioc; required_device<tc0220ioc_device> m_tc0220ioc;
required_device<taitoio_yoke_device> m_yoke; required_device<taitoio_yoke_device> m_yoke;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen; required_device<screen_device> m_screen;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;

View File

@ -51,241 +51,57 @@ sprite RAM
#include "includes/taito_h.h" #include "includes/taito_h.h"
/* These are hand-tuned values */
static const int zoomy_conv_table[] =
{
/* +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f */
0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05, 0x06,0x06,0x07,0x08,0x09,0x0a,0x0a,0x0b, /* 0x00 */
0x0b,0x0c,0x0c,0x0d,0x0e,0x0e,0x0f,0x10, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x16,
0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e, 0x1f,0x20,0x21,0x22,0x24,0x25,0x26,0x27,
0x28,0x2a,0x2b,0x2c,0x2e,0x30,0x31,0x32, 0x34,0x36,0x37,0x38,0x3a,0x3c,0x3e,0x3f,
0x40,0x41,0x42,0x42,0x43,0x43,0x44,0x44, 0x45,0x45,0x46,0x46,0x47,0x47,0x48,0x49, /* 0x40 */
0x4a,0x4a,0x4b,0x4b,0x4c,0x4d,0x4e,0x4f, 0x4f,0x50,0x51,0x51,0x52,0x53,0x54,0x55,
0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d, 0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x66,
0x67,0x68,0x6a,0x6b,0x6c,0x6e,0x6f,0x71, 0x72,0x74,0x76,0x78,0x80,0x7b,0x7d,0x7f
};
inline void taitoh_state::draw_single_sprite(bitmap_ind16 &bitmap, const rectangle &cliprect, u32 tile_offs, int sx, int sy, int ysize, int dx, int dy, int zx, int zy)
{
int y = sy;
for (int j = 0; j < ysize; j++)
{
int x = sx;
for (int k = 0; k < 4; k++)
{
if (tile_offs >= 0x1000) /* or dleague pitcher gets blanked */
{
const u32 tile = m_tc0080vco->cram_0_r(tile_offs) & 0x7fff;
const u32 color = m_tc0080vco->cram_1_r(tile_offs) & 0x001f;
int flipx = m_tc0080vco->cram_1_r(tile_offs) & 0x0040;
int flipy = m_tc0080vco->cram_1_r(tile_offs) & 0x0080;
if (m_tc0080vco->flipscreen_r())
{
flipx ^= 0x0040;
flipy ^= 0x0080;
}
m_gfxdecode->gfx(0)->zoom_transpen(bitmap,cliprect,
tile,
color,
flipx, flipy,
x, y,
zx, zy, 0);
}
tile_offs++;
x += dx;
}
y += dy;
}
}
/*************************************************************************** /***************************************************************************
Screen refresh Screen refresh
***************************************************************************/ ***************************************************************************/
void taitoh_state::syvalion_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) void taitoh_state::syvalion_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
/* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */
static const u8 size[] = { 1, 2, 4, 4 };
for (int offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2) for (int offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2)
{ {
int x0 = m_tc0080vco->sprram_r(offs + 1) & 0x3ff; m_tc0080vco->get_sprite_params(offs, false);
int y0 = m_tc0080vco->sprram_r(offs + 0) & 0x3ff;
int zoomx = (m_tc0080vco->sprram_r(offs + 2) & 0x7f00) >> 8;
u32 tile_offs = (m_tc0080vco->sprram_r(offs + 3) & 0x1fff) << 2;
const u8 ysize = size[(m_tc0080vco->sprram_r(offs) & 0x0c00) >> 10];
if (tile_offs) if (m_tc0080vco->get_sprite_tile_offs())
{ {
int dx, ex, zx; m_tc0080vco->draw_single_sprite(bitmap, cliprect);
/* The increasing ratio of expansion is different whether zoom value */
/* is less or more than 63. */
if (zoomx < 63)
{
dx = 8 + (zoomx + 2) / 8;
ex = (zoomx + 2) % 8;
zx = ((dx << 1) + ex) << 11;
}
else
{
dx = 16 + (zoomx - 63) / 4;
ex = (zoomx - 63) % 4;
zx = (dx + ex) << 12;
}
if (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400;
if (m_tc0080vco->flipscreen_r())
{
x0 = 497 - x0;
y0 = 498 - y0;
dx = -dx;
}
else
{
x0 += 1;
y0 += 2;
}
draw_single_sprite(bitmap, cliprect, tile_offs, x0, y0, ysize, dx, dx, zx, zx);
} }
} }
} }
void taitoh_state::recordbr_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority) void taitoh_state::recordbr_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority)
{ {
/* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */
static const u8 size[] = { 1, 2, 4, 4 };
for (int offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2) for (int offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2)
{ {
if (offs < 0x01b0 && priority == 0) continue; if (offs < 0x01b0 && priority == 0) continue;
if (offs >= 0x01b0 && priority == 1) continue; if (offs >= 0x01b0 && priority == 1) continue;
int x0 = m_tc0080vco->sprram_r(offs + 1) & 0x3ff; m_tc0080vco->get_sprite_params(offs, true);
int y0 = m_tc0080vco->sprram_r(offs + 0) & 0x3ff;
int zoomx = (m_tc0080vco->sprram_r(offs + 2) & 0x7f00) >> 8;
int zoomy = (m_tc0080vco->sprram_r(offs + 2) & 0x007f);
u32 tile_offs = (m_tc0080vco->sprram_r(offs + 3) & 0x1fff) << 2;
const u8 ysize = size[(m_tc0080vco->sprram_r(offs) & 0x0c00) >> 10];
if (tile_offs) if (m_tc0080vco->get_sprite_tile_offs())
{ {
int dx, dy, ex, ey, zx, zy; m_tc0080vco->draw_single_sprite(bitmap, cliprect);
/* Convert zoomy value to real value as zoomx */
zoomy = zoomy_conv_table[zoomy];
if (zoomx < 63)
{
dx = 8 + (zoomx + 2) / 8;
ex = (zoomx + 2) % 8;
zx = ((dx << 1) + ex) << 11;
}
else
{
dx = 16 + (zoomx - 63) / 4;
ex = (zoomx - 63) % 4;
zx = (dx + ex) << 12;
}
if (zoomy < 63)
{
dy = 8 + (zoomy + 2) / 8;
ey = (zoomy + 2) % 8;
zy = ((dy << 1) + ey) << 11;
}
else
{
dy = 16 + (zoomy - 63) / 4;
ey = (zoomy - 63) % 4;
zy = (dy + ey) << 12;
}
if (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400;
if (m_tc0080vco->flipscreen_r())
{
x0 = 497 - x0;
y0 = 498 - y0;
dx = -dx;
dy = -dy;
}
else
{
x0 += 1;
y0 += 2;
}
draw_single_sprite(bitmap, cliprect, tile_offs, x0, y0, ysize, dx, dy, zx, zy);
} }
} }
} }
void taitoh_state::dleague_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority) void taitoh_state::dleague_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority)
{ {
/* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */
static const u8 size[] = { 1, 2, 4, 4 };
for (int offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2) for (int offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2)
{ {
int x0 = m_tc0080vco->sprram_r(offs + 1) & 0x3ff; m_tc0080vco->get_sprite_params(offs, false);
int y0 = m_tc0080vco->sprram_r(offs + 0) & 0x3ff; int pribit = (m_tc0080vco->sprram_r(offs + 0) & 0x1000) >> 12;
int zoomx = (m_tc0080vco->sprram_r(offs + 2) & 0x7f00) >> 8;
u32 tile_offs = (m_tc0080vco->sprram_r(offs + 3) & 0x1fff) << 2;
int pribit = (m_tc0080vco->sprram_r(offs + 0) & 0x1000) >> 12;
const u8 ysize = size[(m_tc0080vco->sprram_r(offs) & 0x0c00) >> 10];
if (tile_offs) if (m_tc0080vco->get_sprite_tile_offs())
{ {
int dx, ex, zx; if (m_tc0080vco->get_sprite_zoomx() < 63)
/* The increasing ratio of expansion is different whether zoom value */
/* is less or more than 63. */
if (zoomx < 63)
{
dx = 8 + (zoomx + 2) / 8;
ex = (zoomx + 2) % 8;
zx = ((dx << 1) + ex) << 11;
pribit = 0; pribit = 0;
}
else
{
dx = 16 + (zoomx - 63) / 4;
ex = (zoomx - 63) % 4;
zx = (dx + ex) << 12;
}
if (m_tc0080vco->scrram_r(0x0002) & 0x8000) if (m_tc0080vco->scrram_r(0x0002) & 0x8000)
pribit = 1; pribit = 1;
if (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400;
if (m_tc0080vco->flipscreen_r())
{
x0 = 497 - x0;
y0 = 498 - y0;
dx = -dx;
}
else
{
x0 += 1;
y0 += 2;
}
if (priority == pribit) if (priority == pribit)
{ {
draw_single_sprite(bitmap, cliprect, tile_offs, x0, y0, ysize, dx, dx, zx, zx); m_tc0080vco->draw_single_sprite(bitmap, cliprect);
} }
} }
} }

View File

@ -10,121 +10,18 @@ Based on taito_h.cpp
#include "includes/taito_o.h" #include "includes/taito_o.h"
/* These are hand-tuned values */
static const int zoomy_conv_table[] =
{
/* +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f */
0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05, 0x06,0x06,0x07,0x08,0x09,0x0a,0x0a,0x0b, /* 0x00 */
0x0b,0x0c,0x0c,0x0d,0x0e,0x0e,0x0f,0x10, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x16,
0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e, 0x1f,0x20,0x21,0x22,0x24,0x25,0x26,0x27,
0x28,0x2a,0x2b,0x2c,0x2e,0x30,0x31,0x32, 0x34,0x36,0x37,0x38,0x3a,0x3c,0x3e,0x3f,
0x40,0x41,0x42,0x42,0x43,0x43,0x44,0x44, 0x45,0x45,0x46,0x46,0x47,0x47,0x48,0x49, /* 0x40 */
0x4a,0x4a,0x4b,0x4b,0x4c,0x4d,0x4e,0x4f, 0x4f,0x50,0x51,0x51,0x52,0x53,0x54,0x55,
0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d, 0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x66,
0x67,0x68,0x6a,0x6b,0x6c,0x6e,0x6f,0x71, 0x72,0x74,0x76,0x78,0x80,0x7b,0x7d,0x7f
};
void taitoo_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority) void taitoo_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority)
{ {
/* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */
static const u8 size[] = { 1, 2, 4, 4 };
for (int offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2) for (int offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2)
{ {
if (offs < 0x01b0 && priority == 0) continue; if (offs < 0x01b0 && priority == 0) continue;
if (offs >= 0x01b0 && priority == 1) continue; if (offs >= 0x01b0 && priority == 1) continue;
int x0 = m_tc0080vco->sprram_r(offs + 1) & 0x3ff; m_tc0080vco->get_sprite_params(offs, true);
int y0 = m_tc0080vco->sprram_r(offs + 0) & 0x3ff;
int zoomx = (m_tc0080vco->sprram_r(offs + 2) & 0x7f00) >> 8;
int zoomy = (m_tc0080vco->sprram_r(offs + 2) & 0x007f);
u32 tile_offs = (m_tc0080vco->sprram_r(offs + 3) & 0x1fff) << 2;
const u8 ysize = size[(m_tc0080vco->sprram_r(offs) & 0x0c00) >> 10];
if (tile_offs) if (m_tc0080vco->get_sprite_tile_offs())
{ {
int dx, dy, ex, ey, zx, zy; m_tc0080vco->draw_single_sprite(bitmap, cliprect);
/* Convert zoomy value to real value as zoomx */
zoomy = zoomy_conv_table[zoomy];
if (zoomx < 63)
{
dx = 8 + (zoomx + 2) / 8;
ex = (zoomx + 2) % 8;
zx = ((dx << 1) + ex) << 11;
}
else
{
dx = 16 + (zoomx - 63) / 4;
ex = (zoomx - 63) % 4;
zx = (dx + ex) << 12;
}
if (zoomy < 63)
{
dy = 8 + (zoomy + 2) / 8;
ey = (zoomy + 2) % 8;
zy = ((dy << 1) + ey) << 11;
}
else
{
dy = 16 + (zoomy - 63) / 4;
ey = (zoomy - 63) % 4;
zy = (dy + ey) << 12;
}
if (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400;
if (m_tc0080vco->flipscreen_r())
{
x0 = 497 - x0;
y0 = 498 - y0;
dx = -dx;
dy = -dy;
}
else
{
x0 += 1;
y0 += 2;
}
int y = y0;
for (int j = 0; j < ysize; j++)
{
int x = x0;
for (int k = 0; k < 4; k++)
{
if (tile_offs >= 0x1000)
{
const u32 tile = m_tc0080vco->cram_0_r(tile_offs) & 0x7fff;
const u32 color = m_tc0080vco->cram_1_r(tile_offs) & 0x001f;
int flipx = m_tc0080vco->cram_1_r(tile_offs) & 0x0040;
int flipy = m_tc0080vco->cram_1_r(tile_offs) & 0x0080;
if (m_tc0080vco->flipscreen_r())
{
flipx ^= 0x0040;
flipy ^= 0x0080;
}
m_gfxdecode->gfx(0)->zoom_transpen(bitmap,cliprect,
tile,
color,
flipx, flipy,
x, y,
zx, zy, 0
);
}
tile_offs++;
x += dx;
}
y += dy;
}
} }
} }
} }

View File

@ -51,21 +51,6 @@ sprite RAM
#include "includes/taitoair.h" #include "includes/taitoair.h"
/* These are hand-tuned values */
static const int zoomy_conv_table[] =
{
/* +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f */
0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05, 0x06,0x06,0x07,0x08,0x09,0x0a,0x0a,0x0b, /* 0x00 */
0x0b,0x0c,0x0c,0x0d,0x0e,0x0e,0x0f,0x10, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x16,
0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e, 0x1f,0x20,0x21,0x22,0x24,0x25,0x26,0x27,
0x28,0x2a,0x2b,0x2c,0x2e,0x30,0x31,0x32, 0x34,0x36,0x37,0x38,0x3a,0x3c,0x3e,0x3f,
0x40,0x41,0x42,0x42,0x43,0x43,0x44,0x44, 0x45,0x45,0x46,0x46,0x47,0x47,0x48,0x49, /* 0x40 */
0x4a,0x4a,0x4b,0x4b,0x4c,0x4d,0x4e,0x4f, 0x4f,0x50,0x51,0x51,0x52,0x53,0x54,0x55,
0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d, 0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x66,
0x67,0x68,0x6a,0x6b,0x6c,0x6e,0x6f,0x71, 0x72,0x74,0x76,0x78,0x80,0x7b,0x7d,0x7f
};
/*************************************************************************** /***************************************************************************
Screen refresh Screen refresh
***************************************************************************/ ***************************************************************************/
@ -81,10 +66,7 @@ int taitoair_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect
*/ */
int taitoair_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int start_offset) int taitoair_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int start_offset)
{ {
/* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */
//const u16 stop_values[4] = { 0xc00, 0, 0, 0 }; //const u16 stop_values[4] = { 0xc00, 0, 0, 0 };
static const u8 size[] = { 1, 2, 4, 4 };
for (int offs = start_offset; offs >= 0; offs -= 0x008 / 2) for (int offs = start_offset; offs >= 0; offs -= 0x008 / 2)
{ {
@ -99,92 +81,11 @@ int taitoair_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect
m_tc0080vco->sprram_r(offs + 0) == 0xcff) // Air Inferno m_tc0080vco->sprram_r(offs + 0) == 0xcff) // Air Inferno
return offs - 8/2; return offs - 8/2;
int x0 = m_tc0080vco->sprram_r(offs + 1) & 0x3ff; m_tc0080vco->get_sprite_params(offs, true);
int y0 = m_tc0080vco->sprram_r(offs + 0) & 0x3ff;
int zoomx = (m_tc0080vco->sprram_r(offs + 2) & 0x7f00) >> 8;
int zoomy = (m_tc0080vco->sprram_r(offs + 2) & 0x007f);
u32 tile_offs = (m_tc0080vco->sprram_r(offs + 3) & 0x1fff) << 2;
const u8 ysize = size[(m_tc0080vco->sprram_r(offs) & 0x0c00) >> 10];
if (tile_offs) if (m_tc0080vco->get_sprite_tile_offs())
{ {
/* Convert zoomy value to real value as zoomx */ m_tc0080vco->draw_single_sprite(bitmap, cliprect);
zoomy = zoomy_conv_table[zoomy];
int dx, dy, ex, ey, zx, zy;
if (zoomx < 63)
{
dx = 8 + (zoomx + 2) / 8;
ex = (zoomx + 2) % 8;
zx = ((dx << 1) + ex) << 11;
}
else
{
dx = 16 + (zoomx - 63) / 4;
ex = (zoomx - 63) % 4;
zx = (dx + ex) << 12;
}
if (zoomy < 63)
{
dy = 8 + (zoomy + 2) / 8;
ey = (zoomy + 2) % 8;
zy = ((dy << 1) + ey) << 11;
}
else
{
dy = 16 + (zoomy - 63) / 4;
ey = (zoomy - 63) % 4;
zy = (dy + ey) << 12;
}
if (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400;
if (m_tc0080vco->flipscreen_r())
{
x0 = 497 - x0;
y0 = 498 - y0;
dx = -dx;
dy = -dy;
}
else
{
x0 += 1;
y0 += 2;
}
int y = y0;
for (int j = 0; j < ysize; j++)
{
int x = x0;
for (int k = 0; k < 4; k++)
{
if (tile_offs >= 0x1000)
{
const u32 tile = m_tc0080vco->cram_0_r(tile_offs) & 0x7fff;
const u32 color = m_tc0080vco->cram_1_r(tile_offs) & 0x001f;
int flipx = m_tc0080vco->cram_1_r(tile_offs) & 0x0040;
int flipy = m_tc0080vco->cram_1_r(tile_offs) & 0x0080;
if (m_tc0080vco->flipscreen_r())
{
flipx = !flipx;
flipy = !flipy;
}
m_gfxdecode->gfx(0)->zoom_transpen(bitmap,cliprect,
tile,
color,
flipx, flipy,
x, y,
zx, zy, 0);
}
tile_offs++;
x += dx;
}
y += dy;
}
} }
} }

View File

@ -37,7 +37,7 @@ start of the tc0080vco address space - not the start of chain ram.
In practice only Dleague seems to do this, for c.10 frames as the In practice only Dleague seems to do this, for c.10 frames as the
pitcher bowls, and I think it's a coding error. Log it and see.] pitcher bowls, and I think it's a coding error. Log it and see.]
[Ainferno and Syvalion are only games using FG0 layer.] [Parentj, Ainferno and Syvalion are only games using FG0 layer.]
Control registers Control registers
@ -81,32 +81,32 @@ this seems to be the only zoom feature actually used in the games.
DEFINE_DEVICE_TYPE(TC0080VCO, tc0080vco_device, "tc0080vco", "Taito TC0080VCO") DEFINE_DEVICE_TYPE(TC0080VCO, tc0080vco_device, "tc0080vco", "Taito TC0080VCO")
tc0080vco_device::tc0080vco_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) tc0080vco_device::tc0080vco_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, TC0080VCO, tag, owner, clock), : device_t(mconfig, TC0080VCO, tag, owner, clock)
m_ram(nullptr), , device_gfx_interface(mconfig, *this, nullptr)
m_bg0_ram_0(nullptr), , m_ram(nullptr)
m_bg0_ram_1(nullptr), , m_bg0_ram_0(nullptr)
m_bg1_ram_0(nullptr), , m_bg0_ram_1(nullptr)
m_bg1_ram_1(nullptr), , m_bg1_ram_0(nullptr)
m_tx_ram_0(nullptr), , m_bg1_ram_1(nullptr)
m_tx_ram_1(nullptr), , m_tx_ram_0(nullptr)
m_char_ram(nullptr), , m_tx_ram_1(nullptr)
m_bgscroll_ram(nullptr), , m_char_ram(nullptr)
m_chain_ram_0(nullptr), , m_bgscroll_ram(nullptr)
m_chain_ram_1(nullptr), , m_chain_ram_0(nullptr)
m_spriteram(nullptr), , m_chain_ram_1(nullptr)
m_scroll_ram(nullptr), , m_spriteram(nullptr)
m_bg0_scrollx(0), , m_scroll_ram(nullptr)
m_bg0_scrolly(0), , m_bg0_scrollx(0)
m_bg1_scrollx(0), , m_bg0_scrolly(0)
m_bg1_scrolly(0), , m_bg1_scrollx(0)
m_flipscreen(0), , m_bg1_scrolly(0)
m_gfxnum(0), , m_flipscreen(0)
m_txnum(0), , m_bg_xoffs(0)
m_bg_xoffs(0), , m_bg_yoffs(0)
m_bg_yoffs(0), , m_bg_flip_yoffs(0)
m_bg_flip_yoffs(0), , m_has_fg0(1)
m_has_fg0(1), , m_colbase(0)
m_gfxdecode(*this, finder_base::DUMMY_TAG) , m_gfx_region(*this, DEVICE_SELF)
{ {
} }
@ -120,22 +120,31 @@ void tc0080vco_device::device_start()
#define XOR(a) WORD_XOR_BE(a) #define XOR(a) WORD_XOR_BE(a)
gfx_layout tilelayout =
{
16,16, /* 16x16 pixels */
0,
4,
{ STEP4(0,1) },
{ STEP16(15*4, -4) },
{ STEP16(0, 16*4) },
16*16*4
};
tilelayout.total = m_gfx_region->bytes() / ((16*16*4) / 8);
static const gfx_layout charlayout = static const gfx_layout charlayout =
{ {
8, 8, /* 8x8 pixels */ 8, 8, /* 8x8 pixels */
256, /* 256 chars */ 256, /* 256 chars */
3, /* 3 bits per pixel */ 3, /* 3 bits per pixel */
{ 0x10000*8 + XOR(2)*4, XOR(0)*4, XOR(2)*4 }, { 0x10000*8 + XOR(2)*4, XOR(0)*4, XOR(2)*4 },
{ 0, 1, 2, 3, 4, 5, 6, 7 }, { STEP8(0,1) },
{ 16*0, 16*1, 16*2, 16*3, 16*4, 16*5, 16*6, 16*7 }, { STEP8(0,8*2) },
16*8 16*8
}; };
if(!m_gfxdecode->started()) m_tilemap[0] = &machine().tilemap().create(*this, tilemap_get_info_delegate(FUNC(tc0080vco_device::get_bg0_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64);
throw device_missing_dependencies(); m_tilemap[1] = &machine().tilemap().create(*this, tilemap_get_info_delegate(FUNC(tc0080vco_device::get_bg1_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64);
m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(tc0080vco_device::get_bg0_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64);
m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(tc0080vco_device::get_bg1_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64);
m_tilemap[0]->set_transparent_pen(0); m_tilemap[0]->set_transparent_pen(0);
m_tilemap[1]->set_transparent_pen(0); m_tilemap[1]->set_transparent_pen(0);
@ -149,7 +158,7 @@ void tc0080vco_device::device_start()
m_tilemap[0]->set_scroll_rows(512); m_tilemap[0]->set_scroll_rows(512);
/* Perform extra initialisations for text layer */ /* Perform extra initialisations for text layer */
m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(tc0080vco_device::get_tx_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); m_tilemap[2] = &machine().tilemap().create(*this, tilemap_get_info_delegate(FUNC(tc0080vco_device::get_tx_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
m_tilemap[2]->set_scrolldx(0, 0); m_tilemap[2]->set_scrolldx(0, 0);
m_tilemap[2]->set_scrolldy(48, -448); m_tilemap[2]->set_scrolldy(48, -448);
@ -175,7 +184,8 @@ void tc0080vco_device::device_start()
m_scroll_ram = m_ram.get() + 0x20800 / 2; m_scroll_ram = m_ram.get() + 0x20800 / 2;
/* create the char set (gfx will then be updated dynamically from RAM) */ /* create the char set (gfx will then be updated dynamically from RAM) */
m_gfxdecode->set_gfx(m_txnum, std::make_unique<gfx_element>(&m_gfxdecode->palette(), charlayout, (u8 *)m_char_ram, 0, 1, 512)); set_gfx(0, std::make_unique<gfx_element>(&palette(), tilelayout, m_gfx_region->base(), 0, 0x20, m_colbase));
set_gfx(1, std::make_unique<gfx_element>(&palette(), charlayout, (u8 *)m_char_ram, 0, 0x01, m_colbase + 512));
save_pointer(NAME(m_ram), TC0080VCO_RAM_SIZE / 2); save_pointer(NAME(m_ram), TC0080VCO_RAM_SIZE / 2);
} }
@ -185,7 +195,6 @@ void tc0080vco_device::device_start()
DEVICE HANDLERS DEVICE HANDLERS
*****************************************************************************/ *****************************************************************************/
#if 0
static const int tc0080vco_zoomy_conv_table[] = static const int tc0080vco_zoomy_conv_table[] =
{ {
/* These are hand-tuned values... */ /* These are hand-tuned values... */
@ -200,8 +209,114 @@ static const int tc0080vco_zoomy_conv_table[] =
0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d, 0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x66, 0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d, 0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x66,
0x67,0x68,0x6a,0x6b,0x6c,0x6e,0x6f,0x71, 0x72,0x74,0x76,0x78,0x80,0x7b,0x7d,0x7f 0x67,0x68,0x6a,0x6b,0x6c,0x6e,0x6f,0x71, 0x72,0x74,0x76,0x78,0x80,0x7b,0x7d,0x7f
}; };
#endif
/* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */
static const u8 size[] = { 1, 2, 4, 4 };
void tc0080vco_device::get_sprite_params(int offs, bool zoomy_enable)
{
m_sprite.tile_offs = (m_spriteram[offs + 3] & 0x1fff) << 2;
if (m_sprite.tile_offs)
{
m_sprite.x0 = m_spriteram[offs + 1] & 0x03ff;
m_sprite.y0 = m_spriteram[offs + 0] & 0x03ff;
m_sprite.zoomx = (m_spriteram[offs + 2] & 0x7f00) >> 8;
/* Convert zoomy value to real value as zoomx */
m_sprite.zoomy = zoomy_enable ? tc0080vco_zoomy_conv_table[m_spriteram[offs + 2] & 0x007f] : m_sprite.zoomx;
m_sprite.ysize = size[(m_spriteram[offs + 0] & 0x0c00) >> 10];
/* The increasing ratio of expansion is different whether zoom value */
/* is less or more than 63. */
if (m_sprite.zoomx < 63)
{
m_sprite.dx = 8 + (m_sprite.zoomx + 2) / 8;
m_sprite.ex = (m_sprite.zoomx + 2) % 8;
m_sprite.zx = ((m_sprite.dx << 1) + m_sprite.ex) << 11;
}
else
{
m_sprite.dx = 16 + (m_sprite.zoomx - 63) / 4;
m_sprite.ex = (m_sprite.zoomx - 63) % 4;
m_sprite.zx = (m_sprite.dx + m_sprite.ex) << 12;
}
if (m_sprite.zoomx == m_sprite.zoomy)
{
m_sprite.dy = m_sprite.dx;
m_sprite.ey = m_sprite.ex;
m_sprite.zy = m_sprite.zx;
}
else
{
if (m_sprite.zoomy < 63)
{
m_sprite.dy = 8 + (m_sprite.zoomy + 2) / 8;
m_sprite.ey = (m_sprite.zoomy + 2) % 8;
m_sprite.zy = ((m_sprite.dy << 1) + m_sprite.ey) << 11;
}
else
{
m_sprite.dy = 16 + (m_sprite.zoomy - 63) / 4;
m_sprite.ey = (m_sprite.zoomy - 63) % 4;
m_sprite.zy = (m_sprite.dy + m_sprite.ey) << 12;
}
}
if (m_sprite.x0 >= 0x200) m_sprite.x0 -= 0x400;
if (m_sprite.y0 >= 0x200) m_sprite.y0 -= 0x400;
if (m_flipscreen)
{
m_sprite.x0 = 497 - m_sprite.x0;
m_sprite.y0 = 498 - m_sprite.y0;
m_sprite.dx = -m_sprite.dx;
m_sprite.dy = -m_sprite.dy;
}
else
{
m_sprite.x0 += 1;
m_sprite.y0 += 2;
}
}
}
void tc0080vco_device::draw_single_sprite(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
u32 tile_offs = m_sprite.tile_offs;
int y = m_sprite.y0;
for (int j = 0; j < m_sprite.ysize; j++)
{
int x = m_sprite.x0;
for (int k = 0; k < 4; k++)
{
if (tile_offs >= 0x1000) /* or dleague pitcher gets blanked */
{
const u32 tile = m_chain_ram_0[tile_offs] & 0x7fff;
const u32 color = m_chain_ram_1[tile_offs] & 0x001f;
int flipx = m_chain_ram_1[tile_offs] & 0x0040;
int flipy = m_chain_ram_1[tile_offs] & 0x0080;
if (m_flipscreen)
{
flipx ^= 0x0040;
flipy ^= 0x0080;
}
gfx(0)->zoom_transpen(bitmap,cliprect,
tile,
color,
flipx, flipy,
x, y,
m_sprite.zx, m_sprite.zy, 0);
}
tile_offs++;
x += m_sprite.dx;
}
y += m_sprite.dy;
}
}
TILE_GET_INFO_MEMBER(tc0080vco_device::get_bg0_tile_info) TILE_GET_INFO_MEMBER(tc0080vco_device::get_bg0_tile_info)
{ {
@ -212,7 +327,7 @@ TILE_GET_INFO_MEMBER(tc0080vco_device::get_bg0_tile_info)
tileinfo.category = 0; tileinfo.category = 0;
SET_TILE_INFO_MEMBER(m_gfxnum, SET_TILE_INFO_MEMBER(0,
tile, tile,
color, color,
TILE_FLIPYX((m_bg0_ram_1[tile_index] & 0x00c0) >> 6)); TILE_FLIPYX((m_bg0_ram_1[tile_index] & 0x00c0) >> 6));
@ -227,7 +342,7 @@ TILE_GET_INFO_MEMBER(tc0080vco_device::get_bg1_tile_info)
tileinfo.category = 0; tileinfo.category = 0;
SET_TILE_INFO_MEMBER(m_gfxnum, SET_TILE_INFO_MEMBER(0,
tile, tile,
color, color,
TILE_FLIPYX((m_bg1_ram_1[tile_index] & 0x00c0) >> 6)); TILE_FLIPYX((m_bg1_ram_1[tile_index] & 0x00c0) >> 6));
@ -254,14 +369,14 @@ TILE_GET_INFO_MEMBER(tc0080vco_device::get_tx_tile_info)
tileinfo.category = 0; tileinfo.category = 0;
} }
SET_TILE_INFO_MEMBER(m_txnum, SET_TILE_INFO_MEMBER(1,
tile, tile,
0, 0,
0); 0);
} }
WRITE16_MEMBER( tc0080vco_device::scrollram_w ) void tc0080vco_device::scrollram_w(offs_t offset, u16 data)
{ {
switch (offset) switch (offset)
{ {
@ -299,12 +414,12 @@ WRITE16_MEMBER( tc0080vco_device::scrollram_w )
} }
} }
READ16_MEMBER( tc0080vco_device::word_r ) u16 tc0080vco_device::word_r(offs_t offset)
{ {
return m_ram[offset]; return m_ram[offset];
} }
WRITE16_MEMBER( tc0080vco_device::word_w ) void tc0080vco_device::word_w(offs_t offset, u16 data, u16 mem_mask)
{ {
COMBINE_DATA(&m_ram[offset]); COMBINE_DATA(&m_ram[offset]);
@ -312,7 +427,7 @@ WRITE16_MEMBER( tc0080vco_device::word_w )
if (offset < 0x1000 / 2) if (offset < 0x1000 / 2)
{ {
m_gfxdecode->gfx(m_txnum)->mark_dirty(offset / 8); gfx(1)->mark_dirty(offset / 8);
#if 0 #if 0
if (!m_has_fg0) if (!m_has_fg0)
{ {
@ -343,7 +458,7 @@ WRITE16_MEMBER( tc0080vco_device::word_w )
else if (offset < 0x11000 / 2) else if (offset < 0x11000 / 2)
{ {
m_gfxdecode->gfx(m_txnum)->mark_dirty((offset - 0x10000 / 2) / 8); gfx(1)->mark_dirty((offset - 0x10000 / 2) / 8);
#if 0 #if 0
if (!m_has_fg0) if (!m_has_fg0)
{ {
@ -372,21 +487,19 @@ WRITE16_MEMBER( tc0080vco_device::word_w )
else if (offset < 0x20800 / 2) /* sprite ram */ else if (offset < 0x20800 / 2) /* sprite ram */
{} {}
else if (offset < 0x20fff / 2) else if (offset < 0x20fff / 2)
scrollram_w(space, offset - (0x20800 / 2), m_ram[offset], mem_mask); scrollram_w(offset - (0x20800 / 2), m_ram[offset]);
} }
void tc0080vco_device::tilemap_update( ) void tc0080vco_device::tilemap_update( )
{ {
int j;
if (!m_flipscreen) if (!m_flipscreen)
{ {
for (j = 0; j < 0x400; j++) for (int j = 0; j < 0x400; j++)
m_tilemap[0]->set_scrollx((j + 0) & 0x3ff, -m_bg0_scrollx - m_bgscroll_ram[j & 0x1ff]); m_tilemap[0]->set_scrollx((j + 0) & 0x3ff, -m_bg0_scrollx - m_bgscroll_ram[j & 0x1ff]);
} }
else else
{ {
for (j = 0; j < 0x400; j++) for (int j = 0; j < 0x400; j++)
m_tilemap[0]->set_scrollx((j + 0) & 0x3ff, -m_bg0_scrollx + m_bgscroll_ram[j & 0x1ff]); m_tilemap[0]->set_scrollx((j + 0) & 0x3ff, -m_bg0_scrollx + m_bgscroll_ram[j & 0x1ff]);
} }
@ -402,11 +515,10 @@ void tc0080vco_device::tilemap_update( )
void tc0080vco_device::bg0_tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int flags, u8 priority, u8 pmask) void tc0080vco_device::bg0_tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int flags, u8 priority, u8 pmask)
{ {
u16 zoom = m_scroll_ram[6]; const u16 zoom = m_scroll_ram[6];
int zx, zy;
zx = (zoom & 0xff00) >> 8; int zx = (zoom & 0xff00) >> 8;
zy = zoom & 0x00ff; int zy = zoom & 0x00ff;
if (zx == 0x3f && zy == 0x7f) /* normal size */ if (zx == 0x3f && zy == 0x7f) /* normal size */
{ {
@ -414,25 +526,22 @@ void tc0080vco_device::bg0_tilemap_draw(screen_device &screen, bitmap_ind16 &bit
} }
else /* zoom + rowscroll = custom draw routine */ else /* zoom + rowscroll = custom draw routine */
{ {
u16 *dst16, *src16;
u8 *tsrc;
u16 scanline[512]; u16 scanline[512];
bitmap_ind16 &srcbitmap = m_tilemap[0]->pixmap(); bitmap_ind16 &srcbitmap = m_tilemap[0]->pixmap();
bitmap_ind8 &flagsbitmap = m_tilemap[0]->flagsmap(); bitmap_ind8 &flagsbitmap = m_tilemap[0]->flagsmap();
int sx, zoomx, zoomy; int sx, zoomx, zoomy;
int dx, ex, dy, ey; int dx, ex, dy, ey;
int y_index, src_y_index, row_index; int y_index;
int x_index, x_step;
int flip = m_flipscreen; const bool flip = m_flipscreen;
int min_x = cliprect.min_x; const int min_x = cliprect.min_x;
int max_x = cliprect.max_x; const int max_x = cliprect.max_x;
int min_y = cliprect.min_y; const int min_y = cliprect.min_y;
int max_y = cliprect.max_y; const int max_y = cliprect.max_y;
int screen_width = max_x + 1; const int screen_width = max_x + 1;
int width_mask = 0x3ff; /* underlying tilemap */ const int width_mask = 0x3ff; /* underlying tilemap */
#if 0 #if 0
@ -485,20 +594,20 @@ void tc0080vco_device::bg0_tilemap_draw(screen_device &screen, bitmap_ind16 &bit
for (int y = min_y; y <= max_y; y++) for (int y = min_y; y <= max_y; y++)
{ {
src_y_index = (y_index >> 16) & 0x3ff; /* tilemaps are 1024 px up/down */ int src_y_index = (y_index >> 16) & 0x3ff; /* tilemaps are 1024 px up/down */
/* row areas are the same in flipscreen, so we must read in reverse */ /* row areas are the same in flipscreen, so we must read in reverse */
row_index = (src_y_index & 0x1ff); int row_index = (src_y_index & 0x1ff);
if (flip) if (flip)
row_index = 0x1ff - row_index; row_index = 0x1ff - row_index;
x_index = sx - ((m_bgscroll_ram[row_index] << 16)); int x_index = sx - ((m_bgscroll_ram[row_index] << 16));
src16 = &srcbitmap.pix16(src_y_index); u16 *src16 = &srcbitmap.pix16(src_y_index);
tsrc = &flagsbitmap.pix8(src_y_index); u8 *tsrc = &flagsbitmap.pix8(src_y_index);
dst16 = scanline; u16 *dst16 = scanline;
x_step = zoomx; int x_step = zoomx;
if (flags & TILEMAP_DRAW_OPAQUE) if (flags & TILEMAP_DRAW_OPAQUE)
{ {
@ -542,15 +651,14 @@ while (0)
void tc0080vco_device::bg1_tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int flags, u8 priority, u8 pmask) void tc0080vco_device::bg1_tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int flags, u8 priority, u8 pmask)
{ {
u8 layer = 1; u8 layer = 1;
u16 zoom = m_scroll_ram[6 + layer]; const u16 zoom = m_scroll_ram[6 + layer];
int min_x = cliprect.min_x; const int min_x = cliprect.min_x;
int max_x = cliprect.max_x; const int max_x = cliprect.max_x;
int min_y = cliprect.min_y; const int min_y = cliprect.min_y;
int max_y = cliprect.max_y; const int max_y = cliprect.max_y;
int zoomx, zoomy;
zoomx = (zoom & 0xff00) >> 8; int zoomx = (zoom & 0xff00) >> 8;
zoomy = zoom & 0x00ff; int zoomy = zoom & 0x00ff;
if (zoomx == 0x3f && zoomy == 0x7f) /* normal size */ if (zoomx == 0x3f && zoomy == 0x7f) /* normal size */
{ {

View File

@ -5,15 +5,13 @@
#pragma once #pragma once
class tc0080vco_device : public device_t class tc0080vco_device : public device_t, public device_gfx_interface
{ {
public: public:
tc0080vco_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); tc0080vco_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
// configuration // configuration
template <typename T> void set_gfxdecode_tag(T &&tag) { m_gfxdecode.set_tag(std::forward<T>(tag)); } void set_colbase(u16 base) { m_colbase = base; }
void set_gfx_region(int gfxnum) { m_gfxnum = gfxnum; }
void set_tx_region(int txnum) { m_txnum = txnum; }
void set_offsets(int x_offset, int y_offset) void set_offsets(int x_offset, int y_offset)
{ {
m_bg_xoffs = x_offset; m_bg_xoffs = x_offset;
@ -21,9 +19,11 @@ public:
} }
void set_bgflip_yoffs(int offs) { m_bg_flip_yoffs = offs; } void set_bgflip_yoffs(int offs) { m_bg_flip_yoffs = offs; }
DECLARE_READ16_MEMBER( word_r ); u16 word_r(offs_t offset);
DECLARE_WRITE16_MEMBER( word_w ); void word_w(offs_t offset, u16 data, u16 mem_mask = ~0);
void get_sprite_params(int offs, bool zoomy_enable);
void draw_single_sprite(bitmap_ind16 &bitmap, const rectangle &cliprect);
void tilemap_update(); void tilemap_update();
void tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer, int flags, u8 priority, u8 pmask = 0xff); void tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer, int flags, u8 priority, u8 pmask = 0xff);
void set_fg0_debug(bool debug) { m_has_fg0 = debug ? 0 : 1; } void set_fg0_debug(bool debug) { m_has_fg0 = debug ? 0 : 1; }
@ -32,9 +32,15 @@ public:
u16 cram_1_r(int offset); u16 cram_1_r(int offset);
u16 sprram_r(int offset); u16 sprram_r(int offset);
u16 scrram_r(int offset); u16 scrram_r(int offset);
DECLARE_WRITE16_MEMBER( scrollram_w ); void scrollram_w(offs_t offset, u16 data);
READ_LINE_MEMBER( flipscreen_r ); READ_LINE_MEMBER( flipscreen_r );
int get_sprite_x() { return m_sprite.x0; }
int get_sprite_y() { return m_sprite.y0; }
u32 get_sprite_tile_offs() { return m_sprite.tile_offs; }
int get_sprite_zoomx() { return m_sprite.zoomx; }
int get_sprite_zoomy() { return m_sprite.zoomy; }
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
@ -42,6 +48,16 @@ protected:
private: private:
// internal state // internal state
struct sprite_t
{
int x0 = 0, y0 = 0;
int zoomx = 0, zoomy = 0;
u32 tile_offs = 0;
u8 ysize = 0;
int dx = 0, ex = 0, zx = 0;
int dy = 0, ey = 0, zy = 0;
};
std::unique_ptr<u16[]> m_ram; std::unique_ptr<u16[]> m_ram;
u16 * m_bg0_ram_0; u16 * m_bg0_ram_0;
u16 * m_bg0_ram_1; u16 * m_bg0_ram_1;
@ -63,17 +79,17 @@ private:
u16 m_bg1_scrollx; u16 m_bg1_scrollx;
u16 m_bg1_scrolly; u16 m_bg1_scrolly;
tilemap_t *m_tilemap[3]; tilemap_t *m_tilemap[3];
s32 m_flipscreen; bool m_flipscreen;
int m_gfxnum; int m_bg_xoffs, m_bg_yoffs;
int m_txnum; int m_bg_flip_yoffs;
int m_bg_xoffs, m_bg_yoffs; int m_has_fg0; // for debug, it can be enabled with set_fg0_debug(true)
int m_bg_flip_yoffs; sprite_t m_sprite;
int m_has_fg0; // for debug, it can be enabled with set_fg0_debug(true) u16 m_colbase;
required_device<gfxdecode_device> m_gfxdecode; required_memory_region m_gfx_region;
TILE_GET_INFO_MEMBER(get_bg0_tile_info); TILE_GET_INFO_MEMBER(get_bg0_tile_info);
TILE_GET_INFO_MEMBER(get_bg1_tile_info); TILE_GET_INFO_MEMBER(get_bg1_tile_info);