Abstracted video driver somewhat
Split out video driver into abstract/standard/implementation.
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
// Copyright 2021 Kieron Morris
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
{
|
||||
Driver->Video->VESA - Provides an interface the VESA drivers.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit VESA;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Video, multiboot;
|
||||
|
||||
procedure init();
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
VESA8, VESA16, VESA24, VESA32;
|
||||
|
||||
procedure allocateVESAFrameBuffer(Address : uint32; Width : uint32; Height : uint32);
|
||||
var
|
||||
LowerAddress, UpperAddress : uint32;
|
||||
Block : uint32;
|
||||
|
||||
begin
|
||||
tracer.push_trace('vesa.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('vesa.allocateFrameBuffer.enter');
|
||||
end;
|
||||
|
||||
procedure initVESAFrameBuffer(VideoBuffer : PVideoBuffer; Location : uint64; Width : uint32; Height : uint32; BitsPerPixel : uint8);
|
||||
begin
|
||||
if not(VideoBuffer^.MMIOBuffer.Initialized) then begin
|
||||
VideoBuffer^.MMIOBuffer.Location:= Location;
|
||||
VideoBuffer^.MMIOBuffer.BitsPerPixel:= BitsPerPixel;
|
||||
VideoBuffer^.MMIOBuffer.Width:= Width;
|
||||
VideoBuffer^.MMIOBuffer.Height:= Height;
|
||||
allocateVESAFrameBuffer(VideoBuffer^.MMIOBuffer.Location, VideoBuffer^.MMIOBuffer.Width, VideoBuffer^.MMIOBuffer.Height);
|
||||
VideoBuffer^.DefaultBuffer:= VideoBuffer^.MMIOBuffer.Location;
|
||||
VideoBuffer^.MMIOBuffer.Initialized:= True;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Flush(FrontBuffer : PVideoBuffer; BackBuffer : PVideoBuffer);
|
||||
var
|
||||
x,y : uint32;
|
||||
Back,Front : PuInt64;
|
||||
|
||||
begin
|
||||
if not(BackBuffer^.Initialized) then exit;
|
||||
Back:= PUint64(BackBuffer^.Location);
|
||||
Front:= PuInt64(FrontBuffer^.Location);
|
||||
for x:=0 to (VideoDriver.MMIOBuffer.Width-1) div 2 do begin
|
||||
for y:=0 to (VideoDriver.MMIOBuffer.Height-1) div 2 do begin
|
||||
Front[(Y * VideoDriver.MMIOBuffer.Width)+X]:= Back[(Y * VideoDriver.MMIOBuffer.Width)+X];
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure init();
|
||||
begin
|
||||
initVESAFrameBuffer(@VideoDriver, multiboot.multibootinfo^.framebuffer_addr, multiboot.multibootinfo^.framebuffer_width, multiboot.multibootinfo^.framebuffer_height, multiboot.multibootinfo^.framebuffer_bpp);
|
||||
VESA8.init();
|
||||
VESA16.init();
|
||||
VESA24.init();
|
||||
VESA32.init();
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,41 @@
|
||||
// Copyright 2021 Kieron Morris
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
{
|
||||
Driver->Video->VESA16 - Implementation of VESA 16bpp draw routines.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit VESA16;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Video, VESA;
|
||||
|
||||
procedure init();
|
||||
|
||||
implementation
|
||||
|
||||
procedure DrawPixel(Buffer : PVideoBuffer; X : uint32; Y : uint32; Pixel : TRGB32);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure init();
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,41 @@
|
||||
// Copyright 2021 Kieron Morris
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
{
|
||||
Driver->Video->VESA24 - Implementation of VESA 24bpp draw routines.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit VESA24;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Video, VESA;
|
||||
|
||||
procedure init();
|
||||
|
||||
implementation
|
||||
|
||||
procedure DrawPixel(Buffer : PVideoBuffer; X : uint32; Y : uint32; Pixel : TRGB32);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure init();
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,47 @@
|
||||
// Copyright 2021 Kieron Morris
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
{
|
||||
Driver->Video->VESA32 - Implementation of VESA 32bpp draw routines.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit VESA32;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Video, VESA;
|
||||
|
||||
procedure init();
|
||||
|
||||
implementation
|
||||
|
||||
procedure DrawPixel(Buffer : PVideoBuffer; X : uint32; Y : uint32; Pixel : TRGB32);
|
||||
var
|
||||
Location : PuInt32;
|
||||
LocationIndex : Uint32;
|
||||
|
||||
begin
|
||||
Location:= Puint32(Buffer^.Location);
|
||||
LocationIndex:= (Y * Buffer^.Width) + X;
|
||||
Location[LocationIndex]:= uint32(Pixel);
|
||||
end;
|
||||
|
||||
procedure init();
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,41 @@
|
||||
// Copyright 2021 Kieron Morris
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
{
|
||||
Driver->Video->VESA8 - Implementation of VESA 8bpp draw routines.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit VESA8;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Video, VESA;
|
||||
|
||||
procedure init();
|
||||
|
||||
implementation
|
||||
|
||||
procedure DrawPixel(Buffer : PVideoBuffer; X : uint32; Y : uint32; Pixel : TRGB32);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure init();
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
end.
|
||||
+72
-84
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user