Compare commits
41
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8be364c990 | ||
|
|
0e2c6b2936 | ||
|
|
632c3fa66b | ||
|
|
875e3e4765 | ||
|
|
e28d68128d | ||
|
|
a9969d58f8 | ||
|
|
d7a54d858d | ||
|
|
4e991c3e6f | ||
|
|
a3217de71a | ||
|
|
19b433a19f | ||
|
|
69d1d22a18 | ||
|
|
5c15343ed0 | ||
|
|
3ae349fbc8 | ||
|
|
78c060c114 | ||
|
|
cd925e96c2 | ||
|
|
142dd486dd | ||
|
|
beeeabd441 | ||
|
|
b73c66f6d6 | ||
|
|
189526cab8 | ||
|
|
595dd4fbac | ||
|
|
ba6d8037d2 | ||
|
|
208bda92c8 | ||
|
|
a7111d3cac | ||
|
|
d182fd7f46 | ||
|
|
4c5038b001 | ||
|
|
98481ea1ce | ||
|
|
b5582b1284 | ||
|
|
346dc4e4c9 | ||
|
|
b2eee58df4 | ||
|
|
161cea4920 | ||
|
|
6b81c4ece0 | ||
|
|
ee17f69115 | ||
|
|
81c19bff16 | ||
|
|
e7cda58113 | ||
|
|
44f18554e1 | ||
|
|
52b42ec975 | ||
|
|
2815dd9e4d | ||
|
|
d057bfc3ff | ||
|
|
e4621c8aaa | ||
|
|
170b93dd69 | ||
|
|
34d6873a6a |
+52
@@ -0,0 +1,52 @@
|
||||
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"
|
||||
+1
-2
@@ -10,5 +10,4 @@
|
||||
/*.sh~
|
||||
/*.img
|
||||
src/include/asuro.pas
|
||||
.vscode/launch.json
|
||||
.vscode
|
||||
localenv.json
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
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
|
||||
- ln -s doc public
|
||||
allow_failure: true
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
- ./sources.list
|
||||
needs:
|
||||
- versions
|
||||
Vendored
+3
-10
@@ -3,18 +3,11 @@
|
||||
{
|
||||
"name":"Run",
|
||||
"request": "launch",
|
||||
"type": "coreclr",
|
||||
"type": "PowerShell",
|
||||
"preLaunchTask": "Build",
|
||||
"program": "VBoxSDL",
|
||||
"args": [
|
||||
"--comment",
|
||||
"Asuro",
|
||||
"--startvm",
|
||||
"7d395c96-891c-4139-b77d-9b6b144b0b93"
|
||||
],
|
||||
"script": "${workspaceFolder}/virtualbox-wrapper.ps1",
|
||||
"args": ["-Command", "up"],
|
||||
"cwd": "${workspaceFolder}",
|
||||
"console": "internalConsole",
|
||||
"internalConsoleOptions": "neverOpen"
|
||||
}
|
||||
]
|
||||
}
|
||||
Vendored
+24
-2
@@ -9,14 +9,18 @@
|
||||
"command": "docker-compose",
|
||||
"args": [
|
||||
"run",
|
||||
"builder"
|
||||
"builder",
|
||||
],
|
||||
"type": "shell",
|
||||
"problemMatcher": [],
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
"dependsOn": [
|
||||
"Close VirtualBox",
|
||||
"Clean"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Build (Builder)",
|
||||
@@ -26,6 +30,24 @@
|
||||
"builder"
|
||||
],
|
||||
"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
@@ -16,7 +16,7 @@ RUN curl -sL https://sourceforge.net/projects/freepascal/files/Linux/$FPC_VERSIO
|
||||
|
||||
COPY compile.sh /compile.sh
|
||||
ADD https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver /usr/bin/semver
|
||||
RUN mkdir /code && chmod +x /usr/bin/semver
|
||||
RUN chmod +x /usr/bin/semver
|
||||
WORKDIR /code
|
||||
RUN find . -type f -print0 | xargs -0 dos2unix
|
||||
ENTRYPOINT ["/bin/bash", "-c"]
|
||||
|
||||
+18
-14
@@ -20,26 +20,30 @@ runOrFail() {
|
||||
fi
|
||||
}
|
||||
|
||||
runOrFail $(pwd)/compile_stub.sh "Failed to compile stub!"
|
||||
declare -a run_steps=(
|
||||
"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!"
|
||||
)
|
||||
|
||||
#Generate .pas with versioning headers.
|
||||
runOrFail $(pwd)/compile_vergen.sh "Versions failed to compile"
|
||||
|
||||
#Compile all .pas sources
|
||||
runOrFail $(pwd)/compile_sources.sh "Failed to compile FPC Sources!"
|
||||
|
||||
#Link into a binary.
|
||||
runOrFail $(pwd)/compile_link.sh "Failed linking!"
|
||||
|
||||
#Generate an ISO with GRUB as the Bootloader.
|
||||
runOrFail ./compile_isogen.sh "Failed to create ISO!"
|
||||
for ((i=0; i<${#run_steps[@]}; i+=2))
|
||||
do
|
||||
if [ "$ERRCOUNT" -eq "0" ]
|
||||
then
|
||||
script=$(pwd)/"${run_steps[$i]}"
|
||||
message="${run_steps[$i+1]}"
|
||||
runOrFail "$script" "$message"
|
||||
fi
|
||||
done
|
||||
|
||||
#Call generate final artifacts based on failure or success of the above.
|
||||
if [ "$ERRCOUNT" -ne "0" ]
|
||||
then
|
||||
./compile_finish.sh "failed"
|
||||
. ./compile_finish.sh "failed"
|
||||
else
|
||||
./compile_finish.sh "success"
|
||||
. ./compile_finish.sh "success"
|
||||
fi
|
||||
|
||||
cd ..
|
||||
+1
-1
@@ -4,4 +4,4 @@ echo "======================="
|
||||
echo " "
|
||||
echo "Compiling FPC Sources..."
|
||||
echo " "
|
||||
fpc -Aelf -gw -n -va -O3 -Op3 -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
|
||||
@@ -1,4 +1,3 @@
|
||||
version: "3.9"
|
||||
services:
|
||||
builder:
|
||||
build: .
|
||||
|
||||
+2
-1
@@ -2,7 +2,7 @@ ENTRY(loader)
|
||||
SECTIONS
|
||||
{
|
||||
. = 0xC0100000;
|
||||
|
||||
kernel_start = .;
|
||||
.text : AT(ADDR(.text) - 0xC0000000)
|
||||
{
|
||||
text = .; _text = .; __text = .;
|
||||
@@ -33,4 +33,5 @@ SECTIONS
|
||||
. = ALIGN(4096);
|
||||
}
|
||||
end = .; _end = .; __end = .;
|
||||
kernel_end = .;
|
||||
}
|
||||
|
||||
@@ -13,8 +13,8 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f
|
||||
I don't think this needs an explaination.
|
||||
* [VSCode (Optional, but highly recommended)](https://code.visualstudio.com/)
|
||||
Visual Studio code is our IDE of choice, and we have a number of recommended plugins.
|
||||
* [C# Plugin by Microsoft](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp)
|
||||
This plugin gives you the ability to use the 'coreclr' task type, allowing the automatic launching of virtualbox with the resulting image generated during compilation of Asuro.
|
||||
* [PowerShell Plugin by Microsoft](https://marketplace.visualstudio.com/items?itemName=ms-vscode.powershell)
|
||||
This plugin gives you the ability to use the 'PowerShell' task type, allowing the automatic launching of virtualbox with the resulting image generated during compilation of Asuro.
|
||||
* [VirtualBox](https://www.virtualbox.org/)
|
||||
Virtualbox is our Virtualisation environment of choice, don't ask why, it just is.
|
||||
|
||||
@@ -27,15 +27,15 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f
|
||||
3. Install Docker for Windows.
|
||||
4. Install Git for Windows.
|
||||
5. Install VSCode & the listed plugins.
|
||||
6. Install VirtualBox.
|
||||
6. Install VirtualBox (v7+).
|
||||
7. Clone this repository.
|
||||
8. Run the following command in the root of the repo to build the docker image:
|
||||
```powershell
|
||||
docker-compose build builder
|
||||
docker compose build builder
|
||||
```
|
||||
9. Run the following command to compile Asuro:
|
||||
```powershell
|
||||
docker-compose run builder
|
||||
docker compose run builder
|
||||
```
|
||||
10. Create a new virtual machine in Virtualbox and mount the `Asuro.iso` generated in step 9 as a boot image.
|
||||
11. Add the virtualbox installation directory to your `%PATH%` environment variable, usually:
|
||||
@@ -50,32 +50,29 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f
|
||||
```xml
|
||||
<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` and replace the uuid found in `.vscode\launch.json` under `args`, so that it looks something like this:
|
||||
Copy the uuid, in our case `7d395c96-891c-4139-b77d-9b6b144b0b93` & create a `localenv.json` file in the project root with the following content:
|
||||
```json
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name":"Run",
|
||||
"request": "launch",
|
||||
"type": "coreclr",
|
||||
"preLaunchTask": "Build",
|
||||
"program": "VBoxSDL",
|
||||
"args": [
|
||||
"--comment",
|
||||
"Asuro",
|
||||
"--startvm",
|
||||
"<YOUR UUID HERE>"
|
||||
],
|
||||
"cwd": "${workspaceFolder}",
|
||||
"console": "internalConsole",
|
||||
"internalConsoleOptions": "neverOpen"
|
||||
}
|
||||
]
|
||||
"VirtualBox":{
|
||||
"MachineName":"<YOUR_UUID_OR_MACHINE_NAME>"
|
||||
}
|
||||
}
|
||||
```
|
||||
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.
|
||||
14. Congratulations! You can now play with Asuro!
|
||||
|
||||
### Gotchas
|
||||
- It was noted that Windows builds above `20H2` seem to have issues installing WSL2. We may have to wait for a patch from Microsoft to fix this. Our devs are currently using build `20H2`.
|
||||
### Notes & Gotchas
|
||||
- The above process has been updated to be compatible with VirtualBox 7+, in which VBoxSDL was removed and vboxmanage should be used in its place. A small wrapper powershell script is used to achieve this.
|
||||
- It was noted that Windows builds above `20H2` seem to have issues installing WSL2. We may have to wait for a patch from Microsoft to fix this. Our devs are currently using build `20H2`.
|
||||
|
||||
+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.
|
||||
@@ -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
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user