mirror of
https://github.com/holub/mame
synced 2025-04-24 01:11:11 +03:00
baraduke.c, pacland.c: fix flipscreen after core changes, add SCREEN_RAW_PARAMs [Alex Jackson]
This commit is contained in:
parent
aa785afb99
commit
5c27ec48a2
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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 );
|
||||
};
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user