baraduke.c, pacland.c: fix flipscreen after core changes, add SCREEN_RAW_PARAMs [Alex Jackson]

This commit is contained in:
Alex W. Jackson 2014-02-25 12:06:47 +00:00
parent aa785afb99
commit 5c27ec48a2
6 changed files with 27 additions and 40 deletions

View File

@ -375,11 +375,11 @@ static const namco_interface namco_config =
static MACHINE_CONFIG_START( baraduke, baraduke_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809,49152000/32)
MCFG_CPU_ADD("maincpu", M6809, XTAL_49_152MHz/32)
MCFG_CPU_PROGRAM_MAP(baraduke_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", baraduke_state, irq0_line_assert)
MCFG_CPU_ADD("mcu", HD63701,49152000/8)
MCFG_CPU_ADD("mcu", HD63701, XTAL_49_152MHz/8)
MCFG_CPU_PROGRAM_MAP(mcu_map)
MCFG_CPU_IO_MAP(mcu_port_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", baraduke_state, irq0_line_hold)
@ -388,10 +388,7 @@ static MACHINE_CONFIG_START( baraduke, baraduke_state )
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60.606060)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(64*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 2*8, 30*8-1)
MCFG_SCREEN_RAW_PARAMS(XTAL_49_152MHz/8, 384, 0, 36*8, 264, 2*8, 30*8)
MCFG_SCREEN_UPDATE_DRIVER(baraduke_state, screen_update_baraduke)
MCFG_SCREEN_VBLANK_DRIVER(baraduke_state, screen_eof_baraduke)
@ -402,7 +399,7 @@ static MACHINE_CONFIG_START( baraduke, baraduke_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("namco", NAMCO_CUS30, 49152000/2048)
MCFG_SOUND_ADD("namco", NAMCO_CUS30, XTAL_49_152MHz/2048)
MCFG_SOUND_CONFIG(namco_config)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END

View File

@ -82,16 +82,9 @@ void namcos2_shared_state::namco_tilemap_init( int gfxbank, void *maskBaseAddr,
{
static const int adj[4] = { 4,2,1,0 };
int dx = 44+adj[i];
mTilemapInfo.tmap[i]->set_scrolldx( -dx, -(-384-dx) );
mTilemapInfo.tmap[i]->set_scrolldy( -24, 288 );
mTilemapInfo.tmap[i]->set_scrolldx( -dx, 288+dx );
mTilemapInfo.tmap[i]->set_scrolldy( -24, 224+24 );
}
mTilemapInfo.tmap[4]->set_scrolldx( 0, 96 );
mTilemapInfo.tmap[4]->set_scrolldy( 0, 40 );
mTilemapInfo.tmap[5]->set_scrolldx( 0, 96 );
mTilemapInfo.tmap[5]->set_scrolldy( 0, 40 );
} /* namco_tilemap_init */
void

View File

@ -202,9 +202,7 @@ WRITE8_MEMBER(pacland_state::pacland_subreset_w)
WRITE8_MEMBER(pacland_state::pacland_flipscreen_w)
{
int bit = !BIT(offset,11);
/* can't use flip_screen_set() because the visible area is asymmetrical */
flip_screen_set_no_update(bit);
machine().tilemap().set_flip_all(flip_screen() ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0);
flip_screen_set(bit);
}
@ -439,10 +437,7 @@ static MACHINE_CONFIG_START( pacland, pacland_state )
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60.606060)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(64*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(3*8, 39*8-1, 2*8, 30*8-1)
MCFG_SCREEN_RAW_PARAMS(XTAL_49_152MHz/8, 384, 3*8, 39*8, 264, 2*8, 30*8)
MCFG_SCREEN_UPDATE_DRIVER(pacland_state, screen_update_pacland)
MCFG_GFXDECODE_ADD("gfxdecode", pacland)

View File

@ -51,6 +51,6 @@ public:
INTERRUPT_GEN_MEMBER(main_vblank_irq);
INTERRUPT_GEN_MEMBER(mcu_vblank_irq);
void switch_palette();
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int whichmask);
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int flip, int whichmask);
void draw_fg(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int priority );
};

View File

@ -123,7 +123,10 @@ void baraduke_state::video_start()
m_bg_tilemap[0]->set_transparent_pen(7);
m_bg_tilemap[1]->set_transparent_pen(7);
m_tx_tilemap->set_scrolldx(0,512-288);
m_bg_tilemap[0]->set_scrolldx(-26, -227+26);
m_bg_tilemap[1]->set_scrolldx(-24, -227+24);
m_bg_tilemap[0]->set_scrolldy(-9, 9);
m_bg_tilemap[1]->set_scrolldy(-9, 9);
m_tx_tilemap->set_scrolldy(16,16);
}
@ -284,14 +287,12 @@ void baraduke_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec
void baraduke_state::set_scroll(int layer)
{
static const int xdisp[2] = { 26, 24 };
int scrollx, scrolly;
int scrollx = m_xscroll[layer];
int scrolly = m_yscroll[layer];
scrollx = m_xscroll[layer] + xdisp[layer];
scrolly = m_yscroll[layer] + 9;
if (flip_screen())
{
scrollx = -scrollx + 3;
scrollx = -scrollx;
scrolly = -scrolly;
}
@ -306,9 +307,7 @@ UINT32 baraduke_state::screen_update_baraduke(screen_device &screen, bitmap_ind1
int back;
/* flip screen is embedded in the sprite control registers */
/* can't use flip_screen_set() because the visible area is asymmetrical */
flip_screen_set_no_update(spriteram[0x07f6] & 0x01);
machine().tilemap().set_flip_all(flip_screen() ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0);
flip_screen_set(spriteram[0x07f6] & 0x01);
set_scroll(0);
set_scroll(1);

View File

@ -198,6 +198,8 @@ void pacland_state::video_start()
m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(pacland_state::get_bg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,64,32);
m_fg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(pacland_state::get_fg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,64,32);
m_bg_tilemap->set_scrolldx(3, 340);
m_fg_tilemap->set_scrolldx(0, 336); /* scrolling portion needs an additional offset when flipped */
m_fg_tilemap->set_scroll_rows(32);
/* create one group per color code; for each group, set the transparency mask
@ -271,7 +273,7 @@ WRITE8_MEMBER(pacland_state::pacland_bankswitch_w)
***************************************************************************/
/* the sprite generator IC is the same as Mappy */
void pacland_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int whichmask)
void pacland_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int flip, int whichmask)
{
UINT8 *spriteram = m_spriteram + 0x780;
UINT8 *spriteram_2 = spriteram + 0x800;
@ -298,7 +300,7 @@ void pacland_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, co
sprite &= ~sizex;
sprite &= ~(sizey << 1);
if (flip_screen())
if (flip)
{
flipx ^= 1;
flipy ^= 1;
@ -365,16 +367,17 @@ void pacland_state::draw_fg(screen_device &screen, bitmap_ind16 &bitmap, const r
UINT32 pacland_state::screen_update_pacland(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int row;
int flip = flip_screen();
for (row = 5; row < 29; row++)
m_fg_tilemap->set_scrollx(row, flip_screen() ? m_scroll0-7 : m_scroll0);
m_bg_tilemap->set_scrollx(0, flip_screen() ? m_scroll1-4 : m_scroll1-3);
m_fg_tilemap->set_scrollx(row, m_scroll0 - (flip ? 7 : 0));
m_bg_tilemap->set_scrollx(0, m_scroll1);
/* draw high priority sprite pixels, setting priority bitmap to non-zero
wherever there is a high-priority pixel; note that we draw to the bitmap
which is safe because the bg_tilemap draw will overwrite everything */
screen.priority().fill(0x00, cliprect);
draw_sprites(screen, bitmap, cliprect, 0);
draw_sprites(screen, bitmap, cliprect, flip, 0);
/* draw background */
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
@ -383,12 +386,12 @@ UINT32 pacland_state::screen_update_pacland(screen_device &screen, bitmap_ind16
draw_fg(screen, bitmap, cliprect, 0);
/* draw sprites with regular transparency */
draw_sprites(screen, bitmap, cliprect, 1);
draw_sprites(screen, bitmap, cliprect, flip, 1);
/* draw high priority fg tiles */
draw_fg(screen, bitmap, cliprect, 1);
/* draw sprite pixels with colortable values >= 0xf0, which have priority over everything */
draw_sprites(screen, bitmap, cliprect, 2);
draw_sprites(screen, bitmap, cliprect, flip, 2);
return 0;
}