aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/framebuffer.cc
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2021-04-26 12:37:34 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2021-04-26 12:37:34 +0200
commit9dc527b3be9d493dcf8cf1baf78477373eb5990d (patch)
tree0b32c28e57fc5a6a3e6210d9a601dfdbfe246cd8 /src/drivers/framebuffer.cc
parent7db6db5ae64e7ab2626bbd898c63f58e053dc1a6 (diff)
Enable psf font for framebuffer display
Diffstat (limited to 'src/drivers/framebuffer.cc')
-rw-r--r--src/drivers/framebuffer.cc70
1 files changed, 21 insertions, 49 deletions
diff --git a/src/drivers/framebuffer.cc b/src/drivers/framebuffer.cc
index 2fbe153..2ac47db 100644
--- a/src/drivers/framebuffer.cc
+++ b/src/drivers/framebuffer.cc
@@ -1,58 +1,30 @@
#include "framebuffer.hpp"
+#include "core/paging.hpp"
+#include "libs/string.hpp"
-#define MAX_COL 80
-#define MAX_LINE 25
+FB_CFG fb_cfg;
-VIDEO_STATE VS={
- (u8 *)0xB8000,
- 0,
- 0,
- BLACK,
- GRAY,
-};
-void putchar(char c){
- // Handle newline here
- if(c=='\n'){
- VS.col=0;
- VS.line+=1;
- if(VS.line>=MAX_LINE){
- VS.line=MAX_LINE-1;
- scrollup();
- }
- return;
- }
-
- // Print char
- VS.mem[VS.col*2+MAX_COL*VS.line*2]=c;
- VS.mem[VS.col*2+MAX_COL*VS.line*2+1]=VS.fg|VS.bg<<4;
-
- // Refresh location
- VS.col+=1;
- if(VS.col>= MAX_COL){
- VS.col=0;
- VS.line+=1;
- if(VS.line>=MAX_LINE){
- VS.line=MAX_LINE-1;
- scrollup();
- }
- }
+void framebuffer_init(FB_CFG config){
+ fb_cfg=config;
}
-void clear(){
- for(u8 i=0;i<MAX_LINE;i++){
- scrollup();
- }
+void framebuffer_draw(FB_PIXEL p){
+ u8 *pixel=(u8*)(fb_cfg.location+p.x*(fb_cfg.depth/8)+p.y*fb_cfg.pitch);
+ PAGING_MAP(pixel);
+ pixel[0]=p.r;
+ pixel[1]=p.g;
+ pixel[2]=p.b;
+ if(fb_cfg.depth==32)
+ pixel[3]=p.a;
}
-void scrollup(){
- // Move VS.line up
- for(u8 i=1;i<=MAX_LINE;i++){
- for(u8 j=0;j<=MAX_COL;j++)
- VS.mem[j*2+MAX_COL*(i-1)*2]=VS.mem[j*2+MAX_COL*i*2];
- }
- // Clear last VS.line
- for(u8 i=0;i<=MAX_COL;i++){
- VS.mem[i*2+MAX_COL*(MAX_LINE-1)*2]='\0';
- }
+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);
}
+
+void framebuffer_clear(){
+ memset((void*)fb_cfg.location, 0, fb_cfg.pitch*fb_cfg.height);
+} \ No newline at end of file