Compare commits
	
		
			56 Commits
		
	
	
		
			feature/do
			...
			develop
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 1145b900e4 | |||
| 436cd86d8c | |||
| 540444dfbf | |||
| 2d7c51ed15 | |||
| c842d9774f | |||
| 5963504f6b | |||
| e64a59714a | |||
| dd5d908e43 | |||
| 28846af43c | |||
| b1e3953960 | |||
| 7e00e23801 | |||
| bd12bbe862 | |||
| 48c203f028 | |||
| d859e40e4a | |||
| 8c3649f691 | |||
| b47194ed99 | |||
| 6bca42f2a5 | |||
| f1211f3cca | |||
| 0913daebc6 | |||
| d1a4b4d42f | |||
| 2906b8724b | |||
| 5e6e6c394a | |||
| 315050f095 | |||
| f795ba24f8 | |||
| 738307d070 | |||
| 04cff2e2c3 | |||
| 0b5981242b | |||
| f0dc598f44 | |||
| d4236f455e | |||
| 96fcf19c14 | |||
| 8c51bd8690 | |||
| 43464bb550 | |||
| 6a1b87e250 | |||
| 9473e26b50 | |||
| f19444201d | |||
| f907b7e072 | |||
| 80d0183391 | |||
| 5f3de290f3 | |||
| 07106b9aed | |||
| 25df276101 | |||
| dbc5105b9b | |||
| a61289a318 | |||
| 189526cab8 | |||
| 595dd4fbac | |||
| ba6d8037d2 | |||
| 208bda92c8 | |||
| 4c5038b001 | |||
| 98481ea1ce | |||
| 346dc4e4c9 | |||
| b2eee58df4 | |||
| 170b93dd69 | |||
| 34d6873a6a | |||
| e69d06ea4f | |||
|   | 2939afa729 | ||
| ad8e80913a | |||
| 4d25ceef77 | 
							
								
								
									
										65
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | |||||||
|  | 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" | ||||||
|  |  | ||||||
|  |   - 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}}" | ||||||
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -10,5 +10,4 @@ | |||||||
| /*.sh~ | /*.sh~ | ||||||
| /*.img | /*.img | ||||||
| src/include/asuro.pas | src/include/asuro.pas | ||||||
| .vscode/launch.json | localenv.json | ||||||
| .vscode |  | ||||||
|   | |||||||
| @@ -1,99 +0,0 @@ | |||||||
| stages: |  | ||||||
|   - Generate Stub and Versions |  | ||||||
|   - Generate Version Files |  | ||||||
|   - Compile Sources |  | ||||||
|   - Link |  | ||||||
|   - Generate ISO |  | ||||||
|   - Generate Sources List |  | ||||||
|   - Generate Documentation |  | ||||||
|  |  | ||||||
| compile_stub: |  | ||||||
|   stage: Generate Stub and Versions |  | ||||||
|   script:  |  | ||||||
|     - chmod +x ./compile_stub.sh |  | ||||||
|     - ./compile_stub.sh |  | ||||||
|   artifacts: |  | ||||||
|     paths: |  | ||||||
|       - lib/stub.o |  | ||||||
|  |  | ||||||
| vergen: |  | ||||||
|   stage: Generate Stub and Versions |  | ||||||
|   script:  |  | ||||||
|     - chmod +x ./compile_vergen.sh |  | ||||||
|     - ./compile_vergen.sh |  | ||||||
|   artifacts: |  | ||||||
|     paths: |  | ||||||
|       - release/*.svg |  | ||||||
|       - src/include/asuro.pas |  | ||||||
|  |  | ||||||
| compile_sources: |  | ||||||
|   stage: Compile Sources |  | ||||||
|   script: |  | ||||||
|     - chmod +x ./compile_sources.sh |  | ||||||
|     - ./compile_sources.sh |  | ||||||
|   artifacts: |  | ||||||
|     paths: |  | ||||||
|       - lib/*.o |  | ||||||
|   dependencies: |  | ||||||
|     - compile_stub |  | ||||||
|     - vergen |  | ||||||
|   needs: |  | ||||||
|     - vergen |  | ||||||
|     - compile_stub |  | ||||||
|  |  | ||||||
| link: |  | ||||||
|   stage: Link |  | ||||||
|   script: |  | ||||||
|     - chmod +x ./compile_link.sh |  | ||||||
|     - ./compile_link.sh |  | ||||||
|   artifacts: |  | ||||||
|     paths: |  | ||||||
|       - bin/kernel.bin |  | ||||||
|   dependencies: |  | ||||||
|     - compile_sources |  | ||||||
|   needs: |  | ||||||
|     - compile_sources |  | ||||||
|  |  | ||||||
| isogen: |  | ||||||
|   stage: Generate ISO |  | ||||||
|   script: |  | ||||||
|     - chmod +x ./compile_isogen.sh |  | ||||||
|     - ./compile_isogen.sh |  | ||||||
|     - chmod +x ./compile_sumgen.sh |  | ||||||
|     - ./compile_sumgen.sh |  | ||||||
|   artifacts: |  | ||||||
|     paths: |  | ||||||
|       - ./Asuro.iso |  | ||||||
|       - ./release/checksum.svg |  | ||||||
|   dependencies: |  | ||||||
|     - link |  | ||||||
|   needs: |  | ||||||
|     - link |  | ||||||
|  |  | ||||||
| sourcelist: |  | ||||||
|   stage: Generate Sources List |  | ||||||
|   script: |  | ||||||
|     - chmod +x ./compile_sourcelist.sh |  | ||||||
|     - ./compile_sourcelist.sh |  | ||||||
|   artifacts: |  | ||||||
|     paths: |  | ||||||
|       - ./sources.list |  | ||||||
|   dependencies: |  | ||||||
|     - vergen |  | ||||||
|   needs: |  | ||||||
|     - vergen |  | ||||||
|  |  | ||||||
| docgen: |  | ||||||
|   stage: Generate Documentation |  | ||||||
|   script: |  | ||||||
|     - chmod +x ./compile_docs.sh |  | ||||||
|     - ./compile_docs.sh |  | ||||||
|   artifacts: |  | ||||||
|     paths: |  | ||||||
|       - ./doc/* |  | ||||||
|   dependencies: |  | ||||||
|     - vergen |  | ||||||
|     - sourcelist |  | ||||||
|   needs: |  | ||||||
|     - vergen |  | ||||||
|     - sourcelist |  | ||||||
							
								
								
									
										13
									
								
								.mailmap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.mailmap
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										13
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @@ -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
									
									
								
							
							
						
						
									
										26
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							| @@ -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" | ||||||
|         } |         } | ||||||
|     ] |     ] | ||||||
| } | } | ||||||
							
								
								
									
										22
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								Dockerfile
									
									
									
									
									
								
							| @@ -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 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"] | ||||||
							
								
								
									
										73
									
								
								compile.sh
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								compile.sh
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| #!/bin/sh | #!/usr/bin/env bash | ||||||
| ERRCOUNT=0 | ERRCOUNT=0 | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| @@ -7,56 +7,43 @@ echo "Asuro Compilation" | |||||||
| echo " " | echo " " | ||||||
|  |  | ||||||
| #Compile Stub.asm | #Compile Stub.asm | ||||||
| ./compile_stub.sh | rm lib/* | ||||||
| if [ $? -ne 0 ] |  | ||||||
| then |  | ||||||
| 	echo "Failed to compile stub!" |  | ||||||
| 	ERRCOUNT=$((ERRCOUNT+1))	 |  | ||||||
| else |  | ||||||
| 	echo "Success." |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| #Generate .pas with versioning headers. | runOrFail() { | ||||||
| ./compile_vergen.sh | 	local binary=$1 | ||||||
|  | 	local errorText=$2 | ||||||
|  | 	if $binary; then | ||||||
|  | 		echo "Success." | ||||||
|  | 	else | ||||||
|  | 		echo "$errorText" | ||||||
|  | 		ERRCOUNT=$((ERRCOUNT+1)) | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
| #Compile all .pas sources | declare -a run_steps=( | ||||||
| ./compile_sources.sh | 	"compile_stub.sh" "Failed to compile stub!" | ||||||
| if [ $? -ne 0 ] | 	"compile_vergen.sh" "Versions failed to compile" | ||||||
| then | 	"compile_sources.sh" "Failed to compile FPC Sources!" | ||||||
| 	echo " " | 	"compile_link.sh" "Failed linking!" | ||||||
| 	echo "Failed to compile FPC Sources!" | 	"compile_isogen.sh" "Failed to create ISO!" | ||||||
| 	ERRCOUNT=$((ERRCOUNT+1))	 | ) | ||||||
| else |  | ||||||
| 	echo " " |  | ||||||
| 	echo "Success." |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| #Link into a binary. | for ((i=0; i<${#run_steps[@]}; i+=2)) | ||||||
| ./compile_link.sh | do | ||||||
| if [ $? -ne 0 ] | 	if [ "$ERRCOUNT" -eq "0" ] | ||||||
| then | 	then | ||||||
| 	echo "Failed linking!" | 			script=$(pwd)/"${run_steps[$i]}" | ||||||
| 	ERRCOUNT=$((ERRCOUNT+1)) | 			message="${run_steps[$i+1]}" | ||||||
| else | 			runOrFail "$script" "$message" | ||||||
| 	echo "Success." | 	fi | ||||||
| fi | done | ||||||
|  |  | ||||||
| #Generate an ISO with GRUB as the Bootloader. |  | ||||||
| ./compile_isogen.sh |  | ||||||
| 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" ] | ||||||
| then | then | ||||||
| 	./compile_finish.sh "failed" | 	. ./compile_finish.sh "failed" | ||||||
| else | else | ||||||
| 	./compile_finish.sh "success" | 	. ./compile_finish.sh "success" | ||||||
| fi | fi | ||||||
|  |  | ||||||
| cd .. | cd .. | ||||||
| @@ -1,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 | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/bin/bash | #!/usr/bin/env bash | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
| @@ -15,4 +15,3 @@ 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 |  | ||||||
| @@ -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 | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/bin/sh | #!/usr/bin/env bash | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/bin/sh | #!/usr/bin/env bash | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/bin/bash | #!/usr/bin/env bash | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| #!/bin/sh | #!/usr/bin/env bash | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
| echo "Compiling FPC Sources..." | echo "Compiling FPC Sources..." | ||||||
| echo " " | 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,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 | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| #/bin/sh | #!/usr/bin/env bash | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| #!/bin/bash | #!/usr/bin/env bash | ||||||
|  | set -e | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
| @@ -8,60 +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 "{" > $outfile |  | ||||||
| echo "   Include->Asuro - Constants generated during pipeline/compilation for use at runtime." >> $outfile | [[ -n "$release" ]] && version="$version-$release" | ||||||
| echo "   @author(Autogenerated)" >> $outfile | cat > $outfile <<EOF | ||||||
| echo "}" >> $outfile | unit asuro; | ||||||
| echo "unit asuro;" >> $outfile |   | ||||||
| echo " " >> $outfile | interface | ||||||
| echo "interface" >> $outfile |   | ||||||
| echo " " >> $outfile | const | ||||||
| echo "const" >> $outfile |      VERSION       = '$version'; | ||||||
| echo "     VERSION       = '$major.$minor.$sub-$revision$release'; //The current full version as a string." >> $outfile |      VERSION_MAJOR = '$major'; | ||||||
| echo "     VERSION_MAJOR = '$major'; // Current major version as a string." >> $outfile |      VERSION_MINOR = '$minor'; | ||||||
| echo "     VERSION_MINOR = '$minor'; // Current minor version as a string." >> $outfile |      VERSION_SUB   = '$sub'; | ||||||
| echo "     VERSION_SUB   = '$sub'; // Current sub version as a string." >> $outfile |      REVISION      = '$revision'; | ||||||
| echo "     REVISION      = '$revision'; // Current revision as a string." >> $outfile |      RELEASE       = '$release'; | ||||||
| echo "     RELEASE       = '$release'; // Current release as a string." >> $outfile |      LINE_COUNT    = $linecount; | ||||||
| echo "     LINE_COUNT    = $linecount; // Project line count as compiled as a string." >> $outfile |      FILE_COUNT    = $sourcecount; | ||||||
| echo "     FILE_COUNT    = $sourcecount; // Project line count as compiled as a string." >> $outfile |      DRIVER_COUNT  = $drivercount; | ||||||
| echo "     DRIVER_COUNT  = $drivercount; // Number of baked drivers in the current binary." >> $outfile |      FPC_VERSION   = '$fpcversion'; | ||||||
| echo "     FPC_VERSION   = '$fpcversion'; // Version of the FreePascal Compiler used to compile the current binary." >> $outfile |      NASM_VERSION  = '$nasmversion'; | ||||||
| echo "     NASM_VERSION  = '$nasmversion'; // Version of the Netwide Assembler used to compile the multiboot stub." >> $outfile |      MAKE_VERSION  = '$makeversion'; | ||||||
| echo "     MAKE_VERSION  = '$makeversion'; // Version of MAKE used to link the current binary." >> $outfile |      COMPILE_DATE  = '$compiledate'; | ||||||
| echo "     COMPILE_DATE  = '$compiledate'; // Date in which the current binary was compiled." >> $outfile |      COMPILE_TIME  = '$compiletime'; | ||||||
| echo "     COMPILE_TIME  = '$compiletime'; // Time in which the current binary was compiled." >> $outfile |      CHECKSUM      = '$checksum'; | ||||||
| echo "     CHECKSUM      = '$checksum'; // MD5 pseduo-checksum of all of the sourcefiles together." >> $outfile |   | ||||||
| echo " " >> $outfile | implementation | ||||||
| echo "implementation" >> $outfile |   | ||||||
| echo " " >> $outfile | end. | ||||||
| echo "end." >> $outfile | 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." | ||||||
|   | |||||||
| @@ -1,4 +1,3 @@ | |||||||
| version: "3.9" |  | ||||||
| services: | services: | ||||||
|   builder: |   builder: | ||||||
|     build: . |     build: . | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ ENTRY(loader) | |||||||
| SECTIONS | SECTIONS | ||||||
| { | { | ||||||
|   . = 0xC0100000; |   . = 0xC0100000; | ||||||
|  |   kernel_start = .; | ||||||
|   .text : AT(ADDR(.text) - 0xC0000000) |   .text : AT(ADDR(.text) - 0xC0000000) | ||||||
|   { |   { | ||||||
|     text = .; _text = .; __text = .; |     text = .; _text = .; __text = .; | ||||||
| @@ -33,4 +33,5 @@ SECTIONS | |||||||
|     . = ALIGN(4096); |     . = ALIGN(4096); | ||||||
|   } |   } | ||||||
|   end = .; _end = .; __end = .; |   end = .; _end = .; __end = .; | ||||||
|  |   kernel_end = .; | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										47
									
								
								readme.md
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								readme.md
									
									
									
									
									
								
							| @@ -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 | ||||||
|  | - 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`. | - 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`. | ||||||
| @@ -491,22 +491,26 @@ begin | |||||||
|          |          | ||||||
|         { Create a new header to the use in our DHCP REQUEST packet } |         { Create a new header to the use in our DHCP REQUEST packet } | ||||||
|         SendHeader:= createHeader(); |         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])); |         CopyIPv4(puint8(@Header^.Server_IP[0]), puint8(@SendHeader^.Server_IP[0])); | ||||||
|         processHeader(SendHeader); |         processHeader(SendHeader); | ||||||
|  |  | ||||||
|         { Setup Options } |         { Setup Options } | ||||||
|         SendOptions:= newOptions(); |         SendOptions:= newOptions(); | ||||||
|  |  | ||||||
|         { Create a message type option and assign it the value REQUEST } |         { Create a message type option and assign it the value REQUEST } | ||||||
|         SendMsgType:= ord(TDHCPMessageType.REQUEST); |         SendMsgType:= ord(TDHCPMessageType.REQUEST); | ||||||
|         NewOption(SendOptions, TDHCPOpCode.DHCP_MESSAGE_TYPE, void(@SendMsgType), 1, false); |         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 } |         { 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 } |         { Create a Server Identifier Option and assign it the value from the OFFER packet options } | ||||||
|         Option:= getOptionByOpcode(Options, TDHCPOpCode.SERVER_IDENTIFIER); |         Option:= getOptionByOpcode(Options, TDHCPOpCode.SERVER_IDENTIFIER); | ||||||
|         if Option <> nil then begin |         if Option <> nil then begin | ||||||
|             NewOption(SendOptions, TDHCPOpCode.SERVER_IDENTIFIER, void(@Option^.Value[0]), 4, false); |             NewOption(SendOptions, TDHCPOpCode.SERVER_IDENTIFIER, void(@Option^.Value[0]), 4, false); | ||||||
|         end; |         end; | ||||||
|  |  | ||||||
|         { Create a Parameter Request List, Request the following: Netmask, Gateway, DNS Name & DNS Server } |         { Create a Parameter Request List, Request the following: Netmask, Gateway, DNS Name & DNS Server } | ||||||
|         RequestParams[0]:= Ord(TDHCPOpCode.SUBNET_MASK); |         RequestParams[0]:= Ord(TDHCPOpCode.SUBNET_MASK); | ||||||
|         RequestParams[1]:= Ord(TDHCPOpCode.ROUTER); |         RequestParams[1]:= Ord(TDHCPOpCode.ROUTER); | ||||||
| @@ -522,9 +526,13 @@ begin | |||||||
|         MAC:= getMAC(); |         MAC:= getMAC(); | ||||||
|         packetCtx:= PPacketContext(Kalloc(sizeof(TPacketContext))); |         packetCtx:= PPacketContext(Kalloc(sizeof(TPacketContext))); | ||||||
|         packetCtx^.TTL:= 128; |         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]); |         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]); |         copyIPv4(@BROADCAST_IP[0], @packetCtx^.IP.Destination[0]); | ||||||
|  |  | ||||||
|         { Setup UDPContext (UDP) & copy in the correct details } |         { Setup UDPContext (UDP) & copy in the correct details } | ||||||
| @@ -570,7 +578,7 @@ begin | |||||||
|  |  | ||||||
|     { Check the frame is for us and then process } |     { Check the frame is for us and then process } | ||||||
|     MAC:= getMAC; |     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.'); |         Outputln('DHCP','Frame is addressed to us.'); | ||||||
|         { Check the message type is client specific } |         { Check the message type is client specific } | ||||||
|         If Header^.Message_Type = $02 then begin |         If Header^.Message_Type = $02 then begin | ||||||
| @@ -655,7 +663,7 @@ begin | |||||||
|         copyMAC(@BROADCAST_MAC[0], @packetCtx^.MAC.Destination[0]); |         copyMAC(@BROADCAST_MAC[0], @packetCtx^.MAC.Destination[0]); | ||||||
|         MAC:= getMAC; |         MAC:= getMAC; | ||||||
|         copyMAC(MAC, @packetCtx^.MAC.Source[0]); |         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]); |         copyIPv4(@BROADCAST_IP[0], @packetCtx^.IP.Destination[0]); | ||||||
|  |  | ||||||
|         { Setup UDPContext (UDP) } |         { Setup UDPContext (UDP) } | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -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; | ||||||
|   | |||||||
| @@ -143,6 +143,22 @@ type | |||||||
|  |  | ||||||
|     PText = ^Text; |     PText = ^Text; | ||||||
|  |  | ||||||
|  | var | ||||||
|  |   AK_START : uint32; external name 'kernel_start'; | ||||||
|  |   AK_END   : uint32; external name 'kernel_end'; | ||||||
|  |   ASURO_KERNEL_START : uint32; | ||||||
|  |   ASURO_KERNEL_END   : uint32; | ||||||
|  |   ASURO_KERNEL_SIZE  : uint32; | ||||||
|  |  | ||||||
|  | procedure init(); | ||||||
|  |  | ||||||
| implementation | implementation | ||||||
|  |  | ||||||
|  | procedure init(); | ||||||
|  | begin | ||||||
|  |     ASURO_KERNEL_START := uint32(@AK_START); | ||||||
|  |     ASURO_KERNEL_END := uint32(@AK_END); | ||||||
|  |     ASURO_KERNEL_SIZE:= ASURO_KERNEL_END - ASURO_KERNEL_START; | ||||||
|  | end; | ||||||
|  |  | ||||||
| end. | end. | ||||||
|   | |||||||
| @@ -125,6 +125,9 @@ var | |||||||
|    HM              : PHashMap; |    HM              : PHashMap; | ||||||
|     |     | ||||||
| begin | begin | ||||||
|  |      { Init the base system unit } | ||||||
|  |      System.init(); | ||||||
|  |  | ||||||
|      { Serial Init } |      { Serial Init } | ||||||
|      serial.init(); |      serial.init(); | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										59
									
								
								virtualbox-wrapper.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								virtualbox-wrapper.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | |||||||
|  | <#  | ||||||
|  | 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 | ||||||
|  |   } | ||||||
|  |   Get-Job | Stop-Job | Remove-Job -Force | ||||||
|  | } elseif ($Command -eq 'down') { | ||||||
|  |   Write-Output "Stopping $MachineName" | ||||||
|  |   VBoxManage.exe controlvm $MachineName poweroff | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user