mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
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)
This commit is contained in:
parent
9c0b2800a2
commit
a0688e6fbb
@ -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) )
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user