diff options
Diffstat (limited to 'src/mame/video/suprnova.cpp')
-rw-r--r-- | src/mame/video/suprnova.cpp | 127 |
1 files changed, 54 insertions, 73 deletions
diff --git a/src/mame/video/suprnova.cpp b/src/mame/video/suprnova.cpp index 802c622ab41..a38456e3f84 100644 --- a/src/mame/video/suprnova.cpp +++ b/src/mame/video/suprnova.cpp @@ -11,21 +11,12 @@ void skns_state::draw_roz(bitmap_ind16 &bitmap, bitmap_ind8& bitmapflags, const rectangle &cliprect, tilemap_t *tmap, uint32_t startx, uint32_t starty, int incxx, int incxy, int incyx, int incyy, int wraparound, int columnscroll, uint32_t* scrollram) { //bitmap_ind16 *destbitmap = bitmap; - bitmap_ind16 &srcbitmap = tmap->pixmap(); - bitmap_ind8 &srcbitmapflags = tmap->flagsmap(); + const bitmap_ind16 &srcbitmap = tmap->pixmap(); + const bitmap_ind8 &srcbitmapflags = tmap->flagsmap(); const int xmask = srcbitmap.width()-1; const int ymask = srcbitmap.height()-1; const int widthshifted = srcbitmap.width() << 16; const int heightshifted = srcbitmap.height() << 16; - uint32_t cx; - uint32_t cy; - int x; - int sx; - int sy; - int ex; - int ey; - uint16_t *dest; - uint8_t* destflags; // uint8_t *pri; //const uint16_t *src; //const uint8_t *maskptr; @@ -36,55 +27,53 @@ void skns_state::draw_roz(bitmap_ind16 &bitmap, bitmap_ind8& bitmapflags, const starty += cliprect.min_x * incxy + cliprect.min_y * incyy; /* extract start/end points */ - sx = cliprect.min_x; - sy = cliprect.min_y; - ex = cliprect.max_x; - ey = cliprect.max_y; + int sx = cliprect.min_x; + int sy = cliprect.min_y; + int ex = cliprect.max_x; + int ey = cliprect.max_y; + /* loop over rows */ + while (sy <= ey) { - /* loop over rows */ - while (sy <= ey) - { - /* initialize X counters */ - x = sx; - cx = startx; - cy = starty; + /* initialize X counters */ + int x = sx; + uint32_t cx = startx; + uint32_t cy = starty; - /* get dest and priority pointers */ - dest = &bitmap.pix16(sy, sx); - destflags = &bitmapflags.pix8(sy, sx); + /* get dest and priority pointers */ + uint16_t *dest = &bitmap.pix(sy, sx); + uint8_t *destflags = &bitmapflags.pix(sy, sx); - /* loop over columns */ - while (x <= ex) + /* loop over columns */ + while (x <= ex) + { + if ((wraparound) || (cx < widthshifted && cy < heightshifted)) // not sure how this will cope with no wraparound, but row/col scroll.. { - if ((wraparound) || (cx < widthshifted && cy < heightshifted)) // not sure how this will cope with no wraparound, but row/col scroll.. + if (columnscroll) { - if (columnscroll) - { - dest[0] = srcbitmap.pix16(((cy >> 16) - scrollram[(cx>>16)&0x3ff]) & ymask, (cx >> 16) & xmask); - destflags[0] = srcbitmapflags.pix8(((cy >> 16) - scrollram[(cx>>16)&0x3ff]) & ymask, (cx >> 16) & xmask); - } - else - { - dest[0] = srcbitmap.pix16((cy >> 16) & ymask, ((cx >> 16) - scrollram[(cy>>16)&0x3ff]) & xmask); - destflags[0] = srcbitmapflags.pix8((cy >> 16) & ymask, ((cx >> 16) - scrollram[(cy>>16)&0x3ff]) & xmask); - } + dest[0] = srcbitmap.pix(((cy >> 16) - scrollram[(cx>>16)&0x3ff]) & ymask, (cx >> 16) & xmask); + destflags[0] = srcbitmapflags.pix(((cy >> 16) - scrollram[(cx>>16)&0x3ff]) & ymask, (cx >> 16) & xmask); + } + else + { + dest[0] = srcbitmap.pix((cy >> 16) & ymask, ((cx >> 16) - scrollram[(cy>>16)&0x3ff]) & xmask); + destflags[0] = srcbitmapflags.pix((cy >> 16) & ymask, ((cx >> 16) - scrollram[(cy>>16)&0x3ff]) & xmask); } - - /* advance in X */ - cx += incxx; - cy += incxy; - x++; - dest++; - destflags++; -// pri++; } - /* advance in Y */ - startx += incyx; - starty += incyy; - sy++; + /* advance in X */ + cx += incxx; + cy += incxy; + x++; + dest++; + destflags++; +// pri++; } + + /* advance in Y */ + startx += incyx; + starty += incyy; + sy++; } } @@ -467,12 +456,10 @@ uint32_t skns_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, m_tilemap_bitmapflags_higher.fill(0); { - int supernova_pri_a; - int supernova_pri_b; int tran = 0; - supernova_pri_a = (m_v3_regs[0x10/4] & 0x0002)>>1; - supernova_pri_b = (m_v3_regs[0x34/4] & 0x0002)>>1; + int supernova_pri_a = (m_v3_regs[0x10/4] & 0x0002)>>1; + int supernova_pri_b = (m_v3_regs[0x34/4] & 0x0002)>>1; //popmessage("pri %d %d\n", supernova_pri_a, supernova_pri_b); @@ -481,39 +468,32 @@ uint32_t skns_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, draw_a(m_tilemap_bitmap_higher,m_tilemap_bitmapflags_higher,cliprect,tran);// tran = 1; { - int x,y; - uint8_t* srcflags, *src2flags; - uint16_t* src, *src2, *src3; - uint32_t* dst; - uint16_t pri, pri2, pri3; uint16_t bgpri; - const pen_t *clut = &m_palette->pen(0); + pen_t const *const clut = &m_palette->pen(0); // int drawpri; - for (y=cliprect.min_y;y<=cliprect.max_y;y++) + for (int y=cliprect.min_y;y<=cliprect.max_y;y++) { - src = &m_tilemap_bitmap_lower.pix16(y); - srcflags = &m_tilemap_bitmapflags_lower.pix8(y); + uint16_t const *const src = &m_tilemap_bitmap_lower.pix(y); + uint8_t const *const srcflags = &m_tilemap_bitmapflags_lower.pix(y); - src2 = &m_tilemap_bitmap_higher.pix16(y); - src2flags = &m_tilemap_bitmapflags_higher.pix8(y); + uint16_t const *const src2 = &m_tilemap_bitmap_higher.pix(y); + uint8_t const *const src2flags = &m_tilemap_bitmapflags_higher.pix(y); - src3 = &m_sprite_bitmap.pix16(y); + uint16_t const *const src3 = &m_sprite_bitmap.pix(y); - dst = &bitmap.pix32(y); + uint32_t *const dst = &bitmap.pix(y); - for (x=cliprect.min_x;x<=cliprect.max_x;x++) + for (int x=cliprect.min_x;x<=cliprect.max_x;x++) { uint16_t pendata = src[x]&0x7fff; uint16_t pendata2 = src2[x]&0x7fff; uint16_t bgpendata; uint16_t pendata3 = m_alt_enable_sprites ? src3[x]&0x3fff : 0; - uint32_t coldat; - - pri = ((srcflags[x] & 0x07)<<1) | (supernova_pri_b); - pri2= ((src2flags[x] & 0x07)<<1) | (supernova_pri_a); - pri3 = ((src3[x]&0xc000)>>12)+3; + uint16_t pri = ((srcflags[x] & 0x07)<<1) | (supernova_pri_b); + uint16_t pri2= ((src2flags[x] & 0x07)<<1) | (supernova_pri_a); + uint16_t pri3 = ((src3[x]&0xc000)>>12)+3; // work out which layers bg pixel has the higher priority // note, can the bg layers be blended?? sarukani uses an alpha pen for @@ -560,6 +540,7 @@ uint32_t skns_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, } // if the sprites are higher than the bg pixel + uint32_t coldat; if (pri3 > bgpri) { if (pendata3&0xff) |