mirror of
https://github.com/holub/mame
synced 2025-06-06 21:03:47 +03:00
WIP Namco System 2/21/etc cleanup/modernization.
This commit is contained in:
parent
629a101739
commit
f6c7aa39ba
@ -638,13 +638,16 @@ private:
|
||||
|
||||
// function definition for a get info callback
|
||||
#define TILE_GET_INFO(_name) void _name(running_machine &machine, tile_data &tileinfo, tilemap_memory_index tile_index, void *param)
|
||||
#define TILE_GET_INFO_MEMBER(_name) void _name(tile_data &tileinfo, tilemap_memory_index tile_index, void *param)
|
||||
#define TILE_GET_INFO_DEVICE(_name) void _name(device_t *device, tile_data &tileinfo, tilemap_memory_index tile_index, void *param)
|
||||
|
||||
// function definition for a logical-to-memory mapper
|
||||
#define TILEMAP_MAPPER(_name) tilemap_memory_index _name(running_machine &machine, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
|
||||
#define TILEMAP_MAPPER_MEMBER(_name) tilemap_memory_index _name(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
|
||||
|
||||
// useful macro inside of a TILE_GET_INFO callback to set tile information
|
||||
#define SET_TILE_INFO(GFX,CODE,COLOR,FLAGS) tileinfo.set(machine, GFX, CODE, COLOR, FLAGS)
|
||||
#define SET_TILE_INFO_MEMBER(GFX,CODE,COLOR,FLAGS) tileinfo.set(machine(), GFX, CODE, COLOR, FLAGS)
|
||||
#define SET_TILE_INFO_DEVICE(GFX,CODE,COLOR,FLAGS) tileinfo.set(device->machine(), GFX, CODE, COLOR, FLAGS)
|
||||
|
||||
// Macros for setting tile attributes in the TILE_GET_INFO callback:
|
||||
|
@ -133,11 +133,11 @@ better notes (complete chip lists) for each board still needed
|
||||
#include "rendlay.h"
|
||||
|
||||
|
||||
class gal3_state : public driver_device
|
||||
class gal3_state : public namcos2_shared_state
|
||||
{
|
||||
public:
|
||||
gal3_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag) ,
|
||||
: namcos2_shared_state(mconfig, type, tag) ,
|
||||
m_nvmem(*this, "nvmem"),
|
||||
m_rso_shared_ram(*this, "rso_shared_ram"){ }
|
||||
|
||||
@ -166,10 +166,10 @@ static VIDEO_START(gal3)
|
||||
gal3_state *state = machine.driver_data<gal3_state>();
|
||||
state->m_generic_paletteram_16.allocate(0x10000);
|
||||
|
||||
namco_obj_init(machine,
|
||||
state->c355_obj_init(
|
||||
0, /* gfx bank */
|
||||
0xf, /* reverse palette mapping */
|
||||
NULL );
|
||||
namcos2_shared_state::c355_obj_code2tile_delegate() );
|
||||
|
||||
}
|
||||
|
||||
@ -208,14 +208,14 @@ static SCREEN_UPDATE_RGB32(gal3)
|
||||
|
||||
for( pri=0; pri<pivot; pri++ )
|
||||
{
|
||||
namco_obj_draw(screen.machine(), bitmap, cliprect, pri );
|
||||
state->c355_obj_draw(bitmap, cliprect, pri);
|
||||
}
|
||||
|
||||
/* CopyVisiblePolyFrameBuffer( bitmap, cliprect,0,0x7fbf );
|
||||
|
||||
for( pri=pivot; pri<15; pri++ )
|
||||
{
|
||||
namco_obj_draw(screen.machine(), bitmap, cliprect, pri );
|
||||
state->c355_obj_draw(bitmap, cliprect, pri);
|
||||
}*/
|
||||
|
||||
// CPU Diag LEDs
|
||||
@ -391,14 +391,14 @@ static ADDRESS_MAP_START( cpu_slv_map, AS_PROGRAM, 32, gal3_state )
|
||||
/// AM_RANGE(0xf1440000, 0xf1440003) AM_READWRITE_LEGACY(pointram_data_r,pointram_data_w)
|
||||
/// AM_RANGE(0x440002, 0x47ffff) AM_WRITENOP /* (frame buffer?) */
|
||||
/// AM_RANGE(0xf1480000, 0xf14807ff) AM_READWRITE_LEGACY(namcos21_depthcue_r,namcos21_depthcue_w)
|
||||
AM_RANGE(0xf1700000, 0xf170ffff) AM_READWRITE_LEGACY(namco_obj32_r,namco_obj32_w)
|
||||
AM_RANGE(0xf1720000, 0xf1720007) AM_READWRITE_LEGACY(namco_spritepos32_r,namco_spritepos32_w)
|
||||
AM_RANGE(0xf1700000, 0xf170ffff) AM_READWRITE16(c355_obj_ram_r,c355_obj_ram_w,0xffffffff) AM_SHARE("objram")
|
||||
AM_RANGE(0xf1720000, 0xf1720007) AM_READWRITE16(c355_obj_position_r,c355_obj_position_w,0xffffffff)
|
||||
AM_RANGE(0xf1740000, 0xf175ffff) AM_READWRITE(paletteram32_r,paletteram32_w)
|
||||
AM_RANGE(0xf1760000, 0xf1760003) AM_READWRITE(namcos21_video_enable_r,namcos21_video_enable_w)
|
||||
|
||||
AM_RANGE(0xf2200000, 0xf220ffff) AM_RAM
|
||||
AM_RANGE(0xf2700000, 0xf270ffff) AM_RAM //AM_READWRITE_LEGACY(namco_obj16_r,namco_obj16_w)
|
||||
AM_RANGE(0xf2720000, 0xf2720007) AM_RAM //AM_READWRITE_LEGACY(namco_spritepos16_r,namco_spritepos16_w)
|
||||
AM_RANGE(0xf2700000, 0xf270ffff) AM_RAM //AM_READWRITE16(c355_obj_ram_r,c355_obj_ram_w,0xffffffff) AM_SHARE("objram")
|
||||
AM_RANGE(0xf2720000, 0xf2720007) AM_RAM //AM_READWRITE16(c355_obj_position_r,c355_obj_position_w,0xffffffff)
|
||||
AM_RANGE(0xf2740000, 0xf275ffff) AM_RAM //AM_READWRITE(paletteram16_r,paletteram16_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0xf2760000, 0xf2760003) AM_RAM //AM_READWRITE(namcos21_video_enable_r,namcos21_video_enable_w)
|
||||
ADDRESS_MAP_END
|
||||
|
@ -156,7 +156,6 @@ OSC3: 48.384MHz
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/namcos2.h"
|
||||
#include "includes/namcoic.h"
|
||||
#include "cpu/i960/i960.h"
|
||||
#include "cpu/m37710/m37710.h"
|
||||
@ -236,9 +235,9 @@ static ADDRESS_MAP_START( namcofl_mem, AS_PROGRAM, 32, namcofl_state )
|
||||
AM_RANGE(0x30400000, 0x3040ffff) AM_RAM_WRITE(namcofl_paletteram_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x30800000, 0x3080ffff) AM_READWRITE_LEGACY(namco_tilemapvideoram32_le_r, namco_tilemapvideoram32_le_w )
|
||||
AM_RANGE(0x30a00000, 0x30a0003f) AM_READWRITE_LEGACY(namco_tilemapcontrol32_le_r, namco_tilemapcontrol32_le_w )
|
||||
AM_RANGE(0x30c00000, 0x30c1ffff) AM_READWRITE_LEGACY(namco_rozvideoram32_le_r,namco_rozvideoram32_le_w)
|
||||
AM_RANGE(0x30d00000, 0x30d0001f) AM_READWRITE_LEGACY(namco_rozcontrol32_le_r,namco_rozcontrol32_le_w)
|
||||
AM_RANGE(0x30e00000, 0x30e1ffff) AM_READWRITE_LEGACY(namco_obj32_le_r, namco_obj32_le_w)
|
||||
AM_RANGE(0x30c00000, 0x30c1ffff) AM_READWRITE16(c169_roz_videoram_r,c169_roz_videoram_w,0xffffffff) AM_SHARE("rozvideoram")
|
||||
AM_RANGE(0x30d00000, 0x30d0001f) AM_READWRITE16(c169_roz_control_r,c169_roz_control_w,0xffffffff)
|
||||
AM_RANGE(0x30e00000, 0x30e1ffff) AM_READWRITE16(c355_obj_ram_r,c355_obj_ram_w,0xffffffff) AM_SHARE("objram")
|
||||
AM_RANGE(0x30f00000, 0x30f0000f) AM_RAM /* NebulaM2 code says this is int enable at 0000, int request at 0004, but doesn't do much about it */
|
||||
AM_RANGE(0x40000000, 0x4000005f) AM_READWRITE(namcofl_sysreg_r, namcofl_sysreg_w )
|
||||
AM_RANGE(0xfffffffc, 0xffffffff) AM_READ(fl_unk1_r )
|
||||
@ -818,13 +817,13 @@ static void namcofl_common_init(running_machine &machine)
|
||||
DRIVER_INIT_MEMBER(namcofl_state,speedrcr)
|
||||
{
|
||||
namcofl_common_init(machine());
|
||||
namcos2_gametype = NAMCOFL_SPEED_RACER;
|
||||
m_gametype = NAMCOFL_SPEED_RACER;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcofl_state,finalapr)
|
||||
{
|
||||
namcofl_common_init(machine());
|
||||
namcos2_gametype = NAMCOFL_FINAL_LAP_R;
|
||||
m_gametype = NAMCOFL_FINAL_LAP_R;
|
||||
}
|
||||
|
||||
GAME ( 1995, speedrcr, 0, namcofl, speedrcr, namcofl_state, speedrcr, ROT0, "Namco", "Speed Racer", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
|
||||
|
@ -3,8 +3,6 @@
|
||||
#include "includes/namcoic.h"
|
||||
|
||||
/**************************************************************************************/
|
||||
static int mPalXOR; /* XOR'd with palette select register; needed for System21 */
|
||||
|
||||
static struct
|
||||
{
|
||||
UINT16 control[0x40/2];
|
||||
@ -265,7 +263,7 @@ WRITE32_HANDLER( namco_tilemapvideoram32_le_w )
|
||||
|
||||
/**************************************************************************************/
|
||||
|
||||
static void zdrawgfxzoom(
|
||||
void namcos2_shared_state::zdrawgfxzoom(
|
||||
bitmap_ind16 &dest_bmp,const rectangle &clip,const gfx_element *gfx,
|
||||
UINT32 code,UINT32 color,int flipx,int flipy,int sx,int sy,
|
||||
int scalex, int scaley, int zpos )
|
||||
@ -347,7 +345,7 @@ static void zdrawgfxzoom(
|
||||
UINT16 *dest = &dest_bmp.pix16(y);
|
||||
UINT8 *pri = &priority_bitmap.pix8(y);
|
||||
int x, x_index = x_index_base;
|
||||
if( mPalXOR )
|
||||
if( m_c355_obj_palxor )
|
||||
{
|
||||
for( x=sx; x<ex; x++ )
|
||||
{
|
||||
@ -407,7 +405,7 @@ static void zdrawgfxzoom(
|
||||
}
|
||||
} /* zdrawgfxzoom */
|
||||
|
||||
static void zdrawgfxzoom(
|
||||
void namcos2_shared_state::zdrawgfxzoom(
|
||||
bitmap_rgb32 &dest_bmp,const rectangle &clip,const gfx_element *gfx,
|
||||
UINT32 code,UINT32 color,int flipx,int flipy,int sx,int sy,
|
||||
int scalex, int scaley, int zpos )
|
||||
@ -618,31 +616,13 @@ void namcos2_state::draw_sprites_metalhawk(bitmap_ind16 &bitmap, const rectangle
|
||||
|
||||
/**************************************************************************************/
|
||||
|
||||
static UINT16 mSpritePos[4];
|
||||
static UINT16 *m_spriteram;
|
||||
|
||||
WRITE16_HANDLER( namco_spritepos16_w )
|
||||
WRITE16_MEMBER( namcos2_shared_state::c355_obj_position_w )
|
||||
{
|
||||
COMBINE_DATA( &mSpritePos[offset] );
|
||||
COMBINE_DATA(&m_c355_obj_position[offset]);
|
||||
}
|
||||
READ16_HANDLER( namco_spritepos16_r )
|
||||
READ16_MEMBER( namcos2_shared_state::c355_obj_position_r )
|
||||
{
|
||||
return mSpritePos[offset];
|
||||
}
|
||||
|
||||
WRITE32_HANDLER( namco_spritepos32_w )
|
||||
{
|
||||
UINT32 v;
|
||||
offset *= 2;
|
||||
v = (mSpritePos[offset]<<16)|mSpritePos[offset+1];
|
||||
COMBINE_DATA( &v );
|
||||
mSpritePos[offset+0] = v>>16;
|
||||
mSpritePos[offset+1] = v&0xffff;
|
||||
}
|
||||
READ32_HANDLER( namco_spritepos32_r )
|
||||
{
|
||||
offset *= 2;
|
||||
return (mSpritePos[offset]<<16)|mSpritePos[offset+1];
|
||||
return m_c355_obj_position[offset];
|
||||
}
|
||||
|
||||
INLINE UINT8
|
||||
@ -698,9 +678,6 @@ nth_byte32( const UINT32 *pSource, int which )
|
||||
|
||||
/**************************************************************************************************************/
|
||||
|
||||
static int (*mpCodeToTile)( running_machine &machine, int code ); /* sprite banking callback */
|
||||
static int mGfxC355; /* gfx bank for sprites */
|
||||
|
||||
/**
|
||||
* 0x00000 sprite attr (page0)
|
||||
* 0x02000 sprite list (page0)
|
||||
@ -712,10 +689,9 @@ static int mGfxC355; /* gfx bank for sprites */
|
||||
* 0x14000 sprite list (page1)
|
||||
*/
|
||||
template<class _BitmapClass>
|
||||
static void
|
||||
draw_spriteC355(running_machine &machine, _BitmapClass &bitmap, const rectangle &cliprect, const UINT16 *pSource, int pri, int zpos )
|
||||
void namcos2_shared_state::c355_obj_draw_sprite(_BitmapClass &bitmap, const rectangle &cliprect, const UINT16 *pSource, int pri, int zpos )
|
||||
{
|
||||
UINT16 *spriteram16 = m_spriteram;
|
||||
UINT16 *spriteram16 = m_c355_obj_ram;
|
||||
unsigned screen_height_remaining, screen_width_remaining;
|
||||
unsigned source_height_remaining, source_width_remaining;
|
||||
int hpos,vpos;
|
||||
@ -762,8 +738,8 @@ draw_spriteC355(running_machine &machine, _BitmapClass &bitmap, const rectangle
|
||||
|
||||
if( linkno*4>=0x4000/2 ) return; /* avoid garbage memory reads */
|
||||
|
||||
xscroll = (INT16)mSpritePos[1];
|
||||
yscroll = (INT16)mSpritePos[0];
|
||||
xscroll = (INT16)m_c355_obj_position[1];
|
||||
yscroll = (INT16)m_c355_obj_position[0];
|
||||
|
||||
// xscroll &= 0x3ff; if( xscroll & 0x200 ) xscroll |= ~0x3ff;
|
||||
xscroll &= 0x1ff; if( xscroll & 0x100 ) xscroll |= ~0x1ff;
|
||||
@ -771,7 +747,7 @@ draw_spriteC355(running_machine &machine, _BitmapClass &bitmap, const rectangle
|
||||
|
||||
if( bitmap.width() > 384 )
|
||||
{ /* Medium Resolution: System21 adjust */
|
||||
xscroll = (INT16)mSpritePos[1];
|
||||
xscroll = (INT16)m_c355_obj_position[1];
|
||||
xscroll &= 0x3ff; if( xscroll & 0x200 ) xscroll |= ~0x3ff;
|
||||
if( yscroll<0 )
|
||||
{ /* solvalou */
|
||||
@ -781,7 +757,7 @@ draw_spriteC355(running_machine &machine, _BitmapClass &bitmap, const rectangle
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((namcos2_gametype == NAMCOFL_SPEED_RACER) || (namcos2_gametype == NAMCOFL_FINAL_LAP_R))
|
||||
if ((m_gametype == NAMCOFL_SPEED_RACER) || (m_gametype == NAMCOFL_FINAL_LAP_R))
|
||||
{ /* Namco FL: don't adjust and things line up fine */
|
||||
}
|
||||
else
|
||||
@ -836,7 +812,7 @@ draw_spriteC355(running_machine &machine, _BitmapClass &bitmap, const rectangle
|
||||
vpos -= dy;
|
||||
}
|
||||
|
||||
color = (palette&0xf)^mPalXOR;
|
||||
color = (palette&0xf)^m_c355_obj_palxor;
|
||||
|
||||
source_height_remaining = num_rows*16;
|
||||
screen_height_remaining = vsize;
|
||||
@ -866,8 +842,8 @@ draw_spriteC355(running_machine &machine, _BitmapClass &bitmap, const rectangle
|
||||
zdrawgfxzoom(
|
||||
bitmap,
|
||||
clip,
|
||||
machine.gfx[mGfxC355],
|
||||
mpCodeToTile(machine, tile) + offset,
|
||||
machine().gfx[m_c355_obj_gfxbank],
|
||||
m_c355_obj_code2tile(tile) + offset,
|
||||
color,
|
||||
flipx,flipy,
|
||||
sx,sy,
|
||||
@ -887,132 +863,73 @@ draw_spriteC355(running_machine &machine, _BitmapClass &bitmap, const rectangle
|
||||
screen_height_remaining -= tile_screen_height;
|
||||
source_height_remaining -= 16;
|
||||
} /* next row */
|
||||
} /* draw_spriteC355 */
|
||||
}
|
||||
|
||||
|
||||
static int DefaultCodeToTile( running_machine &machine, int code )
|
||||
int namcos2_shared_state::c355_obj_default_code2tile(int code)
|
||||
{
|
||||
return code;
|
||||
}
|
||||
|
||||
void
|
||||
namco_obj_init( running_machine &machine, int gfxbank, int palXOR, int (*codeToTile)( running_machine &machine, int code ) )
|
||||
void namcos2_shared_state::c355_obj_init(int gfxbank, int pal_xor, c355_obj_code2tile_delegate code2tile)
|
||||
{
|
||||
mGfxC355 = gfxbank;
|
||||
mPalXOR = palXOR;
|
||||
if( codeToTile )
|
||||
{
|
||||
mpCodeToTile = codeToTile;
|
||||
}
|
||||
m_c355_obj_gfxbank = gfxbank;
|
||||
m_c355_obj_palxor = pal_xor;
|
||||
if (!code2tile.isnull())
|
||||
m_c355_obj_code2tile = code2tile;
|
||||
else
|
||||
{
|
||||
mpCodeToTile = DefaultCodeToTile;
|
||||
}
|
||||
m_spriteram = auto_alloc_array(machine, UINT16, 0x20000/2);
|
||||
memset( m_spriteram, 0, 0x20000 ); /* needed for Nebulas Ray */
|
||||
memset( mSpritePos,0x00,sizeof(mSpritePos) );
|
||||
} /* namcosC355_init */
|
||||
m_c355_obj_code2tile = c355_obj_code2tile_delegate(FUNC(namcos2_shared_state::c355_obj_default_code2tile), this);
|
||||
|
||||
memset(&m_c355_obj_ram[0], 0, memshare("objram")->bytes()); // needed for Nebulas Ray
|
||||
memset(m_c355_obj_position, 0, sizeof(m_c355_obj_position));
|
||||
}
|
||||
|
||||
template<class _BitmapClass>
|
||||
static void
|
||||
DrawObjectList(running_machine &machine,
|
||||
_BitmapClass &bitmap,
|
||||
const rectangle &cliprect,
|
||||
int pri,
|
||||
const UINT16 *pSpriteList16,
|
||||
const UINT16 *pSpriteTable )
|
||||
void namcos2_shared_state::c355_obj_draw_list(_BitmapClass &bitmap, const rectangle &cliprect, int pri, const UINT16 *pSpriteList16, const UINT16 *pSpriteTable)
|
||||
{
|
||||
int i;
|
||||
/* draw the sprites */
|
||||
for( i=0; i<256; i++ )
|
||||
{
|
||||
UINT16 which = pSpriteList16[i];
|
||||
draw_spriteC355(machine, bitmap, cliprect, &pSpriteTable[(which&0xff)*8], pri, i );
|
||||
c355_obj_draw_sprite(bitmap, cliprect, &pSpriteTable[(which&0xff)*8], pri, i );
|
||||
if( which&0x100 ) break;
|
||||
}
|
||||
} /* DrawObjectList */
|
||||
}
|
||||
|
||||
void
|
||||
namco_obj_draw(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri )
|
||||
void namcos2_shared_state::c355_obj_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri)
|
||||
{
|
||||
// int offs = spriteram16[0x18000/2]; /* end-of-sprite-list */
|
||||
if( pri==0 )
|
||||
{
|
||||
machine.priority_bitmap.fill(0, cliprect );
|
||||
}
|
||||
// if( offs==0 )
|
||||
{ /* boot */
|
||||
DrawObjectList(machine, bitmap,cliprect,pri,&m_spriteram[0x02000/2], &m_spriteram[0x00000/2] );
|
||||
}
|
||||
// else
|
||||
{
|
||||
DrawObjectList(machine, bitmap,cliprect,pri,&m_spriteram[0x14000/2], &m_spriteram[0x10000/2] );
|
||||
}
|
||||
} /* namco_obj_draw */
|
||||
if (pri == 0)
|
||||
machine().priority_bitmap.fill(0, cliprect);
|
||||
|
||||
void
|
||||
namco_obj_draw(running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri )
|
||||
// if (offs == 0) // boot
|
||||
c355_obj_draw_list(bitmap, cliprect, pri, &m_c355_obj_ram[0x02000/2], &m_c355_obj_ram[0x00000/2]);
|
||||
// else
|
||||
c355_obj_draw_list(bitmap, cliprect, pri, &m_c355_obj_ram[0x14000/2], &m_c355_obj_ram[0x10000/2]);
|
||||
}
|
||||
|
||||
void namcos2_shared_state::c355_obj_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri)
|
||||
{
|
||||
// int offs = spriteram16[0x18000/2]; /* end-of-sprite-list */
|
||||
if( pri==0 )
|
||||
{
|
||||
machine.priority_bitmap.fill(0, cliprect );
|
||||
}
|
||||
// if( offs==0 )
|
||||
{ /* boot */
|
||||
DrawObjectList(machine, bitmap,cliprect,pri,&m_spriteram[0x02000/2], &m_spriteram[0x00000/2] );
|
||||
}
|
||||
if (pri == 0)
|
||||
machine().priority_bitmap.fill(0, cliprect);
|
||||
|
||||
// if (offs == 0) // boot
|
||||
c355_obj_draw_list(bitmap, cliprect, pri, &m_c355_obj_ram[0x02000/2], &m_c355_obj_ram[0x00000/2]);
|
||||
// else
|
||||
{
|
||||
DrawObjectList(machine, bitmap,cliprect,pri,&m_spriteram[0x14000/2], &m_spriteram[0x10000/2] );
|
||||
}
|
||||
} /* namco_obj_draw */
|
||||
c355_obj_draw_list(bitmap, cliprect, pri, &m_c355_obj_ram[0x14000/2], &m_c355_obj_ram[0x10000/2]);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( namco_obj16_w )
|
||||
WRITE16_MEMBER( namcos2_shared_state::c355_obj_ram_w )
|
||||
{
|
||||
COMBINE_DATA( &m_spriteram[offset] );
|
||||
} /* namco_obj16_w */
|
||||
COMBINE_DATA(&m_c355_obj_ram[offset]);
|
||||
}
|
||||
|
||||
READ16_HANDLER( namco_obj16_r )
|
||||
READ16_MEMBER( namcos2_shared_state::c355_obj_ram_r )
|
||||
{
|
||||
return m_spriteram[offset];
|
||||
} /* namco_obj16_r */
|
||||
|
||||
WRITE32_HANDLER( namco_obj32_w )
|
||||
{
|
||||
UINT16 *spriteram16 = m_spriteram;
|
||||
UINT32 v;
|
||||
offset *= 2;
|
||||
v = (spriteram16[offset]<<16)|spriteram16[offset+1];
|
||||
COMBINE_DATA( &v );
|
||||
spriteram16[offset] = v>>16;
|
||||
spriteram16[offset+1] = v&0xffff;
|
||||
} /* namco_obj32_w */
|
||||
|
||||
READ32_HANDLER( namco_obj32_r )
|
||||
{
|
||||
UINT16 *spriteram16 = m_spriteram;
|
||||
offset *= 2;
|
||||
return (spriteram16[offset]<<16)|spriteram16[offset+1];
|
||||
} /* namco_obj32_r */
|
||||
|
||||
WRITE32_HANDLER( namco_obj32_le_w )
|
||||
{
|
||||
UINT16 *spriteram16 = m_spriteram;
|
||||
UINT32 v;
|
||||
offset *= 2;
|
||||
v = (spriteram16[offset+1]<<16)|spriteram16[offset];
|
||||
COMBINE_DATA( &v );
|
||||
spriteram16[offset+1] = v>>16;
|
||||
spriteram16[offset] = v&0xffff;
|
||||
} /* namco_obj32_w */
|
||||
|
||||
READ32_HANDLER( namco_obj32_le_r )
|
||||
{
|
||||
UINT16 *spriteram16 = m_spriteram;
|
||||
offset *= 2;
|
||||
return (spriteram16[offset+1]<<16)|spriteram16[offset];
|
||||
} /* namco_obj32_r */
|
||||
return m_c355_obj_ram[offset];
|
||||
}
|
||||
|
||||
/**************************************************************************************************************/
|
||||
|
||||
@ -1027,142 +944,114 @@ READ32_HANDLER( namco_obj32_le_r )
|
||||
* Namco System 2 - Metal Hawk, Lucky and Wild
|
||||
* Namco System FL - Final Lap R, Speed Racer
|
||||
*/
|
||||
#define ROZ_TILEMAP_COUNT 2
|
||||
static tilemap_t *mRozTilemap[ROZ_TILEMAP_COUNT];
|
||||
static UINT16 *rozbank16;
|
||||
static UINT16 *rozvideoram16;
|
||||
static UINT16 *rozcontrol16;
|
||||
static int mRozGfxBank;
|
||||
static const char * mRozMaskRegion;
|
||||
|
||||
/**
|
||||
* Graphics ROM addressing varies across games.
|
||||
*/
|
||||
static void
|
||||
roz_get_info( running_machine &machine, tile_data &tileinfo, int tile_index, int which)
|
||||
void namcos2_shared_state::c169_roz_get_info(tile_data &tileinfo, int tile_index, int which)
|
||||
{
|
||||
UINT16 tile = rozvideoram16[tile_index];
|
||||
UINT16 tile = m_c169_roz_videoram[tile_index];
|
||||
int bank, mangle;
|
||||
|
||||
switch( namcos2_gametype )
|
||||
switch (m_gametype)
|
||||
{
|
||||
case NAMCONB2_MACH_BREAKERS:
|
||||
bank = nth_byte16( &rozbank16[which*8/2], (tile>>11)&0x7 );
|
||||
tile = (tile&0x7ff)|(bank*0x800);
|
||||
mangle = tile;
|
||||
break;
|
||||
case NAMCONB2_MACH_BREAKERS:
|
||||
bank = nth_byte16(&m_c169_roz_bank[which * 8 / 2], (tile >> 11) & 0x7);
|
||||
tile = (tile & 0x7ff) | (bank * 0x800);
|
||||
mangle = tile;
|
||||
break;
|
||||
|
||||
case NAMCONB2_OUTFOXIES:
|
||||
bank = nth_byte16( &rozbank16[which*8/2], (tile>>11)&0x7 );
|
||||
tile = (tile&0x7ff)|(bank*0x800);
|
||||
mangle = tile&~(0x50);
|
||||
if( tile&0x10 ) mangle |= 0x40;
|
||||
if( tile&0x40 ) mangle |= 0x10;
|
||||
break;
|
||||
case NAMCONB2_OUTFOXIES:
|
||||
bank = nth_byte16(&m_c169_roz_bank[which * 8 / 2], (tile >> 11) & 0x7);
|
||||
tile = (tile & 0x7ff) | (bank * 0x800);
|
||||
mangle = tile & ~0x50;
|
||||
if (tile & 0x10) mangle |= 0x40;
|
||||
if (tile & 0x40) mangle |= 0x10;
|
||||
break;
|
||||
|
||||
case NAMCOS2_LUCKY_AND_WILD:
|
||||
mangle = tile&0x01ff;
|
||||
tile &= 0x3fff;
|
||||
switch( tile>>9 )
|
||||
{
|
||||
case 0x00: mangle |= 0x1c00; break;
|
||||
case 0x01: mangle |= 0x0800; break;
|
||||
case 0x02: mangle |= 0x0000; break;
|
||||
case NAMCOS2_LUCKY_AND_WILD:
|
||||
mangle = tile & 0x01ff;
|
||||
tile &= 0x3fff;
|
||||
switch (tile >> 9)
|
||||
{
|
||||
case 0x00: mangle |= 0x1c00; break;
|
||||
case 0x01: mangle |= 0x0800; break;
|
||||
case 0x02: mangle |= 0x0000; break;
|
||||
|
||||
case 0x08: mangle |= 0x1e00; break;
|
||||
case 0x09: mangle |= 0x0a00; break;
|
||||
case 0x0a: mangle |= 0x0200; break;
|
||||
case 0x08: mangle |= 0x1e00; break;
|
||||
case 0x09: mangle |= 0x0a00; break;
|
||||
case 0x0a: mangle |= 0x0200; break;
|
||||
|
||||
case 0x10: mangle |= 0x2000; break;
|
||||
case 0x11: mangle |= 0x0c00; break;
|
||||
case 0x12: mangle |= 0x0400; break;
|
||||
case 0x10: mangle |= 0x2000; break;
|
||||
case 0x11: mangle |= 0x0c00; break;
|
||||
case 0x12: mangle |= 0x0400; break;
|
||||
|
||||
case 0x18: mangle |= 0x2200; break;
|
||||
case 0x19: mangle |= 0x0e00; break;
|
||||
case 0x1a: mangle |= 0x0600; break;
|
||||
}
|
||||
break;
|
||||
case 0x18: mangle |= 0x2200; break;
|
||||
case 0x19: mangle |= 0x0e00; break;
|
||||
case 0x1a: mangle |= 0x0600; break;
|
||||
}
|
||||
break;
|
||||
|
||||
case NAMCOS2_METAL_HAWK:
|
||||
mangle = tile&0x01ff;
|
||||
if( tile&0x1000 ) mangle |= 0x0200;
|
||||
if( tile&0x0200 ) mangle |= 0x0400;
|
||||
if( tile&0x0400 ) mangle |= 0x0800;
|
||||
if( tile&0x0800 ) mangle |= 0x1000;
|
||||
tile &= 0x3fff; /* cap mask offset */
|
||||
break;
|
||||
case NAMCOS2_METAL_HAWK:
|
||||
mangle = tile & 0x01ff;
|
||||
if (tile & 0x1000) mangle |= 0x0200;
|
||||
if (tile & 0x0200) mangle |= 0x0400;
|
||||
if (tile & 0x0400) mangle |= 0x0800;
|
||||
if (tile & 0x0800) mangle |= 0x1000;
|
||||
tile &= 0x3fff; // cap mask offset
|
||||
break;
|
||||
|
||||
default:
|
||||
case NAMCOFL_SPEED_RACER:
|
||||
case NAMCOFL_FINAL_LAP_R:
|
||||
mangle = tile;
|
||||
tile &= 0x3fff; /* cap mask offset */
|
||||
break;
|
||||
default:
|
||||
case NAMCOFL_SPEED_RACER:
|
||||
case NAMCOFL_FINAL_LAP_R:
|
||||
mangle = tile;
|
||||
tile &= 0x3fff; // cap mask offset
|
||||
break;
|
||||
}
|
||||
SET_TILE_INFO( mRozGfxBank,mangle,0/*color*/,0/*flag*/ );
|
||||
tileinfo.mask_data = 32*tile + (UINT8 *)machine.root_device().memregion( mRozMaskRegion )->base();
|
||||
} /* roz_get_info */
|
||||
SET_TILE_INFO_MEMBER(m_c169_roz_gfxbank, mangle, 0/*color*/, 0/*flag*/);
|
||||
tileinfo.mask_data = m_c169_roz_mask + 32*tile;
|
||||
}
|
||||
|
||||
static
|
||||
TILE_GET_INFO( roz_get_info0 )
|
||||
TILE_GET_INFO_MEMBER( namcos2_shared_state::c169_roz_get_info0 )
|
||||
{
|
||||
roz_get_info( machine,tileinfo,tile_index,0 );
|
||||
} /* roz_get_info0 */
|
||||
c169_roz_get_info(tileinfo, tile_index, 0);
|
||||
}
|
||||
|
||||
static
|
||||
TILE_GET_INFO( roz_get_info1 )
|
||||
TILE_GET_INFO_MEMBER( namcos2_shared_state::c169_roz_get_info1 )
|
||||
{
|
||||
roz_get_info( machine,tileinfo,tile_index,1 );
|
||||
} /* roz_get_info1 */
|
||||
c169_roz_get_info(tileinfo, tile_index, 1);
|
||||
}
|
||||
|
||||
static
|
||||
TILEMAP_MAPPER( namco_roz_scan )
|
||||
TILEMAP_MAPPER_MEMBER( namcos2_shared_state::c169_roz_mapper )
|
||||
{
|
||||
if( col>=128 )
|
||||
if (col >= 128)
|
||||
{
|
||||
col %= 128;
|
||||
row += 256;
|
||||
}
|
||||
return row*128+col;
|
||||
} /* namco_roz_scan*/
|
||||
return row * 128 + col;
|
||||
}
|
||||
|
||||
void
|
||||
namco_roz_init( running_machine &machine, int gfxbank, const char * maskregion )
|
||||
void namcos2_shared_state::c169_roz_init(int gfxbank, const char *maskregion)
|
||||
{
|
||||
int i;
|
||||
static const tile_get_info_func roz_info[ROZ_TILEMAP_COUNT] =
|
||||
{
|
||||
roz_get_info0,
|
||||
roz_get_info1
|
||||
};
|
||||
m_c169_roz_gfxbank = gfxbank;
|
||||
m_c169_roz_mask = memregion(maskregion)->base();
|
||||
|
||||
mRozGfxBank = gfxbank;
|
||||
mRozMaskRegion = maskregion;
|
||||
m_c169_roz_tilemap[0] = &machine().tilemap().create(
|
||||
tilemap_get_info_delegate(FUNC(namcos2_shared_state::c169_roz_get_info0), this),
|
||||
tilemap_mapper_delegate(FUNC(namcos2_shared_state::c169_roz_mapper), this),
|
||||
16,16,
|
||||
256,256);
|
||||
|
||||
rozbank16 = auto_alloc_array(machine, UINT16, 0x10/2);
|
||||
rozvideoram16 = auto_alloc_array(machine, UINT16, 0x20000/2);
|
||||
rozcontrol16 = auto_alloc_array(machine, UINT16, 0x20/2);
|
||||
m_c169_roz_tilemap[1] = &machine().tilemap().create(
|
||||
tilemap_get_info_delegate(FUNC(namcos2_shared_state::c169_roz_get_info1), this),
|
||||
tilemap_mapper_delegate(FUNC(namcos2_shared_state::c169_roz_mapper), this),
|
||||
16,16,
|
||||
256,256);
|
||||
|
||||
for( i=0; i<ROZ_TILEMAP_COUNT; i++ )
|
||||
{
|
||||
mRozTilemap[i] = tilemap_create(machine,
|
||||
roz_info[i],
|
||||
namco_roz_scan,
|
||||
16,16,
|
||||
256,256 );
|
||||
}
|
||||
} /* namco_roz_init */
|
||||
}
|
||||
|
||||
struct RozParam
|
||||
{
|
||||
UINT32 left, top, size;
|
||||
UINT32 startx,starty;
|
||||
int incxx,incxy,incyx,incyy;
|
||||
int color,priority;
|
||||
};
|
||||
|
||||
static void
|
||||
UnpackRozParam( const UINT16 *pSource, struct RozParam *pRozParam )
|
||||
void namcos2_shared_state::c169_roz_unpack_params(const UINT16 *source, roz_parameters ¶ms)
|
||||
{
|
||||
const int xoffset = 36, yoffset = 3;
|
||||
|
||||
@ -1173,306 +1062,186 @@ UnpackRozParam( const UINT16 *pSource, struct RozParam *pRozParam )
|
||||
* --------.xxxx---- priority
|
||||
* --------.----xxxx color
|
||||
*/
|
||||
UINT16 temp = pSource[1];
|
||||
pRozParam->size = 512<<((temp&0x0300)>>8);
|
||||
if ((namcos2_gametype == NAMCOFL_SPEED_RACER) || (namcos2_gametype == NAMCOFL_FINAL_LAP_R))
|
||||
{
|
||||
pRozParam->color = (temp&0x0007)*256;
|
||||
}
|
||||
|
||||
UINT16 temp = source[1];
|
||||
params.size = 512 << ((temp & 0x0300) >> 8);
|
||||
if (m_gametype == NAMCOFL_SPEED_RACER || m_gametype == NAMCOFL_FINAL_LAP_R)
|
||||
params.color = (temp & 0x0007) * 256;
|
||||
else
|
||||
{
|
||||
pRozParam->color = (temp&0x000f)*256;
|
||||
}
|
||||
pRozParam->priority = (temp&0x00f0)>>4;
|
||||
params.color = (temp & 0x000f) * 256;
|
||||
params.priority = (temp & 0x00f0) >> 4;
|
||||
|
||||
temp = pSource[2];
|
||||
pRozParam->left = (temp&0x7000)>>3;
|
||||
if( temp&0x8000 ) temp |= 0xf000; else temp&=0x0fff; /* sign extend */
|
||||
pRozParam->incxx = (INT16)temp;
|
||||
temp = source[2];
|
||||
params.left = (temp & 0x7000) >> 3;
|
||||
if (temp & 0x8000) temp |= 0xf000; else temp &= 0x0fff; // sign extend
|
||||
params.incxx = INT16(temp);
|
||||
|
||||
temp = pSource[3];
|
||||
pRozParam->top = (temp&0x7000)>>3;
|
||||
if( temp&0x8000 ) temp |= 0xf000; else temp&=0x0fff; /* sign extend */
|
||||
pRozParam->incxy = (INT16)temp;
|
||||
temp = source[3];
|
||||
params.top = (temp&0x7000)>>3;
|
||||
if (temp & 0x8000) temp |= 0xf000; else temp &= 0x0fff; // sign extend
|
||||
params.incxy = INT16(temp);
|
||||
|
||||
temp = pSource[4];
|
||||
if( temp&0x8000 ) temp |= 0xf000; else temp&=0x0fff; /* sign extend */
|
||||
pRozParam->incyx = (INT16)temp;
|
||||
temp = source[4];
|
||||
if (temp & 0x8000) temp |= 0xf000; else temp &= 0x0fff; // sign extend
|
||||
params.incyx = INT16(temp);
|
||||
|
||||
temp = pSource[5];
|
||||
if( temp&0x8000 ) temp |= 0xf000; else temp&=0x0fff; /* sign extend */
|
||||
pRozParam->incyy = (INT16)temp;
|
||||
temp = source[5];
|
||||
if (temp & 0x8000) temp |= 0xf000; else temp &= 0x0fff; // sign extend
|
||||
params.incyy = INT16(temp);
|
||||
|
||||
pRozParam->startx = (INT16)pSource[6];
|
||||
pRozParam->starty = (INT16)pSource[7];
|
||||
pRozParam->startx <<= 4;
|
||||
pRozParam->starty <<= 4;
|
||||
params.startx = INT16(source[6]);
|
||||
params.starty = INT16(source[7]);
|
||||
params.startx <<= 4;
|
||||
params.starty <<= 4;
|
||||
|
||||
pRozParam->startx += xoffset * pRozParam->incxx + yoffset * pRozParam->incyx;
|
||||
pRozParam->starty += xoffset * pRozParam->incxy + yoffset * pRozParam->incyy;
|
||||
params.startx += xoffset * params.incxx + yoffset * params.incyx;
|
||||
params.starty += xoffset * params.incxy + yoffset * params.incyy;
|
||||
|
||||
/* normalize */
|
||||
pRozParam->startx <<= 8;
|
||||
pRozParam->starty <<= 8;
|
||||
pRozParam->incxx <<= 8;
|
||||
pRozParam->incxy <<= 8;
|
||||
pRozParam->incyx <<= 8;
|
||||
pRozParam->incyy <<= 8;
|
||||
} /* UnpackRozParam */
|
||||
// normalize
|
||||
params.startx <<= 8;
|
||||
params.starty <<= 8;
|
||||
params.incxx <<= 8;
|
||||
params.incxy <<= 8;
|
||||
params.incyx <<= 8;
|
||||
params.incyy <<= 8;
|
||||
}
|
||||
|
||||
static void
|
||||
DrawRozHelper(
|
||||
bitmap_ind16 &bitmap,
|
||||
tilemap_t *tmap,
|
||||
const rectangle &clip,
|
||||
const struct RozParam *rozInfo )
|
||||
void namcos2_shared_state::c169_roz_draw_helper(bitmap_ind16 &bitmap, tilemap_t &tmap, const rectangle &clip, const roz_parameters ¶ms)
|
||||
{
|
||||
|
||||
if( (bitmap.bpp() == 16) &&
|
||||
(namcos2_gametype != NAMCOFL_SPEED_RACER) &&
|
||||
(namcos2_gametype != NAMCOFL_FINAL_LAP_R))
|
||||
if (m_gametype != NAMCOFL_SPEED_RACER && m_gametype != NAMCOFL_FINAL_LAP_R)
|
||||
{
|
||||
UINT32 size_mask = rozInfo->size-1;
|
||||
bitmap_ind16 &srcbitmap = tmap->pixmap();
|
||||
bitmap_ind8 &flagsbitmap = tmap->flagsmap();
|
||||
UINT32 startx = rozInfo->startx + clip.min_x * rozInfo->incxx + clip.min_y * rozInfo->incyx;
|
||||
UINT32 starty = rozInfo->starty + clip.min_x * rozInfo->incxy + clip.min_y * rozInfo->incyy;
|
||||
UINT32 size_mask = params.size - 1;
|
||||
bitmap_ind16 &srcbitmap = tmap.pixmap();
|
||||
bitmap_ind8 &flagsbitmap = tmap.flagsmap();
|
||||
UINT32 startx = params.startx + clip.min_x * params.incxx + clip.min_y * params.incyx;
|
||||
UINT32 starty = params.starty + clip.min_x * params.incxy + clip.min_y * params.incyy;
|
||||
int sx = clip.min_x;
|
||||
int sy = clip.min_y;
|
||||
while( sy <= clip.max_y )
|
||||
while (sy <= clip.max_y)
|
||||
{
|
||||
int x = sx;
|
||||
UINT32 cx = startx;
|
||||
UINT32 cy = starty;
|
||||
UINT16 *dest = &bitmap.pix16(sy, sx);
|
||||
while( x <= clip.max_x )
|
||||
UINT16 *dest = &bitmap.pix(sy, sx);
|
||||
while (x <= clip.max_x)
|
||||
{
|
||||
UINT32 xpos = (((cx>>16)&size_mask) + rozInfo->left)&0xfff;
|
||||
UINT32 ypos = (((cy>>16)&size_mask) + rozInfo->top)&0xfff;
|
||||
if( flagsbitmap.pix8(ypos, xpos)&TILEMAP_PIXEL_LAYER0 )
|
||||
{
|
||||
*dest = srcbitmap.pix16(ypos, xpos)+rozInfo->color;
|
||||
}
|
||||
cx += rozInfo->incxx;
|
||||
cy += rozInfo->incxy;
|
||||
UINT32 xpos = (((cx >> 16) & size_mask) + params.left) & 0xfff;
|
||||
UINT32 ypos = (((cy >> 16) & size_mask) + params.top) & 0xfff;
|
||||
if (flagsbitmap.pix(ypos, xpos) & TILEMAP_PIXEL_LAYER0)
|
||||
*dest = srcbitmap.pix(ypos, xpos) + params.color;
|
||||
cx += params.incxx;
|
||||
cy += params.incxy;
|
||||
x++;
|
||||
dest++;
|
||||
} /* next x */
|
||||
startx += rozInfo->incyx;
|
||||
starty += rozInfo->incyy;
|
||||
}
|
||||
startx += params.incyx;
|
||||
starty += params.incyy;
|
||||
sy++;
|
||||
} /* next y */
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
{
|
||||
tmap->set_palette_offset( rozInfo->color );
|
||||
|
||||
tmap->draw_roz(
|
||||
tmap.set_palette_offset(params.color);
|
||||
tmap.draw_roz(
|
||||
bitmap,
|
||||
clip,
|
||||
rozInfo->startx, rozInfo->starty,
|
||||
rozInfo->incxx, rozInfo->incxy,
|
||||
rozInfo->incyx, rozInfo->incyy,
|
||||
params.startx, params.starty,
|
||||
params.incxx, params.incxy,
|
||||
params.incyx, params.incyy,
|
||||
1,0,0); // wrap, flags, pri
|
||||
}
|
||||
} /* DrawRozHelper */
|
||||
}
|
||||
|
||||
static void
|
||||
DrawRozScanline( bitmap_ind16 &bitmap, int line, int which, int pri, const rectangle &cliprect )
|
||||
void namcos2_shared_state::c169_roz_draw_scanline(bitmap_ind16 &bitmap, int line, int which, int pri, const rectangle &cliprect)
|
||||
{
|
||||
if( line>=cliprect.min_y && line<=cliprect.max_y )
|
||||
if (line >= cliprect.min_y && line <= cliprect.max_y)
|
||||
{
|
||||
struct RozParam rozInfo;
|
||||
rectangle clip;
|
||||
int row = line/8;
|
||||
int offs = row*0x100+(line&7)*0x10 + 0xe080;
|
||||
UINT16 *pSource = &rozvideoram16[offs/2];
|
||||
if( (pSource[1]&0x8000)==0 )
|
||||
int row = line / 8;
|
||||
int offs = row * 0x100 + (line & 7) * 0x10 + 0xe080;
|
||||
UINT16 *source = &m_c169_roz_videoram[offs / 2];
|
||||
|
||||
// if enabled
|
||||
if ((source[1] & 0x8000) == 0)
|
||||
{
|
||||
UnpackRozParam( pSource, &rozInfo );
|
||||
if( pri == rozInfo.priority )
|
||||
roz_parameters params;
|
||||
c169_roz_unpack_params(source, params);
|
||||
|
||||
// check priority
|
||||
if (pri == params.priority)
|
||||
{
|
||||
clip.set(0, bitmap.width()-1, line, line);
|
||||
rectangle clip(0, bitmap.width() - 1, line, line);
|
||||
clip &= cliprect;
|
||||
|
||||
DrawRozHelper( bitmap, mRozTilemap[which], clip, &rozInfo );
|
||||
} /* priority */
|
||||
} /* enabled */
|
||||
c169_roz_draw_helper(bitmap, *m_c169_roz_tilemap[which], clip, params);
|
||||
}
|
||||
}
|
||||
}
|
||||
} /* DrawRozScanline */
|
||||
}
|
||||
|
||||
void
|
||||
namco_roz_draw( bitmap_ind16 &bitmap, const rectangle &cliprect, int pri )
|
||||
void namcos2_shared_state::c169_roz_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri)
|
||||
{
|
||||
int mode = rozcontrol16[0]; /* 0x8000 or 0x1000 */
|
||||
int which, special = 1;
|
||||
int special = (m_gametype == NAMCOFL_SPEED_RACER || m_gametype == NAMCOFL_FINAL_LAP_R) ? 0 : 1;
|
||||
int mode = m_c169_roz_control[0]; // 0x8000 or 0x1000
|
||||
|
||||
if ((namcos2_gametype == NAMCOFL_SPEED_RACER) || (namcos2_gametype == NAMCOFL_FINAL_LAP_R))
|
||||
for (int which = 1; which >= 0; which--)
|
||||
{
|
||||
special = 0;
|
||||
}
|
||||
|
||||
for( which=1; which>=0; which-- )
|
||||
{
|
||||
const UINT16 *pSource = &rozcontrol16[which*8];
|
||||
UINT16 attrs = pSource[1];
|
||||
if( (attrs&0x8000)==0 )
|
||||
{ /* layer is enabled */
|
||||
if( which==special && mode==0x8000 )
|
||||
{ /* second ROZ layer is configured to use per-scanline registers */
|
||||
int line;
|
||||
for( line=0; line<224; line++ )
|
||||
{
|
||||
DrawRozScanline( bitmap, line, which, pri, cliprect/*, tmap*/ );
|
||||
}
|
||||
const UINT16 *source = &m_c169_roz_control[which * 8];
|
||||
UINT16 attrs = source[1];
|
||||
|
||||
// if enabled
|
||||
if ((attrs & 0x8000) == 0)
|
||||
{
|
||||
// second ROZ layer is configured to use per-scanline registers
|
||||
if (which == special && mode == 0x8000)
|
||||
{
|
||||
for (int line = 0; line < 224; line++)
|
||||
c169_roz_draw_scanline(bitmap, line, which, pri, cliprect);
|
||||
}
|
||||
else
|
||||
{
|
||||
struct RozParam rozInfo;
|
||||
UnpackRozParam( pSource, &rozInfo );
|
||||
if( rozInfo.priority == pri )
|
||||
{
|
||||
DrawRozHelper( bitmap, mRozTilemap[which], cliprect, &rozInfo );
|
||||
} /* roz_pri==pri */
|
||||
roz_parameters params;
|
||||
c169_roz_unpack_params(source, params);
|
||||
if (params.priority == pri)
|
||||
c169_roz_draw_helper(bitmap, *m_c169_roz_tilemap[which], cliprect, params);
|
||||
}
|
||||
} /* enable */
|
||||
} /* which */
|
||||
} /* namco_roz_draw */
|
||||
|
||||
READ16_HANDLER( namco_rozcontrol16_r )
|
||||
{
|
||||
return rozcontrol16[offset];
|
||||
} /* namco_rozcontrol16_r */
|
||||
|
||||
WRITE16_HANDLER( namco_rozcontrol16_w )
|
||||
{
|
||||
COMBINE_DATA( &rozcontrol16[offset] );
|
||||
} /* namco_rozcontrol16_w */
|
||||
|
||||
#ifdef UNUSED_FUNCTION
|
||||
READ16_HANDLER( namco_rozbank16_r )
|
||||
{
|
||||
return rozbank16[offset];
|
||||
} /* namco_rozbank16_r */
|
||||
|
||||
WRITE16_HANDLER( namco_rozbank16_w )
|
||||
{
|
||||
UINT16 old_data = rozbank16[offset];
|
||||
COMBINE_DATA( &rozbank16[offset] );
|
||||
if( rozbank16[offset]!=old_data )
|
||||
{
|
||||
int i;
|
||||
for( i=0; i<ROZ_TILEMAP_COUNT; i++ )
|
||||
{
|
||||
mRozTilemap[i]->mark_all_dirty();
|
||||
}
|
||||
}
|
||||
} /* namco_rozbank16_w */
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
writerozvideo( int offset, UINT16 data )
|
||||
READ16_MEMBER( namcos2_shared_state::c169_roz_control_r )
|
||||
{
|
||||
int i;
|
||||
rozvideoram16[offset] = data;
|
||||
for( i=0; i<ROZ_TILEMAP_COUNT; i++ )
|
||||
{
|
||||
mRozTilemap[i]->mark_tile_dirty( offset );
|
||||
}
|
||||
} /* writerozvideo */
|
||||
return m_c169_roz_control[offset];
|
||||
}
|
||||
|
||||
READ16_HANDLER( namco_rozvideoram16_r )
|
||||
WRITE16_MEMBER( namcos2_shared_state::c169_roz_control_w )
|
||||
{
|
||||
return rozvideoram16[offset];
|
||||
} /* namco_rozvideoram16_r */
|
||||
COMBINE_DATA(&m_c169_roz_control[offset]);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( namco_rozvideoram16_w )
|
||||
READ16_MEMBER( namcos2_shared_state::c169_roz_bank_r )
|
||||
{
|
||||
UINT16 v = rozvideoram16[offset];
|
||||
COMBINE_DATA( &v );
|
||||
writerozvideo( offset, v );
|
||||
} /* namco_rozvideoram16_w */
|
||||
return m_c169_roz_bank[offset];
|
||||
}
|
||||
|
||||
READ32_HANDLER( namco_rozcontrol32_r )
|
||||
WRITE16_MEMBER( namcos2_shared_state::c169_roz_bank_w )
|
||||
{
|
||||
offset *= 2;
|
||||
return (rozcontrol16[offset]<<16)|rozcontrol16[offset+1];
|
||||
} /* namco_rozcontrol32_r */
|
||||
UINT16 old_data = m_c169_roz_bank[offset];
|
||||
COMBINE_DATA(&m_c169_roz_bank[offset]);
|
||||
if (m_c169_roz_bank[offset] != old_data)
|
||||
for (int i = 0; i < ROZ_TILEMAP_COUNT; i++)
|
||||
m_c169_roz_tilemap[i]->mark_all_dirty();
|
||||
}
|
||||
|
||||
WRITE32_HANDLER( namco_rozcontrol32_w )
|
||||
READ16_MEMBER( namcos2_shared_state::c169_roz_videoram_r )
|
||||
{
|
||||
UINT32 v;
|
||||
offset *=2;
|
||||
v = (rozcontrol16[offset]<<16)|rozcontrol16[offset+1];
|
||||
COMBINE_DATA(&v);
|
||||
rozcontrol16[offset] = v>>16;
|
||||
rozcontrol16[offset+1] = v&0xffff;
|
||||
} /* namco_rozcontrol32_w */
|
||||
return m_c169_roz_videoram[offset];
|
||||
}
|
||||
|
||||
READ32_HANDLER( namco_rozcontrol32_le_r )
|
||||
WRITE16_MEMBER( namcos2_shared_state::c169_roz_videoram_w )
|
||||
{
|
||||
offset *= 2;
|
||||
return (rozcontrol16[offset]<<16)|rozcontrol16[offset+1];
|
||||
} /* namco_rozcontrol32_le_r */
|
||||
|
||||
WRITE32_HANDLER( namco_rozcontrol32_le_w )
|
||||
{
|
||||
UINT32 v;
|
||||
offset *=2;
|
||||
v = (rozcontrol16[offset+1]<<16)|rozcontrol16[offset];
|
||||
COMBINE_DATA(&v);
|
||||
rozcontrol16[offset+1] = v>>16;
|
||||
rozcontrol16[offset] = v&0xffff;
|
||||
} /* namco_rozcontrol32_le_w */
|
||||
|
||||
READ32_HANDLER( namco_rozbank32_r )
|
||||
{
|
||||
offset *= 2;
|
||||
return (rozbank16[offset]<<16)|rozbank16[offset+1];
|
||||
} /* namco_rozbank32_r */
|
||||
|
||||
WRITE32_HANDLER( namco_rozbank32_w )
|
||||
{
|
||||
UINT32 v;
|
||||
offset *=2;
|
||||
v = (rozbank16[offset]<<16)|rozbank16[offset+1];
|
||||
COMBINE_DATA(&v);
|
||||
rozbank16[offset] = v>>16;
|
||||
rozbank16[offset+1] = v&0xffff;
|
||||
} /* namco_rozbank32_w */
|
||||
|
||||
READ32_HANDLER( namco_rozvideoram32_r )
|
||||
{
|
||||
offset *= 2;
|
||||
return (rozvideoram16[offset]<<16)|rozvideoram16[offset+1];
|
||||
} /* namco_rozvideoram32_r */
|
||||
|
||||
WRITE32_HANDLER( namco_rozvideoram32_w )
|
||||
{
|
||||
UINT32 v;
|
||||
offset *= 2;
|
||||
v = (rozvideoram16[offset]<<16)|rozvideoram16[offset+1];
|
||||
COMBINE_DATA( &v );
|
||||
writerozvideo(offset,v>>16);
|
||||
writerozvideo(offset+1,v&0xffff);
|
||||
} /* namco_rozvideoram32_w */
|
||||
|
||||
READ32_HANDLER( namco_rozvideoram32_le_r )
|
||||
{
|
||||
offset *= 2;
|
||||
return (rozvideoram16[offset+1]<<16)|rozvideoram16[offset];
|
||||
} /* namco_rozvideoram32_le_r */
|
||||
|
||||
WRITE32_HANDLER( namco_rozvideoram32_le_w )
|
||||
{
|
||||
UINT32 v;
|
||||
offset *= 2;
|
||||
v = (rozvideoram16[offset+1]<<16)|rozvideoram16[offset];
|
||||
COMBINE_DATA( &v );
|
||||
writerozvideo(offset+1,v>>16);
|
||||
writerozvideo(offset,v&0xffff);
|
||||
} /* namco_rozvideoram32_le_w */
|
||||
COMBINE_DATA(&m_c169_roz_videoram[offset]);
|
||||
for (int i = 0; i < ROZ_TILEMAP_COUNT; i++)
|
||||
m_c169_roz_tilemap[i]->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
/**************************************************************************************************************/
|
||||
/*
|
||||
|
@ -272,7 +272,6 @@ GFX: Custom 145 ( 80 pin PQFP)
|
||||
#include "emu.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "includes/namconb1.h"
|
||||
#include "includes/namcos2.h"
|
||||
#include "includes/namcoic.h"
|
||||
#include "sound/c352.h"
|
||||
#include "cpu/m37710/m37710.h"
|
||||
@ -590,7 +589,7 @@ static NVRAM_HANDLER( namconb1 )
|
||||
else
|
||||
{
|
||||
memset( state->m_nvmem32, 0x00, NB1_NVMEM_SIZE );
|
||||
if( namcos2_gametype == NAMCONB1_GUNBULET )
|
||||
if( state->m_gametype == NAMCONB1_GUNBULET )
|
||||
{
|
||||
state->m_nvmem32[0] = 0x0f260f26; /* default gun calibration */
|
||||
}
|
||||
@ -612,52 +611,52 @@ DRIVER_INIT_MEMBER(namconb1_state,nebulray)
|
||||
size_t numBytes = (0xfe7-0xe6f)*8;
|
||||
memset( &pMem[0xe6f*8], 0, numBytes );
|
||||
|
||||
namcos2_gametype = NAMCONB1_NEBULRAY;
|
||||
m_gametype = NAMCONB1_NEBULRAY;
|
||||
} /* nebulray */
|
||||
|
||||
DRIVER_INIT_MEMBER(namconb1_state,gslgr94u)
|
||||
{
|
||||
namcos2_gametype = NAMCONB1_GSLGR94U;
|
||||
m_gametype = NAMCONB1_GSLGR94U;
|
||||
} /* gslgr94u */
|
||||
|
||||
DRIVER_INIT_MEMBER(namconb1_state,gslgr94j)
|
||||
{
|
||||
namcos2_gametype = NAMCONB1_GSLGR94J;
|
||||
m_gametype = NAMCONB1_GSLGR94J;
|
||||
} /* gslgr94j */
|
||||
|
||||
DRIVER_INIT_MEMBER(namconb1_state,sws95)
|
||||
{
|
||||
namcos2_gametype = NAMCONB1_SWS95;
|
||||
m_gametype = NAMCONB1_SWS95;
|
||||
} /* sws95 */
|
||||
|
||||
DRIVER_INIT_MEMBER(namconb1_state,sws96)
|
||||
{
|
||||
namcos2_gametype = NAMCONB1_SWS96;
|
||||
m_gametype = NAMCONB1_SWS96;
|
||||
} /* sws96 */
|
||||
|
||||
DRIVER_INIT_MEMBER(namconb1_state,sws97)
|
||||
{
|
||||
namcos2_gametype = NAMCONB1_SWS97;
|
||||
m_gametype = NAMCONB1_SWS97;
|
||||
} /* sws97 */
|
||||
|
||||
DRIVER_INIT_MEMBER(namconb1_state,gunbulet)
|
||||
{
|
||||
namcos2_gametype = NAMCONB1_GUNBULET;
|
||||
m_gametype = NAMCONB1_GUNBULET;
|
||||
} /* gunbulet */
|
||||
|
||||
DRIVER_INIT_MEMBER(namconb1_state,vshoot)
|
||||
{
|
||||
namcos2_gametype = NAMCONB1_VSHOOT;
|
||||
m_gametype = NAMCONB1_VSHOOT;
|
||||
} /* vshoot */
|
||||
|
||||
DRIVER_INIT_MEMBER(namconb1_state,machbrkr)
|
||||
{
|
||||
namcos2_gametype = NAMCONB2_MACH_BREAKERS;
|
||||
m_gametype = NAMCONB2_MACH_BREAKERS;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namconb1_state,outfxies)
|
||||
{
|
||||
namcos2_gametype = NAMCONB2_OUTFOXIES;
|
||||
m_gametype = NAMCONB2_OUTFOXIES;
|
||||
}
|
||||
|
||||
READ32_MEMBER(namconb1_state::custom_key_r)
|
||||
@ -669,7 +668,7 @@ READ32_MEMBER(namconb1_state::custom_key_r)
|
||||
m_count = machine().rand();
|
||||
} while( m_count==old_count );
|
||||
|
||||
switch( namcos2_gametype )
|
||||
switch( m_gametype )
|
||||
{
|
||||
case NAMCONB1_GUNBULET:
|
||||
return 0; /* no protection */
|
||||
@ -856,8 +855,8 @@ static ADDRESS_MAP_START( namconb1_am, AS_PROGRAM, 32, namconb1_state )
|
||||
AM_RANGE(0x208000, 0x2fffff) AM_RAM
|
||||
AM_RANGE(0x400000, 0x40001f) AM_READWRITE(namconb_cpureg_r, namconb1_cpureg_w)
|
||||
AM_RANGE(0x580000, 0x5807ff) AM_RAM AM_SHARE("nvmem32")
|
||||
AM_RANGE(0x600000, 0x61ffff) AM_READWRITE_LEGACY(namco_obj32_r,namco_obj32_w)
|
||||
AM_RANGE(0x620000, 0x620007) AM_READWRITE_LEGACY(namco_spritepos32_r,namco_spritepos32_w)
|
||||
AM_RANGE(0x600000, 0x61ffff) AM_READWRITE16(c355_obj_ram_r,c355_obj_ram_w,0xffffffff) AM_SHARE("objram")
|
||||
AM_RANGE(0x620000, 0x620007) AM_READWRITE16(c355_obj_position_r,c355_obj_position_w,0xffffffff)
|
||||
AM_RANGE(0x640000, 0x64ffff) AM_READWRITE_LEGACY(namco_tilemapvideoram32_r,namco_tilemapvideoram32_w )
|
||||
AM_RANGE(0x660000, 0x66003f) AM_READWRITE_LEGACY(namco_tilemapcontrol32_r,namco_tilemapcontrol32_w)
|
||||
AM_RANGE(0x680000, 0x68000f) AM_RAM AM_SHARE("spritebank32")
|
||||
@ -872,17 +871,17 @@ static ADDRESS_MAP_START( namconb2_am, AS_PROGRAM, 32, namconb1_state )
|
||||
AM_RANGE(0x200000, 0x207fff) AM_READWRITE(namconb_share_r, namconb_share_w)
|
||||
AM_RANGE(0x208000, 0x2fffff) AM_RAM
|
||||
AM_RANGE(0x400000, 0x4fffff) AM_ROM AM_REGION("data", 0)
|
||||
AM_RANGE(0x600000, 0x61ffff) AM_READWRITE_LEGACY(namco_obj32_r,namco_obj32_w)
|
||||
AM_RANGE(0x620000, 0x620007) AM_READWRITE_LEGACY(namco_spritepos32_r,namco_spritepos32_w)
|
||||
AM_RANGE(0x600000, 0x61ffff) AM_READWRITE16(c355_obj_ram_r,c355_obj_ram_w,0xffffffff) AM_SHARE("objram")
|
||||
AM_RANGE(0x620000, 0x620007) AM_READWRITE16(c355_obj_position_r,c355_obj_position_w,0xffffffff)
|
||||
AM_RANGE(0x640000, 0x64000f) AM_RAM /* unknown xy offset */
|
||||
AM_RANGE(0x680000, 0x68ffff) AM_READWRITE_LEGACY(namco_tilemapvideoram32_r, namco_tilemapvideoram32_w )
|
||||
AM_RANGE(0x6c0000, 0x6c003f) AM_READWRITE_LEGACY(namco_tilemapcontrol32_r, namco_tilemapcontrol32_w )
|
||||
AM_RANGE(0x700000, 0x71ffff) AM_READWRITE_LEGACY(namco_rozvideoram32_r,namco_rozvideoram32_w)
|
||||
AM_RANGE(0x740000, 0x74001f) AM_READWRITE_LEGACY(namco_rozcontrol32_r,namco_rozcontrol32_w)
|
||||
AM_RANGE(0x700000, 0x71ffff) AM_READWRITE16(c169_roz_videoram_r,c169_roz_videoram_w,0xffffffff) AM_SHARE("rozvideoram")
|
||||
AM_RANGE(0x740000, 0x74001f) AM_READWRITE16(c169_roz_control_r,c169_roz_control_w,0xffffffff)
|
||||
AM_RANGE(0x800000, 0x807fff) AM_RAM AM_SHARE("paletteram")
|
||||
AM_RANGE(0x900008, 0x90000f) AM_RAM AM_SHARE("spritebank32")
|
||||
AM_RANGE(0x940000, 0x94000f) AM_RAM AM_SHARE("tilebank32")
|
||||
AM_RANGE(0x980000, 0x98000f) AM_READ_LEGACY(namco_rozbank32_r) AM_WRITE_LEGACY(namco_rozbank32_w)
|
||||
AM_RANGE(0x980000, 0x98000f) AM_READWRITE16(c169_roz_bank_r,c169_roz_bank_w,0xffffffff)
|
||||
AM_RANGE(0xa00000, 0xa007ff) AM_RAM AM_SHARE("nvmem32")
|
||||
AM_RANGE(0xc00000, 0xc0001f) AM_READ(custom_key_r) AM_WRITENOP
|
||||
AM_RANGE(0xf00000, 0xf0001f) AM_READWRITE(namconb_cpureg_r, namconb2_cpureg_w)
|
||||
|
@ -538,7 +538,7 @@ WRITE16_MEMBER(namcos2_state::dpram_word_w)
|
||||
{
|
||||
m_dpram[offset] = data&0xff;
|
||||
|
||||
if( namcos2_gametype==NAMCOS2_GOLLY_GHOST )
|
||||
if( m_gametype==NAMCOS2_GOLLY_GHOST )
|
||||
{
|
||||
switch( offset )
|
||||
{
|
||||
@ -601,10 +601,10 @@ ADDRESS_MAP_END
|
||||
/*************************************************************/
|
||||
|
||||
static ADDRESS_MAP_START( common_default_am, AS_PROGRAM, 16, namcos2_state )
|
||||
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(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(0xc00000, 0xc03fff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0xc40000, 0xc40001) AM_READWRITE(gfx_ctrl_r, gfx_ctrl_w)
|
||||
AM_RANGE(0xc80000, 0xc9ffff) AM_RAM_WRITE(rozram_word_w) AM_SHARE("rozram")
|
||||
AM_RANGE(0xcc0000, 0xcc000f) AM_RAM AM_SHARE("rozctrl")
|
||||
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
|
||||
@ -629,8 +629,8 @@ 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_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(0x800000, 0x80ffff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x840000, 0x840001) AM_READWRITE(gfx_ctrl_r, 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
|
||||
AM_IMPORT_FROM( namcos2_68k_default_cpu_board_am )
|
||||
@ -654,7 +654,7 @@ ADDRESS_MAP_END
|
||||
/*************************************************************/
|
||||
|
||||
static ADDRESS_MAP_START( common_sgunner_am, AS_PROGRAM, 16, namcos2_state )
|
||||
AM_RANGE(0x800000, 0x8141ff) AM_READWRITE_LEGACY(namco_obj16_r,namco_obj16_w)
|
||||
AM_RANGE(0x800000, 0x8141ff) AM_READWRITE(c355_obj_ram_r,c355_obj_ram_w) AM_SHARE("objram")
|
||||
AM_RANGE(0x818000, 0x818001) AM_WRITENOP
|
||||
AM_RANGE(0xa00000, 0xa0000f) AM_READWRITE_LEGACY(namcos2_68k_key_r,namcos2_68k_key_w)
|
||||
AM_IMPORT_FROM( namcos2_68k_default_cpu_board_am )
|
||||
@ -678,10 +678,10 @@ ADDRESS_MAP_END
|
||||
/*************************************************************/
|
||||
|
||||
static ADDRESS_MAP_START( common_metlhawk_am, AS_PROGRAM, 16, namcos2_state )
|
||||
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) /* ??? */ \
|
||||
AM_RANGE(0xc00000, 0xc03fff) AM_RAM AM_SHARE("spriteram") \
|
||||
AM_RANGE(0xc40000, 0xc4ffff) AM_READWRITE(c169_roz_videoram_r,c169_roz_videoram_w) AM_SHARE("rozvideoram") \
|
||||
AM_RANGE(0xd00000, 0xd0001f) AM_READWRITE(c169_roz_control_r,c169_roz_control_w) \
|
||||
AM_RANGE(0xe00000, 0xe00001) AM_READWRITE(gfx_ctrl_r, gfx_ctrl_w) /* ??? */ \
|
||||
AM_IMPORT_FROM( namcos2_68k_default_cpu_board_am )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -703,14 +703,14 @@ ADDRESS_MAP_END
|
||||
/*************************************************************/
|
||||
|
||||
static ADDRESS_MAP_START( common_luckywld_am, AS_PROGRAM, 16, namcos2_state )
|
||||
AM_RANGE(0x800000, 0x8141ff) AM_READWRITE_LEGACY(namco_obj16_r,namco_obj16_w)
|
||||
AM_RANGE(0x800000, 0x8141ff) AM_READWRITE(c355_obj_ram_r,c355_obj_ram_w) AM_SHARE("objram")
|
||||
AM_RANGE(0x818000, 0x818001) AM_NOP /* enable? */
|
||||
AM_RANGE(0x81a000, 0x81a001) AM_WRITENOP /* enable? */
|
||||
AM_RANGE(0x840000, 0x840001) AM_READNOP
|
||||
AM_RANGE(0x900000, 0x900007) AM_READWRITE_LEGACY(namco_spritepos16_r,namco_spritepos16_w)
|
||||
AM_RANGE(0x900000, 0x900007) AM_READWRITE(c355_obj_position_r,c355_obj_position_w)
|
||||
AM_RANGE(0xa00000, 0xa1ffff) AM_READWRITE_LEGACY(namco_road16_r,namco_road16_w)
|
||||
AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE_LEGACY(namco_rozvideoram16_r,namco_rozvideoram16_w)
|
||||
AM_RANGE(0xd00000, 0xd0001f) AM_READWRITE_LEGACY(namco_rozcontrol16_r,namco_rozcontrol16_w)
|
||||
AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE(c169_roz_videoram_r,c169_roz_videoram_w) AM_SHARE("rozvideoram")
|
||||
AM_RANGE(0xd00000, 0xd0001f) AM_READWRITE(c169_roz_control_r,c169_roz_control_w)
|
||||
AM_RANGE(0xf00000, 0xf00007) AM_READWRITE_LEGACY(namcos2_68k_key_r,namcos2_68k_key_w)
|
||||
AM_IMPORT_FROM( namcos2_68k_default_cpu_board_am )
|
||||
ADDRESS_MAP_END
|
||||
@ -5004,17 +5004,17 @@ ROM_END
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,assault)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_ASSAULT;
|
||||
m_gametype=NAMCOS2_ASSAULT;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,assaultj)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_ASSAULT_JP;
|
||||
m_gametype=NAMCOS2_ASSAULT_JP;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,assaultp)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_ASSAULT_PLUS;
|
||||
m_gametype=NAMCOS2_ASSAULT_PLUS;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,assaultp_hack)
|
||||
@ -5033,67 +5033,67 @@ DRIVER_INIT_MEMBER(namcos2_state,assaultp_hack)
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,burnforc)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_BURNING_FORCE;
|
||||
m_gametype=NAMCOS2_BURNING_FORCE;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,cosmogng)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_COSMO_GANG;
|
||||
m_gametype=NAMCOS2_COSMO_GANG;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,dsaber)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_DRAGON_SABER;
|
||||
m_gametype=NAMCOS2_DRAGON_SABER;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,dsaberj)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_DRAGON_SABER;
|
||||
m_gametype=NAMCOS2_DRAGON_SABER;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,dirtfoxj)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_DIRT_FOX_JP;
|
||||
m_gametype=NAMCOS2_DIRT_FOX_JP;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,finallap)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_FINAL_LAP;
|
||||
m_gametype=NAMCOS2_FINAL_LAP;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,finalap2)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_FINAL_LAP_2;
|
||||
m_gametype=NAMCOS2_FINAL_LAP_2;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,finalap3)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_FINAL_LAP_3;
|
||||
m_gametype=NAMCOS2_FINAL_LAP_3;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,finehour)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_FINEST_HOUR;
|
||||
m_gametype=NAMCOS2_FINEST_HOUR;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,fourtrax)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_FOUR_TRAX;
|
||||
m_gametype=NAMCOS2_FOUR_TRAX;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,kyukaidk)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_KYUUKAI_DOUCHUUKI;
|
||||
m_gametype=NAMCOS2_KYUUKAI_DOUCHUUKI;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,marvlanj)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_MARVEL_LAND;
|
||||
m_gametype=NAMCOS2_MARVEL_LAND;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,marvland)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_MARVEL_LAND;
|
||||
m_gametype=NAMCOS2_MARVEL_LAND;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,metlhawk)
|
||||
@ -5151,82 +5151,82 @@ DRIVER_INIT_MEMBER(namcos2_state,metlhawk)
|
||||
} /* next k */
|
||||
} /* next j */
|
||||
} /* next i */
|
||||
namcos2_gametype=NAMCOS2_METAL_HAWK;
|
||||
m_gametype=NAMCOS2_METAL_HAWK;
|
||||
} /* metlhawk */
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,mirninja)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_MIRAI_NINJA;
|
||||
m_gametype=NAMCOS2_MIRAI_NINJA;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,ordyne)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_ORDYNE;
|
||||
m_gametype=NAMCOS2_ORDYNE;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,phelios)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_PHELIOS;
|
||||
m_gametype=NAMCOS2_PHELIOS;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,rthun2)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_ROLLING_THUNDER_2;
|
||||
m_gametype=NAMCOS2_ROLLING_THUNDER_2;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,rthun2j)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_ROLLING_THUNDER_2;
|
||||
m_gametype=NAMCOS2_ROLLING_THUNDER_2;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,sgunner2)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_STEEL_GUNNER_2;
|
||||
m_gametype=NAMCOS2_STEEL_GUNNER_2;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,sws)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_SUPER_WSTADIUM;
|
||||
m_gametype=NAMCOS2_SUPER_WSTADIUM;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,sws92)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_SUPER_WSTADIUM_92;
|
||||
m_gametype=NAMCOS2_SUPER_WSTADIUM_92;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,sws92g)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_SUPER_WSTADIUM_92T;
|
||||
m_gametype=NAMCOS2_SUPER_WSTADIUM_92T;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,sws93)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_SUPER_WSTADIUM_93;
|
||||
m_gametype=NAMCOS2_SUPER_WSTADIUM_93;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,suzuka8h)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_SUZUKA_8_HOURS;
|
||||
m_gametype=NAMCOS2_SUZUKA_8_HOURS;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,suzuk8h2)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_SUZUKA_8_HOURS_2;
|
||||
m_gametype=NAMCOS2_SUZUKA_8_HOURS_2;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,valkyrie)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_VALKYRIE;
|
||||
m_gametype=NAMCOS2_VALKYRIE;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,gollygho)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_GOLLY_GHOST;
|
||||
m_gametype=NAMCOS2_GOLLY_GHOST;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(namcos2_state,bubbletr)
|
||||
{
|
||||
namcos2_gametype=NAMCOS2_BUBBLE_TROUBLE;
|
||||
m_gametype=NAMCOS2_BUBBLE_TROUBLE;
|
||||
}
|
||||
|
||||
|
||||
@ -5249,7 +5249,7 @@ DRIVER_INIT_MEMBER(namcos2_state,luckywld)
|
||||
if( code&0x80 ) out |= 0x01;
|
||||
pData[i] = out;
|
||||
}
|
||||
namcos2_gametype=NAMCOS2_LUCKY_AND_WILD;
|
||||
m_gametype=NAMCOS2_LUCKY_AND_WILD;
|
||||
}
|
||||
|
||||
/* Based on the dumped BIOS versions it looks like Namco changed the BIOS rom */
|
||||
|
@ -296,7 +296,6 @@ CPU68 PCB:
|
||||
#include "emu.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "cpu/m6805/m6805.h"
|
||||
#include "includes/namcos2.h"
|
||||
#include "cpu/m6809/m6809.h"
|
||||
#include "cpu/tms32025/tms32025.h"
|
||||
#include "includes/namcoic.h"
|
||||
@ -341,7 +340,7 @@ WRITE16_MEMBER(namcos21_state::dspcuskey_w)
|
||||
READ16_MEMBER(namcos21_state::dspcuskey_r)
|
||||
{
|
||||
UINT16 result = 0;
|
||||
if( namcos2_gametype == NAMCOS21_SOLVALOU )
|
||||
if( m_gametype == NAMCOS21_SOLVALOU )
|
||||
{
|
||||
switch( cpu_get_pc(&space.device()) )
|
||||
{
|
||||
@ -354,7 +353,7 @@ READ16_MEMBER(namcos21_state::dspcuskey_r)
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if( namcos2_gametype == NAMCOS21_CYBERSLED )
|
||||
else if( m_gametype == NAMCOS21_CYBERSLED )
|
||||
{
|
||||
switch( cpu_get_pc(&space.device()) )
|
||||
{
|
||||
@ -365,7 +364,7 @@ READ16_MEMBER(namcos21_state::dspcuskey_r)
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if( namcos2_gametype == NAMCOS21_AIRCOMBAT )
|
||||
else if( m_gametype == NAMCOS21_AIRCOMBAT )
|
||||
{
|
||||
switch( cpu_get_pc(&space.device()) )
|
||||
{
|
||||
@ -497,7 +496,7 @@ namcos21_kickstart( running_machine &machine, int internal )
|
||||
{
|
||||
namcos21_state *state = machine.driver_data<namcos21_state>();
|
||||
/* patch dsp watchdog */
|
||||
switch( namcos2_gametype )
|
||||
switch( state->m_gametype )
|
||||
{
|
||||
case NAMCOS21_AIRCOMBAT:
|
||||
state->m_master_dsp_code[0x008e] = 0x808f;
|
||||
@ -567,7 +566,7 @@ WRITE16_MEMBER(namcos21_state::dspram16_w)
|
||||
{
|
||||
COMBINE_DATA( &m_dspram16[offset] );
|
||||
|
||||
if( namcos2_gametype != NAMCOS21_WINRUN91 )
|
||||
if( m_gametype != NAMCOS21_WINRUN91 )
|
||||
{
|
||||
if( m_mpDspState->masterSourceAddr &&
|
||||
offset == 1+(m_mpDspState->masterSourceAddr&0x7fff) )
|
||||
@ -575,7 +574,7 @@ WRITE16_MEMBER(namcos21_state::dspram16_w)
|
||||
if (ENABLE_LOGGING) logerror( "IDC-CONTINUE\n" );
|
||||
TransferDspData(machine());
|
||||
}
|
||||
else if (namcos2_gametype == NAMCOS21_SOLVALOU &&
|
||||
else if (m_gametype == NAMCOS21_SOLVALOU &&
|
||||
offset == 0x103 &&
|
||||
&space.device() == machine().device("maincpu"))
|
||||
{ /* hack; synchronization for solvalou */
|
||||
@ -1075,8 +1074,8 @@ READ16_MEMBER(namcos21_state::NAMCO_C139_SCI_register_r){ return 0; }
|
||||
AM_RANGE(0x440000, 0x440001) AM_READWRITE(pointram_data_r,pointram_data_w) \
|
||||
AM_RANGE(0x440002, 0x47ffff) AM_WRITENOP /* (?) Air Combat */ \
|
||||
AM_RANGE(0x480000, 0x4807ff) AM_READWRITE(namcos21_depthcue_r,namcos21_depthcue_w) /* Air Combat */ \
|
||||
AM_RANGE(0x700000, 0x71ffff) AM_READWRITE_LEGACY(namco_obj16_r,namco_obj16_w) \
|
||||
AM_RANGE(0x720000, 0x720007) AM_READWRITE_LEGACY(namco_spritepos16_r,namco_spritepos16_w) \
|
||||
AM_RANGE(0x700000, 0x71ffff) AM_READWRITE(c355_obj_ram_r,c355_obj_ram_w) AM_SHARE("objram") \
|
||||
AM_RANGE(0x720000, 0x720007) AM_READWRITE(c355_obj_position_r,c355_obj_position_w) \
|
||||
AM_RANGE(0x740000, 0x75ffff) AM_READWRITE(paletteram16_r,paletteram16_w) AM_SHARE("paletteram") \
|
||||
AM_RANGE(0x760000, 0x760001) AM_READWRITE(namcos21_video_enable_r,namcos21_video_enable_w) \
|
||||
AM_RANGE(0x800000, 0x8fffff) AM_READ(datarom_r) \
|
||||
@ -1415,8 +1414,8 @@ ADDRESS_MAP_END
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define DRIVEYES_68K_COMMON \
|
||||
AM_RANGE(0x700000, 0x71ffff) AM_READWRITE_LEGACY(namco_obj16_r,namco_obj16_w) \
|
||||
AM_RANGE(0x720000, 0x720007) AM_READWRITE_LEGACY(namco_spritepos16_r,namco_spritepos16_w) \
|
||||
AM_RANGE(0x700000, 0x71ffff) AM_READWRITE(c355_obj_ram_r,c355_obj_ram_w) AM_SHARE("objram") \
|
||||
AM_RANGE(0x720000, 0x720007) AM_READWRITE(c355_obj_position_r,c355_obj_position_w) \
|
||||
AM_RANGE(0x740000, 0x75ffff) AM_READWRITE(paletteram16_r,paletteram16_w) AM_SHARE("paletteram") \
|
||||
AM_RANGE(0x760000, 0x760001) AM_READWRITE(namcos21_video_enable_r,namcos21_video_enable_w) \
|
||||
AM_RANGE(0x800000, 0x8fffff) AM_READ(datarom_r) \
|
||||
@ -2217,7 +2216,7 @@ ROM_END
|
||||
static void namcos21_init( running_machine &machine, int game_type )
|
||||
{
|
||||
namcos21_state *state = machine.driver_data<namcos21_state>();
|
||||
namcos2_gametype = game_type;
|
||||
state->m_gametype = game_type;
|
||||
state->m_pointram = auto_alloc_array(machine, UINT8, PTRAM_SIZE);
|
||||
state->m_mpDataROM = (UINT16 *)state->memregion( "user1" )->base();
|
||||
InitDSP(machine);
|
||||
@ -2237,7 +2236,7 @@ DRIVER_INIT_MEMBER(namcos21_state,winrun)
|
||||
|
||||
m_winrun_dspcomram = auto_alloc_array(machine(), UINT16, 0x1000*2);
|
||||
|
||||
namcos2_gametype = NAMCOS21_WINRUN91;
|
||||
m_gametype = NAMCOS21_WINRUN91;
|
||||
m_mpDataROM = (UINT16 *)memregion( "user1" )->base();
|
||||
m_pointram = auto_alloc_array(machine(), UINT8, PTRAM_SIZE);
|
||||
m_pointram_idx = 0;
|
||||
@ -2278,7 +2277,7 @@ DRIVER_INIT_MEMBER(namcos21_state,driveyes)
|
||||
pMem[pc++] = 0xff80; /* b */
|
||||
pMem[pc++] = 0;
|
||||
m_winrun_dspcomram = auto_alloc_array(machine(), UINT16, 0x1000*2);
|
||||
namcos2_gametype = NAMCOS21_DRIVERS_EYES;
|
||||
m_gametype = NAMCOS21_DRIVERS_EYES;
|
||||
m_mpDataROM = (UINT16 *)memregion( "user1" )->base();
|
||||
m_pointram = auto_alloc_array(machine(), UINT8, PTRAM_SIZE);
|
||||
m_pointram_idx = 0;
|
||||
|
@ -1,3 +1,5 @@
|
||||
#include "namcos2.h"
|
||||
|
||||
#define NAMCOFL_HTOTAL (288) /* wrong */
|
||||
#define NAMCOFL_HBSTART (288)
|
||||
#define NAMCOFL_VTOTAL (262) /* needs to be checked */
|
||||
@ -13,11 +15,11 @@
|
||||
#define NAMCOFL_SPRITEGFX 1
|
||||
#define NAMCOFL_ROTGFX 2
|
||||
|
||||
class namcofl_state : public driver_device
|
||||
class namcofl_state : public namcos2_shared_state
|
||||
{
|
||||
public:
|
||||
namcofl_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
: namcos2_shared_state(mconfig, type, tag),
|
||||
m_maincpu(*this,"maincpu"),
|
||||
m_mcu(*this,"mcu"),
|
||||
m_shareram(*this, "shareram"){ }
|
||||
|
@ -111,48 +111,6 @@ READ32_HANDLER( namco_tilemapcontrol32_le_r );
|
||||
WRITE32_HANDLER( namco_tilemapcontrol32_le_w );
|
||||
|
||||
/***********************************************************************************/
|
||||
/* C355 Motion Object Emulation */
|
||||
|
||||
/* for palXOR, supply either 0x0 (normal) or 0xf (palette mapping reversed) */
|
||||
void namco_obj_init( running_machine &machine, int gfxbank, int palXOR, int (*code2tile)( running_machine &machine, int code ) );
|
||||
void namco_obj_draw( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri );
|
||||
void namco_obj_draw( running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri );
|
||||
|
||||
WRITE16_HANDLER( namco_obj16_w );
|
||||
READ16_HANDLER( namco_obj16_r );
|
||||
|
||||
WRITE32_HANDLER( namco_obj32_w );
|
||||
READ32_HANDLER( namco_obj32_r );
|
||||
WRITE32_HANDLER( namco_obj32_le_w );
|
||||
READ32_HANDLER( namco_obj32_le_r );
|
||||
|
||||
WRITE16_HANDLER( namco_spritepos16_w );
|
||||
READ16_HANDLER( namco_spritepos16_r );
|
||||
|
||||
WRITE32_HANDLER( namco_spritepos32_w );
|
||||
READ32_HANDLER( namco_spritepos32_r );
|
||||
|
||||
/***********************************************************************************/
|
||||
/* C169 ROZ Layer Emulation */
|
||||
|
||||
void namco_roz_init( running_machine &machine, int gfxbank, const char *maskregion );
|
||||
void namco_roz_draw( bitmap_ind16 &bitmap, const rectangle &cliprect, int pri );
|
||||
|
||||
READ16_HANDLER( namco_rozcontrol16_r );
|
||||
WRITE16_HANDLER( namco_rozcontrol16_w );
|
||||
READ16_HANDLER( namco_rozvideoram16_r );
|
||||
WRITE16_HANDLER( namco_rozvideoram16_w );
|
||||
|
||||
READ32_HANDLER( namco_rozcontrol32_r );
|
||||
WRITE32_HANDLER( namco_rozcontrol32_w );
|
||||
READ32_HANDLER( namco_rozcontrol32_le_r );
|
||||
WRITE32_HANDLER( namco_rozcontrol32_le_w );
|
||||
READ32_HANDLER( namco_rozbank32_r );
|
||||
WRITE32_HANDLER( namco_rozbank32_w );
|
||||
READ32_HANDLER( namco_rozvideoram32_r );
|
||||
WRITE32_HANDLER( namco_rozvideoram32_w );
|
||||
READ32_HANDLER( namco_rozvideoram32_le_r );
|
||||
WRITE32_HANDLER( namco_rozvideoram32_le_w );
|
||||
|
||||
/***********************************************************************************/
|
||||
/* C45 Land (Road) Emulation */
|
||||
|
@ -1,3 +1,5 @@
|
||||
#include "namcos2.h"
|
||||
|
||||
#define NAMCONB1_HTOTAL (288) /* wrong */
|
||||
#define NAMCONB1_HBSTART (288)
|
||||
#define NAMCONB1_VTOTAL (262) /* needs to be checked */
|
||||
@ -13,11 +15,11 @@
|
||||
#define NAMCONB1_SPRITEGFX 1
|
||||
#define NAMCONB1_ROTGFX 2
|
||||
|
||||
class namconb1_state : public driver_device
|
||||
class namconb1_state : public namcos2_shared_state
|
||||
{
|
||||
public:
|
||||
namconb1_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
: namcos2_shared_state(mconfig, type, tag),
|
||||
m_maincpu(*this,"maincpu"),
|
||||
m_mcu(*this,"mcu"),
|
||||
m_nvmem32(*this, "nvmem32"),
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
/*********************************************/
|
||||
/* IF GAME SPECIFIC HACKS ARE REQUIRED THEN */
|
||||
/* USE THE namcos2_gametype VARIABLE TO FIND */
|
||||
/* USE THE m_gametype MEMBER TO FIND */
|
||||
/* OUT WHAT GAME IS RUNNING */
|
||||
/*********************************************/
|
||||
|
||||
@ -85,15 +85,103 @@ enum
|
||||
NAMCOFL_FINAL_LAP_R
|
||||
};
|
||||
|
||||
class namcos2_state : public driver_device
|
||||
// fix me -- most of this should be devices eventually
|
||||
class namcos2_shared_state : public driver_device
|
||||
{
|
||||
public:
|
||||
namcos2_shared_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_gametype(0),
|
||||
m_c169_roz_videoram(*this, "rozvideoram", 0),
|
||||
m_c169_roz_gfxbank(0),
|
||||
m_c169_roz_mask(NULL),
|
||||
m_c355_obj_ram(*this, "objram", 0),
|
||||
m_c355_obj_gfxbank(0),
|
||||
m_c355_obj_palxor(0)
|
||||
{ }
|
||||
|
||||
// game type helpers
|
||||
bool is_system21();
|
||||
int m_gametype;
|
||||
|
||||
// C169 ROZ Layer Emulation
|
||||
public:
|
||||
void c169_roz_init(int gfxbank, const char *maskregion);
|
||||
void c169_roz_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri);
|
||||
DECLARE_READ16_MEMBER( c169_roz_control_r );
|
||||
DECLARE_WRITE16_MEMBER( c169_roz_control_w );
|
||||
DECLARE_READ16_MEMBER( c169_roz_bank_r );
|
||||
DECLARE_WRITE16_MEMBER( c169_roz_bank_w );
|
||||
DECLARE_READ16_MEMBER( c169_roz_videoram_r );
|
||||
DECLARE_WRITE16_MEMBER( c169_roz_videoram_w );
|
||||
|
||||
protected:
|
||||
struct roz_parameters
|
||||
{
|
||||
UINT32 left, top, size;
|
||||
UINT32 startx, starty;
|
||||
int incxx, incxy, incyx, incyy;
|
||||
int color, priority;
|
||||
};
|
||||
void c169_roz_unpack_params(const UINT16 *source, roz_parameters ¶ms);
|
||||
void c169_roz_draw_helper(bitmap_ind16 &bitmap, tilemap_t &tmap, const rectangle &clip, const roz_parameters ¶ms);
|
||||
void c169_roz_draw_scanline(bitmap_ind16 &bitmap, int line, int which, int pri, const rectangle &cliprect);
|
||||
void c169_roz_get_info(tile_data &tileinfo, int tile_index, int which);
|
||||
TILE_GET_INFO_MEMBER( c169_roz_get_info0 );
|
||||
TILE_GET_INFO_MEMBER( c169_roz_get_info1 );
|
||||
TILEMAP_MAPPER_MEMBER( c169_roz_mapper );
|
||||
|
||||
static const int ROZ_TILEMAP_COUNT = 2;
|
||||
tilemap_t *m_c169_roz_tilemap[ROZ_TILEMAP_COUNT];
|
||||
UINT16 m_c169_roz_bank[0x10/2];
|
||||
UINT16 m_c169_roz_control[0x20/2];
|
||||
optional_shared_ptr<UINT16> m_c169_roz_videoram;
|
||||
int m_c169_roz_gfxbank;
|
||||
UINT8 *m_c169_roz_mask;
|
||||
|
||||
// C355 Motion Object Emulation
|
||||
public:
|
||||
typedef delegate<int (int)> c355_obj_code2tile_delegate;
|
||||
// for pal_xor, supply either 0x0 (normal) or 0xf (palette mapping reversed)
|
||||
void c355_obj_init(int gfxbank, int pal_xor, c355_obj_code2tile_delegate code2tile);
|
||||
int c355_obj_default_code2tile(int code);
|
||||
void c355_obj_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri);
|
||||
void c355_obj_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri);
|
||||
DECLARE_READ16_MEMBER( c355_obj_ram_r );
|
||||
DECLARE_WRITE16_MEMBER( c355_obj_ram_w );
|
||||
DECLARE_READ16_MEMBER( c355_obj_position_r );
|
||||
DECLARE_WRITE16_MEMBER( c355_obj_position_w );
|
||||
|
||||
protected:
|
||||
// C355 Motion Object internals
|
||||
template<class _BitmapClass>
|
||||
void c355_obj_draw_sprite(_BitmapClass &bitmap, const rectangle &cliprect, const UINT16 *pSource, int pri, int zpos);
|
||||
template<class _BitmapClass>
|
||||
void c355_obj_draw_list(_BitmapClass &bitmap, const rectangle &cliprect, int pri, const UINT16 *pSpriteList16, const UINT16 *pSpriteTable);
|
||||
|
||||
optional_shared_ptr<UINT16> m_c355_obj_ram;
|
||||
c355_obj_code2tile_delegate m_c355_obj_code2tile;
|
||||
int m_c355_obj_gfxbank;
|
||||
int m_c355_obj_palxor;
|
||||
UINT16 m_c355_obj_position[4];
|
||||
|
||||
|
||||
public:
|
||||
// general
|
||||
void zdrawgfxzoom(bitmap_ind16 &dest_bmp, const rectangle &clip, const gfx_element *gfx, UINT32 code, UINT32 color, int flipx, int flipy, int sx, int sy, int scalex, int scaley, int zpos);
|
||||
void zdrawgfxzoom(bitmap_rgb32 &dest_bmp, const rectangle &clip, const gfx_element *gfx, UINT32 code, UINT32 color, int flipx, int flipy, int sx, int sy, int scalex, int scaley, int zpos);
|
||||
};
|
||||
|
||||
class namcos2_state : public namcos2_shared_state
|
||||
{
|
||||
public:
|
||||
namcos2_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
: namcos2_shared_state(mconfig, type, tag),
|
||||
m_dpram(*this, "dpram"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_paletteram(*this, "paletteram"),
|
||||
m_rozram(*this, "rozram")
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_rozram(*this, "rozram"),
|
||||
m_roz_ctrl(*this, "rozctrl")
|
||||
{ }
|
||||
DECLARE_READ16_MEMBER(dpram_word_r);
|
||||
DECLARE_WRITE16_MEMBER(dpram_word_w);
|
||||
@ -145,16 +233,16 @@ public:
|
||||
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);
|
||||
|
||||
TILE_GET_INFO_MEMBER( roz_tile_info );
|
||||
|
||||
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 );
|
||||
DECLARE_READ16_MEMBER( gfx_ctrl_r );
|
||||
DECLARE_WRITE16_MEMBER( gfx_ctrl_w );
|
||||
|
||||
void draw_sprite_init();
|
||||
void update_palette();
|
||||
void apply_clip( rectangle &clip, const rectangle &cliprect );
|
||||
void draw_roz(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
@ -162,13 +250,15 @@ public:
|
||||
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;
|
||||
int get_pos_irq_scanline() { return (get_palette_register(5) - 32) & 0xff; }
|
||||
|
||||
UINT16 m_roz_ctrl[0x8];
|
||||
required_shared_ptr<UINT8> m_dpram; /* 2Kx8 */
|
||||
required_shared_ptr<UINT16> m_paletteram;
|
||||
optional_shared_ptr<UINT16> m_spriteram;
|
||||
optional_shared_ptr<UINT16> m_rozram;
|
||||
optional_shared_ptr<UINT16> m_roz_ctrl;
|
||||
tilemap_t *m_tilemap_roz;
|
||||
UINT16 m_gfx_ctrl;
|
||||
|
||||
};
|
||||
|
||||
@ -176,21 +266,6 @@ public:
|
||||
|
||||
#define NAMCOS21_NUM_COLORS 0x8000
|
||||
|
||||
VIDEO_START( namcos2 );
|
||||
|
||||
VIDEO_START( finallap );
|
||||
|
||||
VIDEO_START( luckywld );
|
||||
|
||||
VIDEO_START( metlhawk );
|
||||
|
||||
VIDEO_START( sgunner );
|
||||
|
||||
int namcos2_GetPosIrqScanline( running_machine &machine );
|
||||
|
||||
WRITE16_HANDLER( namcos2_gfx_ctrl_w );
|
||||
READ16_HANDLER( namcos2_gfx_ctrl_r );
|
||||
|
||||
/**************************************************************/
|
||||
/* Shared video palette function handlers */
|
||||
/**************************************************************/
|
||||
@ -204,7 +279,6 @@ READ16_HANDLER( namcos2_gfx_ctrl_r );
|
||||
/*----------- defined in machine/namcos2.c -----------*/
|
||||
|
||||
extern void (*namcos2_kickstart)(running_machine &machine, int internal);
|
||||
extern int namcos2_gametype;
|
||||
|
||||
MACHINE_START( namcos2 );
|
||||
MACHINE_RESET( namcos2 );
|
||||
|
@ -2,6 +2,8 @@
|
||||
* @file namcos21.h
|
||||
*/
|
||||
|
||||
#include "namcos2.h"
|
||||
|
||||
#define NAMCOS21_POLY_FRAME_WIDTH 496
|
||||
#define NAMCOS21_POLY_FRAME_HEIGHT 480
|
||||
|
||||
@ -23,11 +25,11 @@ struct dsp_state
|
||||
int slaveActive;
|
||||
};
|
||||
|
||||
class namcos21_state : public driver_device
|
||||
class namcos21_state : public namcos2_shared_state
|
||||
{
|
||||
public:
|
||||
namcos21_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
: namcos2_shared_state(mconfig, type, tag),
|
||||
m_winrun_dspbios(*this,"winrun_dspbios"),
|
||||
m_winrun_polydata(*this,"winrun_polydata"),
|
||||
m_winrun_gpucomram(*this,"winrun_comram"),
|
||||
|
@ -21,7 +21,6 @@ static void InitC148(void);
|
||||
static emu_timer *namcos2_posirq_timer;
|
||||
|
||||
void (*namcos2_kickstart)(running_machine &machine, int internal);
|
||||
int namcos2_gametype;
|
||||
|
||||
static unsigned mFinalLapProtCount;
|
||||
static int namcos2_mcu_analog_ctrl;
|
||||
@ -31,6 +30,7 @@ static UINT8 *namcos2_eeprom;
|
||||
static int sendval;
|
||||
|
||||
|
||||
// not shared
|
||||
READ16_HANDLER( namcos2_flap_prot_r )
|
||||
{
|
||||
static const UINT16 table0[8] = { 0x0000,0x0040,0x0440,0x2440,0x2480,0xa080,0x8081,0x8041 };
|
||||
@ -86,7 +86,7 @@ ResetAllSubCPUs( running_machine &machine, int state )
|
||||
{
|
||||
cputag_set_input_line(machine, "slave", INPUT_LINE_RESET, state);
|
||||
cputag_set_input_line(machine, "mcu", INPUT_LINE_RESET, state);
|
||||
switch( namcos2_gametype )
|
||||
switch( machine.driver_data<namcos2_shared_state>()->m_gametype )
|
||||
{
|
||||
case NAMCOS21_SOLVALOU:
|
||||
case NAMCOS21_STARBLADE:
|
||||
@ -232,7 +232,7 @@ sws93 1993 334 $014e
|
||||
|
||||
READ16_HANDLER( namcos2_68k_key_r )
|
||||
{
|
||||
switch (namcos2_gametype)
|
||||
switch (space->machine().driver_data<namcos2_shared_state>()->m_gametype)
|
||||
{
|
||||
case NAMCOS2_ORDYNE:
|
||||
switch(offset)
|
||||
@ -406,19 +406,20 @@ READ16_HANDLER( namcos2_68k_key_r )
|
||||
|
||||
WRITE16_HANDLER( namcos2_68k_key_w )
|
||||
{
|
||||
if( namcos2_gametype == NAMCOS2_MARVEL_LAND && offset == 5 )
|
||||
int gametype = space->machine().driver_data<namcos2_shared_state>()->m_gametype;
|
||||
if( gametype == NAMCOS2_MARVEL_LAND && offset == 5 )
|
||||
{
|
||||
if (data == 0x615E) sendval = 1;
|
||||
}
|
||||
if( namcos2_gametype == NAMCOS2_ROLLING_THUNDER_2 && offset == 4 )
|
||||
if( gametype == NAMCOS2_ROLLING_THUNDER_2 && offset == 4 )
|
||||
{
|
||||
if (data == 0x13EC) sendval = 1;
|
||||
}
|
||||
if( namcos2_gametype == NAMCOS2_ROLLING_THUNDER_2 && offset == 7 )
|
||||
if( gametype == NAMCOS2_ROLLING_THUNDER_2 && offset == 7 )
|
||||
{
|
||||
if (data == 0x13EC) sendval = 1;
|
||||
}
|
||||
if( namcos2_gametype == NAMCOS2_MARVEL_LAND && offset == 6 )
|
||||
if( gametype == NAMCOS2_MARVEL_LAND && offset == 6 )
|
||||
{
|
||||
if (data == 0x1001) sendval = 0;
|
||||
}
|
||||
@ -437,19 +438,19 @@ static UINT16 namcos2_68k_slave_C148[0x20];
|
||||
static UINT16 namcos2_68k_gpu_C148[0x20];
|
||||
|
||||
|
||||
static int IsSystem21( void )
|
||||
bool namcos2_shared_state::is_system21()
|
||||
{
|
||||
switch( namcos2_gametype )
|
||||
switch (m_gametype)
|
||||
{
|
||||
case NAMCOS21_AIRCOMBAT:
|
||||
case NAMCOS21_STARBLADE:
|
||||
case NAMCOS21_CYBERSLED:
|
||||
case NAMCOS21_SOLVALOU:
|
||||
case NAMCOS21_WINRUN91:
|
||||
case NAMCOS21_DRIVERS_EYES:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
case NAMCOS21_AIRCOMBAT:
|
||||
case NAMCOS21_STARBLADE:
|
||||
case NAMCOS21_CYBERSLED:
|
||||
case NAMCOS21_SOLVALOU:
|
||||
case NAMCOS21_WINRUN91:
|
||||
case NAMCOS21_DRIVERS_EYES:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -654,13 +655,15 @@ READ16_HANDLER( namcos2_68k_gpu_C148_r )
|
||||
|
||||
static int GetPosIRQScanline( running_machine &machine )
|
||||
{
|
||||
if (IsSystem21()) return 0;
|
||||
return namcos2_GetPosIrqScanline(machine);
|
||||
namcos2_shared_state *state = machine.driver_data<namcos2_shared_state>();
|
||||
if (state->is_system21()) return 0;
|
||||
return downcast<namcos2_state *>(state)->get_pos_irq_scanline();
|
||||
}
|
||||
|
||||
static TIMER_CALLBACK( namcos2_posirq_tick )
|
||||
{
|
||||
if (IsSystem21()) {
|
||||
namcos2_shared_state *state = machine.driver_data<namcos2_shared_state>();
|
||||
if (state->is_system21()) {
|
||||
if (namcos2_68k_gpu_C148[NAMCOS2_C148_POSIRQ]) {
|
||||
machine.primary_screen->update_partial(param);
|
||||
cputag_set_input_line(machine, "gpu", namcos2_68k_gpu_C148[NAMCOS2_C148_POSIRQ] , ASSERT_LINE);
|
||||
@ -682,13 +685,15 @@ void namcos2_adjust_posirq_timer( running_machine &machine, int scanline )
|
||||
|
||||
INTERRUPT_GEN( namcos2_68k_master_vblank )
|
||||
{
|
||||
if (!IsSystem21()) namcos2_adjust_posirq_timer(device->machine(), GetPosIRQScanline(device->machine()));
|
||||
namcos2_shared_state *state = device->machine().driver_data<namcos2_shared_state>();
|
||||
if (!state->is_system21()) namcos2_adjust_posirq_timer(device->machine(), GetPosIRQScanline(device->machine()));
|
||||
device_set_input_line(device, namcos2_68k_master_C148[NAMCOS2_C148_VBLANKIRQ], HOLD_LINE);
|
||||
}
|
||||
|
||||
INTERRUPT_GEN( namcos2_68k_slave_vblank )
|
||||
{
|
||||
if (!IsSystem21()) namcos2_adjust_posirq_timer(device->machine(), GetPosIRQScanline(device->machine()));
|
||||
namcos2_shared_state *state = device->machine().driver_data<namcos2_shared_state>();
|
||||
if (!state->is_system21()) namcos2_adjust_posirq_timer(device->machine(), GetPosIRQScanline(device->machine()));
|
||||
device_set_input_line(device, namcos2_68k_slave_C148[NAMCOS2_C148_VBLANKIRQ], HOLD_LINE);
|
||||
}
|
||||
|
||||
@ -765,8 +770,8 @@ WRITE8_HANDLER( namcos2_mcu_analog_ctrl_w )
|
||||
#if 0
|
||||
/* Perform the offset handling on the input port */
|
||||
/* this converts it to a twos complement number */
|
||||
if( namcos2_gametype == NAMCOS2_DIRT_FOX ||
|
||||
namcos2_gametype == NAMCOS2_DIRT_FOX_JP )
|
||||
if( m_gametype == NAMCOS2_DIRT_FOX ||
|
||||
m_gametype == NAMCOS2_DIRT_FOX_JP )
|
||||
{
|
||||
namcos2_mcu_analog_data ^= 0x80;
|
||||
}
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/namcoic.h"
|
||||
#include "includes/namcos2.h"
|
||||
#include "includes/namcofl.h"
|
||||
|
||||
|
||||
@ -83,6 +82,7 @@ static void TilemapCB(running_machine &machine, UINT16 code, int *tile, int *mas
|
||||
|
||||
SCREEN_UPDATE_IND16( namcofl )
|
||||
{
|
||||
namcofl_state *state = screen.machine().driver_data<namcofl_state>();
|
||||
int pri;
|
||||
|
||||
namcofl_install_palette(screen.machine());
|
||||
@ -91,10 +91,10 @@ SCREEN_UPDATE_IND16( namcofl )
|
||||
|
||||
for( pri=0; pri<16; pri++ )
|
||||
{
|
||||
namco_roz_draw( bitmap,cliprect,pri );
|
||||
state->c169_roz_draw(bitmap, cliprect, pri);
|
||||
if((pri&1)==0)
|
||||
namco_tilemap_draw( bitmap, cliprect, pri>>1 );
|
||||
namco_obj_draw(screen.machine(), bitmap, cliprect, pri );
|
||||
state->c355_obj_draw(bitmap, cliprect, pri );
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -119,7 +119,8 @@ static int FLobjcode2tile( running_machine &machine, int code )
|
||||
|
||||
VIDEO_START( namcofl )
|
||||
{
|
||||
namcofl_state *state = machine.driver_data<namcofl_state>();
|
||||
namco_tilemap_init( machine, NAMCOFL_TILEGFX, machine.root_device().memregion(NAMCOFL_TILEMASKREGION)->base(), TilemapCB );
|
||||
namco_obj_init(machine,NAMCOFL_SPRITEGFX,0x0,FLobjcode2tile);
|
||||
namco_roz_init(machine,NAMCOFL_ROTGFX,NAMCOFL_ROTMASKREGION);
|
||||
state->c355_obj_init(NAMCOFL_SPRITEGFX,0x0,namcos2_shared_state::c355_obj_code2tile_delegate(FUNC(FLobjcode2tile), &machine));
|
||||
state->c169_roz_init(NAMCOFL_ROTGFX,NAMCOFL_ROTMASKREGION);
|
||||
}
|
||||
|
@ -3,7 +3,6 @@
|
||||
#include "emu.h"
|
||||
#include "includes/namconb1.h"
|
||||
#include "includes/namcoic.h"
|
||||
#include "includes/namcos2.h"
|
||||
|
||||
|
||||
/* nth_word32 is a general-purpose utility function, which allows us to
|
||||
@ -52,7 +51,7 @@ NB2TilemapCB(running_machine &machine, UINT16 code, int *tile, int *mask )
|
||||
namconb1_state *state = machine.driver_data<namconb1_state>();
|
||||
int mangle;
|
||||
|
||||
if( namcos2_gametype == NAMCONB2_MACH_BREAKERS )
|
||||
if( state->m_gametype == NAMCONB2_MACH_BREAKERS )
|
||||
{
|
||||
/* 00010203 04050607 00010203 04050607 (normal) */
|
||||
/* 00010718 191a1b07 00010708 090a0b07 (alt bank) */
|
||||
@ -105,6 +104,7 @@ static void namconb1_install_palette(running_machine &machine)
|
||||
static void
|
||||
video_update_common(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int bROZ )
|
||||
{
|
||||
namconb1_state *state = machine.driver_data<namconb1_state>();
|
||||
int pri;
|
||||
namconb1_install_palette(machine);
|
||||
|
||||
@ -112,12 +112,12 @@ video_update_common(running_machine &machine, bitmap_ind16 &bitmap, const rectan
|
||||
{
|
||||
for( pri=0; pri<16; pri++ )
|
||||
{
|
||||
namco_roz_draw( bitmap,cliprect,pri );
|
||||
state->c169_roz_draw(bitmap, cliprect, pri);
|
||||
if( (pri&1)==0 )
|
||||
{
|
||||
namco_tilemap_draw( bitmap, cliprect, pri/2 );
|
||||
}
|
||||
namco_obj_draw(machine, bitmap, cliprect, pri );
|
||||
state->c355_obj_draw(bitmap, cliprect, pri );
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -125,7 +125,7 @@ video_update_common(running_machine &machine, bitmap_ind16 &bitmap, const rectan
|
||||
for( pri=0; pri<8; pri++ )
|
||||
{
|
||||
namco_tilemap_draw( bitmap, cliprect, pri );
|
||||
namco_obj_draw(machine, bitmap, cliprect, pri );
|
||||
state->c355_obj_draw(bitmap, cliprect, pri );
|
||||
}
|
||||
}
|
||||
} /* video_update_common */
|
||||
@ -164,8 +164,9 @@ NB1objcode2tile( running_machine &machine, int code )
|
||||
|
||||
VIDEO_START( namconb1 )
|
||||
{
|
||||
namconb1_state *state = machine.driver_data<namconb1_state>();
|
||||
namco_tilemap_init( machine, NAMCONB1_TILEGFX, machine.root_device().memregion(NAMCONB1_TILEMASKREGION)->base(), NB1TilemapCB );
|
||||
namco_obj_init(machine,NAMCONB1_SPRITEGFX,0x0,NB1objcode2tile);
|
||||
state->c355_obj_init(NAMCONB1_SPRITEGFX,0x0,namcos2_shared_state::c355_obj_code2tile_delegate(FUNC(NB1objcode2tile), &machine));
|
||||
} /* namconb1 */
|
||||
|
||||
/****************************************************************************************************/
|
||||
@ -202,7 +203,7 @@ NB2objcode2tile( running_machine &machine, int code )
|
||||
namconb1_state *state = machine.driver_data<namconb1_state>();
|
||||
int bank = nth_byte32( state->m_spritebank32, (code>>11)&0xf );
|
||||
code &= 0x7ff;
|
||||
if( namcos2_gametype == NAMCONB2_MACH_BREAKERS )
|
||||
if( state->m_gametype == NAMCONB2_MACH_BREAKERS )
|
||||
{
|
||||
if( bank&0x01 ) code |= 0x01*0x800;
|
||||
if( bank&0x02 ) code |= 0x02*0x800;
|
||||
@ -225,7 +226,8 @@ NB2objcode2tile( running_machine &machine, int code )
|
||||
|
||||
VIDEO_START( namconb2 )
|
||||
{
|
||||
namconb1_state *state = machine.driver_data<namconb1_state>();
|
||||
namco_tilemap_init(machine, NAMCONB1_TILEGFX, machine.root_device().memregion(NAMCONB1_TILEMASKREGION)->base(), NB2TilemapCB );
|
||||
namco_obj_init(machine,NAMCONB1_SPRITEGFX,0x0,NB2objcode2tile);
|
||||
namco_roz_init(machine, NAMCONB1_ROTGFX,NAMCONB1_ROTMASKREGION);
|
||||
state->c355_obj_init(NAMCONB1_SPRITEGFX,0x0,namcos2_shared_state::c355_obj_code2tile_delegate(FUNC(NB2objcode2tile), &machine));
|
||||
state->c169_roz_init(NAMCONB1_ROTGFX,NAMCONB1_ROTMASKREGION);
|
||||
} /* namconb2_vh_start */
|
||||
|
@ -10,7 +10,8 @@ TilemapCB( running_machine &machine, UINT16 code, int *tile, int *mask )
|
||||
{
|
||||
*mask = code;
|
||||
|
||||
switch( namcos2_gametype )
|
||||
namcos2_shared_state *state = machine.driver_data<namcos2_shared_state>();
|
||||
switch( state->m_gametype )
|
||||
{
|
||||
case NAMCOS2_FINAL_LAP_2:
|
||||
case NAMCOS2_FINAL_LAP_3:
|
||||
@ -25,33 +26,31 @@ TilemapCB( running_machine &machine, UINT16 code, int *tile, int *mask )
|
||||
} /* TilemapCB */
|
||||
|
||||
/**
|
||||
* namcos2_gfx_ctrl selects a bank of 128 sprites within spriteram
|
||||
* m_gfx_ctrl selects a bank of 128 sprites within spriteram
|
||||
*
|
||||
* namcos2_gfx_ctrl also supplies palette and priority information that is applied to the output of the
|
||||
* Namco System 2 ROZ chip
|
||||
* m_gfx_ctrl also supplies palette and priority information that is applied to the output of the
|
||||
* Namco System 2 ROZ chip
|
||||
*
|
||||
* -xxx ---- ---- ---- roz priority
|
||||
* ---- xxxx ---- ---- roz palette
|
||||
* ---- ---- xxxx ---- always zero?
|
||||
* ---- ---- ---- xxxx sprite bank
|
||||
*/
|
||||
static UINT16 namcos2_gfx_ctrl;
|
||||
|
||||
READ16_HANDLER( namcos2_gfx_ctrl_r )
|
||||
READ16_MEMBER( namcos2_state::gfx_ctrl_r )
|
||||
{
|
||||
return namcos2_gfx_ctrl;
|
||||
return m_gfx_ctrl;
|
||||
} /* namcos2_gfx_ctrl_r */
|
||||
|
||||
WRITE16_HANDLER( namcos2_gfx_ctrl_w )
|
||||
WRITE16_MEMBER( namcos2_state::gfx_ctrl_w )
|
||||
{
|
||||
COMBINE_DATA(&namcos2_gfx_ctrl);
|
||||
COMBINE_DATA(&m_gfx_ctrl);
|
||||
} /* namcos2_gfx_ctrl_w */
|
||||
|
||||
static TILE_GET_INFO( get_tile_info_roz )
|
||||
TILE_GET_INFO_MEMBER( namcos2_state::roz_tile_info )
|
||||
{
|
||||
int tile = machine.driver_data<namcos2_state>()->m_rozram[tile_index];
|
||||
SET_TILE_INFO(3,tile,0/*color*/,0);
|
||||
} /* get_tile_info_roz */
|
||||
int tile = m_rozram[tile_index];
|
||||
SET_TILE_INFO_MEMBER(3,tile,0/*color*/,0);
|
||||
} /* roz_tile_info */
|
||||
|
||||
struct RozParam
|
||||
{
|
||||
@ -240,7 +239,7 @@ 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.color = (m_gfx_ctrl & 0x0f00);
|
||||
rozParam.incxx = (INT16)m_roz_ctrl[0];
|
||||
rozParam.incxy = (INT16)m_roz_ctrl[1];
|
||||
rozParam.incyx = (INT16)m_roz_ctrl[2];
|
||||
@ -285,21 +284,6 @@ void namcos2_state::draw_roz(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
DrawRozHelper( bitmap, m_tilemap_roz, cliprect, &rozParam );
|
||||
}
|
||||
|
||||
READ16_MEMBER(namcos2_state::roz_ctrl_word_r)
|
||||
{
|
||||
return m_roz_ctrl[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( namcos2_state::roz_ctrl_word_w )
|
||||
{
|
||||
COMBINE_DATA(&m_roz_ctrl[offset]);
|
||||
}
|
||||
|
||||
READ16_MEMBER( namcos2_state::rozram_word_r )
|
||||
{
|
||||
return m_rozram[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( namcos2_state::rozram_word_w )
|
||||
{
|
||||
COMBINE_DATA(&m_rozram[offset]);
|
||||
@ -312,7 +296,7 @@ WRITE16_MEMBER( namcos2_state::rozram_word_w )
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
inline UINT16 namcos2_state::get_palette_register( int which )
|
||||
UINT16 namcos2_state::get_palette_register( int which )
|
||||
{
|
||||
const UINT16 *source = &m_paletteram[0x3000/2];
|
||||
return ((source[which*2]&0xff)<<8) | (source[which*2+1]&0xff);
|
||||
@ -362,7 +346,7 @@ WRITE16_MEMBER( namcos2_state::paletteram_word_w )
|
||||
/*case 0x180a:*/ case 0x180b:
|
||||
if (data^m_paletteram[offset]) {
|
||||
m_paletteram[offset] = data;
|
||||
namcos2_adjust_posirq_timer(machine(),namcos2_GetPosIrqScanline(machine()));
|
||||
namcos2_adjust_posirq_timer(machine(),get_pos_irq_scanline());
|
||||
}
|
||||
break;
|
||||
|
||||
@ -379,12 +363,6 @@ WRITE16_MEMBER( namcos2_state::paletteram_word_w )
|
||||
} /* namcos2_68k_video_palette_w */
|
||||
|
||||
|
||||
int
|
||||
namcos2_GetPosIrqScanline( running_machine &machine )
|
||||
{
|
||||
return (machine.driver_data<namcos2_state>()->get_palette_register(5) - 32) & 0xff;
|
||||
} /* namcos2_GetPosIrqScanline */
|
||||
|
||||
inline void
|
||||
namcos2_state::update_palette()
|
||||
{
|
||||
@ -407,35 +385,23 @@ namcos2_state::update_palette()
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
static void
|
||||
DrawSpriteInit( running_machine &machine )
|
||||
void namcos2_state::draw_sprite_init()
|
||||
{
|
||||
int i;
|
||||
/* set table for sprite color == 0x0f */
|
||||
for( i = 0; i<16*256; i++ )
|
||||
for( int i = 0; i<16*256; i++ )
|
||||
{
|
||||
machine.shadow_table[i] = i+0x2000;
|
||||
machine().shadow_table[i] = i+0x2000;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( namcos2_state::spriteram_word_w )
|
||||
{
|
||||
COMBINE_DATA(&m_spriteram[offset]);
|
||||
}
|
||||
|
||||
READ16_MEMBER( namcos2_state::spriteram_word_r )
|
||||
{
|
||||
return m_spriteram[offset];
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
void namcos2_state::video_start()
|
||||
{
|
||||
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 = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(namcos2_state::roz_tile_info), this), tilemap_mapper_delegate(FUNC(tilemap_scan_rows), &machine()), 8,8,256,256);
|
||||
m_tilemap_roz->set_transparent_pen(0xff);
|
||||
DrawSpriteInit(machine());
|
||||
draw_sprite_init();
|
||||
}
|
||||
|
||||
void namcos2_state::apply_clip( rectangle &clip, const rectangle &cliprect )
|
||||
@ -458,7 +424,7 @@ UINT32 namcos2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
|
||||
apply_clip( clip, cliprect );
|
||||
|
||||
/* HACK: enable ROZ layer only if it has priority > 0 */
|
||||
m_tilemap_roz->enable((namcos2_gfx_ctrl & 0x7000) ? 1 : 0);
|
||||
m_tilemap_roz->enable((m_gfx_ctrl & 0x7000) ? 1 : 0);
|
||||
|
||||
for( pri=0; pri<16; pri++ )
|
||||
{
|
||||
@ -466,11 +432,11 @@ UINT32 namcos2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
|
||||
{
|
||||
namco_tilemap_draw( bitmap, clip, pri/2 );
|
||||
|
||||
if( ((namcos2_gfx_ctrl & 0x7000) >> 12)==pri/2 )
|
||||
if( ((m_gfx_ctrl & 0x7000) >> 12)==pri/2 )
|
||||
{
|
||||
draw_roz(bitmap,clip);
|
||||
}
|
||||
draw_sprites(bitmap, clip, pri/2, namcos2_gfx_ctrl );
|
||||
draw_sprites(bitmap, clip, pri/2, m_gfx_ctrl );
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@ -481,7 +447,7 @@ UINT32 namcos2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
|
||||
void namcos2_state::video_start_finallap()
|
||||
{
|
||||
namco_tilemap_init(machine(),2,memregion("gfx4")->base(),TilemapCB);
|
||||
DrawSpriteInit(machine());
|
||||
draw_sprite_init();
|
||||
namco_road_init(machine(), 3);
|
||||
}
|
||||
|
||||
@ -501,7 +467,7 @@ UINT32 namcos2_state::screen_update_finallap(screen_device &screen, bitmap_ind16
|
||||
namco_tilemap_draw( bitmap, clip, pri/2 );
|
||||
}
|
||||
namco_road_draw(machine(), bitmap,clip,pri );
|
||||
draw_sprites(bitmap,clip,pri,namcos2_gfx_ctrl );
|
||||
draw_sprites(bitmap,clip,pri,m_gfx_ctrl );
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -511,12 +477,12 @@ UINT32 namcos2_state::screen_update_finallap(screen_device &screen, bitmap_ind16
|
||||
void namcos2_state::video_start_luckywld()
|
||||
{
|
||||
namco_tilemap_init(machine(),2,memregion("gfx4")->base(),TilemapCB);
|
||||
namco_obj_init( machine(), 0, 0x0, NULL );
|
||||
if( namcos2_gametype==NAMCOS2_LUCKY_AND_WILD )
|
||||
c355_obj_init( 0, 0x0, namcos2_shared_state::c355_obj_code2tile_delegate() );
|
||||
if( m_gametype==NAMCOS2_LUCKY_AND_WILD )
|
||||
{
|
||||
namco_roz_init( machine(), 1, "gfx5" );
|
||||
c169_roz_init(1, "gfx5");
|
||||
}
|
||||
if( namcos2_gametype!=NAMCOS2_STEEL_GUNNER_2 )
|
||||
if( m_gametype!=NAMCOS2_STEEL_GUNNER_2 )
|
||||
{
|
||||
namco_road_init(machine(), 3);
|
||||
}
|
||||
@ -538,11 +504,11 @@ UINT32 namcos2_state::screen_update_luckywld(screen_device &screen, bitmap_ind16
|
||||
namco_tilemap_draw( bitmap, clip, pri/2 );
|
||||
}
|
||||
namco_road_draw(machine(), bitmap,clip,pri );
|
||||
if( namcos2_gametype==NAMCOS2_LUCKY_AND_WILD )
|
||||
if( m_gametype==NAMCOS2_LUCKY_AND_WILD )
|
||||
{
|
||||
namco_roz_draw( bitmap, clip, pri );
|
||||
c169_roz_draw(bitmap, clip, pri);
|
||||
}
|
||||
namco_obj_draw(machine(), bitmap, clip, pri );
|
||||
c355_obj_draw(bitmap, clip, pri );
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -552,7 +518,7 @@ UINT32 namcos2_state::screen_update_luckywld(screen_device &screen, bitmap_ind16
|
||||
void namcos2_state::video_start_sgunner()
|
||||
{
|
||||
namco_tilemap_init(machine(),2,memregion("gfx4")->base(),TilemapCB);
|
||||
namco_obj_init( machine(), 0, 0x0, NULL );
|
||||
c355_obj_init( 0, 0x0, namcos2_shared_state::c355_obj_code2tile_delegate() );
|
||||
}
|
||||
|
||||
UINT32 namcos2_state::screen_update_sgunner(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
@ -567,7 +533,7 @@ UINT32 namcos2_state::screen_update_sgunner(screen_device &screen, bitmap_ind16
|
||||
for( pri=0; pri<8; pri++ )
|
||||
{
|
||||
namco_tilemap_draw( bitmap, clip, pri );
|
||||
namco_obj_draw(machine(), bitmap, clip, pri );
|
||||
c355_obj_draw(bitmap, clip, pri );
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -578,7 +544,7 @@ UINT32 namcos2_state::screen_update_sgunner(screen_device &screen, bitmap_ind16
|
||||
void namcos2_state::video_start_metlhawk()
|
||||
{
|
||||
namco_tilemap_init(machine(),2,memregion("gfx4")->base(),TilemapCB);
|
||||
namco_roz_init( machine(), 1, "gfx5" );
|
||||
c169_roz_init(1, "gfx5");
|
||||
}
|
||||
|
||||
UINT32 namcos2_state::screen_update_metlhawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
@ -596,7 +562,7 @@ UINT32 namcos2_state::screen_update_metlhawk(screen_device &screen, bitmap_ind16
|
||||
{
|
||||
namco_tilemap_draw( bitmap, clip, pri/2 );
|
||||
}
|
||||
namco_roz_draw( bitmap, clip, pri );
|
||||
c169_roz_draw(bitmap, clip, pri);
|
||||
draw_sprites_metalhawk(bitmap,clip,pri );
|
||||
}
|
||||
return 0;
|
||||
|
@ -7,7 +7,6 @@ Namco System 21 Video Hardware
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/namcos2.h"
|
||||
#include "includes/namcoic.h"
|
||||
#include "includes/namcos21.h"
|
||||
|
||||
@ -117,15 +116,15 @@ CopyVisiblePolyFrameBuffer( running_machine &machine, bitmap_ind16 &bitmap, cons
|
||||
VIDEO_START( namcos21 )
|
||||
{
|
||||
namcos21_state *state = machine.driver_data<namcos21_state>();
|
||||
if( namcos2_gametype == NAMCOS21_WINRUN91 )
|
||||
if( state->m_gametype == NAMCOS21_WINRUN91 )
|
||||
{
|
||||
state->m_videoram = auto_alloc_array(machine, UINT8, 0x80000);
|
||||
}
|
||||
AllocatePolyFrameBuffer(machine);
|
||||
namco_obj_init(machine,
|
||||
state->c355_obj_init(
|
||||
0, /* gfx bank */
|
||||
0xf, /* reverse palette mapping */
|
||||
NULL );
|
||||
namcos2_shared_state::c355_obj_code2tile_delegate() );
|
||||
} /* VIDEO_START( namcos21 ) */
|
||||
|
||||
static void
|
||||
@ -176,30 +175,30 @@ SCREEN_UPDATE_IND16( namcos21 )
|
||||
update_palette(screen.machine());
|
||||
bitmap.fill(0xff, cliprect );
|
||||
|
||||
if( namcos2_gametype != NAMCOS21_WINRUN91 )
|
||||
if( state->m_gametype != NAMCOS21_WINRUN91 )
|
||||
{ /* draw low priority 2d sprites */
|
||||
namco_obj_draw(screen.machine(), bitmap, cliprect, 2 );
|
||||
namco_obj_draw(screen.machine(), bitmap, cliprect, 14 ); //driver's eyes
|
||||
state->c355_obj_draw(bitmap, cliprect, 2 );
|
||||
state->c355_obj_draw(bitmap, cliprect, 14 ); //driver's eyes
|
||||
}
|
||||
|
||||
CopyVisiblePolyFrameBuffer( screen.machine(), bitmap, cliprect, 0x7fc0, 0x7ffe );
|
||||
|
||||
if( namcos2_gametype != NAMCOS21_WINRUN91 )
|
||||
if( state->m_gametype != NAMCOS21_WINRUN91 )
|
||||
{ /* draw low priority 2d sprites */
|
||||
namco_obj_draw(screen.machine(), bitmap, cliprect, 0 );
|
||||
namco_obj_draw(screen.machine(), bitmap, cliprect, 1 );
|
||||
state->c355_obj_draw(bitmap, cliprect, 0 );
|
||||
state->c355_obj_draw(bitmap, cliprect, 1 );
|
||||
}
|
||||
|
||||
CopyVisiblePolyFrameBuffer( screen.machine(), bitmap, cliprect, 0, 0x7fbf );
|
||||
|
||||
|
||||
if( namcos2_gametype != NAMCOS21_WINRUN91 )
|
||||
if( state->m_gametype != NAMCOS21_WINRUN91 )
|
||||
{ /* draw high priority 2d sprites */
|
||||
for( pri=pivot; pri<8; pri++ )
|
||||
{
|
||||
namco_obj_draw(screen.machine(), bitmap, cliprect, pri );
|
||||
state->c355_obj_draw(bitmap, cliprect, pri );
|
||||
}
|
||||
namco_obj_draw(screen.machine(), bitmap, cliprect, 15 ); //driver's eyes
|
||||
state->c355_obj_draw(bitmap, cliprect, 15 ); //driver's eyes
|
||||
}
|
||||
else
|
||||
{ /* winrun bitmap layer */
|
||||
@ -288,12 +287,12 @@ renderscanline_flat( namcos21_state *state, const edge *e1, const edge *e2, int
|
||||
if( depthcueenable && zz>0 )
|
||||
{
|
||||
int depth = 0;
|
||||
if( namcos2_gametype == NAMCOS21_WINRUN91 )
|
||||
if( state->m_gametype == NAMCOS21_WINRUN91 )
|
||||
{
|
||||
depth = (zz>>10)*0x100;
|
||||
pen += depth;
|
||||
}
|
||||
else if( namcos2_gametype == NAMCOS21_DRIVERS_EYES )
|
||||
else if( state->m_gametype == NAMCOS21_DRIVERS_EYES )
|
||||
{
|
||||
depth = (zz>>10)*0x100;
|
||||
pen -= depth;
|
||||
@ -445,11 +444,11 @@ namcos21_DrawQuad( running_machine &machine, int sx[4], int sy[4], int zcode[4],
|
||||
0x4000..0x5fff polygon palette bank1 (0x10 sets of 0x200 colors or 0x20 sets of 0x100 colors)
|
||||
0x6000..0x7fff polygon palette bank2 (0x10 sets of 0x200 colors or 0x20 sets of 0x100 colors)
|
||||
*/
|
||||
if( namcos2_gametype == NAMCOS21_WINRUN91 )
|
||||
if( state->m_gametype == NAMCOS21_WINRUN91 )
|
||||
{
|
||||
color = 0x4000|(color&0xff);
|
||||
}
|
||||
else if ( namcos2_gametype == NAMCOS21_DRIVERS_EYES )
|
||||
else if ( state->m_gametype == NAMCOS21_DRIVERS_EYES )
|
||||
{
|
||||
color = 0x3f00|(color&0xff);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user