summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/suprnova.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/suprnova.cpp')
-rw-r--r--src/mame/video/suprnova.cpp127
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)