summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/namcos2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/namcos2.cpp')
-rw-r--r--src/mame/drivers/namcos2.cpp94
1 files changed, 43 insertions, 51 deletions
diff --git a/src/mame/drivers/namcos2.cpp b/src/mame/drivers/namcos2.cpp
index 09c51f60a0c..98c2dde0c83 100644
--- a/src/mame/drivers/namcos2.cpp
+++ b/src/mame/drivers/namcos2.cpp
@@ -44,6 +44,10 @@ known issues:
Bubble Trouble (Golly Ghost II)
- no artwork
+ Metal Hawk
+ - tilemap issues (ex : Result and stage select screen)
+ - ROZ wraparound isn't implemented
+
The Namco System II board is a 5 ( only 4 are emulated ) CPU system. The
complete system consists of two boards: CPU + GRAPHICS. It contains a large
number of custom ASICs to perform graphics operations, there is no
@@ -1577,19 +1581,9 @@ static const gfx_layout chr_layout = {
8,8,
RGN_FRAC(1,1),
8,
- { 0,1,2,3,4,5,6,7 },
- { 0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8 },
- { 0*64,1*64,2*64,3*64,4*64,5*64,6*64,7*64 },
- 8*64
-};
-
-static const gfx_layout roz_layout = {
- 8,8,
- 0x10000,
- 8,
- { 0,1,2,3,4,5,6,7 },
- { 0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8 },
- { 0*64,1*64,2*64,3*64,4*64,5*64,6*64,7*64 },
+ { STEP8(0,1) },
+ { STEP8(0,8) },
+ { STEP8(0,8*8) },
8*64
};
@@ -1621,33 +1615,44 @@ static const gfx_layout luckywld_roz_layout =
16,16,
RGN_FRAC(1,1),
8,
- { 0,1,2,3,4,5,6,7 },
- { 0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8,8*8,9*8,10*8,11*8,12*8,13*8,14*8,15*8 },
- { 0*128,1*128,2*128,3*128,4*128,5*128,6*128,7*128,8*128,9*128,10*128,11*128,12*128,13*128,14*128,15*128 },
+ { STEP8(0,1) },
+ { STEP16(0,8) },
+ { STEP16(0,8*16) },
16*128
};
static const gfx_layout metlhawk_sprite_layout = {
32,32,
- 0x1000, /* number of sprites */
+ RGN_FRAC(1,1), /* number of sprites */
8, /* bits per pixel */
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 160, 168, 176, 184, 192, 200, 208, 216, 224, 232, 240, 248 },
- { 0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 4352, 4608, 4864, 5120, 5376, 5632, 5888, 6144, 6400, 6656, 6912, 7168, 7424, 7680, 7936 },
+ { STEP8(0,1) },
+ { STEP32(0,8) },
+ { STEP32(0,8*32) },
+ 32*32*8
+};
+
+static const gfx_layout metlhawk_sprite_layout_swapped = {
+ 32,32,
+ RGN_FRAC(1,1), /* number of sprites */
+ 8, /* bits per pixel */
+ { STEP8(0,1) },
+ { STEP32(0,8*32) },
+ { STEP32(0,8) },
32*32*8
};
static GFXDECODE_START( gfx_metlhawk )
- GFXDECODE_ENTRY( "gfx1", 0x000000, metlhawk_sprite_layout, 0*256, 16 )
- GFXDECODE_ENTRY( "gfx3", 0x000000, luckywld_roz_layout, 0*256, 16 )
- GFXDECODE_ENTRY( "gfx2", 0x000000, chr_layout, 16*256, 16 )
+ GFXDECODE_ENTRY( "gfx1", 0x000000, metlhawk_sprite_layout, 0*256, 16 )
+ GFXDECODE_ENTRY( "gfx3", 0x000000, luckywld_roz_layout, 0*256, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0x000000, chr_layout, 16*256, 16 )
+ GFXDECODE_ENTRY( "gfx1", 0x000000, metlhawk_sprite_layout_swapped, 0*256, 16 )
GFXDECODE_END
static GFXDECODE_START( gfx_namcos2 )
GFXDECODE_ENTRY( "gfx1", 0x000000, obj_layout, 0*256, 16 )
GFXDECODE_ENTRY( "gfx1", 0x200000, obj_layout, 0*256, 16 )
GFXDECODE_ENTRY( "gfx2", 0x000000, chr_layout, 16*256, 16 )
- GFXDECODE_ENTRY( "gfx3", 0x000000, roz_layout, 0*256, 16 )
+ GFXDECODE_ENTRY( "gfx3", 0x000000, chr_layout, 0*256, 16 )
GFXDECODE_END
static GFXDECODE_START( gfx_finallap )
@@ -1920,6 +1925,13 @@ MACHINE_CONFIG_START(namcos2_state::finallap)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.80)
MACHINE_CONFIG_END
+// finalap2 has different mangle
+MACHINE_CONFIG_START(namcos2_state::finalap2)
+ finallap(config);
+
+ MCFG_VIDEO_START_OVERRIDE(namcos2_state, finalap2)
+MACHINE_CONFIG_END
+
MACHINE_CONFIG_START(namcos2_state::sgunner)
MCFG_DEVICE_ADD("maincpu", M68000, M68K_CPU_CLOCK) /* 12.288MHz (49.152MHz OSC/4) */
MCFG_DEVICE_PROGRAM_MAP(master_sgunner_am)
@@ -3905,7 +3917,7 @@ ROM_START( metlhawk )
ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) )
ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) )
- ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */
+ ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
ROM_LOAD32_BYTE( "mhobj-4.5c", 0x000000, 0x40000, CRC(e3590e1a) SHA1(9afffa54a63e676f5d78a01c76ca50cd795dd6e9) )
ROM_LOAD32_BYTE( "mhobj-5.5a", 0x000001, 0x40000, CRC(b85c0d07) SHA1(e1ae542c0e884ef454ba57ecdfd007b85f2dc59d) )
ROM_LOAD32_BYTE( "mhobj-6.6c", 0x000002, 0x40000, CRC(90c4523d) SHA1(c6f84da3187ebb747445b1b7499acf5adc0f39d8) )
@@ -3976,7 +3988,7 @@ ROM_START( metlhawkj )
ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) )
ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) )
- ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */
+ ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
ROM_LOAD32_BYTE( "mhobj-4.5c", 0x000000, 0x40000, CRC(e3590e1a) SHA1(9afffa54a63e676f5d78a01c76ca50cd795dd6e9) )
ROM_LOAD32_BYTE( "mhobj-5.5a", 0x000001, 0x40000, CRC(b85c0d07) SHA1(e1ae542c0e884ef454ba57ecdfd007b85f2dc59d) )
ROM_LOAD32_BYTE( "mhobj-6.6c", 0x000002, 0x40000, CRC(90c4523d) SHA1(c6f84da3187ebb747445b1b7499acf5adc0f39d8) )
@@ -5735,7 +5747,8 @@ void namcos2_state::init_metlhawk()
{
/* unscramble sprites */
uint8_t *data = memregion("gfx1")->base();
- for (int i=0; i<0x200000; i+=32*32)
+ int size = memregion("gfx1")->bytes();
+ for (int i=0; i<size; i+=32*32)
{
for (int j=0; j<32*32; j+=32*4)
{
@@ -5776,18 +5789,6 @@ void namcos2_state::init_metlhawk()
} /* next j */
} /* next i */
- /* 90 degrees prepare a turned character */
- for (int i=0; i<0x200000; i+=32*32)
- {
- for (int j=0; j<32; j++)
- {
- for (int k=0; k<32; k++)
- {
- data[0x200000+i+j*32+k] = data[i+j+k*32];
- } /* next k */
- } /* next j */
- } /* next i */
-
m_gametype = NAMCOS2_METAL_HAWK;
}
@@ -5875,16 +5876,7 @@ void namcos2_state::init_luckywld()
for( i=0; i<32*0x4000; i++ )
{ /* unscramble gfx mask */
int code = pData[i];
- int out = 0;
- if( code&0x01 ) out |= 0x80;
- if( code&0x02 ) out |= 0x40;
- if( code&0x04 ) out |= 0x20;
- if( code&0x08 ) out |= 0x10;
- if( code&0x10 ) out |= 0x08;
- if( code&0x20 ) out |= 0x04;
- if( code&0x40 ) out |= 0x02;
- if( code&0x80 ) out |= 0x01;
- pData[i] = out;
+ pData[i] = bitswap<8>(code, 0, 1, 2, 3, 4, 5, 6, 7);
}
m_gametype = NAMCOS2_LUCKY_AND_WILD;
}
@@ -5904,8 +5896,8 @@ GAME( 1988, assault, 0, base2, assault, namcos2_state, init_assau
GAME( 1988, assaultj, assault, base2, assault, namcos2_state, init_assaultj, ROT90, "Namco", "Assault (Japan)", 0 )
GAME( 1988, assaultp, assault, assaultp, assault, namcos2_state, init_assaultp_hack, ROT90, "Namco", "Assault Plus (Japan)", 0)
-GAME( 1988, metlhawk, 0, metlhawk, metlhawk, namcos2_state, init_metlhawk, ROT90, "Namco", "Metal Hawk (Rev C)", 0)
-GAME( 1988, metlhawkj, metlhawk, metlhawk, metlhawk, namcos2_state, init_metlhawk, ROT90, "Namco", "Metal Hawk (Japan, Rev F)", 0)
+GAME( 1988, metlhawk, 0, metlhawk, metlhawk, namcos2_state, init_metlhawk, ROT90, "Namco", "Metal Hawk (Rev C)", 0 )
+GAME( 1988, metlhawkj, metlhawk, metlhawk, metlhawk, namcos2_state, init_metlhawk, ROT90, "Namco", "Metal Hawk (Japan, Rev F)", 0 )
GAME( 1988, ordyne, 0, base, base, namcos2_state, init_ordyne, ROT180, "Namco", "Ordyne (World)", 0 )
GAME( 1988, ordyneje, ordyne, base, base, namcos2_state, init_ordyne, ROT180, "Namco", "Ordyne (Japan, English Version)", 0 )