本文整理汇总了C++中bitmap_rgb32类的典型用法代码示例。如果您正苦于以下问题:C++ bitmap_rgb32类的具体用法?C++ bitmap_rgb32怎么用?C++ bitmap_rgb32使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了bitmap_rgb32类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: screen_update_sealy
UINT32 sealy_state::screen_update_sealy(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
bitmap.fill(m_palette->black_pen(), cliprect);
return 0;
}
开发者ID:Fulg,项目名称:mame,代码行数:5,代码来源:sealy.cpp
示例2: screen_update_malzak
UINT32 malzak_state::screen_update_malzak(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
const rgb_t *palette = m_palette->palette()->entry_list_raw();
int sx, sy;
int x,y;
bitmap.fill(rgb_t::black);
m_trom->screen_update(screen, bitmap, cliprect);
// playfield - not sure exactly how this works...
for (x = 0; x < 16; x++)
for (y = 0; y < 16; y++)
{
sx = ((x * 16 - 48) - m_malzak_x) * 2;
sy = ((y * 16) - m_malzak_y) * 2;
if (sx < -271*2)
sx += 512*2;
if (sx < -15*2)
sx += 256*2;
m_gfxdecode->m_gfx[0]->zoom_transpen(bitmap,cliprect, m_playfield_code[x * 16 + y], 2, 0, 0, sx, sy, 0x20000, 0x20000, 0);
}
/* update the S2636 chips */
bitmap_ind16 &s2636_0_bitmap = m_s2636_0->update(cliprect);
bitmap_ind16 &s2636_1_bitmap = m_s2636_1->update(cliprect);
/* copy the S2636 images into the main bitmap */
{
int y;
for (y = cliprect.min_y; y <= cliprect.max_y / 2; y++)
{
int x;
for (x = cliprect.min_x; x <= cliprect.max_x / 2; x++)
{
int pixel0 = s2636_0_bitmap.pix16(y, x);
int pixel1 = s2636_1_bitmap.pix16(y, x);
if (S2636_IS_PIXEL_DRAWN(pixel0)) {
bitmap.pix32(y*2, x*2) = palette[S2636_PIXEL_COLOR(pixel0)];
bitmap.pix32(y*2+1, x*2) = palette[S2636_PIXEL_COLOR(pixel0)];
bitmap.pix32(y*2, x*2+1) = palette[S2636_PIXEL_COLOR(pixel0)];
bitmap.pix32(y*2+1, x*2+1) = palette[S2636_PIXEL_COLOR(pixel0)];
}
if (S2636_IS_PIXEL_DRAWN(pixel1)) {
bitmap.pix32(y*2, x*2) = palette[S2636_PIXEL_COLOR(pixel1)];
bitmap.pix32(y*2+1, x*2) = palette[S2636_PIXEL_COLOR(pixel1)];
bitmap.pix32(y*2, x*2+1) = palette[S2636_PIXEL_COLOR(pixel1)];
bitmap.pix32(y*2+1, x*2+1) = palette[S2636_PIXEL_COLOR(pixel1)];
}
}
}
}
return 0;
}
开发者ID:libretro,项目名称:mame2014-libretro,代码行数:61,代码来源:malzak.c
示例3: ADDRESS_MAP_START
// AM_RANGE(0x80, 0x80) AM_WRITE(bl2out_w)
// AM_RANGE(0x90, 0x90) AM_WRITE(gr2out_w)
// AM_RANGE(0xa0, 0xa0) AM_WRITE(rd2out_w)
// AM_RANGE(0xb0, 0xb0) AM_WRITE(clrg2_w)
// AM_RANGE(0xc0, 0xc0) AM_WRITE(bluout_w)
// AM_RANGE(0xd0, 0xd0) AM_WRITE(grnout_w)
// AM_RANGE(0xe0, 0xe0) AM_WRITE(redout_w)
// AM_RANGE(0xf0, 0xf0) AM_WRITE(clrg1_w)
ADDRESS_MAP_END
/*
//-------------------------------------------------
// ADDRESS_MAP( grip5_mem )
//-------------------------------------------------
static ADDRESS_MAP_START( grip5_mem, AS_PROGRAM, 8, grip5_state )
AM_RANGE(0x0000, 0x3fff) AM_ROMBANK("eprom")
AM_RANGE(0x4000, 0x5fff) AM_RAM
AM_RANGE(0x8000, 0xffff) AM_RAMBANK("videoram")
ADDRESS_MAP_END
//-------------------------------------------------
// ADDRESS_MAP( grip5_io )
//-------------------------------------------------
static ADDRESS_MAP_START( grip5_io, AS_IO, 8, grip5_device )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_READWRITE(cxstb_r, cxstb_w)
AM_RANGE(0x10, 0x10) AM_WRITE(eprom_w)
AM_RANGE(0x11, 0x11) AM_WRITE(vol0_w)
// AM_RANGE(0x12, 0x12) AM_WRITE(rts_w)
AM_RANGE(0x13, 0x13) AM_WRITE(page_w)
// AM_RANGE(0x14, 0x14) AM_WRITE(str_w)
// AM_RANGE(0x15, 0x15) AM_WRITE(intl_w)
AM_RANGE(0x16, 0x16) AM_WRITE(dpage_w)
AM_RANGE(0x17, 0x17) AM_WRITE(vol1_w)
AM_RANGE(0x20, 0x2f) AM_DEVREADWRITE_LEGACY(Z80STI_TAG, z80sti_r, z80sti_w)
AM_RANGE(0x30, 0x30) AM_READWRITE(lrs_r, lrs_w)
AM_RANGE(0x40, 0x40) AM_READ(stat_r)
AM_RANGE(0x50, 0x50) AM_DEVWRITE(HD6345_TAG, hd6345_device, address_w)
AM_RANGE(0x52, 0x52) AM_DEVWRITE(HD6345_TAG, hd6345_device, register_w)
AM_RANGE(0x53, 0x53) AM_DEVREAD(HD6345_TAG, hd6345_device, register_r)
AM_RANGE(0x60, 0x60) AM_DEVWRITE_LEGACY(CENTRONICS_TAG, centronics_data_w)
AM_RANGE(0x70, 0x73) AM_DEVREADWRITE(I8255A_TAG, i8255_device, read, write)
// AM_RANGE(0x80, 0x80) AM_WRITE(xrflgs_w)
// AM_RANGE(0xc0, 0xc0) AM_WRITE(xrclrg_w)
// AM_RANGE(0xe0, 0xe0) AM_WRITE(xrclu0_w)
// AM_RANGE(0xe1, 0xe1) AM_WRITE(xrclu1_w)
// AM_RANGE(0xe2, 0xe2) AM_WRITE(xrclu2_w)
// AM_RANGE(0x80, 0x80) AM_WRITE(bl2out_w)
// AM_RANGE(0x90, 0x90) AM_WRITE(gr2out_w)
// AM_RANGE(0xa0, 0xa0) AM_WRITE(rd2out_w)
// AM_RANGE(0xb0, 0xb0) AM_WRITE(clrg2_w)
// AM_RANGE(0xc0, 0xc0) AM_WRITE(bluout_w)
// AM_RANGE(0xd0, 0xd0) AM_WRITE(grnout_w)
// AM_RANGE(0xe0, 0xe0) AM_WRITE(redout_w)
// AM_RANGE(0xf0, 0xf0) AM_WRITE(clrg1_w)
ADDRESS_MAP_END
*/
//**************************************************************************
// DEVICE CONFIGURATION
//**************************************************************************
//-------------------------------------------------
// mc6845_interface crtc_intf
//-------------------------------------------------
void grip_device::crtc_update_row(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, void *param)
{
int column, bit;
for (column = 0; column < x_count; column++)
{
UINT16 address = (m_page << 12) | (((ma + column) & 0xfff) << 3) | (ra & 0x07);
UINT8 data = m_video_ram[address];
for (bit = 0; bit < 8; bit++)
{
int x = (column * 8) + bit;
int color = m_flash ? 0 : BIT(data, bit);
bitmap.pix32(y, x) = RGB_MONOCHROME_WHITE[color];
}
}
}
开发者ID:cyberkni,项目名称:276in1JAMMA,代码行数:91,代码来源:ecb_grip.c
示例4: screen_update
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
bitmap.fill(rgb_t::black(), cliprect);
return 0;
}
开发者ID:SailorSat,项目名称:cabmame,代码行数:5,代码来源:empty.cpp
示例5:
UINT32 nubus_xceedmc30_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
UINT32 *scanline;
int x, y;
UINT8 pixels, *vram;
// first time? kick off the VBL timer
if (!m_screen)
{
m_screen = &screen;
m_timer->adjust(m_screen->time_until_pos(479, 0), 0);
}
vram = m_vram + (4*1024);
switch (m_mode)
{
case 0: // 1 bpp?
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640/8; x++)
{
pixels = vram[(y * 1024) + (BYTE4_XOR_BE(x))];
*scanline++ = m_palette[(pixels>>7)&1];
*scanline++ = m_palette[(pixels>>6)&1];
*scanline++ = m_palette[(pixels>>5)&1];
*scanline++ = m_palette[(pixels>>4)&1];
*scanline++ = m_palette[(pixels>>3)&1];
*scanline++ = m_palette[(pixels>>2)&1];
*scanline++ = m_palette[(pixels>>1)&1];
*scanline++ = m_palette[pixels&1];
}
}
break;
case 1: // 2 bpp
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640/4; x++)
{
pixels = vram[(y * 1024) + (BYTE4_XOR_BE(x))];
*scanline++ = m_palette[((pixels>>6)&3)];
*scanline++ = m_palette[((pixels>>4)&3)];
*scanline++ = m_palette[((pixels>>2)&3)];
*scanline++ = m_palette[(pixels&3)];
}
}
break;
case 2: // 4 bpp
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640/2; x++)
{
pixels = vram[(y * 1024) + (BYTE4_XOR_BE(x))];
*scanline++ = m_palette[(pixels>>4)];
*scanline++ = m_palette[(pixels&0xf)];
}
}
break;
case 3: // 8 bpp
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640; x++)
{
pixels = vram[(y * 1024) + (BYTE4_XOR_BE(x))];
*scanline++ = m_palette[pixels];
}
}
break;
case 4: // 24 bpp
{
UINT32 *vram32 = (UINT32 *)vram;
UINT32 *base;
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
base = &vram32[y * 1024];
for (x = 0; x < 640; x++)
{
*scanline++ = *base++;
}
}
}
break;
default:
fatalerror("xceedmc30: unknown video mode %d\n", m_mode);
//.........这里部分代码省略.........
开发者ID:Ilgrim,项目名称:MAMEHub,代码行数:101,代码来源:pds30_mc30.c
示例6: switch
UINT32 nubus_cb264_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
UINT32 *scanline, *base;
int x, y;
UINT8 pixels;
if (!m_cb264_vbl_disable)
{
raise_slot_irq();
}
switch (m_cb264_mode)
{
case 0: // 1 bpp
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640/8; x++)
{
pixels = m_vram[(y * 1024) + (BYTE4_XOR_BE(x))];
*scanline++ = m_palette[pixels&0x80];
*scanline++ = m_palette[(pixels<<1)&0x80];
*scanline++ = m_palette[(pixels<<2)&0x80];
*scanline++ = m_palette[(pixels<<3)&0x80];
*scanline++ = m_palette[(pixels<<4)&0x80];
*scanline++ = m_palette[(pixels<<5)&0x80];
*scanline++ = m_palette[(pixels<<6)&0x80];
*scanline++ = m_palette[(pixels<<7)&0x80];
}
}
break;
case 1: // 2 bpp (3f/7f/bf/ff)
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640/4; x++)
{
pixels = m_vram[(y * 1024) + (BYTE4_XOR_BE(x))];
*scanline++ = m_palette[pixels&0xc0];
*scanline++ = m_palette[(pixels<<2)&0xc0];
*scanline++ = m_palette[(pixels<<4)&0xc0];
*scanline++ = m_palette[(pixels<<6)&0xc0];
}
}
break;
case 2: // 4 bpp
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640/2; x++)
{
pixels = m_vram[(y * 1024) + (BYTE4_XOR_BE(x))];
*scanline++ = m_palette[pixels&0xf0];
*scanline++ = m_palette[(pixels<<4)&0xf0];
}
}
break;
case 3: // 8 bpp
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640; x++)
{
pixels = m_vram[(y * 1024) + (BYTE4_XOR_BE(x))];
*scanline++ = m_palette[pixels];
}
}
break;
case 4: // 24 bpp
case 7: // ???
{
UINT32 *vram32 = (UINT32 *)&m_vram[0];
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
base = &vram32[y * 1024];
for (x = 0; x < 640; x++)
{
*scanline++ = *base++;
}
}
}
break;
default:
fatalerror("cb264: unknown video mode %d\n", m_cb264_mode);
}
return 0;
}
开发者ID:hstampfl,项目名称:mame,代码行数:100,代码来源:nubus_cb264.c
示例7: screen_update
UINT32 archimedes_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int xstart,ystart,xend,yend;
int res_x,res_y;
int xsize,ysize;
int calc_dxs = 0,calc_dxe = 0;
const UINT8 x_step[4] = { 5, 7, 11, 19 };
/* border color */
bitmap.fill(machine().pens[0x10], cliprect);
/* define X display area through BPP mode register */
calc_dxs = (m_vidc_regs[VIDC_HDSR]*2)+x_step[m_vidc_bpp_mode & 3];
calc_dxe = (m_vidc_regs[VIDC_HDER]*2)+x_step[m_vidc_bpp_mode & 3];
/* now calculate display clip rectangle start/end areas */
xstart = (calc_dxs)-m_vidc_regs[VIDC_HBSR];
ystart = (m_vidc_regs[VIDC_VDSR])-m_vidc_regs[VIDC_VBSR];
xend = (calc_dxe)+xstart;
yend = m_vidc_regs[VIDC_VDER]+ystart;
/* disable the screen if display params are invalid */
if(xstart > xend || ystart > yend)
return 0;
xsize = calc_dxe-calc_dxs;
ysize = m_vidc_regs[VIDC_VDER]-m_vidc_regs[VIDC_VDSR];
{
int count;
int x,y,xi;
UINT8 pen;
static UINT8 *vram = machine().root_device().memregion("vram")->base();
count = (0);
switch(m_vidc_bpp_mode)
{
case 0: //1 bpp
{
for(y=0;y<ysize;y++)
{
for(x=0;x<xsize;x+=8)
{
pen = vram[count];
for(xi=0;xi<8;xi++)
{
res_x = x+xi+xstart;
res_y = (y+ystart)*(m_vidc_interlace+1);
if(m_vidc_interlace)
{
if (cliprect.contains(res_x, res_y) && (res_x) <= xend && (res_y) <= yend)
bitmap.pix32(res_y, res_x) = machine().pens[(pen>>(xi))&0x1];
if (cliprect.contains(res_x, res_y+1) && (res_x) <= xend && (res_y+1) <= yend)
bitmap.pix32(res_y+1, res_x) = machine().pens[(pen>>(xi))&0x1];
}
else
{
if (cliprect.contains(res_x, res_y) && (res_x) <= xend && (res_y) <= yend)
bitmap.pix32(res_y, res_x) = machine().pens[(pen>>(xi))&0x1];
}
}
count++;
}
}
}
break;
case 3: //8 bpp
{
for(y=0;y<ysize;y++)
{
for(x=0;x<xsize;x++)
{
pen = vram[count];
res_x = x+xstart;
res_y = (y+ystart)*(m_vidc_interlace+1);
if(m_vidc_interlace)
{
if (cliprect.contains(res_x, res_y) && (res_x) <= xend && (res_y) <= yend)
bitmap.pix32(res_y, res_x) = machine().pens[(pen&0xff)+0x100];
if (cliprect.contains(res_x, res_y) && (res_x) <= xend && (res_y+1) <= yend)
bitmap.pix32(res_y+1, res_x) = machine().pens[(pen&0xff)+0x100];
}
else
{
if (cliprect.contains(res_x, res_y) && (res_x) <= xend && (res_y) <= yend)
bitmap.pix32(res_y, res_x) = machine().pens[(pen&0xff)+0x100];
}
count++;
}
}
}
break;
}
//.........这里部分代码省略.........
开发者ID:clobber,项目名称:UME,代码行数:101,代码来源:archimds.c
示例8: mix_boogwing
/* Mix the 2 sprite planes with the already rendered tilemaps..
note, if we implement tilemap blending etc. too we'll probably have to mix those in here as well..
this is just a reimplementation of the old priority system used before conversion but to work with
the bitmaps. It could probably be simplified / improved greatly, along with the long-standing bugs
fixed, with manual mixing you have full control.
apparently priority is based on a PROM, that should be used if possible.
*/
void boogwing_state::mix_boogwing(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int y, x;
const pen_t *paldata = &m_palette->pen(0);
bitmap_ind16 *sprite_bitmap1, *sprite_bitmap2;
bitmap_ind8* priority_bitmap;
address_space &space = machine().dummy_space();
uint16_t priority = m_decocomn->priority_r(space, 0, 0xffff);
sprite_bitmap1 = &m_sprgen1->get_sprite_temp_bitmap();
sprite_bitmap2 = &m_sprgen2->get_sprite_temp_bitmap();
priority_bitmap = &screen.priority();
uint32_t* dstline;
uint16_t *srcline1, *srcline2;
uint8_t *srcpriline;
for (y=cliprect.min_y;y<=cliprect.max_y;y++)
{
srcline1=&sprite_bitmap1->pix16(y,0);
srcline2=&sprite_bitmap2->pix16(y,0);
srcpriline=&priority_bitmap->pix8(y,0);
dstline=&bitmap.pix32(y,0);
for (x=cliprect.min_x;x<=cliprect.max_x;x++)
{
uint16_t pix1 = srcline1[x];
uint16_t pix2 = srcline2[x];
/* Here we have
pix1 - raw pixel / colour / priority data from first 1sdt chip
pix2 - raw pixel / colour / priority data from first 2nd chip
*/
int pri1, pri2;
int spri1, spri2, alpha2;
alpha2 = 0xff;
// pix1 sprite vs pix2 sprite
if (pix1 & 0x400) // todo - check only in pri mode 2??
spri1 = 8;
else
spri1 = 32;
// pix1 sprite vs playfield
switch (priority)
{
case 0x01:
{
if ((pix1 & 0x600))
pri1 = 16;
else
pri1 = 64;
}
break;
default:
{
if ((pix1 & 0x600) == 0x600)
pri1 = 4;
else if ((pix1 & 0x600) == 0x400)
pri1 = 16;
else
pri1 = 64;
}
break;
}
// pix2 sprite vs pix1 sprite
if ((pix2 & 0x600) == 0x600)
spri2 = 4;
else if ((pix2 & 0x600))
spri2 = 16;
else
spri2 = 64;
// Transparency
if (pix2 & 0x100)
alpha2 = 0x80;
// pix2 sprite vs playfield
switch (priority)
{
case 0x02:
{
// Additional sprite alpha in this mode
if (pix2 & 0x400)
alpha2 = 0x80;
//.........这里部分代码省略.........
开发者ID:Robbbert,项目名称:store1,代码行数:101,代码来源:boogwing.cpp
示例9:
UINT32 zeus2_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
// Wait until configuration is completed before transfering anything
if (m_zeusbase[0x30] == 0)
return 0;
int x, y;
poly->wait();
if (machine().input().code_pressed(KEYCODE_DOWN)) { zbase += machine().input().code_pressed(KEYCODE_LSHIFT) ? 0x10 : 1; popmessage("Zbase = %f", (double)zbase); }
if (machine().input().code_pressed(KEYCODE_UP)) { zbase -= machine().input().code_pressed(KEYCODE_LSHIFT) ? 0x10 : 1; popmessage("Zbase = %f", (double)zbase); }
/* normal update case */
if (!machine().input().code_pressed(KEYCODE_W))
{
int xoffs = screen.visible_area().min_x;
for (y = cliprect.min_y; y <= cliprect.max_y; y++)
{
UINT32 *colorptr = &m_frameColor[frame_addr_from_xy(0, y, false)];
UINT32 *dest = &bitmap.pix32(y);
for (x = cliprect.min_x; x <= cliprect.max_x; x++) {
UINT32 bufX = x - xoffs;
//dest[x] = WAVERAM_READPIX(base, y, x - xoffs);
dest[x] = colorptr[bufX];
}
}
}
/* waveram drawing case */
else
{
const void *base;
if (machine().input().code_pressed(KEYCODE_DOWN)) yoffs += machine().input().code_pressed(KEYCODE_LSHIFT) ? 0x1000 : 40;
if (machine().input().code_pressed(KEYCODE_UP)) yoffs -= machine().input().code_pressed(KEYCODE_LSHIFT) ? 0x1000 : 40;
if (machine().input().code_pressed(KEYCODE_LEFT) && texel_width > 4) { texel_width >>= 1; while (machine().input().code_pressed(KEYCODE_LEFT)) ; }
if (machine().input().code_pressed(KEYCODE_RIGHT) && texel_width < 512) { texel_width <<= 1; while (machine().input().code_pressed(KEYCODE_RIGHT)) ; }
if (yoffs < 0) yoffs = 0;
if (1) {
//base = waveram0_ptr_from_expanded_addr(yoffs << 8);
//base = waveram0_ptr_from_expanded_addr(yoffs);
base = WAVERAM_BLOCK0(yoffs);
}
else
base = (void *)&m_frameColor[yoffs << 6];
int xoffs = screen.visible_area().min_x;
for (y = cliprect.min_y; y <= cliprect.max_y; y++)
{
UINT32 *dest = &bitmap.pix32(y);
for (x = cliprect.min_x; x <= cliprect.max_x; x++)
{
if (1) {
UINT8 tex = get_texel_8bit((UINT64 *)base, y, x, texel_width);
dest[x] = (tex << 16) | (tex << 8) | tex;
}
else {
dest[x] = ((UINT32 *)(base))[((y * WAVERAM1_WIDTH)) + x - xoffs];
}
}
}
popmessage("offs = %06X base = %08X", yoffs, base);
}
开发者ID:bmunger,项目名称:mame,代码行数:65,代码来源:zeus2.cpp
示例10: update
/***************************************************************************
VIDEO HARDWARE
***************************************************************************/
UINT32 generic_terminal_device::update(screen_device &device, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
UINT8 options = m_io_term_conf->read();
UINT16 cursor = m_y_pos * TERMINAL_WIDTH + m_x_pos;
UINT8 y,ra,chr,gfx;
UINT16 sy=0,ma=0,x;
UINT32 font_color;
switch (options & 0x30)
{
case 0x10:
font_color = 0x00ff7e00;
break;
case 0x20:
font_color = 0x00ffffff;
break;
default:
font_color = 0x0000ff00;
break;
}
m_framecnt++;
for (y = 0; y < TERMINAL_HEIGHT; y++)
{
for (ra = 0; ra < 10; ra++)
{
UINT32 *p = &bitmap.pix32(sy++);
for (x = ma; x < ma + TERMINAL_WIDTH; x++)
{
chr = m_buffer[x];
gfx = terminal_font[(chr<<4) | ra ];
if ((x == cursor) && (options & 1)) // at cursor position and want a cursor
{
if ((options & 2) || (ra == 9)) // block, or underline & at bottom line
{
if ((options & 4) && (m_framecnt & 8)) // want blink & time to blink
{
}
else
{
if (options & 8)
gfx ^= 0xff; // invert
else
gfx |= 0xff; // overwrite
}
}
}
/* Display a scanline of a character */
*p++ = (BIT( gfx, 7 ))?font_color:0;
*p++ = (BIT( gfx, 6 ))?font_color:0;
*p++ = (BIT( gfx, 5 ))?font_color:0;
*p++ = (BIT( gfx, 4 ))?font_color:0;
*p++ = (BIT( gfx, 3 ))?font_color:0;
*p++ = (BIT( gfx, 2 ))?font_color:0;
*p++ = (BIT( gfx, 1 ))?font_color:0;
*p++ = (BIT( gfx, 0 ))?font_color:0;
}
}
ma+=TERMINAL_WIDTH;
}
return 0;
}
开发者ID:jiangzhonghui,项目名称:mame,代码行数:68,代码来源:terminal.c
示例11: FPONE
void k053247_device::zdrawgfxzoom32GP(
bitmap_rgb32 &bitmap, const rectangle &cliprect,
UINT32 code, UINT32 color, int flipx, int flipy, int sx, int sy,
int scalex, int scaley, int alpha, int drawmode, int zcode, int pri, UINT8* gx_objzbuf, UINT8* gx_shdzbuf)
{
#define FP 19
#define FPONE (1<<FP)
#define FPHALF (1<<(FP-1))
#define FPENT 0
// inner loop
const UINT8 *src_ptr;
int src_x;
int eax, ecx;
int src_fx, src_fdx;
int shdpen;
UINT8 z8 = 0, p8 = 0;
UINT8 *ozbuf_ptr;
UINT8 *szbuf_ptr;
const pen_t *pal_base;
const pen_t *shd_base;
UINT32 *dst_ptr;
// outter loop
int src_fby, src_fdy, src_fbx;
const UINT8 *src_base;
int dst_w, dst_h;
// one-time
int nozoom, granularity;
int src_fw, src_fh;
int dst_minx, dst_maxx, dst_miny, dst_maxy;
int dst_skipx, dst_skipy, dst_x, dst_y, dst_lastx, dst_lasty;
int src_pitch, dst_pitch;
// cull illegal and transparent objects
if (!scalex || !scaley) return;
// find shadow pens and cull invisible shadows
granularity = shdpen = m_gfx->granularity();
shdpen--;
if (zcode >= 0)
{
if (drawmode == 5) { drawmode = 4; shdpen = 1; }
}
else
if (drawmode >= 4) return;
// alpha blend necessary?
if (drawmode & 2)
{
if (alpha <= 0) return;
if (alpha >= 255) drawmode &= ~2;
}
// fill internal data structure with default values
ozbuf_ptr = gx_objzbuf;
szbuf_ptr = gx_shdzbuf;
src_pitch = 16;
src_fw = 16;
src_fh = 16;
src_base = m_gfx->get_data(code % m_gfx->elements());
pal_base = palette().pens() + m_gfx->colorbase() + (color % m_gfx->colors()) * granularity;
shd_base = palette().shadow_table();
dst_ptr = &bitmap.pix32(0);
dst_pitch = bitmap.rowpixels();
dst_minx = cliprect.min_x;
dst_maxx = cliprect.max_x;
dst_miny = cliprect.min_y;
dst_maxy = cliprect.max_y;
dst_x = sx;
dst_y = sy;
// cull off-screen objects
if (dst_x > dst_maxx || dst_y > dst_maxy) return;
nozoom = (scalex == 0x10000 && scaley == 0x10000);
if (nozoom)
{
dst_h = dst_w = 16;
src_fdy = src_fdx = 1;
}
else
{
dst_w = ((scalex<<4)+0x8000)>>16;
dst_h = ((scaley<<4)+0x8000)>>16;
if (!dst_w || !dst_h) return;
src_fw <<= FP;
src_fh <<= FP;
src_fdx = src_fw / dst_w;
src_fdy = src_fh / dst_h;
}
dst_lastx = dst_x + dst_w - 1;
if (dst_lastx < dst_minx) return;
dst_lasty = dst_y + dst_h - 1;
//.........这里部分代码省略.........
开发者ID:NULUSIOS,项目名称:mame,代码行数:101,代码来源:k053246_k053247_k055673.cpp
示例12: mixnitroballlayer
void rohga_state::mixnitroballlayer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int y, x;
const pen_t *paldata = &m_palette->pen(0);
bitmap_ind16 *sprite_bitmap1, *sprite_bitmap2;
bitmap_ind8* priority_bitmap;
uint16_t priority = m_decocomn->priority_r();
sprite_bitmap1 = &m_sprgen[0]->get_sprite_temp_bitmap();
sprite_bitmap2 = &m_sprgen[1]->get_sprite_temp_bitmap();
priority_bitmap = &screen.priority();
uint32_t* dstline;
uint16_t *srcline1, *srcline2;
uint8_t *srcpriline;
for (y=cliprect.top();y<=cliprect.bottom();y++)
{
srcline1=&sprite_bitmap1->pix16(y,0);
srcline2=&sprite_bitmap2->pix16(y,0);
srcpriline=&priority_bitmap->pix8(y,0);
dstline=&bitmap.pix32(y,0);
for (x=cliprect.left();x<=cliprect.right();x++)
{
uint16_t pix1 = srcline1[x];
uint16_t pix2 = srcline2[x];
/* Here we have
pix1 - raw pixel / colour / priority data from first 1st chip
pix2 - raw pixel / colour / priority data from first 2nd chip
*/
int pri1, pri2;
// pix1 sprite vs playfield
switch (priority) // TODO : Verify this from real pcb
{
case 0x00:
default:
{
switch (pix1 & 0xe00)
{
case 0x000:
default:
pri1 = 0x200;
break;
case 0x200:
pri1 = 0x020;
break;
case 0x400:
pri1 = 0x008;
break;
case 0x600:
pri1 = 0x002;
break;
case 0x800:
pri1 = 0x100;
break;
case 0xa00:
pri1 = 0x040;
break;
case 0xc00:
pri1 = 0x004;
break;
case 0xe00:
pri1 = 0x001;
break;
}
}
break;
case 0x20:
{
switch (pix1 & 0xe00)
{
case 0x000:
default:
pri1 = 0x080;
break;
case 0x200:
pri1 = 0x004;
break;
case 0x400:
pri1 = 0x002;
break;
case 0x600:
pri1 = 0x001;
break;
case 0x800:
pri1 = 0x100;
break;
case 0xa00:
pri1 = 0x020;
break;
case 0xc00:
pri1 = 0x008;
break;
case 0xe00:
//.........这里部分代码省略.........
开发者ID:MASHinfo,项目名称:mame,代码行数:101,代码来源:rohga.cpp
示例13: screen_update_oric
ADDRESS_MAP_END
UINT32 oric_state::screen_update_oric(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
bool blink_state = m_blink_counter & 0x20;
m_blink_counter = (m_blink_counter + 1) & 0x3f;
UINT8 pattr = m_pattr;
for(int y=0; y<224; y++) {
// Line attributes and current colors
UINT8 lattr = 0;
UINT32 fgcol = m_palette->pen_color(7);
UINT32 bgcol = m_palette->pen_color(0);
UINT32 *p = &bitmap.pix32(y);
for(int x=0; x<40; x++) {
// Lookup the byte and, if needed, the pattern data
UINT8 ch, pat;
if((pattr & PATTR_HIRES) && y < 200)
ch = pat = m_ram[0xa000 + y*40 + x];
else {
ch = m_ram[0xbb80 + (y>>3)*40 + x];
int off = (lattr & LATTR_DSIZE ? y >> 1 : y ) & 7;
const UINT8 *base;
if(pattr & PATTR_HIRES)
if(lattr & LATTR_ALT)
base = m_ram + 0x9c00;
else
base = m_ram + 0x9800;
else
if(lattr & LATTR_ALT)
base = m_ram + 0xb800;
else
base = m_ram + 0xb400;
pat = base[((ch & 0x7f) << 3) | off];
}
// Handle state-chaging attributes
if(!(ch & 0x60)) {
pat = 0x00;
switch(ch & 0x18) {
case 0x00: fgcol = m_palette->pen_color(ch & 7); break;
case 0x08: lattr = ch & 7; break;
case 0x10: bgcol = m_palette->pen_color(ch & 7); break;
case 0x18: pattr = ch & 7; break;
}
}
// Pick up the colors for the pattern
UINT32 c_fgcol = fgcol;
UINT32 c_bgcol = bgcol;
// inverse video
if(ch & 0x80) {
c_bgcol = c_bgcol ^ 0xffffff;
c_fgcol = c_fgcol ^ 0xffffff;
}
// blink
if((lattr & LATTR_BLINK) && blink_state)
c_fgcol = c_bgcol;
// Draw the pattern
*p++ = pat & 0x20 ? c_fgcol : c_bgcol;
*p++ = pat & 0x10 ? c_fgcol : c_bgcol;
*p++ = pat & 0x08 ? c_fgcol : c_bgcol;
*p++ = pat & 0x04 ? c_fgcol : c_bgcol;
*p++ = pat & 0x02 ? c_fgcol : c_bgcol;
*p++ = pat & 0x01 ? c_fgcol : c_bgcol;
}
}
m_pattr = pattr;
return 0;
}
开发者ID:bradhugh,项目名称:mame,代码行数:78,代码来源:oric.cpp
示例14: if
UINT32 galpani3_state::screen_update_galpani3(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int x,y;
UINT16* src1;
UINT32* dst;
UINT16 pixdata1;
const pen_t *paldata = machine().pens;
bitmap.fill(0x0000, cliprect);
// popmessage("%02x %02x", m_grap2_0->m_framebuffer_bright2, m_grap2_1->m_framebuffer_bright2);
{
int drawy, drawx;
for (drawy=0;drawy<512;drawy++)
{
UINT16* srcline1 = m_grap2_0->m_framebuffer + ((drawy+m_grap2_0->m_framebuffer_scrolly+11)&0x1ff) * 0x200;
UINT16* srcline2 = m_grap2_1->m_framebuffer + ((drawy+m_grap2_1->m_framebuffer_scrolly+11)&0x1ff) * 0x200;
UINT16* srcline3 = m_grap2_2->m_framebuffer + ((drawy+m_grap2_2->m_framebuffer_scrolly+11)&0x1ff) * 0x200;
UINT16* priline = m_priority_buffer + ((drawy+m_priority_buffer_scrolly+11)&0x1ff) * 0x200;
for (drawx=0;drawx<512;drawx++)
{
int srcoffs1 = (drawx+m_grap2_0->m_framebuffer_scrollx+67)&0x1ff;
int srcoffs2 = (drawx+m_grap2_1->m_framebuffer_scrollx+67)&0x1ff;
int srcoffs3 = (drawx+m_grap2_2->m_framebuffer_scrollx+67)&0x1ff;
int prioffs = (drawx+m_priority_buffer_scrollx+66)&0x1ff;
UINT8 dat1 = srcline1[srcoffs1];
UINT8 dat2 = srcline2[srcoffs2];
UINT8 dat3 = srcline3[srcoffs3];
UINT8 pridat = priline[prioffs];
UINT32* dst = &bitmap.pix32(drawy, drawx);
// this is all wrong
if (pridat==0x0f) // relates to the area you've drawn over
{
if (dat1 && m_grap2_0->m_framebuffer_enable)
{
dst[0] = paldata[dat1+0x4000];
}
if (dat2 && m_grap2_1->m_framebuffer_enable)
{
dst[0] = paldata[dat2+0x4100];
}
}
else if (pridat==0xcf) // the girl
{
dst[0] = paldata[0x4300];
}
else
{
/* this isn't right, but the registers have something to do with
alpha / mixing, and bit 0x8000 of the palette is DEFINITELY alpha
enable -- see fading in intro */
if (dat1 && m_grap2_0->m_framebuffer_enable)
{
UINT16 pen = dat1+0x4000;
UINT32 pal = paldata[pen];
if (gp3_is_alpha_pen(pen))
{
int r,g,b;
r = (pal & 0x00ff0000)>>16;
g = (pal & 0x0000ff00)>>8;
b = (pal & 0x000000ff)>>0;
r = (r * m_grap2_0->m_framebuffer_bright2) / 0xff;
g = (g * m_grap2_0->m_framebuffer_bright2) / 0xff;
b = (b * m_grap2_0->m_framebuffer_bright2) / 0xff;
pal = (r & 0x000000ff)<<16;
pal |=(g & 0x000000ff)<<8;
pal |=(b & 0x000000ff)<<0;
dst[0] = pal;
}
else
{
dst[0] = pal;
}
}
if (dat2 && m_grap2_1->m_framebuffer_enable)
{
UINT16 pen = dat2+0x4100;
UINT32 pal = paldata[pen];
if (gp3_is_alpha_pen(pen))
{
//.........这里部分代码省略.........
开发者ID:antervud,项目名称:MAMEHub,代码行数:101,代码来源:galpani3.c
示例15:
UINT32 nubus_m2video_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
UINT32 *scanline;
int x, y;
UINT8 pixels, *vram;
vram = m_vram + 0x20;
switch (m_mode)
{
case 0: // 1 bpp?
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640/8; x++)
{
pixels = vram[(y * 128) + (BYTE4_XOR_BE(x))];
*scanline++ = m_palette[(pixels&0x80)];
*scanline++ = m_palette[((pixels<<1)&0x80)];
*scanline++ = m_palette[((pixels<<2)&0x80)];
*scanline++ = m_palette[((pixels<<3)&0x80)];
*scanline++ = m_palette[((pixels<<4)&0x80)];
*scanline++ = m_palette[((pixels<<5)&0x80)];
*scanline++ = m_palette[((pixels<<6)&0x80)];
*scanline++ = m_palette[((pixels<<7)&0x80)];
}
}
break;
case 1: // 2 bpp
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640/4; x++)
{
pixels = vram[(y * 256) + (BYTE4_XOR_BE(x))];
*scanline++ = m_palette[(pixels&0xc0)];
*scanline++ = m_palette[((pixels<<2)&0xc0)];
*scanline++ = m_palette[((pixels<<4)&0xc0)];
*scanline++ = m_palette[((pixels<<6)&0xc0)];
}
}
break;
case 2: // 4 bpp
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640/2; x++)
{
pixels = vram[(y * 512) + (BYTE4_XOR_BE(x))];
*scanline++ = m_palette[(pixels&0xf0)];
*scanline++ = m_palette[((pixels&0x0f)<<4)];
}
}
break;
case 3: // 8 bpp
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640; x++)
{
pixels = vram[(y * 1024) + (BYTE4_XOR_BE(x))];
*scanline++ = m_palette[pixels];
}
}
break;
default:
fatalerror("m2video: unknown video mode %d\n", m_mode);
}
return 0;
}
开发者ID:relimited,项目名称:mame,代码行数:79,代码来源:nubus_m2video.c
示例16: cursor
void bt459_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, u8 *pixel_data)
{
// initialise the blink timer
if (m_blink_start > screen.frame_number())
m_blink_start = screen.frame_number();
// compute the blink state according to the programmed duty cycle
const bool blink_state = ((screen.frame_number() - m_blink_start) & (
(m_command_0 & CR0302) == CR0302_1616 ? 0x10 :
(m_command_0 & CR0302) == CR0302_3232 ? 0x20 :
(m_command_0 & CR0302) == CR0302_6464 ? 0x40 : 0x30)) == 0;
// compute the pixel mask from the pixel read mask and blink mask/state
const u8 pixel_mask = m_pixel_read_mask & (blink_state ? 0xffU : ~m_pixel_blink_mask);
// draw visible pixel data
switch (m_command_0 & CR0100)
{
case CR0100_1BPP:
for (int y = screen.visible_area().min_y; y <= screen.visible_area().max_y; y++)
for (int x = screen.visible_area().min_x; x <= screen.visible_area().max_x; x += 8)
{
u8 data = *pixel_data++;
bitmap.pix(y, x + 7) = get_rgb(data & 0x1, pixel_mask); data >>= 1;
bitmap.pix(y, x + 6) = get_rgb(data & 0x1, pixel_mask); data >>= 1;
bitmap.pix(y, x + 5) = get_rgb(data & 0x1, pixel_mask); data >>= 1;
bitmap.pix(y, x + 4) = get_rgb(data & 0x1, pixel_mask); data >>= 1;
bitmap.pix(y, x + 3) = get_rgb(data & 0x1, pixel_mask); data >>= 1;
bitmap.pix(y, x + 2) = get_rgb(data & 0x1, pixel_mask); data >>= 1;
bitmap.pix(y, x + 1) = get_rgb(data & 0x1, pixel_mask); data >>= 1;
bitmap.pix(y, x + 0) = get_rgb(data & 0x1, pixel_mask);
}
break;
case CR0100_2BPP:
for (int y = screen.visible_area().min_y; y <= screen.visible_area().max_y; y++)
for (int x = screen.visible_area().min_x; x <= screen.visible_area().max_x; x += 4)
{
u8 data = *pixel_data++;
bitmap.pix(y, x + 3) = get_rgb(data & 0x3, pixel_mask); data >>= 2;
bitmap.pix(y, x + 2) = get_rgb(data & 0x3, pixel_mask); data >>= 2;
bitmap.pix(y, x + 1) = get_rgb(data & 0x3, pixel_mask); data >>= 2;
bitmap.pix(y, x + 0) = get_rgb(data & 0x3, pixel_mask);
}
break;
case CR0100_4BPP:
for (int y = screen.visible_area().min_y; y <= screen.visible_area().max_y; y++)
for (int x = screen.visible_area().min_x; x <= screen.visible_area().max_x; x += 2)
{
u8 data = *pixel_data++;
bitmap.pix(y, x + 1) = get_rgb(data & 0x7, pixel_mask); data >>= 4;
bitmap.pix(y, x + 0) = get_rgb(data & 0x7, pixel_mask);
}
break;
case CR0100_8BPP:
for (int y = screen.visible_area().min_y; y <= screen.visible_area().max_y; y++)
for (int x = screen.visible_area().min_x; x <= screen.visible_area().max_x; x++)
bitmap.pix(y, x) = get_rgb(*pixel_data++, pixel_mask);
break;
}
// draw cursors when visible and not blinked off
if ((m_cursor_command & (CR47 | CR46 | CR45 | CR44)) && ((m_cursor_command & CR40) == 0 || blink_state))
{
// get 64x64 bitmap and cross hair cursor plane enable
const u8 bm_cursor_enable = (m_cursor_command & (CR47 | CR46)) >> 6;
const u8 ch_cursor_enable = (m_cursor_command & (CR45 | CR44)) >> 4;
// get cross hair cursor half thickness
const int ch_thickness = (m_cursor_command & CR4241) >> 1;
/*
* The cursor (x) value to be written is calculated as follows:
*
* Cx = desired display screen (x) position + H - P
*
* where
*
* P = 37 if 1:1 input multiplexing, 52 if 4:1 input multiplexing,
* 57 if 5:1 input multiplexing
* H = number of pixels between the first rising edge of LD*
* following the falling edge of HSYNC* to active video
*
* The cursor (y) value to be written is calculated as follows:
*
* Cy = desired display screen (y) position + V - 32
*
* where
*
* V = number of scan lines from the second sync pulse during
* vertical blanking to active video
*
* Values from $0FC0 (-64) to $0FBF (+4031) may be loaded into the
* cursor (y) register. The negative values ($0FC0 to $0FFF) are used
* in situations where V < 32, and the cursor must be moved off the
//.........这里部分代码省略.........
开发者ID:qwijibo,项目名称:mame,代码行数:101,代码来源:bt459.cpp
示例17: memregion
UINT32 aristmk6_state::screen_update_aristmk6(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int x,y,count;
const UINT8 *blit_ram = memregion("maincpu")->base();
if(machine().input().code_pressed(KEYCODE_Z))
m_test_x++;
if(machine().input().code_pressed(KEYCODE_X))
m_test_x--;
if(machine().input().code_pressed(KEYCODE_A))
m_test_y++;
if(machine().input().code_pressed(KEYCODE_S))
m_test_y--;
if(machine().input().code_pressed(KEYCODE_Q))
m_start_offs+=0x2000;
if(machine().input().code_pressed(KEYCODE_W))
m_start_offs-=0x2000;
if(machine().input().code_pressed(KEYCODE_E))
m_start_offs++;
if(machine().input().code_pressed(KEYCODE_R))
m_start_offs--;
if(machine().input().code_pressed_once(KEYCODE_L))
m_type^=1;
popmessage("%d %d %04x %d",m_test_x,m_test_y,m_start_offs,m_type);
bitmap.fill(get_black_pen(machine()), cliprect);
count = (m_start_offs);
for(y=0;y<m_test_y;y++)
{
for(x=0;x<m_test_x;x++)
{
if(m_type)
{
UINT16 vram;
int r,g,b;
vram = blit_ram[count+0] | blit_ram[count+1]<<8;
r = (vram & 0x001f)>>0;
g = (vram & 0x07e0)>>5;
b = (vram & 0xf800)>>11;
r = (r << 3) | (r & 0x7);
g = (g << 2) | (g & 3);
b = (b << 3) | (b & 0x7);
if(cliprect.contains(x, y))
bitmap.pix32(y, x) = r | g<<8 | b<<16;
count+=2;
}
else
{
UINT8 color;
color = blit_ram[count];
if(cliprect.contains(x, y))
bitmap.pix32(y, x) = machine().pens[color];
count++;
}
}
}
开发者ID:coinhelper,项目名称:jsmess,代码行数:76,代码来源:aristmk6.c
示例18:
UINT32 nubus_cb264se30_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
UINT32 *scanline;
int x, y;
UINT8 pixels, *vram;
vram = &m_vram[8*1024];
switch (m_mode)
{
case 0: // 1 bpp?
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640/8; x++)
{
pixels = vram[(y * 1024) + (BYTE4_XOR_BE(x))];
*scanline++ = m_palette[(pixels&0x80)];
*scanline++ = m_palette[((pixels<<1)&0x80)];
*scanline++ = m_palette[((pixels<<2)&0x80)];
*scanline++ = m_palette[((pixels<<3)&0x80)];
*scanline++ = m_palette[((pixels<<4)&0x80)];
*scanline++ = m_palette[((pixels<<5)&0x80)];
*scanline++ = m_palette[((pixels<<6)&0x80)];
*scanline++ = m_palette[((pixels<<7)&0x80)];
}
}
break;
case 1: // 2 bpp
for (y = 0; y < 480; y++)
{
scanline = &bitmap.pix32(y);
for (x = 0; x < 640/4; x++)
{
pixels =
|
请发表评论