decbac06: small cleanup (nw)

This commit is contained in:
hap 2019-02-26 17:44:41 +01:00
parent fa8d1e90fc
commit 7514b1aaa9

View File

@ -3,20 +3,20 @@
/* /*
Deco BAC06 tilemap generator: Deco BAC06 tilemap generator:
this a direct relative of the later chip implemented in deco16ic.c this a direct relative of the later chip implemented in deco16ic.cpp
we could implement this as either an 8-bit or a 16-bit chip, for now we could implement this as either an 8-bit or a 16-bit chip, for now
I'm using the 16-bit implementation from dec0.c I'm using the 16-bit implementation from dec0.cpp
used by: used by:
actfancr.c actfancr.cpp
dec0.c dec0.cpp
dec8.c (oscar, cobracom, ghostb) dec8.cpp (oscar, cobracom, ghostb)
madmotor.c madmotor.cpp
stadhero.c stadhero.cpp
pcktgal.c pcktgal.cpp
Notes (from dec0.c) Notes (from dec0.cpp)
All games contain three BAC06 background generator chips, usual (software) All games contain three BAC06 background generator chips, usual (software)
configuration is 2 chips of 16*16 tiles, 1 of 8*8. configuration is 2 chips of 16*16 tiles, 1 of 8*8.
@ -213,7 +213,6 @@ void deco_bac06_device::create_tilemaps(int region8x8, int region16x16)
m_pf8x8_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf8x8_tile_info),this),tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape1_8x8_scan),this), 8, 8, 64, 64); m_pf8x8_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf8x8_tile_info),this),tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape1_8x8_scan),this), 8, 8, 64, 64);
m_pf8x8_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf8x8_tile_info),this),tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape2_8x8_scan),this), 8, 8, 32,128); m_pf8x8_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf8x8_tile_info),this),tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape2_8x8_scan),this), 8, 8, 32,128);
if (m_wide==2) if (m_wide==2)
{ {
m_pf16x16_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf16x16_tile_info),this), tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape0_scan),this), 16, 16, 256, 16); m_pf16x16_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf16x16_tile_info),this), tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape0_scan),this), 16, 16, 256, 16);
@ -245,8 +244,7 @@ void deco_bac06_device::custom_tilemap_draw(bitmap_ind16 &bitmap,
uint16_t penmask, uint16_t penmask,
uint16_t pencondition, uint16_t pencondition,
uint16_t colprimask, uint16_t colprimask,
uint16_t colpricondition uint16_t colpricondition)
)
{ {
const bitmap_ind16 &src_bitmap = tilemap_ptr->pixmap(); const bitmap_ind16 &src_bitmap = tilemap_ptr->pixmap();
const bitmap_ind8 &flags_bitmap = tilemap_ptr->flagsmap(); const bitmap_ind8 &flags_bitmap = tilemap_ptr->flagsmap();
@ -304,7 +302,8 @@ void deco_bac06_device::custom_tilemap_draw(bitmap_ind16 &bitmap,
else else
src_y = scrolly; src_y = scrolly;
for (y=0; y<=cliprect.bottom(); y++) { for (y=0; y<=cliprect.bottom(); y++)
{
if (row_scroll_enabled) if (row_scroll_enabled)
src_x=scrollx + rowscroll_ptr[(src_y >> (control1[3]&0xf))&(0x1ff>>(control1[3]&0xf))]; src_x=scrollx + rowscroll_ptr[(src_y >> (control1[3]&0xf))&(0x1ff>>(control1[3]&0xf))];
else else
@ -313,7 +312,8 @@ void deco_bac06_device::custom_tilemap_draw(bitmap_ind16 &bitmap,
if (m_flip_screen) if (m_flip_screen)
src_x=(src_bitmap.width() - 256) - src_x; src_x=(src_bitmap.width() - 256) - src_x;
for (x=0; x<=cliprect.right(); x++) { for (x=0; x<=cliprect.right(); x++)
{
if (col_scroll_enabled) if (col_scroll_enabled)
column_offset=colscroll_ptr[((src_x >> 3) >> (control1[2]&0xf))&(0x3f>>(control1[2]&0xf))]; column_offset=colscroll_ptr[((src_x >> 3) >> (control1[2]&0xf))&(0x3f>>(control1[2]&0xf))];
@ -364,7 +364,6 @@ void deco_bac06_device::deco_bac06_pf_draw(bitmap_ind16 &bitmap,const rectangle
if (tm) if (tm)
custom_tilemap_draw(bitmap,cliprect,tm,m_pf_rowscroll.get(),m_pf_colscroll.get(),m_pf_control_0,m_pf_control_1,flags, penmask, pencondition, colprimask, colpricondition); custom_tilemap_draw(bitmap,cliprect,tm,m_pf_rowscroll.get(),m_pf_colscroll.get(),m_pf_control_0,m_pf_control_1,flags, penmask, pencondition, colprimask, colpricondition);
} }
// used for pocket gal bootleg, which doesn't set registers properly and simply expects a fixed size tilemap. // used for pocket gal bootleg, which doesn't set registers properly and simply expects a fixed size tilemap.
@ -394,12 +393,11 @@ WRITE16_MEMBER( deco_bac06_device::pf_control_0_w )
{ {
// The tilemap has changed from row major to column major or vice versa. // The tilemap has changed from row major to column major or vice versa.
// Must force an update of the mapping. // Must force an update of the mapping.
m_pf8x8_tilemap[0]->mark_mapping_dirty(); for (int i = 0; i < 3; i++)
m_pf8x8_tilemap[1]->mark_mapping_dirty(); {
m_pf8x8_tilemap[2]->mark_mapping_dirty(); m_pf8x8_tilemap[i]->mark_mapping_dirty();
m_pf16x16_tilemap[0]->mark_mapping_dirty(); m_pf16x16_tilemap[i]->mark_mapping_dirty();
m_pf16x16_tilemap[1]->mark_mapping_dirty(); }
m_pf16x16_tilemap[2]->mark_mapping_dirty();
dirty_all = true; dirty_all = true;
} }
} }
@ -420,12 +418,11 @@ WRITE16_MEMBER( deco_bac06_device::pf_control_0_w )
if (dirty_all) if (dirty_all)
{ {
m_pf8x8_tilemap[0]->mark_all_dirty(); for (int i = 0; i < 3; i++)
m_pf8x8_tilemap[1]->mark_all_dirty(); {
m_pf8x8_tilemap[2]->mark_all_dirty(); m_pf8x8_tilemap[i]->mark_all_dirty();
m_pf16x16_tilemap[0]->mark_all_dirty(); m_pf16x16_tilemap[i]->mark_all_dirty();
m_pf16x16_tilemap[1]->mark_all_dirty(); }
m_pf16x16_tilemap[2]->mark_all_dirty();
} }
} }
@ -446,12 +443,12 @@ WRITE16_MEMBER( deco_bac06_device::pf_data_w )
if (m_rambank&1) offset+=0x1000; if (m_rambank&1) offset+=0x1000;
COMBINE_DATA(&m_pf_data[offset]); COMBINE_DATA(&m_pf_data[offset]);
m_pf8x8_tilemap[0]->mark_tile_dirty(offset);
m_pf8x8_tilemap[1]->mark_tile_dirty(offset); for (int i = 0; i < 3; i++)
m_pf8x8_tilemap[2]->mark_tile_dirty(offset); {
m_pf16x16_tilemap[0]->mark_tile_dirty(offset); m_pf8x8_tilemap[i]->mark_tile_dirty(offset);
m_pf16x16_tilemap[1]->mark_tile_dirty(offset); m_pf16x16_tilemap[i]->mark_tile_dirty(offset);
m_pf16x16_tilemap[2]->mark_tile_dirty(offset); }
} }
READ16_MEMBER( deco_bac06_device::pf_data_r ) READ16_MEMBER( deco_bac06_device::pf_data_r )
@ -497,7 +494,7 @@ READ16_MEMBER( deco_bac06_device::pf_colscroll_r )
return m_pf_colscroll[offset]; return m_pf_colscroll[offset];
} }
/* used by dec8.c */ /* used by dec8.cpp */
WRITE8_MEMBER( deco_bac06_device::pf_control0_8bit_w ) WRITE8_MEMBER( deco_bac06_device::pf_control0_8bit_w )
{ {
if (offset&1) if (offset&1)
@ -506,7 +503,7 @@ WRITE8_MEMBER( deco_bac06_device::pf_control0_8bit_w )
pf_control_0_w(space,offset/2,data,0x00ff); pf_control_0_w(space,offset/2,data,0x00ff);
} }
/* used by dec8.c */ /* used by dec8.cpp */
READ8_MEMBER( deco_bac06_device::pf_control1_8bit_r ) READ8_MEMBER( deco_bac06_device::pf_control1_8bit_r )
{ {
if (offset&1) if (offset&1)
@ -515,7 +512,7 @@ READ8_MEMBER( deco_bac06_device::pf_control1_8bit_r )
return pf_control_1_r(space,offset/2,0xff00)>>8; return pf_control_1_r(space,offset/2,0xff00)>>8;
} }
/* used by dec8.c */ /* used by dec8.cpp */
WRITE8_MEMBER( deco_bac06_device::pf_control1_8bit_w ) WRITE8_MEMBER( deco_bac06_device::pf_control1_8bit_w )
{ {
if (offset<4) // these registers are 16-bit? if (offset<4) // these registers are 16-bit?