Made the framebuffer support both 24 and 32 bpp
This commit is contained in:
parent
2a8169e8fa
commit
5ee43c6e9f
3 changed files with 26 additions and 8 deletions
|
@ -20,5 +20,12 @@ void initfb(unsigned long addr, unsigned short w, unsigned short h, unsigned cha
|
||||||
|
|
||||||
void putpixel(unsigned short x, unsigned short y, unsigned char r, unsigned char g, unsigned char b, unsigned char a) {
|
void putpixel(unsigned short x, unsigned short y, unsigned char r, unsigned char g, unsigned char b, unsigned char a) {
|
||||||
if (x>fb_width || y> fb_height) return;
|
if (x>fb_width || y> fb_height) return;
|
||||||
|
|
||||||
|
if (fb_bpp == 32) {
|
||||||
*((unsigned long *)(fb_address + y*fb_pitch + x*fb_bytespp)) = r<<fb_rpos | g<<fb_gpos | b<<fb_bpos;
|
*((unsigned long *)(fb_address + y*fb_pitch + x*fb_bytespp)) = r<<fb_rpos | g<<fb_gpos | b<<fb_bpos;
|
||||||
|
} else {
|
||||||
|
*((unsigned char *)(fb_address + y*fb_pitch + x*fb_bytespp + fb_rpos/8)) = r;
|
||||||
|
*((unsigned char *)(fb_address + y*fb_pitch + x*fb_bytespp + fb_gpos/8)) = g;
|
||||||
|
*((unsigned char *)(fb_address + y*fb_pitch + x*fb_bytespp + fb_bpos/8)) = b;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
14
src/kernel.c
14
src/kernel.c
|
@ -72,12 +72,24 @@ void kmain (unsigned int mbootmagick, multiboot_info_t* mbootinfo) {
|
||||||
int x, y, i;
|
int x, y, i;
|
||||||
unsigned char c = 0;
|
unsigned char c = 0;
|
||||||
for(;;) {
|
for(;;) {
|
||||||
|
//serial_write_string("\n");
|
||||||
|
for (;c<255;c+=5) {
|
||||||
|
//serial_write_string("/");
|
||||||
for(y=0; y < mbootinfo->framebuffer_height; y++) {
|
for(y=0; y < mbootinfo->framebuffer_height; y++) {
|
||||||
for(x=0; x < mbootinfo->framebuffer_width; x++) {
|
for(x=0; x < mbootinfo->framebuffer_width; x++) {
|
||||||
putpixel(x, y, 0, c, c, 0xff);
|
putpixel(x, y, 0, c, c, 0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c+=4;
|
}
|
||||||
|
//serial_write_string("\n");
|
||||||
|
for (;c>0;c-=5) {
|
||||||
|
//serial_write_string("\\");
|
||||||
|
for(y=mbootinfo->framebuffer_height; y>=0; y--) {
|
||||||
|
for(x=mbootinfo->framebuffer_width; x>=0; x--) {
|
||||||
|
putpixel(x, y, 0, c, c, 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
serial_write_string("\nExecution finished, halting...\n");
|
serial_write_string("\nExecution finished, halting...\n");
|
||||||
|
|
|
@ -21,8 +21,8 @@
|
||||||
.long 0 # bss end address
|
.long 0 # bss end address
|
||||||
.long 0 # entry address
|
.long 0 # entry address
|
||||||
.long 0 # video mode_type (0:fb, 1:txt) (set flags[2]!)
|
.long 0 # video mode_type (0:fb, 1:txt) (set flags[2]!)
|
||||||
.long 1024 # video width
|
.long 640 # video width
|
||||||
.long 768 # video height
|
.long 480 # video height
|
||||||
.long 32 # video depth
|
.long 32 # video depth
|
||||||
|
|
||||||
.bss
|
.bss
|
||||||
|
@ -46,4 +46,3 @@ _start:
|
||||||
cli
|
cli
|
||||||
1: hlt
|
1: hlt
|
||||||
jmp 1b
|
jmp 1b
|
||||||
#include "lol.s"
|
|
||||||
|
|
Loading…
Reference in a new issue