aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/framebuffer.cc
blob: 9f90d84df04e547ab0f3750270148b40eaf45124 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "framebuffer.hpp"
#include "core/paging.hpp"
#include "libs/string.hpp"

FB_CFG fb_cfg;


void framebuffer_init(FB_CFG config){
    fb_cfg=config;
    PAGING_MAP_RANGE(fb_cfg.location, fb_cfg.pitch*fb_cfg.height);
}

void framebuffer_draw(FB_PIXEL p){
    u8 *pixel=(u8*)(fb_cfg.location+p.x*(fb_cfg.depth/8)+p.y*fb_cfg.pitch);
    pixel[0]=p.r;
    pixel[1]=p.g;
    pixel[2]=p.b;
    if(fb_cfg.depth==32)
        pixel[3]=p.a;
}

void framebuffer_scrollup(u32 npixel){
    u64 start=fb_cfg.location+npixel*fb_cfg.pitch;
    u64 amount=fb_cfg.pitch*(fb_cfg.height-npixel);
    memcpy((void*)start,(void*)fb_cfg.location,amount); // TODO change because page fault can occurs
}

void framebuffer_clear(){
    memset((void*)fb_cfg.location, 0, fb_cfg.pitch*fb_cfg.height);
}