11
#include <drivers/video/fb.h>
12
#include <drivers/video/font.h>
14
static struct fb_info *text_fb = 0;
15
static void *overlay_sw_base = 0;
16
struct font_desc const *font = &font_vga_8x16;
21
void fb_overlay_init(struct fb_info *fbi, void *base) {
23
overlay_sw_base = base;
30
void fb_overlay_put_char(int x, int y, char ch) {
34
int bytes_per_pixel = text_fb->var.bits_per_pixel / 8;
36
data = font->data + (unsigned char)ch * CHAR_HEIGHT * CHAR_WIDTH / 8;
38
dest = overlay_sw_base + bytes_per_pixel * x * CHAR_WIDTH +
39
bytes_per_pixel * y * CHAR_HEIGHT * text_fb->var.xres;
41
for (int i = 0; i < CHAR_HEIGHT; i++) {
42
for (int j = 0; j < CHAR_WIDTH; j++) {
43
if ((*data) & (1 << (CHAR_WIDTH - j - 1)))
44
memset(dest, 0xFF, bytes_per_pixel);
46
memset(dest, 0x00, bytes_per_pixel);
47
dest += bytes_per_pixel;
50
dest -= CHAR_WIDTH * bytes_per_pixel;
51
dest += text_fb->var.xres * bytes_per_pixel;
59
void fb_overlay_put_string(int x, int y, char *str) {
61
fb_overlay_put_char(x++, y, *str);
69
void fb_overlay_put_line(int x, int y, char *str) {
70
while (*str && *str != '\n') {
71
fb_overlay_put_char(x++, y, *str);