diff options
Diffstat (limited to 'src/mame/drivers/wheelfir.cpp')
-rw-r--r-- | src/mame/drivers/wheelfir.cpp | 244 |
1 files changed, 116 insertions, 128 deletions
diff --git a/src/mame/drivers/wheelfir.cpp b/src/mame/drivers/wheelfir.cpp index 0a462c9f937..2443bdf0bf9 100644 --- a/src/mame/drivers/wheelfir.cpp +++ b/src/mame/drivers/wheelfir.cpp @@ -276,9 +276,6 @@ void wheelfir_state::wheelfir_blit_w(offs_t offset, uint16_t data, uint16_t mem_ if(!ACCESSING_BITS_8_15 && offset==0x6) //LSB only! { - int x,y; - - int direct_width=m_direct_write_x1-m_direct_write_x0+1; int direct_height=m_direct_write_y1-m_direct_write_y0+1; @@ -286,203 +283,197 @@ void wheelfir_state::wheelfir_blit_w(offs_t offset, uint16_t data, uint16_t mem_ if(direct_width>0 && direct_height>0) { - x= m_direct_write_idx % direct_width; - y = (m_direct_write_idx / direct_width) %direct_height; + int x = m_direct_write_idx % direct_width; + int y = (m_direct_write_idx / direct_width) % direct_height; x+=m_direct_write_x0; y+=m_direct_write_y0; if(x<512 && y <512) { - m_tmp_bitmap[LAYER_BG]->pix16(y, x) = sixdat; + m_tmp_bitmap[LAYER_BG]->pix(y, x) = sixdat; } } ++m_direct_write_idx; return; - } if(offset==0xf && data==0xffff) { m_maincpu->set_input_line(1, HOLD_LINE); - { - uint8_t *rom = memregion("gfx1")->base(); + uint8_t const *const rom = memregion("gfx1")->base(); - int width = m_screen->width(); - int height = m_screen->height(); + int width = m_screen->width(); + int height = m_screen->height(); - int src_x0=(m_blitter_data[0]>>8)+((m_blitter_data[6]&0x100)?256:0); - int src_y0=(m_blitter_data[2]>>8)+((m_blitter_data[6]&0x200)?256:0); + int src_x0=(m_blitter_data[0]>>8)+((m_blitter_data[6]&0x100)?256:0); + int src_y0=(m_blitter_data[2]>>8)+((m_blitter_data[6]&0x200)?256:0); - int dst_x0=(m_blitter_data[0]&0xff)+((m_blitter_data[7]&0x40)?256:0); - int dst_y0=(m_blitter_data[2]&0xff)+((m_blitter_data[7]&0x80)?256:0); + int dst_x0=(m_blitter_data[0]&0xff)+((m_blitter_data[7]&0x40)?256:0); + int dst_y0=(m_blitter_data[2]&0xff)+((m_blitter_data[7]&0x80)?256:0); - int dst_x1=(m_blitter_data[1]&0xff)+((m_blitter_data[9]&4)?256:0); - int dst_y1=(m_blitter_data[3]&0xff)+((m_blitter_data[9]&8)?256:0); + int dst_x1=(m_blitter_data[1]&0xff)+((m_blitter_data[9]&4)?256:0); + int dst_y1=(m_blitter_data[3]&0xff)+((m_blitter_data[9]&8)?256:0); - int x_dst_step=(m_blitter_data[7]&0x1)?1:-1; - int y_dst_step=(m_blitter_data[7]&0x2)?1:-1; + int x_dst_step=(m_blitter_data[7]&0x1)?1:-1; + int y_dst_step=(m_blitter_data[7]&0x2)?1:-1; - int x_src_step=(m_blitter_data[8]&0x4000)?1:-1; - int y_src_step=(m_blitter_data[8]&0x8000)?1:-1; + int x_src_step=(m_blitter_data[8]&0x4000)?1:-1; + int y_src_step=(m_blitter_data[8]&0x8000)?1:-1; - int page=((m_blitter_data[6])>>10)*0x40000; + int page=((m_blitter_data[6])>>10)*0x40000; - if(page>=0x400000) /* src set to unav. page before direct write to the framebuffer */ - { - m_direct_write_x0=dst_x0; - m_direct_write_x1=dst_x1; - m_direct_write_y0=dst_y0; - m_direct_write_y1=dst_y1; - m_direct_write_idx=0; + if(page>=0x400000) /* src set to unav. page before direct write to the framebuffer */ + { + m_direct_write_x0=dst_x0; + m_direct_write_x1=dst_x1; + m_direct_write_y0=dst_y0; + m_direct_write_y1=dst_y1; + m_direct_write_idx=0; + } + if(x_dst_step<0) + { + if(dst_x0<=dst_x1) + { + return; } - if(x_dst_step<0) + } + else + { + if(dst_x0>=dst_x1) { - if(dst_x0<=dst_x1) - { - return; - } - + return; } - else - { - if(dst_x0>=dst_x1) - { - return; - } - } + } - if(y_dst_step<0) + if(y_dst_step<0) + { + if(dst_y0<=dst_y1) { - if(dst_y0<=dst_y1) - { - return; - } + return; } - else + } + else + { + if(dst_y0>=dst_y1) { - if(dst_y0>=dst_y1) - { - return; - } - + return; } + } - //additional checks - - int d1, d2, hflag, dflag, index; - d1=((m_blitter_data[0x0a]&0x1f00)>>8); + //additional checks - d2=((m_blitter_data[0x0b]&0x1f00)>>8); + int d1, d2, hflag, dflag, index; + d1=((m_blitter_data[0x0a]&0x1f00)>>8); - d1|=((m_blitter_data[0x8]&0x100)>>3); - d2|=((m_blitter_data[0x8]&0x400)>>5); - hflag=(m_blitter_data[0x9]&0x1)?1:0; - dflag=(m_blitter_data[0x8]&0x1000)?1:0; - index=d1|(d2<<6)|(hflag<<12)|(dflag<<13); + d2=((m_blitter_data[0x0b]&0x1f00)>>8); - float scale_x=get_scale(index); + d1|=((m_blitter_data[0x8]&0x100)>>3); + d2|=((m_blitter_data[0x8]&0x400)>>5); + hflag=(m_blitter_data[0x9]&0x1)?1:0; + dflag=(m_blitter_data[0x8]&0x1000)?1:0; + index=d1|(d2<<6)|(hflag<<12)|(dflag<<13); - d1=((m_blitter_data[0x0b]&0xc000)>>14) | - ((m_blitter_data[0x0c]&0xc000)>>12) | - ((m_blitter_data[0x0a]&0x4000)>>10); + const float scale_x=get_scale(index); - d2=((m_blitter_data[0x0c]&0x1f00)>>8); + d1=((m_blitter_data[0x0b]&0xc000)>>14) | + ((m_blitter_data[0x0c]&0xc000)>>12) | + ((m_blitter_data[0x0a]&0x4000)>>10); - d1|=((m_blitter_data[0x8]&0x200)>>4); - d2|=((m_blitter_data[0x8]&0x800)>>6); + d2=((m_blitter_data[0x0c]&0x1f00)>>8); - hflag=(m_blitter_data[0x9]&0x2)?1:0; - dflag=(m_blitter_data[0x8]&0x2000)?1:0; - index=d1|(d2<<6)|(hflag<<12)|(dflag<<13); + d1|=((m_blitter_data[0x8]&0x200)>>4); + d2|=((m_blitter_data[0x8]&0x800)>>6); - float scale_y=get_scale(index); + hflag=(m_blitter_data[0x9]&0x2)?1:0; + dflag=(m_blitter_data[0x8]&0x2000)?1:0; + index=d1|(d2<<6)|(hflag<<12)|(dflag<<13); + const float scale_y=get_scale(index); - if(scale_x==0 || scale_y==0) return; + if(scale_x==0 || scale_y==0) return; - float scale_x_step=100.f/scale_x; - float scale_y_step=100.f/scale_y; + const float scale_x_step=100.f/scale_x; + const float scale_y_step=100.f/scale_y; - int x,y; - float idx_x,idx_y; - int vpage=LAYER_FG; - if(m_blitter_data[0x7]&0x10) - { - vpage=LAYER_BG; + int vpage=LAYER_FG; + if(m_blitter_data[0x7]&0x10) + { + vpage=LAYER_BG; /* - printf("%s bg -> %d %d %d %d %d %d @ %x\n",machine().describe_context().c_str(), dst_x0,dst_y0, dst_x1,dst_y1, dst_x1-dst_x0, dst_y1-dst_y0); + printf("%s bg -> %d %d %d %d %d %d @ %x\n",machine().describe_context().c_str(), dst_x0,dst_y0, dst_x1,dst_y1, dst_x1-dst_x0, dst_y1-dst_y0); - for(int i=0;i<16;++i) - { - printf("%x = %.4x\n",i,m_blitter_data[i]); - } + for(int i=0;i<16;++i) + { + printf("%x = %.4x\n",i,m_blitter_data[i]); + } - printf("\n"); + printf("\n"); */ - } + } - bool endx=false; - bool endy=false; + bool endx=false; + bool endy=false; - if(m_blitter_data[0x7]&0x0c) - { - //??? - } + if(m_blitter_data[0x7]&0x0c) + { + //??? + } - for( x=dst_x0, idx_x=0 ; !endx;x+=x_dst_step, idx_x+=scale_x_step ) + float idx_x = 0; + for(int x=dst_x0; !endx; x+=x_dst_step, idx_x+=scale_x_step) + { + endy=false; + float idx_y = 0; + for(int y=dst_y0; !endy; y+=y_dst_step, idx_y+=scale_y_step) { - endy=false; - for( y=dst_y0, idx_y=0 ; !endy;y+=y_dst_step, idx_y+=scale_y_step) - { - endx=(x==dst_x1); - endy=(y==dst_y1); + endx=(x==dst_x1); + endy=(y==dst_y1); - int xx=src_x0+x_src_step*idx_x; - int yy=src_y0+y_src_step*idx_y; + int xx=src_x0+x_src_step*idx_x; + int yy=src_y0+y_src_step*idx_y; - int address=page+yy*512+xx; + int address=page+yy*512+xx; - int pix = rom[address&(0x1000000-1)]; + int pix = rom[address&(0x1000000-1)]; - int screen_x=x; - int screen_y=y; + int screen_x=x; + int screen_y=y; - if(page>=0x400000) + if(page>=0x400000) + { + //hack for clear + if(screen_x >0 && screen_y >0 && screen_x < width && screen_y <height) { - //hack for clear - if(screen_x >0 && screen_y >0 && screen_x < width && screen_y <height) - { - // m_tmp_bitmap[vpage]->pix16(screen_y , screen_x ) =0; - } + // m_tmp_bitmap[vpage]->pix(screen_y , screen_x ) =0; } - else - { - if (vpage == LAYER_FG) screen_y&=0xff; + } + else + { + if (vpage == LAYER_FG) screen_y&=0xff; - if(pix && screen_x >0 && screen_y >0 && screen_x < width && screen_y <height) - { - m_tmp_bitmap[vpage]->pix16(screen_y , screen_x ) = pix; - } + if(pix && screen_x >0 && screen_y >0 && screen_x < width && screen_y <height) + { + m_tmp_bitmap[vpage]->pix(screen_y, screen_x) = pix; } } } @@ -502,22 +493,19 @@ uint32_t wheelfir_state::screen_update_wheelfir(screen_device &screen, bitmap_in for(int y=cliprect.min_y; y < cliprect.max_y; y++) { - uint16_t *source = &m_tmp_bitmap[LAYER_BG]->pix16(( (m_scanlines[y].y)&511)); - uint16_t *dest = &bitmap.pix16(y); + uint16_t const *const source = &m_tmp_bitmap[LAYER_BG]->pix(( (m_scanlines[y].y)&511)); + uint16_t *const dest = &bitmap.pix(y); for (int x = cliprect.min_x; x < cliprect.max_x; x++) { - dest[x] = source[ (x+(m_scanlines[y].x)) &511]; + dest[x] = source[(x + m_scanlines[y].x) & 511]; } } copybitmap_trans(bitmap, *m_tmp_bitmap[LAYER_FG], 0, 0, 0, 0, cliprect, 0); /* - { - m_tmp_bitmap[LAYER_BG]->fill(0, screen.visible_area()); - - } + m_tmp_bitmap[LAYER_BG]->fill(0, screen.visible_area()); */ return 0; |