summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cam900 <dbtlrchl@naver.com>2018-06-17 01:44:13 +0900
committer Vas Crabb <cuavas@users.noreply.github.com>2018-06-17 02:44:13 +1000
commita0688e6fbb60a392d6b15e2a2e88a5e10d85e53a (patch)
tree8680c1322aad8cf011fee87be2e7aac1c4758084
parent9c0b2800a211a9a6b2851cb16660a545e9b11b15 (diff)
powerins.cpp : Reduce duplicate, Reduce runtime tag lookups, Correct sprite lags, Add notes, Convert byte swapped gfx into ROM_LOAD16_WORD_SWAP, Convert vblank irq into MCFG_SCREEN_VBLANK_CALLBACK (#3590)
-rw-r--r--src/mame/drivers/powerins.cpp167
-rw-r--r--src/mame/includes/powerins.h25
-rw-r--r--src/mame/video/powerins.cpp97
3 files changed, 131 insertions, 158 deletions
diff --git a/src/mame/drivers/powerins.cpp b/src/mame/drivers/powerins.cpp
index 61cf0f044bb..b2525527c34 100644
--- a/src/mame/drivers/powerins.cpp
+++ b/src/mame/drivers/powerins.cpp
@@ -26,7 +26,8 @@ Note:
TODO:
- sprites flip y (not used by the game)
-
+- graphic system and PCB design is similar as nmk16.cpp games;
+ it's mergeable?
***************************************************************************/
@@ -50,7 +51,7 @@ TODO:
WRITE8_MEMBER(powerins_state::powerinsa_okibank_w)
{
- membank("okibank")->set_entry(data & 7);
+ m_okibank->set_entry(data & 7);
}
READ8_MEMBER(powerins_state::powerinsb_fake_ym2203_r)
@@ -58,6 +59,12 @@ READ8_MEMBER(powerins_state::powerinsb_fake_ym2203_r)
return 0x01;
}
+template<int Layer>
+WRITE16_MEMBER(powerins_state::vram_w)
+{
+ COMBINE_DATA(&m_vram[Layer][offset]);
+ m_tilemap[Layer]->mark_tile_dirty(offset);
+}
void powerins_state::powerins_map(address_map &map)
{
@@ -72,9 +79,8 @@ void powerins_state::powerins_map(address_map &map)
map(0x10001f, 0x10001f).w("soundlatch", FUNC(generic_latch_8_device::write));
map(0x120000, 0x120fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x130000, 0x130007).ram().share("vctrl_0");
- map(0x140000, 0x143fff).ram().w(FUNC(powerins_state::vram_0_w)).share("vram_0");
- map(0x170000, 0x170fff).ram().w(FUNC(powerins_state::vram_1_w)).share("vram_1");
- map(0x171000, 0x171fff).w(FUNC(powerins_state::vram_1_w));
+ map(0x140000, 0x143fff).ram().w(FUNC(powerins_state::vram_w<0>)).share("vram_0");
+ map(0x170000, 0x170fff).mirror(0x1000).ram().w(FUNC(powerins_state::vram_w<1>)).share("vram_1");
map(0x180000, 0x18ffff).ram().share("spriteram");
}
@@ -242,54 +248,33 @@ static const gfx_layout layout_8x8x4 =
8,8,
RGN_FRAC(1,1),
4,
- {0,1,2,3},
- {0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4},
- {0*32,1*32,2*32,3*32,4*32,5*32,6*32,7*32},
+ {STEP4(0,1)},
+ {STEP8(0,4)},
+ {STEP8(0,4*8)},
8*8*4
};
-/* 16x16x4 tiles (made of four 8x8 tiles) */
+/* 16x16x4 tiles (made of two 8x16 tiles) */
static const gfx_layout layout_16x16x4 =
{
16,16,
RGN_FRAC(1,1),
4,
- {0,1,2,3},
- {0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4,
- 128*4,129*4,130*4,131*4,132*4,133*4,134*4,135*4},
- {0*32,1*32,2*32,3*32,4*32,5*32,6*32,7*32,
- 8*32,9*32,10*32,11*32,12*32,13*32,14*32,15*32},
- 16*16*4
-};
-
-
-/* 16x16x4 tiles (made of four 8x8 tiles). The bytes are swapped */
-static const gfx_layout layout_16x16x4_swap =
-{
- 16,16,
- RGN_FRAC(1,1),
- 4,
- {0,1,2,3},
- {2*4,3*4,0*4,1*4,6*4,7*4,4*4,5*4,
- 130*4,131*4,128*4,129*4,134*4,135*4,132*4,133*4},
- {0*32,1*32,2*32,3*32,4*32,5*32,6*32,7*32,
- 8*32,9*32,10*32,11*32,12*32,13*32,14*32,15*32},
+ {STEP4(0,1)},
+ {STEP8(0,4),STEP8(4*8*16,4)},
+ {STEP16(0,4*8)},
16*16*4
};
static GFXDECODE_START( gfx_powerins )
- GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 0x000, 0x20 ) // [0] Tiles
- GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4, 0x200, 0x10 ) // [1] Tiles
- GFXDECODE_ENTRY( "gfx3", 0, layout_16x16x4_swap, 0x400, 0x40 ) // [2] Sprites
+ GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 0x000, 0x20 ) // [0] Tiles
+ GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4, 0x200, 0x10 ) // [1] Tiles
+ GFXDECODE_ENTRY( "gfx3", 0, layout_16x16x4, 0x400, 0x40 ) // [2] Sprites
GFXDECODE_END
-
-
-
-
/***************************************************************************
Machine Drivers
@@ -298,7 +283,7 @@ GFXDECODE_END
MACHINE_START_MEMBER(powerins_state, powerinsa)
{
- membank("okibank")->configure_entries(0, 5, memregion("oki1")->base() + 0x30000, 0x10000);
+ m_okibank->configure_entries(0, 5, memregion("oki1")->base() + 0x30000, 0x10000);
}
MACHINE_CONFIG_START(powerins_state::powerins)
@@ -306,13 +291,11 @@ MACHINE_CONFIG_START(powerins_state::powerins)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, 12000000) /* 12MHz */
MCFG_DEVICE_PROGRAM_MAP(powerins_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", powerins_state, irq4_line_hold)
MCFG_DEVICE_ADD("soundcpu", Z80, 6000000) /* 6 MHz */
MCFG_DEVICE_PROGRAM_MAP(powerins_sound_map)
MCFG_DEVICE_IO_MAP(powerins_sound_io_map)
-
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(56)
@@ -320,13 +303,13 @@ MACHINE_CONFIG_START(powerins_state::powerins)
MCFG_SCREEN_SIZE(320, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0+16, 256-16-1)
MCFG_SCREEN_UPDATE_DRIVER(powerins_state, screen_update)
+ MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, powerins_state, screen_vblank))
MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_powerins)
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
-
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -466,14 +449,14 @@ ROM_START( powerins )
ROM_LOAD( "93095-1.u15", 0x000000, 0x020000, CRC(6a579ee0) SHA1(438e87b930e068e0cf7352e614a14049ebde6b8a) )
ROM_REGION( 0x800000, "gfx3", 0 ) /* Sprites */
- ROM_LOAD( "93095-12.u116", 0x000000, 0x100000, CRC(35f3c2a3) SHA1(70efebfe248401ba3d766dc0e4bcc2846cd0d9a0) )
- ROM_LOAD( "93095-13.u117", 0x100000, 0x100000, CRC(1ebd45da) SHA1(99b0ac734890673064b2a4b4b57ff2694e338dea) )
- ROM_LOAD( "93095-14.u118", 0x200000, 0x100000, CRC(760d871b) SHA1(4887122ad0518c90f08c11a7a6b694f3fd218498) )
- ROM_LOAD( "93095-15.u119", 0x300000, 0x100000, CRC(d011be88) SHA1(837409a2584abdf22e022b0f06181a600a974cbe) )
- ROM_LOAD( "93095-16.u120", 0x400000, 0x100000, CRC(a9c16c9c) SHA1(a34e81324c875c2a57f778d1dbdda8da81850a29) )
- ROM_LOAD( "93095-17.u121", 0x500000, 0x100000, CRC(51b57288) SHA1(821473d51565bc0a8b9a979723ce1307b97e517e) )
- ROM_LOAD( "93095-18.u122", 0x600000, 0x100000, CRC(b135e3f2) SHA1(339fb4007ca0f379b7554a1c4f711f494a371fb2) )
- ROM_LOAD( "93095-19.u123", 0x700000, 0x100000, CRC(67695537) SHA1(4c78ce3e36f27d2a6a9e50e8bf896335d4d0958a) )
+ ROM_LOAD16_WORD_SWAP( "93095-12.u116", 0x000000, 0x100000, CRC(35f3c2a3) SHA1(70efebfe248401ba3d766dc0e4bcc2846cd0d9a0) )
+ ROM_LOAD16_WORD_SWAP( "93095-13.u117", 0x100000, 0x100000, CRC(1ebd45da) SHA1(99b0ac734890673064b2a4b4b57ff2694e338dea) )
+ ROM_LOAD16_WORD_SWAP( "93095-14.u118", 0x200000, 0x100000, CRC(760d871b) SHA1(4887122ad0518c90f08c11a7a6b694f3fd218498) )
+ ROM_LOAD16_WORD_SWAP( "93095-15.u119", 0x300000, 0x100000, CRC(d011be88) SHA1(837409a2584abdf22e022b0f06181a600a974cbe) )
+ ROM_LOAD16_WORD_SWAP( "93095-16.u120", 0x400000, 0x100000, CRC(a9c16c9c) SHA1(a34e81324c875c2a57f778d1dbdda8da81850a29) )
+ ROM_LOAD16_WORD_SWAP( "93095-17.u121", 0x500000, 0x100000, CRC(51b57288) SHA1(821473d51565bc0a8b9a979723ce1307b97e517e) )
+ ROM_LOAD16_WORD_SWAP( "93095-18.u122", 0x600000, 0x100000, CRC(b135e3f2) SHA1(339fb4007ca0f379b7554a1c4f711f494a371fb2) )
+ ROM_LOAD16_WORD_SWAP( "93095-19.u123", 0x700000, 0x100000, CRC(67695537) SHA1(4c78ce3e36f27d2a6a9e50e8bf896335d4d0958a) )
ROM_REGION( 0x240000, "oki1", 0 ) /* 8 bit adpcm (banked) */
ROM_LOAD( "93095-10.u48", 0x040000, 0x100000, CRC(329ac6c5) SHA1(e809b94e2623141f5a48995cfa97fe1ead7ab40b) )
@@ -506,14 +489,14 @@ ROM_START( powerinsj )
ROM_LOAD( "93095-1.u15", 0x000000, 0x020000, CRC(6a579ee0) SHA1(438e87b930e068e0cf7352e614a14049ebde6b8a) )
ROM_REGION( 0x800000, "gfx3", 0 ) /* Sprites */
- ROM_LOAD( "93095-12.u116", 0x000000, 0x100000, CRC(35f3c2a3) SHA1(70efebfe248401ba3d766dc0e4bcc2846cd0d9a0) )
- ROM_LOAD( "93095-13.u117", 0x100000, 0x100000, CRC(1ebd45da) SHA1(99b0ac734890673064b2a4b4b57ff2694e338dea) )
- ROM_LOAD( "93095-14.u118", 0x200000, 0x100000, CRC(760d871b) SHA1(4887122ad0518c90f08c11a7a6b694f3fd218498) )
- ROM_LOAD( "93095-15.u119", 0x300000, 0x100000, CRC(d011be88) SHA1(837409a2584abdf22e022b0f06181a600a974cbe) )
- ROM_LOAD( "93095-16.u120", 0x400000, 0x100000, CRC(a9c16c9c) SHA1(a34e81324c875c2a57f778d1dbdda8da81850a29) )
- ROM_LOAD( "93095-17.u121", 0x500000, 0x100000, CRC(51b57288) SHA1(821473d51565bc0a8b9a979723ce1307b97e517e) )
- ROM_LOAD( "93095-18.u122", 0x600000, 0x100000, CRC(b135e3f2) SHA1(339fb4007ca0f379b7554a1c4f711f494a371fb2) )
- ROM_LOAD( "93095-19.u123", 0x700000, 0x100000, CRC(67695537) SHA1(4c78ce3e36f27d2a6a9e50e8bf896335d4d0958a) )
+ ROM_LOAD16_WORD_SWAP( "93095-12.u116", 0x000000, 0x100000, CRC(35f3c2a3) SHA1(70efebfe248401ba3d766dc0e4bcc2846cd0d9a0) )
+ ROM_LOAD16_WORD_SWAP( "93095-13.u117", 0x100000, 0x100000, CRC(1ebd45da) SHA1(99b0ac734890673064b2a4b4b57ff2694e338dea) )
+ ROM_LOAD16_WORD_SWAP( "93095-14.u118", 0x200000, 0x100000, CRC(760d871b) SHA1(4887122ad0518c90f08c11a7a6b694f3fd218498) )
+ ROM_LOAD16_WORD_SWAP( "93095-15.u119", 0x300000, 0x100000, CRC(d011be88) SHA1(837409a2584abdf22e022b0f06181a600a974cbe) )
+ ROM_LOAD16_WORD_SWAP( "93095-16.u120", 0x400000, 0x100000, CRC(a9c16c9c) SHA1(a34e81324c875c2a57f778d1dbdda8da81850a29) )
+ ROM_LOAD16_WORD_SWAP( "93095-17.u121", 0x500000, 0x100000, CRC(51b57288) SHA1(821473d51565bc0a8b9a979723ce1307b97e517e) )
+ ROM_LOAD16_WORD_SWAP( "93095-18.u122", 0x600000, 0x100000, CRC(b135e3f2) SHA1(339fb4007ca0f379b7554a1c4f711f494a371fb2) )
+ ROM_LOAD16_WORD_SWAP( "93095-19.u123", 0x700000, 0x100000, CRC(67695537) SHA1(4c78ce3e36f27d2a6a9e50e8bf896335d4d0958a) )
ROM_REGION( 0x240000, "oki1", 0 ) /* 8 bit adpcm (banked) */
ROM_LOAD( "93095-10.u48", 0x040000, 0x100000, CRC(329ac6c5) SHA1(e809b94e2623141f5a48995cfa97fe1ead7ab40b) )
@@ -548,22 +531,22 @@ ROM_START( powerinsp )
ROM_LOAD( "1.text 1080.u16.27c010", 0x000000, 0x20000, CRC(6a579ee0) SHA1(438e87b930e068e0cf7352e614a14049ebde6b8a) )
ROM_REGION( 0x800000, "gfx3", 0 ) /* Sprites */
- ROM_LOAD16_BYTE( "fo0.mo0.27c040", 0x000000, 0x80000, CRC(8b9b89c9) SHA1(f1d39d1a62e40a14642d8f22fc38b764465a8daa) )
- ROM_LOAD16_BYTE( "fe0.me0.27c040", 0x000001, 0x80000, CRC(4d127bdf) SHA1(26a7c277e7660a7c7c0c11cacadf815d2487ba8a) )
- ROM_LOAD16_BYTE( "fo1.mo1.27c040", 0x100000, 0x80000, CRC(298eb50e) SHA1(2b922c1473bb559a1e8bd6221619141658179bb9) )
- ROM_LOAD16_BYTE( "fe1.me1.27c040", 0x100001, 0x80000, CRC(57e6d283) SHA1(4701576c8663ba47f388a02e61ef078a9dbbd212) )
- ROM_LOAD16_BYTE( "fo2.mo2.27c040", 0x200000, 0x80000, CRC(fb184167) SHA1(20924d3f35509f2f6af61f565b852ea72326d02c) )
- ROM_LOAD16_BYTE( "fe2.me2.27c040", 0x200001, 0x80000, CRC(1b752a4d) SHA1(1b13f28af208542bee9da298d6e9db676cbc0845) )
- ROM_LOAD16_BYTE( "fo3.mo3.27c040", 0x300000, 0x80000, CRC(2f26ba7b) SHA1(026f960fa4de09ed940dd83a3db467c3676c5024) )
- ROM_LOAD16_BYTE( "fe3.me3.27c040", 0x300001, 0x80000, CRC(0263d89b) SHA1(526b8ed05dffcbe98a44372bd55ad7b0ba91fc0f) )
- ROM_LOAD16_BYTE( "fo4.mo4.27c040", 0x400000, 0x80000, CRC(c4633294) SHA1(9578f516eaf09e743ee0262ce227f811bea1be8f) )
- ROM_LOAD16_BYTE( "fe4.me4.27c040", 0x400001, 0x80000, CRC(5e4b5655) SHA1(f86509e75ec0c68f728715a5a325f6d1a30cfd93) )
- ROM_LOAD16_BYTE( "fo5.mo5.27c040", 0x500000, 0x80000, CRC(4d4b0e4e) SHA1(782c5edc533f10757cb18d2411046e44aa075ba1) )
- ROM_LOAD16_BYTE( "fe5.me5.27c040", 0x500001, 0x80000, CRC(7e9f2d2b) SHA1(cfee03c38a6c781ad370638748244a164b83d588) )
- ROM_LOAD16_BYTE( "fo6.mo6.27c040", 0x600000, 0x80000, CRC(0e7671f2) SHA1(301af5c4229451cba9fdf40285dd7243626ffed4) )
- ROM_LOAD16_BYTE( "fe6.me6.27c040", 0x600001, 0x80000, CRC(ee59b1ec) SHA1(437bc50c3b32c2edee549f5021345f1c924896b4) )
- ROM_LOAD16_BYTE( "fo7.mo7.27c040", 0x700000, 0x80000, CRC(9ab1998c) SHA1(fadaa4a46cefe0093ee1ebeddbae63143fa7bb5a) )
- ROM_LOAD16_BYTE( "fe7.me7.27c040", 0x700001, 0x80000, CRC(1ab0c88a) SHA1(8bc72732f5911e0d4e0cf12fd2fb12d67e03299e) )
+ ROM_LOAD16_BYTE( "fo0.mo0.27c040", 0x000001, 0x80000, CRC(8b9b89c9) SHA1(f1d39d1a62e40a14642d8f22fc38b764465a8daa) )
+ ROM_LOAD16_BYTE( "fe0.me0.27c040", 0x000000, 0x80000, CRC(4d127bdf) SHA1(26a7c277e7660a7c7c0c11cacadf815d2487ba8a) )
+ ROM_LOAD16_BYTE( "fo1.mo1.27c040", 0x100001, 0x80000, CRC(298eb50e) SHA1(2b922c1473bb559a1e8bd6221619141658179bb9) )
+ ROM_LOAD16_BYTE( "fe1.me1.27c040", 0x100000, 0x80000, CRC(57e6d283) SHA1(4701576c8663ba47f388a02e61ef078a9dbbd212) )
+ ROM_LOAD16_BYTE( "fo2.mo2.27c040", 0x200001, 0x80000, CRC(fb184167) SHA1(20924d3f35509f2f6af61f565b852ea72326d02c) )
+ ROM_LOAD16_BYTE( "fe2.me2.27c040", 0x200000, 0x80000, CRC(1b752a4d) SHA1(1b13f28af208542bee9da298d6e9db676cbc0845) )
+ ROM_LOAD16_BYTE( "fo3.mo3.27c040", 0x300001, 0x80000, CRC(2f26ba7b) SHA1(026f960fa4de09ed940dd83a3db467c3676c5024) )
+ ROM_LOAD16_BYTE( "fe3.me3.27c040", 0x300000, 0x80000, CRC(0263d89b) SHA1(526b8ed05dffcbe98a44372bd55ad7b0ba91fc0f) )
+ ROM_LOAD16_BYTE( "fo4.mo4.27c040", 0x400001, 0x80000, CRC(c4633294) SHA1(9578f516eaf09e743ee0262ce227f811bea1be8f) )
+ ROM_LOAD16_BYTE( "fe4.me4.27c040", 0x400000, 0x80000, CRC(5e4b5655) SHA1(f86509e75ec0c68f728715a5a325f6d1a30cfd93) )
+ ROM_LOAD16_BYTE( "fo5.mo5.27c040", 0x500001, 0x80000, CRC(4d4b0e4e) SHA1(782c5edc533f10757cb18d2411046e44aa075ba1) )
+ ROM_LOAD16_BYTE( "fe5.me5.27c040", 0x500000, 0x80000, CRC(7e9f2d2b) SHA1(cfee03c38a6c781ad370638748244a164b83d588) )
+ ROM_LOAD16_BYTE( "fo6.mo6.27c040", 0x600001, 0x80000, CRC(0e7671f2) SHA1(301af5c4229451cba9fdf40285dd7243626ffed4) )
+ ROM_LOAD16_BYTE( "fe6.me6.27c040", 0x600000, 0x80000, CRC(ee59b1ec) SHA1(437bc50c3b32c2edee549f5021345f1c924896b4) )
+ ROM_LOAD16_BYTE( "fo7.mo7.27c040", 0x700001, 0x80000, CRC(9ab1998c) SHA1(fadaa4a46cefe0093ee1ebeddbae63143fa7bb5a) )
+ ROM_LOAD16_BYTE( "fe7.me7.27c040", 0x700000, 0x80000, CRC(1ab0c88a) SHA1(8bc72732f5911e0d4e0cf12fd2fb12d67e03299e) )
ROM_REGION( 0x240000, "oki1", 0 ) /* 8 bit adpcm (banked) */
ROM_LOAD( "ao0.ad00.27c040", 0x040000, 0x80000, CRC(8cd6824e) SHA1(aa6d8917558de4f2aa8d80527209b9fe91122eb3) )
@@ -626,10 +609,10 @@ ROM_START( powerinsa )
ROM_LOAD( "rom3", 0x000000, 0x020000, CRC(6a579ee0) SHA1(438e87b930e068e0cf7352e614a14049ebde6b8a) )
ROM_REGION( 0x800000, "gfx3", 0 ) /* Sprites */
- ROM_LOAD( "rom10", 0x000000, 0x200000, CRC(efad50e8) SHA1(89e8c307b927e987a32d22ab4ab7f3be037cca03) )
- ROM_LOAD( "rom9", 0x200000, 0x200000, CRC(08229592) SHA1(759679e89832b475adfdc783630d9ee2c105b0f3) )
- ROM_LOAD( "rom8", 0x400000, 0x200000, CRC(b02fdd6d) SHA1(1e2c52b4e9999f0b564fcf13ff41b097ad7d0c39) )
- ROM_LOAD( "rom7", 0x600000, 0x200000, CRC(92ab9996) SHA1(915ec8f383cc3652c3816a9b56ee54e22e104a5c) )
+ ROM_LOAD16_WORD_SWAP( "rom10", 0x000000, 0x200000, CRC(efad50e8) SHA1(89e8c307b927e987a32d22ab4ab7f3be037cca03) )
+ ROM_LOAD16_WORD_SWAP( "rom9", 0x200000, 0x200000, CRC(08229592) SHA1(759679e89832b475adfdc783630d9ee2c105b0f3) )
+ ROM_LOAD16_WORD_SWAP( "rom8", 0x400000, 0x200000, CRC(b02fdd6d) SHA1(1e2c52b4e9999f0b564fcf13ff41b097ad7d0c39) )
+ ROM_LOAD16_WORD_SWAP( "rom7", 0x600000, 0x200000, CRC(92ab9996) SHA1(915ec8f383cc3652c3816a9b56ee54e22e104a5c) )
ROM_REGION( 0x080000, "oki1", 0 ) /* 8 bit adpcm (banked) */
ROM_LOAD( "rom5", 0x000000, 0x080000, CRC(88579c8f) SHA1(13083934ab294c9b08d3e36f55c00a6a2e5a0507) )
@@ -705,22 +688,22 @@ ROM_START( powerinsb )
ROM_LOAD( "6n.bin", 0x000000, 0x20000, CRC(6a579ee0) SHA1(438e87b930e068e0cf7352e614a14049ebde6b8a) )
ROM_REGION( 0x800000, "gfx3", 0 ) /* Sprites */
- ROM_LOAD16_BYTE( "14g.bin", 0x000000, 0x80000, CRC(8b9b89c9) SHA1(f1d39d1a62e40a14642d8f22fc38b764465a8daa) )
- ROM_LOAD16_BYTE( "11g.bin", 0x000001, 0x80000, CRC(4d127bdf) SHA1(26a7c277e7660a7c7c0c11cacadf815d2487ba8a) )
- ROM_LOAD16_BYTE( "13g.bin", 0x100000, 0x80000, CRC(298eb50e) SHA1(2b922c1473bb559a1e8bd6221619141658179bb9) )
- ROM_LOAD16_BYTE( "11i.bin", 0x100001, 0x80000, CRC(57e6d283) SHA1(4701576c8663ba47f388a02e61ef078a9dbbd212) )
- ROM_LOAD16_BYTE( "12g.bin", 0x200000, 0x80000, CRC(fb184167) SHA1(20924d3f35509f2f6af61f565b852ea72326d02c) )
- ROM_LOAD16_BYTE( "11j.bin", 0x200001, 0x80000, CRC(1b752a4d) SHA1(1b13f28af208542bee9da298d6e9db676cbc0845) )
- ROM_LOAD16_BYTE( "14m.bin", 0x300000, 0x80000, CRC(2f26ba7b) SHA1(026f960fa4de09ed940dd83a3db467c3676c5024) )
- ROM_LOAD16_BYTE( "11k.bin", 0x300001, 0x80000, CRC(0263d89b) SHA1(526b8ed05dffcbe98a44372bd55ad7b0ba91fc0f) )
- ROM_LOAD16_BYTE( "14n.bin", 0x400000, 0x80000, CRC(c4633294) SHA1(9578f516eaf09e743ee0262ce227f811bea1be8f) )
- ROM_LOAD16_BYTE( "11l.bin", 0x400001, 0x80000, CRC(5e4b5655) SHA1(f86509e75ec0c68f728715a5a325f6d1a30cfd93) )
- ROM_LOAD16_BYTE( "14p.bin", 0x500000, 0x80000, CRC(4d4b0e4e) SHA1(782c5edc533f10757cb18d2411046e44aa075ba1) )
- ROM_LOAD16_BYTE( "11o.bin", 0x500001, 0x80000, CRC(7e9f2d2b) SHA1(cfee03c38a6c781ad370638748244a164b83d588) )
- ROM_LOAD16_BYTE( "13p.bin", 0x600000, 0x80000, CRC(0e7671f2) SHA1(301af5c4229451cba9fdf40285dd7243626ffed4) )
- ROM_LOAD16_BYTE( "11p.bin", 0x600001, 0x80000, CRC(ee59b1ec) SHA1(437bc50c3b32c2edee549f5021345f1c924896b4) )
- ROM_LOAD16_BYTE( "12p.bin", 0x700000, 0x80000, CRC(9ab1998c) SHA1(fadaa4a46cefe0093ee1ebeddbae63143fa7bb5a) )
- ROM_LOAD16_BYTE( "11q.bin", 0x700001, 0x80000, CRC(1ab0c88a) SHA1(8bc72732f5911e0d4e0cf12fd2fb12d67e03299e) )
+ ROM_LOAD16_BYTE( "14g.bin", 0x000001, 0x80000, CRC(8b9b89c9) SHA1(f1d39d1a62e40a14642d8f22fc38b764465a8daa) )
+ ROM_LOAD16_BYTE( "11g.bin", 0x000000, 0x80000, CRC(4d127bdf) SHA1(26a7c277e7660a7c7c0c11cacadf815d2487ba8a) )
+ ROM_LOAD16_BYTE( "13g.bin", 0x100001, 0x80000, CRC(298eb50e) SHA1(2b922c1473bb559a1e8bd6221619141658179bb9) )
+ ROM_LOAD16_BYTE( "11i.bin", 0x100000, 0x80000, CRC(57e6d283) SHA1(4701576c8663ba47f388a02e61ef078a9dbbd212) )
+ ROM_LOAD16_BYTE( "12g.bin", 0x200001, 0x80000, CRC(fb184167) SHA1(20924d3f35509f2f6af61f565b852ea72326d02c) )
+ ROM_LOAD16_BYTE( "11j.bin", 0x200000, 0x80000, CRC(1b752a4d) SHA1(1b13f28af208542bee9da298d6e9db676cbc0845) )
+ ROM_LOAD16_BYTE( "14m.bin", 0x300001, 0x80000, CRC(2f26ba7b) SHA1(026f960fa4de09ed940dd83a3db467c3676c5024) )
+ ROM_LOAD16_BYTE( "11k.bin", 0x300000, 0x80000, CRC(0263d89b) SHA1(526b8ed05dffcbe98a44372bd55ad7b0ba91fc0f) )
+ ROM_LOAD16_BYTE( "14n.bin", 0x400001, 0x80000, CRC(c4633294) SHA1(9578f516eaf09e743ee0262ce227f811bea1be8f) )
+ ROM_LOAD16_BYTE( "11l.bin", 0x400000, 0x80000, CRC(5e4b5655) SHA1(f86509e75ec0c68f728715a5a325f6d1a30cfd93) )
+ ROM_LOAD16_BYTE( "14p.bin", 0x500001, 0x80000, CRC(4d4b0e4e) SHA1(782c5edc533f10757cb18d2411046e44aa075ba1) )
+ ROM_LOAD16_BYTE( "11o.bin", 0x500000, 0x80000, CRC(7e9f2d2b) SHA1(cfee03c38a6c781ad370638748244a164b83d588) )
+ ROM_LOAD16_BYTE( "13p.bin", 0x600001, 0x80000, CRC(0e7671f2) SHA1(301af5c4229451cba9fdf40285dd7243626ffed4) )
+ ROM_LOAD16_BYTE( "11p.bin", 0x600000, 0x80000, CRC(ee59b1ec) SHA1(437bc50c3b32c2edee549f5021345f1c924896b4) )
+ ROM_LOAD16_BYTE( "12p.bin", 0x700001, 0x80000, CRC(9ab1998c) SHA1(fadaa4a46cefe0093ee1ebeddbae63143fa7bb5a) )
+ ROM_LOAD16_BYTE( "11q.bin", 0x700000, 0x80000, CRC(1ab0c88a) SHA1(8bc72732f5911e0d4e0cf12fd2fb12d67e03299e) )
ROM_REGION( 0x240000, "oki1", 0 ) /* 8 bit adpcm (banked) */
ROM_LOAD( "4a.bin", 0x040000, 0x80000, CRC(8cd6824e) SHA1(aa6d8917558de4f2aa8d80527209b9fe91122eb3) )
diff --git a/src/mame/includes/powerins.h b/src/mame/includes/powerins.h
index 9fa14f603f4..b96675c4367 100644
--- a/src/mame/includes/powerins.h
+++ b/src/mame/includes/powerins.h
@@ -7,16 +7,16 @@
class powerins_state : public driver_device
{
public:
- powerins_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ powerins_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_vctrl_0(*this, "vctrl_0"),
- m_vram_0(*this, "vram_0"),
- m_vram_1(*this, "vram_1"),
- m_spriteram(*this, "spriteram") { }
+ m_vram(*this, "vram_%u", 0U),
+ m_spriteram(*this, "spriteram"),
+ m_okibank(*this, "okibank") { }
required_device<cpu_device> m_maincpu;
@@ -25,19 +25,20 @@ public:
required_device<palette_device> m_palette;
required_shared_ptr<uint16_t> m_vctrl_0;
- required_shared_ptr<uint16_t> m_vram_0;
- required_shared_ptr<uint16_t> m_vram_1;
+ required_shared_ptr_array<uint16_t, 2> m_vram;
required_shared_ptr<uint16_t> m_spriteram;
- tilemap_t *m_tilemap_0;
- tilemap_t *m_tilemap_1;
+ optional_memory_bank m_okibank;
+
+ std::unique_ptr<uint16_t[]> m_spritebuffer[2];
+
+ tilemap_t *m_tilemap[2];
int m_tile_bank;
DECLARE_WRITE8_MEMBER(powerinsa_okibank_w);
DECLARE_WRITE8_MEMBER(flipscreen_w);
DECLARE_WRITE8_MEMBER(tilebank_w);
- DECLARE_WRITE16_MEMBER(vram_0_w);
- DECLARE_WRITE16_MEMBER(vram_1_w);
+ template<int Layer> DECLARE_WRITE16_MEMBER(vram_w);
DECLARE_READ8_MEMBER(powerinsb_fake_ym2203_r);
DECLARE_MACHINE_START(powerinsa);
@@ -46,6 +47,8 @@ public:
TILE_GET_INFO_MEMBER(get_tile_info_1);
TILEMAP_MAPPER_MEMBER(get_memory_offset_0);
+ DECLARE_WRITE_LINE_MEMBER(screen_vblank);
+
virtual void video_start() override;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
diff --git a/src/mame/video/powerins.cpp b/src/mame/video/powerins.cpp
index 607d3fd7339..8a1fa064301 100644
--- a/src/mame/video/powerins.cpp
+++ b/src/mame/video/powerins.cpp
@@ -42,6 +42,7 @@ Note: if MAME_DEBUG is defined, pressing Z with:
#include "emu.h"
#include "includes/powerins.h"
+#include <algorithm>
/***************************************************************************
@@ -52,7 +53,7 @@ Note: if MAME_DEBUG is defined, pressing Z with:
WRITE8_MEMBER(powerins_state::flipscreen_w)
{
- flip_screen_set(data & 1 );
+ flip_screen_set(data & 1);
}
WRITE8_MEMBER(powerins_state::tilebank_w)
@@ -60,7 +61,7 @@ WRITE8_MEMBER(powerins_state::tilebank_w)
if (data != m_tile_bank)
{
m_tile_bank = data; // Tiles Bank (VRAM 0)
- m_tilemap_0->mark_all_dirty();
+ m_tilemap[0]->mark_all_dirty();
}
}
@@ -85,39 +86,30 @@ Offset:
***************************************************************************/
/* Layers are made of 256x256 pixel pages */
+/*
#define TILES_PER_PAGE_X (0x10)
#define TILES_PER_PAGE_Y (0x10)
#define TILES_PER_PAGE (TILES_PER_PAGE_X * TILES_PER_PAGE_Y)
#define DIM_NX_0 (0x100)
#define DIM_NY_0 (0x20)
-
+*/
TILE_GET_INFO_MEMBER(powerins_state::get_tile_info_0)
{
- uint16_t code = m_vram_0[tile_index];
+ uint16_t code = m_vram[0][tile_index];
SET_TILE_INFO_MEMBER(0,
- (code & 0x07ff) + (m_tile_bank*0x800),
- ((code & 0xf000) >> (16-4)) + ((code & 0x0800) >> (11-4)),
+ (code & 0x07ff) | (m_tile_bank << 11),
+ ((code & 0xf000) >> 12) | ((code & 0x0800) >> 7),
0);
}
-WRITE16_MEMBER(powerins_state::vram_0_w)
-{
- COMBINE_DATA(&m_vram_0[offset]);
- m_tilemap_0->mark_tile_dirty(offset);
-}
-
TILEMAP_MAPPER_MEMBER(powerins_state::get_memory_offset_0)
{
- return (col * TILES_PER_PAGE_Y) +
-
- (row % TILES_PER_PAGE_Y) +
- (row / TILES_PER_PAGE_Y) * (TILES_PER_PAGE * 16);
+ return (row & 0xf) | ((col & 0xff) << 4) | ((row & 0x10) << 8);
}
-
/***************************************************************************
[ Tiles Format VRAM 1]
@@ -129,28 +121,20 @@ Offset:
***************************************************************************/
+/*
#define DIM_NX_1 (0x40)
#define DIM_NY_1 (0x20)
+*/
TILE_GET_INFO_MEMBER(powerins_state::get_tile_info_1)
{
- uint16_t code = m_vram_1[tile_index];
+ uint16_t code = m_vram[1][tile_index];
SET_TILE_INFO_MEMBER(1,
code & 0x0fff,
- (code & 0xf000) >> (16-4),
+ (code & 0xf000) >> 12,
0);
}
-WRITE16_MEMBER(powerins_state::vram_1_w)
-{
- COMBINE_DATA(&m_vram_1[offset]);
- m_tilemap_1->mark_tile_dirty(offset);
-}
-
-
-
-
-
/***************************************************************************
@@ -161,17 +145,17 @@ WRITE16_MEMBER(powerins_state::vram_1_w)
void powerins_state::video_start()
{
- m_tilemap_0 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(powerins_state::get_tile_info_0),this),tilemap_mapper_delegate(FUNC(powerins_state::get_memory_offset_0),this),16,16,DIM_NX_0, DIM_NY_0 );
- m_tilemap_1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(powerins_state::get_tile_info_1),this),TILEMAP_SCAN_COLS,8,8,DIM_NX_1, DIM_NY_1 );
+ m_spritebuffer[0] = make_unique_clear<uint16_t[]>(0x1000/2);
+ m_spritebuffer[1] = make_unique_clear<uint16_t[]>(0x1000/2);
- m_tilemap_0->set_scroll_rows(1);
- m_tilemap_0->set_scroll_cols(1);
+ m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(powerins_state::get_tile_info_0),this),tilemap_mapper_delegate(FUNC(powerins_state::get_memory_offset_0),this),16,16,256,32);
+ m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(powerins_state::get_tile_info_1),this),TILEMAP_SCAN_COLS,8,8,64,32);
- m_tilemap_1->set_scroll_rows(1);
- m_tilemap_1->set_scroll_cols(1);
- m_tilemap_1->set_transparent_pen(15);
+ m_tilemap[1]->set_transparent_pen(15);
save_item(NAME(m_tile_bank));
+ save_pointer(NAME(m_spritebuffer[0].get()), 0x1000/2);
+ save_pointer(NAME(m_spritebuffer[1].get()), 0x1000/2);
}
@@ -216,13 +200,11 @@ Offset: Format: Value:
------------------------------------------------------------------------ */
-#define SIGN_EXTEND_POS(_var_) {_var_ &= 0x3ff; if (_var_ > 0x1ff) _var_ -= 0x400;}
-
void powerins_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect)
{
- uint16_t *source = m_spriteram + 0x8000/2;
- uint16_t *finish = m_spriteram + 0x9000/2;
+ uint16_t *source = m_spritebuffer[1].get();
+ uint16_t *finish = m_spritebuffer[1].get() + 0x1000/2;
int screen_w = m_screen->width();
int screen_h = m_screen->height();
@@ -246,8 +228,8 @@ void powerins_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect
if (!(attr&1)) continue;
- SIGN_EXTEND_POS(sx)
- SIGN_EXTEND_POS(sy)
+ sx = (sx & 0x1ff) - (sx & 0x200);
+ sy = (sy & 0x1ff) - (sy & 0x200);
/* Handle flip_screen. Apply a global offset of 32 pixels along x too */
@@ -262,7 +244,7 @@ void powerins_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect
sx += 32; inc = +1;
}
- code = (code & 0x7fff) + ( (size & 0x0100) << 7 );
+ code = (code & 0x7fff) | ( (size & 0x0100) << 7 );
for (x = 0 ; x < dimx ; x++)
{
@@ -278,14 +260,10 @@ void powerins_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect
code += inc;
}
}
-
-
}
}
-
-
/***************************************************************************
@@ -299,14 +277,13 @@ uint32_t powerins_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
{
int layers_ctrl = -1;
- int scrollx = (m_vctrl_0[2/2]&0xff) + (m_vctrl_0[0/2]&0xff)*256;
- int scrolly = (m_vctrl_0[6/2]&0xff) + (m_vctrl_0[4/2]&0xff)*256;
+ int scrollx = (m_vctrl_0[2/2]&0xff) | ((m_vctrl_0[0/2]&0xff)<<8);
+ int scrolly = (m_vctrl_0[6/2]&0xff) | ((m_vctrl_0[4/2]&0xff)<<8);
- m_tilemap_0->set_scrollx(0, scrollx - 0x20);
- m_tilemap_0->set_scrolly(0, scrolly );
+ m_tilemap[0]->set_scrollx(0, scrollx - 0x20);
+ m_tilemap[0]->set_scrolly(0, scrolly );
- m_tilemap_1->set_scrollx(0, -0x20); // fixed offset
- m_tilemap_1->set_scrolly(0, 0x00);
+ m_tilemap[1]->set_scrollx(0, -0x20); // fixed offset
#ifdef MAME_DEBUG
if (machine().input().code_pressed(KEYCODE_Z))
@@ -321,9 +298,19 @@ if (machine().input().code_pressed(KEYCODE_Z))
}
#endif
- if (layers_ctrl&1) m_tilemap_0->draw(screen, bitmap, cliprect, 0, 0);
+ if (layers_ctrl&1) m_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0);
else bitmap.fill(0, cliprect);
if (layers_ctrl&8) draw_sprites(bitmap,cliprect);
- if (layers_ctrl&2) m_tilemap_1->draw(screen, bitmap, cliprect, 0, 0);
+ if (layers_ctrl&2) m_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0);
return 0;
}
+
+WRITE_LINE_MEMBER(powerins_state::screen_vblank)
+{
+ if (state)
+ {
+ std::copy_n(&m_spritebuffer[0][0], 0x1000/2, &m_spritebuffer[1][0]);
+ std::copy_n(&m_spriteram[0x8000/2], 0x1000/2, &m_spritebuffer[0][0]);
+ m_maincpu->set_input_line(4, HOLD_LINE);
+ }
+} \ No newline at end of file