Compare commits
37
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8be364c990 | ||
|
|
0e2c6b2936 | ||
|
|
632c3fa66b | ||
|
|
875e3e4765 | ||
|
|
e28d68128d | ||
|
|
a9969d58f8 | ||
|
|
d7a54d858d | ||
|
|
4e991c3e6f | ||
|
|
a3217de71a | ||
|
|
19b433a19f | ||
|
|
69d1d22a18 | ||
|
|
5c15343ed0 | ||
|
|
3ae349fbc8 | ||
|
|
78c060c114 | ||
|
|
cd925e96c2 | ||
|
|
142dd486dd | ||
|
|
beeeabd441 | ||
|
|
b73c66f6d6 | ||
|
|
189526cab8 | ||
|
|
595dd4fbac | ||
|
|
ba6d8037d2 | ||
|
|
208bda92c8 | ||
|
|
a7111d3cac | ||
|
|
d182fd7f46 | ||
|
|
4c5038b001 | ||
|
|
98481ea1ce | ||
|
|
b5582b1284 | ||
|
|
161cea4920 | ||
|
|
6b81c4ece0 | ||
|
|
ee17f69115 | ||
|
|
81c19bff16 | ||
|
|
e7cda58113 | ||
|
|
44f18554e1 | ||
|
|
52b42ec975 | ||
|
|
2815dd9e4d | ||
|
|
d057bfc3ff | ||
|
|
e4621c8aaa |
No files matched your search
+52
@@ -0,0 +1,52 @@
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: build
|
||||
|
||||
steps:
|
||||
- name: build-image
|
||||
image: plugins/docker
|
||||
settings:
|
||||
repo: t3hn3rd/asuro-build
|
||||
tags: latest
|
||||
dockerfile: Dockerfile
|
||||
registry: docker.io
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
||||
|
||||
- name: compile
|
||||
image: t3hn3rd/asuro-build:latest
|
||||
depends_on:
|
||||
- build-image
|
||||
commands:
|
||||
- git fetch --tags
|
||||
- find . -type f -print0 | xargs -0 dos2unix
|
||||
- chmod +x /drone/src/*.sh
|
||||
- /drone/src/compile.sh
|
||||
|
||||
- name: upload-iso-artifact
|
||||
image: alpine/git
|
||||
depends_on:
|
||||
- compile
|
||||
when:
|
||||
branch:
|
||||
- master
|
||||
environment:
|
||||
GITEA_TOKEN:
|
||||
from_secret: gitea_token
|
||||
commands:
|
||||
- apk add --no-cache curl
|
||||
- chmod +w Asuro.iso
|
||||
- cp Asuro.iso "Asuro-$(git rev-parse --short HEAD).iso"
|
||||
- echo "Uploading Asuro-$(git rev-parse --short HEAD).iso to Gitea Packages..."
|
||||
- |
|
||||
curl -X PUT "https://gitea.spexeah.com/api/packages/Spexeah/generic/asuro-iso/$(git rev-parse --short HEAD)/Asuro.iso" \
|
||||
-H "Authorization: token $GITEA_TOKEN" --upload-file "Asuro-$(git rev-parse --short HEAD).iso"
|
||||
- echo "Updating latest ISO reference..."
|
||||
- |
|
||||
curl -X DELETE https://gitea.spexeah.com/api/packages/Spexeah/generic/asuro-iso/latest/Asuro.iso \
|
||||
-H "Authorization: token $GITEA_TOKEN" || echo "No previous latest version found."
|
||||
- |
|
||||
curl -X PUT https://gitea.spexeah.com/api/packages/Spexeah/generic/asuro-iso/latest/Asuro.iso \
|
||||
-H "Authorization: token $GITEA_TOKEN" --upload-file "Asuro-$(git rev-parse --short HEAD).iso"
|
||||
@@ -10,3 +10,4 @@
|
||||
/*.sh~
|
||||
/*.img
|
||||
src/include/asuro.pas
|
||||
localenv.json
|
||||
@@ -1,73 +0,0 @@
|
||||
stages:
|
||||
- Compile Versions
|
||||
- Compile Sources
|
||||
- Link
|
||||
- Generate Documentation
|
||||
- Deploy
|
||||
|
||||
cache:
|
||||
- key: ${CI_COMMIT_REF_SLUG}
|
||||
paths:
|
||||
- lib/*.o
|
||||
- bin/kernel.bin
|
||||
- doc
|
||||
|
||||
before_script:
|
||||
- chmod +x *.sh
|
||||
|
||||
versions:
|
||||
stage: Compile Versions
|
||||
script:
|
||||
- ./compile_vergen.sh
|
||||
artifacts:
|
||||
paths:
|
||||
- release/*.svg
|
||||
- src/include/asuro.pas
|
||||
|
||||
compile_sources:
|
||||
stage: Compile Sources
|
||||
script:
|
||||
- rm -f lib/*.so
|
||||
- ./compile_sources.sh
|
||||
needs:
|
||||
- versions
|
||||
|
||||
link:
|
||||
stage: Link
|
||||
script:
|
||||
- ./compile_stub.sh
|
||||
- ./compile_link.sh
|
||||
needs:
|
||||
- versions
|
||||
- compile_sources
|
||||
|
||||
isogen:
|
||||
stage: Deploy
|
||||
script:
|
||||
- ./compile_isogen.sh
|
||||
- ./compile_sumgen.sh
|
||||
artifacts:
|
||||
paths:
|
||||
- ./Asuro.iso
|
||||
- ./release/checksum.svg
|
||||
needs:
|
||||
- link
|
||||
|
||||
docgen:
|
||||
stage: Generate Documentation
|
||||
only:
|
||||
- master
|
||||
- develop
|
||||
script:
|
||||
- ./compile_sourcelist.sh
|
||||
- ./compile_docs.sh
|
||||
# Remove comments when we want to use gitlab pages.
|
||||
#- cp doc public
|
||||
allow_failure: true
|
||||
artifacts:
|
||||
paths:
|
||||
- doc
|
||||
#- public/*
|
||||
#- ./sources.list
|
||||
needs:
|
||||
- versions
|
||||
Vendored
+1
-1
@@ -6,7 +6,7 @@
|
||||
"type": "PowerShell",
|
||||
"preLaunchTask": "Build",
|
||||
"script": "${workspaceFolder}/virtualbox-wrapper.ps1",
|
||||
"args": ["-MachineName", "7d395c96-891c-4139-b77d-9b6b144b0b93"],
|
||||
"args": ["-Command", "up"],
|
||||
"cwd": "${workspaceFolder}",
|
||||
}
|
||||
]
|
||||
|
||||
Vendored
+24
-2
@@ -9,14 +9,18 @@
|
||||
"command": "docker-compose",
|
||||
"args": [
|
||||
"run",
|
||||
"builder"
|
||||
"builder",
|
||||
],
|
||||
"type": "shell",
|
||||
"problemMatcher": [],
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
"dependsOn": [
|
||||
"Close VirtualBox",
|
||||
"Clean"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Build (Builder)",
|
||||
@@ -26,6 +30,24 @@
|
||||
"builder"
|
||||
],
|
||||
"type": "shell"
|
||||
},
|
||||
{
|
||||
"label": "Clean",
|
||||
"command": "docker-compose",
|
||||
"args": [
|
||||
"down",
|
||||
"--remove-orphans"
|
||||
],
|
||||
"type": "shell"
|
||||
},
|
||||
{
|
||||
"label": "Close VirtualBox",
|
||||
"command": "./virtualbox-wrapper.ps1",
|
||||
"args": [
|
||||
"-Command",
|
||||
"down"
|
||||
],
|
||||
"type": "shell"
|
||||
}
|
||||
]
|
||||
}
|
||||
+1
-1
@@ -16,7 +16,7 @@ RUN curl -sL https://sourceforge.net/projects/freepascal/files/Linux/$FPC_VERSIO
|
||||
|
||||
COPY compile.sh /compile.sh
|
||||
ADD https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver /usr/bin/semver
|
||||
RUN mkdir /code && chmod +x /usr/bin/semver
|
||||
RUN chmod +x /usr/bin/semver
|
||||
WORKDIR /code
|
||||
RUN find . -type f -print0 | xargs -0 dos2unix
|
||||
ENTRYPOINT ["/bin/bash", "-c"]
|
||||
|
||||
+18
-14
@@ -20,26 +20,30 @@ runOrFail() {
|
||||
fi
|
||||
}
|
||||
|
||||
runOrFail $(pwd)/compile_stub.sh "Failed to compile stub!"
|
||||
declare -a run_steps=(
|
||||
"compile_stub.sh" "Failed to compile stub!"
|
||||
"compile_vergen.sh" "Versions failed to compile"
|
||||
"compile_sources.sh" "Failed to compile FPC Sources!"
|
||||
"compile_link.sh" "Failed linking!"
|
||||
"compile_isogen.sh" "Failed to create ISO!"
|
||||
)
|
||||
|
||||
#Generate .pas with versioning headers.
|
||||
runOrFail $(pwd)/compile_vergen.sh "Versions failed to compile"
|
||||
|
||||
#Compile all .pas sources
|
||||
runOrFail $(pwd)/compile_sources.sh "Failed to compile FPC Sources!"
|
||||
|
||||
#Link into a binary.
|
||||
runOrFail $(pwd)/compile_link.sh "Failed linking!"
|
||||
|
||||
#Generate an ISO with GRUB as the Bootloader.
|
||||
runOrFail ./compile_isogen.sh "Failed to create ISO!"
|
||||
for ((i=0; i<${#run_steps[@]}; i+=2))
|
||||
do
|
||||
if [ "$ERRCOUNT" -eq "0" ]
|
||||
then
|
||||
script=$(pwd)/"${run_steps[$i]}"
|
||||
message="${run_steps[$i+1]}"
|
||||
runOrFail "$script" "$message"
|
||||
fi
|
||||
done
|
||||
|
||||
#Call generate final artifacts based on failure or success of the above.
|
||||
if [ "$ERRCOUNT" -ne "0" ]
|
||||
then
|
||||
./compile_finish.sh "failed"
|
||||
. ./compile_finish.sh "failed"
|
||||
else
|
||||
./compile_finish.sh "success"
|
||||
. ./compile_finish.sh "success"
|
||||
fi
|
||||
|
||||
cd ..
|
||||
+1
-1
@@ -4,4 +4,4 @@ echo "======================="
|
||||
echo " "
|
||||
echo "Compiling FPC Sources..."
|
||||
echo " "
|
||||
fpc -Aelf -gw -n -va -O3 -Op3 -Si -Sc -Sg -Xd -CX -XXs -CfSSE -CfSSE2 -Rintel -Pi386 -Tlinux -FElib/ -Fusrc/* -Fusrc/driver/* -Fusrc/driver/net/* src/kernel.pas
|
||||
fpc -Aelf -gw -g -gl -n -vlewn -O3 -Op3 -Si -Sc -Sg -Xd -CX -XXs -CfSSE -CfSSE2 -Rintel -Pi386 -Tlinux -FElib/ -Fusrc/* -Fusrc/driver/* -Fusrc/driver/net/* src/kernel.pas
|
||||
@@ -1,32 +0,0 @@
|
||||
#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
|
||||
|
||||
---
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
version: "3.9"
|
||||
services:
|
||||
builder:
|
||||
build: .
|
||||
|
||||
+2
-1
@@ -2,7 +2,7 @@ ENTRY(loader)
|
||||
SECTIONS
|
||||
{
|
||||
. = 0xC0100000;
|
||||
|
||||
kernel_start = .;
|
||||
.text : AT(ADDR(.text) - 0xC0000000)
|
||||
{
|
||||
text = .; _text = .; __text = .;
|
||||
@@ -33,4 +33,5 @@ SECTIONS
|
||||
. = ALIGN(4096);
|
||||
}
|
||||
end = .; _end = .; __end = .;
|
||||
kernel_end = .;
|
||||
}
|
||||
@@ -50,23 +50,26 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f
|
||||
```xml
|
||||
<Machine uuid="{7d395c96-891c-4139-b77d-9b6b144b0b93}" name="Asuro" OSType="Linux" snapshotFolder="Snapshots" lastStateChange="2021-06-20T20:33:07Z">
|
||||
```
|
||||
Copy the uuid, in our case `7d395c96-891c-4139-b77d-9b6b144b0b93` and replace the uuid found in `.vscode\launch.json` under `args`, so that it looks something like this:
|
||||
Copy the uuid, in our case `7d395c96-891c-4139-b77d-9b6b144b0b93` & create a `localenv.json` file in the project root with the following content:
|
||||
```json
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name":"Run",
|
||||
"request": "launch",
|
||||
"type": "PowerShell",
|
||||
"preLaunchTask": "Build",
|
||||
"script": "${workspaceFolder}/virtualbox-wrapper.ps1",
|
||||
"args": ["-MachineName", "7d395c96-891c-4139-b77d-9b6b144b0b93"],
|
||||
"cwd": "${workspaceFolder}",
|
||||
}
|
||||
]
|
||||
"VirtualBox":{
|
||||
"MachineName":"<YOUR_UUID_OR_MACHINE_NAME>"
|
||||
}
|
||||
}
|
||||
```
|
||||
This will allow VSCode to automatically launch VirtualBox once Asuro has been compiled.
|
||||
|
||||
You can also enable the serial adapter "COM1" in mode "Raw File", give it a path, and provide this path in the `localenv.json` as follows:
|
||||
```json
|
||||
{
|
||||
"VirtualBox" : {
|
||||
"MachineName": "<YOUR_UUID_OR_MACHINE_NAME>",
|
||||
"LogLocation": "Fully\\Qualified\\Path\\To\\Your\\Log\\File"
|
||||
}
|
||||
}
|
||||
```
|
||||
This will allow you to see the console output from Asuro in your host terminal.
|
||||
13. Open your project folder in VSCode, use CTRL+SHIFT+B to build & F5 to build + run in VBox.
|
||||
14. Congratulations! You can now play with Asuro!
|
||||
|
||||
|
||||
+3
-2
@@ -1776,14 +1776,15 @@ var
|
||||
fb: puint32;
|
||||
|
||||
Begin
|
||||
Ready:= False;
|
||||
fb:= puint32(uint32(multibootinfo^.framebuffer_addr));
|
||||
Console_Properties.Width:= multibootinfo^.framebuffer_width;
|
||||
Console_Properties.Height:= multibootinfo^.framebuffer_height;
|
||||
Console_Properties.BitsPerPixel:= multibootinfo^.framebuffer_bpp;
|
||||
Console_Properties.MAX_CELL_X:= (Console_Properties.Width div 8) - 1;
|
||||
Console_Properties.MAX_CELL_Y:= (Console_Properties.Height div 16) - 1;
|
||||
If Console_Properties.BitsPerPixel <> 16 then while true do begin
|
||||
|
||||
If Console_Properties.BitsPerPixel <> 16 then begin
|
||||
exit;
|
||||
end;
|
||||
kpalloc(uint32(fb));
|
||||
keyboard.hook(@keyhook);
|
||||
|
||||
+23
@@ -291,6 +291,28 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure enableAVX();
|
||||
begin
|
||||
if CPUID.Capabilities1^.AVX then begin
|
||||
asm
|
||||
PUSH EAX
|
||||
PUSH ECX
|
||||
PUSH EDX
|
||||
XOR ECX, ECX
|
||||
db $0F
|
||||
db $01
|
||||
db $D0
|
||||
OR EAX, 7
|
||||
db $0F
|
||||
db $01
|
||||
db $D1
|
||||
POP EDX
|
||||
POP ECX
|
||||
POP EAX
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure init();
|
||||
begin
|
||||
terminal.registerCommand('CPU', @Terminal_Command_CPU, 'CPU Info.');
|
||||
@@ -300,6 +322,7 @@ begin
|
||||
getCPUCapabilities;
|
||||
getCPUClockSpeed;
|
||||
enableSSE;
|
||||
enableAVX;
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -21,9 +21,7 @@ uses
|
||||
lmemorymanager,
|
||||
storagemanagement,
|
||||
strings,
|
||||
tracer,
|
||||
drivemanager,
|
||||
storagetypes;
|
||||
tracer;
|
||||
|
||||
type
|
||||
TPortMode = (P_READ, P_WRITE);
|
||||
@@ -269,7 +267,6 @@ var
|
||||
slaveDevice : TStorage_Device;
|
||||
buffer : puint8;
|
||||
i : uint8;
|
||||
test : PStorage_device;
|
||||
begin
|
||||
push_trace('ide.load');
|
||||
console.writestringln('[IDE] (LOAD) BEGIN');
|
||||
@@ -291,15 +288,14 @@ begin
|
||||
exit;
|
||||
end;
|
||||
|
||||
// masterDevice.hpc:= uint32(IDEDevices[0].info[3] DIV IDEDevices[0].info[1]); //TODO wtf is hpc
|
||||
masterDevice.hpc:= uint32(IDEDevices[0].info[3] DIV IDEDevices[0].info[1]);
|
||||
|
||||
masterDevice.sectorSize:= 512;
|
||||
if masterDevice.maxSectorCount <> 0 then begin
|
||||
IDEDevices[0].exists:= true;
|
||||
masterDevice.readCallback:= @dread;
|
||||
masterDevice.writeCallback:= @dwrite;
|
||||
// storagemanagement.register_device(@masterDevice);
|
||||
drivemanager.register_device(@masterDevice);
|
||||
storagemanagement.register_device(@masterDevice);
|
||||
end;
|
||||
|
||||
end;
|
||||
@@ -334,14 +330,10 @@ var
|
||||
device: uint8;
|
||||
data: uint16;
|
||||
begin
|
||||
push_trace('IDE.readPIO28');
|
||||
|
||||
if not validate_28bit_address(LBA) then begin
|
||||
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;
|
||||
@@ -352,8 +344,6 @@ 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);
|
||||
|
||||
@@ -363,8 +353,6 @@ 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;
|
||||
@@ -380,8 +368,6 @@ begin
|
||||
|
||||
i:= i + 2;
|
||||
end;
|
||||
|
||||
// push_trace('IDE.readPIO28.5');
|
||||
end;
|
||||
|
||||
procedure writePIO28(drive : uint8; LBA : uint32; buffer : puint8);
|
||||
@@ -444,10 +430,8 @@ 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 + i, puint8(@buffer[512*i]));
|
||||
psleep(100)
|
||||
readPIO28(device^.controllerId0, LBA, puint8(@buffer[512*i]));
|
||||
end;
|
||||
end;
|
||||
|
||||
@@ -456,8 +440,7 @@ var
|
||||
i : uint16;
|
||||
begin
|
||||
for i:=0 to sectorCount-1 do begin
|
||||
writePIO28(device^.controllerId0, LBA + i, puint8(@buffer[512*i]));
|
||||
psleep(100)
|
||||
writePIO28(device^.controllerId0, LBA, puint8(@buffer[512*i]));
|
||||
end;
|
||||
// writePIO28(device^.controllerId0, LBA, puint8(buffer));
|
||||
end;
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
{
|
||||
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
@@ -10,16 +10,14 @@ interface
|
||||
|
||||
uses
|
||||
console,
|
||||
util,
|
||||
terminal,
|
||||
storagemanagement,
|
||||
util, terminal,
|
||||
lmemorymanager,
|
||||
strings,
|
||||
lists,
|
||||
tracer,
|
||||
serial,
|
||||
rtc,
|
||||
volumemanager,
|
||||
storagetypes;
|
||||
rtc;
|
||||
|
||||
type
|
||||
|
||||
@@ -91,7 +89,7 @@ var
|
||||
filesystem : TFilesystem;
|
||||
|
||||
procedure init;
|
||||
procedure create_volume(volume : PStorage_Volume; sectors : uint32; start : uint32; config : puint32);
|
||||
procedure create_volume(disk : PStorage_Device; sectors : uint32; start : uint32; config : puint32);
|
||||
procedure detect_volumes(disk : PStorage_Device);
|
||||
//function writeDirectory(volume : PStorage_volume; directory : pchar; attributes : uint32) : uint8; // need to handle parent table cluster overflow, need to take attributes
|
||||
//function readDirectory(volume : PStorage_volume; directory : pchar; listPtr : PLinkedListBase) : uint8; //returns: 0 = success, 1 = dir not exsist, 2 = not directory, 3 = error
|
||||
@@ -753,7 +751,7 @@ end;
|
||||
|
||||
//TODO check directory commands for errors with a clean disk
|
||||
|
||||
procedure create_volume(volume : PStorage_Volume; sectors : uint32; start : uint32; config : puint32);
|
||||
procedure create_volume(disk : PStorage_Device; sectors : uint32; start : uint32; config : puint32);
|
||||
var
|
||||
buffer : puint32;
|
||||
bt: puint32;
|
||||
@@ -774,18 +772,9 @@ var
|
||||
programFileArray : byteArray8 = ('P','R','O','G','R','A','M','S');
|
||||
rootCluster : uint32 = 1;
|
||||
|
||||
sysArray : byteArray8 = ('S','Y','S','T','E','M',' ',' ');
|
||||
progArray : byteArray8 = ('P','R','O','G','R','A','M','S');
|
||||
userArray : byteArray8 = ('U','S','E','R',' ',' ',' ',' ');
|
||||
|
||||
status : puint32;
|
||||
disk : PStorage_device;
|
||||
|
||||
begin //maybe increase buffer size by one?
|
||||
push_trace('fat32.create_volume()');
|
||||
|
||||
disk := volume^.device;
|
||||
|
||||
// zeroBuffer:= puint32(kalloc( disk^.sectorSize * 4 ));
|
||||
// memset(uint32(zeroBuffer), 0, disk^.sectorSize * 4);
|
||||
|
||||
@@ -822,7 +811,7 @@ begin //maybe increase buffer size by one?
|
||||
bootRecord^.jmp2boot := $0; //TODO impliment boot jump
|
||||
bootRecord^.OEMName := asuroArray;
|
||||
bootRecord^.sectorSize := disk^.sectorsize;
|
||||
bootRecord^.spc := 1;
|
||||
bootRecord^.spc := config^;
|
||||
bootRecord^.rsvSectors := 32; //32 is standard
|
||||
bootRecord^.numFats := 1;
|
||||
bootRecord^.mediaDescp := $F8;
|
||||
@@ -884,16 +873,8 @@ begin //maybe increase buffer size by one?
|
||||
|
||||
disk^.writecallback(disk, dataStart + (config^ * rootCluster), 1, buffer);
|
||||
|
||||
memset(uint32(buffer), 0, disk^.sectorsize);
|
||||
|
||||
status := puint32(kalloc(sizeof(uint32)));
|
||||
writeDirectory(volume, '', sysArray, $10, status, '');
|
||||
|
||||
|
||||
kfree(buffer);
|
||||
|
||||
|
||||
|
||||
end;
|
||||
|
||||
procedure detect_volumes(disk : PStorage_Device);
|
||||
@@ -922,11 +903,11 @@ begin
|
||||
if (puint32(buffer)[127] = $55AA) and (PBootRecord(buffer)^.bsignature = $29) then begin //TODO partition table
|
||||
console.writestringln('FAT32: volume found!');
|
||||
volume^.device:= disk;
|
||||
volume^.sectorStart:= 1; //THIS MAKE SURE IF NOT FUCKY, cos im getting info from 2
|
||||
volume^.sectorStart:= 1;
|
||||
volume^.sectorSize:= PBootRecord(buffer)^.sectorSize;
|
||||
volume^.freeSectors:= 1000000; //TODO implement get free sectors need FSINFO implemented first
|
||||
volume^.filesystem := @filesystem;
|
||||
// storagemanagement.register_volume(disk, volume); TODO repalce with new thing
|
||||
storagemanagement.register_volume(disk, volume);
|
||||
end;
|
||||
|
||||
kfree(buffer);
|
||||
@@ -936,7 +917,6 @@ procedure init();
|
||||
begin
|
||||
push_trace('fat32.init()');
|
||||
filesystem.sName:= 'FAT32';
|
||||
filesystem.system_id:= $01;
|
||||
filesystem.readDirCallback:= @readDirectoryGen;
|
||||
filesystem.createDirCallback:= @writeDirectoryGen;
|
||||
filesystem.createcallback:= @create_volume;
|
||||
@@ -944,7 +924,7 @@ begin
|
||||
filesystem.writecallback:= @writeFile;
|
||||
filesystem.readcallback := @readFile;
|
||||
|
||||
volumemanager.register_filesystem(@filesystem);
|
||||
storagemanagement.register_filesystem(@filesystem);
|
||||
end;
|
||||
|
||||
end.
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
Loaded 20 of 38 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user