Compare commits

..
Author SHA1 Message Date
t3hn3rd 07e9095582 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.

# Conflicts:
#	.vscode/launch.json
2025-03-08 21:09:13 +00:00
Aaron 72769fbef7 fix 2022-09-28 16:15:45 +01:00
Aaron 95599c0e7c fix 2022-09-28 16:14:06 +01:00
Aaron fcaafa0d12 Started aadding file handle stuff to volume manager 2022-09-28 16:04:51 +01:00
Aaron e490b95f1d comments 2022-09-27 17:23:42 +01:00
Aaron b601080960 Added delete files and directory functions to flatfs 2022-02-03 02:21:51 +00:00
Aaron 27177979a2 Flatfs reading and writing files and directories done 2022-02-03 01:21:37 +00:00
Aaron f88a282893 Progress on flatfs 2022-02-02 23:19:30 +00:00
Aaron ff4c597ff3 Work on storage and flat file system 2022-02-01 05:07:52 +00:00
Aaron 24c371cab1 Added new String functions 2022-01-31 00:34:38 +00:00
Aaron 7588a4c9cb Revert "Updated Strings unit with new functions"
This reverts commit 5cb415c76b.
2022-01-31 00:31:01 +00:00
Aaron 5cb415c76b Updated Strings unit with new functions 2022-01-31 00:27:02 +00:00
Aaron 118d8b0c03 Merge branch 'feature/storage-system' of https://gitlab.spexeah.com/spexeah/asuro into feature/storage-system
# Conflicts:
#	src/driver/storage/drivemanager.pas
#	src/driver/storage/storagemanagement.pas
2022-01-30 00:42:37 +00:00
Aaron 28caca3bcc commiting before rebase 2022-01-30 00:34:52 +00:00
Aaron 6476a774dc More progress and fixes 2022-01-30 00:34:52 +00:00
Aaron e791edb02a Progress 2022-01-30 00:34:51 +00:00
Aaron da36f6fabb Continued new volume management stuff. 2022-01-30 00:34:51 +00:00
Aaron 97e1a18253 Restructuring and expanding storage system. 2022-01-30 00:34:51 +00:00
Aaron 88a850e8fc More progress and fixes 2022-01-29 22:21:10 +00:00
Aaron 10c9194c5f Progress 2022-01-29 20:05:11 +00:00
Aaron 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
t3hn3rd b2eee58df4 Update readme.md 2022-01-29 12:46:35 +00:00
t3hn3rd 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
t3hn3rd 34d6873a6a Docgen changes
Changed docgen job to create doc folder, not public for now.
2021-07-06 20:35:26 +01:00
t3hn3rd 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
Jinux 2939afa729 3 time the charm 2021-07-06 19:18:23 +00:00
t3hn3rd 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
t3hn3rd 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
Aaron 94b477d8f7 Continued new volume management stuff. 2021-06-25 01:48:20 +01:00
Aaron ba38f4fd19 Restructuring and expanding storage system. 2021-06-23 21:22:06 +01:00
28 changed files with 1989 additions and 278 deletions

No files matched your search

-2
View File
@@ -10,5 +10,3 @@
/*.sh~
/*.img
src/include/asuro.pas
.vscode/launch.json
.vscode
+28 -54
View File
@@ -1,25 +1,23 @@
stages:
- Generate Stub and Versions
- Generate Version Files
- Compile Versions
- Compile Sources
- Link
- Generate ISO
- Generate Sources List
- Generate Documentation
- Deploy
compile_stub:
stage: Generate Stub and Versions
script:
- chmod +x ./compile_stub.sh
- ./compile_stub.sh
artifacts:
cache:
- key: ${CI_COMMIT_REF_SLUG}
paths:
- lib/stub.o
- lib/*.o
- bin/kernel.bin
- doc
vergen:
stage: Generate Stub and Versions
before_script:
- chmod +x *.sh
versions:
stage: Compile Versions
script:
- chmod +x ./compile_vergen.sh
- ./compile_vergen.sh
artifacts:
paths:
@@ -29,71 +27,47 @@ vergen:
compile_sources:
stage: Compile Sources
script:
- chmod +x ./compile_sources.sh
- rm -f lib/*.so
- ./compile_sources.sh
artifacts:
paths:
- lib/*.o
dependencies:
- compile_stub
- vergen
needs:
- vergen
- compile_stub
- versions
link:
stage: Link
script:
- chmod +x ./compile_link.sh
- ./compile_stub.sh
- ./compile_link.sh
artifacts:
paths:
- bin/kernel.bin
dependencies:
- compile_sources
needs:
- versions
- compile_sources
isogen:
stage: Generate ISO
stage: Deploy
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
only:
- master
- develop
script:
- chmod +x ./compile_docs.sh
- ./compile_sourcelist.sh
- ./compile_docs.sh
# Remove comments when we want to use gitlab pages.
#- cp doc public
allow_failure: true
artifacts:
paths:
- ./doc/*
dependencies:
- vergen
- sourcelist
- doc
#- public/*
#- ./sources.list
needs:
- vergen
- sourcelist
- versions
+3 -10
View File
@@ -3,18 +3,11 @@
{
"name":"Run",
"request": "launch",
"type": "coreclr",
"type": "PowerShell",
"preLaunchTask": "Build",
"program": "VBoxSDL",
"args": [
"--comment",
"Asuro",
"--startvm",
"7d395c96-891c-4139-b77d-9b6b144b0b93"
],
"script": "${workspaceFolder}/virtualbox-wrapper.ps1",
"args": ["-MachineName", "7d395c96-891c-4139-b77d-9b6b144b0b93"],
"cwd": "${workspaceFolder}",
"console": "internalConsole",
"internalConsoleOptions": "neverOpen"
}
]
}
+13 -9
View File
@@ -2,18 +2,22 @@ FROM ubuntu:latest
VOLUME ["/code"]
ENV DEBIAN_FRONTEND=noninteractive
RUN dpkg --add-architecture i386
RUN apt-get update
RUN apt-get install nasm curl make:i386 binutils:i386 xorriso grub-pc-bin dos2unix -y
RUN apt-get clean
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
RUN apt-get update && apt-get install -y \
curl dos2unix wget git make nasm binutils:i386 xorriso grub-pc-bin && \
apt-get clean my room
WORKDIR ./fpc-2.6.4.i386-linux
RUN ./install.sh
SHELL ["/bin/bash", "-c"]
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
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
RUN find . -type f -print0 | xargs -0 dos2unix
ENTRYPOINT ["/bin/bash", "/compile.sh"]
ENTRYPOINT ["/bin/bash", "-c"]
CMD ["/compile.sh"]
+17 -34
View File
@@ -1,4 +1,4 @@
#!/bin/sh
#!/usr/bin/env bash
ERRCOUNT=0
echo " "
echo "======================="
@@ -7,49 +7,32 @@ echo "Asuro Compilation"
echo " "
#Compile Stub.asm
./compile_stub.sh
if [ $? -ne 0 ]
then
echo "Failed to compile stub!"
ERRCOUNT=$((ERRCOUNT+1))
else
rm lib/*
runOrFail() {
local binary=$1
local errorText=$2
if $binary; then
echo "Success."
else
echo "$errorText"
ERRCOUNT=$((ERRCOUNT+1))
fi
}
runOrFail $(pwd)/compile_stub.sh "Failed to compile stub!"
#Generate .pas with versioning headers.
./compile_vergen.sh
runOrFail $(pwd)/compile_vergen.sh "Versions failed to compile"
#Compile all .pas sources
./compile_sources.sh
if [ $? -ne 0 ]
then
echo " "
echo "Failed to compile FPC Sources!"
ERRCOUNT=$((ERRCOUNT+1))
else
echo " "
echo "Success."
fi
runOrFail $(pwd)/compile_sources.sh "Failed to compile FPC Sources!"
#Link into a binary.
./compile_link.sh
if [ $? -ne 0 ]
then
echo "Failed linking!"
ERRCOUNT=$((ERRCOUNT+1))
else
echo "Success."
fi
runOrFail $(pwd)/compile_link.sh "Failed linking!"
#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
runOrFail ./compile_isogen.sh "Failed to create ISO!"
#Call generate final artifacts based on failure or success of the above.
if [ "$ERRCOUNT" -ne "0" ]
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
echo > checksums.md5
for directory in $(find src/ -maxdepth 10 -type d); do
for filename in $directory/*.pas; do
+1 -2
View File
@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
echo " "
echo "======================="
echo " "
@@ -15,4 +15,3 @@ rm -rf ./doc/*
echo "Generating Docs..."
./pasdoc/bin/pasdoc -N "Asuro" -T "Asuro OS Documentation" -O "html" -E ./doc/ -S sources.list --use-tipue-search
echo "Docgen finished."
exit 0
+2 -2
View File
@@ -1,8 +1,8 @@
#/bin/sh
#!/usr/bin/env bash
echo " "
echo "======================="
echo " "
if [ "$1" == "failed" ]
if [[ "$1" == "failed" ]]
then
echo "Errors Occurred, please review."
wget -q https://img.shields.io/badge/build-failed-red.svg -O release/build.svg 2>/dev/null
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh
#!/usr/bin/env bash
echo " "
echo "======================="
echo " "
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh
#!/usr/bin/env bash
echo " "
echo "======================="
echo " "
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
echo " "
echo "======================="
echo " "
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh
#!/usr/bin/env bash
echo " "
echo "======================="
echo " "
+1 -2
View File
@@ -1,8 +1,7 @@
#!/bin/sh
#!/usr/bin/env bash
echo " "
echo "======================="
echo " "
echo "Compiling Stub..."
echo " "
rm lib/*
nasm -f elf src/stub/stub.asm -o lib/stub.o
+1 -1
View File
@@ -1,4 +1,4 @@
#/bin/sh
#!/usr/bin/env bash
echo " "
echo "======================="
echo " "
+55 -47
View File
@@ -1,4 +1,5 @@
#!/bin/bash
#!/usr/bin/env bash
set -e
echo " "
echo "======================="
echo " "
@@ -8,60 +9,67 @@ chmod +x ./compile_checksum.sh
./compile_checksum.sh
outfile="src/include/asuro.pas"
file="version"
while IFS=: read -r line;do
major=$(echo $line | awk '{print $1}')
minor=$(echo $line | awk '{print $2}')
sub=$(echo $line | awk '{print $3}')
release=$(echo $line | awk '{print $4}')
done <"$file"
{
# this script requires semver tool
wget -q https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver -O bin/semver && chmod +x bin/semver
export PATH="$(pwd)/bin:$PATH"
}
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}')
sourcecount=$(find src -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}')
makeversion=$(make -v | grep GNU | awk '{print $3}' | grep -v GNU)
nasmversion=$(nasm -v | awk '{print $3'})
compiledate=$(date +"%d/%m/%y")
compiletime=$(date +"%T")
checksum=$(md5sum checksums.md5 | awk '{print $1}')
echo "{" > $outfile
echo " Include->Asuro - Constants generated during pipeline/compilation for use at runtime." >> $outfile
echo " @author(Autogenerated)" >> $outfile
echo "}" >> $outfile
echo "unit asuro;" >> $outfile
echo " " >> $outfile
echo "interface" >> $outfile
echo " " >> $outfile
echo "const" >> $outfile
echo " VERSION = '$major.$minor.$sub-$revision$release'; //The current full version as a string." >> $outfile
echo " VERSION_MAJOR = '$major'; // Current major version as a string." >> $outfile
echo " VERSION_MINOR = '$minor'; // Current minor version as a string." >> $outfile
echo " VERSION_SUB = '$sub'; // Current sub version as a string." >> $outfile
echo " REVISION = '$revision'; // Current revision as a string." >> $outfile
echo " RELEASE = '$release'; // Current release as a string." >> $outfile
echo " LINE_COUNT = $linecount; // Project line count as compiled as a string." >> $outfile
echo " FILE_COUNT = $sourcecount; // Project line count as compiled as a string." >> $outfile
echo " DRIVER_COUNT = $drivercount; // Number of baked drivers in the current binary." >> $outfile
echo " FPC_VERSION = '$fpcversion'; // Version of the FreePascal Compiler used to compile the current binary." >> $outfile
echo " NASM_VERSION = '$nasmversion'; // Version of the Netwide Assembler used to compile the multiboot stub." >> $outfile
echo " MAKE_VERSION = '$makeversion'; // Version of MAKE used to link the current binary." >> $outfile
echo " COMPILE_DATE = '$compiledate'; // Date in which the current binary was compiled." >> $outfile
echo " COMPILE_TIME = '$compiletime'; // Time in which the current binary was compiled." >> $outfile
echo " CHECKSUM = '$checksum'; // MD5 pseduo-checksum of all of the sourcefiles together." >> $outfile
echo " " >> $outfile
echo "implementation" >> $outfile
echo " " >> $outfile
echo "end." >> $outfile
[[ -n "$release" ]] && version="$version-$release"
cat > $outfile <<EOF
unit asuro;
interface
const
VERSION = '$version';
VERSION_MAJOR = '$major';
VERSION_MINOR = '$minor';
VERSION_SUB = '$sub';
REVISION = '$revision';
RELEASE = '$release';
LINE_COUNT = $linecount;
FILE_COUNT = $sourcecount;
DRIVER_COUNT = $drivercount;
FPC_VERSION = '$fpcversion';
NASM_VERSION = '$nasmversion';
MAKE_VERSION = '$makeversion';
COMPILE_DATE = '$compiledate';
COMPILE_TIME = '$compiletime';
CHECKSUM = '$checksum';
implementation
end.
EOF
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
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/release-$release-blue.svg -O release/release.svg 2>/dev/null
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/files-$sourcecount-blueviolet.svg -O release/files.svg 2>/dev/null
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/FPC_version-$fpcversion-lightgrey.svg -O release/fpcversion.svg 2>/dev/null
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/MAKE_version-$makeversion-lightgrey.svg -O release/makeversion.svg 2>/dev/null
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/fingerprint-$checksum-important.svg -O release/fingerprint.svg 2>/dev/null
set +e # These can fail on branches and such, for now
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/revision-$revision-blue.svg -O release/revision.svg
wget -q https://img.shields.io/badge/release-$release-blue.svg -O release/release.svg
wget -q https://img.shields.io/badge/lines-$linecount-blueviolet.svg -O release/lines.svg
wget -q https://img.shields.io/badge/files-$sourcecount-blueviolet.svg -O release/files.svg
wget -q https://img.shields.io/badge/drivers-$drivercount-blueviolet.svg -O release/drivers.svg
wget -q https://img.shields.io/badge/FPC_version-$fpcversion-lightgrey.svg -O release/fpcversion.svg
wget -q https://img.shields.io/badge/NASM_version-$nasmversion-lightgrey.svg -O release/nasmversion.svg
wget -q https://img.shields.io/badge/MAKE_version-$makeversion-lightgrey.svg -O release/makeversion.svg
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."
+32
View File
@@ -0,0 +1,32 @@
#Flat filesystem
A super simple filesystem for asuro. Folders are emulated in filenames.
Starts with disk info sector, sector 0 of volume
---
#### disk info
jmp2boot : ubit24;
OEMName : array[0..7] of char;
version : uint16 // numerical version of filesystem
sectorCount : uint16;
fileCount : uint16
signature : uint32 = 0x0B00B1E5
the Rest of the sector is reserved
---
Starting from sector 1 is the file table. Table size is determined by entry size (64) * fileCount
---
####File entry
name : array[0..59] of char //file name max 60 chars
fileStart : 16bit // start sector of data
fileSize : 16bit // data size in sectors
---
+10 -16
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.
* [VSCode (Optional, but highly recommended)](https://code.visualstudio.com/)
Visual Studio code is our IDE of choice, and we have a number of recommended plugins.
* [C# Plugin by Microsoft](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp)
This plugin gives you the ability to use the 'coreclr' task type, allowing the automatic launching of virtualbox with the resulting image generated during compilation of Asuro.
* [PowerShell Plugin by Microsoft](https://marketplace.visualstudio.com/items?itemName=ms-vscode.powershell)
This plugin gives you the ability to use the 'PowerShell' task type, allowing the automatic launching of virtualbox with the resulting image generated during compilation of Asuro.
* [VirtualBox](https://www.virtualbox.org/)
Virtualbox is our Virtualisation environment of choice, don't ask why, it just is.
@@ -27,15 +27,15 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f
3. Install Docker for Windows.
4. Install Git for Windows.
5. Install VSCode & the listed plugins.
6. Install VirtualBox.
6. Install VirtualBox (v7+).
7. Clone this repository.
8. Run the following command in the root of the repo to build the docker image:
```powershell
docker-compose build builder
docker compose build builder
```
9. Run the following command to compile Asuro:
```powershell
docker-compose run builder
docker compose run builder
```
10. Create a new virtual machine in Virtualbox and mount the `Asuro.iso` generated in step 9 as a boot image.
11. Add the virtualbox installation directory to your `%PATH%` environment variable, usually:
@@ -57,18 +57,11 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f
{
"name":"Run",
"request": "launch",
"type": "coreclr",
"type": "PowerShell",
"preLaunchTask": "Build",
"program": "VBoxSDL",
"args": [
"--comment",
"Asuro",
"--startvm",
"<YOUR UUID HERE>"
],
"script": "${workspaceFolder}/virtualbox-wrapper.ps1",
"args": ["-MachineName", "7d395c96-891c-4139-b77d-9b6b144b0b93"],
"cwd": "${workspaceFolder}",
"console": "internalConsole",
"internalConsoleOptions": "neverOpen"
}
]
}
@@ -77,5 +70,6 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f
13. Open your project folder in VSCode, use CTRL+SHIFT+B to build & F5 to build + run in VBox.
14. Congratulations! You can now play with Asuro!
### Gotchas
### 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`.
+22 -5
View File
@@ -21,7 +21,9 @@ uses
lmemorymanager,
storagemanagement,
strings,
tracer;
tracer,
drivemanager,
storagetypes;
type
TPortMode = (P_READ, P_WRITE);
@@ -267,6 +269,7 @@ var
slaveDevice : TStorage_Device;
buffer : puint8;
i : uint8;
test : PStorage_device;
begin
push_trace('ide.load');
console.writestringln('[IDE] (LOAD) BEGIN');
@@ -288,14 +291,15 @@ begin
exit;
end;
masterDevice.hpc:= uint32(IDEDevices[0].info[3] DIV IDEDevices[0].info[1]);
// masterDevice.hpc:= uint32(IDEDevices[0].info[3] DIV IDEDevices[0].info[1]); //TODO wtf is hpc
masterDevice.sectorSize:= 512;
if masterDevice.maxSectorCount <> 0 then begin
IDEDevices[0].exists:= true;
masterDevice.readCallback:= @dread;
masterDevice.writeCallback:= @dwrite;
storagemanagement.register_device(@masterDevice);
// storagemanagement.register_device(@masterDevice);
drivemanager.register_device(@masterDevice);
end;
end;
@@ -330,10 +334,14 @@ var
device: uint8;
data: uint16;
begin
push_trace('IDE.readPIO28');
if not validate_28bit_address(LBA) then begin
console.writestringln('IDE (writePIO28) ERROR: Invalid LBA!');
end;
// push_trace('IDE.readPIO28.2');
//Add last 4 bits of LBA to device port
if IDEDevices[drive].isMaster then begin
device:= ATA_DEVICE_MASTER;
@@ -344,6 +352,8 @@ begin
device_select($F0 or ((LBA and $0F000000) shr 24)); //LBA primary slave
end;
// push_trace('IDE.readPIO28.3');
no_interrupt(device);
port_write(ATA_REG_ERROR, 0);
@@ -353,6 +363,8 @@ begin
port_write(ATA_REG_LBA1, (LBA and $0000FF00) shr 8);
port_write(ATA_REG_LBA2, (LBA and $00FF0000) shr 16);
// push_trace('IDE.readPIO28.4');
//send read command
port_write(ATA_REG_COMMAND, ATA_CMD_READ_PIO);
if not is_ready() then exit;
@@ -368,6 +380,8 @@ begin
i:= i + 2;
end;
// push_trace('IDE.readPIO28.5');
end;
procedure writePIO28(drive : uint8; LBA : uint32; buffer : puint8);
@@ -430,8 +444,10 @@ procedure dread(device : PStorage_device; LBA : uint32; sectorCount : uint32; bu
var
i : uint16;
begin
push_trace('IDE.dread');
for i:=0 to sectorCount-1 do begin
readPIO28(device^.controllerId0, LBA, puint8(@buffer[512*i]));
readPIO28(device^.controllerId0, LBA + i, puint8(@buffer[512*i]));
psleep(100)
end;
end;
@@ -440,7 +456,8 @@ var
i : uint16;
begin
for i:=0 to sectorCount-1 do begin
writePIO28(device^.controllerId0, LBA, puint8(@buffer[512*i]));
writePIO28(device^.controllerId0, LBA + i, puint8(@buffer[512*i]));
psleep(100)
end;
// writePIO28(device^.controllerId0, LBA, puint8(buffer));
end;
+81
View File
@@ -0,0 +1,81 @@
{
Driver->Storage->MBR Master boot record
@author(Aaron Hance [email protected])
}
unit mbr;
interface
uses
tracer;
type
PMaster_Boot_Record = ^TMaster_Boot_Record;
PPartition_table = ^TPartition_table;
TPartition_table = bitpacked record
attributes : uint8;
CHS_start : array[0..2] of uint8;
system_id : uint8;
CHS_end : array[0..2] of uint8;
LBA_start : uInt32;
sector_count : uInt32;
end;
TMaster_Boot_Record = bitpacked record
bootstrap : array[0..439] of uint8;
signature : uint32;
rsv : uint16;
partition : array[0..3] of TPartition_table;
boot_sector : uint16;
end;
T24bit = array[0..2] of uint8;
function get_bootable(partition_table : PPartition_table) : boolean;
procedure set_bootable(partition_table : PPartition_table);
procedure setup_partition(partition_table : PPartition_table; address : uint32; sectorSize : uint32);
implementation
{ convert LBA address to CHS address}
function LBA_2_CHS(lba : uint32) : T24bit;
var
dat : T24bit;
begin
//TODO impliment procedure
LBA_2_CHS := dat;
end;
{ Set a partition struct to be bootable}
procedure set_bootable(partition_table : PPartition_table);
begin
push_trace('MBR.set_bootable');
//set the bootble bit in attributes
partition_table^.attributes := (partition_table^.attributes and $80);
end;
{ Check a partitions bootable bit }
function get_bootable(partition_table : PPartition_table) : boolean;
begin
push_trace('MBR.get_bootable');
//get the bootble bit in attributes
get_bootable := (partition_table^.attributes and $80) = $80;
end;
{ Setup a partition table struct }
procedure setup_partition(partition_table : PPartition_table; address : uint32; sectorSize : uint32);
begin
push_trace('MBR.setup_partition');
//set values in both LBA and CHS addressing schemes
partition_table^.LBA_start := address;
partition_table^.sector_count := sectorSize;
partition_table^.CHS_start := LBA_2_CHS(address);
partition_table^.CHS_start := LBA_2_CHS(address + sectorSize);
push_trace('MBR.setup_partition.end');
end;
end.
File diff suppressed because it is too large. Load diff
Loaded 20 of 28 files, more files were not shown because too many files have changed in this diff. Show more