summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/mame/drivers/tatsumi.cpp170
-rw-r--r--src/mame/includes/tatsumi.h106
-rw-r--r--src/mame/machine/tatsumi.cpp7
-rw-r--r--src/mame/video/tatsumi.cpp201
4 files changed, 244 insertions, 240 deletions
diff --git a/src/mame/drivers/tatsumi.cpp b/src/mame/drivers/tatsumi.cpp
index 02829da98e0..63b4d70b4aa 100644
--- a/src/mame/drivers/tatsumi.cpp
+++ b/src/mame/drivers/tatsumi.cpp
@@ -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();
}
diff --git a/src/mame/includes/tatsumi.h b/src/mame/includes/tatsumi.h
index b54172a5e3d..ab536791c21 100644
--- a/src/mame/includes/tatsumi.h
+++ b/src/mame/includes/tatsumi.h
@@ -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);
};
diff --git a/src/mame/machine/tatsumi.cpp b/src/mame/machine/tatsumi.cpp
index 3b4a1dd5835..e861d47a2bb 100644
--- a/src/mame/machine/tatsumi.cpp
+++ b/src/mame/machine/tatsumi.cpp
@@ -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
diff --git a/src/mame/video/tatsumi.cpp b/src/mame/video/tatsumi.cpp
index 1f9724392c0..71154bd763b 100644
--- a/src/mame/video/tatsumi.cpp
+++ b/src/mame/video/tatsumi.cpp
@@ -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;
}