Compare commits

..
Author SHA1 Message Date
t3hn3rd 07106b9aed Merge pull request 'VirtualBox 7 Compatability Changes' (#1) from feature/virtualbox-7-compatibility into develop
Reviewed-on: #1
2025-03-08 19:19:40 +00:00
t3hn3rd 25df276101 VirtualBox 7 Compatability Changes
- Created a PowerShell script `virtualbox-wrapper.ps1` to wrap calls to vboxmanage and only exit once the virtual machine has been terminated.
- Updated launch.json to use the PowerShell launch type to launch `virtualbox-wrapper.ps1` with the machine name supplied as an argument.
- Updated `readme.md` to reflect these changes.
2025-03-08 18:59:12 +00:00
26 changed files with 123 additions and 1212 deletions

No files matched your search

-52
View File
@@ -1,52 +0,0 @@
kind: pipeline
type: docker
name: build
steps:
- name: build-image
image: plugins/docker
settings:
repo: t3hn3rd/asuro-build
tags: latest
dockerfile: Dockerfile
registry: docker.io
username:
from_secret: docker_username
password:
from_secret: docker_password
- name: compile
image: t3hn3rd/asuro-build:latest
depends_on:
- build-image
commands:
- git fetch --tags
- 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:
- compile
when:
branch:
- master
environment:
GITEA_TOKEN:
from_secret: gitea_token
commands:
- apk add --no-cache curl
- chmod +w Asuro.iso
- cp Asuro.iso "Asuro-$(git rev-parse --short HEAD).iso"
- echo "Uploading Asuro-$(git rev-parse --short HEAD).iso to Gitea Packages..."
- |
curl -X PUT "https://gitea.spexeah.com/api/packages/Spexeah/generic/asuro-iso/$(git rev-parse --short HEAD)/Asuro.iso" \
-H "Authorization: token $GITEA_TOKEN" --upload-file "Asuro-$(git rev-parse --short HEAD).iso"
- echo "Updating latest ISO reference..."
- |
curl -X DELETE https://gitea.spexeah.com/api/packages/Spexeah/generic/asuro-iso/latest/Asuro.iso \
-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"
+2 -1
View File
@@ -10,4 +10,5 @@
/*.sh~ /*.sh~
/*.img /*.img
src/include/asuro.pas src/include/asuro.pas
localenv.json .vscode/launch.json
.vscode
+73
View File
@@ -0,0 +1,73 @@
stages:
- Compile Versions
- Compile Sources
- Link
- Generate Documentation
- Deploy
cache:
- key: ${CI_COMMIT_REF_SLUG}
paths:
- lib/*.o
- bin/kernel.bin
- doc
before_script:
- chmod +x *.sh
versions:
stage: Compile Versions
script:
- ./compile_vergen.sh
artifacts:
paths:
- release/*.svg
- src/include/asuro.pas
compile_sources:
stage: Compile Sources
script:
- rm -f lib/*.so
- ./compile_sources.sh
needs:
- versions
link:
stage: Link
script:
- ./compile_stub.sh
- ./compile_link.sh
needs:
- versions
- compile_sources
isogen:
stage: Deploy
script:
- ./compile_isogen.sh
- ./compile_sumgen.sh
artifacts:
paths:
- ./Asuro.iso
- ./release/checksum.svg
needs:
- link
docgen:
stage: Generate Documentation
only:
- master
- develop
script:
- ./compile_sourcelist.sh
- ./compile_docs.sh
# Remove comments when we want to use gitlab pages.
#- cp doc public
allow_failure: true
artifacts:
paths:
- doc
#- public/*
#- ./sources.list
needs:
- versions
+1 -1
View File
@@ -6,7 +6,7 @@
"type": "PowerShell", "type": "PowerShell",
"preLaunchTask": "Build", "preLaunchTask": "Build",
"script": "${workspaceFolder}/virtualbox-wrapper.ps1", "script": "${workspaceFolder}/virtualbox-wrapper.ps1",
"args": ["-Command", "up"], "args": ["-MachineName", "7d395c96-891c-4139-b77d-9b6b144b0b93"],
"cwd": "${workspaceFolder}", "cwd": "${workspaceFolder}",
} }
] ]
+2 -24
View File
@@ -9,18 +9,14 @@
"command": "docker-compose", "command": "docker-compose",
"args": [ "args": [
"run", "run",
"builder", "builder"
], ],
"type": "shell", "type": "shell",
"problemMatcher": [], "problemMatcher": [],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
}, }
"dependsOn": [
"Close VirtualBox",
"Clean"
]
}, },
{ {
"label": "Build (Builder)", "label": "Build (Builder)",
@@ -30,24 +26,6 @@
"builder" "builder"
], ],
"type": "shell" "type": "shell"
},
{
"label": "Clean",
"command": "docker-compose",
"args": [
"down",
"--remove-orphans"
],
"type": "shell"
},
{
"label": "Close VirtualBox",
"command": "./virtualbox-wrapper.ps1",
"args": [
"-Command",
"down"
],
"type": "shell"
} }
] ]
} }
+1 -1
View File
@@ -16,7 +16,7 @@ RUN curl -sL https://sourceforge.net/projects/freepascal/files/Linux/$FPC_VERSIO
COPY compile.sh /compile.sh COPY compile.sh /compile.sh
ADD https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver /usr/bin/semver ADD https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver /usr/bin/semver
RUN chmod +x /usr/bin/semver RUN mkdir /code && chmod +x /usr/bin/semver
WORKDIR /code WORKDIR /code
RUN find . -type f -print0 | xargs -0 dos2unix RUN find . -type f -print0 | xargs -0 dos2unix
ENTRYPOINT ["/bin/bash", "-c"] ENTRYPOINT ["/bin/bash", "-c"]
+14 -18
View File
@@ -20,30 +20,26 @@ runOrFail() {
fi fi
} }
declare -a run_steps=( runOrFail $(pwd)/compile_stub.sh "Failed to compile stub!"
"compile_stub.sh" "Failed to compile stub!"
"compile_vergen.sh" "Versions failed to compile"
"compile_sources.sh" "Failed to compile FPC Sources!"
"compile_link.sh" "Failed linking!"
"compile_isogen.sh" "Failed to create ISO!"
)
for ((i=0; i<${#run_steps[@]}; i+=2)) #Generate .pas with versioning headers.
do runOrFail $(pwd)/compile_vergen.sh "Versions failed to compile"
if [ "$ERRCOUNT" -eq "0" ]
then #Compile all .pas sources
script=$(pwd)/"${run_steps[$i]}" runOrFail $(pwd)/compile_sources.sh "Failed to compile FPC Sources!"
message="${run_steps[$i+1]}"
runOrFail "$script" "$message" #Link into a binary.
fi runOrFail $(pwd)/compile_link.sh "Failed linking!"
done
#Generate an ISO with GRUB as the Bootloader.
runOrFail ./compile_isogen.sh "Failed to create ISO!"
#Call generate final artifacts based on failure or success of the above. #Call generate final artifacts based on failure or success of the above.
if [ "$ERRCOUNT" -ne "0" ] if [ "$ERRCOUNT" -ne "0" ]
then then
. ./compile_finish.sh "failed" ./compile_finish.sh "failed"
else else
. ./compile_finish.sh "success" ./compile_finish.sh "success"
fi fi
cd .. cd ..
+1
View File
@@ -1,3 +1,4 @@
version: "3.9"
services: services:
builder: builder:
build: . build: .
+12 -15
View File
@@ -50,26 +50,23 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f
```xml ```xml
<Machine uuid="{7d395c96-891c-4139-b77d-9b6b144b0b93}" name="Asuro" OSType="Linux" snapshotFolder="Snapshots" lastStateChange="2021-06-20T20:33:07Z"> <Machine uuid="{7d395c96-891c-4139-b77d-9b6b144b0b93}" name="Asuro" OSType="Linux" snapshotFolder="Snapshots" lastStateChange="2021-06-20T20:33:07Z">
``` ```
Copy the uuid, in our case `7d395c96-891c-4139-b77d-9b6b144b0b93` & create a `localenv.json` file in the project root with the following content: Copy the uuid, in our case `7d395c96-891c-4139-b77d-9b6b144b0b93` and replace the uuid found in `.vscode\launch.json` under `args`, so that it looks something like this:
```json ```json
{ {
"VirtualBox":{ "configurations": [
"MachineName":"<YOUR_UUID_OR_MACHINE_NAME>" {
} "name":"Run",
"request": "launch",
"type": "PowerShell",
"preLaunchTask": "Build",
"script": "${workspaceFolder}/virtualbox-wrapper.ps1",
"args": ["-MachineName", "7d395c96-891c-4139-b77d-9b6b144b0b93"],
"cwd": "${workspaceFolder}",
}
]
} }
``` ```
This will allow VSCode to automatically launch VirtualBox once Asuro has been compiled. This will allow VSCode to automatically launch VirtualBox once Asuro has been compiled.
You can also enable the serial adapter "COM1" in mode "Raw File", give it a path, and provide this path in the `localenv.json` as follows:
```json
{
"VirtualBox" : {
"MachineName": "<YOUR_UUID_OR_MACHINE_NAME>",
"LogLocation": "Fully\\Qualified\\Path\\To\\Your\\Log\\File"
}
}
```
This will allow you to see the console output from Asuro in your host terminal.
13. Open your project folder in VSCode, use CTRL+SHIFT+B to build & F5 to build + run in VBox. 13. Open your project folder in VSCode, use CTRL+SHIFT+B to build & F5 to build + run in VBox.
14. Congratulations! You can now play with Asuro! 14. Congratulations! You can now play with Asuro!
+2 -3
View File
@@ -1776,15 +1776,14 @@ 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 begin If Console_Properties.BitsPerPixel <> 16 then while true do begin
exit;
end; end;
kpalloc(uint32(fb)); kpalloc(uint32(fb));
keyboard.hook(@keyhook); keyboard.hook(@keyhook);
-23
View File
@@ -291,28 +291,6 @@ begin
end; end;
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(); procedure init();
begin begin
terminal.registerCommand('CPU', @Terminal_Command_CPU, 'CPU Info.'); terminal.registerCommand('CPU', @Terminal_Command_CPU, 'CPU Info.');
@@ -322,7 +300,6 @@ begin
getCPUCapabilities; getCPUCapabilities;
getCPUClockSpeed; getCPUClockSpeed;
enableSSE; enableSSE;
enableAVX;
end; end;
end. end.
-100
View File
@@ -1,100 +0,0 @@
// 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.
-87
View File
@@ -1,87 +0,0 @@
// 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.
-43
View File
@@ -1,43 +0,0 @@
// 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.
-43
View File
@@ -1,43 +0,0 @@
// 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.
-52
View File
@@ -1,52 +0,0 @@
// 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.
-43
View File
@@ -1,43 +0,0 @@
// 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
-92
View File
@@ -1,92 +0,0 @@
// 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.
-63
View File
@@ -1,63 +0,0 @@
// 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.
Loaded 20 of 26 files, more files were not shown because too many files have changed in this diff. Show more