Started work on refactored video.

This commit is contained in:
Kieron Morris 2021-06-23 02:51:56 +01:00
parent 170b93dd69
commit e4621c8aaa
5 changed files with 121 additions and 6 deletions

View File

@ -1776,14 +1776,15 @@ var
fb: puint32; fb: puint32;
Begin Begin
Ready:= False;
fb:= puint32(uint32(multibootinfo^.framebuffer_addr)); fb:= puint32(uint32(multibootinfo^.framebuffer_addr));
Console_Properties.Width:= multibootinfo^.framebuffer_width; Console_Properties.Width:= multibootinfo^.framebuffer_width;
Console_Properties.Height:= multibootinfo^.framebuffer_height; Console_Properties.Height:= multibootinfo^.framebuffer_height;
Console_Properties.BitsPerPixel:= multibootinfo^.framebuffer_bpp; Console_Properties.BitsPerPixel:= multibootinfo^.framebuffer_bpp;
Console_Properties.MAX_CELL_X:= (Console_Properties.Width div 8) - 1; Console_Properties.MAX_CELL_X:= (Console_Properties.Width div 8) - 1;
Console_Properties.MAX_CELL_Y:= (Console_Properties.Height div 16) - 1; Console_Properties.MAX_CELL_Y:= (Console_Properties.Height div 16) - 1;
If Console_Properties.BitsPerPixel <> 16 then while true do begin If Console_Properties.BitsPerPixel <> 16 then begin
exit;
end; end;
kpalloc(uint32(fb)); kpalloc(uint32(fb));
keyboard.hook(@keyhook); keyboard.hook(@keyhook);

View File

@ -0,0 +1,83 @@
unit video;
interface
uses
multiboot, lmemorymanager, tracer, color, rand;
procedure init();
procedure DrawPixel(X : uint32; Y : uint32; Pixel : TRGB32);
type
TVESALinearBuffer = record
Location : uint64;
BitsPerPixel : uint8;
Width : uint32;
Height : uint32;
end;
TVESA = record
initialized : Boolean;
Framebuffer : TVESALinearBuffer;
end;
implementation
var
VESA : TVESA;
procedure allocateFrameBuffer(Address : uint32; Width : uint32; Height : uint32);
var
LowerAddress, UpperAddress : uint32;
Block : uint32;
begin
tracer.push_trace('video.allocateFrameBuffer.enter');
LowerAddress:= ((Address) SHR 22)-1;
UpperAddress:= ((Address + (Width * Height)) SHR 22)+1;
For Block:=LowerAddress to UpperAddress do begin
kpalloc(Block SHL 22);
end;
tracer.push_trace('video.allocateFrameBuffer.enter');
end;
procedure init();
var
RGB : TRGB32;
x,y : uint32;
begin
tracer.push_trace('video.init.enter');
If not(VESA.initialized) then begin
VESA.Framebuffer.Location:= multiboot.multibootinfo^.framebuffer_addr;
VESA.Framebuffer.BitsPerPixel:= multiboot.multibootinfo^.framebuffer_bpp;
VESA.Framebuffer.Width:= multiboot.multibootinfo^.framebuffer_width;
VESA.Framebuffer.Height:= multiboot.multibootinfo^.framebuffer_height;
allocateFrameBuffer(VESA.Framebuffer.Location, VESA.Framebuffer.Width, VESA.Framebuffer.Height);
VESA.initialized:= true;
end;
srand(98354754397);
while true do begin
Inc(RGB.R);
for x:=0 to VESA.Framebuffer.Width-1 do begin
Inc(RGB.G);
for y:=0 to VESA.Framebuffer.Height-1 do begin
DrawPixel(x,y,RGB);
Inc(RGB.B);
end;
end;
end;
tracer.push_trace('video.init.exit');
end;
procedure DrawPixel(X : uint32; Y : uint32; Pixel : TRGB32);
var
Location : PuInt32;
Increment : Uint32;
begin
Location:= Puint32(VESA.Framebuffer.Location);
Increment:= (Y * VESA.Framebuffer.Width) + X;
Location[Increment]:= uint32(Pixel);
end;
end.

27
src/include/color.pas Normal file
View File

@ -0,0 +1,27 @@
unit color;
interface
type
TRGB32 = bitpacked record
B : uint8;
G : uint8;
R : uint8;
A : uint8;
end;
TRGB16 = bitpacked record
B : UBit5;
G : UBit6;
R : UBit5;
end;
TRGB8 = bitpacked record
B : UBit2;
G : UBit4;
R : UBit2;
end;
implementation
end.

View File

@ -54,7 +54,7 @@ uses
base64, base64,
rand, rand,
terminal, terminal,
hashmap, vfs; hashmap, vfs, video;
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
@ -132,6 +132,8 @@ begin
multibootinfo:= mbinfo; multibootinfo:= mbinfo;
multibootmagic:= mbmagic; multibootmagic:= mbmagic;
//video.init();
{ Ensure tracer is frozen } { Ensure tracer is frozen }
tracer.freeze(); tracer.freeze();
@ -260,6 +262,8 @@ begin
tracer.push_trace('kmain.TICK'); tracer.push_trace('kmain.TICK');
video.init();
while true do begin while true do begin
tracer.push_trace('kmain.RedrawWindows'); tracer.push_trace('kmain.RedrawWindows');
console.redrawWindows; console.redrawWindows;

View File

@ -77,9 +77,9 @@ dd 0
dd 0 dd 0
dd 0 dd 0
dd 0 dd 0
dd 1280 dd 1600
dd 1024 dd 1200
dd 16 dd 32
; ;
; Entrypoint ; Entrypoint