void fbcon_ega_planes_putc(struct vc_data *conp, struct display *p, int c, int yy, int xx) { int fg = attr_fgcol(p,c); int bg = attr_bgcol(p,c); int y; u8 *cdat = p->fontdata + (c & p->charmask) * fontheight(p); char *where = p->screen_base + xx + yy * p->line_length * fontheight(p); setmode(0); setop(0); setsr(0xf); setcolor(bg); selectmask(); setmask(0xff); for (y = 0; y < fontheight(p); y++, where += p->line_length) rmw(where); where -= p->line_length * y; setcolor(fg); selectmask(); for (y = 0; y < fontheight(p); y++, where += p->line_length) if (cdat[y]) { setmask(cdat[y]); rmw(where); } }
void fbcon_vga_planes_putc(struct vc_data *conp, struct display *p, int c, int yy, int xx) { int fg = attr_fgcol(p,c); int bg = attr_bgcol(p,c); int y; u8 *cdat = p->fontdata + (c & p->charmask) * fontheight(p); char *where = p->screen_base + xx + yy * p->line_length * fontheight(p); setmode(2); setop(0); setsr(0xf); setcolor(fg); selectmask(); setmask(0xff); writeb(bg, where); rmb(); readb(where); /* fill latches */ setmode(3); wmb(); for (y = 0; y < fontheight(p); y++, where += p->line_length) writeb(cdat[y], where); wmb(); }
void fbcon_vga_planes_clear(struct vc_data *conp, struct display *p, int sy, int sx, int height, int width) { int line_ofs = p->line_length - width; char *where; int x; setmode(0); setop(0); setsr(0xf); setcolor(attr_bgcol_ec(p, conp)); selectmask(); setmask(0xff); sy *= fontheight(p); height *= fontheight(p); where = p->screen_base + sx + sy * p->line_length; while (height--) { for (x = 0; x < width; x++) { writeb(0, where); where++; } where += line_ofs; } }
void vga16_set_pixel(int x, int y, unsigned long c) { volatile char *where; setmode(0); setop(0); setcolor(c); selectmask(); setmask(0x80 >> (x % 8)); where = fb_mem + y * 80 + x/8; rmw(where); }
/* 28.50 in my test */ void fbcon_ega_planes_putcs(struct vc_data *conp, struct display *p, const unsigned short *s, int count, int yy, int xx) { int fg = attr_fgcol(p,scr_readw(s)); int bg = attr_bgcol(p,scr_readw(s)); char *where; int n; setmode(2); setop(0); selectmask(); setmask(0xff); where = p->screen_base + xx + yy * p->line_length * fontheight(p); writeb(bg, where); rmb(); readb(where); /* fill latches */ wmb(); selectmask(); for (n = 0; n < count; n++) { int c = scr_readw(s++) & p->charmask; u8 *cdat = p->fontdata + c * fontheight(p); u8 *end = cdat + fontheight(p); while (cdat < end) { outb(*cdat++, GRAPHICS_DATA_REG); wmb(); writeb(fg, where); where += p->line_length; } where += 1 - p->line_length * fontheight(p); } wmb(); }
void fbcon_vga_planes_revc(struct display *p, int xx, int yy) { char *where = p->screen_base + xx + yy * p->line_length * fontheight(p); int y; setmode(0); setop(0x18); setsr(0xf); setcolor(0xf); selectmask(); setmask(0xff); for (y = 0; y < fontheight(p); y++) { rmw(where); where += p->line_length; } }
void vga16_putc(unsigned char *cdat, int yy, int xx, int fg, int bg) { int y; char *where = fb_mem + xx/8 + yy * fb_line_length; setmode(2); setop(0); setsr(0xf); setcolor(fg); selectmask(); setmask(0xff); *where = bg; rmb(); *(volatile char*)where; /* fill latches */ setmode(3); wmb(); *(volatile char*)where; /* fill latches */ setmode(3); wmb(); for (y = 0; y < 16; y++, where += fb_line_length) *where = cdat[y]; wmb(); }
/* 6.96 in my test */ void fbcon_vga_planes_putcs(struct vc_data *conp, struct display *p, const unsigned short *s, int count, int yy, int xx) { int fg = attr_fgcol(p,*s); int bg = attr_bgcol(p,*s); char *where; int n; setmode(2); setop(0); setsr(0xf); setcolor(fg); selectmask(); setmask(0xff); where = p->screen_base + xx + yy * p->line_length * fontheight(p); writeb(bg, where); rmb(); readb(where); /* fill latches */ setmode(3); wmb(); for (n = 0; n < count; n++) { int y; int c = *s++ & p->charmask; u8 *cdat = p->fontdata + (c & p->charmask) * fontheight(p); for (y = 0; y < fontheight(p); y++, cdat++) { writeb (*cdat, where); where += p->line_length; } where += 1 - p->line_length * fontheight(p); } wmb(); }