static void update_smoothing(int bgtilerow, int first, int last) { UINT8 *prom = memory_region(REGION_PROMS) + smooth_table * 0x100; UINT8 bgscan[2][256]; UINT8 *bgcurr = bgscan[0], *bglast = bgscan[1]; int xstart, xstop, x, y; /* smoothing notes: * even scanlines blend the previous (Y-1) and current (Y) line * odd scanlines are just taken from the current line (Y) * therefore, if we modify source scanlines 8-15, we must update dest scanlines 16-32 * even pixels are just taken from the current pixel (X) * odd pixels blend the current (X) and next (X+1) pixels * therefore, if we modify source pixels 8-15, we must update dest pixels 15-31 */ /* compute x start/stop in destination coordinates */ xstart = first * 16 - 1; xstop = last * 16 + 15; /* extract the previous bg scanline */ extract_scanline8(bgbitmap, 0, ((bgtilerow * 16 - 1) & 0x1ff) / 2, 256, bgcurr); /* loop over height */ for (y = 0; y <= 16; y++) { int curry = (bgtilerow * 16 + y) & 0x1ff; /* swap background buffers */ UINT8 *bgtemp = bgcurr; bgcurr = bglast; bglast = bgtemp; /* extract current bg scanline */ extract_scanline8(bgbitmap, 0, curry / 2, 256, bgcurr); /* loop over columns */ for (x = xstart; x <= xstop; x++) { int tr = bglast[((x + 1) & 0x1ff) / 2]; int br = bgcurr[((x + 1) & 0x1ff) / 2]; /* smooth pixels */ if (x & 1) { int tl = bglast[(x & 0x1ff) / 2]; int bl = bgcurr[(x & 0x1ff) / 2]; int mixt = prom[16 * tl + tr]; int mixb = prom[16 * bl + br]; plot_pixel(bgexbitmap, x & 0x1ff, curry, prom[0x400 + 16 * mixt + mixb]); } else plot_pixel(bgexbitmap, x & 0x1ff, curry, prom[0x400 + 16 * tr + br]); } } }
void apexc_state::apexc_teletyper_linefeed() { UINT8 buf[teletyper_window_width]; int y; for (y=teletyper_window_offset_y; y<teletyper_window_offset_y+teletyper_window_height-teletyper_scroll_step; y++) { extract_scanline8(*m_bitmap, teletyper_window_offset_x, y+teletyper_scroll_step, teletyper_window_width, buf); draw_scanline8(*m_bitmap, teletyper_window_offset_x, y, teletyper_window_width, buf, m_palette->pens()); } m_bitmap->fill(0, teletyper_scroll_clear_window); }
static void pdp1_typewriter_linefeed(void) { UINT8 buf[typewriter_window_width]; int y; for (y=0; y<typewriter_window_height-typewriter_scroll_step; y++) { extract_scanline8(typewriter_bitmap, 0, y+typewriter_scroll_step, typewriter_window_width, buf); draw_scanline8(typewriter_bitmap, 0, y, typewriter_window_width, buf, Machine->pens, -1); } fillbitmap(typewriter_bitmap, Machine->pens[pen_typewriter_bg], &typewriter_scroll_clear_window); }
void tx0_state::tx0_typewriter_linefeed() { UINT8 buf[typewriter_window_width]; int y; for (y=0; y<typewriter_window_height-typewriter_scroll_step; y++) { extract_scanline8(m_typewriter_bitmap, 0, y+typewriter_scroll_step, typewriter_window_width, buf); draw_scanline8(m_typewriter_bitmap, 0, y, typewriter_window_width, buf, m_palette->pens()); } const rectangle typewriter_scroll_clear_window(0, typewriter_window_width-1, typewriter_window_height-typewriter_scroll_step, typewriter_window_height-1); m_typewriter_bitmap.fill(pen_typewriter_bg, typewriter_scroll_clear_window); }
static void tx0_typewriter_linefeed(running_machine &machine) { tx0_state *state = machine.driver_data<tx0_state>(); UINT8 buf[typewriter_window_width]; int y; for (y=0; y<typewriter_window_height-typewriter_scroll_step; y++) { extract_scanline8(state->m_typewriter_bitmap, 0, y+typewriter_scroll_step, typewriter_window_width, buf); draw_scanline8(state->m_typewriter_bitmap, 0, y, typewriter_window_width, buf, machine.pens); } const rectangle typewriter_scroll_clear_window(0, typewriter_window_width-1, typewriter_window_height-typewriter_scroll_step, typewriter_window_height-1); state->m_typewriter_bitmap.fill(pen_typewriter_bg, typewriter_scroll_clear_window); }