Taito device tilemap assert fixes, and clean up of obsolete stuff (nw)

This commit is contained in:
Alex W. Jackson 2014-11-10 02:34:30 -05:00
parent 970fc85e7a
commit b33ff1a101
17 changed files with 77 additions and 158 deletions

View File

@ -676,9 +676,9 @@ static const gfx_layout char2layout =
}; };
static GFXDECODE_START( darius ) static GFXDECODE_START( darius )
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 256 ) /* sprites */ GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 128 ) /* sprites */
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 256 ) /* scr tiles */ GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 128 ) /* scr tiles */
GFXDECODE_ENTRY( "gfx3", 0, char2layout, 0, 256 ) /* top layer scr tiles */ GFXDECODE_ENTRY( "gfx3", 0, char2layout, 0, 128 ) /* top layer scr tiles */
GFXDECODE_END GFXDECODE_END
@ -764,7 +764,7 @@ static MACHINE_CONFIG_START( darius, darius_state )
/* video hardware */ /* video hardware */
MCFG_GFXDECODE_ADD("gfxdecode", "palette", darius) MCFG_GFXDECODE_ADD("gfxdecode", "palette", darius)
MCFG_PALETTE_ADD("palette", 4096*2) MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_DEFAULT_LAYOUT(layout_darius) MCFG_DEFAULT_LAYOUT(layout_darius)

View File

@ -666,13 +666,13 @@ static const gfx_layout tilelayout_b =
}; };
static GFXDECODE_START( opwolf ) static GFXDECODE_START( opwolf )
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 256 ) /* sprites */ GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 128 ) /* sprites */
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 256 ) /* scr tiles */ GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 128 ) /* scr tiles */
GFXDECODE_END GFXDECODE_END
static GFXDECODE_START( opwolfb ) static GFXDECODE_START( opwolfb )
GFXDECODE_ENTRY( "gfx2", 0, tilelayout_b, 0, 256 ) /* sprites */ GFXDECODE_ENTRY( "gfx2", 0, tilelayout_b, 0, 128 ) /* sprites */
GFXDECODE_ENTRY( "gfx1", 0, charlayout_b, 0, 256 ) /* scr tiles */ GFXDECODE_ENTRY( "gfx1", 0, charlayout_b, 0, 128 ) /* scr tiles */
GFXDECODE_END GFXDECODE_END
@ -704,7 +704,7 @@ static MACHINE_CONFIG_START( opwolf, opwolf_state )
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", opwolf) MCFG_GFXDECODE_ADD("gfxdecode", "palette", opwolf)
MCFG_PALETTE_ADD("palette", 8192) MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xxxxRRRRGGGGBBBB) MCFG_PALETTE_FORMAT(xxxxRRRRGGGGBBBB)
MCFG_DEVICE_ADD("pc080sn", PC080SN, 0) MCFG_DEVICE_ADD("pc080sn", PC080SN, 0)
@ -770,7 +770,7 @@ static MACHINE_CONFIG_START( opwolfb, opwolf_state ) /* OSC clocks unknown for t
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", opwolfb) MCFG_GFXDECODE_ADD("gfxdecode", "palette", opwolfb)
MCFG_PALETTE_ADD("palette", 8192) MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xxxxRRRRGGGGBBBB) MCFG_PALETTE_FORMAT(xxxxRRRRGGGGBBBB)
MCFG_DEVICE_ADD("pc080sn", PC080SN, 0) MCFG_DEVICE_ADD("pc080sn", PC080SN, 0)

View File

@ -646,7 +646,7 @@ static MACHINE_CONFIG_START( rbisland, rbisland_state )
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", rbisland) MCFG_GFXDECODE_ADD("gfxdecode", "palette", rbisland)
MCFG_PALETTE_ADD("palette", 8192) MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_DEVICE_ADD("pc080sn", PC080SN, 0) MCFG_DEVICE_ADD("pc080sn", PC080SN, 0)
@ -697,7 +697,7 @@ static MACHINE_CONFIG_START( jumping, rbisland_state )
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", jumping) MCFG_GFXDECODE_ADD("gfxdecode", "palette", jumping)
MCFG_PALETTE_ADD("palette", 8192) MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR) MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
MCFG_VIDEO_START_OVERRIDE(rbisland_state,jumping) MCFG_VIDEO_START_OVERRIDE(rbisland_state,jumping)

View File

@ -376,7 +376,7 @@ static MACHINE_CONFIG_START( rastan, rastan_state )
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", rastan) MCFG_GFXDECODE_ADD("gfxdecode", "palette", rastan)
MCFG_PALETTE_ADD("palette", 8192) MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_DEVICE_ADD("pc080sn", PC080SN, 0) MCFG_DEVICE_ADD("pc080sn", PC080SN, 0)

View File

@ -446,7 +446,7 @@ static const gfx_layout slapshot_charlayout =
static GFXDECODE_START( slapshot ) static GFXDECODE_START( slapshot )
GFXDECODE_ENTRY( "gfx2", 0x0, tilelayout, 0, 256 ) /* sprite parts */ GFXDECODE_ENTRY( "gfx2", 0x0, tilelayout, 0, 256 ) /* sprite parts */
GFXDECODE_ENTRY( "gfx1", 0x0, slapshot_charlayout, 0, 256 ) /* sprites & playfield */ GFXDECODE_ENTRY( "gfx1", 0x0, slapshot_charlayout, 4096, 256 ) /* sprites & playfield */
GFXDECODE_END GFXDECODE_END
@ -514,7 +514,7 @@ static MACHINE_CONFIG_START( slapshot, slapshot_state )
MCFG_TC0480SCP_OFFSETS(30 + 3, 9) MCFG_TC0480SCP_OFFSETS(30 + 3, 9)
MCFG_TC0480SCP_OFFSETS_TX(-1, -1) MCFG_TC0480SCP_OFFSETS_TX(-1, -1)
MCFG_TC0480SCP_OFFSETS_FLIP(0, 2) MCFG_TC0480SCP_OFFSETS_FLIP(0, 2)
MCFG_TC0480SCP_COL_BASE(256) MCFG_TC0480SCP_COL_BASE(4096)
MCFG_TC0480SCP_GFXDECODE("gfxdecode") MCFG_TC0480SCP_GFXDECODE("gfxdecode")
MCFG_TC0480SCP_PALETTE("palette") MCFG_TC0480SCP_PALETTE("palette")
@ -575,7 +575,7 @@ static MACHINE_CONFIG_START( opwolf3, slapshot_state )
MCFG_TC0480SCP_OFFSETS(30 + 3, 9) MCFG_TC0480SCP_OFFSETS(30 + 3, 9)
MCFG_TC0480SCP_OFFSETS_TX(-1, -1) MCFG_TC0480SCP_OFFSETS_TX(-1, -1)
MCFG_TC0480SCP_OFFSETS_FLIP(0, 2) MCFG_TC0480SCP_OFFSETS_FLIP(0, 2)
MCFG_TC0480SCP_COL_BASE(256) MCFG_TC0480SCP_COL_BASE(4096)
MCFG_TC0480SCP_GFXDECODE("gfxdecode") MCFG_TC0480SCP_GFXDECODE("gfxdecode")
MCFG_TC0480SCP_PALETTE("palette") MCFG_TC0480SCP_PALETTE("palette")

View File

@ -2792,17 +2792,27 @@ static const gfx_layout footchmpbl_tilelayout =
RGN_FRAC(1,4), RGN_FRAC(1,4),
4, /* 4 bits per pixel */ 4, /* 4 bits per pixel */
{ RGN_FRAC(0,4), RGN_FRAC(1,4),RGN_FRAC(2,4),RGN_FRAC(3,4) }, { RGN_FRAC(0,4), RGN_FRAC(1,4),RGN_FRAC(2,4),RGN_FRAC(3,4) },
{ 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, { STEP16(0,1) },
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 }, { STEP16(0,16) },
16*16 /* every sprite takes 128 consecutive bytes */ 16*16 /* every sprite takes 128 consecutive bytes */
}; };
static const gfx_layout footchmpbl_charlayout =
{
8,8, /* 16*16 sprites */
256, /* the ROMs are mostly empty */
4, /* 4 bits per pixel */
{ RGN_FRAC(0,4), RGN_FRAC(1,4),RGN_FRAC(2,4),RGN_FRAC(3,4) },
{ STEP8(0,1) },
{ STEP8(0,8) },
8*8 /* every sprite takes 128 consecutive bytes */
};
static GFXDECODE_START( footchmpbl ) static GFXDECODE_START( footchmpbl )
GFXDECODE_ENTRY( "gfx2", 0, footchmpbl_tilelayout, 0, 256 ) /* sprites & playfield */ GFXDECODE_ENTRY( "gfx2", 0, footchmpbl_tilelayout, 0, 256 ) /* sprites & playfield */
GFXDECODE_ENTRY( "gfx1", 0, footchmpbl_tilelayout, 0, 256 ) /* sprites & playfield */ GFXDECODE_ENTRY( "gfx1", 0, footchmpbl_tilelayout, 0, 256 ) /* sprites & playfield */
GFXDECODE_ENTRY( "gfx3", 0, footchmpbl_tilelayout, 0, 256 ) // gets wiped out by the dynamic decode atm GFXDECODE_ENTRY( "gfx3", 0, footchmpbl_charlayout, 0, 256 ) // gets wiped out by the dynamic decode atm
GFXDECODE_ENTRY( "gfx3", 0, footchmpbl_tilelayout, 0, 256 ) // bootleg should clearly use this instead of the uploaded tiles GFXDECODE_ENTRY( "gfx3", 0, footchmpbl_charlayout, 0, 256 ) // bootleg should clearly use this instead of the uploaded tiles
GFXDECODE_END GFXDECODE_END
@ -3417,7 +3427,7 @@ static MACHINE_CONFIG_DERIVED( metalb, taito_f2_tc0510nio )
MCFG_TC0480SCP_OFFSETS(0x32 + 3, -0x04) MCFG_TC0480SCP_OFFSETS(0x32 + 3, -0x04)
MCFG_TC0480SCP_OFFSETS_TX(1, 0) MCFG_TC0480SCP_OFFSETS_TX(1, 0)
MCFG_TC0480SCP_OFFSETS_FLIP(-1, 0) MCFG_TC0480SCP_OFFSETS_FLIP(-1, 0)
MCFG_TC0480SCP_COL_BASE(256) MCFG_TC0480SCP_COL_BASE(4096)
MCFG_TC0480SCP_GFXDECODE("gfxdecode") MCFG_TC0480SCP_GFXDECODE("gfxdecode")
MCFG_TC0480SCP_PALETTE("palette") MCFG_TC0480SCP_PALETTE("palette")

View File

@ -516,7 +516,7 @@ static const gfx_layout charlayout =
static GFXDECODE_START( topspeed ) static GFXDECODE_START( topspeed )
GFXDECODE_ENTRY( "gfx2", 0x0, tile16x8_layout, 0, 256 ) // Sprite parts GFXDECODE_ENTRY( "gfx2", 0x0, tile16x8_layout, 0, 256 ) // Sprite parts
GFXDECODE_ENTRY( "gfx1", 0x0, charlayout, 0, 256 ) // Sprites & playfield GFXDECODE_ENTRY( "gfx1", 0x0, charlayout, 0, 512 ) // Sprites & playfield
// Road Lines gfxdecodable ? // Road Lines gfxdecodable ?
GFXDECODE_END GFXDECODE_END

View File

@ -124,7 +124,6 @@ public:
UINT32 screen_update_darius_middle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_darius_middle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_darius_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_darius_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void darius_postload(); void darius_postload();
inline void actual_get_fg_tile_info( tile_data &tileinfo, int tile_index, UINT16 *ram, int gfxnum );
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int primask, int x_offs, int y_offs ); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int primask, int x_offs, int y_offs );
UINT32 update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int xoffs); UINT32 update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int xoffs);
void parse_control( ) /* assumes Z80 sandwiched between 68Ks */; void parse_control( ) /* assumes Z80 sandwiched between 68Ks */;

View File

@ -70,7 +70,6 @@ public:
DECLARE_WRITE16_MEMBER(tc0100scn_triple_screen_w); DECLARE_WRITE16_MEMBER(tc0100scn_triple_screen_w);
virtual void machine_start(); virtual void machine_start();
virtual void machine_reset(); virtual void machine_reset();
virtual void video_start();
UINT32 screen_update_ninjaw_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_ninjaw_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_ninjaw_middle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_ninjaw_middle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_ninjaw_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_ninjaw_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);

View File

@ -64,7 +64,6 @@ public:
DECLARE_WRITE16_MEMBER(tc0100scn_dual_screen_w); DECLARE_WRITE16_MEMBER(tc0100scn_dual_screen_w);
virtual void machine_start(); virtual void machine_start();
virtual void machine_reset(); virtual void machine_reset();
virtual void video_start();
UINT32 screen_update_warriorb_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_warriorb_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_warriorb_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_warriorb_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void reset_sound_region(); void reset_sound_region();

View File

@ -3,26 +3,22 @@
/***************************************************************************/ /***************************************************************************/
inline void darius_state::actual_get_fg_tile_info( tile_data &tileinfo, int tile_index, UINT16 *ram, int gfxnum )
{
UINT16 code = (ram[tile_index + 0x2000] & 0x7ff);
UINT16 attr = ram[tile_index];
SET_TILE_INFO_MEMBER(gfxnum,
code,
((attr & 0xff) << 2),
TILE_FLIPYX((attr & 0xc000) >> 14));
}
TILE_GET_INFO_MEMBER(darius_state::get_fg_tile_info) TILE_GET_INFO_MEMBER(darius_state::get_fg_tile_info)
{ {
actual_get_fg_tile_info(tileinfo, tile_index, m_fg_ram, 2); UINT16 code = (m_fg_ram[tile_index + 0x2000] & 0x7ff);
UINT16 attr = m_fg_ram[tile_index];
SET_TILE_INFO_MEMBER(2,
code,
(attr & 0x7f),
TILE_FLIPYX((attr & 0xc000) >> 14));
} }
/***************************************************************************/ /***************************************************************************/
void darius_state::video_start() void darius_state::video_start()
{ {
m_gfxdecode->gfx(2)->set_granularity(16);
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(darius_state::get_fg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,128,64); m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(darius_state::get_fg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,128,64);
m_fg_tilemap->set_transparent_pen(0); m_fg_tilemap->set_transparent_pen(0);

View File

@ -1,14 +1,6 @@
#include "emu.h" #include "emu.h"
#include "includes/ninjaw.h" #include "includes/ninjaw.h"
/**********************************************************/
void ninjaw_state::video_start()
{
/* Ensure palette from correct TC0110PCR used for each screen */
m_tc0100scn_1->set_colbanks(0x0, 0x100, 0x200);
}
/************************************************************ /************************************************************
SPRITE DRAW ROUTINE SPRITE DRAW ROUTINE
************************************************************/ ************************************************************/

View File

@ -191,7 +191,7 @@ void tc0080vco_device::device_start()
m_scroll_ram = m_ram + 0x20800 / 2; m_scroll_ram = m_ram + 0x20800 / 2;
/* create the char set (gfx will then be updated dynamically from RAM) */ /* create the char set (gfx will then be updated dynamically from RAM) */
m_gfxdecode->set_gfx(m_txnum, global_alloc(gfx_element(m_palette, charlayout, (UINT8 *)m_char_ram, 0, 64, 0))); m_gfxdecode->set_gfx(m_txnum, global_alloc(gfx_element(m_palette, charlayout, (UINT8 *)m_char_ram, 0, 1, 512)));
save_pointer(NAME(m_ram), TC0080VCO_RAM_SIZE / 2); save_pointer(NAME(m_ram), TC0080VCO_RAM_SIZE / 2);
machine().save().register_postload(save_prepost_delegate(FUNC(tc0080vco_device::postload), this)); machine().save().register_postload(save_prepost_delegate(FUNC(tc0080vco_device::postload), this));
@ -273,8 +273,8 @@ TILE_GET_INFO_MEMBER(tc0080vco_device::get_tx_tile_info)
SET_TILE_INFO_MEMBER(m_txnum, SET_TILE_INFO_MEMBER(m_txnum,
tile, tile,
0x40, 0,
0); /* 0x20<<1 as 3bpp */ 0);
} }

View File

@ -132,11 +132,8 @@ tc0100scn_device::tc0100scn_device(const machine_config &mconfig, const char *ta
m_bgscrolly(0), m_bgscrolly(0),
m_fgscrollx(0), m_fgscrollx(0),
m_fgscrolly(0), m_fgscrolly(0),
m_bg_col_mult(0),
m_bg_tilemask(0), m_bg_tilemask(0),
m_tx_col_mult(0),
m_gfxbank(0), m_gfxbank(0),
m_colbank(0),
m_bg0_colbank(0), m_bg0_colbank(0),
m_bg1_colbank(0), m_bg1_colbank(0),
m_tx_colbank(0), m_tx_colbank(0),
@ -257,27 +254,24 @@ void tc0100scn_device::device_start()
m_bg_tilemask = 0xffff; /* Mjnquest has 0x7fff tilemask */ m_bg_tilemask = 0xffff; /* Mjnquest has 0x7fff tilemask */
m_bg_col_mult = 1; /* multiplier for when bg gfx != 4bpp */
m_tx_col_mult = 1; /* multiplier needed when bg gfx is 6bpp */
if (m_gfxdecode->gfx(m_gfxnum)->granularity() == 2) /* Yuyugogo, Yesnoj */
m_bg_col_mult = 8;
if (m_gfxdecode->gfx(m_gfxnum)->granularity() == 0x40) /* Undrfire */
m_tx_col_mult = 4;
//logerror("TC0100SCN bg gfx granularity %04x: multiplier %04x\n", m_gfxdecode->gfx(m_gfxnum)->granularity(), m_tx_col_mult);
m_ram = auto_alloc_array_clear(machine(), UINT16, TC0100SCN_RAM_SIZE / 2); m_ram = auto_alloc_array_clear(machine(), UINT16, TC0100SCN_RAM_SIZE / 2);
set_layer_ptrs(); set_layer_ptrs();
/* create the char set (gfx will then be updated dynamically from RAM) */
m_gfxdecode->set_gfx(m_txnum, global_alloc(gfx_element(m_palette, tc0100scn_charlayout, (UINT8 *)m_char_ram, NATIVE_ENDIAN_VALUE_LE_BE(8,0), 256, 0)));
gfx_element *gfx = m_gfxdecode->gfx(m_gfxnum);
gfx_element *txt = m_gfxdecode->gfx(m_txnum);
if (gfx->granularity() == 2) /* Yuyugogo, Yesnoj */
gfx->set_granularity(16);
txt->set_granularity(gfx->granularity());
set_colbanks(0, 0, 0); /* standard values, only Wgp & multiscreen games change them */ set_colbanks(0, 0, 0); /* standard values, only Wgp & multiscreen games change them */
/* we call this here, so that they can be modified at video_start*/ /* we call this here, so that they can be modified at video_start*/
/* create the char set (gfx will then be updated dynamically from RAM) */
m_gfxdecode->set_gfx(m_txnum, global_alloc(gfx_element(m_palette, tc0100scn_charlayout, (UINT8 *)m_char_ram, NATIVE_ENDIAN_VALUE_LE_BE(8,0), 64, 0)));
save_pointer(NAME(m_ram), TC0100SCN_RAM_SIZE / 2); save_pointer(NAME(m_ram), TC0100SCN_RAM_SIZE / 2);
save_item(NAME(m_ctrl)); save_item(NAME(m_ctrl));
save_item(NAME(m_dblwidth)); save_item(NAME(m_dblwidth));
@ -292,7 +286,6 @@ void tc0100scn_device::device_start()
void tc0100scn_device::device_reset() void tc0100scn_device::device_reset()
{ {
m_dblwidth = 0; m_dblwidth = 0;
m_colbank = 0;
m_gfxbank = 0; /* Mjnquest uniquely banks tiles */ m_gfxbank = 0; /* Mjnquest uniquely banks tiles */
for (int i = 0; i < 8; i++) for (int i = 0; i < 8; i++)
@ -304,11 +297,11 @@ void tc0100scn_device::device_reset()
DEVICE HANDLERS DEVICE HANDLERS
*****************************************************************************/ *****************************************************************************/
void tc0100scn_device::common_get_bg0_tile_info( tile_data &tileinfo, int tile_index, UINT16 *ram, int gfxnum, int colbank, int dblwidth ) void tc0100scn_device::common_get_tile_info( tile_data &tileinfo, int tile_index, UINT16 *ram, int colbank )
{ {
int code, attr; int code, attr;
if (!dblwidth) if (!m_dblwidth)
{ {
/* Mahjong Quest (F2 system) inexplicably has a banking feature */ /* Mahjong Quest (F2 system) inexplicably has a banking feature */
code = (ram[2 * tile_index + 1] & m_bg_tilemask) + (m_gfxbank << 15); code = (ram[2 * tile_index + 1] & m_bg_tilemask) + (m_gfxbank << 15);
@ -320,62 +313,30 @@ void tc0100scn_device::common_get_bg0_tile_info( tile_data &tileinfo, int tile_i
attr = ram[2 * tile_index]; attr = ram[2 * tile_index];
} }
SET_TILE_INFO_MEMBER(gfxnum, SET_TILE_INFO_MEMBER(m_gfxnum,
code, code,
(((attr * m_bg_col_mult) + m_bg0_colbank) & 0xff) + colbank, ((attr + colbank) & 0xff),
TILE_FLIPYX((attr & 0xc000) >> 14));
}
void tc0100scn_device::common_get_bg1_tile_info( tile_data &tileinfo, int tile_index, UINT16 *ram, int gfxnum, int colbank, int dblwidth )
{
int code, attr;
if (!dblwidth)
{
/* Mahjong Quest (F2 system) inexplicably has a banking feature */
code = (ram[2 * tile_index + 1] & m_bg_tilemask) + (m_gfxbank << 15);
attr = ram[2 * tile_index];
}
else
{
code = ram[2 * tile_index + 1] & m_bg_tilemask;
attr = ram[2 * tile_index];
}
SET_TILE_INFO_MEMBER(gfxnum,
code,
(((attr * m_bg_col_mult) + m_bg1_colbank) & 0xff) + colbank,
TILE_FLIPYX((attr & 0xc000) >> 14));
}
void tc0100scn_device::common_get_tx_tile_info( tile_data &tileinfo, int tile_index, UINT16 *ram, int gfxnum, int colbank, int dblwidth )
{
int attr = ram[tile_index];
SET_TILE_INFO_MEMBER(gfxnum,
attr & 0xff,
((((attr >> 6) & 0xfc) * m_tx_col_mult + (m_tx_colbank << 2)) & 0x3ff) + colbank * 4,
TILE_FLIPYX((attr & 0xc000) >> 14)); TILE_FLIPYX((attr & 0xc000) >> 14));
} }
TILE_GET_INFO_MEMBER(tc0100scn_device::get_bg_tile_info) TILE_GET_INFO_MEMBER(tc0100scn_device::get_bg_tile_info)
{ {
common_get_bg0_tile_info(tileinfo, tile_index, m_bg_ram, m_gfxnum, m_colbank, m_dblwidth); common_get_tile_info(tileinfo, tile_index, m_bg_ram, m_bg0_colbank);
} }
TILE_GET_INFO_MEMBER(tc0100scn_device::get_fg_tile_info) TILE_GET_INFO_MEMBER(tc0100scn_device::get_fg_tile_info)
{ {
common_get_bg1_tile_info(tileinfo, tile_index, m_fg_ram, m_gfxnum, m_colbank, m_dblwidth); common_get_tile_info(tileinfo, tile_index, m_fg_ram, m_bg1_colbank);
} }
TILE_GET_INFO_MEMBER(tc0100scn_device::get_tx_tile_info) TILE_GET_INFO_MEMBER(tc0100scn_device::get_tx_tile_info)
{ {
common_get_tx_tile_info(tileinfo, tile_index, m_tx_ram, m_txnum, m_colbank, m_dblwidth); int attr = m_tx_ram[tile_index];
}
void tc0100scn_device::set_colbank( int col ) SET_TILE_INFO_MEMBER(m_txnum,
{ attr & 0x00ff,
m_colbank = col; ((attr & 0x3f00) >> 8) + m_tx_colbank,
TILE_FLIPYX((attr & 0xc000) >> 14));
} }
void tc0100scn_device::set_colbanks( int bg0, int bg1, int tx ) void tc0100scn_device::set_colbanks( int bg0, int bg1, int tx )

View File

@ -39,10 +39,6 @@ public:
To change from the default (0,0,0) use after calling TC0100SCN_vh_start */ To change from the default (0,0,0) use after calling TC0100SCN_vh_start */
void set_colbanks(int bg0, int bg1, int tx); void set_colbanks(int bg0, int bg1, int tx);
/* Function to set separate color banks for each TC0100SCN.
To change from the default (0,0,0) use after calling TC0100SCN_vh_start */
void set_colbank(int colbank);
/* Function to set bg tilemask < 0xffff */ /* Function to set bg tilemask < 0xffff */
void set_bg_tilemask(int mask); void set_bg_tilemask(int mask);
@ -92,8 +88,8 @@ private:
/* We keep two tilemaps for each of the 3 actual tilemaps: one at standard width, one double */ /* We keep two tilemaps for each of the 3 actual tilemaps: one at standard width, one double */
tilemap_t *m_tilemap[3][2]; tilemap_t *m_tilemap[3][2];
int m_bg_col_mult, m_bg_tilemask, m_tx_col_mult; int m_bg_tilemask;
INT32 m_gfxbank, m_colbank; INT32 m_gfxbank;
INT32 m_bg0_colbank, m_bg1_colbank, m_tx_colbank; INT32 m_bg0_colbank, m_bg1_colbank, m_tx_colbank;
int m_dblwidth; int m_dblwidth;
@ -112,9 +108,7 @@ private:
TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_tx_tile_info); TILE_GET_INFO_MEMBER(get_tx_tile_info);
void common_get_bg0_tile_info(tile_data &tileinfo, int tile_index, UINT16 *ram, int gfxnum, int colbank, int dblwidth); void common_get_tile_info(tile_data &tileinfo, int tile_index, UINT16 *ram, int colbank);
void common_get_bg1_tile_info(tile_data &tileinfo, int tile_index, UINT16 *ram, int gfxnum, int colbank, int dblwidth);
void common_get_tx_tile_info(tile_data &tileinfo, int tile_index, UINT16 *ram, int gfxnum, int colbank, int dblwidth);
void tilemap_draw_fg(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, tilemap_t* tmap, int flags, UINT32 priority); void tilemap_draw_fg(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, tilemap_t* tmap, int flags, UINT32 priority);
void set_layer_ptrs(); void set_layer_ptrs();

View File

@ -282,7 +282,8 @@ void tc0480scp_device::device_start()
set_layer_ptrs(); set_layer_ptrs();
/* create the char set (gfx will then be updated dynamically from RAM) */ /* create the char set (gfx will then be updated dynamically from RAM) */
m_gfxdecode->set_gfx(m_txnum, global_alloc(gfx_element(m_palette, tc0480scp_charlayout, (UINT8 *)m_char_ram, NATIVE_ENDIAN_VALUE_LE_BE(8,0), 64, 0))); m_gfxdecode->set_gfx(m_txnum, global_alloc(gfx_element(m_palette, tc0480scp_charlayout, (UINT8 *)m_char_ram, NATIVE_ENDIAN_VALUE_LE_BE(8,0), 64, m_col_base)));
m_gfxdecode->gfx(m_gfxnum)->set_colorbase(m_col_base);
save_item(NAME(m_ram)); save_item(NAME(m_ram));
save_item(NAME(m_ctrl)); save_item(NAME(m_ctrl));
@ -317,7 +318,7 @@ void tc0480scp_device::common_get_tc0480bg_tile_info( tile_data &tileinfo, int t
int attr = ram[2 * tile_index]; int attr = ram[2 * tile_index];
SET_TILE_INFO_MEMBER(gfxnum, SET_TILE_INFO_MEMBER(gfxnum,
code, code,
(attr & 0xff) + m_col_base, (attr & 0xff),
TILE_FLIPYX((attr & 0xc000) >> 14)); TILE_FLIPYX((attr & 0xc000) >> 14));
} }
@ -326,7 +327,7 @@ void tc0480scp_device::common_get_tc0480tx_tile_info( tile_data &tileinfo, int t
int attr = ram[tile_index]; int attr = ram[tile_index];
SET_TILE_INFO_MEMBER(gfxnum, SET_TILE_INFO_MEMBER(gfxnum,
attr & 0xff, attr & 0xff,
((attr & 0x3f00) >> 8) + m_col_base, ((attr & 0x3f00) >> 8),
TILE_FLIPYX((attr & 0xc000) >> 14)); TILE_FLIPYX((attr & 0xc000) >> 14));
} }
@ -654,10 +655,6 @@ void tc0480scp_device::tilemap_update()
TODO TODO
---- ----
Broken for any rotation except ROT0. ROT180 support could probably
be added without too much difficulty: machine_flip is there as a
place-holder for this purpose.
Wouldn't work if y needs to be > 255 (i.e. if some game uses a Wouldn't work if y needs to be > 255 (i.e. if some game uses a
bigger than usual vertical visible area). Refer to tc0080vco bigger than usual vertical visible area). Refer to tc0080vco
custom draw routine for an example of dealing with this. custom draw routine for an example of dealing with this.
@ -709,7 +706,6 @@ void tc0480scp_device::bg01_draw( screen_device &screen, bitmap_ind16 &bitmap, c
int flip = m_pri_reg & 0x40; int flip = m_pri_reg & 0x40;
int i, y, y_index, src_y_index, row_index; int i, y, y_index, src_y_index, row_index;
int x_index, x_step; int x_index, x_step;
int machine_flip = 0; /* for ROT 180 ? */
UINT16 screen_width = 512; //cliprect.width(); UINT16 screen_width = 512; //cliprect.width();
UINT16 min_y = cliprect.min_y; UINT16 min_y = cliprect.min_y;
@ -736,10 +732,7 @@ void tc0480scp_device::bg01_draw( screen_device &screen, bitmap_ind16 &bitmap, c
y_index -= (m_y_offset - min_y) * zoomy; y_index -= (m_y_offset - min_y) * zoomy;
} }
if (!machine_flip) y = min_y;
y = min_y;
else
y = max_y;
do do
{ {
@ -781,12 +774,9 @@ void tc0480scp_device::bg01_draw( screen_device &screen, bitmap_ind16 &bitmap, c
taitoic_drawscanline(bitmap, cliprect, 0, y, scanline, (flags & TILEMAP_DRAW_OPAQUE) ? 0 : 1, ROT0, screen.priority(), priority); taitoic_drawscanline(bitmap, cliprect, 0, y, scanline, (flags & TILEMAP_DRAW_OPAQUE) ? 0 : 1, ROT0, screen.priority(), priority);
y_index += zoomy; y_index += zoomy;
if (!machine_flip) y++;
y++;
else
y--;
} }
while ((!machine_flip && y <= max_y) || (machine_flip && y >= min_y)); while (y <= max_y);
} }
} }
@ -798,10 +788,6 @@ void tc0480scp_device::bg01_draw( screen_device &screen, bitmap_ind16 &bitmap, c
TODO TODO
---- ----
Broken for any rotation except ROT0. ROT180 support could probably
be added without too much difficulty: machine_flip is there as a
place-holder for this purpose.
Wouldn't work if y needs to be > 255 (i.e. if some game uses a Wouldn't work if y needs to be > 255 (i.e. if some game uses a
bigger than usual vertical visible area). Refer to tc0080vco bigger than usual vertical visible area). Refer to tc0080vco
custom draw routine for an example of dealing with this. custom draw routine for an example of dealing with this.
@ -844,7 +830,6 @@ void tc0480scp_device::bg23_draw(screen_device &screen, bitmap_ind16 &bitmap, co
UINT32 zoomx, zoomy; UINT32 zoomx, zoomy;
UINT16 scanline[512]; UINT16 scanline[512];
int flipscreen = m_pri_reg & 0x40; int flipscreen = m_pri_reg & 0x40;
int machine_flip = 0; /* for ROT 180 ? */
UINT16 screen_width = 512; //cliprect.width(); UINT16 screen_width = 512; //cliprect.width();
UINT16 min_y = cliprect.min_y; UINT16 min_y = cliprect.min_y;
@ -878,11 +863,7 @@ void tc0480scp_device::bg23_draw(screen_device &screen, bitmap_ind16 &bitmap, co
y_index -= (m_y_offset - min_y) * zoomy; y_index -= (m_y_offset - min_y) * zoomy;
} }
if (!machine_flip)
y = min_y; y = min_y;
else
y = max_y;
do do
{ {
@ -944,12 +925,9 @@ void tc0480scp_device::bg23_draw(screen_device &screen, bitmap_ind16 &bitmap, co
taitoic_drawscanline(bitmap, cliprect, 0, y, scanline, (flags & TILEMAP_DRAW_OPAQUE) ? 0 : 1, ROT0, screen.priority(), priority); taitoic_drawscanline(bitmap, cliprect, 0, y, scanline, (flags & TILEMAP_DRAW_OPAQUE) ? 0 : 1, ROT0, screen.priority(), priority);
y_index += zoomy; y_index += zoomy;
if (!machine_flip) y++;
y++;
else
y--;
} }
while ((!machine_flip && y<=max_y) || (machine_flip && y>=min_y)); while (y<=max_y);
} }

View File

@ -1,15 +1,6 @@
#include "emu.h" #include "emu.h"
#include "includes/warriorb.h" #include "includes/warriorb.h"
/**********************************************************/
void warriorb_state::video_start()
{
/* Ensure palette from correct TC0110PCR used for each screen */
m_tc0100scn_1->set_colbanks(0x0, 0x100, 0x0);
}
/************************************************************ /************************************************************
SPRITE DRAW ROUTINE SPRITE DRAW ROUTINE
************************************************************/ ************************************************************/