diff --git a/src/emu/tilemap.h b/src/emu/tilemap.h index 4d29edc7765..15cc7d68475 100644 --- a/src/emu/tilemap.h +++ b/src/emu/tilemap.h @@ -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: diff --git a/src/mame/drivers/gal3.c b/src/mame/drivers/gal3.c index 364c93a4a51..08574508bcb 100644 --- a/src/mame/drivers/gal3.c +++ b/src/mame/drivers/gal3.c @@ -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(); 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; pric355_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 diff --git a/src/mame/drivers/namcofl.c b/src/mame/drivers/namcofl.c index 3c88a6c4341..1e082759477 100644 --- a/src/mame/drivers/namcofl.c +++ b/src/mame/drivers/namcofl.c @@ -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 ) diff --git a/src/mame/drivers/namcoic.c b/src/mame/drivers/namcoic.c index 639adb7ae39..f3de584d140 100644 --- a/src/mame/drivers/namcoic.c +++ b/src/mame/drivers/namcoic.c @@ -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>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 -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 -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; isize = 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; imark_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; imark_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); +} /**************************************************************************************************************/ /* diff --git a/src/mame/drivers/namconb1.c b/src/mame/drivers/namconb1.c index 7d89b153ab6..e196beb74bc 100644 --- a/src/mame/drivers/namconb1.c +++ b/src/mame/drivers/namconb1.c @@ -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) diff --git a/src/mame/drivers/namcos2.c b/src/mame/drivers/namcos2.c index ae2628d638a..c6eb8e9f69a 100644 --- a/src/mame/drivers/namcos2.c +++ b/src/mame/drivers/namcos2.c @@ -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 */ diff --git a/src/mame/drivers/namcos21.c b/src/mame/drivers/namcos21.c index 3c2a22ddc8d..2db3ea01077 100644 --- a/src/mame/drivers/namcos21.c +++ b/src/mame/drivers/namcos21.c @@ -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(); /* 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(); - 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; diff --git a/src/mame/includes/namcofl.h b/src/mame/includes/namcofl.h index 6f464dba24c..3a15030be7c 100644 --- a/src/mame/includes/namcofl.h +++ b/src/mame/includes/namcofl.h @@ -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"){ } diff --git a/src/mame/includes/namcoic.h b/src/mame/includes/namcoic.h index 57b59abf993..c7e0335f278 100644 --- a/src/mame/includes/namcoic.h +++ b/src/mame/includes/namcoic.h @@ -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 */ diff --git a/src/mame/includes/namconb1.h b/src/mame/includes/namconb1.h index 9b75d77715c..0be313d6338 100644 --- a/src/mame/includes/namconb1.h +++ b/src/mame/includes/namconb1.h @@ -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"), diff --git a/src/mame/includes/namcos2.h b/src/mame/includes/namcos2.h index 9a694e3d56c..d4f9880087a 100644 --- a/src/mame/includes/namcos2.h +++ b/src/mame/includes/namcos2.h @@ -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 m_c169_roz_videoram; + int m_c169_roz_gfxbank; + UINT8 *m_c169_roz_mask; + + // C355 Motion Object Emulation +public: + typedef delegate 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 + void c355_obj_draw_sprite(_BitmapClass &bitmap, const rectangle &cliprect, const UINT16 *pSource, int pri, int zpos); + template + void c355_obj_draw_list(_BitmapClass &bitmap, const rectangle &cliprect, int pri, const UINT16 *pSpriteList16, const UINT16 *pSpriteTable); + + optional_shared_ptr 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 m_dpram; /* 2Kx8 */ - optional_shared_ptr m_spriteram; - required_shared_ptr m_paletteram; - optional_shared_ptr m_rozram; + int get_pos_irq_scanline() { return (get_palette_register(5) - 32) & 0xff; } - UINT16 m_roz_ctrl[0x8]; + required_shared_ptr m_dpram; /* 2Kx8 */ + required_shared_ptr m_paletteram; + optional_shared_ptr m_spriteram; + optional_shared_ptr m_rozram; + optional_shared_ptr 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 ); diff --git a/src/mame/includes/namcos21.h b/src/mame/includes/namcos21.h index 7711a1129ca..fca20db01f2 100644 --- a/src/mame/includes/namcos21.h +++ b/src/mame/includes/namcos21.h @@ -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"), diff --git a/src/mame/machine/namcos2.c b/src/mame/machine/namcos2.c index 800520f05ad..bfe0d5224c2 100644 --- a/src/mame/machine/namcos2.c +++ b/src/mame/machine/namcos2.c @@ -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()->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()->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()->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(); + if (state->is_system21()) return 0; + return downcast(state)->get_pos_irq_scanline(); } static TIMER_CALLBACK( namcos2_posirq_tick ) { - if (IsSystem21()) { + namcos2_shared_state *state = machine.driver_data(); + 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(); + 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(); + 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; } diff --git a/src/mame/video/namcofl.c b/src/mame/video/namcofl.c index 8b87caef7d0..d2436b086c8 100644 --- a/src/mame/video/namcofl.c +++ b/src/mame/video/namcofl.c @@ -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(); 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(); 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); } diff --git a/src/mame/video/namconb1.c b/src/mame/video/namconb1.c index 07d0f98e253..87d4be77ba1 100644 --- a/src/mame/video/namconb1.c +++ b/src/mame/video/namconb1.c @@ -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(); 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(); 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(); 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(); 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(); 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 */ diff --git a/src/mame/video/namcos2.c b/src/mame/video/namcos2.c index 53f64f8572e..da5bcc426e5 100644 --- a/src/mame/video/namcos2.c +++ b/src/mame/video/namcos2.c @@ -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(); + 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()->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()->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; diff --git a/src/mame/video/namcos21.c b/src/mame/video/namcos21.c index 7574117c01e..94aee1b2eac 100644 --- a/src/mame/video/namcos21.c +++ b/src/mame/video/namcos21.c @@ -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(); - 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); }