Compare commits
31
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8be364c990 | ||
|
|
0e2c6b2936 | ||
|
|
632c3fa66b | ||
|
|
875e3e4765 | ||
|
|
e28d68128d | ||
|
|
a9969d58f8 | ||
|
|
d7a54d858d | ||
|
|
4e991c3e6f | ||
|
|
a3217de71a | ||
|
|
19b433a19f | ||
|
|
69d1d22a18 | ||
|
|
5c15343ed0 | ||
|
|
3ae349fbc8 | ||
|
|
78c060c114 | ||
|
|
cd925e96c2 | ||
|
|
142dd486dd | ||
|
|
beeeabd441 | ||
|
|
b73c66f6d6 | ||
|
|
a7111d3cac | ||
|
|
d182fd7f46 | ||
|
|
b5582b1284 | ||
|
|
161cea4920 | ||
|
|
6b81c4ece0 | ||
|
|
ee17f69115 | ||
|
|
81c19bff16 | ||
|
|
e7cda58113 | ||
|
|
44f18554e1 | ||
|
|
52b42ec975 | ||
|
|
2815dd9e4d | ||
|
|
d057bfc3ff | ||
|
|
e4621c8aaa |
+2
-16
@@ -24,7 +24,7 @@ steps:
|
||||
- find . -type f -print0 | xargs -0 dos2unix
|
||||
- chmod +x /drone/src/*.sh
|
||||
- /drone/src/compile.sh
|
||||
|
||||
|
||||
- name: upload-iso-artifact
|
||||
image: alpine/git
|
||||
depends_on:
|
||||
@@ -49,18 +49,4 @@ steps:
|
||||
-H "Authorization: token $GITEA_TOKEN" || echo "No previous latest version found."
|
||||
- |
|
||||
curl -X PUT https://gitea.spexeah.com/api/packages/Spexeah/generic/asuro-iso/latest/Asuro.iso \
|
||||
-H "Authorization: token $GITEA_TOKEN" --upload-file "Asuro-$(git rev-parse --short HEAD).iso"
|
||||
|
||||
- name: msg status
|
||||
image: appleboy/drone-discord
|
||||
failure: ignore
|
||||
depends_on:
|
||||
- compile
|
||||
when:
|
||||
status: [success, failure, changed]
|
||||
settings:
|
||||
webhook_id:
|
||||
from_secret: discord_webhook_id
|
||||
webhook_token:
|
||||
from_secret: discord_webhook_secret
|
||||
message: "**Asuro Build**\n\n{{#success build.status}}✅ Build successful!\n\n{{else}}❌ Build failed!\n\n{{/success}}Repository: `{{repo.namespace}}/{{repo.name}}`\nBranch: `{{commit.branch}}`\nCommit: `{{commit.sha}}`\nAuthor: `{{commit.author}} <{{commit.email}}>`\n\nGitea Diff: [Link](<{{commit.link}}>)\nDrone Build: [Link](<{{build.link}}>)\n\nMessage: {{commit.message}}"
|
||||
-H "Authorization: token $GITEA_TOKEN" --upload-file "Asuro-$(git rev-parse --short HEAD).iso"
|
||||
@@ -1,13 +0,0 @@
|
||||
# Map all Aaron identities to a single preferred identity
|
||||
Aaron Hance <[email protected]> aaron <aaron@6dbc8c32-bb84-406f-8558-d1cf31a0ab0c>
|
||||
Aaron Hance <[email protected]> aaronhance <[email protected]>
|
||||
Aaron Hance <[email protected]> aaron hance <[email protected]>
|
||||
Aaron Hance <[email protected]> Aaron <[email protected]>
|
||||
|
||||
# Map all Kieron identities to a single preferred identity
|
||||
Kieron Morris <[email protected]> kieron <kieron@6dbc8c32-bb84-406f-8558-d1cf31a0ab0c>
|
||||
Kieron Morris <[email protected]> Kieron <[email protected]>
|
||||
Kieron Morris <[email protected]> t3hn3rd <[email protected]>
|
||||
|
||||
# Map goose's multiple identities
|
||||
goose <goose@6dbc8c32-bb84-406f-8558-d1cf31a0ab0c> goose <[email protected]>
|
||||
+1
-1
@@ -9,7 +9,7 @@ RUN apt-get update && apt-get install -y \
|
||||
apt-get clean my room
|
||||
|
||||
SHELL ["/bin/bash", "-c"]
|
||||
ARG FPC_VERSION=3.2.2
|
||||
ARG FPC_VERSION=2.6.4
|
||||
RUN curl -sL https://sourceforge.net/projects/freepascal/files/Linux/$FPC_VERSION/fpc-$FPC_VERSION.i386-linux.tar/download | tar -xf - && \
|
||||
pushd fpc-$FPC_VERSION.i386-linux && ./install.sh && popd && \
|
||||
rm -rf fpc-$FPC_VERSION.i386-linux
|
||||
|
||||
+1
-1
@@ -4,4 +4,4 @@ echo "======================="
|
||||
echo " "
|
||||
echo "Compiling FPC Sources..."
|
||||
echo " "
|
||||
fpc -Aelf -gw -g -gl -n -vlewn -O3 -OpPENTIUM3 -Si -Sc -Sg -Xd -CX -XXs -CfSSE -CfSSE2 -Rintel -Pi386 -Tlinux -FElib/ -Fusrc/* -Fusrc/driver/* -Fusrc/driver/net/* src/kernel.pas
|
||||
fpc -Aelf -gw -g -gl -n -vlewn -O3 -Op3 -Si -Sc -Sg -Xd -CX -XXs -CfSSE -CfSSE2 -Rintel -Pi386 -Tlinux -FElib/ -Fusrc/* -Fusrc/driver/* -Fusrc/driver/net/* src/kernel.pas
|
||||
@@ -34,14 +34,4 @@ SECTIONS
|
||||
}
|
||||
end = .; _end = .; __end = .;
|
||||
kernel_end = .;
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.init_array*)
|
||||
*(.fini_array*)
|
||||
*(.ctors)
|
||||
*(.dtors)
|
||||
*(.eh_frame*)
|
||||
*(.gcc_except_table*)
|
||||
*(.note.GNU-stack)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -1776,14 +1776,15 @@ var
|
||||
fb: puint32;
|
||||
|
||||
Begin
|
||||
Ready:= False;
|
||||
fb:= puint32(uint32(multibootinfo^.framebuffer_addr));
|
||||
Console_Properties.Width:= multibootinfo^.framebuffer_width;
|
||||
Console_Properties.Height:= multibootinfo^.framebuffer_height;
|
||||
Console_Properties.BitsPerPixel:= multibootinfo^.framebuffer_bpp;
|
||||
Console_Properties.MAX_CELL_X:= (Console_Properties.Width div 8) - 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;
|
||||
kpalloc(uint32(fb));
|
||||
keyboard.hook(@keyhook);
|
||||
|
||||
+23
@@ -291,6 +291,28 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure enableAVX();
|
||||
begin
|
||||
if CPUID.Capabilities1^.AVX then begin
|
||||
asm
|
||||
PUSH EAX
|
||||
PUSH ECX
|
||||
PUSH EDX
|
||||
XOR ECX, ECX
|
||||
db $0F
|
||||
db $01
|
||||
db $D0
|
||||
OR EAX, 7
|
||||
db $0F
|
||||
db $01
|
||||
db $D1
|
||||
POP EDX
|
||||
POP ECX
|
||||
POP EAX
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure init();
|
||||
begin
|
||||
terminal.registerCommand('CPU', @Terminal_Command_CPU, 'CPU Info.');
|
||||
@@ -300,6 +322,7 @@ begin
|
||||
getCPUCapabilities;
|
||||
getCPUClockSpeed;
|
||||
enableSSE;
|
||||
enableAVX;
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -58,19 +58,16 @@ begin
|
||||
end;
|
||||
|
||||
function sinb(port : uint16) : uint8;
|
||||
var
|
||||
tmp : uint8;
|
||||
begin
|
||||
asm
|
||||
PUSH EAX
|
||||
PUSH EDX
|
||||
MOV DX, port
|
||||
IN AL, DX
|
||||
MOV tmp, AL
|
||||
MOV sinb, AL
|
||||
POP EDX
|
||||
POP EAX
|
||||
end;
|
||||
sinb := tmp;
|
||||
io_wait;
|
||||
end;
|
||||
|
||||
|
||||
@@ -491,26 +491,22 @@ begin
|
||||
|
||||
{ Create a new header to the use in our DHCP REQUEST packet }
|
||||
SendHeader:= createHeader();
|
||||
CopyIPv4(@getIPv4Config^.Address[0], puint8(@SendHeader^.Client_IP[0]));
|
||||
CopyIPv4(puint8(@Header^.Your_IP[0]), puint8(@SendHeader^.Client_IP[0]));
|
||||
CopyIPv4(puint8(@Header^.Server_IP[0]), puint8(@SendHeader^.Server_IP[0]));
|
||||
processHeader(SendHeader);
|
||||
|
||||
{ Setup Options }
|
||||
SendOptions:= newOptions();
|
||||
|
||||
{ Create a message type option and assign it the value REQUEST }
|
||||
SendMsgType:= ord(TDHCPMessageType.REQUEST);
|
||||
NewOption(SendOptions, TDHCPOpCode.DHCP_MESSAGE_TYPE, void(@SendMsgType), 1, false);
|
||||
|
||||
{ Create a Requested IP option and assign it the value from the OFFER packet header }
|
||||
NewOption(SendOptions, TDHCPOpCode.REQUESTED_IP_ADDRESS, void(@Header^.Your_IP[0]), 4, false);
|
||||
|
||||
NewOption(SendOptions, TDHCPOpCode.REQUESTED_IP_ADDRESS, void(@SendHeader^.Client_IP[0]), 4, false);
|
||||
{ Create a Server Identifier Option and assign it the value from the OFFER packet options }
|
||||
Option:= getOptionByOpcode(Options, TDHCPOpCode.SERVER_IDENTIFIER);
|
||||
if Option <> nil then begin
|
||||
NewOption(SendOptions, TDHCPOpCode.SERVER_IDENTIFIER, void(@Option^.Value[0]), 4, false);
|
||||
end;
|
||||
|
||||
{ Create a Parameter Request List, Request the following: Netmask, Gateway, DNS Name & DNS Server }
|
||||
RequestParams[0]:= Ord(TDHCPOpCode.SUBNET_MASK);
|
||||
RequestParams[1]:= Ord(TDHCPOpCode.ROUTER);
|
||||
@@ -526,13 +522,9 @@ begin
|
||||
MAC:= getMAC();
|
||||
packetCtx:= PPacketContext(Kalloc(sizeof(TPacketContext)));
|
||||
packetCtx^.TTL:= 128;
|
||||
|
||||
{ Copy over MAC - src: broadcast - dst: DHCP Server }
|
||||
copyMAC(MAC, @packetCtx^.MAC.Source[0]);
|
||||
copyMAC(@BROADCAST_MAC[0], @packetCtx^.MAC.Destination[0]);
|
||||
|
||||
{ Copy over IP - src: NULL - dst: Broadcast }
|
||||
CopyIPv4(@getIPv4Config^.Address[0], @packetCtx^.IP.Source[0]);
|
||||
copyMAC(MAC, @packetCtx^.MAC.Source[0]);
|
||||
copyIPv4(@NULL_IP[0], @packetCtx^.IP.Source[0]);
|
||||
copyIPv4(@BROADCAST_IP[0], @packetCtx^.IP.Destination[0]);
|
||||
|
||||
{ Setup UDPContext (UDP) & copy in the correct details }
|
||||
@@ -578,7 +570,7 @@ begin
|
||||
|
||||
{ Check the frame is for us and then process }
|
||||
MAC:= getMAC;
|
||||
if MACEqual(@context^.PacketContext^.MAC.Destination[0], MAC) or MACEqual(@context^.PacketContext^.MAC.Destination[0], BROADCAST_MAC) then begin
|
||||
if MACEqual(@context^.PacketContext^.MAC.Destination[0], MAC) then begin
|
||||
Outputln('DHCP','Frame is addressed to us.');
|
||||
{ Check the message type is client specific }
|
||||
If Header^.Message_Type = $02 then begin
|
||||
@@ -663,7 +655,7 @@ begin
|
||||
copyMAC(@BROADCAST_MAC[0], @packetCtx^.MAC.Destination[0]);
|
||||
MAC:= getMAC;
|
||||
copyMAC(MAC, @packetCtx^.MAC.Source[0]);
|
||||
CopyIPv4(@getIPv4Config^.Address[0], @packetCtx^.IP.Source[0]);
|
||||
copyIPv4(@NULL_IP[0], @packetCtx^.IP.Source[0]);
|
||||
copyIPv4(@BROADCAST_IP[0], @packetCtx^.IP.Destination[0]);
|
||||
|
||||
{ Setup UDPContext (UDP) }
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
// 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->Doublebuffer - Implements a very basic double buffer, tested with VESA drivers.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit doublebuffer;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
lmemorymanager, tracer, videotypes, serial, util;
|
||||
|
||||
//Init the driver, and register with the video interface in a state ready for execution.
|
||||
procedure init(Register : FRegisterDriver);
|
||||
|
||||
implementation
|
||||
|
||||
function allocateBackBuffer(Width : uint32; Height : uint32; BitsPerPixel : uint8) : uint64;
|
||||
begin
|
||||
tracer.push_trace('doublebuffer.allocateBackBuffer.enter');
|
||||
//This doesn't currently work... Needs a rework of lmemorymanager
|
||||
allocateBackBuffer:= uint64(klalloc((Width * Height) * BitsPerPixel));
|
||||
tracer.push_trace('doublebuffer.allocateBackBuffer.exit');
|
||||
end;
|
||||
|
||||
procedure initBackBuffer(VInterface : PVideoInterface; Width : uint32; Height : uint32; BitsPerPixel : uint8);
|
||||
begin
|
||||
tracer.push_trace('doublebuffer.initBackBuffer.enter');
|
||||
if not(VInterface^.BackBuffer.Initialized) then begin
|
||||
VInterface^.BackBuffer.Location:= allocateBackBuffer(Width, Height, BitsPerPixel);
|
||||
if (VInterface^.BackBuffer.Location <> 0) then begin
|
||||
VInterface^.BackBuffer.Width:= Width;
|
||||
VInterface^.BackBuffer.Height:= Height;
|
||||
VInterface^.BackBuffer.BitsPerPixel:= BitsPerPixel;
|
||||
VInterface^.BackBuffer.Initialized:= True;
|
||||
end;
|
||||
end;
|
||||
tracer.push_trace('doublebuffer.initBackBuffer.exit');
|
||||
end;
|
||||
|
||||
procedure Flush(FrontBuffer : PVideoBuffer; BackBuffer : PVideoBuffer);
|
||||
var
|
||||
idx : uint32;
|
||||
Back,Front : uint32;
|
||||
BufferSize : uint32;
|
||||
|
||||
const
|
||||
//COPY_WIDTH = 64; //Use this for 64bit copies
|
||||
COPY_WIDTH = 128; //Use this for SSE copies
|
||||
|
||||
begin
|
||||
//tracer.push_trace('doublebuffer.Flush.enter');
|
||||
if not(BackBuffer^.Initialized) then exit;
|
||||
if ((FrontBuffer^.Width > BackBuffer^.Width) or (FrontBuffer^.Height > BackBuffer^.Height)) then exit;
|
||||
Back:= BackBuffer^.Location;
|
||||
Front:= FrontBuffer^.Location;
|
||||
BufferSize:= ( ( BackBuffer^.Width * BackBuffer^.Height * BackBuffer^.BitsPerPixel) div COPY_WIDTH ) - 1;
|
||||
for idx:=0 to BufferSize do begin
|
||||
//Front[idx]:= Back[idx];
|
||||
// -- TODO: Get SSE working here for 128bit copies --
|
||||
__SSE_128_memcpy(Back + (idx * 16), Front + (idx * 16));
|
||||
end;
|
||||
//tracer.push_trace('doublebuffer.Flush.exit');
|
||||
end;
|
||||
|
||||
function enable(VideoInterface : PVideoInterface) : boolean;
|
||||
begin
|
||||
tracer.push_trace('doublebuffer.enable.enter');
|
||||
enable:= false;
|
||||
initBackBuffer(VideoInterface, VideoInterface^.FrontBuffer.Width, VideoInterface^.FrontBuffer.Height, VideoInterface^.FrontBuffer.BitsPerPixel);
|
||||
if VideoInterface^.BackBuffer.Initialized then begin
|
||||
VideoInterface^.DefaultBuffer:= @VideoInterface^.BackBuffer;
|
||||
VideoInterface^.DrawRoutines.Flush:= @Flush;
|
||||
enable:= true;
|
||||
end;
|
||||
tracer.push_trace('doublebuffer.enable.exit');
|
||||
end;
|
||||
|
||||
procedure init(Register : FRegisterDriver);
|
||||
begin
|
||||
tracer.push_trace('doublebuffer.init.enter');
|
||||
Register('BASIC_DOUBLE_BUFFER', @enable);
|
||||
tracer.push_trace('doublebuffer.init.exit');
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,87 @@
|
||||
// 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 - VESA Display Driver.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit vesa;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
videotypes, tracer, multiboot, lmemorymanager;
|
||||
|
||||
//Init the driver, and register with the video interface in a state ready for execution.
|
||||
procedure init(Register : FRegisterDriver);
|
||||
|
||||
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.exit');
|
||||
end;
|
||||
|
||||
procedure initVESAFrameBuffer(VideoBuffer : PVideoBuffer; Location : uint64; Width : uint32; Height : uint32; BitsPerPixel : uint8);
|
||||
begin
|
||||
tracer.push_trace('VESA.initVESAFrameBuffer.enter');
|
||||
if not(VideoBuffer^.Initialized) then begin
|
||||
VideoBuffer^.Location:= Location;
|
||||
VideoBuffer^.BitsPerPixel:= BitsPerPixel;
|
||||
VideoBuffer^.Width:= Width;
|
||||
VideoBuffer^.Height:= Height;
|
||||
allocateVESAFrameBuffer(VideoBuffer^.Location, VideoBuffer^.Width, VideoBuffer^.Height);
|
||||
if VideoBuffer^.Location <> 0 then
|
||||
VideoBuffer^.Initialized:= True;
|
||||
end;
|
||||
tracer.push_trace('VESA.initVESAFrameBuffer.exit');
|
||||
end;
|
||||
|
||||
function enable(VideoInterface : PVideoInterface) : boolean;
|
||||
begin
|
||||
tracer.push_trace('VESA.enable.enter');
|
||||
initVESAFrameBuffer(@VideoInterface^.FrontBuffer, multiboot.multibootinfo^.framebuffer_addr, multiboot.multibootinfo^.framebuffer_width, multiboot.multibootinfo^.framebuffer_height, multiboot.multibootinfo^.framebuffer_bpp);
|
||||
case (VideoInterface^.FrontBuffer.BitsPerPixel) of
|
||||
08:VESA8.init(@VideoInterface^.DrawRoutines);
|
||||
16:VESA16.init(@VideoInterface^.DrawRoutines);
|
||||
24:VESA24.init(@VideoInterface^.DrawRoutines);
|
||||
32:VESA32.init(@VideoInterface^.DrawRoutines);
|
||||
end;
|
||||
enable:= VideoInterface^.FrontBuffer.Initialized;
|
||||
tracer.push_trace('VESA.enable.exit');
|
||||
end;
|
||||
|
||||
procedure init(Register : FRegisterDriver);
|
||||
begin
|
||||
tracer.push_trace('VESA.init.enter');
|
||||
if Register <> nil then
|
||||
Register('VESA', @enable);
|
||||
tracer.push_trace('VESA.init.exit');
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,43 @@
|
||||
// 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 for the VESA Driver.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit vesa16;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
videotypes, vesa, tracer, color;
|
||||
|
||||
//Init the draw routines by providing what we support through the DrawRoutines struct.
|
||||
procedure init(DrawRoutines : PDrawRoutines);
|
||||
|
||||
implementation
|
||||
|
||||
procedure DrawPixel(Buffer : PVideoBuffer; X : uint32; Y : uint32; Pixel : TRGB32);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure init(DrawRoutines : PDrawRoutines);
|
||||
begin
|
||||
tracer.push_trace('vesa16.init.enter');
|
||||
tracer.push_trace('vesa16.init.exit');
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,43 @@
|
||||
// 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 for the VESA Driver.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit vesa24;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
videotypes, vesa, tracer, color;
|
||||
|
||||
//Init the draw routines by providing what we support through the DrawRoutines struct.
|
||||
procedure init(DrawRoutines : PDrawRoutines);
|
||||
|
||||
implementation
|
||||
|
||||
procedure DrawPixel(Buffer : PVideoBuffer; X : uint32; Y : uint32; Pixel : TRGB32);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure init(DrawRoutines : PDrawRoutines);
|
||||
begin
|
||||
tracer.push_trace('vesa24.init.enter');
|
||||
tracer.push_trace('vesa24.init.exit');
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,52 @@
|
||||
// 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 for the VESA Driver.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit vesa32;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
videotypes, vesa, tracer, color;
|
||||
|
||||
//Init the draw routines by providing what we support through the DrawRoutines struct.
|
||||
procedure init(DrawRoutines : PDrawRoutines);
|
||||
|
||||
implementation
|
||||
|
||||
procedure DrawPixel(Buffer : PVideoBuffer; X : uint32; Y : uint32; Pixel : TRGB32);
|
||||
var
|
||||
Location : PuInt32;
|
||||
LocationIndex : Uint32;
|
||||
|
||||
begin
|
||||
//tracer.push_trace('vesa32.DrawPixel.enter');
|
||||
Location:= Puint32(Buffer^.Location);
|
||||
LocationIndex:= (Y * Buffer^.Width) + X;
|
||||
Location[LocationIndex]:= uint32(Pixel);
|
||||
//tracer.push_trace('vesa32.DrawPixel.exit');
|
||||
end;
|
||||
|
||||
procedure init(DrawRoutines : PDrawRoutines);
|
||||
begin
|
||||
tracer.push_trace('vesa32.init.enter');
|
||||
DrawRoutines^.DrawPixel:= @DrawPixel;
|
||||
tracer.push_trace('vesa32.init.exit');
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,43 @@
|
||||
// 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 for the VESA Driver.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit vesa8;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
videotypes, vesa, tracer, color;
|
||||
|
||||
//Init the draw routines by providing what we support through the DrawRoutines struct.
|
||||
procedure init(DrawRoutines : PDrawRoutines);
|
||||
|
||||
implementation
|
||||
|
||||
procedure DrawPixel(Buffer : PVideoBuffer; X : uint32; Y : uint32; Pixel : TRGB32);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure init(DrawRoutines : PDrawRoutines);
|
||||
begin
|
||||
tracer.push_trace('vesa8.init.enter');
|
||||
tracer.push_trace('vesa8.init.exit');
|
||||
end;
|
||||
|
||||
end.
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,92 @@
|
||||
// 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->Videotypes - Provides types relating to the video framework & driver interface.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit videotypes;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
color;
|
||||
|
||||
type
|
||||
//Arbitrary pointer to a raw video buffer in memory
|
||||
VideoBuffer = uint32;
|
||||
|
||||
//Struct representing a Memory Mapped Video Buffer
|
||||
TVideoBuffer = record
|
||||
//Has this buffer been initialized? Has it been paged/created in memory?
|
||||
Initialized : Boolean;
|
||||
//Location of the video buffer in memory as a QWORD.
|
||||
Location : VideoBuffer;
|
||||
//How many bits per pixel?
|
||||
BitsPerPixel : uint8;
|
||||
//Width of the buffer.
|
||||
Width : uint32;
|
||||
//Height of the buffer.
|
||||
Height : uint32;
|
||||
end;
|
||||
//Pointer to a video buffer
|
||||
PVideoBuffer = ^TVideoBuffer;
|
||||
|
||||
//(Abstract) Draw a pixel to screenspace
|
||||
FDrawPixel = procedure(Buffer : PVideoBuffer; X : uint32; Y : uint32; Pixel : TRGB32);
|
||||
//(Abstract) Flush backbuffer to MMIO Buffer
|
||||
FFlush = procedure(FrontBuffer : PVideoBuffer; BackBuffer : PVideoBuffer);
|
||||
//(Abstract) Draw a line to the screen
|
||||
FDrawLine = procedure(Buffer : PVideoBuffer; x1,y1,x2,y2 : uint32; thickness : uint32; Color : TRGB32);
|
||||
//(Abstract) Draw a rect to the screen
|
||||
FDrawRect = procedure(Buffer : PVideoBuffer; x1,y1,x2,y2 : uint32; line_thickness : uint32; Color : TRGB32);
|
||||
//(Abstract) Draw a filled rect to the screen
|
||||
FFillRect = procedure(Buffer : PVideoBuffer; x1,y1,x2,y2 : uint32; line_thickness : uint32; Line_Color : TRGB32; Fill_Color : TRGB32);
|
||||
|
||||
//Routines for drawing to the screen
|
||||
TDrawRoutines = record
|
||||
DrawPixel : FDrawPixel;
|
||||
Flush : FFlush;
|
||||
DrawLine : FDrawLine;
|
||||
DrawRect : FDrawRect;
|
||||
FillRect : FFillRect;
|
||||
end;
|
||||
//Pointer to drawing routines
|
||||
PDrawRoutines = ^TDrawRoutines;
|
||||
|
||||
//Struct representing the whole video driver.
|
||||
TVideoInterface = record
|
||||
//Default buffer to be used when rendering, front buffer for no double buffering, back buffer otherwise.
|
||||
DefaultBuffer : PVideoBuffer;
|
||||
//Memory Mapped IO Buffer for raw rasterization.
|
||||
FrontBuffer : TVideoBuffer;
|
||||
//Back buffer used for double buffering, this is flushed to FrontBuffer with flush();
|
||||
BackBuffer : TVideoBuffer;
|
||||
//Drawing Routines
|
||||
DrawRoutines : TDrawRoutines;
|
||||
end;
|
||||
//Pointer to a video interface struct.
|
||||
PVideoInterface = ^TVideoInterface;
|
||||
|
||||
//(Abstract) Enable method for a driver, called from video to enable driver.
|
||||
FEnableDriver = function(VideoInterface : PVideoInterface) : boolean;
|
||||
//(Abstract) Register driver, called from a driver to register with the video interface.
|
||||
FRegisterDriver = function(DriverIdentifier : pchar; EnableCallback : FEnableDriver) : boolean;
|
||||
//(Abstract) Init driver, called from _somewhere_ to start the driver and register it with the video interface.
|
||||
FInitDriver = procedure(Register : FRegisterDriver);
|
||||
|
||||
implementation
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,63 @@
|
||||
// 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.
|
||||
|
||||
{
|
||||
Include->Color - Provides types relating to color/graphics.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit color;
|
||||
|
||||
interface
|
||||
|
||||
type
|
||||
TRGB32 = bitpacked record
|
||||
B : uint8;
|
||||
G : uint8;
|
||||
R : uint8;
|
||||
A : uint8;
|
||||
end;
|
||||
PRGB32 = ^TRGB32;
|
||||
|
||||
TRGB24 = bitpacked record
|
||||
B : uint8;
|
||||
G : uint8;
|
||||
R : uint8;
|
||||
end;
|
||||
PRGB23 = ^TRGB24;
|
||||
|
||||
TRGB16 = bitpacked record
|
||||
B : UBit5;
|
||||
G : UBit6;
|
||||
R : UBit5;
|
||||
end;
|
||||
PRGB16 = ^TRGB16;
|
||||
|
||||
TRGB8 = bitpacked record
|
||||
B : UBit2;
|
||||
G : UBit4;
|
||||
R : UBit2;
|
||||
end;
|
||||
PRGB8 = ^TRGB8;
|
||||
|
||||
const
|
||||
black : TRGB32 = (B: 000; G: 000; R: 000; A: 000);
|
||||
white : TRGB32 = (B: 255; G: 255; R: 255; A: 000);
|
||||
red : TRGB32 = (B: 000; G: 000; R: 255; A: 000);
|
||||
green : TRGB32 = (B: 000; G: 255; R: 000; A: 000);
|
||||
blue : TRGB32 = (B: 255; G: 000; R: 000; A: 000);
|
||||
|
||||
implementation
|
||||
|
||||
end.
|
||||
+238
-1110
File diff suppressed because it is too large
Load Diff
+1
-348
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user