diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-29 15:01:54 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-29 15:01:54 +0200 |
| commit | f37f5d86b74870e878f69bd41a3c70a59c4ce1c1 (patch) | |
| tree | 65620f0504fea111ba870457f32bc072dc27fe7a /src/drivers | |
| parent | fde8a1ab65d5e33d90123a3aaa9b5c15e249689f (diff) | |
Debug memory
Diffstat (limited to 'src/drivers')
| -rw-r--r-- | src/drivers/acpi.cc | 4 | ||||
| -rw-r--r-- | src/drivers/framebuffer.cc | 38 | ||||
| -rw-r--r-- | src/drivers/memtext.cc | 5 | ||||
| -rw-r--r-- | src/drivers/memtext.hpp | 2 | ||||
| -rw-r--r-- | src/drivers/psftext.cc | 8 | ||||
| -rw-r--r-- | src/drivers/vgatext.cc | 6 |
6 files changed, 47 insertions, 16 deletions
diff --git a/src/drivers/acpi.cc b/src/drivers/acpi.cc index 9c25202..ec7a2ff 100644 --- a/src/drivers/acpi.cc +++ b/src/drivers/acpi.cc @@ -32,7 +32,7 @@ char acpi_init(void* rsdp_p){ } char acpi_load_rsdt(){ - PAGING_MAP(rsdp.rsdt_addr); // Ensure page is accessible + PAGE_ID_MAP(rsdp.rsdt_addr); // Ensure page is accessible memcpy((void*)rsdp.rsdt_addr, &rsdt, sizeof(rsdt)); rsdt.first_entry_addr_ptr=rsdp.rsdt_addr+36; if(rsdt.header.signature !=ACPI_RSDT_SIGNATURE){ @@ -54,7 +54,7 @@ char acpi_load_madt(){ u32 *addr=(u32*)(rsdt.first_entry_addr_ptr+i*4); // Load header ACPI_TABLE_HEADER header; - PAGING_MAP(*addr); + PAGE_ID_MAP(*addr); memcpy((void*)*addr, &header, sizeof(header)); // Check if it is MADT if(header.signature==ACPI_MADT_SIGNATURE){ diff --git a/src/drivers/framebuffer.cc b/src/drivers/framebuffer.cc index 9f90d84..f5b537b 100644 --- a/src/drivers/framebuffer.cc +++ b/src/drivers/framebuffer.cc @@ -7,10 +7,25 @@ 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); + // Map buffer to the end of the memory + // indeed fb_cfg.location could be to big and + // thus leading to cross u64 size limit while summing it with + // kvar_kernel_vma in paging.cc/hpp + u64 start=0xFFFFFFFFFFFFFFFF - fb_cfg.pitch*fb_cfg.height; + // Ensure we start writing at the begining of the page since + // start is not necessarly 4096 bytes aligned + start=PAGE(start); + PAGE_RMAP_PHY(start-kvar_kernel_vma,fb_cfg.location, fb_cfg.pitch*fb_cfg.height); + fb_cfg.location=start; } void framebuffer_draw(FB_PIXEL p){ + // Check overflow + p.x=p.x>(fb_cfg.width)?fb_cfg.width:p.x; + p.y=p.y>(fb_cfg.width)?fb_cfg.width:p.y; + p.x=p.x<0?0:p.x; + p.y=p.y<0?0:p.y; + 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; @@ -20,11 +35,24 @@ void framebuffer_draw(FB_PIXEL p){ } 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 + for(u32 y=0;y<fb_cfg.height;y++){ + if(npixel<fb_cfg.height){ + for(u32 x=0;x<fb_cfg.width;x++){ + u32 *pixel_dst=(u32*)(fb_cfg.location+x*(fb_cfg.depth/8)+y*fb_cfg.pitch); + u32 *pixel_src=(u32*)(fb_cfg.location+x*(fb_cfg.depth/8)+npixel*fb_cfg.pitch); + *pixel_dst=*pixel_src; // Faster than writing pixel by pixel + } + } + else{ + for(u32 x=0;x<fb_cfg.width;x++){ + u8 *pixel_dst=(u8*)(fb_cfg.location+x*(fb_cfg.depth/8)+y*fb_cfg.pitch); + *pixel_dst=0;// Faster than writing pixel by pixel + } + } + npixel++; + } } void framebuffer_clear(){ - memset((void*)fb_cfg.location, 0, fb_cfg.pitch*fb_cfg.height); + // memset((void*)fb_cfg.location, 0, fb_cfg.pitch*fb_cfg.height-1000); }
\ No newline at end of file diff --git a/src/drivers/memtext.cc b/src/drivers/memtext.cc index b5371b1..f010271 100644 --- a/src/drivers/memtext.cc +++ b/src/drivers/memtext.cc @@ -4,13 +4,12 @@ #include "libs/string.hpp" - char memtext_buffer[MEMTEXT_BUFFER_SIZE]; u64 memtext_x=0; void memtext_init(){ - PAGING_MAP2_RANGE(MEMTEXT_ADDR_LOCATION,0x0,8); - u64* p_addr=(u64*)MEMTEXT_ADDR_LOCATION; + PAGE_RMAP(MEMTEXT_ADDR_LOCATION,8); + u64* p_addr=(u64*)VIRT(MEMTEXT_ADDR_LOCATION); *p_addr=(u64)memtext_buffer; // Cleaning buffer diff --git a/src/drivers/memtext.hpp b/src/drivers/memtext.hpp index 18b3014..c61c93d 100644 --- a/src/drivers/memtext.hpp +++ b/src/drivers/memtext.hpp @@ -2,7 +2,7 @@ #include "boucane.hpp" -#define MEMTEXT_BUFFER_SIZE 1024 +#define MEMTEXT_BUFFER_SIZE 4096 #define MEMTEXT_ADDR_LOCATION 0x0 diff --git a/src/drivers/psftext.cc b/src/drivers/psftext.cc index da7e8c9..1df4dd3 100644 --- a/src/drivers/psftext.cc +++ b/src/drivers/psftext.cc @@ -30,8 +30,10 @@ void psftext_putchar(char c){ if(c=='\n'){ psf_status.y++; psf_status.x=0; - if(psf_status.y>psf_status.nline) + if(psf_status.y>=psf_status.nline){ framebuffer_scrollup(psf_status.header.glyph_height); + psf_status.y--; + } return; } @@ -60,7 +62,9 @@ void psftext_putchar(char c){ if(psf_status.x>psf_status.nchar){ psf_status.y++; psf_status.x=0; - if(psf_status.y>psf_status.nline) + if(psf_status.y>=psf_status.nline){ framebuffer_scrollup(psf_status.header.glyph_height); + psf_status.y--; + } } }
\ No newline at end of file diff --git a/src/drivers/vgatext.cc b/src/drivers/vgatext.cc index be01f0e..6a5a1b2 100644 --- a/src/drivers/vgatext.cc +++ b/src/drivers/vgatext.cc @@ -6,7 +6,7 @@ #define MAX_LINE 25 VIDEO_STATE VS={ - (u8 *)0xB8000, + (u8 *)0, 0, 0, BLACK, @@ -14,8 +14,8 @@ VIDEO_STATE VS={ }; void vgatext_init(){ - PAGING_MAP(0xB8000); - PAGING_MAP(0xB8000+4096); + PAGE_RMAP(0xB8000,4096*2); + VS.mem=(u8*)VIRT(0xB8000); } void vgatext_putchar(char c){ |
