From 1e3fb5c99a52a77286e38b1d74ae343caa702840 Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 1 Apr 2019 05:58:12 +0900 Subject: 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 --- src/mame/video/dec0.cpp | 82 ++++++++++++------------ src/mame/video/decbac06.cpp | 153 ++++++++++++++++++++++++++------------------ src/mame/video/decbac06.h | 60 ++++++++--------- src/mame/video/stadhero.cpp | 1 - 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); -- cgit v1.2.3