16 Commits

Author SHA1 Message Date
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
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
4c5038b001 Merge branch 'cherry-pick-24c371ca' into 'develop'
Added new String functions

See merge request spexeah/asuro!30
2022-01-31 11:26:25 +00:00
98481ea1ce Added new String functions
(cherry picked from commit 24c371cab1)
2022-01-31 00:36:22 +00:00
346dc4e4c9 Merge branch 'feature/readme-update-1' into 'develop'
Update readme.md

See merge request spexeah/asuro!29
2022-01-29 12:47:56 +00:00
b2eee58df4 Update readme.md 2022-01-29 12:46:35 +00:00
170b93dd69 Merge branch 'feature/pipeline-docs-fix' into 'develop'
Docgen changes

See merge request spexeah/asuro!27
2021-07-06 19:42:57 +00:00
34d6873a6a Docgen changes
Changed docgen job to create doc folder, not public for now.
2021-07-06 20:35:26 +01:00
e69d06ea4f Merge branch 'joe/ci-suggestions' into 'develop'
3 time the charm

See merge request spexeah/asuro!26
2021-07-06 19:18:24 +00:00
2939afa729 3 time the charm 2021-07-06 19:18:23 +00:00
ad8e80913a Merge branch 'feature/documentation' into 'develop'
Changed comments in Asuro.pas when generated

Changed the Asuro.pas comment to be the standard format in terms of Directory->File (no .pas) for PasDoc gen.

See merge request spexeah/asuro!23
2021-07-05 18:23:11 +00:00
33cb042b8c Changed comments in Asuro.pas when generated
Changed the Asuro.pas comment to be the standard format in terms of Directory->File (no .pas) for PasDoc gen.
2021-07-05 19:18:32 +01:00
4d25ceef77 Merge branch 'feature/documentation' into 'develop'
Tidied up comments for docgen.

Added some documentation to Asuro.pas, ProgManager, AHCI, asfs & ATA_ISR to fix some of the pasdoc/docgen issues.

See merge request spexeah/asuro!22
2021-07-05 18:09:51 +00:00
439d4ef8ac Tidied out comments for docgen.
Added some documentation to Asuro.pas & ProgManager.
2021-07-05 19:07:33 +01:00
25 changed files with 1461 additions and 464 deletions

3
.gitignore vendored
View File

@ -10,5 +10,4 @@
/*.sh~ /*.sh~
/*.img /*.img
src/include/asuro.pas src/include/asuro.pas
.vscode/launch.json localenv.json
.vscode

View File

@ -1,25 +1,23 @@
stages: stages:
- Generate Stub and Versions - Compile Versions
- Generate Version Files
- Compile Sources - Compile Sources
- Link - Link
- Generate ISO
- Generate Sources List
- Generate Documentation - Generate Documentation
- Deploy
compile_stub: cache:
stage: Generate Stub and Versions - key: ${CI_COMMIT_REF_SLUG}
script:
- chmod +x ./compile_stub.sh
- ./compile_stub.sh
artifacts:
paths: paths:
- lib/stub.o - lib/*.o
- bin/kernel.bin
- doc
vergen: before_script:
stage: Generate Stub and Versions - chmod +x *.sh
script:
- chmod +x ./compile_vergen.sh versions:
stage: Compile Versions
script:
- ./compile_vergen.sh - ./compile_vergen.sh
artifacts: artifacts:
paths: paths:
@ -29,71 +27,47 @@ vergen:
compile_sources: compile_sources:
stage: Compile Sources stage: Compile Sources
script: script:
- chmod +x ./compile_sources.sh - rm -f lib/*.so
- ./compile_sources.sh - ./compile_sources.sh
artifacts:
paths:
- lib/*.o
dependencies:
- compile_stub
- vergen
needs: needs:
- vergen - versions
- compile_stub
link: link:
stage: Link stage: Link
script: script:
- chmod +x ./compile_link.sh - ./compile_stub.sh
- ./compile_link.sh - ./compile_link.sh
artifacts:
paths:
- bin/kernel.bin
dependencies:
- compile_sources
needs: needs:
- versions
- compile_sources - compile_sources
isogen: isogen:
stage: Generate ISO stage: Deploy
script: script:
- chmod +x ./compile_isogen.sh
- ./compile_isogen.sh - ./compile_isogen.sh
- chmod +x ./compile_sumgen.sh
- ./compile_sumgen.sh - ./compile_sumgen.sh
artifacts: artifacts:
paths: paths:
- ./Asuro.iso - ./Asuro.iso
- ./release/checksum.svg - ./release/checksum.svg
dependencies:
- link
needs: needs:
- link - link
sourcelist:
stage: Generate Sources List
script:
- chmod +x ./compile_sourcelist.sh
- ./compile_sourcelist.sh
artifacts:
paths:
- ./sources.list
dependencies:
- vergen
needs:
- vergen
docgen: docgen:
stage: Generate Documentation stage: Generate Documentation
only:
- master
- develop
script: script:
- chmod +x ./compile_docs.sh - ./compile_sourcelist.sh
- ./compile_docs.sh - ./compile_docs.sh
# Remove comments when we want to use gitlab pages.
#- cp doc public
allow_failure: true
artifacts: artifacts:
paths: paths:
- ./doc/* - doc
dependencies: #- public/*
- vergen #- ./sources.list
- sourcelist
needs: needs:
- vergen - versions
- sourcelist

13
.vscode/launch.json vendored
View File

@ -3,18 +3,11 @@
{ {
"name":"Run", "name":"Run",
"request": "launch", "request": "launch",
"type": "coreclr", "type": "PowerShell",
"preLaunchTask": "Build", "preLaunchTask": "Build",
"program": "VBoxSDL", "script": "${workspaceFolder}/virtualbox-wrapper.ps1",
"args": [ "args": ["-Command", "up"],
"--comment",
"Asuro",
"--startvm",
"7d395c96-891c-4139-b77d-9b6b144b0b93"
],
"cwd": "${workspaceFolder}", "cwd": "${workspaceFolder}",
"console": "internalConsole",
"internalConsoleOptions": "neverOpen"
} }
] ]
} }

26
.vscode/tasks.json vendored
View File

@ -9,14 +9,18 @@
"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)",
@ -26,6 +30,24 @@
"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"
} }
] ]
} }

View File

@ -2,18 +2,22 @@ FROM ubuntu:latest
VOLUME ["/code"] VOLUME ["/code"]
ENV DEBIAN_FRONTEND=noninteractive
RUN dpkg --add-architecture i386 RUN dpkg --add-architecture i386
RUN apt-get update RUN apt-get update && apt-get install -y \
RUN apt-get install nasm curl make:i386 binutils:i386 xorriso grub-pc-bin dos2unix -y curl dos2unix wget git make nasm binutils:i386 xorriso grub-pc-bin && \
RUN apt-get clean apt-get clean my room
RUN curl https://sourceforge.net/projects/freepascal/files/Linux/2.6.4/fpc-2.6.4.i386-linux.tar/download --output fpc.tar -L && \
tar -xf fpc.tar
WORKDIR ./fpc-2.6.4.i386-linux SHELL ["/bin/bash", "-c"]
RUN ./install.sh ARG FPC_VERSION=2.6.4
RUN curl -sL https://sourceforge.net/projects/freepascal/files/Linux/$FPC_VERSION/fpc-$FPC_VERSION.i386-linux.tar/download | tar -xf - && \
pushd fpc-$FPC_VERSION.i386-linux && ./install.sh && popd && \
rm -rf fpc-$FPC_VERSION.i386-linux
COPY compile.sh /compile.sh COPY compile.sh /compile.sh
RUN mkdir /code ADD https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver /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", "/compile.sh"] ENTRYPOINT ["/bin/bash", "-c"]
CMD ["/compile.sh"]

View File

@ -1,4 +1,4 @@
#!/bin/sh #!/usr/bin/env bash
ERRCOUNT=0 ERRCOUNT=0
echo " " echo " "
echo "=======================" echo "======================="
@ -7,49 +7,32 @@ echo "Asuro Compilation"
echo " " echo " "
#Compile Stub.asm #Compile Stub.asm
./compile_stub.sh rm lib/*
if [ $? -ne 0 ]
then runOrFail() {
echo "Failed to compile stub!" local binary=$1
ERRCOUNT=$((ERRCOUNT+1)) local errorText=$2
else if $binary; then
echo "Success." echo "Success."
fi else
echo "$errorText"
ERRCOUNT=$((ERRCOUNT+1))
fi
}
runOrFail $(pwd)/compile_stub.sh "Failed to compile stub!"
#Generate .pas with versioning headers. #Generate .pas with versioning headers.
./compile_vergen.sh runOrFail $(pwd)/compile_vergen.sh "Versions failed to compile"
#Compile all .pas sources #Compile all .pas sources
./compile_sources.sh runOrFail $(pwd)/compile_sources.sh "Failed to compile FPC Sources!"
if [ $? -ne 0 ]
then
echo " "
echo "Failed to compile FPC Sources!"
ERRCOUNT=$((ERRCOUNT+1))
else
echo " "
echo "Success."
fi
#Link into a binary. #Link into a binary.
./compile_link.sh runOrFail $(pwd)/compile_link.sh "Failed linking!"
if [ $? -ne 0 ]
then
echo "Failed linking!"
ERRCOUNT=$((ERRCOUNT+1))
else
echo "Success."
fi
#Generate an ISO with GRUB as the Bootloader. #Generate an ISO with GRUB as the Bootloader.
./compile_isogen.sh runOrFail ./compile_isogen.sh "Failed to create ISO!"
if [ $? -ne 0 ]
then
echo "Failed to create ISO!"
ERRCOUNT=$((ERRCOUNT+1))
else
echo "Success."
fi
#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" ]
@ -59,4 +42,4 @@ else
./compile_finish.sh "success" ./compile_finish.sh "success"
fi fi
cd .. cd ..

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
echo > checksums.md5 echo > checksums.md5
for directory in $(find src/ -maxdepth 10 -type d); do for directory in $(find src/ -maxdepth 10 -type d); do
for filename in $directory/*.pas; do for filename in $directory/*.pas; do

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
echo " " echo " "
echo "=======================" echo "======================="
echo " " echo " "
@ -14,5 +14,4 @@ echo "Removing old docs"
rm -rf ./doc/* rm -rf ./doc/*
echo "Generating Docs..." echo "Generating Docs..."
./pasdoc/bin/pasdoc -N "Asuro" -T "Asuro OS Documentation" -O "html" -E ./doc/ -S sources.list --use-tipue-search ./pasdoc/bin/pasdoc -N "Asuro" -T "Asuro OS Documentation" -O "html" -E ./doc/ -S sources.list --use-tipue-search
echo "Docgen finished." echo "Docgen finished."
exit 0

View File

@ -1,8 +1,8 @@
#/bin/sh #!/usr/bin/env bash
echo " " echo " "
echo "=======================" echo "======================="
echo " " echo " "
if [ "$1" == "failed" ] if [[ "$1" == "failed" ]]
then then
echo "Errors Occurred, please review." echo "Errors Occurred, please review."
wget -q https://img.shields.io/badge/build-failed-red.svg -O release/build.svg 2>/dev/null wget -q https://img.shields.io/badge/build-failed-red.svg -O release/build.svg 2>/dev/null

View File

@ -1,4 +1,4 @@
#!/bin/sh #!/usr/bin/env bash
echo " " echo " "
echo "=======================" echo "======================="
echo " " echo " "

View File

@ -1,4 +1,4 @@
#!/bin/sh #!/usr/bin/env bash
echo " " echo " "
echo "=======================" echo "======================="
echo " " echo " "

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
echo " " echo " "
echo "=======================" echo "======================="
echo " " echo " "

View File

@ -1,4 +1,4 @@
#!/bin/sh #!/usr/bin/env bash
echo " " echo " "
echo "=======================" echo "======================="
echo " " echo " "

View File

@ -1,8 +1,7 @@
#!/bin/sh #!/usr/bin/env bash
echo " " echo " "
echo "=======================" echo "======================="
echo " " echo " "
echo "Compiling Stub..." echo "Compiling Stub..."
echo " " echo " "
rm lib/*
nasm -f elf src/stub/stub.asm -o lib/stub.o nasm -f elf src/stub/stub.asm -o lib/stub.o

View File

@ -1,4 +1,4 @@
#/bin/sh #!/usr/bin/env bash
echo " " echo " "
echo "=======================" echo "======================="
echo " " echo " "

View File

@ -1,4 +1,5 @@
#!/bin/bash #!/usr/bin/env bash
set -e
echo " " echo " "
echo "=======================" echo "======================="
echo " " echo " "
@ -8,56 +9,67 @@ chmod +x ./compile_checksum.sh
./compile_checksum.sh ./compile_checksum.sh
outfile="src/include/asuro.pas" outfile="src/include/asuro.pas"
file="version" file="version"
while IFS=: read -r line;do {
major=$(echo $line | awk '{print $1}') # this script requires semver tool
minor=$(echo $line | awk '{print $2}') wget -q https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver -O bin/semver && chmod +x bin/semver
sub=$(echo $line | awk '{print $3}') export PATH="$(pwd)/bin:$PATH"
release=$(echo $line | awk '{print $4}') }
done <"$file" tagref=$(git describe --tags)
revision=$(git rev-parse --short=8 HEAD)
major=$(semver get major $tagref)
minor=$(semver get minor $tagref)
sub=$(semver get patch $tagref)
version=$(semver get release $tagref)
release=$(semver get prerel $tagref)
build=$(semver get build $tagref)
linecount=$(./loc.sh | awk '{print $1}') linecount=$(./loc.sh | awk '{print $1}')
sourcecount=$(find src -type f | wc -l) sourcecount=$(find src -type f | wc -l)
drivercount=$(find src/driver -type f | wc -l) drivercount=$(find src/driver -type f | wc -l)
revision=$(git rev-list --all --count)
fpcversion=$(fpc -h | grep -m 1 version | awk '{print $5}') fpcversion=$(fpc -h | grep -m 1 version | awk '{print $5}')
makeversion=$(make -v | grep GNU | awk '{print $3}' | grep -v GNU) makeversion=$(make -v | grep GNU | awk '{print $3}' | grep -v GNU)
nasmversion=$(nasm -v | awk '{print $3'}) nasmversion=$(nasm -v | awk '{print $3'})
compiledate=$(date +"%d/%m/%y") compiledate=$(date +"%d/%m/%y")
compiletime=$(date +"%T") compiletime=$(date +"%T")
checksum=$(md5sum checksums.md5 | awk '{print $1}') checksum=$(md5sum checksums.md5 | awk '{print $1}')
echo "unit asuro;" > $outfile
echo " " >> $outfile [[ -n "$release" ]] && version="$version-$release"
echo "interface" >> $outfile cat > $outfile <<EOF
echo " " >> $outfile unit asuro;
echo "const" >> $outfile
echo " VERSION = '$major.$minor.$sub-$revision$release';" >> $outfile interface
echo " VERSION_MAJOR = '$major';" >> $outfile
echo " VERSION_MINOR = '$minor';" >> $outfile const
echo " VERSION_SUB = '$sub';" >> $outfile VERSION = '$version';
echo " REVISION = '$revision';" >> $outfile VERSION_MAJOR = '$major';
echo " RELEASE = '$release';" >> $outfile VERSION_MINOR = '$minor';
echo " LINE_COUNT = $linecount;" >> $outfile VERSION_SUB = '$sub';
echo " FILE_COUNT = $sourcecount;" >> $outfile REVISION = '$revision';
echo " DRIVER_COUNT = $drivercount;" >> $outfile RELEASE = '$release';
echo " FPC_VERSION = '$fpcversion';" >> $outfile LINE_COUNT = $linecount;
echo " NASM_VERSION = '$nasmversion';" >> $outfile FILE_COUNT = $sourcecount;
echo " MAKE_VERSION = '$makeversion';" >> $outfile DRIVER_COUNT = $drivercount;
echo " COMPILE_DATE = '$compiledate';" >> $outfile FPC_VERSION = '$fpcversion';
echo " COMPILE_TIME = '$compiletime';" >> $outfile NASM_VERSION = '$nasmversion';
echo " CHECKSUM = '$checksum';" >> $outfile MAKE_VERSION = '$makeversion';
echo " " >> $outfile COMPILE_DATE = '$compiledate';
echo "implementation" >> $outfile COMPILE_TIME = '$compiletime';
echo " " >> $outfile CHECKSUM = '$checksum';
echo "end." >> $outfile
implementation
end.
EOF
echo "Generating release info..." echo "Generating release info..."
wget -q https://img.shields.io/badge/version-$major.$minor.$sub--$revision$release-blue.svg -O release/version.svg 2>/dev/null set +e # These can fail on branches and such, for now
wget -q https://img.shields.io/badge/revision-$revision-blue.svg -O release/revision.svg 2>/dev/null wget -q https://img.shields.io/badge/version-$major.$minor.$sub--$revision$release-blue.svg -O release/version.svg
wget -q https://img.shields.io/badge/release-$release-blue.svg -O release/release.svg 2>/dev/null wget -q https://img.shields.io/badge/revision-$revision-blue.svg -O release/revision.svg
wget -q https://img.shields.io/badge/lines-$linecount-blueviolet.svg -O release/lines.svg 2>/dev/null wget -q https://img.shields.io/badge/release-$release-blue.svg -O release/release.svg
wget -q https://img.shields.io/badge/files-$sourcecount-blueviolet.svg -O release/files.svg 2>/dev/null wget -q https://img.shields.io/badge/lines-$linecount-blueviolet.svg -O release/lines.svg
wget -q https://img.shields.io/badge/drivers-$drivercount-blueviolet.svg -O release/drivers.svg 2>/dev/null wget -q https://img.shields.io/badge/files-$sourcecount-blueviolet.svg -O release/files.svg
wget -q https://img.shields.io/badge/FPC_version-$fpcversion-lightgrey.svg -O release/fpcversion.svg 2>/dev/null wget -q https://img.shields.io/badge/drivers-$drivercount-blueviolet.svg -O release/drivers.svg
wget -q https://img.shields.io/badge/NASM_version-$nasmversion-lightgrey.svg -O release/nasmversion.svg 2>/dev/null wget -q https://img.shields.io/badge/FPC_version-$fpcversion-lightgrey.svg -O release/fpcversion.svg
wget -q https://img.shields.io/badge/MAKE_version-$makeversion-lightgrey.svg -O release/makeversion.svg 2>/dev/null wget -q https://img.shields.io/badge/NASM_version-$nasmversion-lightgrey.svg -O release/nasmversion.svg
wget -q https://img.shields.io/badge/release_date-$compiledate-lightgrey.svg -O release/date.svg 2>/dev/null wget -q https://img.shields.io/badge/MAKE_version-$makeversion-lightgrey.svg -O release/makeversion.svg
wget -q https://img.shields.io/badge/fingerprint-$checksum-important.svg -O release/fingerprint.svg 2>/dev/null wget -q https://img.shields.io/badge/release_date-$compiledate-lightgrey.svg -O release/date.svg
wget -q https://img.shields.io/badge/fingerprint-$checksum-important.svg -O release/fingerprint.svg
echo "Done versioning." echo "Done versioning."

View File

@ -1,4 +1,3 @@
version: "3.9"
services: services:
builder: builder:
build: . build: .

View File

@ -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. I don't think this needs an explaination.
* [VSCode (Optional, but highly recommended)](https://code.visualstudio.com/) * [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. 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) * [PowerShell Plugin by Microsoft](https://marketplace.visualstudio.com/items?itemName=ms-vscode.powershell)
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. 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](https://www.virtualbox.org/)
Virtualbox is our Virtualisation environment of choice, don't ask why, it just is. 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. 3. Install Docker for Windows.
4. Install Git for Windows. 4. Install Git for Windows.
5. Install VSCode & the listed plugins. 5. Install VSCode & the listed plugins.
6. Install VirtualBox. 6. Install VirtualBox (v7+).
7. Clone this repository. 7. Clone this repository.
8. Run the following command in the root of the repo to build the docker image: 8. Run the following command in the root of the repo to build the docker image:
```powershell ```powershell
docker-compose build builder docker compose build builder
``` ```
9. Run the following command to compile Asuro: 9. Run the following command to compile Asuro:
```powershell ```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. 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: 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 ```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` 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 ```json
{ {
"configurations": [ "VirtualBox":{
{ "MachineName":"<YOUR_UUID_OR_MACHINE_NAME>"
"name":"Run", }
"request": "launch",
"type": "coreclr",
"preLaunchTask": "Build",
"program": "VBoxSDL",
"args": [
"--comment",
"Asuro",
"--startvm",
"<YOUR UUID HERE>"
],
"cwd": "${workspaceFolder}",
"console": "internalConsole",
"internalConsoleOptions": "neverOpen"
}
]
} }
``` ```
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!
### Gotchas ### Notes & 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`. - 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`.

View File

@ -12,15 +12,11 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
{ ************************************************ {
* Asuro Drivers->Storage->AHCI - AHCI SATA Driver.
* Unit: Drivers/AHCI
* Description: AHCI SATA Driver @author(Aaron Hance <ah@aaronhance.me>)
************************************************ }
* Author: Aaron Hance
* Contributors:
************************************************ }
unit AHCI; unit AHCI;
interface interface

View File

@ -12,15 +12,11 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
{ ************************************************ {
* Asuro Drivers->Storage->ATA_ISR - Primary ATA IRQ.
* Unit: Drivers/ISR46
* Description: Primary ATA IRQ @author(Aaron Hance <ah@aaronhance.me>)
************************************************ }
* Author: Aaron Hance
* Contributors:
************************************************ }
unit ATA_ISR; unit ATA_ISR;
interface interface

View File

@ -12,16 +12,11 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
{ ************************************************ {
* Asuro Drivers->Storage->ASFS - Asuro Filesystem Driver.
* Unit: Drivers/storage/asfs
* Description: asfs file system driver @author(Aaron Hance <ah@aaronhance.me>)
* }
************************************************
* Author: Aaron Hance
* Contributors:
************************************************ }
unit asfs; unit asfs;
interface interface

File diff suppressed because it is too large Load Diff

View File

@ -16,6 +16,7 @@
Include->Strings - String Manipulation. Include->Strings - String Manipulation.
@author(Kieron Morris <kjm@kieronmorris.me>) @author(Kieron Morris <kjm@kieronmorris.me>)
@author(Aaron Hance <ah@aaronhance.me>)
} }
unit strings; unit strings;
@ -33,6 +34,10 @@ function stringCopy(str : pchar) : pchar;
function stringNew(size : uint32) : pchar; function stringNew(size : uint32) : pchar;
function stringSize(str : pchar) : uint32; function stringSize(str : pchar) : uint32;
function stringConcat(str1, str2 : pchar) : pchar; function stringConcat(str1, str2 : pchar) : pchar;
function stringTrim(str : pchar; length : uint32) : pchar;
function stringSub(str : pchar; start, size : uint32) : pchar;
function stringReplace(str, find, replace : pchar) : pchar;
function stringIndexOf(str, find : pchar) : sint32;
function stringContains(str : pchar; sub : pchar) : boolean; function stringContains(str : pchar; sub : pchar) : boolean;
function stringToInt(str : pchar) : uint32; function stringToInt(str : pchar) : uint32;
function hexStringToInt(str : pchar) : uint32; function hexStringToInt(str : pchar) : uint32;
@ -151,6 +156,94 @@ begin
stringConcat:= result; stringConcat:= result;
end; end;
// Trim the string to the specified length.
function stringTrim(str : pchar; length : uInt32) : pchar;
var
result : pchar;
begin
result:= stringNew(length);
memcpy(uint32(str), uint32(result), length);
stringTrim:= result;
end;
// Return a substring of the string.
function stringSub(str : pchar; start, size : uint32) : pchar;
var
result : pchar;
begin
result:= stringNew(size);
memcpy(uint32(str)+start, uint32(result), size);
stringSub:= result;
end;
// Replace first instance of a string with another.
function stringReplace(str, find, replace : pchar) : pchar;
var
result : pchar;
i, j, k : uint32;
found : boolean;
begin
// Find the first instance of the find string.
i:= 0;
found:= false;
while (i < stringSize(str)) and (not found) do begin
if stringEquals(str+i, find) then begin
found:= true;
end else begin
inc(i);
end;
end;
// If we found the find string, replace it.
if found then begin
result:= stringNew(stringSize(str) - stringSize(find) + stringSize(replace));
j:= 0;
k:= 0;
while i < stringSize(str) do begin
if stringEquals(str+i, find) then begin
memcpy(uint32(replace), uint32(result+j), stringSize(replace));
j:= j + stringSize(replace);
inc(i, stringSize(find));
end else begin
result[j]:= str[i];
inc(j);
inc(i);
end;
end;
stringReplace:= result;
end else begin
stringReplace:= stringCopy(str);
end;
// Return the result.
stringReplace:= result;
end;
// Find the index of the first instance of a string.
function stringIndexOf(str, find : pchar) : sint32;
var
i : uint32;
found : boolean;
begin
i:= 0;
found:= false;
while (i < stringSize(str)) and (not found) do begin
if stringEquals(str+i, find) then begin
found:= true;
end else begin
inc(i);
end;
end;
if found then begin
stringIndexOf:= i;
end else begin
stringIndexOf:= -1;
end;
end;
function stringContains(str : pchar; sub : pchar) : boolean; function stringContains(str : pchar; sub : pchar) : boolean;
var var
strEnd, subEnd, i, j, count : uint32; strEnd, subEnd, i, j, count : uint32;

View File

@ -12,6 +12,11 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
{
ProgManager - Central initialization for terminal registered, baked-in programs.
@author(Kieron Morris <kjm@kieronmorris.me>)
}
unit progmanager; unit progmanager;
interface interface
@ -23,6 +28,7 @@ uses
edit, netlog, themer, edit, netlog, themer,
memview, udpcat, dhclient, vbeinfo; memview, udpcat, dhclient, vbeinfo;
{ Initialize all baked-in programs }
procedure init(); procedure init();
implementation implementation

58
virtualbox-wrapper.ps1 Normal file
View File

@ -0,0 +1,58 @@
<#
You need a local git-ignored localenv.json file with the following content:
{
"virtualbox": {
"MachineName": "your-machine-name or guid"
}
}
#>
param (
[Parameter(Mandatory=$true)]
[ValidateSet('up', 'down')]
[String]$Command
)
$Config = Get-Content .\localenv.json | ConvertFrom-Json
$MachineName = $Config.virtualbox.MachineName
$LogLocation = $Config.virtualbox.LogLocation
$LogOutputEnabled = $LogLocation -ne $null
if ($Command -eq 'up') {
if($LogOutputEnabled) {
Clear-Content $LogLocation
}
$MonitorJob = Start-Job -ArgumentList $MachineName -ScriptBlock {
param($MachineName)
Write-Output "Starting $MachineName"
VBoxManage.exe startvm $MachineName
$running=$true
while($running) {
$status=(VBoxManage.exe list runningvms)
if($status) {
$running=$status.contains($MachineName)
} else {
$running=$false
}
}
}
if($LogOutputEnabled) {
$LogJob = Start-Job -ArgumentList $LogLocation -ScriptBlock {
param($LogLocation)
Get-Content -Path $LogLocation -Wait
}
}
while($MonitorJob.State -eq 'Running') {
if($LogOutputEnabled) {
Receive-Job $LogJob
}
Receive-Job $MonitorJob
}
} elseif ($Command -eq 'down') {
Write-Output "Stopping $MachineName"
VBoxManage.exe controlvm $MachineName poweroff
}