void nbmj8900_state::nbmj8900_gfxdraw() { unsigned char *GFX = memregion("gfx")->base(); int x, y; int dx1, dx2, dy1, dy2; int startx, starty; int sizex, sizey; int skipx, skipy; int ctrx, ctry; unsigned char color, color1, color2; int gfxaddr; m_nb1413m3->m_busyctr = 0; startx = m_blitter_destx + m_blitter_sizex; starty = m_blitter_desty + m_blitter_sizey; if (m_blitter_direction_x) { sizex = m_blitter_sizex ^ 0xff; skipx = 1; } else { sizex = m_blitter_sizex; skipx = -1; } if (m_blitter_direction_y) { sizey = m_blitter_sizey ^ 0xff; skipy = 1; } else { sizey = m_blitter_sizey; skipy = -1; } gfxaddr = (m_gfxrom << 17) + (m_blitter_src_addr << 1); for (y = starty, ctry = sizey; ctry >= 0; y += skipy, ctry--) { for (x = startx, ctrx = sizex; ctrx >= 0; x += skipx, ctrx--) { if ((gfxaddr > (memregion("gfx")->bytes() - 1))) { #ifdef MAME_DEBUG popmessage("GFXROM ADDRESS OVER!!"); #endif gfxaddr &= (memregion("gfx")->bytes() - 1); } color = GFX[gfxaddr++]; // for hanamomo if ((m_nb1413m3->m_nb1413m3_type == NB1413M3_HANAMOMO) && ((gfxaddr >= 0x20000) && (gfxaddr < 0x28000))) { color |= ((color & 0x0f) << 4); } dx1 = (2 * x + 0) & 0x1ff; dx2 = (2 * x + 1) & 0x1ff; if (m_gfxdraw_mode) { // 2 layer type dy1 = y & 0xff; dy2 = (y + m_scrolly) & 0xff; } else { // 1 layer type dy1 = (y + m_scrolly) & 0xff; dy2 = 0; } if (!m_flipscreen) { dx1 ^= 0x1ff; dx2 ^= 0x1ff; dy1 ^= 0xff; dy2 ^= 0xff; } if (m_blitter_direction_x) { // flip color1 = (color & 0x0f) >> 0; color2 = (color & 0xf0) >> 4; } else { // normal color1 = (color & 0xf0) >> 4; color2 = (color & 0x0f) >> 0; } color1 = m_clut[((m_clutsel & 0x7f) << 4) + color1]; color2 = m_clut[((m_clutsel & 0x7f) << 4) + color2]; if ((!m_gfxdraw_mode) || (m_vram & 0x01)) { // layer 1 if (color1 != 0xff) { m_videoram0[(dy1 * m_screen_width) + dx1] = color1; update_pixel0(dx1, dy1); } if (color2 != 0xff) { m_videoram0[(dy1 * m_screen_width) + dx2] = color2; update_pixel0(dx2, dy1); } } if (m_gfxdraw_mode && (m_vram & 0x02)) { // layer 2 if (m_vram & 0x08) { // transparent enable if (color1 != 0xff) { m_videoram1[(dy2 * m_screen_width) + dx1] = color1; update_pixel1(dx1, dy2); } if (color2 != 0xff) { m_videoram1[(dy2 * m_screen_width) + dx2] = color2; update_pixel1(dx2, dy2); } } else { // transparent disable m_videoram1[(dy2 * m_screen_width) + dx1] = color1; update_pixel1(dx1, dy2); m_videoram1[(dy2 * m_screen_width) + dx2] = color2; update_pixel1(dx2, dy2); } } m_nb1413m3->m_busyctr++; } }
static void nbmj8891_gfxdraw(void) { UINT8 *GFX = memory_region(REGION_GFX1); int width = video_screen_get_width(Machine->primary_screen); int x, y; int dx1, dx2, dy1, dy2; int startx, starty; int sizex, sizey; int skipx, skipy; int ctrx, ctry; UINT8 color, color1, color2; int gfxaddr; nb1413m3_busyctr = 0; startx = blitter_destx + blitter_sizex; starty = blitter_desty + blitter_sizey; if (blitter_direction_x) { sizex = blitter_sizex ^ 0xff; skipx = 1; } else { sizex = blitter_sizex; skipx = -1; } if (blitter_direction_y) { sizey = blitter_sizey ^ 0xff; skipy = 1; } else { sizey = blitter_sizey; skipy = -1; } gfxaddr = (nbmj8891_gfxrom << 17) + (blitter_src_addr << 1); for (y = starty, ctry = sizey; ctry >= 0; y += skipy, ctry--) { for (x = startx, ctrx = sizex; ctrx >= 0; x += skipx, ctrx--) { if ((gfxaddr > (memory_region_length(REGION_GFX1) - 1))) { #ifdef MAME_DEBUG popmessage("GFXROM ADDRESS OVER!!"); #endif gfxaddr &= (memory_region_length(REGION_GFX1) - 1); } color = GFX[gfxaddr++]; // for hanamomo if ((nb1413m3_type == NB1413M3_HANAMOMO) && ((gfxaddr >= 0x20000) && (gfxaddr < 0x28000))) { color |= ((color & 0x0f) << 4); } dx1 = (2 * x + 0) & 0x1ff; dx2 = (2 * x + 1) & 0x1ff; if (gfxdraw_mode) { // 2 layer type dy1 = y & 0xff; dy2 = (y + nbmj8891_scrolly) & 0xff; } else { // 1 layer type dy1 = (y + nbmj8891_scrolly) & 0xff; dy2 = 0; } if (!nbmj8891_flipscreen) { dx1 ^= 0x1ff; dx2 ^= 0x1ff; dy1 ^= 0xff; dy2 ^= 0xff; } if (blitter_direction_x) { // flip color1 = (color & 0x0f) >> 0; color2 = (color & 0xf0) >> 4; } else { // normal color1 = (color & 0xf0) >> 4; color2 = (color & 0x0f) >> 0; } color1 = nbmj8891_clut[((nbmj8891_clutsel & 0x7f) << 4) + color1]; color2 = nbmj8891_clut[((nbmj8891_clutsel & 0x7f) << 4) + color2]; if ((!gfxdraw_mode) || (nbmj8891_vram & 0x01)) { // layer 1 if (color1 != 0xff) { nbmj8891_videoram0[(dy1 * width) + dx1] = color1; update_pixel0(dx1, dy1); } if (color2 != 0xff) { nbmj8891_videoram0[(dy1 * width) + dx2] = color2; update_pixel0(dx2, dy1); } } if (gfxdraw_mode && (nbmj8891_vram & 0x02)) { // layer 2 if (nbmj8891_vram & 0x08) { // transparent enable if (color1 != 0xff) { nbmj8891_videoram1[(dy2 * width) + dx1] = color1; update_pixel1(dx1, dy2); } if (color2 != 0xff) { nbmj8891_videoram1[(dy2 * width) + dx2] = color2; update_pixel1(dx2, dy2); } } else { // transparent disable nbmj8891_videoram1[(dy2 * width) + dx1] = color1; update_pixel1(dx1, dy2); nbmj8891_videoram1[(dy2 * width) + dx2] = color2; update_pixel1(dx2, dy2); } } nb1413m3_busyctr++; } }
static void nbmj8891_gfxdraw(running_machine &machine) { nbmj8891_state *state = machine.driver_data<nbmj8891_state>(); UINT8 *GFX = state->memregion("gfx1")->base(); int width = machine.primary_screen->width(); int x, y; int dx1, dx2, dy1, dy2; int startx, starty; int sizex, sizey; int skipx, skipy; int ctrx, ctry; UINT8 color, color1, color2; int gfxaddr, gfxlen; nb1413m3_busyctr = 0; startx = state->m_blitter_destx + state->m_blitter_sizex; starty = state->m_blitter_desty + state->m_blitter_sizey; if (state->m_blitter_direction_x) { sizex = state->m_blitter_sizex ^ 0xff; skipx = 1; } else { sizex = state->m_blitter_sizex; skipx = -1; } if (state->m_blitter_direction_y) { sizey = state->m_blitter_sizey ^ 0xff; skipy = 1; } else { sizey = state->m_blitter_sizey; skipy = -1; } gfxlen = machine.root_device().memregion("gfx1")->bytes(); gfxaddr = (state->m_gfxrom << 17) + (state->m_blitter_src_addr << 1); for (y = starty, ctry = sizey; ctry >= 0; y += skipy, ctry--) { for (x = startx, ctrx = sizex; ctrx >= 0; x += skipx, ctrx--) { if ((gfxaddr > (gfxlen - 1))) { #ifdef MAME_DEBUG popmessage("GFXROM ADDRESS OVER!!"); #endif gfxaddr &= (gfxlen - 1); } color = GFX[gfxaddr++]; // for hanamomo font type if (nb1413m3_type == NB1413M3_HANAMOMO) { if ((state->ioport("FONTTYPE")->read()) == 0x00) { if ((gfxaddr >= 0x20000) && (gfxaddr < 0x28000)) { color |= ((color & 0x0f) << 4); } } } dx1 = (2 * x + 0) & 0x1ff; dx2 = (2 * x + 1) & 0x1ff; if (state->m_gfxdraw_mode) { // 2 layer type dy1 = y & 0xff; dy2 = (y + state->m_scrolly) & 0xff; } else { // 1 layer type dy1 = (y + state->m_scrolly) & 0xff; dy2 = 0; } if (!state->m_flipscreen) { dx1 ^= 0x1ff; dx2 ^= 0x1ff; dy1 ^= 0xff; dy2 ^= 0xff; } if (state->m_blitter_direction_x) { // flip color1 = (color & 0x0f) >> 0; color2 = (color & 0xf0) >> 4; } else { // normal color1 = (color & 0xf0) >> 4; color2 = (color & 0x0f) >> 0; } color1 = state->m_clut[((state->m_clutsel & 0x7f) << 4) + color1]; color2 = state->m_clut[((state->m_clutsel & 0x7f) << 4) + color2]; if ((!state->m_gfxdraw_mode) || (state->m_vram & 0x01)) { // layer 1 if (color1 != 0xff) { state->m_videoram0[(dy1 * width) + dx1] = color1; update_pixel0(machine, dx1, dy1); } if (color2 != 0xff) { state->m_videoram0[(dy1 * width) + dx2] = color2; update_pixel0(machine, dx2, dy1); } } if (state->m_gfxdraw_mode && (state->m_vram & 0x02)) { // layer 2 if (state->m_vram & 0x08) { // transparent enable if (color1 != 0xff) { state->m_videoram1[(dy2 * width) + dx1] = color1; update_pixel1(machine, dx1, dy2); } if (color2 != 0xff) { state->m_videoram1[(dy2 * width) + dx2] = color2; update_pixel1(machine, dx2, dy2); } } else { // transparent disable state->m_videoram1[(dy2 * width) + dx1] = color1; update_pixel1(machine, dx1, dy2); state->m_videoram1[(dy2 * width) + dx2] = color2; update_pixel1(machine, dx2, dy2); } } nb1413m3_busyctr++; }