mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
x68k: make the bitmaps auto resize (nw)
This commit is contained in:
parent
f9c84b9c78
commit
134edd6d14
@ -113,8 +113,8 @@ public:
|
||||
std::vector<UINT16> m_gvram;
|
||||
std::vector<UINT16> m_spritereg;
|
||||
|
||||
std::unique_ptr<bitmap_ind16> m_pcgbitmap;
|
||||
std::unique_ptr<bitmap_ind16> m_gfxbitmap;
|
||||
bitmap_ind16 m_pcgbitmap;
|
||||
bitmap_ind16 m_gfxbitmap;
|
||||
|
||||
void floppy_load_unload(bool load, floppy_image_device *dev);
|
||||
int floppy_load(floppy_image_device *dev);
|
||||
|
@ -900,11 +900,11 @@ void x68k_state::x68k_draw_gfx(bitmap_rgb32 &bitmap,rectangle cliprect)
|
||||
if(m_crtc.reg[20] & 0x0800) // if graphic layers are set to buffer, then they aren't visible
|
||||
return;
|
||||
|
||||
m_gfxbitmap->fill(0, cliprect);
|
||||
m_gfxbitmap.fill(0, cliprect);
|
||||
|
||||
for(priority=3;priority>=0;priority--)
|
||||
{
|
||||
gfxblend = x68k_draw_gfx_scanline(*m_gfxbitmap,cliprect,priority);
|
||||
gfxblend = x68k_draw_gfx_scanline(m_gfxbitmap,cliprect,priority);
|
||||
}
|
||||
|
||||
for(scanline=cliprect.min_y;scanline<=cliprect.max_y;scanline++)
|
||||
@ -915,13 +915,13 @@ void x68k_state::x68k_draw_gfx(bitmap_rgb32 &bitmap,rectangle cliprect)
|
||||
{
|
||||
if((m_video.reg[0] & 0x03) == 3)
|
||||
{
|
||||
colour = m_gfxbitmap->pix16(scanline, pixel);
|
||||
colour = m_gfxbitmap.pix16(scanline, pixel);
|
||||
if(colour || (m_video.gfx_pri == 2))
|
||||
bitmap.pix32(scanline, pixel) = GGGGGRRRRRBBBBBI_decoder(colour);
|
||||
}
|
||||
else if(gfxblend)
|
||||
{
|
||||
colour = m_gfxbitmap->pix16(scanline, pixel);
|
||||
colour = m_gfxbitmap.pix16(scanline, pixel);
|
||||
if(((m_video.reg[2] & 0x1900) == 0x1900) && (m_video.gfx_pri != 2) && (colour & 1))
|
||||
blend = true;
|
||||
else
|
||||
@ -936,7 +936,7 @@ void x68k_state::x68k_draw_gfx(bitmap_rgb32 &bitmap,rectangle cliprect)
|
||||
}
|
||||
else
|
||||
{
|
||||
colour = m_gfxbitmap->pix16(scanline, pixel) & 0xff;
|
||||
colour = m_gfxbitmap.pix16(scanline, pixel) & 0xff;
|
||||
if(((m_video.reg[2] & 0x1900) == 0x1900) && (m_video.gfx_pri != 2) && (colour & 1))
|
||||
{
|
||||
blend = true;
|
||||
@ -1101,11 +1101,11 @@ VIDEO_START_MEMBER(x68k_state,x68000)
|
||||
m_bg0_16->set_transparent_pen(0);
|
||||
m_bg1_16->set_transparent_pen(0);
|
||||
|
||||
m_pcgbitmap = std::make_unique<bitmap_ind16>(1024, 1024);
|
||||
m_pcgbitmap->fill(0);
|
||||
m_screen->register_screen_bitmap(m_pcgbitmap);
|
||||
m_pcgbitmap.fill(0);
|
||||
|
||||
m_gfxbitmap = std::make_unique<bitmap_ind16>(1024, 1024);
|
||||
m_gfxbitmap->fill(0);
|
||||
m_screen->register_screen_bitmap(m_gfxbitmap);
|
||||
m_gfxbitmap.fill(0);
|
||||
|
||||
// m_scanline_timer->adjust(attotime::zero, 0, attotime::from_hz(55.45)/568);
|
||||
}
|
||||
@ -1176,46 +1176,46 @@ UINT32 x68k_state::screen_update_x68000(screen_device &screen, bitmap_rgb32 &bit
|
||||
// Sprite / BG Tiles
|
||||
if(priority == m_video.sprite_pri /*&& (m_spritereg[0x404] & 0x0200)*/ && (m_video.reg[2] & 0x0040))
|
||||
{
|
||||
m_pcgbitmap->fill(0, rect);
|
||||
x68k_draw_sprites(*m_pcgbitmap,1,rect);
|
||||
m_pcgbitmap.fill(0, rect);
|
||||
x68k_draw_sprites(m_pcgbitmap,1,rect);
|
||||
if((m_spritereg[0x404] & 0x0008))
|
||||
{
|
||||
if((m_spritereg[0x404] & 0x0030) == 0x10) // BG1 TXSEL
|
||||
{
|
||||
x68k_bg0->set_scrollx(0,(m_spritereg[0x402] - m_crtc.hbegin - m_crtc.bg_hshift) & 0x3ff);
|
||||
x68k_bg0->set_scrolly(0,(m_spritereg[0x403] - m_crtc.vbegin) & 0x3ff);
|
||||
x68k_bg0->draw(screen, *m_pcgbitmap,rect,0,0);
|
||||
x68k_bg0->draw(screen, m_pcgbitmap,rect,0,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
x68k_bg1->set_scrollx(0,(m_spritereg[0x402] - m_crtc.hbegin - m_crtc.bg_hshift) & 0x3ff);
|
||||
x68k_bg1->set_scrolly(0,(m_spritereg[0x403] - m_crtc.vbegin) & 0x3ff);
|
||||
x68k_bg1->draw(screen, *m_pcgbitmap,rect,0,0);
|
||||
x68k_bg1->draw(screen, m_pcgbitmap,rect,0,0);
|
||||
}
|
||||
}
|
||||
x68k_draw_sprites(*m_pcgbitmap,2,rect);
|
||||
x68k_draw_sprites(m_pcgbitmap,2,rect);
|
||||
if((m_spritereg[0x404] & 0x0001))
|
||||
{
|
||||
if((m_spritereg[0x404] & 0x0006) == 0x02) // BG0 TXSEL
|
||||
{
|
||||
x68k_bg0->set_scrollx(0,(m_spritereg[0x400] - m_crtc.hbegin - m_crtc.bg_hshift) & 0x3ff);
|
||||
x68k_bg0->set_scrolly(0,(m_spritereg[0x401] - m_crtc.vbegin) & 0x3ff);
|
||||
x68k_bg0->draw(screen, *m_pcgbitmap,rect,0,0);
|
||||
x68k_bg0->draw(screen, m_pcgbitmap,rect,0,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
x68k_bg1->set_scrollx(0,(m_spritereg[0x400] - m_crtc.hbegin - m_crtc.bg_hshift) & 0x3ff);
|
||||
x68k_bg1->set_scrolly(0,(m_spritereg[0x401] - m_crtc.vbegin) & 0x3ff);
|
||||
x68k_bg1->draw(screen, *m_pcgbitmap,rect,0,0);
|
||||
x68k_bg1->draw(screen, m_pcgbitmap,rect,0,0);
|
||||
}
|
||||
}
|
||||
x68k_draw_sprites(*m_pcgbitmap,3,rect);
|
||||
x68k_draw_sprites(m_pcgbitmap,3,rect);
|
||||
|
||||
for(scanline=rect.min_y;scanline<=rect.max_y;scanline++)
|
||||
{
|
||||
for(pixel=m_crtc.hbegin;pixel<=m_crtc.hend;pixel++)
|
||||
{
|
||||
UINT8 colour = m_pcgbitmap->pix16(scanline, pixel) & 0xff;
|
||||
UINT8 colour = m_pcgbitmap.pix16(scanline, pixel) & 0xff;
|
||||
if((colour && (m_pcgpalette->pen(colour) & 0xffffff)) || ((m_video.reg[1] & 0x3000) == 0x2000))
|
||||
bitmap.pix32(scanline, pixel) = m_pcgpalette->pen(colour);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user