summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cam900 <dbtlrchl@naver.com>2019-04-01 05:58:12 +0900
committer R. Belmont <rb6502@users.noreply.github.com>2019-03-31 16:58:12 -0400
commit1e3fb5c99a52a77286e38b1d74ae343caa702840 (patch)
tree7a3bb4a39c70f76b545981652f25d741dd899119
parent060abb5682f7793f9b4c81ab75947e12e7483736 (diff)
decbac06.cpp : Updates (#4274)
* decbac06.cpp : Updates Make bpp masking related to gfx, Make tilemap draw routine related to cliprect, Cleanup unnecessary address_space in handlers, Fix spacing * decbac06.cpp : Fix spacing * decbac06.cpp : Another fix spacing
-rw-r--r--src/mame/video/dec0.cpp82
-rw-r--r--src/mame/video/decbac06.cpp153
-rw-r--r--src/mame/video/decbac06.h60
-rw-r--r--src/mame/video/stadhero.cpp1
4 files changed, 162 insertions, 134 deletions
diff --git a/src/mame/video/dec0.cpp b/src/mame/video/dec0.cpp
index 6c94ca6d0ff..b48ebfaa867 100644
--- a/src/mame/video/dec0.cpp
+++ b/src/mame/video/dec0.cpp
@@ -160,31 +160,30 @@ uint32_t dec0_automat_state::screen_update_automat(screen_device &screen, bitmap
// layer enables seem different... where are they?
// the bootleg doesn't write these registers, I think they're hardcoded?, so fake them for compatibility with our implementation..
- address_space &space = machine().dummy_space();
- m_tilegen[0]->pf_control_0_w(space,0,0x0003, 0x00ff); // 8x8
- m_tilegen[0]->pf_control_0_w(space,1,0x0003, 0x00ff);
- m_tilegen[0]->pf_control_0_w(space,2,0x0000, 0x00ff);
- m_tilegen[0]->pf_control_0_w(space,3,0x0001, 0x00ff); // dimensions
-
- m_tilegen[1]->pf_control_0_w(space,0,0x0082, 0x00ff); // 16x16
- m_tilegen[1]->pf_control_0_w(space,1,0x0000, 0x00ff);
- m_tilegen[1]->pf_control_0_w(space,2,0x0000, 0x00ff);
- m_tilegen[1]->pf_control_0_w(space,3,0x0001, 0x00ff); // dimensions
-
- m_tilegen[2]->pf_control_0_w(space,0,0x0082, 0x00ff); // 16x16
- m_tilegen[2]->pf_control_0_w(space,1,0x0003, 0x00ff);
- m_tilegen[2]->pf_control_0_w(space,2,0x0000, 0x00ff);
- m_tilegen[2]->pf_control_0_w(space,3,0x0001, 0x00ff); // dimensions
+ m_tilegen[0]->pf_control_0_w(0,0x0003, 0x00ff); // 8x8
+ m_tilegen[0]->pf_control_0_w(1,0x0003, 0x00ff);
+ m_tilegen[0]->pf_control_0_w(2,0x0000, 0x00ff);
+ m_tilegen[0]->pf_control_0_w(3,0x0001, 0x00ff); // dimensions
+
+ m_tilegen[1]->pf_control_0_w(0,0x0082, 0x00ff); // 16x16
+ m_tilegen[1]->pf_control_0_w(1,0x0000, 0x00ff);
+ m_tilegen[1]->pf_control_0_w(2,0x0000, 0x00ff);
+ m_tilegen[1]->pf_control_0_w(3,0x0001, 0x00ff); // dimensions
+
+ m_tilegen[2]->pf_control_0_w(0,0x0082, 0x00ff); // 16x16
+ m_tilegen[2]->pf_control_0_w(1,0x0003, 0x00ff);
+ m_tilegen[2]->pf_control_0_w(2,0x0000, 0x00ff);
+ m_tilegen[2]->pf_control_0_w(3,0x0001, 0x00ff); // dimensions
// scroll registers got written elsewhere, copy them across
- m_tilegen[0]->pf_control_1_w(space,0,0x0000, 0xffff); // no scroll?
- m_tilegen[0]->pf_control_1_w(space,1,0x0000, 0xffff); // no scroll?
+ m_tilegen[0]->pf_control_1_w(0,0x0000, 0xffff); // no scroll?
+ m_tilegen[0]->pf_control_1_w(1,0x0000, 0xffff); // no scroll?
- m_tilegen[1]->pf_control_1_w(space,0,m_automat_scroll_regs[3] - 0x010a, 0xffff);
- m_tilegen[1]->pf_control_1_w(space,1,m_automat_scroll_regs[2], 0xffff);
+ m_tilegen[1]->pf_control_1_w(0,m_automat_scroll_regs[3] - 0x010a, 0xffff);
+ m_tilegen[1]->pf_control_1_w(1,m_automat_scroll_regs[2], 0xffff);
- m_tilegen[2]->pf_control_1_w(space,0,m_automat_scroll_regs[1] - 0x0108, 0xffff);
- m_tilegen[2]->pf_control_1_w(space,1,m_automat_scroll_regs[0], 0xffff);
+ m_tilegen[2]->pf_control_1_w(0,m_automat_scroll_regs[1] - 0x0108, 0xffff);
+ m_tilegen[2]->pf_control_1_w(1,m_automat_scroll_regs[0], 0xffff);
bool flip = m_tilegen[0]->get_flip_state();
@@ -231,31 +230,30 @@ uint32_t dec0_automat_state::screen_update_secretab(screen_device &screen, bitma
// layer enables seem different... where are they?
// the bootleg doesn't write these registers, I think they're hardcoded?, so fake them for compatibility with our implementation..
- address_space &space = machine().dummy_space();
- m_tilegen[0]->pf_control_0_w(space,0,0x0003, 0x00ff); // 8x8
- m_tilegen[0]->pf_control_0_w(space,1,0x0003, 0x00ff);
- m_tilegen[0]->pf_control_0_w(space,2,0x0000, 0x00ff);
- m_tilegen[0]->pf_control_0_w(space,3,0x0001, 0x00ff); // dimensions
-
- m_tilegen[1]->pf_control_0_w(space,0,0x0082, 0x00ff); // 16x16
- m_tilegen[1]->pf_control_0_w(space,1,0x0000, 0x00ff);
- m_tilegen[1]->pf_control_0_w(space,2,0x0000, 0x00ff);
- m_tilegen[1]->pf_control_0_w(space,3,0x0001, 0x00ff); // dimensions
-
- m_tilegen[2]->pf_control_0_w(space,0,0x0082, 0x00ff); // 16x16
- m_tilegen[2]->pf_control_0_w(space,1,0x0003, 0x00ff);
- m_tilegen[2]->pf_control_0_w(space,2,0x0000, 0x00ff);
- m_tilegen[2]->pf_control_0_w(space,3,0x0001, 0x00ff); // dimensions
+ m_tilegen[0]->pf_control_0_w(0,0x0003, 0x00ff); // 8x8
+ m_tilegen[0]->pf_control_0_w(1,0x0003, 0x00ff);
+ m_tilegen[0]->pf_control_0_w(2,0x0000, 0x00ff);
+ m_tilegen[0]->pf_control_0_w(3,0x0001, 0x00ff); // dimensions
+
+ m_tilegen[1]->pf_control_0_w(0,0x0082, 0x00ff); // 16x16
+ m_tilegen[1]->pf_control_0_w(1,0x0000, 0x00ff);
+ m_tilegen[1]->pf_control_0_w(2,0x0000, 0x00ff);
+ m_tilegen[1]->pf_control_0_w(3,0x0001, 0x00ff); // dimensions
+
+ m_tilegen[2]->pf_control_0_w(0,0x0082, 0x00ff); // 16x16
+ m_tilegen[2]->pf_control_0_w(1,0x0003, 0x00ff);
+ m_tilegen[2]->pf_control_0_w(2,0x0000, 0x00ff);
+ m_tilegen[2]->pf_control_0_w(3,0x0001, 0x00ff); // dimensions
// scroll registers got written elsewhere, copy them across
- m_tilegen[0]->pf_control_1_w(space,0,0x0000, 0xffff); // no scroll?
- m_tilegen[0]->pf_control_1_w(space,1,0x0000, 0xffff); // no scroll?
+ m_tilegen[0]->pf_control_1_w(0,0x0000, 0xffff); // no scroll?
+ m_tilegen[0]->pf_control_1_w(1,0x0000, 0xffff); // no scroll?
- m_tilegen[1]->pf_control_1_w(space,0,m_automat_scroll_regs[3] - 0x010a, 0xffff);
- m_tilegen[1]->pf_control_1_w(space,1,m_automat_scroll_regs[2], 0xffff);
+ m_tilegen[1]->pf_control_1_w(0,m_automat_scroll_regs[3] - 0x010a, 0xffff);
+ m_tilegen[1]->pf_control_1_w(1,m_automat_scroll_regs[2], 0xffff);
- m_tilegen[2]->pf_control_1_w(space,0,m_automat_scroll_regs[1] - 0x0108, 0xffff);
- m_tilegen[2]->pf_control_1_w(space,1,m_automat_scroll_regs[0], 0xffff);
+ m_tilegen[2]->pf_control_1_w(0,m_automat_scroll_regs[1] - 0x0108, 0xffff);
+ m_tilegen[2]->pf_control_1_w(1,m_automat_scroll_regs[0], 0xffff);
bool flip = m_tilegen[0]->get_flip_state();
m_tilegen[0]->set_flip_screen(flip);
diff --git a/src/mame/video/decbac06.cpp b/src/mame/video/decbac06.cpp
index e89d24f957d..68d3e889124 100644
--- a/src/mame/video/decbac06.cpp
+++ b/src/mame/video/decbac06.cpp
@@ -87,8 +87,10 @@ deco_bac06_device::deco_bac06_device(const machine_config &mconfig, const char *
, m_gfxregion8x8(0)
, m_gfxregion16x16(0)
, m_wide(0)
- , m_bppmult(0)
- , m_bppmask(0)
+ , m_bppmult_8x8(0)
+ , m_bppmask_8x8(0)
+ , m_bppmult_16x16(0)
+ , m_bppmask_16x16(0)
, m_gfxdecode(*this, finder_base::DUMMY_TAG)
{
for (int i = 0; i < 8; i++)
@@ -110,8 +112,12 @@ void deco_bac06_device::device_start()
create_tilemaps(m_gfxregion8x8, m_gfxregion16x16);
m_gfxcolmask = 0x0f;
- m_bppmult = 0x10;
- m_bppmask = 0x0f;
+ m_bppmult_8x8 = m_gfxdecode->gfx(m_gfxregion8x8)->granularity();
+ m_bppmask_8x8 = m_gfxdecode->gfx(m_gfxregion8x8)->depth() - 1;
+
+ m_bppmult_16x16 = m_gfxdecode->gfx(m_gfxregion16x16)->granularity();
+ m_bppmask_16x16 = m_gfxdecode->gfx(m_gfxregion16x16)->depth() - 1;
+
m_rambank = 0;
m_flip_screen = false;
@@ -247,7 +253,9 @@ void deco_bac06_device::custom_tilemap_draw(bitmap_ind16 &bitmap,
uint16_t penmask,
uint16_t pencondition,
uint16_t colprimask,
- uint16_t colpricondition)
+ uint16_t colpricondition,
+ uint8_t bppmult,
+ uint8_t bppmask)
{
const bitmap_ind16 &src_bitmap = tilemap_ptr->pixmap();
const bitmap_ind8 &flags_bitmap = tilemap_ptr->flagsmap();
@@ -305,7 +313,8 @@ void deco_bac06_device::custom_tilemap_draw(bitmap_ind16 &bitmap,
else
src_y = scrolly;
- for (y=0; y<=cliprect.bottom(); y++)
+ src_y += cliprect.top();
+ for (y=cliprect.top(); y<=cliprect.bottom(); y++)
{
if (row_scroll_enabled)
src_x=scrollx + rowscroll_ptr[(src_y >> (control1[3]&0xf))&(0x1ff>>(control1[3]&0xf))];
@@ -315,7 +324,8 @@ void deco_bac06_device::custom_tilemap_draw(bitmap_ind16 &bitmap,
if (m_flip_screen)
src_x=(src_bitmap.width() - 256) - src_x;
- for (x=0; x<=cliprect.right(); x++)
+ src_x += cliprect.left();
+ for (x=cliprect.left(); x<=cliprect.right(); x++)
{
if (col_scroll_enabled)
column_offset=colscroll_ptr[((src_x >> 3) >> (control1[2]&0xf))&(0x3f>>(control1[2]&0xf))];
@@ -324,11 +334,11 @@ void deco_bac06_device::custom_tilemap_draw(bitmap_ind16 &bitmap,
colpri = flags_bitmap.pix8((src_y + column_offset)&height_mask, src_x&width_mask)&0xf;
src_x++;
- if ((flags&TILEMAP_DRAW_OPAQUE) || (p&m_bppmask))
+ if ((flags&TILEMAP_DRAW_OPAQUE) || (p&bppmask))
{
if ((p&penmask)==pencondition)
if((colpri&colprimask)==colpricondition)
- bitmap.pix16(y, x) = p+(colpri&m_gfxcolmask)*m_bppmult;
+ bitmap.pix16(y, x) = p+(colpri&m_gfxcolmask)*bppmult;
}
}
src_y++;
@@ -338,6 +348,7 @@ void deco_bac06_device::custom_tilemap_draw(bitmap_ind16 &bitmap,
void deco_bac06_device::deco_bac06_pf_draw(bitmap_ind16 &bitmap,const rectangle &cliprect,int flags,uint16_t penmask, uint16_t pencondition,uint16_t colprimask, uint16_t colpricondition)
{
tilemap_t* tm = nullptr;
+ uint8_t bppmult = 0, bppmask = 0;
int tm_dimensions = m_pf_control_0[3] & 0x3;
if (tm_dimensions == 3) tm_dimensions = 1; // 3 is invalid / the same as 1?
@@ -347,10 +358,14 @@ void deco_bac06_device::deco_bac06_pf_draw(bitmap_ind16 &bitmap,const rectangle
if (m_supports_8x8)
{
tm = m_pf8x8_tilemap[tm_dimensions];
+ bppmult = m_bppmult_8x8;
+ bppmask = m_bppmask_8x8;
}
else if (m_supports_16x16)
{
tm = m_pf16x16_tilemap[tm_dimensions];
+ bppmult = m_bppmult_16x16;
+ bppmask = m_bppmask_16x16;
}
}
else // 16x16 tiles mode is selected
@@ -358,30 +373,45 @@ void deco_bac06_device::deco_bac06_pf_draw(bitmap_ind16 &bitmap,const rectangle
if (m_supports_16x16)
{
tm = m_pf16x16_tilemap[tm_dimensions];
+ bppmult = m_bppmult_16x16;
+ bppmask = m_bppmask_16x16;
}
else if (m_supports_8x8)
{
tm = m_pf8x8_tilemap[tm_dimensions];
+ bppmult = m_bppmult_8x8;
+ bppmask = m_bppmask_8x8;
}
}
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, bppmult, bppmask);
}
// used for pocket gal bootleg, which doesn't set registers properly and simply expects a fixed size tilemap.
void deco_bac06_device::deco_bac06_pf_draw_bootleg(bitmap_ind16 &bitmap,const rectangle &cliprect,int flags, int mode, int type)
{
tilemap_t* tm = nullptr;
- if (!mode) tm = m_pf8x8_tilemap[type];
- else tm = m_pf16x16_tilemap[type];
+ uint8_t bppmult, bppmask;
+ if (!mode)
+ {
+ tm = m_pf8x8_tilemap[type];
+ bppmult = m_bppmult_8x8;
+ bppmask = m_bppmask_8x8;
+ }
+ else
+ {
+ tm = m_pf16x16_tilemap[type];
+ bppmult = m_bppmult_16x16;
+ bppmask = m_bppmask_16x16;
+ }
- custom_tilemap_draw(bitmap,cliprect,tm,m_pf_rowscroll.get(),m_pf_colscroll.get(),nullptr,nullptr,flags, 0, 0, 0, 0);
+ custom_tilemap_draw(bitmap,cliprect,tm,m_pf_rowscroll.get(),m_pf_colscroll.get(),nullptr,nullptr,flags, 0, 0, 0, 0, bppmult, bppmask);
}
-WRITE16_MEMBER( deco_bac06_device::pf_control_0_w )
+void deco_bac06_device::pf_control_0_w(offs_t offset, u16 data, u16 mem_mask)
{
int old_register0 = m_pf_control_0[0];
@@ -412,7 +442,7 @@ WRITE16_MEMBER( deco_bac06_device::pf_control_0_w )
// I don't know WHY Stadium Hero uses this as a bank but the RAM test expects it..
// I'm curious as to if anything else sets it tho
if (strcmp(machine().system().name,"stadhero"))
- printf("tilemap ram bank change to %d\n", newbank&1);
+ logerror("tilemap ram bank change to %02x\n", newbank&1);
dirty_all = true;
m_rambank = newbank&1;
@@ -429,19 +459,19 @@ WRITE16_MEMBER( deco_bac06_device::pf_control_0_w )
}
}
-READ16_MEMBER( deco_bac06_device::pf_control_1_r )
+u16 deco_bac06_device::pf_control_1_r(offs_t offset, u16 mem_mask)
{
offset &= 7;
return m_pf_control_1[offset];
}
-WRITE16_MEMBER( deco_bac06_device::pf_control_1_w )
+void deco_bac06_device::pf_control_1_w(offs_t offset, u16 data, u16 mem_mask)
{
offset &= 7;
COMBINE_DATA(&m_pf_control_1[offset]);
}
-WRITE16_MEMBER( deco_bac06_device::pf_data_w )
+void deco_bac06_device::pf_data_w(offs_t offset, u16 data, u16 mem_mask)
{
if (m_rambank&1) offset+=0x1000;
@@ -454,144 +484,143 @@ WRITE16_MEMBER( deco_bac06_device::pf_data_w )
}
}
-READ16_MEMBER( deco_bac06_device::pf_data_r )
+u16 deco_bac06_device::pf_data_r(offs_t offset, u16 mem_mask)
{
if (m_rambank&1) offset+=0x1000;
return m_pf_data[offset];
}
-WRITE8_MEMBER( deco_bac06_device::pf_data_8bit_w )
+void deco_bac06_device::pf_data_8bit_w(offs_t offset, u8 data)
{
if (offset&1)
- pf_data_w(space,offset/2,data,0x00ff);
+ pf_data_w(offset/2,data,0x00ff);
else
- pf_data_w(space,offset/2,data<<8,0xff00);
+ pf_data_w(offset/2,data<<8,0xff00);
}
-READ8_MEMBER( deco_bac06_device::pf_data_8bit_r )
+u8 deco_bac06_device::pf_data_8bit_r(offs_t offset)
{
if (offset&1) /* MSB */
- return pf_data_r(space,offset/2,0x00ff);
+ return pf_data_r(offset/2,0x00ff);
else
- return pf_data_r(space,offset/2,0xff00)>>8;
+ return pf_data_r(offset/2,0xff00)>>8;
}
-WRITE16_MEMBER( deco_bac06_device::pf_rowscroll_w )
+void deco_bac06_device::pf_rowscroll_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_pf_rowscroll[offset]);
}
-WRITE16_MEMBER( deco_bac06_device::pf_colscroll_w )
+void deco_bac06_device::pf_colscroll_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_pf_colscroll[offset]);
}
-READ16_MEMBER( deco_bac06_device::pf_rowscroll_r )
+u16 deco_bac06_device::pf_rowscroll_r(offs_t offset, u16 mem_mask)
{
return m_pf_rowscroll[offset];
}
-READ16_MEMBER( deco_bac06_device::pf_colscroll_r )
+u16 deco_bac06_device::pf_colscroll_r(offs_t offset, u16 mem_mask)
{
return m_pf_colscroll[offset];
}
/* used by dec8.cpp */
-WRITE8_MEMBER( deco_bac06_device::pf_control0_8bit_w )
+void deco_bac06_device::pf_control0_8bit_w(offs_t offset, u8 data)
{
if (offset&1)
- pf_control_0_w(space,offset/2,data,0x00ff); // oscar (mirrors?)
+ pf_control_0_w(offset/2,data,0x00ff); // oscar (mirrors?)
else
- pf_control_0_w(space,offset/2,data,0x00ff);
+ pf_control_0_w(offset/2,data,0x00ff);
}
/* used by dec8.cpp */
-READ8_MEMBER( deco_bac06_device::pf_control1_8bit_r )
+u8 deco_bac06_device::pf_control1_8bit_r(offs_t offset)
{
if (offset&1)
- return pf_control_1_r(space,offset/2,0x00ff);
+ return pf_control_1_r(offset/2,0x00ff);
else
- return pf_control_1_r(space,offset/2,0xff00)>>8;
+ return pf_control_1_r(offset/2,0xff00)>>8;
}
/* used by dec8.cpp */
-WRITE8_MEMBER( deco_bac06_device::pf_control1_8bit_w )
+void deco_bac06_device::pf_control1_8bit_w(offs_t offset, u8 data)
{
if (offset<4) // these registers are 16-bit?
{
if (offset&1)
- pf_control_1_w(space,offset/2,data,0x00ff);
+ pf_control_1_w(offset/2,data,0x00ff);
else
- pf_control_1_w(space,offset/2,data<<8,0xff00);
+ pf_control_1_w(offset/2,data<<8,0xff00);
}
else // these registers are 8-bit and mirror? (triothep vs actfancr)
{
if (offset&1)
- pf_control_1_w(space,offset/2,data,0x00ff);
+ pf_control_1_w(offset/2,data,0x00ff);
else
- pf_control_1_w(space,offset/2,data,0x00ff);
+ pf_control_1_w(offset/2,data,0x00ff);
}
}
-READ8_MEMBER( deco_bac06_device::pf_rowscroll_8bit_r )
+u8 deco_bac06_device::pf_rowscroll_8bit_r(offs_t offset)
{
if (offset&1)
- return pf_rowscroll_r(space,offset/2,0x00ff);
+ return pf_rowscroll_r(offset/2,0x00ff);
else
- return pf_rowscroll_r(space,offset/2,0xff00)>>8;
+ return pf_rowscroll_r(offset/2,0xff00)>>8;
}
-WRITE8_MEMBER( deco_bac06_device::pf_rowscroll_8bit_w )
+void deco_bac06_device::pf_rowscroll_8bit_w(offs_t offset, u8 data)
{
if (offset&1)
- pf_rowscroll_w(space,offset/2,data,0x00ff);
+ pf_rowscroll_w(offset/2,data,0x00ff);
else
- pf_rowscroll_w(space,offset/2,data<<8,0xff00);
+ pf_rowscroll_w(offset/2,data<<8,0xff00);
}
-READ8_MEMBER( deco_bac06_device::pf_rowscroll_8bit_swap_r )
+u8 deco_bac06_device::pf_rowscroll_8bit_swap_r(offs_t offset)
{
if (offset&1)
- return pf_rowscroll_r(space,offset/2,0xff00)>>8;
+ return pf_rowscroll_r(offset/2,0xff00)>>8;
else
- return pf_rowscroll_r(space,offset/2,0x00ff);
+ return pf_rowscroll_r(offset/2,0x00ff);
}
-WRITE8_MEMBER( deco_bac06_device::pf_rowscroll_8bit_swap_w )
+void deco_bac06_device::pf_rowscroll_8bit_swap_w(offs_t offset, u8 data)
{
if (offset&1)
- pf_rowscroll_w(space,offset/2,data<<8,0xff00);
+ pf_rowscroll_w(offset/2,data<<8,0xff00);
else
- pf_rowscroll_w(space,offset/2,data,0x00ff);
+ pf_rowscroll_w(offset/2,data,0x00ff);
}
-
/* used by hippodrm */
-WRITE8_MEMBER( deco_bac06_device::pf_control0_8bit_packed_w )
+void deco_bac06_device::pf_control0_8bit_packed_w(offs_t offset, u8 data)
{
if (offset&1)
- pf_control_0_w(space,offset/2,data<<8,0xff00);
+ pf_control_0_w(offset/2,data<<8,0xff00);
else
- pf_control_0_w(space,offset/2,data,0x00ff);
+ pf_control_0_w(offset/2,data,0x00ff);
}
/* used by hippodrm */
-WRITE8_MEMBER( deco_bac06_device::pf_control1_8bit_swap_w )
+void deco_bac06_device::pf_control1_8bit_swap_w(offs_t offset, u8 data)
{
- pf_control1_8bit_w(space, offset^1, data);
+ pf_control1_8bit_w(offset^1, data);
}
/* used by hippodrm */
-READ8_MEMBER( deco_bac06_device::pf_data_8bit_swap_r )
+u8 deco_bac06_device::pf_data_8bit_swap_r(offs_t offset)
{
- return pf_data_8bit_r(space, offset^1);
+ return pf_data_8bit_r(offset^1);
}
/* used by hippodrm */
-WRITE8_MEMBER( deco_bac06_device::pf_data_8bit_swap_w )
+void deco_bac06_device::pf_data_8bit_swap_w(offs_t offset, u8 data)
{
- pf_data_8bit_w(space, offset^1, data);
+ pf_data_8bit_w(offset^1, data);
}
diff --git a/src/mame/video/decbac06.h b/src/mame/video/decbac06.h
index c1ed9aff483..a73f5a6a77f 100644
--- a/src/mame/video/decbac06.h
+++ b/src/mame/video/decbac06.h
@@ -60,9 +60,7 @@ public:
*/
uint8_t get_flip_state(void) { return m_pf_control_0[0]&0x80; };
-
void set_colmask(int data) { m_gfxcolmask = data; }
- void set_bppmultmask( int mult, int mask ) { m_bppmult = mult; m_bppmask = mask; } // stadium hero has 3bpp tiles
void set_flip_screen(bool flip);
uint8_t m_gfxcolmask;
@@ -71,37 +69,37 @@ public:
/* 16-bit accessors */
- DECLARE_WRITE16_MEMBER( pf_control_0_w );
- DECLARE_READ16_MEMBER( pf_control_1_r );
- DECLARE_WRITE16_MEMBER( pf_control_1_w );
+ void pf_control_0_w(offs_t offset, u16 data, u16 mem_mask);
+ u16 pf_control_1_r(offs_t offset, u16 mem_mask);
+ void pf_control_1_w(offs_t offset, u16 data, u16 mem_mask);
- DECLARE_WRITE16_MEMBER( pf_data_w );
- DECLARE_READ16_MEMBER( pf_data_r );
- DECLARE_WRITE16_MEMBER( pf_rowscroll_w );
- DECLARE_READ16_MEMBER( pf_rowscroll_r );
- DECLARE_WRITE16_MEMBER( pf_colscroll_w );
- DECLARE_READ16_MEMBER( pf_colscroll_r );
+ void pf_data_w(offs_t offset, u16 data, u16 mem_mask);
+ u16 pf_data_r(offs_t offset, u16 mem_mask);
+ void pf_rowscroll_w(offs_t offset, u16 data, u16 mem_mask);
+ u16 pf_rowscroll_r(offs_t offset, u16 mem_mask);
+ void pf_colscroll_w(offs_t offset, u16 data, u16 mem_mask);
+ u16 pf_colscroll_r(offs_t offset, u16 mem_mask);
/* 8-bit accessors */
- /* for dec8.cpp, pcktgal.cpp */
- DECLARE_READ8_MEMBER( pf_data_8bit_r );
- DECLARE_WRITE8_MEMBER( pf_data_8bit_w );
+ /* for dec8.cpp, pcktgal.cpp (Big endian CPU (6809, etc) based games) */
+ u8 pf_data_8bit_r(offs_t offset);
+ void pf_data_8bit_w(offs_t offset, u8 data);
- DECLARE_WRITE8_MEMBER( pf_control0_8bit_w );
- DECLARE_READ8_MEMBER( pf_control1_8bit_r );
- DECLARE_WRITE8_MEMBER( pf_control1_8bit_w );
+ void pf_control0_8bit_w(offs_t offset, u8 data);
+ u8 pf_control1_8bit_r(offs_t offset);
+ void pf_control1_8bit_w(offs_t offset, u8 data);
- DECLARE_READ8_MEMBER( pf_rowscroll_8bit_r );
- DECLARE_WRITE8_MEMBER( pf_rowscroll_8bit_w );
+ u8 pf_rowscroll_8bit_r(offs_t offset);
+ void pf_rowscroll_8bit_w(offs_t offset, u8 data);
- /* for hippodrm (dec0.cpp) and actfancr / triothep (H6280 based games)*/
- DECLARE_WRITE8_MEMBER( pf_control0_8bit_packed_w );
- DECLARE_WRITE8_MEMBER( pf_control1_8bit_swap_w );
- DECLARE_READ8_MEMBER( pf_data_8bit_swap_r );
- DECLARE_WRITE8_MEMBER( pf_data_8bit_swap_w );
- DECLARE_READ8_MEMBER( pf_rowscroll_8bit_swap_r );
- DECLARE_WRITE8_MEMBER( pf_rowscroll_8bit_swap_w );
+ /* for hippodrm (dec0.cpp) and actfancr / triothep (Little endian CPU (HuC6280, etc) based games)*/
+ void pf_control0_8bit_packed_w(offs_t offset, u8 data);
+ void pf_control1_8bit_swap_w(offs_t offset, u8 data);
+ u8 pf_data_8bit_swap_r(offs_t offset);
+ void pf_data_8bit_swap_w(offs_t offset, u8 data);
+ u8 pf_rowscroll_8bit_swap_r(offs_t offset);
+ void pf_rowscroll_8bit_swap_w(offs_t offset, u8 data);
protected:
virtual void device_start() override;
@@ -111,8 +109,11 @@ protected:
uint8_t m_gfxregion16x16;
int m_wide;
- uint8_t m_bppmult;
- uint8_t m_bppmask;
+ uint8_t m_bppmult_8x8;
+ uint8_t m_bppmask_8x8;
+
+ uint8_t m_bppmult_16x16;
+ uint8_t m_bppmask_16x16;
void custom_tilemap_draw(bitmap_ind16 &bitmap,
const rectangle &cliprect,
@@ -122,7 +123,8 @@ protected:
const uint16_t *control0,
const uint16_t *control1,
int flags,
- uint16_t penmask, uint16_t pencondition,uint16_t colprimask, uint16_t colpricondition);
+ uint16_t penmask, uint16_t pencondition,uint16_t colprimask, uint16_t colpricondition,
+ uint8_t bppmult, uint8_t bppmask);
private:
TILEMAP_MAPPER_MEMBER(tile_shape0_scan);
diff --git a/src/mame/video/stadhero.cpp b/src/mame/video/stadhero.cpp
index acabf0aec90..196feaa9deb 100644
--- a/src/mame/video/stadhero.cpp
+++ b/src/mame/video/stadhero.cpp
@@ -27,7 +27,6 @@ uint32_t stadhero_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
m_spritegen->set_flip_screen(flip);
m_pf1_tilemap->set_flip(flip ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
- m_tilegen->set_bppmultmask(0x8, 0x7);
m_tilegen->deco_bac06_pf_draw(bitmap,cliprect,TILEMAP_DRAW_OPAQUE, 0x00, 0x00, 0x00, 0x00);
m_spritegen->draw_sprites(bitmap, cliprect, m_spriteram, 0x00, 0x00, 0x0f);
m_pf1_tilemap->draw(screen, bitmap, cliprect, 0,0);