Some Namco System 2 cleanups, removing the need for

AM_BASE/_SIZE_LEGACY. Also moved some handlers and 
statics into the state class.
This commit is contained in:
Aaron Giles 2012-09-04 17:10:48 +00:00
parent 95431b690e
commit b56467bbb6
6 changed files with 227 additions and 231 deletions

View File

@ -416,13 +416,13 @@ static void zdrawgfxzoom(
}
void
namcos2_draw_sprites(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri, int control )
namcos2_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri, int control )
{
int offset = (control & 0x000f) * (128*4);
int loop;
if( pri==0 )
{
machine.priority_bitmap.fill(0, cliprect );
machine().priority_bitmap.fill(0, cliprect );
}
for( loop=0; loop < 128; loop++ )
{
@ -447,12 +447,12 @@ namcos2_draw_sprites(running_machine &machine, bitmap_ind16 &bitmap, const recta
* Sprite colour index D04-D07
* Sprite Size X D10-D15
*/
int word3 = namcos2_sprite_ram[offset+(loop*4)+3];
int word3 = m_spriteram[offset+(loop*4)+3];
if( (word3&0xf)==pri )
{
int word0 = namcos2_sprite_ram[offset+(loop*4)+0];
int word1 = namcos2_sprite_ram[offset+(loop*4)+1];
int offset4 = namcos2_sprite_ram[offset+(loop*4)+2];
int word0 = m_spriteram[offset+(loop*4)+0];
int word1 = m_spriteram[offset+(loop*4)+1];
int offset4 = m_spriteram[offset+(loop*4)+2];
int sizey=((word0>>10)&0x3f)+1;
int sizex=(word3>>10)&0x3f;
@ -472,7 +472,7 @@ namcos2_draw_sprites(running_machine &machine, bitmap_ind16 &bitmap, const recta
int scaley = (sizey<<16)/((word0&0x0200)?0x20:0x10);
if(scalex && scaley)
{
gfx_element *gfx = machine.gfx[rgn];
gfx_element *gfx = machine().gfx[rgn];
if( (word0&0x0200)==0 )
gfx_element_set_source_clip(gfx, (word1&0x0001) ? 16 : 0, 16, (word1&0x0002) ? 16 : 0, 16);
@ -495,8 +495,7 @@ namcos2_draw_sprites(running_machine &machine, bitmap_ind16 &bitmap, const recta
}
} /* namcos2_draw_sprites */
void
namcos2_draw_sprites_metalhawk(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri )
void namcos2_state::draw_sprites_metalhawk(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri )
{
/**
* word#0
@ -528,12 +527,12 @@ namcos2_draw_sprites_metalhawk(running_machine &machine, bitmap_ind16 &bitmap, c
* --------xxxx---- color
* x--------------- unknown
*/
const UINT16 *pSource = namcos2_sprite_ram;
const UINT16 *pSource = m_spriteram;
rectangle rect;
int loop;
if( pri==0 )
{
machine.priority_bitmap.fill(0, cliprect );
machine().priority_bitmap.fill(0, cliprect );
}
for( loop=0; loop < 128; loop++ )
{
@ -606,7 +605,7 @@ namcos2_draw_sprites_metalhawk(running_machine &machine, bitmap_ind16 &bitmap, c
zdrawgfxzoom(
bitmap,
rect,
machine.gfx[0],
machine().gfx[0],
sprn, color,
flipx,flipy,
sx,sy,

View File

@ -467,53 +467,6 @@ $a00000 checks have been seen on the Final Lap boards.
/*************************************************************/
/* 68000/6809/63705 Shared memory area - DUAL PORT Memory */
/*************************************************************/
class namcos2_state : public driver_device
{
public:
namcos2_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
{ }
DECLARE_READ16_MEMBER(namcos2_68k_dpram_word_r);
DECLARE_WRITE16_MEMBER(namcos2_68k_dpram_word_w);
DECLARE_READ8_MEMBER(namcos2_dpram_byte_r);
DECLARE_WRITE8_MEMBER(namcos2_dpram_byte_w);
DECLARE_DRIVER_INIT(cosmogng);
DECLARE_DRIVER_INIT(sgunner2);
DECLARE_DRIVER_INIT(kyukaidk);
DECLARE_DRIVER_INIT(bubbletr);
DECLARE_DRIVER_INIT(suzuk8h2);
DECLARE_DRIVER_INIT(burnforc);
DECLARE_DRIVER_INIT(gollygho);
DECLARE_DRIVER_INIT(rthun2j);
DECLARE_DRIVER_INIT(sws);
DECLARE_DRIVER_INIT(finehour);
DECLARE_DRIVER_INIT(finallap);
DECLARE_DRIVER_INIT(dirtfoxj);
DECLARE_DRIVER_INIT(marvlanj);
DECLARE_DRIVER_INIT(sws92);
DECLARE_DRIVER_INIT(dsaber);
DECLARE_DRIVER_INIT(assault);
DECLARE_DRIVER_INIT(mirninja);
DECLARE_DRIVER_INIT(finalap2);
DECLARE_DRIVER_INIT(valkyrie);
DECLARE_DRIVER_INIT(fourtrax);
DECLARE_DRIVER_INIT(finalap3);
DECLARE_DRIVER_INIT(luckywld);
DECLARE_DRIVER_INIT(assaultj);
DECLARE_DRIVER_INIT(dsaberj);
DECLARE_DRIVER_INIT(suzuka8h);
DECLARE_DRIVER_INIT(phelios);
DECLARE_DRIVER_INIT(sws93);
DECLARE_DRIVER_INIT(metlhawk);
DECLARE_DRIVER_INIT(sws92g);
DECLARE_DRIVER_INIT(assaultp_hack);
DECLARE_DRIVER_INIT(assaultp);
DECLARE_DRIVER_INIT(ordyne);
DECLARE_DRIVER_INIT(marvland);
DECLARE_DRIVER_INIT(rthun2);
};
static UINT8 *namcos2_dpram; /* 2Kx8 */
static void
GollyGhostUpdateLED_c4( int data )
@ -574,16 +527,16 @@ GollyGhostUpdateDiorama_c0( int data )
}
}
READ16_MEMBER(namcos2_state::namcos2_68k_dpram_word_r)
READ16_MEMBER(namcos2_state::dpram_word_r)
{
return namcos2_dpram[offset];
return m_dpram[offset];
}
WRITE16_MEMBER(namcos2_state::namcos2_68k_dpram_word_w)
WRITE16_MEMBER(namcos2_state::dpram_word_w)
{
if( ACCESSING_BITS_0_7 )
{
namcos2_dpram[offset] = data&0xff;
m_dpram[offset] = data&0xff;
if( namcos2_gametype==NAMCOS2_GOLLY_GHOST )
{
@ -608,14 +561,14 @@ WRITE16_MEMBER(namcos2_state::namcos2_68k_dpram_word_w)
}
READ8_MEMBER(namcos2_state::namcos2_dpram_byte_r)
READ8_MEMBER(namcos2_state::dpram_byte_r)
{
return namcos2_dpram[offset];
return m_dpram[offset];
}
WRITE8_MEMBER(namcos2_state::namcos2_dpram_byte_w)
WRITE8_MEMBER(namcos2_state::dpram_byte_w)
{
namcos2_dpram[offset] = data;
m_dpram[offset] = data;
}
/*************************************************************/
@ -638,9 +591,9 @@ static ADDRESS_MAP_START( namcos2_68k_default_cpu_board_am, AS_PROGRAM, 16, namc
AM_RANGE(0x200000, 0x3fffff) AM_READ_LEGACY(namcos2_68k_data_rom_r)
AM_RANGE(0x400000, 0x41ffff) AM_READWRITE_LEGACY(namco_tilemapvideoram16_r,namco_tilemapvideoram16_w)
AM_RANGE(0x420000, 0x42003f) AM_READWRITE_LEGACY(namco_tilemapcontrol16_r,namco_tilemapcontrol16_w)
AM_RANGE(0x440000, 0x44ffff) AM_READWRITE_LEGACY(namcos2_68k_video_palette_r,namcos2_68k_video_palette_w) AM_BASE_LEGACY(&namcos2_68k_palette_ram) AM_SIZE_LEGACY(&namcos2_68k_palette_size)
AM_RANGE(0x460000, 0x460fff) AM_READWRITE(namcos2_68k_dpram_word_r,namcos2_68k_dpram_word_w)
AM_RANGE(0x468000, 0x468fff) AM_READWRITE(namcos2_68k_dpram_word_r,namcos2_68k_dpram_word_w) /* mirror */
AM_RANGE(0x440000, 0x44ffff) AM_READWRITE(paletteram_word_r,paletteram_word_w) AM_SHARE("paletteram")
AM_RANGE(0x460000, 0x460fff) AM_READWRITE(dpram_word_r,dpram_word_w)
AM_RANGE(0x468000, 0x468fff) AM_READWRITE(dpram_word_r,dpram_word_w) /* mirror */
AM_RANGE(0x480000, 0x483fff) AM_READWRITE_LEGACY(namcos2_68k_serial_comms_ram_r,namcos2_68k_serial_comms_ram_w) AM_BASE_LEGACY(&namcos2_68k_serial_comms_ram)
AM_RANGE(0x4a0000, 0x4a000f) AM_READWRITE_LEGACY(namcos2_68k_serial_comms_ctrl_r,namcos2_68k_serial_comms_ctrl_w)
ADDRESS_MAP_END
@ -648,10 +601,10 @@ ADDRESS_MAP_END
/*************************************************************/
static ADDRESS_MAP_START( common_default_am, AS_PROGRAM, 16, namcos2_state )
AM_RANGE(0xc00000, 0xc03fff) AM_READWRITE_LEGACY(namcos2_sprite_ram_r,namcos2_sprite_ram_w) AM_BASE_LEGACY(&namcos2_sprite_ram)
AM_RANGE(0xc00000, 0xc03fff) AM_READWRITE(spriteram_word_r, spriteram_word_w) AM_SHARE("spriteram")
AM_RANGE(0xc40000, 0xc40001) AM_READWRITE_LEGACY(namcos2_gfx_ctrl_r,namcos2_gfx_ctrl_w)
AM_RANGE(0xc80000, 0xc9ffff) AM_READWRITE_LEGACY(namcos2_68k_roz_ram_r,namcos2_68k_roz_ram_w) AM_BASE_LEGACY(&namcos2_68k_roz_ram)
AM_RANGE(0xcc0000, 0xcc000f) AM_READWRITE_LEGACY(namcos2_68k_roz_ctrl_r,namcos2_68k_roz_ctrl_w)
AM_RANGE(0xc80000, 0xc9ffff) AM_READWRITE(rozram_word_r,rozram_word_w) AM_SHARE("rozram")
AM_RANGE(0xcc0000, 0xcc000f) AM_READWRITE(roz_ctrl_word_r, roz_ctrl_word_w)
AM_RANGE(0xd00000, 0xd0000f) AM_READWRITE_LEGACY(namcos2_68k_key_r,namcos2_68k_key_w)
AM_IMPORT_FROM( namcos2_68k_default_cpu_board_am )
ADDRESS_MAP_END
@ -676,7 +629,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( common_finallap_am, AS_PROGRAM, 16, namcos2_state )
AM_RANGE(0x300000, 0x33ffff) AM_READ_LEGACY(namcos2_flap_prot_r)
AM_RANGE(0x800000, 0x80ffff) AM_READ_LEGACY(namcos2_sprite_ram_r) AM_WRITE_LEGACY(namcos2_sprite_ram_w) AM_BASE_LEGACY(&namcos2_sprite_ram)
AM_RANGE(0x800000, 0x80ffff) AM_READWRITE(spriteram_word_r, spriteram_word_w) AM_SHARE("spriteram")
AM_RANGE(0x840000, 0x840001) AM_READ_LEGACY(namcos2_gfx_ctrl_r) AM_WRITE_LEGACY(namcos2_gfx_ctrl_w)
AM_RANGE(0x880000, 0x89ffff) AM_READ_LEGACY(namco_road16_r) AM_WRITE_LEGACY(namco_road16_w)
AM_RANGE(0x8c0000, 0x8c0001) AM_WRITENOP
@ -725,7 +678,7 @@ ADDRESS_MAP_END
/*************************************************************/
static ADDRESS_MAP_START( common_metlhawk_am, AS_PROGRAM, 16, namcos2_state )
AM_RANGE(0xc00000, 0xc03fff) AM_READWRITE_LEGACY(namcos2_sprite_ram_r,namcos2_sprite_ram_w) AM_BASE_LEGACY(&namcos2_sprite_ram) \
AM_RANGE(0xc00000, 0xc03fff) AM_READWRITE(spriteram_word_r, spriteram_word_w) AM_SHARE("spriteram") \
AM_RANGE(0xc40000, 0xc4ffff) AM_READWRITE_LEGACY(namco_rozvideoram16_r,namco_rozvideoram16_w) \
AM_RANGE(0xd00000, 0xd0001f) AM_READWRITE_LEGACY(namco_rozcontrol16_r,namco_rozcontrol16_w) \
AM_RANGE(0xe00000, 0xe00001) AM_READWRITE_LEGACY(namcos2_gfx_ctrl_r,namcos2_gfx_ctrl_w) /* ??? */ \
@ -785,8 +738,8 @@ static ADDRESS_MAP_START( sound_default_am, AS_PROGRAM, 8, namcos2_state )
AM_RANGE(0x0000, 0x3fff) AM_ROMBANK("bank6") /* banked */
AM_RANGE(0x4000, 0x4001) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r,ym2151_w)
AM_RANGE(0x5000, 0x6fff) AM_DEVREADWRITE_LEGACY("c140", c140_r,c140_w)
AM_RANGE(0x7000, 0x77ff) AM_READWRITE(namcos2_dpram_byte_r,namcos2_dpram_byte_w) AM_BASE_LEGACY(&namcos2_dpram)
AM_RANGE(0x7800, 0x7fff) AM_READWRITE(namcos2_dpram_byte_r,namcos2_dpram_byte_w) /* mirror */
AM_RANGE(0x7000, 0x77ff) AM_READWRITE(dpram_byte_r,dpram_byte_w) AM_SHARE("dpram")
AM_RANGE(0x7800, 0x7fff) AM_READWRITE(dpram_byte_r,dpram_byte_w) /* mirror */
AM_RANGE(0x8000, 0x9fff) AM_RAM
AM_RANGE(0xa000, 0xbfff) AM_WRITENOP /* Amplifier enable on 1st write */
AM_RANGE(0xc000, 0xc001) AM_WRITE_LEGACY(namcos2_sound_bankselect_w)
@ -817,7 +770,7 @@ static ADDRESS_MAP_START( mcu_default_am, AS_PROGRAM, 8, namcos2_state )
AM_RANGE(0x3001, 0x3001) AM_READ_PORT("MCUDI1")
AM_RANGE(0x3002, 0x3002) AM_READ_PORT("MCUDI2")
AM_RANGE(0x3003, 0x3003) AM_READ_PORT("MCUDI3")
AM_RANGE(0x5000, 0x57ff) AM_READWRITE(namcos2_dpram_byte_r,namcos2_dpram_byte_w) AM_BASE_LEGACY(&namcos2_dpram)
AM_RANGE(0x5000, 0x57ff) AM_READWRITE(dpram_byte_r,dpram_byte_w) AM_SHARE("dpram")
AM_RANGE(0x6000, 0x6fff) AM_READNOP /* watchdog */
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
@ -1680,13 +1633,11 @@ static MACHINE_CONFIG_START( default, namcos2_state )
MCFG_SCREEN_REFRESH_RATE( (49152000.0 / 8) / (384 * 264) )
MCFG_SCREEN_SIZE(384, 264)
MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1)
MCFG_SCREEN_UPDATE_STATIC(namcos2_default)
MCFG_SCREEN_UPDATE_DRIVER(namcos2_state, screen_update)
MCFG_GFXDECODE(namcos2)
MCFG_PALETTE_LENGTH(0x2000)
MCFG_VIDEO_START(namcos2)
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("c140", C140, C140_SOUND_CLOCK) /* 21.333kHz */
@ -1756,13 +1707,11 @@ static MACHINE_CONFIG_START( gollygho, namcos2_state )
MCFG_SCREEN_REFRESH_RATE( (49152000.0 / 8) / (384 * 264) )
MCFG_SCREEN_SIZE(384, 264)
MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1)
MCFG_SCREEN_UPDATE_STATIC(namcos2_default)
MCFG_SCREEN_UPDATE_DRIVER(namcos2_state, screen_update)
MCFG_GFXDECODE(namcos2)
MCFG_PALETTE_LENGTH(0x2000)
MCFG_VIDEO_START(namcos2)
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("c140", C140, C140_SOUND_CLOCK) /* 21.333kHz */
@ -1805,12 +1754,12 @@ static MACHINE_CONFIG_START( finallap, namcos2_state )
MCFG_SCREEN_REFRESH_RATE( (49152000.0 / 8) / (384 * 264) )
MCFG_SCREEN_SIZE(384, 264)
MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1)
MCFG_SCREEN_UPDATE_STATIC(finallap)
MCFG_SCREEN_UPDATE_DRIVER(namcos2_state, screen_update_finallap)
MCFG_GFXDECODE(finallap)
MCFG_PALETTE_LENGTH(0x2000)
MCFG_VIDEO_START(finallap)
MCFG_VIDEO_START_OVERRIDE(namcos2_state, video_start_finallap)
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -1854,12 +1803,12 @@ static MACHINE_CONFIG_START( sgunner, namcos2_state )
MCFG_SCREEN_REFRESH_RATE( (49152000.0 / 8) / (384 * 264) )
MCFG_SCREEN_SIZE(384, 264)
MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1)
MCFG_SCREEN_UPDATE_STATIC(sgunner)
MCFG_SCREEN_UPDATE_DRIVER(namcos2_state, screen_update_sgunner)
MCFG_GFXDECODE(sgunner)
MCFG_PALETTE_LENGTH(0x2000)
MCFG_VIDEO_START(sgunner)
MCFG_VIDEO_START_OVERRIDE(namcos2_state, video_start_sgunner)
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -1903,12 +1852,12 @@ static MACHINE_CONFIG_START( luckywld, namcos2_state )
MCFG_SCREEN_REFRESH_RATE( (49152000.0 / 8) / (384 * 264) )
MCFG_SCREEN_SIZE(384, 264)
MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1)
MCFG_SCREEN_UPDATE_STATIC(luckywld)
MCFG_SCREEN_UPDATE_DRIVER(namcos2_state, screen_update_luckywld)
MCFG_GFXDECODE(luckywld)
MCFG_PALETTE_LENGTH(0x2000)
MCFG_VIDEO_START(luckywld)
MCFG_VIDEO_START_OVERRIDE(namcos2_state, video_start_luckywld)
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -1952,12 +1901,12 @@ static MACHINE_CONFIG_START( metlhawk, namcos2_state )
MCFG_SCREEN_REFRESH_RATE( (49152000.0 / 8) / (384 * 264) )
MCFG_SCREEN_SIZE(384, 264)
MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1)
MCFG_SCREEN_UPDATE_STATIC(metlhawk)
MCFG_SCREEN_UPDATE_DRIVER(namcos2_state, screen_update_metlhawk)
MCFG_GFXDECODE(metlhawk)
MCFG_PALETTE_LENGTH(0x2000)
MCFG_VIDEO_START(metlhawk)
MCFG_VIDEO_START_OVERRIDE(namcos2_state, video_start_metlhawk)
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -1090,7 +1090,7 @@ READ16_MEMBER(namcos21_state::NAMCO_C139_SCI_register_r){ return 0; }
static ADDRESS_MAP_START( namcos21_68k_master, AS_PROGRAM, 16, namcos21_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM /* private work RAM */
AM_RANGE(0x180000, 0x183fff) AM_READWRITE_LEGACY(NAMCOS2_68K_eeprom_R,NAMCOS2_68K_eeprom_W)// AM_BASE_LEGACY(&namcos2_eeprom) AM_SIZE_LEGACY(&namcos2_eeprom_size)
AM_RANGE(0x180000, 0x183fff) AM_READWRITE_LEGACY(NAMCOS2_68K_eeprom_R,NAMCOS2_68K_eeprom_W)
AM_RANGE(0x1c0000, 0x1fffff) AM_READWRITE_LEGACY(namcos2_68k_master_C148_r,namcos2_68k_master_C148_w)
NAMCO21_68K_COMMON
ADDRESS_MAP_END
@ -1320,7 +1320,7 @@ WRITE16_MEMBER(namcos21_state::winrun_dspcomram_control_w)
static ADDRESS_MAP_START( am_master_winrun, AS_PROGRAM, 16, namcos21_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM /* work RAM */
AM_RANGE(0x180000, 0x183fff) AM_READWRITE_LEGACY(NAMCOS2_68K_eeprom_R,NAMCOS2_68K_eeprom_W)// AM_BASE_LEGACY(&namcos2_eeprom) AM_SIZE_LEGACY(&namcos2_eeprom_size)
AM_RANGE(0x180000, 0x183fff) AM_READWRITE_LEGACY(NAMCOS2_68K_eeprom_R,NAMCOS2_68K_eeprom_W)
AM_RANGE(0x1c0000, 0x1fffff) AM_READWRITE_LEGACY(namcos2_68k_master_C148_r,namcos2_68k_master_C148_w)
AM_RANGE(0x250000, 0x25ffff) AM_RAM AM_SHARE("winrun_polydata")
AM_RANGE(0x260000, 0x26ffff) AM_RAM /* unused? */
@ -1429,7 +1429,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( driveyes_68k_master, AS_PROGRAM, 16, namcos21_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM /* private work RAM */
AM_RANGE(0x180000, 0x183fff) AM_READWRITE_LEGACY(NAMCOS2_68K_eeprom_R,NAMCOS2_68K_eeprom_W)// AM_BASE_LEGACY(&namcos2_eeprom) AM_SIZE_LEGACY(&namcos2_eeprom_size)
AM_RANGE(0x180000, 0x183fff) AM_READWRITE_LEGACY(NAMCOS2_68K_eeprom_R,NAMCOS2_68K_eeprom_W)
AM_RANGE(0x1c0000, 0x1fffff) AM_READWRITE_LEGACY(namcos2_68k_master_C148_r,namcos2_68k_master_C148_w)
AM_RANGE(0x250000, 0x25ffff) AM_RAM AM_SHARE("winrun_polydata")
AM_RANGE(0x280000, 0x281fff) AM_WRITE(winrun_dspbios_w) AM_SHARE("winrun_dspbios")

View File

@ -110,13 +110,6 @@ WRITE32_HANDLER( namco_tilemapvideoram32_le_w );
READ32_HANDLER( namco_tilemapcontrol32_le_r );
WRITE32_HANDLER( namco_tilemapcontrol32_le_w );
/***********************************************************************************/
/* Namco System II Sprite Rendering */
void namcos2_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri, int control );
void namcos2_draw_sprites_metalhawk( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri );
/***********************************************************************************/
/* C355 Motion Object Emulation */

View File

@ -85,28 +85,106 @@ enum
NAMCOFL_FINAL_LAP_R
};
class namcos2_state : public driver_device
{
public:
namcos2_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_dpram(*this, "dpram"),
m_spriteram(*this, "spriteram"),
m_paletteram(*this, "paletteram"),
m_rozram(*this, "rozram")
{ }
DECLARE_READ16_MEMBER(dpram_word_r);
DECLARE_WRITE16_MEMBER(dpram_word_w);
DECLARE_READ8_MEMBER(dpram_byte_r);
DECLARE_WRITE8_MEMBER(dpram_byte_w);
DECLARE_DRIVER_INIT(cosmogng);
DECLARE_DRIVER_INIT(sgunner2);
DECLARE_DRIVER_INIT(kyukaidk);
DECLARE_DRIVER_INIT(bubbletr);
DECLARE_DRIVER_INIT(suzuk8h2);
DECLARE_DRIVER_INIT(burnforc);
DECLARE_DRIVER_INIT(gollygho);
DECLARE_DRIVER_INIT(rthun2j);
DECLARE_DRIVER_INIT(sws);
DECLARE_DRIVER_INIT(finehour);
DECLARE_DRIVER_INIT(finallap);
DECLARE_DRIVER_INIT(dirtfoxj);
DECLARE_DRIVER_INIT(marvlanj);
DECLARE_DRIVER_INIT(sws92);
DECLARE_DRIVER_INIT(dsaber);
DECLARE_DRIVER_INIT(assault);
DECLARE_DRIVER_INIT(mirninja);
DECLARE_DRIVER_INIT(finalap2);
DECLARE_DRIVER_INIT(valkyrie);
DECLARE_DRIVER_INIT(fourtrax);
DECLARE_DRIVER_INIT(finalap3);
DECLARE_DRIVER_INIT(luckywld);
DECLARE_DRIVER_INIT(assaultj);
DECLARE_DRIVER_INIT(dsaberj);
DECLARE_DRIVER_INIT(suzuka8h);
DECLARE_DRIVER_INIT(phelios);
DECLARE_DRIVER_INIT(sws93);
DECLARE_DRIVER_INIT(metlhawk);
DECLARE_DRIVER_INIT(sws92g);
DECLARE_DRIVER_INIT(assaultp_hack);
DECLARE_DRIVER_INIT(assaultp);
DECLARE_DRIVER_INIT(ordyne);
DECLARE_DRIVER_INIT(marvland);
DECLARE_DRIVER_INIT(rthun2);
virtual void video_start();
void video_start_finallap();
void video_start_luckywld();
void video_start_metlhawk();
void video_start_sgunner();
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_finallap(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_luckywld(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_metlhawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_sgunner(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_READ16_MEMBER( paletteram_word_r );
DECLARE_WRITE16_MEMBER( paletteram_word_w );
DECLARE_READ16_MEMBER( spriteram_word_r );
DECLARE_WRITE16_MEMBER( spriteram_word_w );
DECLARE_READ16_MEMBER( rozram_word_r );
DECLARE_WRITE16_MEMBER( rozram_word_w );
DECLARE_READ16_MEMBER( roz_ctrl_word_r );
DECLARE_WRITE16_MEMBER( roz_ctrl_word_w );
void update_palette();
void apply_clip( rectangle &clip, const rectangle &cliprect );
void draw_roz(bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri, int control );
void draw_sprites_metalhawk(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri );
UINT16 get_palette_register( int which );
required_shared_ptr<UINT8> m_dpram; /* 2Kx8 */
optional_shared_ptr<UINT16> m_spriteram;
required_shared_ptr<UINT16> m_paletteram;
optional_shared_ptr<UINT16> m_rozram;
UINT16 m_roz_ctrl[0x8];
tilemap_t *m_tilemap_roz;
};
/*----------- defined in video/namcos2.c -----------*/
#define NAMCOS21_NUM_COLORS 0x8000
VIDEO_START( namcos2 );
SCREEN_UPDATE_IND16( namcos2_default );
VIDEO_START( finallap );
SCREEN_UPDATE_IND16( finallap );
VIDEO_START( luckywld );
SCREEN_UPDATE_IND16( luckywld );
VIDEO_START( metlhawk );
SCREEN_UPDATE_IND16( metlhawk );
VIDEO_START( sgunner );
SCREEN_UPDATE_IND16( sgunner );
extern UINT16 *namcos2_sprite_ram;
WRITE16_HANDLER( namcos2_sprite_ram_w );
READ16_HANDLER( namcos2_sprite_ram_r );
int namcos2_GetPosIrqScanline( running_machine &machine );
@ -116,24 +194,13 @@ READ16_HANDLER( namcos2_gfx_ctrl_r );
/**************************************************************/
/* Shared video palette function handlers */
/**************************************************************/
READ16_HANDLER( namcos2_68k_video_palette_r );
WRITE16_HANDLER( namcos2_68k_video_palette_w );
#define VIRTUAL_PALETTE_BANKS 30
extern UINT16 *namcos2_68k_palette_ram;
extern size_t namcos2_68k_palette_size;
/**************************************************************/
/* ROZ - Rotate & Zoom memory function handlers */
/**************************************************************/
WRITE16_HANDLER( namcos2_68k_roz_ctrl_w );
READ16_HANDLER( namcos2_68k_roz_ctrl_r );
WRITE16_HANDLER( namcos2_68k_roz_ram_w );
READ16_HANDLER( namcos2_68k_roz_ram_r );
extern UINT16 *namcos2_68k_roz_ram;
/*----------- defined in machine/namcos2.c -----------*/
extern void (*namcos2_kickstart)(running_machine &machine, int internal);

View File

@ -5,15 +5,6 @@
#include "includes/namcos2.h"
#include "includes/namcoic.h"
UINT16 *namcos2_sprite_ram;
UINT16 *namcos2_68k_palette_ram;
size_t namcos2_68k_palette_size;
//size_t namcos2_68k_roz_ram_size;
UINT16 *namcos2_68k_roz_ram;
static UINT16 namcos2_68k_roz_ctrl[0x8];
static tilemap_t *tilemap_roz;
static void
TilemapCB( running_machine &machine, UINT16 code, int *tile, int *mask )
{
@ -58,7 +49,7 @@ WRITE16_HANDLER( namcos2_gfx_ctrl_w )
static TILE_GET_INFO( get_tile_info_roz )
{
int tile = namcos2_68k_roz_ram[tile_index];
int tile = machine.driver_data<namcos2_state>()->m_rozram[tile_index];
SET_TILE_INFO(3,tile,0/*color*/,0);
} /* get_tile_info_roz */
@ -244,24 +235,23 @@ DrawRozHelper(
}
} /* DrawRozHelper */
static void
DrawROZ(bitmap_ind16 &bitmap,const rectangle &cliprect)
void namcos2_state::draw_roz(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
const int xoffset = 38,yoffset = 0;
struct RozParam rozParam;
rozParam.color = (namcos2_gfx_ctrl & 0x0f00);
rozParam.incxx = (INT16)namcos2_68k_roz_ctrl[0];
rozParam.incxy = (INT16)namcos2_68k_roz_ctrl[1];
rozParam.incyx = (INT16)namcos2_68k_roz_ctrl[2];
rozParam.incyy = (INT16)namcos2_68k_roz_ctrl[3];
rozParam.startx = (INT16)namcos2_68k_roz_ctrl[4];
rozParam.starty = (INT16)namcos2_68k_roz_ctrl[5];
rozParam.incxx = (INT16)m_roz_ctrl[0];
rozParam.incxy = (INT16)m_roz_ctrl[1];
rozParam.incyx = (INT16)m_roz_ctrl[2];
rozParam.incyy = (INT16)m_roz_ctrl[3];
rozParam.startx = (INT16)m_roz_ctrl[4];
rozParam.starty = (INT16)m_roz_ctrl[5];
rozParam.size = 2048;
rozParam.wrap = 1;
switch( namcos2_68k_roz_ctrl[7] )
switch( m_roz_ctrl[7] )
{
case 0x4400: /* (2048x2048) */
break;
@ -292,28 +282,28 @@ DrawROZ(bitmap_ind16 &bitmap,const rectangle &cliprect)
rozParam.incyx<<=8;
rozParam.incyy<<=8;
DrawRozHelper( bitmap, tilemap_roz, cliprect, &rozParam );
DrawRozHelper( bitmap, m_tilemap_roz, cliprect, &rozParam );
}
READ16_HANDLER(namcos2_68k_roz_ctrl_r)
READ16_MEMBER(namcos2_state::roz_ctrl_word_r)
{
return namcos2_68k_roz_ctrl[offset];
return m_roz_ctrl[offset];
}
WRITE16_HANDLER( namcos2_68k_roz_ctrl_w )
WRITE16_MEMBER( namcos2_state::roz_ctrl_word_w )
{
COMBINE_DATA(&namcos2_68k_roz_ctrl[offset]);
COMBINE_DATA(&m_roz_ctrl[offset]);
}
READ16_HANDLER( namcos2_68k_roz_ram_r )
READ16_MEMBER( namcos2_state::rozram_word_r )
{
return namcos2_68k_roz_ram[offset];
return m_rozram[offset];
}
WRITE16_HANDLER( namcos2_68k_roz_ram_w )
WRITE16_MEMBER( namcos2_state::rozram_word_w )
{
COMBINE_DATA(&namcos2_68k_roz_ram[offset]);
tilemap_roz->mark_tile_dirty(offset);
COMBINE_DATA(&m_rozram[offset]);
m_tilemap_roz->mark_tile_dirty(offset);
// if( space->machine().input().code_pressed(KEYCODE_Q) )
// {
// debugger_break(space->machine());
@ -322,14 +312,13 @@ WRITE16_HANDLER( namcos2_68k_roz_ram_w )
/**************************************************************************/
static UINT16
GetPaletteRegister( int which )
inline UINT16 namcos2_state::get_palette_register( int which )
{
const UINT16 *source = &namcos2_68k_palette_ram[0x3000/2];
const UINT16 *source = &m_paletteram[0x3000/2];
return ((source[which*2]&0xff)<<8) | (source[which*2+1]&0xff);
}
READ16_HANDLER( namcos2_68k_video_palette_r )
READ16_MEMBER( namcos2_state::paletteram_word_r )
{
if( (offset&0x1800) == 0x1800 )
{
@ -339,10 +328,10 @@ READ16_HANDLER( namcos2_68k_video_palette_r )
/* registers 6,7: unmapped? */
if (offset > 0x180b) return 0xff;
}
return namcos2_68k_palette_ram[offset];
return m_paletteram[offset];
} /* namcos2_68k_video_palette_r */
WRITE16_HANDLER( namcos2_68k_video_palette_w )
WRITE16_MEMBER( namcos2_state::paletteram_word_w )
{
if( (offset&0x1800) == 0x1800 )
{
@ -366,14 +355,14 @@ WRITE16_HANDLER( namcos2_68k_video_palette_w )
luckywld: $00E8 at titlescreen, $00A0 in game and $0118 if in tunnel
suzuka8h1/2: $00E8 and $00A0 */
case 0x1808: case 0x1809:
// if (data^namcos2_68k_palette_ram[offset]) printf("%04X\n",data<<((~offset&1)<<3)|namcos2_68k_palette_ram[offset^1]<<((offset&1)<<3));
// if (data^m_paletteram[offset]) printf("%04X\n",data<<((~offset&1)<<3)|m_paletteram[offset^1]<<((offset&1)<<3));
break;
/* register 5: POSIRQ scanline (only 8 bits used) */
/*case 0x180a:*/ case 0x180b:
if (data^namcos2_68k_palette_ram[offset]) {
namcos2_68k_palette_ram[offset] = data;
namcos2_adjust_posirq_timer(space->machine(),namcos2_GetPosIrqScanline(space->machine()));
if (data^m_paletteram[offset]) {
m_paletteram[offset] = data;
namcos2_adjust_posirq_timer(machine(),namcos2_GetPosIrqScanline(machine()));
}
break;
@ -381,11 +370,11 @@ WRITE16_HANDLER( namcos2_68k_video_palette_w )
default: break;
}
namcos2_68k_palette_ram[offset] = data;
m_paletteram[offset] = data;
}
else
{
COMBINE_DATA(&namcos2_68k_palette_ram[offset]);
COMBINE_DATA(&m_paletteram[offset]);
}
} /* namcos2_68k_video_palette_w */
@ -393,11 +382,11 @@ WRITE16_HANDLER( namcos2_68k_video_palette_w )
int
namcos2_GetPosIrqScanline( running_machine &machine )
{
return (GetPaletteRegister(5) - 32) & 0xff;
return (machine.driver_data<namcos2_state>()->get_palette_register(5) - 32) & 0xff;
} /* namcos2_GetPosIrqScanline */
static void
UpdatePalette( running_machine &machine )
inline void
namcos2_state::update_palette()
{
int bank;
for( bank=0; bank<0x20; bank++ )
@ -407,14 +396,14 @@ UpdatePalette( running_machine &machine )
int i;
for( i=0; i<256; i++ )
{
int r = namcos2_68k_palette_ram[offset | 0x0000] & 0x00ff;
int g = namcos2_68k_palette_ram[offset | 0x0800] & 0x00ff;
int b = namcos2_68k_palette_ram[offset | 0x1000] & 0x00ff;
palette_set_color(machine,pen++,MAKE_RGB(r,g,b));
int r = m_paletteram[offset | 0x0000] & 0x00ff;
int g = m_paletteram[offset | 0x0800] & 0x00ff;
int b = m_paletteram[offset | 0x1000] & 0x00ff;
palette_set_color(machine(),pen++,MAKE_RGB(r,g,b));
offset++;
}
}
} /* UpdatePalette */
} /* update_palette */
/**************************************************************************/
@ -429,48 +418,47 @@ DrawSpriteInit( running_machine &machine )
}
}
WRITE16_HANDLER( namcos2_sprite_ram_w )
WRITE16_MEMBER( namcos2_state::spriteram_word_w )
{
COMBINE_DATA(&namcos2_sprite_ram[offset]);
COMBINE_DATA(&m_spriteram[offset]);
}
READ16_HANDLER( namcos2_sprite_ram_r )
READ16_MEMBER( namcos2_state::spriteram_word_r )
{
return namcos2_sprite_ram[offset];
return m_spriteram[offset];
}
/**************************************************************************/
VIDEO_START( namcos2 )
void namcos2_state::video_start()
{
namco_tilemap_init(machine,2,machine.root_device().memregion("gfx4")->base(),TilemapCB);
tilemap_roz = tilemap_create(machine, get_tile_info_roz,tilemap_scan_rows,8,8,256,256);
tilemap_roz->set_transparent_pen(0xff);
DrawSpriteInit(machine);
namco_tilemap_init(machine(), 2, memregion("gfx4")->base(), TilemapCB);
m_tilemap_roz = tilemap_create(machine(), get_tile_info_roz,tilemap_scan_rows,8,8,256,256);
m_tilemap_roz->set_transparent_pen(0xff);
DrawSpriteInit(machine());
}
static void
ApplyClip( rectangle &clip, const rectangle &cliprect )
void namcos2_state::apply_clip( rectangle &clip, const rectangle &cliprect )
{
clip.min_x = GetPaletteRegister(0) - 0x4a;
clip.max_x = GetPaletteRegister(1) - 0x4a - 1;
clip.min_y = GetPaletteRegister(2) - 0x21;
clip.max_y = GetPaletteRegister(3) - 0x21 - 1;
clip.min_x = get_palette_register(0) - 0x4a;
clip.max_x = get_palette_register(1) - 0x4a - 1;
clip.min_y = get_palette_register(2) - 0x21;
clip.max_y = get_palette_register(3) - 0x21 - 1;
/* intersect with master clip rectangle */
clip &= cliprect;
} /* ApplyClip */
} /* apply_clip */
SCREEN_UPDATE_IND16( namcos2_default )
UINT32 namcos2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
rectangle clip;
int pri;
UpdatePalette(screen.machine());
bitmap.fill(get_black_pen(screen.machine()), cliprect );
ApplyClip( clip, cliprect );
update_palette();
bitmap.fill(get_black_pen(machine()), cliprect );
apply_clip( clip, cliprect );
/* HACK: enable ROZ layer only if it has priority > 0 */
tilemap_roz->enable((namcos2_gfx_ctrl & 0x7000) ? 1 : 0);
m_tilemap_roz->enable((namcos2_gfx_ctrl & 0x7000) ? 1 : 0);
for( pri=0; pri<16; pri++ )
{
@ -480,9 +468,9 @@ SCREEN_UPDATE_IND16( namcos2_default )
if( ((namcos2_gfx_ctrl & 0x7000) >> 12)==pri/2 )
{
DrawROZ(bitmap,clip);
draw_roz(bitmap,clip);
}
namcos2_draw_sprites(screen.machine(), bitmap, clip, pri/2, namcos2_gfx_ctrl );
draw_sprites(bitmap, clip, pri/2, namcos2_gfx_ctrl );
}
}
return 0;
@ -490,21 +478,21 @@ SCREEN_UPDATE_IND16( namcos2_default )
/**************************************************************************/
VIDEO_START( finallap )
void namcos2_state::video_start_finallap()
{
namco_tilemap_init(machine,2,machine.root_device().memregion("gfx4")->base(),TilemapCB);
DrawSpriteInit(machine);
namco_road_init(machine, 3);
namco_tilemap_init(machine(),2,memregion("gfx4")->base(),TilemapCB);
DrawSpriteInit(machine());
namco_road_init(machine(), 3);
}
SCREEN_UPDATE_IND16( finallap )
UINT32 namcos2_state::screen_update_finallap(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
rectangle clip;
int pri;
UpdatePalette(screen.machine());
bitmap.fill(get_black_pen(screen.machine()), cliprect );
ApplyClip( clip, cliprect );
update_palette();
bitmap.fill(get_black_pen(machine()), cliprect );
apply_clip( clip, cliprect );
for( pri=0; pri<16; pri++ )
{
@ -512,36 +500,36 @@ SCREEN_UPDATE_IND16( finallap )
{
namco_tilemap_draw( bitmap, clip, pri/2 );
}
namco_road_draw(screen.machine(), bitmap,clip,pri );
namcos2_draw_sprites(screen.machine(), bitmap,clip,pri,namcos2_gfx_ctrl );
namco_road_draw(machine(), bitmap,clip,pri );
draw_sprites(bitmap,clip,pri,namcos2_gfx_ctrl );
}
return 0;
}
/**************************************************************************/
VIDEO_START( luckywld )
void namcos2_state::video_start_luckywld()
{
namco_tilemap_init(machine,2,machine.root_device().memregion("gfx4")->base(),TilemapCB);
namco_obj_init( machine, 0, 0x0, NULL );
namco_tilemap_init(machine(),2,memregion("gfx4")->base(),TilemapCB);
namco_obj_init( machine(), 0, 0x0, NULL );
if( namcos2_gametype==NAMCOS2_LUCKY_AND_WILD )
{
namco_roz_init( machine, 1, "gfx5" );
namco_roz_init( machine(), 1, "gfx5" );
}
if( namcos2_gametype!=NAMCOS2_STEEL_GUNNER_2 )
{
namco_road_init(machine, 3);
namco_road_init(machine(), 3);
}
} /* luckywld */
SCREEN_UPDATE_IND16( luckywld )
UINT32 namcos2_state::screen_update_luckywld(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
rectangle clip;
int pri;
UpdatePalette(screen.machine());
bitmap.fill(get_black_pen(screen.machine()), cliprect );
ApplyClip( clip, cliprect );
update_palette();
bitmap.fill(get_black_pen(machine()), cliprect );
apply_clip( clip, cliprect );
for( pri=0; pri<16; pri++ )
{
@ -549,37 +537,37 @@ SCREEN_UPDATE_IND16( luckywld )
{
namco_tilemap_draw( bitmap, clip, pri/2 );
}
namco_road_draw(screen.machine(), bitmap,clip,pri );
namco_road_draw(machine(), bitmap,clip,pri );
if( namcos2_gametype==NAMCOS2_LUCKY_AND_WILD )
{
namco_roz_draw( bitmap, clip, pri );
}
namco_obj_draw(screen.machine(), bitmap, clip, pri );
namco_obj_draw(machine(), bitmap, clip, pri );
}
return 0;
}
/**************************************************************************/
VIDEO_START( sgunner )
void namcos2_state::video_start_sgunner()
{
namco_tilemap_init(machine,2,machine.root_device().memregion("gfx4")->base(),TilemapCB);
namco_obj_init( machine, 0, 0x0, NULL );
namco_tilemap_init(machine(),2,memregion("gfx4")->base(),TilemapCB);
namco_obj_init( machine(), 0, 0x0, NULL );
}
SCREEN_UPDATE_IND16( sgunner )
UINT32 namcos2_state::screen_update_sgunner(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
rectangle clip;
int pri;
UpdatePalette(screen.machine());
bitmap.fill(get_black_pen(screen.machine()), cliprect );
ApplyClip( clip, cliprect );
update_palette();
bitmap.fill(get_black_pen(machine()), cliprect );
apply_clip( clip, cliprect );
for( pri=0; pri<8; pri++ )
{
namco_tilemap_draw( bitmap, clip, pri );
namco_obj_draw(screen.machine(), bitmap, clip, pri );
namco_obj_draw(machine(), bitmap, clip, pri );
}
return 0;
}
@ -587,20 +575,20 @@ SCREEN_UPDATE_IND16( sgunner )
/**************************************************************************/
VIDEO_START( metlhawk )
void namcos2_state::video_start_metlhawk()
{
namco_tilemap_init(machine,2,machine.root_device().memregion("gfx4")->base(),TilemapCB);
namco_roz_init( machine, 1, "gfx5" );
namco_tilemap_init(machine(),2,memregion("gfx4")->base(),TilemapCB);
namco_roz_init( machine(), 1, "gfx5" );
}
SCREEN_UPDATE_IND16( metlhawk )
UINT32 namcos2_state::screen_update_metlhawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
rectangle clip;
int pri;
UpdatePalette(screen.machine());
bitmap.fill(get_black_pen(screen.machine()), cliprect );
ApplyClip( clip, cliprect );
update_palette();
bitmap.fill(get_black_pen(machine()), cliprect );
apply_clip( clip, cliprect );
for( pri=0; pri<16; pri++ )
{
@ -609,7 +597,7 @@ SCREEN_UPDATE_IND16( metlhawk )
namco_tilemap_draw( bitmap, clip, pri/2 );
}
namco_roz_draw( bitmap, clip, pri );
namcos2_draw_sprites_metalhawk(screen.machine(), bitmap,clip,pri );
draw_sprites_metalhawk(bitmap,clip,pri );
}
return 0;
}