Compare commits

..

42 Commits

Author SHA1 Message Date
1145b900e4 Merge pull request 'Virtualbox-Wrapper - Bugfix' (#8) from feature/Virtualbox-Wrapper-Fix into develop
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #8
Reviewed-by: Aaron Hance <ah@aaronhance.me>
2025-03-23 19:01:28 +00:00
436cd86d8c Updated virtualbox wrapper as it was causing stale powershell processes to build up over time
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
- Updated `Virtualbox-Wrapper.ps1` to include `Get-Job | Stop-Job | Remove-Job -Force` at the end of execution, as the spawning of jobs was causing stale PowerShell processes to build up over time.
2025-03-23 17:54:55 +00:00
540444dfbf Merge pull request 'feature/drone-discord-webhooks' (#7) from feature/drone-discord-webhooks into develop
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #7
2025-03-23 15:21:58 +00:00
2d7c51ed15 Further formatting cleanups
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
- Attempted to remove automatic discord embeds by surrounding any markdown links with `<` `>`.
- Corrected some spacing.
2025-03-23 01:14:28 +00:00
c842d9774f Formatting Fixed - Enchancing
All checks were successful
continuous-integration/drone/push Build is passing
- Formatting is now fixed & newlines are working correctly, shame the YAML looks w?*! 🤣
- Added sections to the message for links to Gitea & Drone.
2025-03-23 00:59:36 +00:00
5963504f6b More attempts at format fixes
All checks were successful
continuous-integration/drone/push Build is passing
Formatting still off, condensing to one line to see if the escaped newlines will work. YAML is wild.
2025-03-23 00:48:31 +00:00
e64a59714a Formatting Fixes
All checks were successful
continuous-integration/drone/push Build is passing
Formatting was off for the message posted to Discord, it also triggered at the start of the pipeline.
- Fixed formatting with an attempt to use newlines.
- Added a depends_on `compile`.
2025-03-23 00:41:22 +00:00
dd5d908e43 DroneCI config updated to push to discord webhook
All checks were successful
continuous-integration/drone/push Build is passing
- `.drone.yml` updated to push notifications to the discord webhook.
2025-03-23 00:31:20 +00:00
28846af43c Merge pull request 'feature/dynamic-lists' (#6) from feature/dynamic-lists into develop
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #6
Reviewed-by: t3hn3rd <kjm@kieronmorris.me>
2025-03-22 19:24:52 +00:00
b1e3953960 Merge pull request 'Fixed a DHCP bug' (#5) from feature/DHCP-BugFix into develop
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #5
2025-03-22 19:13:25 +00:00
7e00e23801 Fixed and expanded dynamic lists, commented whole file 2025-03-22 19:02:43 +00:00
bd12bbe862 DevOps Workflow Improvements 2025-03-22 18:42:44 +00:00
48c203f028 Fixed a DHCP bug
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
- Fixed a bug within `dhcp.pas` - `processPacket_OFFER` in which the client was responding with the client IP value within the DHCP header was incorrectly being filled out with the IP being requested & this value was then being used within the REQUESTED_IP_ADDRESS option. Corrected this to fill out the client IP with the currently configured IP, which will be NULL (0.0.0.0) on boot, and whatever is issued thereafter.
- Cascaded the change to use the currently configured IP as opposed to a NULL IP to any other functions that were calling `copyIPv4(@NULL_IP[0], @packetCtx^.IP.Source[0])`.
- Allowed `processPacket_OFFER` to process packets addressed to the BROADCAST MAC (WHY COULDN'T IT DO THIS ALREADY?!).
2025-03-17 00:00:21 +00:00
d859e40e4a Added mail map
All checks were successful
continuous-integration/drone/push Build is passing
2025-03-15 10:52:08 +00:00
8c3649f691 Merge pull request 'feature/ci-cd-drone-migration' (#3) from feature/ci-cd-drone-migration into develop
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is failing
Reviewed-on: #3
2025-03-09 22:32:16 +00:00
b47194ed99 Final commit to merge through develop & master
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
- CI/CD Pipeline now working & tested.
- Commits to all branches will trigger the pipeline in DroneCI.
- Commits to master will trigger the resulting ISO artefact to be uploaded to Gitea as a Package.
2025-03-09 22:25:08 +00:00
6bca42f2a5 Final Test before finalizing
All checks were successful
continuous-integration/drone/push Build is passing
- Single quotes were causing the first CURL to fail.
- This should be the penultimate commit before ready to progress through dev to master.
2025-03-09 22:18:19 +00:00
f1211f3cca Slowly making progress
All checks were successful
continuous-integration/drone/push Build is passing
- YAML is now valid - however, the attempt to temp store the revision number failed. Doing it inline instead.
2025-03-09 22:08:18 +00:00
0913daebc6 Still experiencing YAML errors, for some reason.
All checks were successful
continuous-integration/drone/push Build is passing
2025-03-09 22:01:55 +00:00
d1a4b4d42f Another attempt - issues with YAML layout for some reason
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2025-03-09 21:57:19 +00:00
2906b8724b Exports don't persist between commands
Some checks reported errors
continuous-integration/drone/push Build encountered an error
- Exports don't persist between commands in Drone commands - removed these exports and made more verbose commands.
2025-03-09 21:45:29 +00:00
5e6e6c394a Debugging & Testing
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
- Mistakes made in the curl methods used & the curl upload-file flag - rectified.
2025-03-09 21:18:49 +00:00
315050f095 Further permission issues
Some checks failed
continuous-integration/drone/push Build is failing
- Further attempts to fix permission issues within Drone when exporting the Asuro.iso artefact
- Switched to `alpine/git` instead of `curl` image, as git didn't exist under the `curl` image.
2025-03-09 20:42:40 +00:00
f795ba24f8 Further tweaks to artefact upload step
Some checks failed
continuous-integration/drone/push Build is failing
DroneCI wasn't happy with the mv of `Asuro.iso` - changed to a cp.
2025-03-09 20:36:19 +00:00
738307d070 Testing artefact upload
Some checks failed
continuous-integration/drone/push Build is failing
- Testing the upload of the resulting `Asuro.iso` to Gitea fromt the Drone pipeline.
2025-03-09 20:30:45 +00:00
04cff2e2c3 Testing Succeeded - Refinement & removal of debugging code
All checks were successful
continuous-integration/drone/push Build is passing
- Removed the debug `exit 1` from `compile_stub.sh`
- Improved `compile.sh` to use runOrFail in a more suitable way, correctly passing through failure messages.
2025-03-09 19:58:24 +00:00
0b5981242b Intentional edit to cause build failure
Some checks failed
continuous-integration/drone/push Build is failing
- Intentional edit to `compile_stub.sh` in order to cause a build failure.
2025-03-09 19:44:19 +00:00
f0dc598f44 Cleaning up compile scripts
All checks were successful
continuous-integration/drone/push Build is passing
- Debugging removed from `compile_vergen.sh`
- `compile.sh` modified to use a for loop for each command & only continue if previous steps succeeded.
2025-03-09 19:39:25 +00:00
d4236f455e DroneCI doesn't fetch tags by default
All checks were successful
continuous-integration/drone/push Build is passing
- Added `git fetch --tags` as the first command
- Changes to compile_vergen.sh in order to debug.
2025-03-09 19:16:23 +00:00
96fcf19c14 Further updates to .drone.yml
All checks were successful
continuous-integration/drone/push Build is passing
Still experiencing issues with not being able to find the .sh files due to missing /code directory.
2025-03-09 18:59:32 +00:00
8c51bd8690 Attempts to resolve issues with missing /code directory
Some checks failed
continuous-integration/drone/push Build is failing
Dockerfile expects `/code` attempting to resolve this in the .drone.yml
2025-03-09 18:54:38 +00:00
43464bb550 Still not working
Some checks failed
continuous-integration/drone/push Build is failing
Testing whether mount paths are the problem
2025-03-09 18:08:28 +00:00
6a1b87e250 .drone.yml modifications
All checks were successful
continuous-integration/drone/push Build is passing
Modified drone.yml to copy source from the /drone/src directory to the /code directory.
2025-03-09 17:49:04 +00:00
9473e26b50 Dockerfile corrections
All checks were successful
continuous-integration/drone/push Build is passing
- /code already exists, don't create it in Dockerfile
2025-03-09 17:42:06 +00:00
f19444201d Updated registry to the registry server, as opposed to my username
Some checks failed
continuous-integration/drone/push Build is failing
Oops.
2025-03-09 17:36:45 +00:00
f907b7e072 First attempt at drone cicd migration
Some checks failed
continuous-integration/drone/push Build is failing
- Created a new `.drone.yml` that will compile the Dockerfile, upload this to the Docker Registry & then use this for building.
2025-03-09 17:32:35 +00:00
80d0183391 Merge pull request 'DevOps Workflow Improvements' (#2) from feature/devlops-workflow-improvements into develop
Reviewed-on: #2
2025-03-09 13:03:04 +00:00
5f3de290f3 DevOps Workflow Improvements
- `VirtualBox-Wrapper.ps1` now takes 'up' or 'down' as opposed to a machine name. This allows start/stop of a virtualmachine.
- `VirtualBox-Wrapper.ps1` now relies on a gitignored `localenv.json` to work.
- `VirtualBox-Wrapper.ps1` can also optionally monitor the log file generated from the serial adapter in VirtualBox.
- `readme.md` updated to provide instructions on how to populate the `localenv.json` file.
- `tasks.json` updated to have a "Clean" task to --remove-orphans, the Build task depends on this.
- `tasks.json` updated to have a "Close VirtualBox" task, this runs the `virtualbox-wrapper.ps1` in 'down' mode. The Build task depends on this.
- `launch.json` updated to run the `VirtualBox-Wrapper.ps1` with the "-Command up" argument, instead of machine name.
- .gitignore updated to ignore any instances of `localenv.json`.
2025-03-09 13:01:10 +00:00
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
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
dbc5105b9b Dynamic lists fixes and additions 2022-02-08 21:28:47 +00:00
a61289a318 Dynamic list/array inital commit.- 2022-02-07 21:37:36 +00:00
21 changed files with 1160 additions and 1294 deletions

View File

@ -50,3 +50,16 @@ steps:
- |
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
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}}"

13
.mailmap Normal file
View File

@ -0,0 +1,13 @@
# Map all Aaron identities to a single preferred identity
Aaron Hance <ah@aaronhance.me> aaron <aaron@6dbc8c32-bb84-406f-8558-d1cf31a0ab0c>
Aaron Hance <ah@aaronhance.me> aaronhance <ah@aaronhance.me>
Aaron Hance <ah@aaronhance.me> aaron hance <ah@aaronhance.me>
Aaron Hance <ah@aaronhance.me> Aaron <ah@aaronhance.me>
# Map all Kieron identities to a single preferred identity
Kieron Morris <kjm@kieronmorris.me> kieron <kieron@6dbc8c32-bb84-406f-8558-d1cf31a0ab0c>
Kieron Morris <kjm@kieronmorris.me> Kieron <kjm@kieronmorris.me>
Kieron Morris <kjm@kieronmorris.me> t3hn3rd <kjm@kieronmorris.me>
# Map goose's multiple identities
goose <goose@6dbc8c32-bb84-406f-8558-d1cf31a0ab0c> goose <angus@actm.uk>

View File

@ -1776,15 +1776,14 @@ 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 begin
exit;
If Console_Properties.BitsPerPixel <> 16 then while true do begin
end;
kpalloc(uint32(fb));
keyboard.hook(@keyhook);

View File

@ -291,28 +291,6 @@ 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.');
@ -322,7 +300,6 @@ begin
getCPUCapabilities;
getCPUClockSpeed;
enableSSE;
enableAVX;
end;
end.

View File

@ -491,22 +491,26 @@ begin
{ Create a new header to the use in our DHCP REQUEST packet }
SendHeader:= createHeader();
CopyIPv4(puint8(@Header^.Your_IP[0]), puint8(@SendHeader^.Client_IP[0]));
CopyIPv4(@getIPv4Config^.Address[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(@SendHeader^.Client_IP[0]), 4, false);
NewOption(SendOptions, TDHCPOpCode.REQUESTED_IP_ADDRESS, void(@Header^.Your_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);
@ -522,9 +526,13 @@ begin
MAC:= getMAC();
packetCtx:= PPacketContext(Kalloc(sizeof(TPacketContext)));
packetCtx^.TTL:= 128;
copyMAC(@BROADCAST_MAC[0], @packetCtx^.MAC.Destination[0]);
{ Copy over MAC - src: broadcast - dst: DHCP Server }
copyMAC(MAC, @packetCtx^.MAC.Source[0]);
copyIPv4(@NULL_IP[0], @packetCtx^.IP.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]);
copyIPv4(@BROADCAST_IP[0], @packetCtx^.IP.Destination[0]);
{ Setup UDPContext (UDP) & copy in the correct details }
@ -570,7 +578,7 @@ begin
{ Check the frame is for us and then process }
MAC:= getMAC;
if MACEqual(@context^.PacketContext^.MAC.Destination[0], MAC) then begin
if MACEqual(@context^.PacketContext^.MAC.Destination[0], MAC) or MACEqual(@context^.PacketContext^.MAC.Destination[0], BROADCAST_MAC) then begin
Outputln('DHCP','Frame is addressed to us.');
{ Check the message type is client specific }
If Header^.Message_Type = $02 then begin
@ -655,7 +663,7 @@ begin
copyMAC(@BROADCAST_MAC[0], @packetCtx^.MAC.Destination[0]);
MAC:= getMAC;
copyMAC(MAC, @packetCtx^.MAC.Source[0]);
copyIPv4(@NULL_IP[0], @packetCtx^.IP.Source[0]);
CopyIPv4(@getIPv4Config^.Address[0], @packetCtx^.IP.Source[0]);
copyIPv4(@BROADCAST_IP[0], @packetCtx^.IP.Destination[0]);
{ Setup UDPContext (UDP) }

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 <kjm@kieronmorris.me>)
}
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.

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 <kjm@kieronmorris.me>)
}
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.

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 <kjm@kieronmorris.me>)
}
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.

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 <kjm@kieronmorris.me>)
}
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.

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 <kjm@kieronmorris.me>)
}
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.

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 <kjm@kieronmorris.me>)
}
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.

View File

@ -1,318 +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->Video - Provides an abstract rasterization/drawing interface.
@author(Kieron Morris <kjm@kieronmorris.me>)
}
unit video;
interface
uses
lmemorymanager, tracer, color, videotypes, hashmap, util, texture;
procedure init();
procedure DrawPixel(X : uint32; Y : uint32; Pixel : TRGB32);
procedure DrawLine(x1,y1,x2,y2 : uint32; thickness : uint32; Color : TRGB32);
procedure DrawRect(x1,y1,x2,y2 : uint32; line_thickness : uint32; Color : TRGB32);
procedure FillRect(x1,y1,x2,y2 : uint32; line_thickness : uint32; Line_Color : TRGB32; Fill_Color : TRGB32);
procedure Flush();
function register(DriverIdentifier : pchar; EnableCallback : FEnableDriver) : boolean;
function enable(DriverIdentifier : pchar) : boolean;
function frontBufferWidth : uint32;
function frontBufferHeight : uint32;
function frontBufferBpp : uint8;
function backBufferWidth : uint32;
function backBufferHeight : uint32;
function backBufferBpp : uint8;
Procedure basicFDrawTexture(Buffer : PVideoBuffer; X : uint32; Y : uint32; Texture : PTexture);
implementation
Procedure dummyFDrawPixel(Buffer : PVideoBuffer; X : uint32; Y : uint32; Pixel : TRGB32);
begin
tracer.push_trace('video.dummyFDrawPixel.enter');
//Do nothing, this is the most basic function that must be implemented by a driver.
end;
Procedure basicFFlush(FrontBuffer : PVideoBuffer; BackBuffer : PVideoBuffer);
var
idx : uint32;
Back,Front : puint32;
BufferSize : uint32;
const
COPY_WIDTH = 32;
begin
//tracer.push_trace('video.basicFFlush.enter');
If not(FrontBuffer^.Initialized and BackBuffer^.Initialized) then exit;
if (BackBuffer^.Width > FrontBuffer^.Width) or (BackBuffer^.Height > FrontBuffer^.Height) then exit;
Back:= puint32(BackBuffer^.Location);
Front:= puint32(FrontBuffer^.Location);
BufferSize:= ( (BackBuffer^.Width * BackBuffer^.Height * BackBuffer^.BitsPerPixel ) div COPY_WIDTH ) - 1;
for idx:=0 to BufferSize do begin
Front[idx]:= Back[idx];
end;
end;
Procedure basicFDrawTexture(Buffer : PVideoBuffer; X : uint32; Y : uint32; Texture : PTexture);
var
i, j : uint32;
begin
//Draw texture to Buffer at x and y
for i:=0 to Texture^.Height - 1 do begin
for j:=0 to Texture^.Width - 1 do begin
DrawPixel(X + j, Y + i, Texture^.Pixels[(i * Texture^.Width) + j]);
end;
end;
end;
procedure basicFDrawLine(Buffer : PVideoBuffer; x1,y1,x2,y2 : uint32; thickness : uint32; Color : TRGB32);
var
X, Y, DX, DY, DX1, DY1, PX, PY, XE, YE, I : sint32;
begin
tracer.push_trace('video.basicFDrawLine.enter');
if(x1 = x2) then begin
for Y:=Y1 to Y2 do begin
DrawPixel(X1,Y,Color);
end;
end else if (y1 = y2) then begin
for X:=X1 to X2 do begin
DrawPixel(X,Y1,Color);
end;
end else begin
DX:= X2 - X1;
DY:= Y2 - Y1;
DX1:= util.abs(DX);
DY1:= util.abs(DY);
PX:= 2 * DY1 - DX1;
PY:= 2 * DX1 - DY1;
if (DY1 <= DX1) then begin
if (dx >= 0) then begin
X:= X1; Y:= Y1; XE:= X2;
end else begin
X:= X2; Y:= Y2; XE:= X1;
end;
DrawPixel(X, Y, Color);
I:=0;
while (x < xe) do begin
X:= X + 1;
if (PX < 0) then begin
PX:= PX + 2 + DY1;
end else begin
if(((dx < 0) and (dy < 0)) OR ((dx > 0) and (dy > 0))) then begin
Y:= Y + 1;
end else begin
Y:= Y - 1;
end;
PX:= PX + 2 * (DY1 - DX1);
end;
DrawPixel(X,Y,Color);
I:= I + 1;
end;
end else begin
if (DY >= 0) then begin
X:= X1; Y:= Y1; YE:= Y2;
end else begin
X:= X2; Y:= Y2; YE:= Y1;
end;
DrawPixel(X, Y, Color);
I:=0;
while (Y < YE) do begin
Y:= Y + 1;
if (PY <= 0) then begin
PY:= PY + 2 * DX1;
end else begin
if (((dx < 0) and (dy < 0)) OR ((dx > 0) and (dy > 0))) then begin
X:= X + 1;
end else begin
X:= X - 1;
end;
PY:= PY + 2 * (dx1 - dy1);
end;
DrawPixel(X,Y,Color);
I:= I + 1;
end;
end;
end;
end;
procedure basicFDrawRect(Buffer : PVideoBuffer; x1,y1,x2,y2 : uint32; line_thickness : uint32; Color : TRGB32);
begin
tracer.push_trace('video.basicFDrawRect.enter');
DrawLine(x1,y1,x2,y1,line_thickness,Color);
DrawLine(x1,y2,x2,y2,line_thickness,Color);
DrawLine(x1,y1,x1,y2,line_thickness,Color);
DrawLine(x2,y1,x2,y2,line_thickness,Color);
end;
procedure basicFFillRect(Buffer : PVideoBuffer; x1,y1,x2,y2 : uint32; line_thickness : uint32; Line_Color : TRGB32; Fill_Color : TRGB32);
var
Y : uint32;
begin
tracer.push_trace('video.basicFFillRect.enter');
for Y:=y1 to y2 do begin
DrawLine(x1,y,x2,y,line_thickness,Fill_Color);
end;
DrawRect(x1,y1,x2,y2,line_thickness,Line_Color);
end;
var
VideoInterface : TVideoInterface;
DriverMap : PHashMap;
procedure init();
var
RGB : TRGB32;
x,y : uint32;
begin
tracer.push_trace('video.init.enter');
//Ensure the frontbuffer is empty & nil, ready for initialization by a driver.
VideoInterface.FrontBuffer.Initialized:= false;
VideoInterface.FrontBuffer.Width:= 0;
VideoInterface.FrontBuffer.Height:= 0;
VideoInterface.FrontBuffer.BitsPerPixel:= 0;
VideoInterface.FrontBuffer.Location:= 0;
//Ensure the backbuffer is empty & nil, ready for initialization by a driver.
VideoInterface.BackBuffer.Initialized:= false;
VideoInterface.BackBuffer.Width:= 0;
VideoInterface.BackBuffer.Height:= 0;
VideoInterface.BackBuffer.BitsPerPixel:= 0;
VideoInterface.BackBuffer.Location:= 0;
//Set the default buffer to be the FrontBuffer, assume no double buffering to begin with.
VideoInterface.DefaultBuffer:= @VideoInterface.FrontBuffer;
{ Set the draw routines to point to dummy/empty routines.
Calls will still succeed but do nothing until a driver has registered. }
VideoInterface.DrawRoutines.DrawPixel:= @dummyFDrawPixel;
VideoInterface.DrawRoutines.Flush:= @basicFFlush;
VideoInterface.DrawRoutines.DrawLine:= @basicFDrawLine;
VideoInterface.DrawRoutines.DrawRect:= @basicFDrawRect;
VideoInterface.DrawRoutines.FillRect:= @basicFFillRect;
//Initialize our 'DriverMap', a hashmap of loadable display drivers.
DriverMap:= hashmap.new;
tracer.push_trace('video.init.exit');
end;
function register(DriverIdentifier : pchar; EnableCallback : FEnableDriver) : boolean;
var
Value : Void;
begin
tracer.push_trace('video.register.enter');
register:= false;
Value:= Hashmap.get(DriverMap, DriverIdentifier);
if (Value = nil) then begin
Hashmap.add(DriverMap, DriverIdentifier, void(EnableCallback));
register:= true;
end;
tracer.push_trace('video.register.exit');
end;
function enable(DriverIdentifier : pchar) : boolean;
var
Value : Void;
begin
tracer.push_trace('video.enable.enter');
enable:= false;
Value:= Hashmap.get(DriverMap, DriverIdentifier);
if (Value <> nil) then begin
enable:= FEnableDriver(Value)(@VideoInterface);
end;
tracer.push_trace('video.enable.exit');
end;
procedure DrawPixel(X : uint32; Y : uint32; Pixel : TRGB32);
begin
//tracer.push_trace('video.DrawPixel.enter');
VideoInterface.DrawRoutines.DrawPixel(VideoInterface.DefaultBuffer, X, Y, Pixel);
//tracer.push_trace('video.DrawPixel.exit');
end;
procedure Flush();
begin
//tracer.push_trace('video.Flush.enter');
VideoInterface.DrawRoutines.Flush(@VideoInterface.FrontBuffer, @VideoInterface.BackBuffer);
//tracer.push_trace('video.Flush.exit');
end;
procedure DrawLine(x1,y1,x2,y2 : uint32; thickness : uint32; Color : TRGB32);
begin
VideoInterface.DrawRoutines.DrawLine(VideoInterface.DefaultBuffer,x1,y1,x2,y2,thickness,Color);
end;
procedure DrawRect(x1,y1,x2,y2 : uint32; line_thickness : uint32; Color : TRGB32);
begin
VideoInterface.DrawRoutines.DrawRect(VideoInterface.DefaultBuffer,x1,y1,x2,y2,line_thickness,color);
end;
procedure FillRect(x1,y1,x2,y2 : uint32; line_thickness : uint32; Line_Color : TRGB32; Fill_Color : TRGB32);
begin
VideoInterface.DrawRoutines.FillRect(VideoInterface.DefaultBuffer,x1,y1,x2,y2,line_thickness,Line_Color,Fill_Color);
end;
function frontBufferWidth : uint32;
begin
frontBufferWidth:= VideoInterface.FrontBuffer.Width;
end;
function frontBufferHeight : uint32;
begin
frontBufferHeight:= VideoInterface.FrontBuffer.Height;
end;
function frontBufferBpp : uint8;
begin
frontBufferBpp:= VideoInterface.FrontBuffer.BitsPerPixel;
end;
function backBufferWidth : uint32;
begin
backBufferWidth:= VideoInterface.BackBuffer.Width;
end;
function backBufferHeight : uint32;
begin
backBufferHeight:= VideoInterface.BackBuffer.Height;
end;
function backBufferBpp : uint8;
begin
backBufferBpp:= VideoInterface.BackBuffer.BitsPerPixel;
end;
end.

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 <kjm@kieronmorris.me>)
}
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.

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 <kjm@kieronmorris.me>)
}
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.

File diff suppressed because it is too large Load Diff

View File

@ -1,67 +0,0 @@
unit targa;
interface
uses
lmemorymanager, texture;
type
TTARGAColor = packed record
b, g, r, a: uint8;
end;
PTARGAColor = ^TTARGAColor;
TTARGAHeader = packed record
Magic: uint8;
ColorMapType: uint8;
ImageType: uint8;
ColorMapOrigin: uint16;
ColorMapLength: uint16;
ColorMapDepth: uint8;
XOrigin: uint16;
YOrigin: uint16;
Width: uint16;
Height: uint16;
PixelDepth: uint8;
ImageDescriptor: uint8;
Data : PTARGAColor;
end;
PTARGAHeader = ^TTARGAHeader;
Function Parse(buffer : puint8; len : uint32) : PTexture;
implementation
Function Parse(buffer : puint8; len : uint32) : PTexture;
var
header : PTARGAHeader;
i, j : uint32;
data : PTARGAColor;
tex : PTexture;
begin
if (len < sizeof(TTARGAHeader)) then exit;
header := PTARGAHeader(buffer);
if (header^.Magic <> $0) or (header^.ImageType <> 2) or (header^.PixelDepth <> 32) then exit;
//Create a new texture
tex:= texture.newTexture(header^.Width, header^.Height);
tex^.Width:= header^.Width;
tex^.Height:= header^.Height;
//Copy the data
data := PTARGAColor(header^.Data);
for i := 0 to header^.Height - 1 do begin
for j := 0 to header^.Width - 1 do begin
tex^.Pixels[i * header^.Width + j].r := data^.r;
tex^.Pixels[i * header^.Width + j].g := data^.g;
tex^.Pixels[i * header^.Width + j].b := data^.b;
tex^.Pixels[i * header^.Width + j].a := data^.a;
end;
end;
Parse := tex;
end;
end.

View File

@ -1,34 +0,0 @@
unit texture;
interface
uses
lmemorymanager, color;
type
TTexture = packed record
Width : uint32;
Height : uint32;
Size : uint32;
Pixels : PRGB32;
end;
PTexture = ^TTexture;
Function newTexture(width, height: uint32): PTexture;
implementation
Function newTexture(width, height: uint32): PTexture;
var
texture: PTexture;
begin
texture:= PTexture(kalloc(sizeof(TTexture)));
texture^.Pixels:= PRGB32(kalloc(width * height * sizeof(TRGB32)));
texture^.Width:= width;
texture^.Height:= height;
texture^.Size:= width * height;
newTexture:= texture;
end;
end.

View File

@ -49,7 +49,6 @@ procedure io_wait;
procedure memset(location : uint32; value : uint8; size : uint32);
procedure memcpy(source : uint32; dest : uint32; size : uint32);
procedure __SSE_128_memcpy(source : uint32; dest : uint32);
procedure printmemory(source : uint32; length : uint32; col : uint32; delim : PChar; offset_row : boolean);
procedure printmemoryWND(source : uint32; length : uint32; col : uint32; delim : PChar; offset_row : boolean; WND : HWND);
@ -81,8 +80,6 @@ function RorDWord(AValue : uint32; Dist : uint8) : uint32;
function MsSinceSystemBoot : uint64;
function abs(x : sint32) : uint32;
var
endptr : uint32; external name '__end';
stack : uint32; external name 'KERNEL_STACK';
@ -92,15 +89,6 @@ implementation
uses
console, RTC, cpu, serial, strings, isr_types;
function abs(x : sint32) : uint32;
var
y : uint32;
begin
y:= x SHR 31;
abs:= (x XOR y) - y;
end;
function MsSinceSystemBoot : uint64;
begin
MsSinceSystemBoot:= div6432(getTSC, (CPUID.ClockSpeed.Hz div 1000));
@ -128,14 +116,6 @@ begin
div6432:= (r0 SHL 32) OR r4;
end;
procedure __SSE_128_memcpy(source : uint32; dest : uint32); assembler;
asm
MOV EAX, Source
MOVAPS XMM1, [EAX]
MOV EAX, Dest
MOVAPS [EAX], XMM1
end;
function switchendian16(b : uint16) : uint16;
begin
switchendian16:= ((b AND $FF00) SHR 8) OR ((b AND $00FF) SHL 8);

View File

@ -54,8 +54,7 @@ uses
base64,
rand,
terminal,
hashmap, vfs,
video, vesa, doublebuffer, color;
hashmap, vfs;
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
@ -125,11 +124,6 @@ var
HM : PHashMap;
colour : TRGB32;
array1 : Array[0..255] of char;
array2 : Array[0..255] of char;
begin
{ Init the base system unit }
System.init();
@ -141,8 +135,6 @@ begin
multibootinfo:= mbinfo;
multibootmagic:= mbmagic;
//video.init();
{ Ensure tracer is frozen }
tracer.freeze();
@ -209,53 +201,6 @@ begin
{ Call Tracer }
tracer.init();
video.init();
vesa.init(@video.register);
doublebuffer.init(@video.register);
video.enable('VESA');
video.enable('BASIC_DOUBLE_BUFFER');
colour:= color.white;
// serial.sendHex(uint32(@array1[8]));
// serial.sendHex(uint32(@array2[8]));
// for i:=8 to 23 do begin
// array2[i]:= '?';
// end;
// array2[24]:= #0;
// array1[8]:= 'H';
// array1[9]:= 'e';
// array1[10]:= 'l';
// array1[11]:= 'l';
// array1[12]:= 'o';
// array1[13]:= 'w';
// array1[14]:= 'o';
// array1[15]:= 'r';
// array1[16]:= 'l';
// array1[17]:= 'd';
// array1[18]:= '1';
// array1[19]:= '2';
// array1[20]:= '3';
// array1[21]:= '4';
// array1[22]:= '5';
// array1[23]:= '!';
// __SSE_128_memcpy(uint32(@array1[8]), uint32(@array2[8]));
// serial.sendString(pchar(@array2[8]));
for i:=0 to video.frontBufferWidth-1 do begin
for z:=0 to video.frontBufferHeight-1 do begin
video.DrawPixel(i, z, colour);
end;
end;
video.DrawLine(50,50,100,100,1,color.black);
video.DrawRect(50,150,100,200,1,color.black);
video.FillRect(50,250,100,300,1,color.black,color.red);
video.DrawLine(50,350,100,350,1,color.black);
video.Flush();
while true do begin end;
{ VFS Init }
vfs.init();

View File

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

View File

@ -52,6 +52,7 @@ if ($Command -eq 'up') {
}
Receive-Job $MonitorJob
}
Get-Job | Stop-Job | Remove-Job -Force
} elseif ($Command -eq 'down') {
Write-Output "Stopping $MachineName"
VBoxManage.exe controlvm $MachineName poweroff