Compare commits
39
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aac376fa22 | ||
|
|
51a29244ed | ||
|
|
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~
|
/*.sh~
|
||||||
/*.img
|
/*.img
|
||||||
src/include/asuro.pas
|
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",
|
"type": "PowerShell",
|
||||||
"preLaunchTask": "Build",
|
"preLaunchTask": "Build",
|
||||||
"script": "${workspaceFolder}/virtualbox-wrapper.ps1",
|
"script": "${workspaceFolder}/virtualbox-wrapper.ps1",
|
||||||
"args": ["-MachineName", "7d395c96-891c-4139-b77d-9b6b144b0b93"],
|
"args": ["-Command", "up"],
|
||||||
"cwd": "${workspaceFolder}",
|
"cwd": "${workspaceFolder}",
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Vendored
+24
-2
@@ -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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
+5
-2
@@ -5,9 +5,12 @@ VOLUME ["/code"]
|
|||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
RUN dpkg --add-architecture i386
|
RUN dpkg --add-architecture i386
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
curl dos2unix wget git make nasm binutils:i386 xorriso grub-pc-bin && \
|
curl dos2unix wget git make nasm binutils xorriso grub-pc-bin \
|
||||||
|
gcc-multilib g++-multilib && \
|
||||||
apt-get clean my room
|
apt-get clean my room
|
||||||
|
|
||||||
|
RUN git clone --depth=1 --recurse-submodules https://github.com/cimgui/cimgui.git /cimgui
|
||||||
|
|
||||||
SHELL ["/bin/bash", "-c"]
|
SHELL ["/bin/bash", "-c"]
|
||||||
ARG FPC_VERSION=2.6.4
|
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 - && \
|
RUN curl -sL https://sourceforge.net/projects/freepascal/files/Linux/$FPC_VERSION/fpc-$FPC_VERSION.i386-linux.tar/download | tar -xf - && \
|
||||||
@@ -16,7 +19,7 @@ RUN curl -sL https://sourceforge.net/projects/freepascal/files/Linux/$FPC_VERSIO
|
|||||||
|
|
||||||
COPY compile.sh /compile.sh
|
COPY compile.sh /compile.sh
|
||||||
ADD https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver /usr/bin/semver
|
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
|
WORKDIR /code
|
||||||
RUN find . -type f -print0 | xargs -0 dos2unix
|
RUN find . -type f -print0 | xargs -0 dos2unix
|
||||||
ENTRYPOINT ["/bin/bash", "-c"]
|
ENTRYPOINT ["/bin/bash", "-c"]
|
||||||
|
|||||||
+19
-14
@@ -20,26 +20,31 @@ runOrFail() {
|
|||||||
fi
|
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_imgui.sh" "Failed to compile ImGui!"
|
||||||
|
"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.
|
for ((i=0; i<${#run_steps[@]}; i+=2))
|
||||||
runOrFail $(pwd)/compile_vergen.sh "Versions failed to compile"
|
do
|
||||||
|
if [ "$ERRCOUNT" -eq "0" ]
|
||||||
#Compile all .pas sources
|
then
|
||||||
runOrFail $(pwd)/compile_sources.sh "Failed to compile FPC Sources!"
|
script=$(pwd)/"${run_steps[$i]}"
|
||||||
|
message="${run_steps[$i+1]}"
|
||||||
#Link into a binary.
|
runOrFail "$script" "$message"
|
||||||
runOrFail $(pwd)/compile_link.sh "Failed linking!"
|
fi
|
||||||
|
done
|
||||||
#Generate an ISO with GRUB as the Bootloader.
|
|
||||||
runOrFail ./compile_isogen.sh "Failed to create ISO!"
|
|
||||||
|
|
||||||
#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 ..
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
echo " "
|
||||||
|
echo "======================="
|
||||||
|
echo " "
|
||||||
|
echo "Compiling ImGui (cimgui)..."
|
||||||
|
echo " "
|
||||||
|
|
||||||
|
IMGUI_DIR=/cimgui
|
||||||
|
IMGUI_SRC=$IMGUI_DIR/imgui
|
||||||
|
BRIDGE_SRC=src/driver/video/imgui
|
||||||
|
|
||||||
|
# Flags shared by all C/C++ compilation units:
|
||||||
|
# -m32 -> i386 target
|
||||||
|
# -ffreestanding -> no implicit stdlib inclusion
|
||||||
|
# -fno-builtin -> don't inline memcpy/memset/etc. so our stubs are used
|
||||||
|
# -O2 -> optimise for speed
|
||||||
|
# -ffunction-sections -fdata-sections -> allow --gc-sections in linker
|
||||||
|
C_FLAGS="-m32 -ffreestanding -fno-builtin -O2 -ffunction-sections -fdata-sections"
|
||||||
|
|
||||||
|
# Extra flags for C++ translation units (cimgui/imgui sources):
|
||||||
|
# -fno-exceptions -> no stack-unwinding machinery
|
||||||
|
# -fno-rtti -> no typeinfo / dynamic_cast
|
||||||
|
# -fno-use-cxa-atexit -> don't emit __cxa_atexit calls for static dtors
|
||||||
|
# -fno-threadsafe-statics -> no guard-variable emission for local statics
|
||||||
|
# NOTE: *not* -ffreestanding / -fno-builtin here — imgui includes <cmath> and
|
||||||
|
# other hosted headers that refuse to compile in freestanding mode.
|
||||||
|
# The object files are archived into a static lib and linked freestanding;
|
||||||
|
# any hosted-stdlib calls (malloc/free/sin/cos/…) resolve to crtshim.c.
|
||||||
|
CPP_FLAGS="-m32 -O2 -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -fno-threadsafe-statics -fno-stack-protector -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -DNDEBUG -DIMGUI_ENABLE_STB_TRUETYPE"
|
||||||
|
|
||||||
|
INCLUDE="-I$IMGUI_DIR -I$IMGUI_SRC"
|
||||||
|
|
||||||
|
echo "Compiling C runtime shim..."
|
||||||
|
gcc $C_FLAGS $INCLUDE \
|
||||||
|
-c $BRIDGE_SRC/crtshim.c \
|
||||||
|
-o lib/imgui_crtshim.o || { echo "Failed: crtshim.c"; exit 1; }
|
||||||
|
|
||||||
|
echo "Compiling render bridge..."
|
||||||
|
# imgbridge is compiled as C++ so it sees cimgui.h function declarations
|
||||||
|
# (C++ mode is required; the .c extension is overridden with -x c++)
|
||||||
|
g++ $CPP_FLAGS $INCLUDE \
|
||||||
|
-x c++ \
|
||||||
|
-DCIMGUI_DEFINE_ENUMS_AND_STRUCTS \
|
||||||
|
-c $BRIDGE_SRC/imgbridge.c \
|
||||||
|
-o lib/imgui_bridge.o || { echo "Failed: imgbridge.c"; exit 1; }
|
||||||
|
|
||||||
|
echo "Compiling cimgui wrapper..."
|
||||||
|
g++ $CPP_FLAGS $INCLUDE \
|
||||||
|
-c $IMGUI_DIR/cimgui.cpp \
|
||||||
|
-o lib/imgui_cimgui.o || { echo "Failed: cimgui.cpp"; exit 1; }
|
||||||
|
|
||||||
|
echo "Compiling imgui core..."
|
||||||
|
g++ $CPP_FLAGS $INCLUDE \
|
||||||
|
-c $IMGUI_SRC/imgui.cpp \
|
||||||
|
-o lib/imgui_core.o || { echo "Failed: imgui.cpp"; exit 1; }
|
||||||
|
|
||||||
|
echo "Compiling imgui draw..."
|
||||||
|
g++ $CPP_FLAGS $INCLUDE \
|
||||||
|
-c $IMGUI_SRC/imgui_draw.cpp \
|
||||||
|
-o lib/imgui_draw.o || { echo "Failed: imgui_draw.cpp"; exit 1; }
|
||||||
|
|
||||||
|
echo "Compiling imgui tables..."
|
||||||
|
g++ $CPP_FLAGS $INCLUDE \
|
||||||
|
-c $IMGUI_SRC/imgui_tables.cpp \
|
||||||
|
-o lib/imgui_tables.o || { echo "Failed: imgui_tables.cpp"; exit 1; }
|
||||||
|
|
||||||
|
echo "Compiling imgui widgets..."
|
||||||
|
g++ $CPP_FLAGS $INCLUDE \
|
||||||
|
-c $IMGUI_SRC/imgui_widgets.cpp \
|
||||||
|
-o lib/imgui_widgets.o || { echo "Failed: imgui_widgets.cpp"; exit 1; }
|
||||||
|
|
||||||
|
echo "Compiling imgui demo..."
|
||||||
|
g++ $CPP_FLAGS $INCLUDE \
|
||||||
|
-c $IMGUI_SRC/imgui_demo.cpp \
|
||||||
|
-o lib/imgui_demo.o || { echo "Failed: imgui_demo.cpp"; exit 1; }
|
||||||
|
|
||||||
|
echo "Archiving cimgui.a..."
|
||||||
|
# NOTE: imgui_bridge.o and imgui_crtshim.o are NOT in the archive because
|
||||||
|
# compile_link.sh already picks them up individually via find lib/ -name "*.o".
|
||||||
|
# Including them here would cause duplicate symbol errors.
|
||||||
|
ar rcs lib/cimgui.a \
|
||||||
|
lib/imgui_cimgui.o \
|
||||||
|
lib/imgui_core.o \
|
||||||
|
lib/imgui_draw.o \
|
||||||
|
lib/imgui_tables.o \
|
||||||
|
lib/imgui_widgets.o \
|
||||||
|
lib/imgui_demo.o || { echo "Failed: ar"; exit 1; }
|
||||||
|
|
||||||
|
echo "ImGui compiled successfully."
|
||||||
|
exit 0
|
||||||
+3
-1
@@ -14,4 +14,6 @@ done;
|
|||||||
objstring=lib/stub.o" "$objstring
|
objstring=lib/stub.o" "$objstring
|
||||||
echo "Object Files: "$objstring
|
echo "Object Files: "$objstring
|
||||||
echo " "
|
echo " "
|
||||||
ld -m elf_i386 -s --gc-sections -Tlinker.script -o bin/kernel.bin $objstring
|
LIBGCC=$(gcc -m32 -print-libgcc-file-name)
|
||||||
|
ld -m elf_i386 -s --gc-sections -Tlinker.script -o bin/kernel.bin $objstring \
|
||||||
|
--start-group lib/cimgui.a $LIBGCC --end-group
|
||||||
+1
-1
@@ -4,4 +4,4 @@ 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/* -Fusrc/driver/video/* -Fusrc/driver/video/imgui/* 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:
|
services:
|
||||||
builder:
|
builder:
|
||||||
build: .
|
build: .
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
4023:CIMGUI_API float igGetWindowDpiScale(void);
|
||||||
|
4081:CIMGUI_API const ImVec4_c* igGetStyleColorVec4(ImGuiCol idx);
|
||||||
|
4082:CIMGUI_API ImVec2_c igGetCursorScreenPos(void);
|
||||||
|
4084:CIMGUI_API ImVec2_c igGetContentRegionAvail(void);
|
||||||
|
4085:CIMGUI_API ImVec2_c igGetCursorPos(void);
|
||||||
|
4086:CIMGUI_API float igGetCursorPosX(void);
|
||||||
|
4087:CIMGUI_API float igGetCursorPosY(void);
|
||||||
|
4091:CIMGUI_API ImVec2_c igGetCursorStartPos(void);
|
||||||
|
4350:CIMGUI_API void igBeginDisabled(bool disabled);
|
||||||
|
4372:CIMGUI_API ImVec2_c igGetItemRectMin(void);
|
||||||
|
4373:CIMGUI_API ImVec2_c igGetItemRectMax(void);
|
||||||
|
4374:CIMGUI_API ImVec2_c igGetItemRectSize(void);
|
||||||
|
4377:CIMGUI_API ImDrawList* igGetBackgroundDrawList(ImGuiViewport* viewport);
|
||||||
|
4378:CIMGUI_API ImDrawList* igGetForegroundDrawList_ViewportPtr(ImGuiViewport* viewport);
|
||||||
|
4387:CIMGUI_API ImVec2_c igCalcTextSize(const char* text,const char* text_end,bool hide_text_after_double_hash,float wrap_width);
|
||||||
|
4388:CIMGUI_API ImVec4_c igColorConvertU32ToFloat4(ImU32 in);
|
||||||
|
4405:CIMGUI_API bool igIsMouseDoubleClicked_Nil(ImGuiMouseButton button);
|
||||||
|
5092:CIMGUI_API ImDrawList* igGetForegroundDrawList_WindowPtr(ImGuiWindow* window);
|
||||||
|
5161:CIMGUI_API void igBeginDisabledOverrideReenable(void);
|
||||||
|
5244:CIMGUI_API bool igIsMouseDoubleClicked_ID(ImGuiMouseButton button,ImGuiID owner_id);
|
||||||
+12
-1
@@ -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,15 @@ SECTIONS
|
|||||||
. = ALIGN(4096);
|
. = ALIGN(4096);
|
||||||
}
|
}
|
||||||
end = .; _end = .; __end = .;
|
end = .; _end = .; __end = .;
|
||||||
|
kernel_end = .;
|
||||||
|
|
||||||
|
/DISCARD/ : {
|
||||||
|
*(.init_array*)
|
||||||
|
*(.fini_array*)
|
||||||
|
*(.ctors)
|
||||||
|
*(.dtors)
|
||||||
|
*(.eh_frame*)
|
||||||
|
*(.gcc_except_table*)
|
||||||
|
*(.note.GNU-stack)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -50,23 +50,26 @@ 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": "PowerShell",
|
|
||||||
"preLaunchTask": "Build",
|
|
||||||
"script": "${workspaceFolder}/virtualbox-wrapper.ps1",
|
|
||||||
"args": ["-MachineName", "7d395c96-891c-4139-b77d-9b6b144b0b93"],
|
|
||||||
"cwd": "${workspaceFolder}",
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
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!
|
||||||
|
|
||||||
|
|||||||
+48
-2
@@ -838,6 +838,18 @@ const
|
|||||||
MAX_WINDOWS = 255; //< Maximum number of Windows open.
|
MAX_WINDOWS = 255; //< Maximum number of Windows open.
|
||||||
DefaultWND = 0; //< The Window assigned for output when no Window is specified. (Default).
|
DefaultWND = 0; //< The Window assigned for output when no Window is specified. (Default).
|
||||||
|
|
||||||
|
type
|
||||||
|
TWNDCaptureCallback = procedure(s: pchar);
|
||||||
|
|
||||||
|
var
|
||||||
|
WND_CaptureActive : boolean = false;
|
||||||
|
WND_CaptureHWND : uint32 = 0;
|
||||||
|
WND_CaptureBuf : array[0..511] of char;
|
||||||
|
WND_CaptureBufIdx : uint32 = 0;
|
||||||
|
WND_CaptureCallback : TWNDCaptureCallback = nil;
|
||||||
|
|
||||||
|
procedure flushCapture;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
@@ -1776,14 +1788,15 @@ var
|
|||||||
fb: puint32;
|
fb: puint32;
|
||||||
|
|
||||||
Begin
|
Begin
|
||||||
|
Ready:= False;
|
||||||
fb:= puint32(uint32(multibootinfo^.framebuffer_addr));
|
fb:= puint32(uint32(multibootinfo^.framebuffer_addr));
|
||||||
Console_Properties.Width:= multibootinfo^.framebuffer_width;
|
Console_Properties.Width:= multibootinfo^.framebuffer_width;
|
||||||
Console_Properties.Height:= multibootinfo^.framebuffer_height;
|
Console_Properties.Height:= multibootinfo^.framebuffer_height;
|
||||||
Console_Properties.BitsPerPixel:= multibootinfo^.framebuffer_bpp;
|
Console_Properties.BitsPerPixel:= multibootinfo^.framebuffer_bpp;
|
||||||
Console_Properties.MAX_CELL_X:= (Console_Properties.Width div 8) - 1;
|
Console_Properties.MAX_CELL_X:= (Console_Properties.Width div 8) - 1;
|
||||||
Console_Properties.MAX_CELL_Y:= (Console_Properties.Height div 16) - 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;
|
end;
|
||||||
kpalloc(uint32(fb));
|
kpalloc(uint32(fb));
|
||||||
keyboard.hook(@keyhook);
|
keyboard.hook(@keyhook);
|
||||||
@@ -2258,6 +2271,7 @@ var
|
|||||||
x,y: Byte;
|
x,y: Byte;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
if WND_CaptureActive and (WND = WND_CaptureHWND) then exit;
|
||||||
if WindowManager.Windows[WND] <> nil then begin
|
if WindowManager.Windows[WND] <> nil then begin
|
||||||
for y:=0 to Console_Properties.MAX_CELL_Y do begin
|
for y:=0 to Console_Properties.MAX_CELL_Y do begin
|
||||||
for x:=0 to Console_Properties.MAX_CELL_X do begin
|
for x:=0 to Console_Properties.MAX_CELL_X do begin
|
||||||
@@ -2418,8 +2432,26 @@ begin
|
|||||||
console.writeintlnexWND(i, Console_Properties.Default_Attribute, WND);
|
console.writeintlnexWND(i, Console_Properties.Default_Attribute, WND);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure flushCapture;
|
||||||
|
begin
|
||||||
|
if WND_CaptureActive and (WND_CaptureCallback <> nil) and (WND_CaptureBufIdx > 0) then begin
|
||||||
|
WND_CaptureBuf[WND_CaptureBufIdx] := #0;
|
||||||
|
WND_CaptureCallback(@WND_CaptureBuf[0]);
|
||||||
|
WND_CaptureBufIdx := 0;
|
||||||
|
WND_CaptureBuf[0] := #0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure writecharexWND(character: char; attributes: uint32; WND : uint32);
|
procedure writecharexWND(character: char; attributes: uint32; WND : uint32);
|
||||||
begin
|
begin
|
||||||
|
if WND_CaptureActive and (WND = WND_CaptureHWND) and (WND_CaptureCallback <> nil) then begin
|
||||||
|
if WND_CaptureBufIdx < 511 then begin
|
||||||
|
WND_CaptureBuf[WND_CaptureBufIdx] := character;
|
||||||
|
inc(WND_CaptureBufIdx);
|
||||||
|
WND_CaptureBuf[WND_CaptureBufIdx] := #0;
|
||||||
|
end;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
if WindowManager.Windows[WND] <> nil then begin
|
if WindowManager.Windows[WND] <> nil then begin
|
||||||
WindowManager.Windows[WND]^.Buffer[WindowManager.Windows[WND]^.Cursor.Y][WindowManager.Windows[WND]^.Cursor.X].Character:= character;
|
WindowManager.Windows[WND]^.Buffer[WindowManager.Windows[WND]^.Cursor.Y][WindowManager.Windows[WND]^.Cursor.X].Character:= character;
|
||||||
WindowManager.Windows[WND]^.Buffer[WindowManager.Windows[WND]^.Cursor.Y][WindowManager.Windows[WND]^.Cursor.X].Attributes:= attributes;
|
WindowManager.Windows[WND]^.Buffer[WindowManager.Windows[WND]^.Cursor.Y][WindowManager.Windows[WND]^.Cursor.X].Attributes:= attributes;
|
||||||
@@ -2602,6 +2634,13 @@ end;
|
|||||||
|
|
||||||
procedure backspaceWND(WND : uint32);
|
procedure backspaceWND(WND : uint32);
|
||||||
begin
|
begin
|
||||||
|
if WND_CaptureActive and (WND = WND_CaptureHWND) then begin
|
||||||
|
if WND_CaptureBufIdx > 0 then begin
|
||||||
|
dec(WND_CaptureBufIdx);
|
||||||
|
WND_CaptureBuf[WND_CaptureBufIdx] := #0;
|
||||||
|
end;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
if WindowManager.Windows[WND] <> nil then begin
|
if WindowManager.Windows[WND] <> nil then begin
|
||||||
Dec(WindowManager.Windows[WND]^.Cursor.X);
|
Dec(WindowManager.Windows[WND]^.Cursor.X);
|
||||||
writecharWND(' ', WND);
|
writecharWND(' ', WND);
|
||||||
@@ -2658,6 +2697,13 @@ end;
|
|||||||
|
|
||||||
procedure _safeincrement_y_WND(WND : uint32);
|
procedure _safeincrement_y_WND(WND : uint32);
|
||||||
begin
|
begin
|
||||||
|
if WND_CaptureActive and (WND = WND_CaptureHWND) and (WND_CaptureCallback <> nil) then begin
|
||||||
|
WND_CaptureBuf[WND_CaptureBufIdx] := #0;
|
||||||
|
WND_CaptureCallback(@WND_CaptureBuf[0]);
|
||||||
|
WND_CaptureBufIdx := 0;
|
||||||
|
WND_CaptureBuf[0] := #0;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
if WindowManager.Windows[WND] <> nil then begin
|
if WindowManager.Windows[WND] <> nil then begin
|
||||||
WindowManager.Windows[WND]^.Cursor.Y:= WindowManager.Windows[WND]^.Cursor.Y+1;
|
WindowManager.Windows[WND]^.Cursor.Y:= WindowManager.Windows[WND]^.Cursor.Y+1;
|
||||||
if WindowManager.Windows[WND]^.Cursor.Y > WindowManager.Windows[WND]^.WND_H-1 then begin
|
if WindowManager.Windows[WND]^.Cursor.Y > WindowManager.Windows[WND]^.WND_H-1 then begin
|
||||||
|
|||||||
+23
@@ -291,6 +291,28 @@ begin
|
|||||||
end;
|
end;
|
||||||
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();
|
procedure init();
|
||||||
begin
|
begin
|
||||||
terminal.registerCommand('CPU', @Terminal_Command_CPU, 'CPU Info.');
|
terminal.registerCommand('CPU', @Terminal_Command_CPU, 'CPU Info.');
|
||||||
@@ -300,6 +322,7 @@ begin
|
|||||||
getCPUCapabilities;
|
getCPUCapabilities;
|
||||||
getCPUClockSpeed;
|
getCPUClockSpeed;
|
||||||
enableSSE;
|
enableSSE;
|
||||||
|
enableAVX;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
+38
-33
@@ -49,8 +49,12 @@ type
|
|||||||
y : sint32;
|
y : sint32;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ Mouse hook callback: receives absolute position and button states }
|
||||||
|
TMouseHook = procedure(x, y: sint32; lmb, rmb, mmb: boolean);
|
||||||
|
|
||||||
procedure init();
|
procedure init();
|
||||||
procedure DrawCursor;
|
procedure DrawCursor;
|
||||||
|
procedure setHook(h: TMouseHook);
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@@ -67,6 +71,7 @@ var
|
|||||||
LMouseDownPos : TMousePos;
|
LMouseDownPos : TMousePos;
|
||||||
LMouseDown : Boolean;
|
LMouseDown : Boolean;
|
||||||
RMouseDown : Boolean;
|
RMouseDown : Boolean;
|
||||||
|
MouseHookCB : TMouseHook = nil;
|
||||||
|
|
||||||
procedure DrawCursor;
|
procedure DrawCursor;
|
||||||
var
|
var
|
||||||
@@ -174,43 +179,38 @@ begin
|
|||||||
if Current.y > (Console.getConsoleProperties^.Height-8) then Current.y:= (Console.getConsoleProperties^.Height-8);
|
if Current.y > (Console.getConsoleProperties^.Height-8) then Current.y:= (Console.getConsoleProperties^.Height-8);
|
||||||
end;
|
end;
|
||||||
Cycle:= 0;
|
Cycle:= 0;
|
||||||
if Packet.LMB_Down then begin
|
{ Track button transitions }
|
||||||
if not LMouseDown then begin
|
if Packet.LMB_Down and (not LMouseDown) then begin
|
||||||
LMouseDown:= true;
|
LMouseDown:= true;
|
||||||
LMouseDownPos.x:= Current.x;
|
LMouseDownPos.x:= Current.x;
|
||||||
LMouseDownPos.y:= Current.y;
|
LMouseDownPos.y:= Current.y;
|
||||||
//MouseDownEvent
|
|
||||||
console._mouseDown();
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
if not Packet.LMB_Down then begin
|
if (not Packet.LMB_Down) and LMouseDown then
|
||||||
if LMouseDown then begin
|
LMouseDown:= false;
|
||||||
If (Current.x = LMouseDownPos.x) and (Current.y = LMouseDownPos.y) then begin
|
if Packet.RMB_Down and (not RMouseDown) then begin
|
||||||
Console._MouseClick(true);
|
RMouseDown:= true;
|
||||||
end;
|
RMouseDownPos.x:= Current.x;
|
||||||
//MouseUpEvent
|
RMouseDownPos.y:= Current.y;
|
||||||
Console._MouseUp();
|
|
||||||
LMouseDown:= false;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
if Packet.RMB_Down then begin
|
if (not Packet.RMB_Down) and RMouseDown then
|
||||||
if not RMouseDown then begin
|
|
||||||
RMouseDown:= true;
|
|
||||||
RMouseDownPos.x:= Current.x;
|
|
||||||
RMouseDownPos.y:= Current.y;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
if not Packet.RMB_Down then begin
|
|
||||||
if RMouseDown then begin
|
|
||||||
if (Current.x = RMouseDownPos.x) and (Current.y = RMouseDownPos.y) then begin
|
|
||||||
Console._MouseClick(false);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
RMouseDown:= false;
|
RMouseDown:= false;
|
||||||
|
|
||||||
|
{ Dispatch to hook or console }
|
||||||
|
if MouseHookCB <> nil then
|
||||||
|
MouseHookCB(Current.x, Current.y, Packet.LMB_Down, Packet.RMB_Down, Packet.MMB_Down)
|
||||||
|
else begin
|
||||||
|
if Packet.LMB_Down and (not LMouseDown) then console._mouseDown();
|
||||||
|
if (not Packet.LMB_Down) and LMouseDown then begin
|
||||||
|
if (Current.x = LMouseDownPos.x) and (Current.y = LMouseDownPos.y) then
|
||||||
|
Console._MouseClick(true);
|
||||||
|
Console._MouseUp();
|
||||||
|
end;
|
||||||
|
if (not Packet.RMB_Down) and RMouseDown then begin
|
||||||
|
if (Current.x = RMouseDownPos.x) and (Current.y = RMouseDownPos.y) then
|
||||||
|
Console._MouseClick(false);
|
||||||
|
end;
|
||||||
|
console.setMousePosition(Current.x, Current.y);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
console.setMousePosition(Current.x, Current.y);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@@ -242,6 +242,11 @@ begin
|
|||||||
pop_trace;
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure setHook(h: TMouseHook);
|
||||||
|
begin
|
||||||
|
MouseHookCB := h;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure init();
|
procedure init();
|
||||||
var
|
var
|
||||||
devid : TDeviceIdentifier;
|
devid : TDeviceIdentifier;
|
||||||
|
|||||||
@@ -21,9 +21,7 @@ uses
|
|||||||
lmemorymanager,
|
lmemorymanager,
|
||||||
storagemanagement,
|
storagemanagement,
|
||||||
strings,
|
strings,
|
||||||
tracer,
|
tracer;
|
||||||
drivemanager,
|
|
||||||
storagetypes;
|
|
||||||
|
|
||||||
type
|
type
|
||||||
TPortMode = (P_READ, P_WRITE);
|
TPortMode = (P_READ, P_WRITE);
|
||||||
@@ -269,7 +267,6 @@ var
|
|||||||
slaveDevice : TStorage_Device;
|
slaveDevice : TStorage_Device;
|
||||||
buffer : puint8;
|
buffer : puint8;
|
||||||
i : uint8;
|
i : uint8;
|
||||||
test : PStorage_device;
|
|
||||||
begin
|
begin
|
||||||
push_trace('ide.load');
|
push_trace('ide.load');
|
||||||
console.writestringln('[IDE] (LOAD) BEGIN');
|
console.writestringln('[IDE] (LOAD) BEGIN');
|
||||||
@@ -291,15 +288,14 @@ begin
|
|||||||
exit;
|
exit;
|
||||||
end;
|
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;
|
masterDevice.sectorSize:= 512;
|
||||||
if masterDevice.maxSectorCount <> 0 then begin
|
if masterDevice.maxSectorCount <> 0 then begin
|
||||||
IDEDevices[0].exists:= true;
|
IDEDevices[0].exists:= true;
|
||||||
masterDevice.readCallback:= @dread;
|
masterDevice.readCallback:= @dread;
|
||||||
masterDevice.writeCallback:= @dwrite;
|
masterDevice.writeCallback:= @dwrite;
|
||||||
// storagemanagement.register_device(@masterDevice);
|
storagemanagement.register_device(@masterDevice);
|
||||||
drivemanager.register_device(@masterDevice);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
@@ -334,14 +330,10 @@ var
|
|||||||
device: uint8;
|
device: uint8;
|
||||||
data: uint16;
|
data: uint16;
|
||||||
begin
|
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!');
|
console.writestringln('IDE (writePIO28) ERROR: Invalid LBA!');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// push_trace('IDE.readPIO28.2');
|
|
||||||
|
|
||||||
//Add last 4 bits of LBA to device port
|
//Add last 4 bits of LBA to device port
|
||||||
if IDEDevices[drive].isMaster then begin
|
if IDEDevices[drive].isMaster then begin
|
||||||
device:= ATA_DEVICE_MASTER;
|
device:= ATA_DEVICE_MASTER;
|
||||||
@@ -352,8 +344,6 @@ begin
|
|||||||
device_select($F0 or ((LBA and $0F000000) shr 24)); //LBA primary slave
|
device_select($F0 or ((LBA and $0F000000) shr 24)); //LBA primary slave
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// push_trace('IDE.readPIO28.3');
|
|
||||||
|
|
||||||
no_interrupt(device);
|
no_interrupt(device);
|
||||||
port_write(ATA_REG_ERROR, 0);
|
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_LBA1, (LBA and $0000FF00) shr 8);
|
||||||
port_write(ATA_REG_LBA2, (LBA and $00FF0000) shr 16);
|
port_write(ATA_REG_LBA2, (LBA and $00FF0000) shr 16);
|
||||||
|
|
||||||
// push_trace('IDE.readPIO28.4');
|
|
||||||
|
|
||||||
//send read command
|
//send read command
|
||||||
port_write(ATA_REG_COMMAND, ATA_CMD_READ_PIO);
|
port_write(ATA_REG_COMMAND, ATA_CMD_READ_PIO);
|
||||||
if not is_ready() then exit;
|
if not is_ready() then exit;
|
||||||
@@ -380,8 +368,6 @@ begin
|
|||||||
|
|
||||||
i:= i + 2;
|
i:= i + 2;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// push_trace('IDE.readPIO28.5');
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure writePIO28(drive : uint8; LBA : uint32; buffer : puint8);
|
procedure writePIO28(drive : uint8; LBA : uint32; buffer : puint8);
|
||||||
@@ -444,10 +430,8 @@ procedure dread(device : PStorage_device; LBA : uint32; sectorCount : uint32; bu
|
|||||||
var
|
var
|
||||||
i : uint16;
|
i : uint16;
|
||||||
begin
|
begin
|
||||||
push_trace('IDE.dread');
|
|
||||||
for i:=0 to sectorCount-1 do begin
|
for i:=0 to sectorCount-1 do begin
|
||||||
readPIO28(device^.controllerId0, LBA + i, puint8(@buffer[512*i]));
|
readPIO28(device^.controllerId0, LBA, puint8(@buffer[512*i]));
|
||||||
psleep(100)
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@@ -456,8 +440,7 @@ var
|
|||||||
i : uint16;
|
i : uint16;
|
||||||
begin
|
begin
|
||||||
for i:=0 to sectorCount-1 do begin
|
for i:=0 to sectorCount-1 do begin
|
||||||
writePIO28(device^.controllerId0, LBA + i, puint8(@buffer[512*i]));
|
writePIO28(device^.controllerId0, LBA, puint8(@buffer[512*i]));
|
||||||
psleep(100)
|
|
||||||
end;
|
end;
|
||||||
// writePIO28(device^.controllerId0, LBA, puint8(buffer));
|
// writePIO28(device^.controllerId0, LBA, puint8(buffer));
|
||||||
end;
|
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.
|
|
||||||
Loaded 20 of 53 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user