From f5f123c18475aa52526b9bd737259d7ce8e25ef4 Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 24 Jun 2018 20:21:59 +0900 Subject: taito_b.cpp, tc0180vcu.cpp : Updates/Cleanups (#3668) * taito_b.cpp, tc0180vcu.cpp : Updates/Cleanups taito_b.cpp : Move tc0180vcu functions into tc0180vcu.cpp, Minor cleanups tc0180vcu.cpp : Minor cleanups, Convert some arrays into required_shared_ptr, Add notes * Fix taito_b.h * taito_b.cpp : Minor cleanups * taito_b.cpp : Reduce unnecessary gfxdecode (in Nastar schematics, TC0180VCU GFX ROM is 32-bit wide(CH0-31 is connected by data bus)) * taito_b.cpp : Remove unused * tc0180vcu.cpp : Internalize gfxdecode --- src/mame/drivers/taito_b.cpp | 417 +++++++++++++++++-------------------------- src/mame/includes/taito_b.h | 54 +++--- src/mame/video/taito_b.cpp | 332 +--------------------------------- src/mame/video/tc0180vcu.cpp | 390 +++++++++++++++++++++++++++++++++------- src/mame/video/tc0180vcu.h | 37 ++-- 5 files changed, 548 insertions(+), 682 deletions(-) diff --git a/src/mame/drivers/taito_b.cpp b/src/mame/drivers/taito_b.cpp index 39d9c7ce3c4..54e5cfe0af4 100644 --- a/src/mame/drivers/taito_b.cpp +++ b/src/mame/drivers/taito_b.cpp @@ -195,52 +195,33 @@ TODO! WRITE8_MEMBER(taitob_state::bankswitch_w) { - membank("bank1")->set_entry(data & 3); + m_audiobank->set_entry(data & 3); } - - -READ16_MEMBER(taitob_state::tracky1_hi_r) +template +READ16_MEMBER(taitob_state::tracky_hi_r) { - return ioport("TRACKX1")->read(); + return m_trackx_io[Player]->read(); } -READ16_MEMBER(taitob_state::tracky1_lo_r) +template +READ16_MEMBER(taitob_state::tracky_lo_r) { - return (ioport("TRACKX1")->read() & 0xff) << 8; + return (m_trackx_io[Player]->read() & 0xff) << 8; } -READ16_MEMBER(taitob_state::trackx1_hi_r) +template +READ16_MEMBER(taitob_state::trackx_hi_r) { - return ioport("TRACKY1")->read(); + return m_tracky_io[Player]->read(); } -READ16_MEMBER(taitob_state::trackx1_lo_r) +template +READ16_MEMBER(taitob_state::trackx_lo_r) { - return (ioport("TRACKY1")->read() & 0xff) << 8; + return (m_tracky_io[Player]->read() & 0xff) << 8; } -READ16_MEMBER(taitob_state::tracky2_hi_r) -{ - return ioport("TRACKX2")->read(); -} - -READ16_MEMBER(taitob_state::tracky2_lo_r) -{ - return (ioport("TRACKX2")->read() & 0xff) << 8; -} - -READ16_MEMBER(taitob_state::trackx2_hi_r) -{ - return ioport("TRACKY2")->read(); -} - -READ16_MEMBER(taitob_state::trackx2_lo_r) -{ - return (ioport("TRACKY2")->read() & 0xff) << 8; -} - - WRITE16_MEMBER(taitob_state::gain_control_w) { if (ACCESSING_BITS_8_15) @@ -292,7 +273,7 @@ WRITE16_MEMBER(taitob_state::eeprom_w) /* bit 7 - set all the time (Chip Select?) */ /* EEPROM */ - ioport("EEPROMOUT")->write(data, 0xff); + m_eepromout_io->write(data, 0xff); } } @@ -348,22 +329,12 @@ WRITE16_MEMBER(taitob_state::realpunc_output_w) } -void taitob_state::tc0180vcu_memrw(address_map &map, u32 addr) -{ - map(addr+0x00000, addr+0x0ffff).rw(m_tc0180vcu, FUNC(tc0180vcu_device::word_r), FUNC(tc0180vcu_device::word_w)); - map(addr+0x10000, addr+0x1197f).ram().share("spriteram"); - map(addr+0x11980, addr+0x137ff).ram(); - map(addr+0x13800, addr+0x13fff).rw(m_tc0180vcu, FUNC(tc0180vcu_device::scroll_r), FUNC(tc0180vcu_device::scroll_w)); - map(addr+0x18000, addr+0x1801f).rw(m_tc0180vcu, FUNC(tc0180vcu_device::ctrl_r), FUNC(tc0180vcu_device::ctrl_w)); - map(addr+0x40000, addr+0x7ffff).rw(FUNC(taitob_state::tc0180vcu_framebuffer_word_r), FUNC(taitob_state::tc0180vcu_framebuffer_word_w)); -} - void taitob_state::rastsag2_map(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x200000, 0x201fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); + map(0x400000, 0x47ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x600000, 0x607fff).ram(); /* Main RAM */ /*ashura up to 603fff only*/ - tc0180vcu_memrw(map, 0x400000); map(0x800000, 0x800001).nopr(); map(0x800000, 0x800000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w)); map(0x800002, 0x800002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); @@ -375,7 +346,7 @@ void taitob_state::crimec_map(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x200000, 0x20000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0xff00); - tc0180vcu_memrw(map, 0x400000); + map(0x400000, 0x47ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x600000, 0x600001).nopr(); map(0x600000, 0x600000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w)); map(0x600002, 0x600002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); @@ -390,7 +361,7 @@ void taitob_state::tetrist_map(address_map &map) map(0x200000, 0x200001).nopr(); map(0x200000, 0x200000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w)); map(0x200002, 0x200002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); - tc0180vcu_memrw(map, 0x400000); + map(0x400000, 0x47ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x600000, 0x60000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0xff00); map(0x800000, 0x807fff).ram(); /* Main RAM */ map(0xa00000, 0xa01fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); @@ -400,7 +371,7 @@ void taitob_state::tetrista_map(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x200000, 0x201fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); - tc0180vcu_memrw(map, 0x400000); + map(0x400000, 0x47ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x600000, 0x600003).rw("tc0040ioc", FUNC(tc0040ioc_device::read), FUNC(tc0040ioc_device::write)).umask16(0xff00); map(0x800000, 0x803fff).ram(); /* Main RAM */ map(0xa00000, 0xa00001).nopr(); @@ -412,7 +383,7 @@ void taitob_state::tetrista_map(address_map &map) void taitob_state::hitice_map(address_map &map) { map(0x000000, 0x07ffff).rom(); - tc0180vcu_memrw(map, 0x400000); + map(0x400000, 0x47ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x600000, 0x60000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0xff00); map(0x610000, 0x610001).portr("P3_P4"); map(0x700000, 0x700001).nopr(); @@ -432,16 +403,16 @@ void taitob_state::rambo3_map(address_map &map) map(0x200000, 0x200001).nopr(); map(0x200000, 0x200000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w)); map(0x200002, 0x200002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); - tc0180vcu_memrw(map, 0x400000); + map(0x400000, 0x47ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x600000, 0x60000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0xff00); - map(0x600010, 0x600011).r(FUNC(taitob_state::tracky1_lo_r)); /*player 1*/ - map(0x600012, 0x600013).r(FUNC(taitob_state::tracky1_hi_r)); - map(0x600014, 0x600015).r(FUNC(taitob_state::trackx1_lo_r)); - map(0x600016, 0x600017).r(FUNC(taitob_state::trackx1_hi_r)); - map(0x600018, 0x600019).r(FUNC(taitob_state::tracky2_lo_r)); /*player 2*/ - map(0x60001a, 0x60001b).r(FUNC(taitob_state::tracky2_hi_r)); - map(0x60001c, 0x60001d).r(FUNC(taitob_state::trackx2_lo_r)); - map(0x60001e, 0x60001f).r(FUNC(taitob_state::trackx2_hi_r)); + map(0x600010, 0x600011).r(FUNC(taitob_state::tracky_lo_r<0>)); /*player 1*/ + map(0x600012, 0x600013).r(FUNC(taitob_state::tracky_hi_r<0>)); + map(0x600014, 0x600015).r(FUNC(taitob_state::trackx_lo_r<0>)); + map(0x600016, 0x600017).r(FUNC(taitob_state::trackx_hi_r<0>)); + map(0x600018, 0x600019).r(FUNC(taitob_state::tracky_lo_r<1>)); /*player 2*/ + map(0x60001a, 0x60001b).r(FUNC(taitob_state::tracky_hi_r<1>)); + map(0x60001c, 0x60001d).r(FUNC(taitob_state::trackx_lo_r<1>)); + map(0x60001e, 0x60001f).r(FUNC(taitob_state::trackx_hi_r<1>)); map(0x800000, 0x803fff).ram(); /* Main RAM */ map(0xa00000, 0xa01fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); } @@ -450,7 +421,7 @@ void taitob_state::rambo3_map(address_map &map) void taitob_state::pbobble_map(address_map &map) { map(0x000000, 0x07ffff).rom(); - tc0180vcu_memrw(map, 0x400000); + map(0x400000, 0x47ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x500000, 0x50000f).rw(m_tc0640fio, FUNC(tc0640fio_device::halfword_byteswap_r), FUNC(tc0640fio_device::halfword_byteswap_w)); map(0x500024, 0x500025).portr("P3_P4_A"); /* shown in service mode, game omits to read it */ map(0x500026, 0x500027).rw(FUNC(taitob_state::eep_latch_r), FUNC(taitob_state::eeprom_w)); @@ -468,7 +439,7 @@ void taitob_state::pbobble_map(address_map &map) void taitob_state::spacedx_map(address_map &map) { map(0x000000, 0x07ffff).rom(); - tc0180vcu_memrw(map, 0x400000); + map(0x400000, 0x47ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x500000, 0x50000f).rw(m_tc0640fio, FUNC(tc0640fio_device::halfword_byteswap_r), FUNC(tc0640fio_device::halfword_byteswap_w)); map(0x500024, 0x500025).portr("P3_P4_A"); map(0x500026, 0x500027).rw(FUNC(taitob_state::eep_latch_r), FUNC(taitob_state::eeprom_w)); @@ -496,7 +467,7 @@ void taitob_state::spacedxo_map(address_map &map) map(0x300000, 0x301fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x302000, 0x303fff).readonly(); map(0x400000, 0x40ffff).ram(); /* Main RAM */ - tc0180vcu_memrw(map, 0x500000); + map(0x500000, 0x57ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); } @@ -508,7 +479,7 @@ void taitob_state::qzshowby_map(address_map &map) map(0x200026, 0x200027).w(FUNC(taitob_state::eeprom_w)); map(0x200028, 0x200029).rw(FUNC(taitob_state::player_34_coin_ctrl_r), FUNC(taitob_state::player_34_coin_ctrl_w)); map(0x20002e, 0x20002f).portr("P3_P4_B"); /* player 3,4 buttons */ - tc0180vcu_memrw(map, 0x400000); + map(0x400000, 0x47ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x600000, 0x600001).nopr(); map(0x600000, 0x600000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w)); map(0x600002, 0x600002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); @@ -524,7 +495,7 @@ void taitob_state::viofight_map(address_map &map) map(0x200000, 0x200001).nopr(); map(0x200000, 0x200000).w("ciu", FUNC(pc060ha_device::master_port_w)); map(0x200002, 0x200002).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w)); - tc0180vcu_memrw(map, 0x400000); + map(0x400000, 0x47ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x600000, 0x601fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x800000, 0x80000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0xff00); map(0xa00000, 0xa03fff).ram(); /* Main RAM */ @@ -535,7 +506,7 @@ void taitob_state::masterw_map(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x200000, 0x203fff).ram(); /* Main RAM */ - tc0180vcu_memrw(map, 0x400000); + map(0x400000, 0x47ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x600000, 0x601fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x800000, 0x800003).rw("tc0040ioc", FUNC(tc0040ioc_device::read), FUNC(tc0040ioc_device::write)).umask16(0xff00); map(0xa00000, 0xa00001).nopr(); @@ -560,7 +531,7 @@ void taitob_state::silentd_map(address_map &map) // map(0x240000, 0x240001).nopr(); /* read 4 times at init */ map(0x300000, 0x301fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x400000, 0x403fff).ram(); /* Main RAM */ - tc0180vcu_memrw(map, 0x500000); + map(0x500000, 0x57ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); } @@ -568,7 +539,7 @@ void taitob_state::selfeena_map(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x100000, 0x103fff).ram(); /* Main RAM */ - tc0180vcu_memrw(map, 0x200000); + map(0x200000, 0x27ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x300000, 0x301fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x400000, 0x40000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0xff00); map(0x410000, 0x41000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0xff00); /* mirror address - seems to be only used for coin control */ @@ -587,7 +558,7 @@ void taitob_state::sbm_map(address_map &map) map(0x320000, 0x320001).nopr(); map(0x320000, 0x320000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w)); map(0x320002, 0x320002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); - tc0180vcu_memrw(map, 0x900000); + map(0x900000, 0x97ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); } void taitob_state::realpunc_map(address_map &map) @@ -603,7 +574,7 @@ void taitob_state::realpunc_map(address_map &map) map(0x188002, 0x188003).nopr(); map(0x188002, 0x188002).w("tc0140syt", FUNC(tc0140syt_device::master_comm_w)); map(0x18c000, 0x18c001).w(FUNC(taitob_state::realpunc_output_w)); - tc0180vcu_memrw(map, 0x200000); + map(0x200000, 0x27ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x280000, 0x281fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x300000, 0x300001).rw("hd63484", FUNC(hd63484_device::status16_r), FUNC(hd63484_device::address16_w)); map(0x300002, 0x300003).rw("hd63484", FUNC(hd63484_device::data16_r), FUNC(hd63484_device::data16_w)); @@ -620,7 +591,7 @@ void taitob_state::realpunc_hd63484_map(address_map &map) void taitob_state::masterw_sound_map(address_map &map) { map(0x0000, 0x3fff).rom(); - map(0x4000, 0x7fff).bankr("bank1"); + map(0x4000, 0x7fff).bankr("audiobank"); map(0x8000, 0x8fff).ram(); map(0x9000, 0x9001).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); map(0xa000, 0xa000).w("ciu", FUNC(pc060ha_device::slave_port_w)); @@ -630,7 +601,7 @@ void taitob_state::masterw_sound_map(address_map &map) void taitob_state::sound_map(address_map &map) { map(0x0000, 0x3fff).rom(); - map(0x4000, 0x7fff).bankr("bank1"); + map(0x4000, 0x7fff).bankr("audiobank"); map(0xc000, 0xdfff).ram(); map(0xe000, 0xe003).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write)); map(0xe200, 0xe200).nopr().w("tc0140syt", FUNC(tc0140syt_device::slave_port_w)); @@ -646,7 +617,7 @@ void taitob_state::sound_map(address_map &map) void taitob_state::viofight_sound_map(address_map &map) { map(0x0000, 0x3fff).rom(); - map(0x4000, 0x7fff).bankr("bank1"); + map(0x4000, 0x7fff).bankr("audiobank"); map(0x8000, 0x8fff).ram(); map(0x9000, 0x9001).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); map(0xb000, 0xb001).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); /* yes, both addresses for the same chip */ @@ -1737,64 +1708,6 @@ static INPUT_PORTS_START( realpunc ) INPUT_PORTS_END - -static const gfx_layout charlayout = -{ - 8,8, - RGN_FRAC(1,2), - 4, - { 0, 8, RGN_FRAC(1,2), RGN_FRAC(1,2)+8 }, - { 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 }, - 16*8 -}; -static const gfx_layout tilelayout = -{ - 16,16, - RGN_FRAC(1,2), - 4, - { 0, 8, RGN_FRAC(1,2), RGN_FRAC(1,2)+8 }, - { 0, 1, 2, 3, 4, 5, 6, 7, - 8*16+0, 8*16+1, 8*16+2, 8*16+3, 8*16+4, 8*16+5, 8*16+6, 8*16+7 }, - { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, - 16*16, 17*16, 18*16, 19*16, 20*16, 21*16, 22*16, 23*16 }, - 64*8 -}; - -static GFXDECODE_START( gfx_taito_b ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 256 ) /* text */ - GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 256 ) /* sprites & playfield */ -GFXDECODE_END - -static const gfx_layout rambo3_charlayout = -{ - 8,8, - RGN_FRAC(1,4), - 4, - { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, - { 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 -}; -static const gfx_layout rambo3_tilelayout = -{ - 16,16, - RGN_FRAC(1,4), - 4, - { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, - { 0, 1, 2, 3, 4, 5, 6, 7, - 8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, - 16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8 }, - 32*8 -}; - -static GFXDECODE_START( gfx_rambo3 ) - GFXDECODE_ENTRY( "gfx1", 0, rambo3_charlayout, 0, 256 ) /* text */ - GFXDECODE_ENTRY( "gfx1", 0, rambo3_tilelayout, 0, 256 ) /* sprites & playfield */ -GFXDECODE_END - - /* Games that use the mb87078 are: pbobble, spacedx and qzshowby schems are not available, but from the writes I guess that @@ -1859,20 +1772,20 @@ MACHINE_CONFIG_START(taitob_state::rastsag2) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order0) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x40) MCFG_TC0180VCU_BG_COLORBASE(0xc0) MCFG_TC0180VCU_FG_COLORBASE(0x80) MCFG_TC0180VCU_TX_COLORBASE(0x00) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_4)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_2)) @@ -1917,20 +1830,20 @@ MACHINE_CONFIG_START(taitob_state::masterw) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order2) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x10) MCFG_TC0180VCU_BG_COLORBASE(0x30) MCFG_TC0180VCU_FG_COLORBASE(0x20) MCFG_TC0180VCU_TX_COLORBASE(0x00) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_5)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_4)) @@ -1939,7 +1852,7 @@ MACHINE_CONFIG_START(taitob_state::masterw) MCFG_DEVICE_ADD("ymsnd", YM2203, 24_MHz_XTAL / 8) /* 3 MHz */ MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, taitob_state, bankswitch_w)) + MCFG_AY8910_PORT_A_WRITE_CB(MEMBANK("audiobank")) MCFG_DEVCB_MASK(0x03) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 0.25) MCFG_SOUND_ROUTE(2, "mono", 0.25) @@ -1996,20 +1909,20 @@ MACHINE_CONFIG_START(taitob_state::ashura) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order0) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x40) MCFG_TC0180VCU_BG_COLORBASE(0xc0) MCFG_TC0180VCU_FG_COLORBASE(0x80) MCFG_TC0180VCU_TX_COLORBASE(0x00) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_4)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_2)) @@ -2054,20 +1967,20 @@ MACHINE_CONFIG_START(taitob_state::crimec) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order1) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x80) MCFG_TC0180VCU_BG_COLORBASE(0x00) MCFG_TC0180VCU_FG_COLORBASE(0x40) MCFG_TC0180VCU_TX_COLORBASE(0xc0) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_5)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_3)) @@ -2113,10 +2026,9 @@ MACHINE_CONFIG_START(taitob_state::hitice) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) @@ -2124,10 +2036,11 @@ MACHINE_CONFIG_START(taitob_state::hitice) MCFG_VIDEO_RESET_OVERRIDE(taitob_state,hitice) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) // nominally "6.6 MHZ" + MCFG_TC0180VCU_FB_COLORBASE(0x40) MCFG_TC0180VCU_BG_COLORBASE(0xc0) MCFG_TC0180VCU_FG_COLORBASE(0x80) MCFG_TC0180VCU_TX_COLORBASE(0x00) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_4)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_6)) @@ -2136,7 +2049,7 @@ MACHINE_CONFIG_START(taitob_state::hitice) MCFG_DEVICE_ADD("ymsnd", YM2203, 24_MHz_XTAL / 8) /* 3 MHz */ MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, taitob_state, bankswitch_w)) + MCFG_AY8910_PORT_A_WRITE_CB(MEMBANK("audiobank")) MCFG_DEVCB_MASK(0x03) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 0.25) MCFG_SOUND_ROUTE(2, "mono", 0.25) @@ -2177,20 +2090,20 @@ MACHINE_CONFIG_START(taitob_state::rambo3p) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_rambo3) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order0) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x40) MCFG_TC0180VCU_BG_COLORBASE(0xc0) MCFG_TC0180VCU_FG_COLORBASE(0x80) MCFG_TC0180VCU_TX_COLORBASE(0x00) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_6)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_1)) @@ -2236,20 +2149,20 @@ MACHINE_CONFIG_START(taitob_state::rambo3) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order2) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x10) MCFG_TC0180VCU_BG_COLORBASE(0x30) MCFG_TC0180VCU_FG_COLORBASE(0x20) MCFG_TC0180VCU_TX_COLORBASE(0x00) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_6)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_1)) @@ -2300,20 +2213,20 @@ MACHINE_CONFIG_START(taitob_state::pbobble) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order1) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x80) MCFG_TC0180VCU_BG_COLORBASE(0x00) MCFG_TC0180VCU_FG_COLORBASE(0x40) MCFG_TC0180VCU_TX_COLORBASE(0xc0) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_3)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_5)) @@ -2364,20 +2277,20 @@ MACHINE_CONFIG_START(taitob_state::spacedx) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order1) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x80) MCFG_TC0180VCU_BG_COLORBASE(0x00) MCFG_TC0180VCU_FG_COLORBASE(0x40) MCFG_TC0180VCU_TX_COLORBASE(0xc0) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_3)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_5)) @@ -2422,20 +2335,20 @@ MACHINE_CONFIG_START(taitob_state::spacedxo) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order2) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x10) MCFG_TC0180VCU_BG_COLORBASE(0x30) MCFG_TC0180VCU_FG_COLORBASE(0x20) MCFG_TC0180VCU_TX_COLORBASE(0x00) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_6)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_4)) @@ -2486,20 +2399,20 @@ MACHINE_CONFIG_START(taitob_state::qzshowby) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order1) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x80) MCFG_TC0180VCU_BG_COLORBASE(0x00) MCFG_TC0180VCU_FG_COLORBASE(0x40) MCFG_TC0180VCU_TX_COLORBASE(0xc0) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_3)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_5)) @@ -2544,20 +2457,20 @@ MACHINE_CONFIG_START(taitob_state::viofight) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order2) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x10) MCFG_TC0180VCU_BG_COLORBASE(0x30) MCFG_TC0180VCU_FG_COLORBASE(0x20) MCFG_TC0180VCU_TX_COLORBASE(0x00) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_4)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_1)) @@ -2566,7 +2479,7 @@ MACHINE_CONFIG_START(taitob_state::viofight) MCFG_DEVICE_ADD("ymsnd", YM2203, 24_MHz_XTAL / 8) /* 3 MHz */ MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, taitob_state, bankswitch_w)) + MCFG_AY8910_PORT_A_WRITE_CB(MEMBANK("audiobank")) MCFG_DEVCB_MASK(0x03) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 0.25) MCFG_SOUND_ROUTE(2, "mono", 0.25) @@ -2607,20 +2520,20 @@ MACHINE_CONFIG_START(taitob_state::silentd) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order2) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x10) MCFG_TC0180VCU_BG_COLORBASE(0x30) MCFG_TC0180VCU_FG_COLORBASE(0x20) MCFG_TC0180VCU_TX_COLORBASE(0x00) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_6)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_4)) @@ -2665,20 +2578,20 @@ MACHINE_CONFIG_START(taitob_state::selfeena) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order2) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x10) MCFG_TC0180VCU_BG_COLORBASE(0x30) MCFG_TC0180VCU_FG_COLORBASE(0x20) MCFG_TC0180VCU_TX_COLORBASE(0x00) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_6)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_4)) @@ -2732,20 +2645,20 @@ MACHINE_CONFIG_START(taitob_state::ryujin) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order2) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x10) MCFG_TC0180VCU_BG_COLORBASE(0x30) MCFG_TC0180VCU_FG_COLORBASE(0x20) MCFG_TC0180VCU_TX_COLORBASE(0x00) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_6)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_4)) @@ -2797,20 +2710,20 @@ MACHINE_CONFIG_START(taitob_state::sbm) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_taitob) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_color_order0) + MCFG_VIDEO_START_OVERRIDE(taitob_state,taitob_core) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x40) MCFG_TC0180VCU_BG_COLORBASE(0xc0) MCFG_TC0180VCU_FG_COLORBASE(0x80) MCFG_TC0180VCU_TX_COLORBASE(0x00) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_4)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_5)) @@ -2854,9 +2767,8 @@ MACHINE_CONFIG_START(taitob_c_state::realpunc) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_realpunc) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, taitob_state, screen_vblank_taitob)) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_taito_b) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) @@ -2866,10 +2778,11 @@ MACHINE_CONFIG_START(taitob_c_state::realpunc) MCFG_HD63484_AUTO_CONFIGURE_SCREEN(false) MCFG_DEVICE_ADD("tc0180vcu", TC0180VCU, 27.164_MHz_XTAL / 4) + MCFG_TC0180VCU_FB_COLORBASE(0x40) MCFG_TC0180VCU_BG_COLORBASE(0xc0) MCFG_TC0180VCU_FG_COLORBASE(0x80) MCFG_TC0180VCU_TX_COLORBASE(0x00) - MCFG_TC0180VCU_GFXDECODE("gfxdecode") + MCFG_GFX_PALETTE("palette") MCFG_TC0180VCU_INTH_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_2)) MCFG_TC0180VCU_INTL_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_3)) @@ -2903,7 +2816,7 @@ ROM_START( rastsag2 ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "b81-11.37", 0x00000, 0x10000, CRC(3704bf09) SHA1(a0a37b23e3df482c5f5aa43825345ea8affbba34) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "b81-03.14", 0x000000, 0x080000, CRC(551b75e6) SHA1(5b8388ee2c6262f359c9e6d04c951ea8dc3901c9) ) ROM_LOAD( "b81-04.15", 0x080000, 0x080000, CRC(cf734e12) SHA1(4201a74468058761454515738fbf3a7b22a66e00) ) @@ -2924,7 +2837,7 @@ ROM_START( nastarw ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "b81-11.37", 0x00000, 0x10000, CRC(3704bf09) SHA1(a0a37b23e3df482c5f5aa43825345ea8affbba34) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "b81-03.14", 0x000000, 0x080000, CRC(551b75e6) SHA1(5b8388ee2c6262f359c9e6d04c951ea8dc3901c9) ) ROM_LOAD( "b81-04.15", 0x080000, 0x080000, CRC(cf734e12) SHA1(4201a74468058761454515738fbf3a7b22a66e00) ) @@ -2945,7 +2858,7 @@ ROM_START( nastar ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "b81-11.37", 0x00000, 0x10000, CRC(3704bf09) SHA1(a0a37b23e3df482c5f5aa43825345ea8affbba34) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "b81-03.14", 0x000000, 0x080000, CRC(551b75e6) SHA1(5b8388ee2c6262f359c9e6d04c951ea8dc3901c9) ) ROM_LOAD( "b81-04.15", 0x080000, 0x080000, CRC(cf734e12) SHA1(4201a74468058761454515738fbf3a7b22a66e00) ) @@ -2970,7 +2883,7 @@ ROM_START( crimec ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "b99-08.45", 0x00000, 0x10000, CRC(26135451) SHA1(651c77285eb12a13a2fe4069031c6f01150ecba4) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "b99-02.18", 0x000000, 0x080000, CRC(2a5d4a26) SHA1(94bdfca9365970a80a639027b195b71cebc5ab9c) ) ROM_LOAD( "b99-01.19", 0x080000, 0x080000, CRC(a19e373a) SHA1(2208c9142473dc2218fd8b97fd6d0c861aeba011) ) @@ -2988,7 +2901,7 @@ ROM_START( crimecu ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "b99-08.45", 0x00000, 0x10000, CRC(26135451) SHA1(651c77285eb12a13a2fe4069031c6f01150ecba4) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "b99-02.18", 0x000000, 0x080000, CRC(2a5d4a26) SHA1(94bdfca9365970a80a639027b195b71cebc5ab9c) ) ROM_LOAD( "b99-01.19", 0x080000, 0x080000, CRC(a19e373a) SHA1(2208c9142473dc2218fd8b97fd6d0c861aeba011) ) @@ -3006,7 +2919,7 @@ ROM_START( crimecj ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "b99-08.45", 0x00000, 0x10000, CRC(26135451) SHA1(651c77285eb12a13a2fe4069031c6f01150ecba4) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "b99-02.18", 0x000000, 0x080000, CRC(2a5d4a26) SHA1(94bdfca9365970a80a639027b195b71cebc5ab9c) ) ROM_LOAD( "b99-01.19", 0x080000, 0x080000, CRC(a19e373a) SHA1(2208c9142473dc2218fd8b97fd6d0c861aeba011) ) @@ -3024,7 +2937,7 @@ ROM_START( ashura ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "c43-16", 0x00000, 0x10000, CRC(cb26fce1) SHA1(7cc60326455c7bb2ca543ddfd4002462cc079837) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "c43-02", 0x00000, 0x80000, CRC(105722ae) SHA1(1de5d396d2a4d5948544082c471a15ca1b8e756c) ) ROM_LOAD( "c43-03", 0x80000, 0x80000, CRC(426606ba) SHA1(961ec0a9dc18044adae433337bfa89d951c5207c) ) @@ -3042,7 +2955,7 @@ ROM_START( ashuraj ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "c43-16", 0x00000, 0x10000, CRC(cb26fce1) SHA1(7cc60326455c7bb2ca543ddfd4002462cc079837) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "c43-02", 0x00000, 0x80000, CRC(105722ae) SHA1(1de5d396d2a4d5948544082c471a15ca1b8e756c) ) ROM_LOAD( "c43-03", 0x80000, 0x80000, CRC(426606ba) SHA1(961ec0a9dc18044adae433337bfa89d951c5207c) ) @@ -3060,7 +2973,7 @@ ROM_START( ashurau ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "c43-16", 0x00000, 0x10000, CRC(cb26fce1) SHA1(7cc60326455c7bb2ca543ddfd4002462cc079837) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "c43-02", 0x00000, 0x80000, CRC(105722ae) SHA1(1de5d396d2a4d5948544082c471a15ca1b8e756c) ) ROM_LOAD( "c43-03", 0x80000, 0x80000, CRC(426606ba) SHA1(961ec0a9dc18044adae433337bfa89d951c5207c) ) @@ -3078,7 +2991,7 @@ ROM_START( tetrist ) // Nastar / Nastar Warrior / Rastan Saga 2 conversion with ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "c12-06.37", 0x00000, 0x10000, CRC(f2814b38) SHA1(846d3cc7a6f1cfbfd5661d6942f24330d21f91f0) ) - ROM_REGION( 0x100000, "gfx1", ROMREGION_ERASE00 ) + ROM_REGION( 0x100000, "tc0180vcu", ROMREGION_ERASE00 ) ROM_REGION( 0x100000, "gfx2", 0 ) /* b81-03.14 & b81-04.15 are present on the original board and are actually from Nastar @@ -3107,7 +3020,7 @@ ROM_START( tetrista ) // Master of Weapon conversion with graphics ROMs left in ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "c35-05.30", 0x00000, 0x10000, CRC(785c63fb) SHA1(13db76d8ce52ff21bfda0866c9c6b52147c6fc9d) ) - ROM_REGION( 0x100000, "gfx1", ROMREGION_ERASE00 ) + ROM_REGION( 0x100000, "tc0180vcu", ROMREGION_ERASE00 ) ROM_REGION( 0x100000, "gfx2", 0 ) /* b72-01.5 & b72-02.6 are present on the original board and are actually from Master of Weapon @@ -3130,7 +3043,7 @@ ROM_START( hitice ) /* 4 Player version */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "c59-08.50", 0x00000, 0x10000, CRC(d3cbc10b) SHA1(75305e264300e0ebd15ada45a6d222fee75bd8e4) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "c59-03.12", 0x00000, 0x80000, CRC(9e513048) SHA1(4ffa63c01a25e912dd218b7b2deaf5ad1a53659a) ) ROM_LOAD( "c59-02.13", 0x80000, 0x80000, CRC(affb5e07) SHA1(afe92268c78ab5565d2913672e25f3136a15f534) ) @@ -3154,7 +3067,7 @@ ROM_START( hiticerb ) /* 4 Player version */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "c59-08.50", 0x00000, 0x10000, CRC(d3cbc10b) SHA1(75305e264300e0ebd15ada45a6d222fee75bd8e4) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD16_BYTE( "ic5.bin", 0x00000, 0x20000, CRC(55698bbc) SHA1(ba0e0de12e3e52ef026d37d667060e8ba6925340) ) ROM_LOAD16_BYTE( "ic1.bin", 0x40000, 0x20000, CRC(fca01c22) SHA1(94d7d521ea6fdab752939c1f2087b16a2b2922a8) ) ROM_LOAD16_BYTE( "ic6.bin", 0x00001, 0x20000, CRC(a7cb863f) SHA1(f749d38c2164bb9833e653bc1253a336c0043daa) ) @@ -3184,7 +3097,7 @@ ROM_START( hiticej ) /* 2 Player version */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "c59-08.50", 0x00000, 0x10000, CRC(d3cbc10b) SHA1(75305e264300e0ebd15ada45a6d222fee75bd8e4) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "c59-03.12", 0x00000, 0x80000, CRC(9e513048) SHA1(4ffa63c01a25e912dd218b7b2deaf5ad1a53659a) ) ROM_LOAD( "c59-02.13", 0x80000, 0x80000, CRC(affb5e07) SHA1(afe92268c78ab5565d2913672e25f3136a15f534) ) @@ -3208,7 +3121,7 @@ ROM_START( rambo3 ) /* all of the following roms should most likely have the nam ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "ramb3-10.bin", 0x00000, 0x10000, CRC(b18bc020) SHA1(5f3a108ad1f652103dda14672223529077a0924b) ) - ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_REGION( 0x200000, "tc0180vcu", 0 ) ROM_LOAD( "ramb3-03.bin", 0x000000, 0x80000, CRC(f5808c41) SHA1(73e129e87d7e240f96cb06d484fb19cd0ef49721) ) ROM_LOAD( "ramb3-04.bin", 0x080000, 0x80000, CRC(c57831ce) SHA1(85c203a858df34fe8663b2b16447d328cdb4145e) ) ROM_LOAD( "ramb3-01.bin", 0x100000, 0x80000, CRC(c55fcf54) SHA1(6a26ed2541be9e3341f20e74cc49b5366ce7d424) ) @@ -3228,7 +3141,7 @@ ROM_START( rambo3u ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "ramb3-10.bin", 0x00000, 0x10000, CRC(b18bc020) SHA1(5f3a108ad1f652103dda14672223529077a0924b) ) - ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_REGION( 0x200000, "tc0180vcu", 0 ) ROM_LOAD( "ramb3-03.bin", 0x000000, 0x80000, CRC(f5808c41) SHA1(73e129e87d7e240f96cb06d484fb19cd0ef49721) ) ROM_LOAD( "ramb3-04.bin", 0x080000, 0x80000, CRC(c57831ce) SHA1(85c203a858df34fe8663b2b16447d328cdb4145e) ) ROM_LOAD( "ramb3-01.bin", 0x100000, 0x80000, CRC(c55fcf54) SHA1(6a26ed2541be9e3341f20e74cc49b5366ce7d424) ) @@ -3251,26 +3164,26 @@ ROM_START( rambo3p ) /* Is this set a prototype or possible bootleg? */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "r3-00.rom", 0x00000, 0x10000, CRC(df7a6ed6) SHA1(68f7f17c9ead6aee653b02de234ec54b519907d7) ) - ROM_REGION( 0x200000, "gfx1", 0 ) - ROM_LOAD( "r3-ch1ll.rom", 0x000000, 0x020000, CRC(c86ea5fc) SHA1(daf89340bb5d6ae57ef6faedb3f86c944c68fc45) ) - ROM_LOAD( "r3-ch1hl.rom", 0x020000, 0x020000, CRC(7525eb92) SHA1(f691a000580d078f207ea6e9bc8a527e74bc20e5) ) - ROM_LOAD( "r3-ch3ll.rom", 0x040000, 0x020000, CRC(abe54b1e) SHA1(4b6d0c694d9c1fcdec87b70fbadee9fb3455b42c) ) - ROM_LOAD( "r3-ch3hl.rom", 0x060000, 0x020000, CRC(80e5647e) SHA1(744e9dcc651b80ef4b3cc29ed0ebb223bb65f106) ) + ROM_REGION( 0x200000, "tc0180vcu", 0 ) + ROM_LOAD16_BYTE( "r3-ch1ll.rom", 0x000000, 0x020000, CRC(c86ea5fc) SHA1(daf89340bb5d6ae57ef6faedb3f86c944c68fc45) ) + ROM_LOAD16_BYTE( "r3-ch1hl.rom", 0x040000, 0x020000, CRC(7525eb92) SHA1(f691a000580d078f207ea6e9bc8a527e74bc20e5) ) + ROM_LOAD16_BYTE( "r3-ch3ll.rom", 0x080000, 0x020000, CRC(abe54b1e) SHA1(4b6d0c694d9c1fcdec87b70fbadee9fb3455b42c) ) + ROM_LOAD16_BYTE( "r3-ch3hl.rom", 0x0c0000, 0x020000, CRC(80e5647e) SHA1(744e9dcc651b80ef4b3cc29ed0ebb223bb65f106) ) - ROM_LOAD( "r3-ch1lh.rom", 0x080000, 0x020000, CRC(75568cf0) SHA1(78cb940fafb6e01a018d6823636b398a898e988a) ) - ROM_LOAD( "r3-ch1hh.rom", 0x0a0000, 0x020000, CRC(e39cff37) SHA1(79680526759013f8641e82c27b3afc184c06f059) ) - ROM_LOAD( "r3-ch3lh.rom", 0x0c0000, 0x020000, CRC(5a155c04) SHA1(9472ef6474275ac5993c2afb222cfbc8d848bd86) ) - ROM_LOAD( "r3-ch3hh.rom", 0x0e0000, 0x020000, CRC(abe58fdb) SHA1(6429caa8680255c46457ab0ad6c0f610291d8a92) ) + ROM_LOAD16_BYTE( "r3-ch1lh.rom", 0x000001, 0x020000, CRC(75568cf0) SHA1(78cb940fafb6e01a018d6823636b398a898e988a) ) + ROM_LOAD16_BYTE( "r3-ch1hh.rom", 0x040001, 0x020000, CRC(e39cff37) SHA1(79680526759013f8641e82c27b3afc184c06f059) ) + ROM_LOAD16_BYTE( "r3-ch3lh.rom", 0x080001, 0x020000, CRC(5a155c04) SHA1(9472ef6474275ac5993c2afb222cfbc8d848bd86) ) + ROM_LOAD16_BYTE( "r3-ch3hh.rom", 0x0c0001, 0x020000, CRC(abe58fdb) SHA1(6429caa8680255c46457ab0ad6c0f610291d8a92) ) - ROM_LOAD( "r3-ch0ll.rom", 0x100000, 0x020000, CRC(b416f1bf) SHA1(8ae546c8286d616a991766eb97c3d281dbafd944) ) - ROM_LOAD( "r3-ch0hl.rom", 0x120000, 0x020000, CRC(a4cad36d) SHA1(f8327bcc490cb66703de9bbcd931d964609ae822) ) - ROM_LOAD( "r3-ch2ll.rom", 0x140000, 0x020000, CRC(d0ce3051) SHA1(0dc57f53b82d8ae15106df8a08b404c076b9fcef) ) - ROM_LOAD( "r3-ch2hl.rom", 0x160000, 0x020000, CRC(837d8677) SHA1(6a3b36399e89c8ff031b25bcf62704197d711a5b) ) + ROM_LOAD16_BYTE( "r3-ch0ll.rom", 0x100000, 0x020000, CRC(b416f1bf) SHA1(8ae546c8286d616a991766eb97c3d281dbafd944) ) + ROM_LOAD16_BYTE( "r3-ch0hl.rom", 0x140000, 0x020000, CRC(a4cad36d) SHA1(f8327bcc490cb66703de9bbcd931d964609ae822) ) + ROM_LOAD16_BYTE( "r3-ch2ll.rom", 0x180000, 0x020000, CRC(d0ce3051) SHA1(0dc57f53b82d8ae15106df8a08b404c076b9fcef) ) + ROM_LOAD16_BYTE( "r3-ch2hl.rom", 0x1c0000, 0x020000, CRC(837d8677) SHA1(6a3b36399e89c8ff031b25bcf62704197d711a5b) ) - ROM_LOAD( "r3-ch0lh.rom", 0x180000, 0x020000, CRC(76a330a2) SHA1(4324bceca7bf5155f7b2543748989e2d364a7e97) ) - ROM_LOAD( "r3-ch0hh.rom", 0x1a0000, 0x020000, CRC(4dc69751) SHA1(2abf657dc951dc263b53a2c7a4ed2f4aaf5f9a98) ) - ROM_LOAD( "r3-ch2lh.rom", 0x1c0000, 0x020000, CRC(df3bc48f) SHA1(6747a453da4bca0b837f4ef1f1bbe871f15332ed) ) - ROM_LOAD( "r3-ch2hh.rom", 0x1e0000, 0x020000, CRC(bf37dfac) SHA1(27e825bd0a4d7ae65714fefeb6fedac501984ba9) ) + ROM_LOAD16_BYTE( "r3-ch0lh.rom", 0x100001, 0x020000, CRC(76a330a2) SHA1(4324bceca7bf5155f7b2543748989e2d364a7e97) ) + ROM_LOAD16_BYTE( "r3-ch0hh.rom", 0x140001, 0x020000, CRC(4dc69751) SHA1(2abf657dc951dc263b53a2c7a4ed2f4aaf5f9a98) ) + ROM_LOAD16_BYTE( "r3-ch2lh.rom", 0x180001, 0x020000, CRC(df3bc48f) SHA1(6747a453da4bca0b837f4ef1f1bbe871f15332ed) ) + ROM_LOAD16_BYTE( "r3-ch2hh.rom", 0x1c0001, 0x020000, CRC(bf37dfac) SHA1(27e825bd0a4d7ae65714fefeb6fedac501984ba9) ) ROM_REGION( 0x80000, "ymsnd", 0 ) ROM_LOAD( "r3-a1.rom", 0x00000, 0x20000, CRC(4396fa19) SHA1(cb6d983f210249676c500723041d74fa3fdc517d) ) @@ -3287,7 +3200,7 @@ ROM_START( pbobble ) ROM_REGION( 0x20000, "audiocpu", 0 ) /* 128k for Z80 code */ ROM_LOAD( "pb-ic27.bin", 0x00000, 0x20000, CRC(26efa4c4) SHA1(795af8f6d23c2cbe2c811ec9ab1f14a4eee3f99e) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "pb-ic14.bin", 0x00000, 0x80000, CRC(55f90ea4) SHA1(793c79e5b72171124368ad09dd31235252c541f5) ) ROM_LOAD( "pb-ic9.bin", 0x80000, 0x80000, CRC(3253aac9) SHA1(916d85aa96e2914630833292a0655b0389b4a39b) ) @@ -3303,7 +3216,7 @@ ROM_START( spacedx ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "d89-07.27", 0x00000, 0x10000, CRC(bd743401) SHA1(bf1ff2255bbd79be21855814d52daced71fbe198) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "d89-02.14", 0x00000, 0x80000, CRC(c36544b9) SHA1(6bd5257dfb27532621b75f43e31aa351ad2192a2) ) ROM_LOAD( "d89-01.9", 0x80000, 0x80000, CRC(fffa0660) SHA1(de1abe1b1e9d14405b5663103ea4a6119fce7cc5) ) @@ -3327,7 +3240,7 @@ ROM_START( spacedxj ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "d89-07.27", 0x00000, 0x10000, CRC(bd743401) SHA1(bf1ff2255bbd79be21855814d52daced71fbe198) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "d89-02.14", 0x00000, 0x80000, CRC(c36544b9) SHA1(6bd5257dfb27532621b75f43e31aa351ad2192a2) ) ROM_LOAD( "d89-01.9" , 0x80000, 0x80000, CRC(fffa0660) SHA1(de1abe1b1e9d14405b5663103ea4a6119fce7cc5) ) @@ -3351,7 +3264,7 @@ ROM_START( spacedxo ) // different PCB type, similar to Silent Dragon ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "d89-07.27", 0x00000, 0x10000, CRC(bd743401) SHA1(bf1ff2255bbd79be21855814d52daced71fbe198) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "d89-12.bin",0x00000, 0x80000, CRC(53df86f1) SHA1(f03d77dd54eb455462133a29dd8fec007abedcfd) ) ROM_LOAD( "d89-13.bin",0x80000, 0x80000, CRC(c44c1352) SHA1(78a04fe0ade6e8f9e6bbda7652a54a79b6208fdd) ) @@ -3367,7 +3280,7 @@ ROM_START( qzshowby ) ROM_REGION( 0x20000, "audiocpu", 0 ) /* 128k for Z80 code */ ROM_LOAD( "d72-11.bin", 0x00000, 0x20000, CRC(2ca046e2) SHA1(983620e657d729e1441d509f18141bb3bb581855) ) - ROM_REGION( 0x400000, "gfx1", 0 ) + ROM_REGION( 0x400000, "tc0180vcu", 0 ) ROM_LOAD( "d72-03.bin", 0x000000, 0x200000, CRC(1de257d0) SHA1(df03b1fb5cd69e2d2eb2088f96f26b0ea9756fb7) ) ROM_LOAD( "d72-02.bin", 0x200000, 0x200000, CRC(bf0da640) SHA1(2b2493904ed0b94dc12b56dae71cc5c25701aef9) ) @@ -3393,7 +3306,7 @@ ROM_START( viofight ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 128k for Z80 code */ ROM_LOAD( "c16-12.32", 0x00000, 0x10000, CRC(6fb028c7) SHA1(a808d82e872914f994652e95dca3fcad00ba02fc) ) - ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_REGION( 0x200000, "tc0180vcu", 0 ) ROM_LOAD( "c16-01.1", 0x000000, 0x080000, CRC(7059ce83) SHA1(1e6825ab944254cd4ba6574762172245b3352319) ) ROM_LOAD( "c16-02.2", 0x080000, 0x080000, CRC(b458e905) SHA1(b712cbf4a4015e1fc2243871fe753e230f0172c2) ) ROM_LOAD( "c16-03.3", 0x100000, 0x080000, CRC(515a9431) SHA1(836be28614326d093be8841617cca83cef8d55cc) ) @@ -3417,7 +3330,7 @@ ROM_START( viofightu ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 128k for Z80 code */ ROM_LOAD( "c16-12.32", 0x00000, 0x10000, CRC(6fb028c7) SHA1(a808d82e872914f994652e95dca3fcad00ba02fc) ) - ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_REGION( 0x200000, "tc0180vcu", 0 ) ROM_LOAD( "c16-01.1", 0x000000, 0x080000, CRC(7059ce83) SHA1(1e6825ab944254cd4ba6574762172245b3352319) ) ROM_LOAD( "c16-02.2", 0x080000, 0x080000, CRC(b458e905) SHA1(b712cbf4a4015e1fc2243871fe753e230f0172c2) ) ROM_LOAD( "c16-03.3", 0x100000, 0x080000, CRC(515a9431) SHA1(836be28614326d093be8841617cca83cef8d55cc) ) @@ -3441,7 +3354,7 @@ ROM_START( viofightj ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 128k for Z80 code */ ROM_LOAD( "c16-12.32", 0x00000, 0x10000, CRC(6fb028c7) SHA1(a808d82e872914f994652e95dca3fcad00ba02fc) ) - ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_REGION( 0x200000, "tc0180vcu", 0 ) ROM_LOAD( "c16-01.1", 0x000000, 0x080000, CRC(7059ce83) SHA1(1e6825ab944254cd4ba6574762172245b3352319) ) ROM_LOAD( "c16-02.2", 0x080000, 0x080000, CRC(b458e905) SHA1(b712cbf4a4015e1fc2243871fe753e230f0172c2) ) ROM_LOAD( "c16-03.3", 0x100000, 0x080000, CRC(515a9431) SHA1(836be28614326d093be8841617cca83cef8d55cc) ) @@ -3465,7 +3378,7 @@ ROM_START( masterw ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "b72_07.30", 0x00000, 0x10000, CRC(2b1a946f) SHA1(cc9512e44bd92020ab5a53716b6399b7a6cde76d) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "b72-02.6", 0x000000, 0x080000, CRC(843444eb) SHA1(2b466045f882996c80e0090009ee957e11d32825) ) ROM_LOAD( "b72-01.5", 0x080000, 0x080000, CRC(a24ac26e) SHA1(895715a2bb0cb15334cba2283bd228b4fc08cd0c) ) ROM_END @@ -3480,7 +3393,7 @@ ROM_START( masterwu ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "b72_07.30", 0x00000, 0x10000, CRC(2b1a946f) SHA1(cc9512e44bd92020ab5a53716b6399b7a6cde76d) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "b72-02.6", 0x000000, 0x080000, CRC(843444eb) SHA1(2b466045f882996c80e0090009ee957e11d32825) ) ROM_LOAD( "b72-01.5", 0x080000, 0x080000, CRC(a24ac26e) SHA1(895715a2bb0cb15334cba2283bd228b4fc08cd0c) ) ROM_END @@ -3495,7 +3408,7 @@ ROM_START( masterwj ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "b72_07.30", 0x00000, 0x10000, CRC(2b1a946f) SHA1(cc9512e44bd92020ab5a53716b6399b7a6cde76d) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "b72-02.6", 0x000000, 0x080000, CRC(843444eb) SHA1(2b466045f882996c80e0090009ee957e11d32825) ) ROM_LOAD( "b72-01.5", 0x080000, 0x080000, CRC(a24ac26e) SHA1(895715a2bb0cb15334cba2283bd228b4fc08cd0c) ) ROM_END @@ -3511,7 +3424,7 @@ ROM_START( yukiwo ) /* Prototype of Master of Weapons */ ROM_LOAD( "ic30-snd.bin", 0x00000, 0x08000, CRC(8632adb7) SHA1(a746ed0e7e2c2c216874b5729d59d7ed37689e4f) ) // TMM27256AD-20 ROM_RELOAD(0x8000, 0x8000) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD16_BYTE( "ic1-a010.bin", 0x000001, 0x020000, CRC(0030dce2) SHA1(649e0caf83b259814e1f0c2f6de40ebd8ea1a639) ) ROM_LOAD16_BYTE( "ic5-9df1.bin", 0x000000, 0x020000, CRC(0507b908) SHA1(72f9913ddec37cd4e6b0b611619d0195302eb7e8) ) ROM_LOAD16_BYTE( "ic3-1305.bin", 0x080001, 0x020000, CRC(8772b1a6) SHA1(961c8da0fcc3ce9dd334d7bcae75d8b93ded0bb4) ) @@ -3532,7 +3445,7 @@ ROM_START( silentd ) /* Silkscreened PCB number ET910000B */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "east-13.ic15", 0x00000, 0x10000, CRC(651861ab) SHA1(f94a120b70a4d59e17a6e120ca461b1f37587c0c) ) - ROM_REGION( 0x400000, "gfx1", 0 ) + ROM_REGION( 0x400000, "tc0180vcu", 0 ) ROM_LOAD( "east-04.ic28", 0x000000, 0x100000, CRC(53237217) SHA1(fec044c26b8c99235f88c8be0d9ac63b81a3a094) ) ROM_LOAD( "east-06.ic29", 0x100000, 0x100000, CRC(e6e6dfa7) SHA1(913fa9a21cea175a1af87023144ebc98b3b0f33b) ) ROM_LOAD( "east-03.ic39", 0x200000, 0x100000, CRC(1b9b2846) SHA1(d9c87e130bc3baa949d8a8738daad648fcf284df) ) @@ -3555,7 +3468,7 @@ ROM_START( silentdj ) /* Silkscreened PCB number ET910000B */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "east-13.ic15", 0x00000, 0x10000, CRC(651861ab) SHA1(f94a120b70a4d59e17a6e120ca461b1f37587c0c) ) - ROM_REGION( 0x400000, "gfx1", 0 ) + ROM_REGION( 0x400000, "tc0180vcu", 0 ) ROM_LOAD( "east-04.ic28", 0x000000, 0x100000, CRC(53237217) SHA1(fec044c26b8c99235f88c8be0d9ac63b81a3a094) ) ROM_LOAD( "east-06.ic29", 0x100000, 0x100000, CRC(e6e6dfa7) SHA1(913fa9a21cea175a1af87023144ebc98b3b0f33b) ) ROM_LOAD( "east-03.ic39", 0x200000, 0x100000, CRC(1b9b2846) SHA1(d9c87e130bc3baa949d8a8738daad648fcf284df) ) @@ -3578,7 +3491,7 @@ ROM_START( silentdu ) /* Dumped from an original Taito PCB (ET910000B) */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "east-13.ic15", 0x00000, 0x10000, CRC(651861ab) SHA1(f94a120b70a4d59e17a6e120ca461b1f37587c0c) ) - ROM_REGION( 0x400000, "gfx1", 0 ) + ROM_REGION( 0x400000, "tc0180vcu", 0 ) ROM_LOAD( "east-04.ic28", 0x000000, 0x100000, CRC(53237217) SHA1(fec044c26b8c99235f88c8be0d9ac63b81a3a094) ) ROM_LOAD( "east-06.ic29", 0x100000, 0x100000, CRC(e6e6dfa7) SHA1(913fa9a21cea175a1af87023144ebc98b3b0f33b) ) ROM_LOAD( "east-03.ic39", 0x200000, 0x100000, CRC(1b9b2846) SHA1(d9c87e130bc3baa949d8a8738daad648fcf284df) ) @@ -3599,7 +3512,7 @@ ROM_START( selfeena ) /* Silkscreened PCB number ET910000A */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "se-03.39",0x00000, 0x10000, CRC(675998be) SHA1(16e59a9b7dc46aeee0022cb73cf6feced6796c35) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "tc0180vcu", 0 ) ROM_LOAD( "se-04.2", 0x000000, 0x80000, CRC(920ad100) SHA1(69cd2af6218db90632f09a131d2956ab69034643) ) ROM_LOAD( "se-05.1", 0x080000, 0x80000, CRC(d297c995) SHA1(e5ad5a8ce222621c9156c2949916bee6b3099c4e) ) @@ -3617,7 +3530,7 @@ ROM_START( ryujin ) /* Silkscreened PCB number ET910000A */ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "ruj05.39",0x00000, 0x10000, CRC(95270b16) SHA1(c1ad76268679cf198e9f1514360f280b73e49ab5) ) - ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_REGION( 0x200000, "tc0180vcu", 0 ) ROM_LOAD( "ryujin07.2", 0x000000, 0x100000, CRC(34f50980) SHA1(432384bd283389bca17611602eb310726c9d78a4) ) ROM_LOAD( "ryujin06.1", 0x100000, 0x100000, CRC(1b85ff34) SHA1(5ad259e6f7aa4a0c08975da73bf41400495f2e61) ) @@ -3635,7 +3548,7 @@ ROM_START( sbm ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "c69-31.ic28",0x00000, 0x10000, CRC(c999f753) SHA1(5d944b492893a0bb605743e2928c802427a85fbf) ) - ROM_REGION( 0x400000, "gfx1", 0 ) + ROM_REGION( 0x400000, "tc0180vcu", 0 ) ROM_LOAD ( "c69-01.ic5", 0x000000, 0x100000, CRC(521fabe3) SHA1(f81303688ac014145a7e9325affc4a0f86755ba9) ) ROM_LOAD16_BYTE( "c69-13.ic2", 0x100000, 0x020000, CRC(d1550884) SHA1(f3a65827c45959fe5ac4bfc92831a8bed76bf287) ) ROM_LOAD16_BYTE( "c69-12.ic1", 0x100001, 0x020000, CRC(eb56582c) SHA1(41b77704aeaecf3eaa3f87e97c0b59fd00e5349e) ) @@ -3664,7 +3577,7 @@ ROM_START( sbmj ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "c69-23.28",0x00000, 0x10000, CRC(b2fce13e) SHA1(ecdb08482af80fd04cc8b67157e11ca61ce06437) ) - ROM_REGION( 0x400000, "gfx1", 0 ) + ROM_REGION( 0x400000, "tc0180vcu", 0 ) ROM_LOAD ( "c69-01.ic5", 0x000000, 0x100000, CRC(521fabe3) SHA1(f81303688ac014145a7e9325affc4a0f86755ba9) ) ROM_LOAD16_BYTE( "c69-13.ic2", 0x100000, 0x020000, CRC(d1550884) SHA1(f3a65827c45959fe5ac4bfc92831a8bed76bf287) ) ROM_LOAD16_BYTE( "c69-12.ic1", 0x100001, 0x020000, CRC(eb56582c) SHA1(41b77704aeaecf3eaa3f87e97c0b59fd00e5349e) ) @@ -3686,7 +3599,7 @@ ROM_START( realpunc ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "d76_06.106",0x00000, 0x10000, CRC(72c799fd) SHA1(ab086be38b890152b33f0c4e33d0f02d0a5321bc) ) - ROM_REGION( 0x400000, "gfx1", 0 ) + ROM_REGION( 0x400000, "tc0180vcu", 0 ) ROM_LOAD( "d76_02.76", 0x000000, 0x100000, CRC(57691b93) SHA1(570dbefda40f8be5f1da58c5433b8a8084f49cac) ) ROM_LOAD( "d76_03.45", 0x200000, 0x100000, CRC(9f0aefd8) SHA1(d516c64baabd268f99dc5e67b7adf135b4eb45fd) ) @@ -3702,7 +3615,7 @@ ROM_START( realpuncj ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for Z80 code */ ROM_LOAD( "d76_06.106",0x00000, 0x10000, CRC(72c799fd) SHA1(ab086be38b890152b33f0c4e33d0f02d0a5321bc) ) - ROM_REGION( 0x400000, "gfx1", 0 ) + ROM_REGION( 0x400000, "tc0180vcu", 0 ) ROM_LOAD( "d76_02.76", 0x000000, 0x100000, CRC(57691b93) SHA1(570dbefda40f8be5f1da58c5433b8a8084f49cac) ) ROM_LOAD( "d76_03.45", 0x200000, 0x100000, CRC(9f0aefd8) SHA1(d516c64baabd268f99dc5e67b7adf135b4eb45fd) ) @@ -3712,7 +3625,7 @@ ROM_END void taitob_state::init_taito_b() { - membank("bank1")->configure_entries(0, 4, memregion("audiocpu")->base(), 0x4000); + m_audiobank->configure_entries(0, 4, memregion("audiocpu")->base(), 0x4000); } GAME( 1989, masterw, 0, masterw, masterw, taitob_state, init_taito_b, ROT270, "Taito Corporation Japan", "Master of Weapon (World)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/taito_b.h b/src/mame/includes/taito_b.h index 7d3099591bc..8aff84fa865 100644 --- a/src/mame/includes/taito_b.h +++ b/src/mame/includes/taito_b.h @@ -1,5 +1,10 @@ // license:GPL-2.0+ // copyright-holders:Jarek Burczynski +#ifndef MAME_INCLUDES_TAITO_B_H +#define MAME_INCLUDES_TAITO_B_H + +#pragma once + #include "machine/mb87078.h" #include "machine/taitoio.h" #include "video/hd63484.h" @@ -10,9 +15,8 @@ class taitob_state : public driver_device { public: - taitob_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_spriteram(*this, "spriteram"), + taitob_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_pixelram(*this, "pixelram"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), @@ -23,19 +27,19 @@ public: m_tc0220ioc(*this, "tc0220ioc"), m_tc0510nio(*this, "tc0510nio"), m_mb87078(*this, "mb87078"), - m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_audiobank(*this, "audiobank"), + m_eepromout_io(*this, "EEPROMOUT"), + m_trackx_io(*this, "TRACKX%u", 1U), + m_tracky_io(*this, "TRACKY%u", 1U) + { } DECLARE_WRITE8_MEMBER(bankswitch_w); - DECLARE_READ16_MEMBER(tracky1_hi_r); - DECLARE_READ16_MEMBER(tracky1_lo_r); - DECLARE_READ16_MEMBER(trackx1_hi_r); - DECLARE_READ16_MEMBER(trackx1_lo_r); - DECLARE_READ16_MEMBER(tracky2_hi_r); - DECLARE_READ16_MEMBER(tracky2_lo_r); - DECLARE_READ16_MEMBER(trackx2_hi_r); - DECLARE_READ16_MEMBER(trackx2_lo_r); + template DECLARE_READ16_MEMBER(tracky_hi_r); + template DECLARE_READ16_MEMBER(tracky_lo_r); + template DECLARE_READ16_MEMBER(trackx_hi_r); + template DECLARE_READ16_MEMBER(trackx_lo_r); DECLARE_WRITE16_MEMBER(gain_control_w); DECLARE_READ16_MEMBER(eep_latch_r); DECLARE_WRITE16_MEMBER(eeprom_w); @@ -47,21 +51,15 @@ public: DECLARE_WRITE16_MEMBER(hitice_pixelram_w); DECLARE_WRITE16_MEMBER(hitice_pixel_scroll_w); DECLARE_WRITE16_MEMBER(realpunc_video_ctrl_w); - DECLARE_READ16_MEMBER(tc0180vcu_framebuffer_word_r); - DECLARE_WRITE16_MEMBER(tc0180vcu_framebuffer_word_w); DECLARE_WRITE8_MEMBER(mb87078_gain_changed); DECLARE_INPUT_CHANGED_MEMBER(realpunc_sensor); void init_taito_b(); - DECLARE_VIDEO_START(taitob_color_order0); - DECLARE_VIDEO_START(taitob_color_order1); - DECLARE_VIDEO_START(taitob_color_order2); DECLARE_VIDEO_START(hitice); DECLARE_VIDEO_RESET(hitice); DECLARE_VIDEO_START(realpunc); DECLARE_VIDEO_START(taitob_core); uint32_t screen_update_taitob(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_realpunc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(screen_vblank_taitob); void spacedx(machine_config &config); void rambo3(machine_config &config); @@ -105,23 +103,17 @@ protected: virtual void machine_start() override; virtual void machine_reset() override; - void tc0180vcu_memrw(address_map &map, u32 addr); - private: /* memory pointers */ - required_shared_ptr m_spriteram; optional_shared_ptr m_pixelram; /* video-related */ - /* framebuffer is a raw bitmap, remapped as a last step */ - std::unique_ptr m_framebuffer[2]; std::unique_ptr m_pixel_bitmap; std::unique_ptr m_realpunc_bitmap; uint16_t m_pixel_scroll[3]; - int m_b_fg_color_base; - int m_b_sp_color_base; + int m_b_fg_color_base; /* misc */ uint16_t m_eep_latch; @@ -139,13 +131,15 @@ private: optional_device m_tc0220ioc; optional_device m_tc0510nio; optional_device m_mb87078; - required_device m_gfxdecode; required_device m_screen; required_device m_palette; + required_memory_bank m_audiobank; + optional_ioport m_eepromout_io; + optional_ioport_array<2> m_trackx_io; + optional_ioport_array<2> m_tracky_io; + void hitice_clear_pixel_bitmap( ); - void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); - void draw_framebuffer( bitmap_ind16 &bitmap, const rectangle &cliprect, int priority ); }; class taitob_c_state : public taitob_state @@ -155,3 +149,5 @@ public: static constexpr feature_type unemulated_features() { return feature::CAMERA; } void realpunc(machine_config &config); }; + +#endif // MAME_INCLUDES_TAITO_B_H \ No newline at end of file diff --git a/src/mame/video/taito_b.cpp b/src/mame/video/taito_b.cpp index caf0590af34..2383430f83f 100644 --- a/src/mame/video/taito_b.cpp +++ b/src/mame/video/taito_b.cpp @@ -39,50 +39,14 @@ WRITE16_MEMBER(taitob_state::realpunc_video_ctrl_w) VIDEO_START_MEMBER(taitob_state,taitob_core) { - m_framebuffer[0] = std::make_unique(512, 256); - m_framebuffer[1] = std::make_unique(512, 256); m_pixel_bitmap = nullptr; /* only hitice needs this */ save_item(NAME(m_pixel_scroll)); - - save_item(NAME(*m_framebuffer[0])); - save_item(NAME(*m_framebuffer[1])); } -VIDEO_START_MEMBER(taitob_state,taitob_color_order0) -{ - /*graphics are shared, only that they use different palette*/ - /*this is the basic layout used in: Nastar, Ashura Blaster, Hit the Ice, Rambo3, Tetris*/ - - /*Note that in both this and color order 1 pixel_color_base/color_granularity is equal to sprites color base. Pure coincidence? */ - - m_b_sp_color_base = 0x40 * 16; /*sprites */ - - /* bg, fg, tx color_base are set in the tc0180vcu interface */ - - VIDEO_START_CALL_MEMBER(taitob_core); -} - -VIDEO_START_MEMBER(taitob_state,taitob_color_order1) -{ - /* this is the reversed layout used in: Crime City, Puzzle Bobble */ - m_b_sp_color_base = 0x80 * 16; - - VIDEO_START_CALL_MEMBER(taitob_core); -} - -VIDEO_START_MEMBER(taitob_state,taitob_color_order2) -{ - /*this is used in: rambo3a, masterw, silentd, selfeena, ryujin */ - m_b_sp_color_base = 0x10 * 16; - - VIDEO_START_CALL_MEMBER(taitob_core); -} - - VIDEO_START_MEMBER(taitob_state,hitice) { - VIDEO_START_CALL_MEMBER(taitob_color_order0); + VIDEO_START_CALL_MEMBER(taitob_core); m_b_fg_color_base = 0x80; /* hitice also uses this for the pixel_bitmap */ @@ -102,267 +66,13 @@ VIDEO_START_MEMBER(taitob_state,realpunc) { m_realpunc_bitmap = std::make_unique(m_screen->width(), m_screen->height()); - VIDEO_START_CALL_MEMBER(taitob_color_order0); -} - - -READ16_MEMBER(taitob_state::tc0180vcu_framebuffer_word_r) -{ - int sy = offset >> 8; - int sx = 2 * (offset & 0xff); - - return (m_framebuffer[sy >> 8]->pix16(sy & 0xff, sx + 0) << 8) | m_framebuffer[sy >> 8]->pix16(sy & 0xff, sx + 1); -} - -WRITE16_MEMBER(taitob_state::tc0180vcu_framebuffer_word_w) -{ - int sy = offset >> 8; - int sx = 2 * (offset & 0xff); - - if (ACCESSING_BITS_8_15) - m_framebuffer[sy >> 8]->pix16(sy & 0xff, sx + 0) = data >> 8; - if (ACCESSING_BITS_0_7) - m_framebuffer[sy >> 8]->pix16(sy & 0xff, sx + 1) = data & 0xff; -} - - -void taitob_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) -{ -/* Sprite format: (16 bytes per sprite) - offs: bits: - 0000: 0xxxxxxxxxxxxxxx: tile code - 0x0000 to 0x7fff in qzshowby - 0002: 0000000000xxxxxx: color (0x00 - 0x3f) - x000000000000000: flipy - 0x00000000000000: flipx - 00????????000000: unused ? - 0004: xxxxxx0000000000: doesn't matter - some games (eg nastar) fill this with sign bit, some (eg ashura) do not - 000000xxxxxxxxxx: x-coordinate 10 bits signed (all zero for sprites forming up a big sprite, except for the first one) - 0006: xxxxxx0000000000: doesn't matter - same as x - 000000xxxxxxxxxx: y-coordinate 10 bits signed (same as x) - 0008: xxxxxxxx00000000: sprite x-zoom level - 00000000xxxxxxxx: sprite y-zoom level - 0x00 - non scaled = 100% - 0x80 - scaled to 50% - 0xc0 - scaled to 25% - 0xe0 - scaled to 12.5% - 0xff - scaled to zero pixels size (off) - Sprite zoom is used in Ashura Blaster just in the beginning - where you can see a big choplifter and a japanese title. - This japanese title is a scaled sprite. - It is used in Crime City also at the end of the third level (in the garage) - where there are four columns on the sides of the screen - Heaviest usage is in Rambo 3 - almost every sprite in game is scaled - 000a: xxxxxxxx00000000: x-sprites number (big sprite) decremented by one - 00000000xxxxxxxx: y-sprites number (big sprite) decremented by one - 000c - 000f: unused -*/ - - int x, y, xlatch = 0, ylatch = 0, x_no = 0, y_no = 0, x_num = 0, y_num = 0, big_sprite = 0; - int offs, code, color, flipx, flipy; - uint32_t data, zoomx, zoomy, zx, zy, zoomxlatch = 0, zoomylatch = 0; - - for (offs = (0x1980 - 16) / 2; offs >=0; offs -= 8) - { - code = m_spriteram[offs]; - - color = m_spriteram[offs + 1]; - flipx = color & 0x4000; - flipy = color & 0x8000; -#if 0 - /*check the unknown bits*/ - if (color & 0x3fc0) - { - logerror("sprite color (taitob)=%4x ofs=%4x\n", color, offs); - color = machine().rand() & 0x3f; - } -#endif - color = (color & 0x3f) * 16; - - x = m_spriteram[offs + 2] & 0x3ff; - y = m_spriteram[offs + 3] & 0x3ff; - if (x >= 0x200) x -= 0x400; - if (y >= 0x200) y -= 0x400; - - data = m_spriteram[offs + 5]; - if (data) - { - if (!big_sprite) - { - x_num = (data >> 8) & 0xff; - y_num = (data >> 0) & 0xff; - x_no = 0; - y_no = 0; - xlatch = x; - ylatch = y; - data = m_spriteram[offs + 4]; - zoomxlatch = (data >> 8) & 0xff; - zoomylatch = (data >> 0) & 0xff; - big_sprite = 1; - } - } - - data = m_spriteram[offs + 4]; - zoomx = (data >> 8) & 0xff; - zoomy = (data >> 0) & 0xff; - zx = (0x100 - zoomx) / 16; - zy = (0x100 - zoomy) / 16; - - if (big_sprite) - { - zoomx = zoomxlatch; - zoomy = zoomylatch; - - /* Note: like taito_f2.c, this zoom implementation is wrong, - chopped up into 16x16 sections instead of one sprite. This - is especially visible in rambo3. */ - - x = xlatch + (x_no * (0xff - zoomx) + 15) / 16; - y = ylatch + (y_no * (0xff - zoomy) + 15) / 16; - zx = xlatch + ((x_no + 1) * (0xff - zoomx) + 15) / 16 - x; - zy = ylatch + ((y_no + 1) * (0xff - zoomy) + 15) / 16 - y; - y_no++; - - if (y_no > y_num) - { - y_no = 0; - x_no++; - - if (x_no > x_num) - big_sprite = 0; - } - } - - if ( zoomx || zoomy ) - { - m_gfxdecode->gfx(1)->zoom_transpen_raw(bitmap,cliprect, - code, - color, - flipx,flipy, - x,y, - (zx << 16) / 16,(zy << 16) / 16,0); - } - else - { - m_gfxdecode->gfx(1)->transpen_raw(bitmap,cliprect, - code, - color, - flipx,flipy, - x,y, - 0); - } - } + VIDEO_START_CALL_MEMBER(taitob_core); } -void taitob_state::draw_framebuffer( bitmap_ind16 &bitmap, const rectangle &cliprect, int priority ) -{ - rectangle myclip = cliprect; - int x, y; - address_space &space = machine().dummy_space(); - uint8_t video_control = m_tc0180vcu->get_videoctrl(space, 0); - uint8_t framebuffer_page = m_tc0180vcu->get_fb_page(space, 0); - -g_profiler.start(PROFILER_USER1); - - priority <<= 4; - - if (video_control & 0x08) - { - if (priority) - { - g_profiler.stop(); - return; - } - - if (video_control & 0x10) /*flip screen*/ - { - /*popmessage("1. X[%3i;%3i] Y[%3i;%3i]", myclip.min_x, myclip.max_x, myclip.min_y, myclip.max_y);*/ - for (y = myclip.min_y; y <= myclip.max_y; y++) - { - uint16_t *src = &m_framebuffer[framebuffer_page]->pix16(y, myclip.min_x); - uint16_t *dst; - - dst = &bitmap.pix16(bitmap.height()-1-y, myclip.max_x); - - for (x = myclip.min_x; x <= myclip.max_x; x++) - { - uint16_t c = *src++; - - if (c != 0) - *dst = m_b_sp_color_base + c; - - dst--; - } - } - } - else - { - for (y = myclip.min_y; y <= myclip.max_y; y++) - { - uint16_t *src = &m_framebuffer[framebuffer_page]->pix16(y, myclip.min_x); - uint16_t *dst = &bitmap.pix16(y, myclip.min_x); - - for (x = myclip.min_x; x <= myclip.max_x; x++) - { - uint16_t c = *src++; - - if (c != 0) - *dst = m_b_sp_color_base + c; - - dst++; - } - } - } - } - else - { - if (video_control & 0x10) /*flip screen*/ - { - /*popmessage("3. X[%3i;%3i] Y[%3i;%3i]", myclip.min_x, myclip.max_x, myclip.min_y, myclip.max_y);*/ - for (y = myclip.min_y ;y <= myclip.max_y; y++) - { - uint16_t *src = &m_framebuffer[framebuffer_page]->pix16(y, myclip.min_x); - uint16_t *dst; - - dst = &bitmap.pix16(bitmap.height()-1-y, myclip.max_x); - - for (x = myclip.min_x; x <= myclip.max_x; x++) - { - uint16_t c = *src++; - - if (c != 0 && (c & 0x10) == priority) - *dst = m_b_sp_color_base + c; - - dst--; - } - } - } - else - { - for (y = myclip.min_y; y <= myclip.max_y; y++) - { - uint16_t *src = &m_framebuffer[framebuffer_page]->pix16(y, myclip.min_x); - uint16_t *dst = &bitmap.pix16(y, myclip.min_x); - - for (x = myclip.min_x; x <= myclip.max_x; x++) - { - uint16_t c = *src++; - - if (c != 0 && (c & 0x10) == priority) - *dst = m_b_sp_color_base + c; - - dst++; - } - } - } - } -g_profiler.stop(); -} - uint32_t taitob_state::screen_update_taitob(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - address_space &space = machine().dummy_space(); - uint8_t video_control = m_tc0180vcu->get_videoctrl(space, 0); + uint8_t const video_control = m_tc0180vcu->get_videoctrl(); if ((video_control & 0x20) == 0) { @@ -373,7 +83,7 @@ uint32_t taitob_state::screen_update_taitob(screen_device &screen, bitmap_ind16 /* Draw playfields */ m_tc0180vcu->tilemap_draw(screen, bitmap, cliprect, 0, 1); - draw_framebuffer(bitmap, cliprect, 1); + m_tc0180vcu->draw_framebuffer(bitmap, cliprect, 1); m_tc0180vcu->tilemap_draw(screen, bitmap, cliprect, 1, 0); @@ -388,7 +98,7 @@ uint32_t taitob_state::screen_update_taitob(screen_device &screen, bitmap_ind16 copyscrollbitmap_trans(bitmap, *m_pixel_bitmap, 1, &scrollx, 1, &scrolly, cliprect, m_b_fg_color_base * 16); } - draw_framebuffer(bitmap, cliprect, 0); + m_tc0180vcu->draw_framebuffer(bitmap, cliprect, 0); m_tc0180vcu->tilemap_draw(screen, bitmap, cliprect, 2, 0); @@ -399,9 +109,8 @@ uint32_t taitob_state::screen_update_taitob(screen_device &screen, bitmap_ind16 uint32_t taitob_state::screen_update_realpunc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - address_space &space = machine().dummy_space(); const pen_t *palette = m_palette->pens(); - uint8_t video_control = m_tc0180vcu->get_videoctrl(space, 0); + uint8_t const video_control = m_tc0180vcu->get_videoctrl(); int x, y; /* Video blanked? */ @@ -414,12 +123,12 @@ uint32_t taitob_state::screen_update_realpunc(screen_device &screen, bitmap_rgb3 /* Draw the palettized playfields to an indexed bitmap */ m_tc0180vcu->tilemap_draw(screen, *m_realpunc_bitmap, cliprect, 0, 1); - draw_framebuffer(*m_realpunc_bitmap, cliprect, 1); + m_tc0180vcu->draw_framebuffer(*m_realpunc_bitmap, cliprect, 1); m_tc0180vcu->tilemap_draw(screen, *m_realpunc_bitmap, cliprect, 1, 0); if (m_realpunc_video_ctrl & 0x0001) - draw_framebuffer(*m_realpunc_bitmap, cliprect, 0); + m_tc0180vcu->draw_framebuffer(*m_realpunc_bitmap, cliprect, 0); /* Copy the intermediate bitmap to the output bitmap, applying the palette */ for (y = 0; y <= cliprect.max_y; y++) @@ -464,7 +173,7 @@ uint32_t taitob_state::screen_update_realpunc(screen_device &screen, bitmap_rgb3 m_realpunc_bitmap->fill(0, cliprect); if (!(m_realpunc_video_ctrl & 0x0001)) - draw_framebuffer(*m_realpunc_bitmap, cliprect, 0); + m_tc0180vcu->draw_framebuffer(*m_realpunc_bitmap, cliprect, 0); m_tc0180vcu->tilemap_draw(screen, *m_realpunc_bitmap, cliprect, 2, 0); @@ -481,26 +190,3 @@ uint32_t taitob_state::screen_update_realpunc(screen_device &screen, bitmap_rgb3 return 0; } - - -WRITE_LINE_MEMBER(taitob_state::screen_vblank_taitob) -{ - // rising edge - if (state) - { - address_space &space = machine().dummy_space(); - uint8_t video_control = m_tc0180vcu->get_videoctrl(space, 0); - uint8_t framebuffer_page = m_tc0180vcu->get_fb_page(space, 0); - - if (~video_control & 0x01) - m_framebuffer[framebuffer_page]->fill(0, m_screen->visible_area()); - - if (~video_control & 0x80) - { - framebuffer_page ^= 1; - m_tc0180vcu->set_fb_page(space, 0, framebuffer_page); - } - - draw_sprites(*m_framebuffer[framebuffer_page], m_screen->visible_area()); - } -} diff --git a/src/mame/video/tc0180vcu.cpp b/src/mame/video/tc0180vcu.cpp index 7d8fb28d2e0..c6d2d339787 100644 --- a/src/mame/video/tc0180vcu.cpp +++ b/src/mame/video/tc0180vcu.cpp @@ -1,31 +1,71 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria /* Taito TC0180VCU */ +// Sprite/Framebuffer emulation by Jarek Burczynski (from taito_b.cpp) #include "emu.h" #include "tc0180vcu.h" #include "screen.h" -#define TC0180VCU_RAM_SIZE 0x10000 -#define TC0180VCU_SCROLLRAM_SIZE 0x0800 +//#define TC0180VCU_RAM_SIZE 0x10000 +//#define TC0180VCU_SCROLLRAM_SIZE 0x0800 +const gfx_layout tc0180vcu_device::charlayout = +{ + 8,8, + RGN_FRAC(1,2), + 4, + { 0, 8, RGN_FRAC(1,2), RGN_FRAC(1,2)+8 }, + { STEP8(0,1) }, + { STEP8(0,8*2) }, + 16*8 +}; + +const gfx_layout tc0180vcu_device::tilelayout = +{ + 16,16, + RGN_FRAC(1,2), + 4, + { 0, 8, RGN_FRAC(1,2), RGN_FRAC(1,2)+8 }, + { STEP8(0,1), STEP8(8*8*2,1) }, + { STEP8(0,8*2), STEP8(8*8*2*2,8*2) }, + 64*8 +}; + +GFXDECODE_MEMBER( tc0180vcu_device::gfxinfo ) + GFXDECODE_DEVICE( DEVICE_SELF, 0, charlayout, 0, 256 ) + GFXDECODE_DEVICE( DEVICE_SELF, 0, tilelayout, 0, 256 ) +GFXDECODE_END + +void tc0180vcu_device::tc0180vcu_memrw(address_map &map) +{ + map(0x00000, 0x0ffff).ram().w(FUNC(tc0180vcu_device::word_w)).share("vram"); + map(0x10000, 0x1197f).ram().share("spriteram"); + map(0x11980, 0x137ff).ram(); + map(0x13800, 0x13fff).ram().share("scrollram"); + map(0x18000, 0x1801f).ram().w(FUNC(tc0180vcu_device::ctrl_w)).share("ctrl"); + map(0x40000, 0x7ffff).rw(FUNC(tc0180vcu_device::framebuffer_word_r), FUNC(tc0180vcu_device::framebuffer_word_w)); +} DEFINE_DEVICE_TYPE(TC0180VCU, tc0180vcu_device, "tc0180vcu", "Taito TC0180VCU") -tc0180vcu_device::tc0180vcu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, TC0180VCU, tag, owner, clock), +tc0180vcu_device::tc0180vcu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, TC0180VCU, tag, owner, clock), + device_gfx_interface(mconfig, *this, gfxinfo), device_video_interface(mconfig, *this), - m_ram(nullptr), - //m_scrollram(nullptr), + m_spriteram(*this, "spriteram"), + m_vram(*this, "vram"), + m_scrollram(*this, "scrollram"), + m_ctrl(*this, "ctrl"), //m_bg_rambank(0), //m_fg_rambank(0), //m_tx_rambank(0), m_framebuffer_page(0), m_video_control(0), + m_fb_color_base(0), m_bg_color_base(0), m_fg_color_base(0), m_tx_color_base(0), - m_gfxdecode(*this, finder_base::DUMMY_TAG), m_inth_callback(*this), m_intl_callback(*this), m_intl_timer(nullptr) @@ -50,25 +90,19 @@ void tc0180vcu_device::device_resolve_objects() void tc0180vcu_device::device_start() { - if(!m_gfxdecode->started()) - throw device_missing_dependencies(); - - m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(tc0180vcu_device::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); - m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(tc0180vcu_device::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); - m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(tc0180vcu_device::get_tx_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); + m_tilemap[0] = &machine().tilemap().create(*this, tilemap_get_info_delegate(FUNC(tc0180vcu_device::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); + m_tilemap[1] = &machine().tilemap().create(*this, tilemap_get_info_delegate(FUNC(tc0180vcu_device::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); + m_tilemap[2] = &machine().tilemap().create(*this, tilemap_get_info_delegate(FUNC(tc0180vcu_device::get_tx_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); m_tilemap[1]->set_transparent_pen(0); m_tilemap[2]->set_transparent_pen(0); - m_ram = make_unique_clear(TC0180VCU_RAM_SIZE / 2); - m_scrollram = make_unique_clear(TC0180VCU_SCROLLRAM_SIZE / 2); + m_framebuffer[0] = std::make_unique(512, 256); + m_framebuffer[1] = std::make_unique(512, 256); screen().register_vblank_callback(vblank_state_delegate(&tc0180vcu_device::vblank_callback, this)); m_intl_timer = timer_alloc(TIMER_INTL); - save_pointer(NAME(m_ram.get()), TC0180VCU_RAM_SIZE / 2); - save_pointer(NAME(m_scrollram.get()), TC0180VCU_SCROLLRAM_SIZE / 2); - save_item(NAME(m_bg_rambank)); save_item(NAME(m_fg_rambank)); save_item(NAME(m_tx_rambank)); @@ -76,7 +110,9 @@ void tc0180vcu_device::device_start() save_item(NAME(m_framebuffer_page)); save_item(NAME(m_video_control)); - save_item(NAME(m_ctrl)); + + save_item(NAME(*m_framebuffer[0])); + save_item(NAME(*m_framebuffer[1])); } //------------------------------------------------- @@ -187,21 +223,6 @@ void tc0180vcu_device::device_timer(emu_timer &timer, device_timer_id id, int pa * */ -READ8_MEMBER( tc0180vcu_device::get_fb_page ) -{ - return m_framebuffer_page; -} - -WRITE8_MEMBER( tc0180vcu_device::set_fb_page ) -{ - m_framebuffer_page = data; -} - -READ8_MEMBER( tc0180vcu_device::get_videoctrl ) -{ - return m_video_control; -} - void tc0180vcu_device::video_control( uint8_t data ) { #if 0 @@ -212,23 +233,18 @@ void tc0180vcu_device::video_control( uint8_t data ) m_video_control = data; if (m_video_control & 0x80) - m_framebuffer_page = (~m_video_control & 0x40) >> 6; + m_framebuffer_page = BIT(~m_video_control, 6); machine().tilemap().set_flip_all((m_video_control & 0x10) ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0 ); } -READ16_MEMBER( tc0180vcu_device::ctrl_r ) -{ - return m_ctrl[offset]; -} - WRITE16_MEMBER( tc0180vcu_device::ctrl_w ) { uint16_t oldword = m_ctrl[offset]; COMBINE_DATA (&m_ctrl[offset]); - if (oldword != m_ctrl[offset]) + if (oldword ^ m_ctrl[offset]) { if (ACCESSING_BITS_8_15) { @@ -262,10 +278,29 @@ WRITE16_MEMBER( tc0180vcu_device::ctrl_w ) } } +READ16_MEMBER(tc0180vcu_device::framebuffer_word_r) +{ + int sy = offset >> 8; + int sx = 2 * (offset & 0xff); + + return (m_framebuffer[sy >> 8]->pix16(sy & 0xff, sx + 0) << 8) | m_framebuffer[sy >> 8]->pix16(sy & 0xff, sx + 1); +} + +WRITE16_MEMBER(tc0180vcu_device::framebuffer_word_w) +{ + int sy = offset >> 8; + int sx = 2 * (offset & 0xff); + + if (ACCESSING_BITS_8_15) + m_framebuffer[sy >> 8]->pix16(sy & 0xff, sx + 0) = data >> 8; + if (ACCESSING_BITS_0_7) + m_framebuffer[sy >> 8]->pix16(sy & 0xff, sx + 1) = data & 0xff; +} + TILE_GET_INFO_MEMBER(tc0180vcu_device::get_bg_tile_info) { - int tile = m_ram[tile_index + m_bg_rambank[0]]; - int color = m_ram[tile_index + m_bg_rambank[1]]; + int tile = m_vram[tile_index + m_bg_rambank[0]]; + int color = m_vram[tile_index + m_bg_rambank[1]]; SET_TILE_INFO_MEMBER(1, tile, m_bg_color_base + (color & 0x3f), @@ -274,8 +309,8 @@ TILE_GET_INFO_MEMBER(tc0180vcu_device::get_bg_tile_info) TILE_GET_INFO_MEMBER(tc0180vcu_device::get_fg_tile_info) { - int tile = m_ram[tile_index + m_fg_rambank[0]]; - int color = m_ram[tile_index + m_fg_rambank[1]]; + int tile = m_vram[tile_index + m_fg_rambank[0]]; + int color = m_vram[tile_index + m_fg_rambank[1]]; SET_TILE_INFO_MEMBER(1, tile, m_fg_color_base + (color & 0x3f), @@ -284,7 +319,7 @@ TILE_GET_INFO_MEMBER(tc0180vcu_device::get_fg_tile_info) TILE_GET_INFO_MEMBER(tc0180vcu_device::get_tx_tile_info) { - int tile = m_ram[tile_index + m_tx_rambank]; + int tile = m_vram[tile_index + m_tx_rambank]; SET_TILE_INFO_MEMBER(0, (tile & 0x07ff) | ((m_ctrl[4 + ((tile & 0x800) >> 11)]>>8) << 11), @@ -292,24 +327,9 @@ TILE_GET_INFO_MEMBER(tc0180vcu_device::get_tx_tile_info) 0); } -READ16_MEMBER( tc0180vcu_device::scroll_r ) -{ - return m_scrollram[offset]; -} - -WRITE16_MEMBER( tc0180vcu_device::scroll_w ) -{ - COMBINE_DATA(&m_scrollram[offset]); -} - -READ16_MEMBER( tc0180vcu_device::word_r ) -{ - return m_ram[offset]; -} - WRITE16_MEMBER( tc0180vcu_device::word_w ) { - COMBINE_DATA(&m_ram[offset]); + COMBINE_DATA(&m_vram[offset]); if ((offset & 0x7000) == m_fg_rambank[0] || (offset & 0x7000) == m_fg_rambank[1]) m_tilemap[1]->mark_tile_dirty(offset & 0x0fff); @@ -368,3 +388,249 @@ void tc0180vcu_device::tilemap_draw( screen_device &screen, bitmap_ind16 &bitmap } } } + +void tc0180vcu_device::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) +{ +/* Sprite format: (16 bytes per sprite) + offs: bits: + 0000: 0xxxxxxxxxxxxxxx: tile code - 0x0000 to 0x7fff in qzshowby + 0002: 0000000000xxxxxx: color (0x00 - 0x3f) + x000000000000000: flipy + 0x00000000000000: flipx + 00????????000000: unused ? + 0004: xxxxxx0000000000: doesn't matter - some games (eg nastar) fill this with sign bit, some (eg ashura) do not + 000000xxxxxxxxxx: x-coordinate 10 bits signed (all zero for sprites forming up a big sprite, except for the first one) + 0006: xxxxxx0000000000: doesn't matter - same as x + 000000xxxxxxxxxx: y-coordinate 10 bits signed (same as x) + 0008: xxxxxxxx00000000: sprite x-zoom level + 00000000xxxxxxxx: sprite y-zoom level + 0x00 - non scaled = 100% + 0x80 - scaled to 50% + 0xc0 - scaled to 25% + 0xe0 - scaled to 12.5% + 0xff - scaled to zero pixels size (off) + Sprite zoom is used in Ashura Blaster just in the beginning + where you can see a big choplifter and a japanese title. + This japanese title is a scaled sprite. + It is used in Crime City also at the end of the third level (in the garage) + where there are four columns on the sides of the screen + Heaviest usage is in Rambo 3 - almost every sprite in game is scaled + 000a: xxxxxxxx00000000: x-sprites number (big sprite) decremented by one + 00000000xxxxxxxx: y-sprites number (big sprite) decremented by one + 000c - 000f: unused +*/ + + int x, y, xlatch = 0, ylatch = 0, x_no = 0, y_no = 0, x_num = 0, y_num = 0, big_sprite = 0; + int offs, code, color, flipx, flipy; + uint32_t data, zoomx, zoomy, zx, zy, zoomxlatch = 0, zoomylatch = 0; + + for (offs = (0x1980 - 16) / 2; offs >=0; offs -= 8) + { + code = m_spriteram[offs]; + + color = m_spriteram[offs + 1]; + flipx = color & 0x4000; + flipy = color & 0x8000; +#if 0 + /*check the unknown bits*/ + if (color & 0x3fc0) + { + logerror("sprite color (taitob)=%4x ofs=%4x\n", color, offs); + color = machine().rand() & 0x3f; + } +#endif + color = (color & 0x3f) * 16; + + x = m_spriteram[offs + 2] & 0x3ff; + y = m_spriteram[offs + 3] & 0x3ff; + if (x >= 0x200) x -= 0x400; + if (y >= 0x200) y -= 0x400; + + data = m_spriteram[offs + 5]; + if (data) + { + if (!big_sprite) + { + x_num = (data >> 8) & 0xff; + y_num = (data >> 0) & 0xff; + x_no = 0; + y_no = 0; + xlatch = x; + ylatch = y; + data = m_spriteram[offs + 4]; + zoomxlatch = (data >> 8) & 0xff; + zoomylatch = (data >> 0) & 0xff; + big_sprite = 1; + } + } + + data = m_spriteram[offs + 4]; + zoomx = (data >> 8) & 0xff; + zoomy = (data >> 0) & 0xff; + zx = (0x100 - zoomx) / 16; + zy = (0x100 - zoomy) / 16; + + if (big_sprite) + { + zoomx = zoomxlatch; + zoomy = zoomylatch; + + /* Note: like taito_f2.cpp, this zoom implementation is wrong, + chopped up into 16x16 sections instead of one sprite. This + is especially visible in rambo3. */ + + x = xlatch + (x_no * (0xff - zoomx) + 15) / 16; + y = ylatch + (y_no * (0xff - zoomy) + 15) / 16; + zx = xlatch + ((x_no + 1) * (0xff - zoomx) + 15) / 16 - x; + zy = ylatch + ((y_no + 1) * (0xff - zoomy) + 15) / 16 - y; + y_no++; + + if (y_no > y_num) + { + y_no = 0; + x_no++; + + if (x_no > x_num) + big_sprite = 0; + } + } + + if ( zoomx || zoomy ) + { + gfx(1)->zoom_transpen_raw(bitmap,cliprect, + code, + color, + flipx,flipy, + x,y, + (zx << 16) / 16,(zy << 16) / 16,0); + } + else + { + gfx(1)->transpen_raw(bitmap,cliprect, + code, + color, + flipx,flipy, + x,y, + 0); + } + } +} + +void tc0180vcu_device::draw_framebuffer( bitmap_ind16 &bitmap, const rectangle &cliprect, int priority ) +{ + rectangle myclip = cliprect; + int x, y; + +g_profiler.start(PROFILER_USER1); + + priority <<= 4; + + if (m_video_control & 0x08) + { + if (priority) + { + g_profiler.stop(); + return; + } + + if (m_video_control & 0x10) /*flip screen*/ + { + /*popmessage("1. X[%3i;%3i] Y[%3i;%3i]", myclip.min_x, myclip.max_x, myclip.min_y, myclip.max_y);*/ + for (y = myclip.min_y; y <= myclip.max_y; y++) + { + uint16_t *src = &m_framebuffer[m_framebuffer_page]->pix16(y, myclip.min_x); + uint16_t *dst; + + dst = &bitmap.pix16(bitmap.height()-1-y, myclip.max_x); + + for (x = myclip.min_x; x <= myclip.max_x; x++) + { + uint16_t c = *src++; + + if (c != 0) + *dst = m_fb_color_base + c; + + dst--; + } + } + } + else + { + for (y = myclip.min_y; y <= myclip.max_y; y++) + { + uint16_t *src = &m_framebuffer[m_framebuffer_page]->pix16(y, myclip.min_x); + uint16_t *dst = &bitmap.pix16(y, myclip.min_x); + + for (x = myclip.min_x; x <= myclip.max_x; x++) + { + uint16_t c = *src++; + + if (c != 0) + *dst = m_fb_color_base + c; + + dst++; + } + } + } + } + else + { + if (m_video_control & 0x10) /*flip screen*/ + { + /*popmessage("3. X[%3i;%3i] Y[%3i;%3i]", myclip.min_x, myclip.max_x, myclip.min_y, myclip.max_y);*/ + for (y = myclip.min_y ;y <= myclip.max_y; y++) + { + uint16_t *src = &m_framebuffer[m_framebuffer_page]->pix16(y, myclip.min_x); + uint16_t *dst; + + dst = &bitmap.pix16(bitmap.height()-1-y, myclip.max_x); + + for (x = myclip.min_x; x <= myclip.max_x; x++) + { + uint16_t c = *src++; + + if (c != 0 && (c & 0x10) == priority) + *dst = m_fb_color_base + c; + + dst--; + } + } + } + else + { + for (y = myclip.min_y; y <= myclip.max_y; y++) + { + uint16_t *src = &m_framebuffer[m_framebuffer_page]->pix16(y, myclip.min_x); + uint16_t *dst = &bitmap.pix16(y, myclip.min_x); + + for (x = myclip.min_x; x <= myclip.max_x; x++) + { + uint16_t c = *src++; + + if (c != 0 && (c & 0x10) == priority) + *dst = m_fb_color_base + c; + + dst++; + } + } + } + } +g_profiler.stop(); +} + +WRITE_LINE_MEMBER(tc0180vcu_device::screen_vblank) +{ + // rising edge + if (state) + { + if (~m_video_control & 0x01) + m_framebuffer[m_framebuffer_page]->fill(0, screen().visible_area()); + + if (~m_video_control & 0x80) + { + m_framebuffer_page ^= 1; + } + + draw_sprites(*m_framebuffer[m_framebuffer_page], screen().visible_area()); + } +} diff --git a/src/mame/video/tc0180vcu.h b/src/mame/video/tc0180vcu.h index cc65bbbecd1..3d3f4e8ece8 100644 --- a/src/mame/video/tc0180vcu.h +++ b/src/mame/video/tc0180vcu.h @@ -10,30 +10,30 @@ #define MCFG_TC0180VCU_INTL_CALLBACK(_write) \ devcb = &downcast(*device).set_intl_callback(DEVCB_##_write); -class tc0180vcu_device : public device_t, public device_video_interface +class tc0180vcu_device : public device_t, public device_gfx_interface, public device_video_interface { public: tc0180vcu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // configuration - void set_gfxdecode_tag(const char *tag) { m_gfxdecode.set_tag(tag); } + void set_fb_colorbase(int color) { m_fb_color_base = color * 16; } void set_bg_colorbase(int color) { m_bg_color_base = color; } void set_fg_colorbase(int color) { m_fg_color_base = color; } void set_tx_colorbase(int color) { m_tx_color_base = color; } template devcb_base &set_inth_callback(Object &&cb) { return m_inth_callback.set_callback(std::forward(cb)); } template devcb_base &set_intl_callback(Object &&cb) { return m_intl_callback.set_callback(std::forward(cb)); } - DECLARE_READ8_MEMBER( get_fb_page ); - DECLARE_WRITE8_MEMBER( set_fb_page ); - DECLARE_READ8_MEMBER( get_videoctrl ); - DECLARE_READ16_MEMBER( ctrl_r ); + uint8_t get_videoctrl() { return m_video_control; } DECLARE_WRITE16_MEMBER( ctrl_w ); - DECLARE_READ16_MEMBER( scroll_r ); - DECLARE_WRITE16_MEMBER( scroll_w ); - DECLARE_READ16_MEMBER( word_r ); DECLARE_WRITE16_MEMBER( word_w ); + DECLARE_READ16_MEMBER( framebuffer_word_r ); + DECLARE_WRITE16_MEMBER( framebuffer_word_w ); void tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int tmap_num, int plane); + void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); + void draw_framebuffer( bitmap_ind16 &bitmap, const rectangle &cliprect, int priority ); + DECLARE_WRITE_LINE_MEMBER(screen_vblank); + void tc0180vcu_memrw(address_map &map); protected: // device-level overrides virtual void device_resolve_objects() override; @@ -49,10 +49,13 @@ private: void vblank_callback(screen_device &screen, bool state); // internal state - uint16_t m_ctrl[0x10]; - std::unique_ptr m_ram; - std::unique_ptr m_scrollram; + required_shared_ptr m_spriteram; + required_shared_ptr m_vram; + required_shared_ptr m_scrollram; + required_shared_ptr m_ctrl; + /* framebuffer is a raw bitmap, remapped as a last step */ + std::unique_ptr m_framebuffer[2]; tilemap_t *m_tilemap[3]; @@ -60,11 +63,13 @@ private: uint8_t m_framebuffer_page; uint8_t m_video_control; + int m_fb_color_base; int m_bg_color_base; int m_fg_color_base; int m_tx_color_base; - required_device m_gfxdecode; + static const gfx_layout charlayout, tilelayout; + DECLARE_GFXDECODE_MEMBER(gfxinfo); devcb_write_line m_inth_callback; devcb_write_line m_intl_callback; @@ -79,6 +84,9 @@ private: DECLARE_DEVICE_TYPE(TC0180VCU, tc0180vcu_device) +#define MCFG_TC0180VCU_FB_COLORBASE(_color) \ + downcast(*device).set_fb_colorbase(_color); + #define MCFG_TC0180VCU_BG_COLORBASE(_color) \ downcast(*device).set_bg_colorbase(_color); @@ -88,7 +96,4 @@ DECLARE_DEVICE_TYPE(TC0180VCU, tc0180vcu_device) #define MCFG_TC0180VCU_TX_COLORBASE(_color) \ downcast(*device).set_tx_colorbase(_color); -#define MCFG_TC0180VCU_GFXDECODE(_gfxtag) \ - downcast(*device).set_gfxdecode_tag(_gfxtag); - #endif // MAME_VIDEO_TC0180VCU_H -- cgit v1.2.3