From a0688e6fbb60a392d6b15e2a2e88a5e10d85e53a Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 17 Jun 2018 01:44:13 +0900 Subject: 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) --- src/mame/drivers/powerins.cpp | 167 +++++++++++++++++++----------------------- src/mame/includes/powerins.h | 25 ++++--- src/mame/video/powerins.cpp | 97 +++++++++++------------- 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 +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 m_maincpu; @@ -25,19 +25,20 @@ public: required_device m_palette; required_shared_ptr m_vctrl_0; - required_shared_ptr m_vram_0; - required_shared_ptr m_vram_1; + required_shared_ptr_array m_vram; required_shared_ptr m_spriteram; - tilemap_t *m_tilemap_0; - tilemap_t *m_tilemap_1; + optional_memory_bank m_okibank; + + std::unique_ptr 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 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 /*************************************************************************** @@ -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(0x1000/2); + m_spritebuffer[1] = make_unique_clear(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 -- cgit v1.2.3