void vga_gr_mask(unsigned char index, unsigned char value, unsigned char mask) { unsigned char tmp; tmp = vga_gr_read(index); tmp &= ~mask; tmp |= (value & mask); vga_gr_write(index, tmp); }
static void vga_font_8x16_load(void) { unsigned char *p; int i, j; unsigned char sr2, sr4, gr5, gr6; #define height 16 #define count 256 sr2 = vga_sr_read(0x02); sr4 = vga_sr_read(0x04); gr5 = vga_gr_read(0x05); gr6 = vga_gr_read(0x06); /* disable odd/even */ vga_sr_mask(0x04, 0x04, 0x04); vga_gr_mask(0x05, 0x00, 0x10); vga_gr_mask(0x06, 0x00, 0x02); /* plane 2 */ vga_sr_write(0x02, 0x04); p = (unsigned char *) VGA_FB; for (i = 0; i < count; i++) { for (j = 0; j < 32; j++) { if (j < height) *p = vga_font_8x16[i][j]; else *p = 0x00; p++; } } vga_gr_write(0x06, gr6); vga_gr_write(0x05, gr5); vga_sr_write(0x04, sr4); vga_sr_write(0x02, sr2); /* set up font size */ vga_cr_mask(0x09, 16 - 1, 0x1F); }