tatsumi.cpp : Reduce runtime tag lookups, Fix region tags, Move CLUT'… (#3561)

* tatsumi.cpp : Reduce runtime tag lookups, Fix region tags, Move CLUT'ed tile expand functions into video_start, Reduce duplicates

* tatsumi.h : Fix build

* tatsumi.cpp : Fix build(2)
This commit is contained in:
cam900 2018-05-14 07:03:48 +09:00 committed by R. Belmont
parent 16f9e92d28
commit a65fccc1f5
4 changed files with 244 additions and 240 deletions

View File

@ -149,7 +149,6 @@
#include "machine/adc0808.h"
#include "machine/i8255.h"
#include "machine/nvram.h"
#include "sound/ym2151.h"
#include "screen.h"
#include "speaker.h"
@ -187,10 +186,21 @@ WRITE16_MEMBER(cyclwarr_state::bigfight_a60000_w)
COMBINE_DATA(&m_bigfight_a60000[offset]);
}
WRITE16_MEMBER(cyclwarr_state::cyclwarr_sound_w)
template<int Bank>
READ16_MEMBER(cyclwarr_state::cyclwarr_videoram_r)
{
m_soundlatch->write(space, 0, data >> 8);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
return m_cyclwarr_videoram[Bank][offset];
}
template<int Bank>
WRITE16_MEMBER(cyclwarr_state::cyclwarr_videoram_w)
{
COMBINE_DATA(&m_cyclwarr_videoram[Bank][offset]);
if (offset>=0x400)
{
m_layer[(Bank<<1)|0]->mark_tile_dirty(offset-0x400);
m_layer[(Bank<<1)|1]->mark_tile_dirty(offset-0x400);
}
}
/***************************************************************************/
@ -228,7 +238,7 @@ void apache3_state::apache3_v20_map(address_map &map)
map(0x00000, 0x01fff).ram();
map(0x04000, 0x04003).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x06000, 0x06001).portr("IN0"); // esw
map(0x08000, 0x08001).r(this, FUNC(apache3_state::tatsumi_hack_ym2151_r)).w("ymsnd", FUNC(ym2151_device::write));
map(0x08000, 0x08001).r(this, FUNC(apache3_state::tatsumi_hack_ym2151_r)).w(m_ym2151, FUNC(ym2151_device::write));
map(0x0a000, 0x0a000).r(this, FUNC(apache3_state::tatsumi_hack_oki_r)).w(m_oki, FUNC(okim6295_device::write));
map(0x0e000, 0x0e007).rw("adc", FUNC(adc0808_device::data_r), FUNC(adc0808_device::address_offset_start_w));
map(0xf0000, 0xfffff).rom();
@ -276,7 +286,7 @@ void roundup5_state::roundup5_z80_map(address_map &map)
{
map(0x0000, 0xdfff).rom();
map(0xe000, 0xffef).ram();
map(0xfff0, 0xfff1).r(this, FUNC(roundup5_state::tatsumi_hack_ym2151_r)).w("ymsnd", FUNC(ym2151_device::write));
map(0xfff0, 0xfff1).r(this, FUNC(roundup5_state::tatsumi_hack_ym2151_r)).w(m_ym2151, FUNC(ym2151_device::write));
map(0xfff4, 0xfff4).r(this, FUNC(roundup5_state::tatsumi_hack_oki_r)).w(m_oki, FUNC(okim6295_device::write));
map(0xfff8, 0xfffb).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xfffc, 0xfffc).portr("STICKX");
@ -289,14 +299,14 @@ void cyclwarr_state::cyclwarr_68000a_map(address_map &map)
map(0x000000, 0x00ffff).ram().share("cw_cpua_ram");
map(0x03e000, 0x03efff).ram();
map(0x040000, 0x04ffff).ram().share("cw_cpub_ram");
map(0x080000, 0x08ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram1_r), FUNC(cyclwarr_state::cyclwarr_videoram1_w)).share("cw_videoram1");
map(0x090000, 0x09ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram0_r), FUNC(cyclwarr_state::cyclwarr_videoram0_w)).share("cw_videoram0");
map(0x080000, 0x08ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram_r<1>), FUNC(cyclwarr_state::cyclwarr_videoram_w<1>)).share("cw_videoram1");
map(0x090000, 0x09ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram_r<0>), FUNC(cyclwarr_state::cyclwarr_videoram_w<0>)).share("cw_videoram0");
map(0x0a2000, 0x0a2007).w(this, FUNC(cyclwarr_state::bigfight_a20000_w));
map(0x0a4000, 0x0a4001).w(this, FUNC(cyclwarr_state::bigfight_a40000_w));
map(0x0a6000, 0x0a6001).w(this, FUNC(cyclwarr_state::bigfight_a60000_w));
map(0x0b8000, 0x0b8001).w(this, FUNC(cyclwarr_state::cyclwarr_sound_w));
map(0x0b8000, 0x0b8001).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0xff00).cswidth(16);
map(0x0b9000, 0x0b900f).rw("io1", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16);
map(0x0ba000, 0x0ba00f).rw("io2", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16);
map(0x0c0000, 0x0c3fff).rw(this, FUNC(cyclwarr_state::cyclwarr_sprite_r), FUNC(cyclwarr_state::cyclwarr_sprite_w)).share("spriteram");
@ -310,8 +320,8 @@ void cyclwarr_state::cyclwarr_68000b_map(address_map &map)
{
map(0x000000, 0x00ffff).ram().share("cw_cpub_ram");
map(0x080000, 0x08ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram1_r), FUNC(cyclwarr_state::cyclwarr_videoram1_w));
map(0x090000, 0x09ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram0_r), FUNC(cyclwarr_state::cyclwarr_videoram0_w));
map(0x080000, 0x08ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram_r<1>), FUNC(cyclwarr_state::cyclwarr_videoram_w<1>));
map(0x090000, 0x09ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram_r<0>), FUNC(cyclwarr_state::cyclwarr_videoram_w<0>));
map(0x0a2000, 0x0a2007).w(this, FUNC(cyclwarr_state::bigfight_a20000_w));
map(0x0a4000, 0x0a4001).w(this, FUNC(cyclwarr_state::bigfight_a40000_w));
@ -330,7 +340,7 @@ void cyclwarr_state::cyclwarr_z80_map(address_map &map)
{
map(0x0000, 0xdfff).rom();
map(0xe000, 0xffef).ram();
map(0xfff0, 0xfff1).r(this, FUNC(cyclwarr_state::tatsumi_hack_ym2151_r)).w("ymsnd", FUNC(ym2151_device::write));
map(0xfff0, 0xfff1).r(this, FUNC(cyclwarr_state::tatsumi_hack_ym2151_r)).w(m_ym2151, FUNC(ym2151_device::write));
map(0xfff4, 0xfff4).r(this, FUNC(cyclwarr_state::tatsumi_hack_oki_r)).w(m_oki, FUNC(okim6295_device::write));
map(0xfffc, 0xfffc).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0xfffe, 0xfffe).nopw();
@ -345,14 +355,14 @@ void cyclwarr_state::bigfight_68000a_map(address_map &map)
map(0x03e000, 0x03efff).ram();
map(0x040000, 0x04ffff).ram().share("cw_cpub_ram");
map(0x080000, 0x08ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram1_r), FUNC(cyclwarr_state::cyclwarr_videoram1_w)).share("cw_videoram1");
map(0x090000, 0x09ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram0_r), FUNC(cyclwarr_state::cyclwarr_videoram0_w)).share("cw_videoram0");
map(0x080000, 0x08ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram_r<1>), FUNC(cyclwarr_state::cyclwarr_videoram_w<1>)).share("cw_videoram1");
map(0x090000, 0x09ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram_r<0>), FUNC(cyclwarr_state::cyclwarr_videoram_w<0>)).share("cw_videoram0");
map(0x0a2000, 0x0a2007).w(this, FUNC(cyclwarr_state::bigfight_a20000_w));
map(0x0a4000, 0x0a4001).w(this, FUNC(cyclwarr_state::bigfight_a40000_w));
map(0x0a6000, 0x0a6001).w(this, FUNC(cyclwarr_state::bigfight_a60000_w));
map(0x0b8000, 0x0b8001).w(this, FUNC(cyclwarr_state::cyclwarr_sound_w));
map(0x0b8000, 0x0b8001).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0xff00).cswidth(16);
map(0x0b9000, 0x0b900f).rw("io1", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16);
map(0x0ba000, 0x0ba00f).rw("io2", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16);
map(0x0c0000, 0x0c3fff).rw(this, FUNC(cyclwarr_state::cyclwarr_sprite_r), FUNC(cyclwarr_state::cyclwarr_sprite_w)).share("spriteram");
@ -365,8 +375,8 @@ void cyclwarr_state::bigfight_68000a_map(address_map &map)
void cyclwarr_state::bigfight_68000b_map(address_map &map)
{
map(0x000000, 0x00ffff).ram().share("cw_cpub_ram");
map(0x080000, 0x08ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram1_r), FUNC(cyclwarr_state::cyclwarr_videoram1_w));
map(0x090000, 0x09ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram0_r), FUNC(cyclwarr_state::cyclwarr_videoram0_w));
map(0x080000, 0x08ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram_r<1>), FUNC(cyclwarr_state::cyclwarr_videoram_w<1>));
map(0x090000, 0x09ffff).rw(this, FUNC(cyclwarr_state::cyclwarr_videoram_r<0>), FUNC(cyclwarr_state::cyclwarr_videoram_w<0>));
map(0x0a2000, 0x0a2007).w(this, FUNC(cyclwarr_state::bigfight_a20000_w));
map(0x0a4000, 0x0a4001).w(this, FUNC(cyclwarr_state::bigfight_a40000_w));
map(0x0a6000, 0x0a6001).w(this, FUNC(cyclwarr_state::bigfight_a60000_w));
@ -794,9 +804,9 @@ static const gfx_layout spritelayout =
8,8,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{ 8,12,0,4, 24,28, 16,20},
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32},
{ STEP4(0,1) },
{ 8,12,0,4, 24,28,16,20 },
{ STEP8(0,4*8) },
32*8
};
@ -806,24 +816,24 @@ static const gfx_layout roundup5_vramlayout =
4096 + 2048,
3,
{ 0x30000 * 8, 0x18000 * 8, 0 },
{ 0, 1, 2, 3, 4, 5, 6, 7},
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16},
{ STEP8(0,1) },
{ STEP8(0,8*2) },
8*16
};
static GFXDECODE_START( apache3 )
GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 1024, 128)
GFXDECODE_ENTRY( "gfx4", 0, gfx_8x8x3_planar, 768, 16)
GFXDECODE_ENTRY( "sprites", 0, spritelayout, 1024, 128)
GFXDECODE_ENTRY( "text", 0, gfx_8x8x3_planar, 768, 16)
GFXDECODE_END
static GFXDECODE_START( roundup5 )
GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 1024, 256)
GFXDECODE_ENTRY( nullptr, 0, roundup5_vramlayout, 0, 16)
GFXDECODE_ENTRY( "sprites", 0, spritelayout, 1024, 256)
GFXDECODE_ENTRY( nullptr, 0, roundup5_vramlayout, 0, 16)
GFXDECODE_END
static GFXDECODE_START( cyclwarr )
GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 8192, 512)
GFXDECODE_ENTRY( "gfx5", 0, gfx_8x8x3_planar, 0, 512)
GFXDECODE_ENTRY( "sprites", 0, spritelayout, 8192, 512)
GFXDECODE_ENTRY( "tilerom", 0, gfx_8x8x3_planar, 0, 16)
GFXDECODE_END
/******************************************************************************/
@ -1010,6 +1020,7 @@ MACHINE_CONFIG_START(cyclwarr_state::cyclwarr)
SPEAKER(config, "rspeaker").front_right();
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", INPUT_LINE_NMI))
MCFG_DEVICE_ADD("ymsnd", YM2151, CLOCK_1 / 4)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_IRQ0))
@ -1069,6 +1080,7 @@ MACHINE_CONFIG_START(cyclwarr_state::bigfight)
SPEAKER(config, "rspeaker").front_right();
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", INPUT_LINE_NMI))
MCFG_DEVICE_ADD("ymsnd", YM2151, CLOCK_1 / 4)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_IRQ0))
@ -1098,10 +1110,10 @@ ROM_START( apache3 )
ROM_REGION( 0x100000, "audiocpu", 0 ) /* 64k code for sound V20 */
ROM_LOAD( "ap-27d.151", 0x0f0000, 0x10000, CRC(294b4d79) SHA1(2b03418a12a2aaf3919b98161d8d0ce6ae29a2bb) )
ROM_REGION( 0x200000, "gfx1", ROMREGION_ERASE00 )
ROM_REGION( 0x200000, "sprites", ROMREGION_ERASE00 )
/* Filled in by both regions below */
ROM_REGION( 0x100000, "gfx2", 0)
ROM_REGION( 0x100000, "sprites_l", 0)
ROM_LOAD32_BYTE( "ap-00c.15", 0x000000, 0x20000, CRC(ad1ddc2b) SHA1(81f64663c4892ab5fb0e2dc99513dbfee73f15b8) )
ROM_LOAD32_BYTE( "ap-01c.22", 0x000001, 0x20000, CRC(6286ff00) SHA1(920da4a3a441dbf54ad86c0f4fb6f47a867e9cda) )
ROM_LOAD32_BYTE( "ap-04c.58", 0x000002, 0x20000, CRC(dc6d55e4) SHA1(9f48f8d6aa1a329a71913139a8d5a50d95a9b9e5) )
@ -1111,7 +1123,7 @@ ROM_START( apache3 )
ROM_LOAD32_BYTE( "ap-06c.71", 0x080002, 0x20000, CRC(0ea90e55) SHA1(b16d6b8be4853797507d3e5c933a9dd1d451308e) )
ROM_LOAD32_BYTE( "ap-07c.75", 0x080003, 0x20000, CRC(ba685543) SHA1(140a2b708d4e4de4d207fc2c4a96a5cab8639988) )
ROM_REGION( 0x100000, "gfx3", 0)
ROM_REGION( 0x100000, "sprites_h", 0)
ROM_LOAD32_BYTE( "ap-08c.14", 0x000000, 0x20000, CRC(6437b580) SHA1(2b2ba42add18bbec04fbcf53645a8d44b972e26a) )
ROM_LOAD32_BYTE( "ap-09c.21", 0x000001, 0x20000, CRC(54d18ef9) SHA1(40ebc6ea49b2a501fe843d60bec8c32d07f2d25d) )
ROM_LOAD32_BYTE( "ap-12c.57", 0x000002, 0x20000, CRC(f95cf5cf) SHA1(ce373c648cbf3e4863bbc3a1175efe065c75eb13) )
@ -1121,7 +1133,7 @@ ROM_START( apache3 )
ROM_LOAD32_BYTE( "ap-14c.70", 0x080002, 0x20000, CRC(58f7fe16) SHA1(a5b87b42b85808c226df0d2a7b7cdde12d474a41) )
ROM_LOAD32_BYTE( "ap-15c.74", 0x080003, 0x20000, CRC(1ffd5496) SHA1(25efb568957fc9441a40a7d64cc6afe1a14b392b) )
ROM_REGION( 0x18000, "gfx4", 0 )
ROM_REGION( 0x18000, "text", 0 )
ROM_LOAD( "ap-18d.73", 0x000000, 0x8000, CRC(55e664bf) SHA1(505bec8b5ff3f9fa2c5fb1213d54683347905be1) )
ROM_LOAD( "ap-17d.68", 0x008000, 0x8000, CRC(6199afe4) SHA1(ad8c0ed6c33d984bb29c89f2e7fc7e5a923cefe3) )
ROM_LOAD( "ap-16d.63", 0x010000, 0x8000, CRC(f115656d) SHA1(61798858dc0172192d89e666696b2c7642756899) )
@ -1150,10 +1162,10 @@ ROM_START( apache3a )
ROM_REGION( 0x100000, "audiocpu", 0 ) /* 64k code for sound V20 */
ROM_LOAD( "ap-27d.151", 0x0f0000, 0x10000, CRC(294b4d79) SHA1(2b03418a12a2aaf3919b98161d8d0ce6ae29a2bb) )
ROM_REGION( 0x200000, "gfx1", ROMREGION_ERASE00 )
ROM_REGION( 0x200000, "sprites", ROMREGION_ERASE00 )
/* Filled in by both regions below */
ROM_REGION( 0x100000, "gfx2", 0)
ROM_REGION( 0x100000, "sprites_l", 0)
ROM_LOAD32_BYTE( "ap-00c.15", 0x000000, 0x20000, CRC(ad1ddc2b) SHA1(81f64663c4892ab5fb0e2dc99513dbfee73f15b8) )
ROM_LOAD32_BYTE( "ap-01c.22", 0x000001, 0x20000, CRC(6286ff00) SHA1(920da4a3a441dbf54ad86c0f4fb6f47a867e9cda) )
ROM_LOAD32_BYTE( "ap-04c.58", 0x000002, 0x20000, CRC(dc6d55e4) SHA1(9f48f8d6aa1a329a71913139a8d5a50d95a9b9e5) )
@ -1163,7 +1175,7 @@ ROM_START( apache3a )
ROM_LOAD32_BYTE( "ap-06c.71", 0x080002, 0x20000, CRC(0ea90e55) SHA1(b16d6b8be4853797507d3e5c933a9dd1d451308e) )
ROM_LOAD32_BYTE( "ap-07c.75", 0x080003, 0x20000, CRC(ba685543) SHA1(140a2b708d4e4de4d207fc2c4a96a5cab8639988) )
ROM_REGION( 0x100000, "gfx3", 0)
ROM_REGION( 0x100000, "sprites_h", 0)
ROM_LOAD32_BYTE( "ap-08c.14", 0x000000, 0x20000, CRC(6437b580) SHA1(2b2ba42add18bbec04fbcf53645a8d44b972e26a) )
ROM_LOAD32_BYTE( "ap-09c.21", 0x000001, 0x20000, CRC(54d18ef9) SHA1(40ebc6ea49b2a501fe843d60bec8c32d07f2d25d) )
ROM_LOAD32_BYTE( "ap-12c.57", 0x000002, 0x20000, CRC(f95cf5cf) SHA1(ce373c648cbf3e4863bbc3a1175efe065c75eb13) )
@ -1173,7 +1185,7 @@ ROM_START( apache3a )
ROM_LOAD32_BYTE( "ap-14c.70", 0x080002, 0x20000, CRC(58f7fe16) SHA1(a5b87b42b85808c226df0d2a7b7cdde12d474a41) )
ROM_LOAD32_BYTE( "ap-15c.74", 0x080003, 0x20000, CRC(1ffd5496) SHA1(25efb568957fc9441a40a7d64cc6afe1a14b392b) )
ROM_REGION( 0x18000, "gfx4", 0 )
ROM_REGION( 0x18000, "text", 0 )
ROM_LOAD( "ap-18e.73", 0x000000, 0x10000, CRC(d7861a26) SHA1(b1a1e089a293a5536d342c9edafbea303f4f128c) )
ROM_LOAD( "ap-16e.63", 0x008000, 0x10000, CRC(d3251965) SHA1(aef4f58a6f773060434abda9d7f5f003693577bf) )
ROM_LOAD( "ap-17e.68", 0x008000, 0x08000, CRC(4509c2ed) SHA1(97a6a6710e83aca212ce43d06c3f26c35f9782b8) )
@ -1202,10 +1214,10 @@ ROM_START( roundup5 )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k code for sound Z80 */
ROM_LOAD( "ru-28d", 0x000000, 0x10000, CRC(df36c6c5) SHA1(c046482043f6b54c55696ba3d339ffb11d78f674) )
ROM_REGION( 0x180000, "gfx1", ROMREGION_ERASE00 )
ROM_REGION( 0x180000, "sprites", ROMREGION_ERASE00 )
/* Filled in by both regions below */
ROM_REGION( 0x0c0000, "gfx2", 0)
ROM_REGION( 0x0c0000, "sprites_l", 0)
ROM_LOAD32_BYTE( "ru-00b", 0x000000, 0x20000, CRC(388a0647) SHA1(e4ab43832872f44c0fe1aaede4372cc00ca7d32b) )
ROM_LOAD32_BYTE( "ru-02b", 0x000001, 0x20000, CRC(eff33945) SHA1(3f4c3aaa11ccf945c2f898dfdf815705d8539e21) )
ROM_LOAD32_BYTE( "ru-04b", 0x000002, 0x20000, CRC(40fda247) SHA1(f5fbc07fda024baedf35ac209210e94df9f15065) )
@ -1215,7 +1227,7 @@ ROM_START( roundup5 )
ROM_LOAD32_BYTE( "ru-05b", 0x080002, 0x10000, CRC(23dd10e1) SHA1(f30ff1a8c7ed9bc567b901cbdd202028fffb9f80) )
ROM_LOAD32_BYTE( "ru-07b", 0x080003, 0x10000, CRC(bb40f46e) SHA1(da694e16d19f60a0dee47551f00f3e50b2d5dcaf) )
ROM_REGION( 0x0c0000, "gfx3", 0)
ROM_REGION( 0x0c0000, "sprites_h", 0)
ROM_LOAD32_BYTE( "ru-08b", 0x000000, 0x20000, CRC(01729e3c) SHA1(1445287fde0b993d053aab73efafc902a6b7e2cc) )
ROM_LOAD32_BYTE( "ru-10b", 0x000001, 0x20000, CRC(cd2357a7) SHA1(313460a74244325ce2c659816f2b738f3dc5358a) )
ROM_LOAD32_BYTE( "ru-12b", 0x000002, 0x20000, CRC(ca63b1f8) SHA1(a50ef8259745dc166eb0a1b2c812ff620818a755) )
@ -1246,10 +1258,10 @@ ROM_START( cyclwarr )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k code for sound Z80 */
ROM_LOAD( "cw26a", 0x000000, 0x10000, CRC(f7a70e3a) SHA1(5581633bf1f15d7f5c1e03de897d65d60f9f1e33) )
ROM_REGION( 0x200000, "gfx1", ROMREGION_ERASE00 )
ROM_REGION( 0x200000, "sprites", ROMREGION_ERASE00 )
/* Filled in by both regions below */
ROM_REGION( 0x100000, "gfx2", 0)
ROM_REGION( 0x100000, "sprites_l", 0)
ROM_LOAD32_BYTE( "cw00a", 0x000000, 0x20000, CRC(058a77f1) SHA1(93f99fcf6ce6714d76af6f6e930115516f0379d3) )
ROM_LOAD32_BYTE( "cw08a", 0x000001, 0x20000, CRC(f53993e7) SHA1(ef2d502ab180d2bc0bdb698c2878fdee9a2c33a8) )
ROM_LOAD32_BYTE( "cw02a", 0x000002, 0x20000, CRC(4dadf3cb) SHA1(e42c56e295a443cb605d48eba23a16fab3c86525) )
@ -1259,7 +1271,7 @@ ROM_START( cyclwarr )
ROM_LOAD32_BYTE( "cw03a", 0x080002, 0x20000, CRC(3ca6f98e) SHA1(8526fe38d3b4c66e09049ba18651a9e7255d85d6) )
ROM_LOAD32_BYTE( "cw11a", 0x080003, 0x20000, CRC(5d760392) SHA1(7bbda2880af4659c267193ce10ed887a1b54a981) )
ROM_REGION( 0x100000, "gfx3", 0)
ROM_REGION( 0x100000, "sprites_h", 0)
ROM_LOAD32_BYTE( "cw04a", 0x000000, 0x20000, CRC(f05f594d) SHA1(80effaa517b2154c013419e0bc05fd0797b74c8d) )
ROM_LOAD32_BYTE( "cw12a", 0x000001, 0x20000, CRC(4ac07e8b) SHA1(f9de96fba39d5752d61b8f6be87fb605694624ed) )
ROM_LOAD32_BYTE( "cw06a", 0x000002, 0x20000, CRC(f628edc9) SHA1(473f7ec28000e6bf72782c1c3f4afb5e021bd430) )
@ -1269,10 +1281,10 @@ ROM_START( cyclwarr )
ROM_LOAD32_BYTE( "cw07a", 0x080002, 0x20000, CRC(314579b5) SHA1(3c10ec490f7821a5b5412295232bbb104d0e4b83) )
ROM_LOAD32_BYTE( "cw15a", 0x080003, 0x20000, CRC(7ed4b721) SHA1(b87865effeff77a9ea74354ef2b5911a5102a647) )
ROM_REGION( 0x20000, "gfx4", 0 )
ROM_REGION( 0x20000, "cw_tileclut", 0 )
ROM_LOAD( "cw27", 0x000000, 0x20000, CRC(2db48a9e) SHA1(16c307340d17cd3b5455ebcee681fbe0335dec58) )
ROM_REGION( 0x60000, "gfx5", 0 )
ROM_REGION( 0x60000, "tilerom", 0 )
ROM_LOAD( "cw30", 0x000000, 0x20000, CRC(331d0711) SHA1(82251fe1f1d36f079080943ab1fd04a60077c353) )
ROM_LOAD( "cw29", 0x020000, 0x20000, CRC(64dd519c) SHA1(e23611fc2be896861997063546c3eb03527eaf8e) )
ROM_LOAD( "cw28", 0x040000, 0x20000, CRC(3fc568ed) SHA1(91125c9deddc659449ca6791a847fe908c2818b2) )
@ -1298,10 +1310,10 @@ ROM_START( cyclwarra )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k code for sound Z80 */
ROM_LOAD( "cw26a", 0x000000, 0x10000, CRC(f7a70e3a) SHA1(5581633bf1f15d7f5c1e03de897d65d60f9f1e33) )
ROM_REGION( 0x200000, "gfx1", ROMREGION_ERASE00 )
ROM_REGION( 0x200000, "sprites", ROMREGION_ERASE00 )
/* Filled in by both regions below */
ROM_REGION( 0x100000, "gfx2", 0)
ROM_REGION( 0x100000, "sprites_l", 0)
ROM_LOAD32_BYTE( "cw00a", 0x000000, 0x20000, CRC(058a77f1) SHA1(93f99fcf6ce6714d76af6f6e930115516f0379d3) )
ROM_LOAD32_BYTE( "cw08a", 0x000001, 0x20000, CRC(f53993e7) SHA1(ef2d502ab180d2bc0bdb698c2878fdee9a2c33a8) )
ROM_LOAD32_BYTE( "cw02a", 0x000002, 0x20000, CRC(4dadf3cb) SHA1(e42c56e295a443cb605d48eba23a16fab3c86525) )
@ -1311,7 +1323,7 @@ ROM_START( cyclwarra )
ROM_LOAD32_BYTE( "cw03a", 0x080002, 0x20000, CRC(3ca6f98e) SHA1(8526fe38d3b4c66e09049ba18651a9e7255d85d6) )
ROM_LOAD32_BYTE( "cw11a", 0x080003, 0x20000, CRC(5d760392) SHA1(7bbda2880af4659c267193ce10ed887a1b54a981) )
ROM_REGION( 0x100000, "gfx3", 0)
ROM_REGION( 0x100000, "sprites_h", 0)
ROM_LOAD32_BYTE( "cw04a", 0x000000, 0x20000, CRC(f05f594d) SHA1(80effaa517b2154c013419e0bc05fd0797b74c8d) )
ROM_LOAD32_BYTE( "cw12a", 0x000001, 0x20000, CRC(4ac07e8b) SHA1(f9de96fba39d5752d61b8f6be87fb605694624ed) )
ROM_LOAD32_BYTE( "cw06a", 0x000002, 0x20000, CRC(f628edc9) SHA1(473f7ec28000e6bf72782c1c3f4afb5e021bd430) )
@ -1321,10 +1333,10 @@ ROM_START( cyclwarra )
ROM_LOAD32_BYTE( "cw07a", 0x080002, 0x20000, CRC(314579b5) SHA1(3c10ec490f7821a5b5412295232bbb104d0e4b83) )
ROM_LOAD32_BYTE( "cw15a", 0x080003, 0x20000, CRC(7ed4b721) SHA1(b87865effeff77a9ea74354ef2b5911a5102a647) )
ROM_REGION( 0x20000, "gfx4", 0 )
ROM_REGION( 0x20000, "cw_tileclut", 0 )
ROM_LOAD( "cw27", 0x000000, 0x20000, CRC(2db48a9e) SHA1(16c307340d17cd3b5455ebcee681fbe0335dec58) )
ROM_REGION( 0x60000, "gfx5", 0 )
ROM_REGION( 0x60000, "tilerom", 0 )
ROM_LOAD( "cw30", 0x000000, 0x20000, CRC(331d0711) SHA1(82251fe1f1d36f079080943ab1fd04a60077c353) )
ROM_LOAD( "cw29", 0x020000, 0x20000, CRC(64dd519c) SHA1(e23611fc2be896861997063546c3eb03527eaf8e) )
ROM_LOAD( "cw28", 0x040000, 0x20000, CRC(3fc568ed) SHA1(91125c9deddc659449ca6791a847fe908c2818b2) )
@ -1346,25 +1358,25 @@ ROM_START( bigfight )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k code for sound Z80 */
ROM_LOAD( "rom20.ic91", 0x000000, 0x10000, CRC(b3add091) SHA1(8a67bfff75c13fe4d9b89d30449199200d11cea7) )
ROM_REGION( 0x400000, "gfx1", ROMREGION_ERASE00 )
ROM_REGION( 0x400000, "sprites", ROMREGION_ERASE00 )
/* Filled in by both regions below */
ROM_REGION( 0x200000, "gfx2", 0 )
ROM_REGION( 0x200000, "sprites_l", 0 )
ROM_LOAD32_BYTE( "rom0.ic26", 0x000000, 0x80000, CRC(a4a3c8d6) SHA1(b5365d9bc6068260c23ba9d5971c7c7d7cc07a97) )
ROM_LOAD32_BYTE( "rom8.ic45", 0x000001, 0x80000, CRC(220956ed) SHA1(68e0ba1e850101b4cc2778819dfa76f04d88d2d6) )
ROM_LOAD32_BYTE( "rom2.ic28", 0x000002, 0x80000, CRC(c4f6d243) SHA1(e23b241b5a40b332165a34e2f1bc4366973b2070) )
ROM_LOAD32_BYTE( "rom10.ic47", 0x000003, 0x80000, CRC(0212d472) SHA1(5549461195fd7b6b43c0174462d7fe1a1bac24e9) )
ROM_REGION( 0x200000, "gfx3", 0 )
ROM_REGION( 0x200000, "sprites_h", 0 )
ROM_LOAD32_BYTE( "rom4.ic30", 0x000000, 0x80000, CRC(999ff7e9) SHA1(a53b06ad084722d7a52fcf01c52967f68620e609) )
ROM_LOAD32_BYTE( "rom12.ic49", 0x000001, 0x80000, CRC(cb4c1f0b) SHA1(32d64b78ed3d5971eb5d25be2c38e6f2c9048f74) )
ROM_LOAD32_BYTE( "rom6.ic32", 0x000002, 0x80000, CRC(f70e2d47) SHA1(00517b5f3b2deb6f3f3bd12df421e63884c22b2e) )
ROM_LOAD32_BYTE( "rom14.ic51", 0x000003, 0x80000, CRC(77430bc9) SHA1(0b1fd54ace84a9fb5b44d5600de8089a20bcbd47) )
ROM_REGION( 0x20000, "gfx4", 0 )
ROM_REGION( 0x20000, "cw_tileclut", 0 )
ROM_LOAD( "rom21.ic128", 0x000000, 0x20000, CRC(da027dcf) SHA1(47d18a8a273fea72cb3ad3d58166fe38ca28a860) )
ROM_REGION( 0x60000, "gfx5", 0 )
ROM_REGION( 0x60000, "tilerom", 0 )
ROM_LOAD( "rom24.ic73", 0x000000, 0x20000, CRC(c564185d) SHA1(e9b5fc10a5a5014735852c22db2a054d5787d8cb) )
ROM_LOAD( "rom23.ic72", 0x020000, 0x20000, CRC(f8bb340b) SHA1(905a1ec778d6ed5c6f53d9d08cd105eed7e307ca) )
ROM_LOAD( "rom22.ic71", 0x040000, 0x20000, CRC(fb505074) SHA1(b6d9b20be7c3e971e5a4392736f087e807b9c850) )
@ -1377,9 +1389,9 @@ ROM_END
void apache3_state::init_apache3()
{
uint8_t *dst = memregion("gfx1")->base();
uint8_t *src1 = memregion("gfx2")->base();
uint8_t *src2 = memregion("gfx3")->base();
uint8_t *dst = memregion("sprites")->base();
uint8_t *src1 = memregion("sprites_l")->base();
uint8_t *src2 = memregion("sprites_h")->base();
for (int i = 0; i < 0x100000; i += 32)
{
@ -1392,10 +1404,10 @@ void apache3_state::init_apache3()
}
// Copy sprite & palette data out of GFX rom area
m_rom_sprite_lookup1 = memregion("gfx2")->base();
m_rom_sprite_lookup2 = memregion("gfx3")->base();
m_rom_clut0 = memregion("gfx2")->base()+ 0x100000 - 0x800;
m_rom_clut1 = memregion("gfx3")->base()+ 0x100000 - 0x800;
m_rom_sprite_lookup[0] = memregion("sprites_l")->base();
m_rom_sprite_lookup[1] = memregion("sprites_h")->base();
m_rom_clut[0] = memregion("sprites_l")->base()+ 0x100000 - 0x800;
m_rom_clut[1] = memregion("sprites_h")->base()+ 0x100000 - 0x800;
tatsumi_reset();
@ -1409,9 +1421,9 @@ void apache3_state::init_apache3()
void roundup5_state::init_roundup5()
{
uint8_t *dst = memregion("gfx1")->base();
uint8_t *src1 = memregion("gfx2")->base();
uint8_t *src2 = memregion("gfx3")->base();
uint8_t *dst = memregion("sprites")->base();
uint8_t *src1 = memregion("sprites_l")->base();
uint8_t *src2 = memregion("sprites_h")->base();
for (int i = 0; i < 0xc0000; i += 32)
{
@ -1424,21 +1436,21 @@ void roundup5_state::init_roundup5()
}
// Copy sprite & palette data out of GFX rom area
m_rom_sprite_lookup1 = memregion("gfx2")->base();
m_rom_sprite_lookup2 = memregion("gfx3")->base();
m_rom_clut0 = memregion("gfx2")->base()+ 0xc0000 - 0x800;
m_rom_clut1 = memregion("gfx3")->base()+ 0xc0000 - 0x800;
m_rom_sprite_lookup[0] = memregion("sprites_l")->base();
m_rom_sprite_lookup[1] = memregion("sprites_h")->base();
m_rom_clut[0] = memregion("sprites_l")->base()+ 0xc0000 - 0x800;
m_rom_clut[1] = memregion("sprites_h")->base()+ 0xc0000 - 0x800;
tatsumi_reset();
}
void cyclwarr_state::init_cyclwarr()
{
uint8_t *dst = memregion("gfx1")->base();
uint8_t *src1 = memregion("gfx2")->base();
int len1 = memregion("gfx2")->bytes();
uint8_t *src2 = memregion("gfx3")->base();
int len2 = memregion("gfx3")->bytes();
uint8_t *dst = memregion("sprites")->base();
uint8_t *src1 = memregion("sprites_l")->base();
int len1 = memregion("sprites_l")->bytes();
uint8_t *src2 = memregion("sprites_h")->base();
int len2 = memregion("sprites_h")->bytes();
for (int i = 0; i < len1; i += 32)
{
@ -1450,19 +1462,19 @@ void cyclwarr_state::init_cyclwarr()
src2+=32;
}
dst = memregion("maincpu")->base();
dst = m_mainregion->base();
memcpy(m_cyclwarr_cpua_ram,dst,8);
membank("bank1")->set_base(dst);
dst = memregion("sub")->base();
dst = m_subregion->base();
memcpy(m_cyclwarr_cpub_ram,dst,8);
membank("bank2")->set_base(dst);
// Copy sprite & palette data out of GFX rom area
m_rom_sprite_lookup1 = memregion("gfx2")->base();
m_rom_sprite_lookup2 = memregion("gfx3")->base();
m_rom_clut0 = memregion("gfx2")->base() + len1 - 0x1000;
m_rom_clut1 = memregion("gfx3")->base() + len2 - 0x1000;
m_rom_sprite_lookup[0] = memregion("sprites_l")->base();
m_rom_sprite_lookup[1] = memregion("sprites_h")->base();
m_rom_clut[0] = memregion("sprites_l")->base() + len1 - 0x1000;
m_rom_clut[1] = memregion("sprites_h")->base() + len2 - 0x1000;
tatsumi_reset();
}

View File

@ -2,6 +2,7 @@
// copyright-holders:Bryan McPhail
#include "sound/okim6295.h"
#include "sound/ym2151.h"
#include "cpu/m68000/m68000.h"
#include "machine/cxd1095.h"
#include "machine/gen_latch.h"
@ -10,21 +11,26 @@ class tatsumi_state : public driver_device
{
public:
tatsumi_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_subcpu(*this, "sub"),
m_oki(*this, "oki"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_videoram(*this, "videoram"),
m_68k_ram(*this, "68k_ram"),
m_sprite_control_ram(*this, "sprite_ctlram"),
m_spriteram(*this, "spriteram") { }
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_subcpu(*this, "sub")
, m_ym2151(*this, "ymsnd")
, m_oki(*this, "oki")
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "palette")
, m_videoram(*this, "videoram")
, m_68k_ram(*this, "68k_ram")
, m_sprite_control_ram(*this, "sprite_ctlram")
, m_spriteram(*this, "spriteram")
, m_mainregion(*this, "maincpu")
, m_subregion(*this, "sub")
{ }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<m68000_base_device> m_subcpu;
optional_device<ym2151_device> m_ym2151;
required_device<okim6295_device> m_oki;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
@ -33,11 +39,11 @@ public:
optional_shared_ptr<uint16_t> m_68k_ram;
required_shared_ptr<uint16_t> m_sprite_control_ram;
required_shared_ptr<uint16_t> m_spriteram;
required_memory_region m_mainregion;
required_memory_region m_subregion;
uint8_t *m_rom_sprite_lookup1;
uint8_t *m_rom_sprite_lookup2;
uint8_t *m_rom_clut0;
uint8_t *m_rom_clut1;
uint8_t *m_rom_sprite_lookup[2];
uint8_t *m_rom_clut[2];
uint16_t m_control_word;
uint8_t m_last_control;
tilemap_t *m_tx_layer;
@ -53,6 +59,9 @@ public:
DECLARE_READ8_MEMBER(tatsumi_hack_oki_r);
void tatsumi_reset();
template<class _BitmapClass> void draw_sprites(_BitmapClass &bitmap, const rectangle &cliprect, int write_priority_only, int rambank);
template<class _BitmapClass> inline void roundupt_drawgfxzoomrotate( _BitmapClass &dest_bmp, const rectangle &clip,
gfx_element *gfx, uint32_t code,uint32_t color,int flipx,int flipy,uint32_t ssx,uint32_t ssy,
int scalex, int scaley, int rotate, int write_priority_only );
void update_cluts(int fake_palette_offset, int object_base, int length);
};
@ -60,11 +69,12 @@ class apache3_state : public tatsumi_state
{
public:
apache3_state(const machine_config &mconfig, device_type type, const char *tag)
: tatsumi_state(mconfig, type, tag),
m_subcpu2(*this, "sub2"),
m_apache3_g_ram(*this, "apache3_g_ram"),
m_apache3_z80_ram(*this, "apache3_z80_ram"),
m_vr1(*this, "VR1")
: tatsumi_state(mconfig, type, tag)
, m_subcpu2(*this, "sub2")
, m_apache3_g_ram(*this, "apache3_g_ram")
, m_apache3_z80_ram(*this, "apache3_z80_ram")
, m_apache3_prom(*this, "proms")
, m_vr1(*this, "VR1")
{
}
@ -99,6 +109,7 @@ private:
required_shared_ptr<uint16_t> m_apache3_g_ram;
required_shared_ptr<uint8_t> m_apache3_z80_ram;
required_region_ptr<uint8_t> m_apache3_prom;
required_ioport m_vr1;
@ -112,15 +123,15 @@ class roundup5_state : public tatsumi_state
{
public:
roundup5_state(const machine_config &mconfig, device_type type, const char *tag)
: tatsumi_state(mconfig, type, tag),
m_roundup5_d0000_ram(*this, "ru5_d0000_ram"),
m_roundup5_e0000_ram(*this, "ru5_e0000_ram"),
m_roundup5_unknown0(*this, "ru5_unknown0"),
m_roundup5_unknown1(*this, "ru5_unknown1"),
m_roundup5_unknown2(*this, "ru5_unknown2"),
m_roundup_r_ram(*this, "roundup_r_ram"),
m_roundup_p_ram(*this, "roundup_p_ram"),
m_roundup_l_ram(*this, "roundup_l_ram")
: tatsumi_state(mconfig, type, tag)
, m_roundup5_d0000_ram(*this, "ru5_d0000_ram")
, m_roundup5_e0000_ram(*this, "ru5_e0000_ram")
, m_roundup5_unknown0(*this, "ru5_unknown0")
, m_roundup5_unknown1(*this, "ru5_unknown1")
, m_roundup5_unknown2(*this, "ru5_unknown2")
, m_roundup_r_ram(*this, "roundup_r_ram")
, m_roundup_p_ram(*this, "roundup_p_ram")
, m_roundup_l_ram(*this, "roundup_l_ram")
{
}
@ -162,12 +173,12 @@ class cyclwarr_state : public tatsumi_state
{
public:
cyclwarr_state(const machine_config &mconfig, device_type type, const char *tag)
: tatsumi_state(mconfig, type, tag),
m_soundlatch(*this, "soundlatch"),
m_cyclwarr_cpua_ram(*this, "cw_cpua_ram"),
m_cyclwarr_cpub_ram(*this, "cw_cpub_ram"),
m_cyclwarr_videoram0(*this, "cw_videoram0"),
m_cyclwarr_videoram1(*this, "cw_videoram1")
: tatsumi_state(mconfig, type, tag)
, m_soundlatch(*this, "soundlatch")
, m_cyclwarr_cpua_ram(*this, "cw_cpua_ram")
, m_cyclwarr_cpub_ram(*this, "cw_cpub_ram")
, m_cyclwarr_videoram(*this, "cw_videoram%u", 0U)
, m_cyclwarr_tileclut(*this, "cw_tileclut")
{
}
@ -176,16 +187,12 @@ public:
DECLARE_WRITE16_MEMBER(bigfight_a20000_w);
DECLARE_WRITE16_MEMBER(bigfight_a40000_w);
DECLARE_WRITE16_MEMBER(bigfight_a60000_w);
DECLARE_WRITE16_MEMBER(cyclwarr_sound_w);
DECLARE_WRITE8_MEMBER(cyclwarr_control_w);
DECLARE_READ16_MEMBER(cyclwarr_videoram0_r);
DECLARE_READ16_MEMBER(cyclwarr_videoram1_r);
DECLARE_WRITE16_MEMBER(cyclwarr_videoram0_w);
DECLARE_WRITE16_MEMBER(cyclwarr_videoram1_w);
template<int Bank> DECLARE_READ16_MEMBER(cyclwarr_videoram_r);
template<int Bank> DECLARE_WRITE16_MEMBER(cyclwarr_videoram_w);
void init_cyclwarr();
TILE_GET_INFO_MEMBER(get_tile_info_bigfight_0);
TILE_GET_INFO_MEMBER(get_tile_info_bigfight_1);
template<int Bank> TILE_GET_INFO_MEMBER(get_tile_info_bigfight);
DECLARE_VIDEO_START(cyclwarr);
DECLARE_VIDEO_START(bigfight);
uint32_t screen_update_cyclwarr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@ -203,13 +210,11 @@ private:
required_shared_ptr<uint16_t> m_cyclwarr_cpua_ram;
required_shared_ptr<uint16_t> m_cyclwarr_cpub_ram;
required_shared_ptr<uint16_t> m_cyclwarr_videoram0;
required_shared_ptr<uint16_t> m_cyclwarr_videoram1;
tilemap_t *m_layer0;
tilemap_t *m_layer1;
tilemap_t *m_layer2;
tilemap_t *m_layer3;
required_shared_ptr_array<uint16_t, 2> m_cyclwarr_videoram;
required_region_ptr<uint8_t> m_cyclwarr_tileclut;
std::vector<uint8_t> m_mask;
tilemap_t *m_layer[4];
uint16_t m_bigfight_a20000[8];
uint16_t m_bigfight_a60000[2];
@ -217,5 +222,6 @@ private:
uint16_t m_bigfight_bank;
uint16_t m_bigfight_last_bank;
void draw_bg(bitmap_rgb32 &dst, tilemap_t *src, const uint16_t* scrollx, const uint16_t* scrolly, const uint16_t* tilemap_ram, int tile_bank, int xscroll_offset, int yscroll_offset, int xsize, int ysize);
void tile_expand();
void draw_bg(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, tilemap_t *src, const uint16_t* scrollx, const uint16_t* scrolly, int xscroll_offset, int yscroll_offset);
};

View File

@ -2,7 +2,6 @@
// copyright-holders:Bryan McPhail
#include "emu.h"
#include "includes/tatsumi.h"
#include "sound/ym2151.h"
#include "sound/okim6295.h"
@ -260,7 +259,7 @@ WRITE8_MEMBER(cyclwarr_state::cyclwarr_control_w)
READ16_MEMBER(tatsumi_state::tatsumi_v30_68000_r)
{
const uint16_t* rom=(uint16_t*)memregion("sub")->base();
const uint16_t* rom=(uint16_t*)m_subregion->base();
//logerror("%s:68000_r(%04X),cw=%04X\n", m_maincpu->pc(), offset*2, m_control_word);
/* Read from 68k RAM */
@ -269,7 +268,7 @@ READ16_MEMBER(tatsumi_state::tatsumi_v30_68000_r)
// hack to make roundup 5 boot
if (m_maincpu->pc()==0xec575)
{
uint8_t *dst = memregion("maincpu")->base();
uint8_t *dst = m_mainregion->base();
dst[BYTE_XOR_LE(0xec57a)]=0x46;
dst[BYTE_XOR_LE(0xec57b)]=0x46;
@ -304,7 +303,7 @@ WRITE16_MEMBER(tatsumi_state::tatsumi_v30_68000_w)
// self-test in Tatsumi games. Needs fixed, but hack it here for now.
READ8_MEMBER(tatsumi_state::tatsumi_hack_ym2151_r)
{
int r=machine().device<ym2151_device>("ymsnd")->status_r(space,0);
int r=m_ym2151->status_r(space,0);
if (m_audiocpu->pc()==0x2aca || m_audiocpu->pc()==0x29fe
|| m_audiocpu->pc()==0xf9721

View File

@ -56,36 +56,6 @@ WRITE16_MEMBER(tatsumi_state::text_w)
m_tx_layer->mark_tile_dirty(offset);
}
READ16_MEMBER(cyclwarr_state::cyclwarr_videoram0_r)
{
return m_cyclwarr_videoram0[offset];
}
READ16_MEMBER(cyclwarr_state::cyclwarr_videoram1_r)
{
return m_cyclwarr_videoram1[offset];
}
WRITE16_MEMBER(cyclwarr_state::cyclwarr_videoram0_w)
{
COMBINE_DATA(&m_cyclwarr_videoram0[offset]);
if (offset>=0x400)
{
m_layer0->mark_tile_dirty(offset-0x400);
m_layer1->mark_tile_dirty(offset-0x400);
}
}
WRITE16_MEMBER(cyclwarr_state::cyclwarr_videoram1_w)
{
COMBINE_DATA(&m_cyclwarr_videoram1[offset]);
if (offset>=0x400)
{
m_layer2->mark_tile_dirty(offset-0x400);
m_layer3->mark_tile_dirty(offset-0x400);
}
}
WRITE16_MEMBER(roundup5_state::roundup5_crt_w)
{
if (offset==0 && ACCESSING_BITS_0_7)
@ -101,26 +71,62 @@ WRITE16_MEMBER(roundup5_state::roundup5_crt_w)
TILE_GET_INFO_MEMBER(tatsumi_state::get_text_tile_info)
{
uint16_t *videoram = m_videoram;
int tile = videoram[tile_index];
int tile = m_videoram[tile_index];
SET_TILE_INFO_MEMBER(1,
tile & 0xfff,
tile >> 12,
0);
}
TILE_GET_INFO_MEMBER(cyclwarr_state::get_tile_info_bigfight_0)
template<int Bank>
TILE_GET_INFO_MEMBER(cyclwarr_state::get_tile_info_bigfight)
{
int tile=m_cyclwarr_videoram0[(tile_index+0x400)%0x8000];
int tile=m_cyclwarr_videoram[Bank][(tile_index+0x400)&0x7fff];
int bank = (m_bigfight_a40000[0] >> (((tile&0xc00)>>10)*4))&0xf;
SET_TILE_INFO_MEMBER(1,(tile&0x3ff)+(bank<<10),(tile>>12)&0xf,0);
SET_TILE_INFO_MEMBER(1,(tile&0x3ff)|(bank<<10),(tile>>12)&0xf,0);
tileinfo.mask_data = &m_mask[((tile&0x3ff)|(bank<<10))<<3];
}
TILE_GET_INFO_MEMBER(cyclwarr_state::get_tile_info_bigfight_1)
/********************************************************************/
void cyclwarr_state::tile_expand()
{
int tile=m_cyclwarr_videoram1[(tile_index+0x400)%0x8000];
int bank = (m_bigfight_a40000[0] >> (((tile&0xc00)>>10)*4))&0xf;
SET_TILE_INFO_MEMBER(1,(tile&0x3ff)+(bank<<10),(tile>>12)&0xf,0);
/*
Each tile (0x4000 of them) has a lookup table in ROM to build an individual 3-bit palette
from sets of 8 bit palettes!
*/
gfx_element *gx0 = m_gfxdecode->gfx(1);
m_mask.resize(gx0->elements() << 3,0);
uint8_t *srcdata, *dest;
// allocate memory for the assembled data
srcdata = auto_alloc_array(machine(), uint8_t, gx0->elements() * gx0->width() * gx0->height());
// loop over elements
dest = srcdata;
for (int c = 0; c < gx0->elements(); c++)
{
const uint8_t *c0base = gx0->get_data(c);
// loop over height
for (int y = 0; y < gx0->height(); y++)
{
const uint8_t *c0 = c0base;
for (int x = 0; x < gx0->width(); x++)
{
uint8_t pix = (*c0++ & 7);
uint8_t respix = m_cyclwarr_tileclut[(c << 3)|pix];
*dest++ = respix;
// Transparent pixels are set by both the tile pixel data==0 AND colour palette==0
m_mask[(c << 3) | (y & 7)] |= ((pix != 0) || ((pix == 0) && (respix != 0))) ? (0x80 >> (x & 7)) : 0;
}
c0base += gx0->rowbytes();
}
}
gx0->set_raw_layout(srcdata, gx0->width(), gx0->height(), gx0->elements(), 8 * gx0->width(), 8 * gx0->width() * gx0->height());
gx0->set_granularity(256);
}
/********************************************************************/
@ -148,21 +154,23 @@ VIDEO_START_MEMBER(roundup5_state,roundup5)
VIDEO_START_MEMBER(cyclwarr_state,cyclwarr)
{
m_layer0 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight_0),this),TILEMAP_SCAN_ROWS,8,8,64,512);
//m_layer1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight_0),this),TILEMAP_SCAN_ROWS,8,8,64,512);
m_layer1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight_0),this),TILEMAP_SCAN_ROWS,8,8,128,256);
m_layer2 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight_1),this),TILEMAP_SCAN_ROWS,8,8,64,512);
m_layer3 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight_1),this),TILEMAP_SCAN_ROWS,8,8,64,512);
tile_expand();
m_layer[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<0>),this),TILEMAP_SCAN_ROWS,8,8,64,512);
//m_layer[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<0>),this),TILEMAP_SCAN_ROWS,8,8,64,512);
m_layer[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<0>),this),TILEMAP_SCAN_ROWS,8,8,128,256);
m_layer[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<1>),this),TILEMAP_SCAN_ROWS,8,8,64,512);
m_layer[3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<1>),this),TILEMAP_SCAN_ROWS,8,8,64,512);
m_shadow_pen_array = make_unique_clear<uint8_t[]>(8192);
}
VIDEO_START_MEMBER(cyclwarr_state,bigfight)
{
m_layer0 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight_0),this),TILEMAP_SCAN_ROWS,8,8,128,256);
m_layer1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight_0),this),TILEMAP_SCAN_ROWS,8,8,128,256);
m_layer2 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight_1),this),TILEMAP_SCAN_ROWS,8,8,128,256);
m_layer3 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight_1),this),TILEMAP_SCAN_ROWS,8,8,128,256);
tile_expand();
m_layer[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<0>),this),TILEMAP_SCAN_ROWS,8,8,128,256);
m_layer[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<0>),this),TILEMAP_SCAN_ROWS,8,8,128,256);
m_layer[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<1>),this),TILEMAP_SCAN_ROWS,8,8,128,256);
m_layer[3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<1>),this),TILEMAP_SCAN_ROWS,8,8,128,256);
m_shadow_pen_array = make_unique_clear<uint8_t[]>(8192);
}
@ -170,9 +178,8 @@ VIDEO_START_MEMBER(cyclwarr_state,bigfight)
/********************************************************************/
template<class _BitmapClass>
static inline void roundupt_drawgfxzoomrotate(tatsumi_state *state,
_BitmapClass &dest_bmp, const rectangle &clip, gfx_element *gfx,
uint32_t code,uint32_t color,int flipx,int flipy,uint32_t ssx,uint32_t ssy,
inline void tatsumi_state::roundupt_drawgfxzoomrotate( _BitmapClass &dest_bmp, const rectangle &clip,
gfx_element *gfx, uint32_t code,uint32_t color,int flipx,int flipy,uint32_t ssx,uint32_t ssy,
int scalex, int scaley, int rotate, int write_priority_only )
{
rectangle myclip;
@ -193,8 +200,8 @@ static inline void roundupt_drawgfxzoomrotate(tatsumi_state *state,
{
if( gfx )
{
const pen_t *pal = &state->m_palette->pen(gfx->colorbase() + gfx->granularity() * (color % gfx->colors()));
const uint8_t *shadow_pens = state->m_shadow_pen_array.get() + (gfx->granularity() * (color % gfx->colors()));
const pen_t *pal = &m_palette->pen(gfx->colorbase() + gfx->granularity() * (color % gfx->colors()));
const uint8_t *shadow_pens = m_shadow_pen_array.get() + (gfx->granularity() * (color % gfx->colors()));
const uint8_t *code_base = gfx->get_data(code % gfx->elements());
int block_size = 8 * scalex;
@ -500,8 +507,8 @@ void tatsumi_state::draw_sprites(_BitmapClass &bitmap, const rectangle &cliprect
if (index >= 0x4000)
continue;
src1 = m_rom_sprite_lookup1 + (index * 4);
src2 = m_rom_sprite_lookup2 + (index * 4);
src1 = m_rom_sprite_lookup[0] + (index * 4);
src2 = m_rom_sprite_lookup[1] + (index * 4);
lines = src1[2];
y_offset = src1[0]&0xf8;
@ -558,13 +565,13 @@ void tatsumi_state::draw_sprites(_BitmapClass &bitmap, const rectangle &cliprect
for (w = 0; w < x_width; w++) {
if (rotate)
roundupt_drawgfxzoomrotate(this,
roundupt_drawgfxzoomrotate(
m_temp_bitmap,cliprect,m_gfxdecode->gfx(0),
base,
color,flip_x,flip_y,x_pos,render_y,
scale,scale,0,write_priority_only);
else
roundupt_drawgfxzoomrotate(this,
roundupt_drawgfxzoomrotate(
bitmap,cliprect,m_gfxdecode->gfx(0),
base,
color,flip_x,flip_y,x_pos,render_y,
@ -864,8 +871,8 @@ void tatsumi_state::update_cluts(int fake_palette_offset, int object_base, int l
draw routines. We also note down any uses of the 'shadow' pen (index 255).
*/
int i;
const uint8_t* bank1=m_rom_clut0;
const uint8_t* bank2=m_rom_clut1;
const uint8_t* bank1=m_rom_clut[0];
const uint8_t* bank2=m_rom_clut[1];
for (i=0; i<length; i+=8) {
m_palette->set_pen_color(fake_palette_offset+i+0,m_palette->pen_color(bank1[1]+object_base));
m_shadow_pen_array[i+0]=(bank1[1]==255);
@ -892,38 +899,19 @@ void tatsumi_state::update_cluts(int fake_palette_offset, int object_base, int l
/**********************************************************************/
void cyclwarr_state::draw_bg(bitmap_rgb32 &dst, tilemap_t *src, const uint16_t* scrollx, const uint16_t* scrolly, const uint16_t* tilemap_ram, int tile_bank, int xscroll_offset, int yscroll_offset, int xsize, int ysize)
void cyclwarr_state::draw_bg(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, tilemap_t *src, const uint16_t* scrollx, const uint16_t* scrolly, int xscroll_offset, int yscroll_offset)
{
/*
Each tile (0x4000 of them) has a lookup table in ROM to build an individual 3-bit palette
from sets of 8 bit palettes!
*/
const uint8_t* tile_cluts = machine().root_device().memregion("gfx4")->base();
const bitmap_ind16 &src_bitmap = src->pixmap();
int src_y_mask=ysize-1;
int src_x_mask=xsize-1;
int tile_y_mask=(ysize/8)-1;
int tile_x_mask=(xsize/8)-1;
int tiles_per_x_line=(xsize/8);
int x, y, p, pp, ppp;
for (y=0; y<240; y++)
rectangle clip;
clip.min_x = cliprect.min_x;
clip.max_x = cliprect.max_x;
for (int y=cliprect.min_y; y<=cliprect.max_y; y++)
{
for (x=0; x<320; x++)
{
int src_x = x + scrollx[y] + xscroll_offset;
int src_y = y + scrolly[y] + yscroll_offset;
int tile_index = (((src_x>>3)&tile_x_mask) + (((src_y>>3)&tile_y_mask) * tiles_per_x_line));
int bank = (tile_bank >> (((tilemap_ram[(tile_index+0x400)&0x7fff]&0xc00)>>10)*4))&0xf;
int tile = (tilemap_ram[(tile_index+0x400)&0x7fff]&0x3ff) | (bank<<10);
p=src_bitmap.pix16(src_y&src_y_mask, src_x&src_x_mask);
pp=tile_cluts[tile*8 + (p&0x7)];
ppp=pp + ((p&0x78)<<5);
if ((p&0x7)!=0 || ((p&0x7)==0 && (pp&0x7)!=0)) // Transparent pixels are set by both the tile pixel data==0 AND colour palette==0
dst.pix32(y, x) = m_palette->pen(ppp);
}
clip.min_y = clip.max_y = y;
int src_x = scrollx[y] + xscroll_offset;
int src_y = scrolly[y] + yscroll_offset;
src->set_scrollx(0,src_x);
src->set_scrolly(0,src_y);
src->draw(screen, bitmap, clip, 0, 0);
}
}
@ -932,7 +920,6 @@ void apache3_state::draw_ground(bitmap_rgb32 &dst, const rectangle &cliprect)
{
if (0) {
int x, y;
const uint8_t *lut = memregion("proms")->base();
uint16_t gva = 0x180; // TODO
uint8_t sky_val = m_apache3_rotate_ctrl[1] & 0xff;
@ -941,7 +928,7 @@ if (0) {
{
uint16_t rgdb = 0;//m_apache3_road_x_ram[gva & 0xff];
uint16_t gha = 0xf60; // test
int ln = (((lut[gva & 0x7f] & 0x7f) + (m_apache3_road_z & 0x7f)) >> 5) & 3;
int ln = (((m_apache3_prom[gva & 0x7f] & 0x7f) + (m_apache3_road_z & 0x7f)) >> 5) & 3;
if (gva & 0x100)
{
@ -1033,21 +1020,21 @@ uint32_t cyclwarr_state::screen_update_cyclwarr(screen_device &screen, bitmap_rg
m_bigfight_bank=m_bigfight_a40000[0];
if (m_bigfight_bank!=m_bigfight_last_bank)
{
m_layer0->mark_all_dirty();
m_layer1->mark_all_dirty();
m_layer2->mark_all_dirty();
m_layer3->mark_all_dirty();
for (int i = 0; i < 4; i++)
{
m_layer[i]->mark_all_dirty();
}
m_bigfight_last_bank=m_bigfight_bank;
}
bitmap.fill(m_palette->pen(0), cliprect);
draw_bg(bitmap, m_layer3, &m_cyclwarr_videoram1[0x000], &m_cyclwarr_videoram1[0x100], m_cyclwarr_videoram1, m_bigfight_a40000[0], 8, -0x80, 512, 4096);
draw_bg(bitmap, m_layer2, &m_cyclwarr_videoram1[0x200], &m_cyclwarr_videoram1[0x300], m_cyclwarr_videoram1, m_bigfight_a40000[0], 8, -0x80, 512, 4096);
draw_bg(bitmap, m_layer1, &m_cyclwarr_videoram0[0x000], &m_cyclwarr_videoram0[0x100], m_cyclwarr_videoram0, m_bigfight_a40000[0], 8, -0x40, 1024, 2048);
draw_bg(screen, bitmap, cliprect, m_layer[3], &m_cyclwarr_videoram[1][0x000], &m_cyclwarr_videoram[1][0x100], 8, -0x80);
draw_bg(screen, bitmap, cliprect, m_layer[2], &m_cyclwarr_videoram[1][0x200], &m_cyclwarr_videoram[1][0x300], 8, -0x80);
draw_bg(screen, bitmap, cliprect, m_layer[1], &m_cyclwarr_videoram[0][0x000], &m_cyclwarr_videoram[0][0x100], 8, -0x40);
update_cluts(8192, 4096, 8192);
draw_sprites(bitmap,cliprect,0,(m_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0);
draw_bg(bitmap, m_layer0, &m_cyclwarr_videoram0[0x200], &m_cyclwarr_videoram0[0x300], m_cyclwarr_videoram0, m_bigfight_a40000[0], 0x10, -0x80, 512, 4096);
draw_bg(screen, bitmap, cliprect, m_layer[0], &m_cyclwarr_videoram[0][0x200], &m_cyclwarr_videoram[0][0x300], 0x10, -0x80);
return 0;
}
@ -1057,20 +1044,20 @@ uint32_t cyclwarr_state::screen_update_bigfight(screen_device &screen, bitmap_rg
m_bigfight_bank=m_bigfight_a40000[0];
if (m_bigfight_bank!=m_bigfight_last_bank)
{
m_layer0->mark_all_dirty();
m_layer1->mark_all_dirty();
m_layer2->mark_all_dirty();
m_layer3->mark_all_dirty();
for (int i = 0; i < 4; i++)
{
m_layer[i]->mark_all_dirty();
}
m_bigfight_last_bank=m_bigfight_bank;
}
bitmap.fill(m_palette->pen(0), cliprect);
draw_bg(bitmap, m_layer3, &m_cyclwarr_videoram1[0x000], &m_cyclwarr_videoram1[0x100], m_cyclwarr_videoram1, m_bigfight_a40000[0], 8, -0x40, 1024, 2048);
draw_bg(bitmap, m_layer2, &m_cyclwarr_videoram1[0x200], &m_cyclwarr_videoram1[0x300], m_cyclwarr_videoram1, m_bigfight_a40000[0], 8, -0x40, 1024, 2048);
draw_bg(bitmap, m_layer1, &m_cyclwarr_videoram0[0x000], &m_cyclwarr_videoram0[0x100], m_cyclwarr_videoram0, m_bigfight_a40000[0], 8, -0x40, 1024, 2048);
draw_bg(screen, bitmap, cliprect, m_layer[3], &m_cyclwarr_videoram[1][0x000], &m_cyclwarr_videoram[1][0x100], 8, -0x40);
draw_bg(screen, bitmap, cliprect, m_layer[2], &m_cyclwarr_videoram[1][0x200], &m_cyclwarr_videoram[1][0x300], 8, -0x40);
draw_bg(screen, bitmap, cliprect, m_layer[1], &m_cyclwarr_videoram[0][0x000], &m_cyclwarr_videoram[0][0x100], 8, -0x40);
update_cluts(8192, 4096, 8192);
draw_sprites(bitmap,cliprect,0,(m_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0);
draw_bg(bitmap, m_layer0, &m_cyclwarr_videoram0[0x200], &m_cyclwarr_videoram0[0x300], m_cyclwarr_videoram0, m_bigfight_a40000[0], 0x10, -0x40, 1024, 2048);
draw_bg(screen, bitmap, cliprect, m_layer[0], &m_cyclwarr_videoram[0][0x200], &m_cyclwarr_videoram[0][0x300], 0x10, -0x40);
return 0;
}