Compare commits
24
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
837d69a44b | ||
|
|
f0d5eb21f1 | ||
|
|
07e9095582 | ||
|
|
72769fbef7 | ||
|
|
95599c0e7c | ||
|
|
fcaafa0d12 | ||
|
|
e490b95f1d | ||
|
|
b601080960 | ||
|
|
27177979a2 | ||
|
|
f88a282893 | ||
|
|
ff4c597ff3 | ||
|
|
24c371cab1 | ||
|
|
7588a4c9cb | ||
|
|
5cb415c76b | ||
|
|
118d8b0c03 | ||
|
|
28caca3bcc | ||
|
|
6476a774dc | ||
|
|
e791edb02a | ||
|
|
da36f6fabb | ||
|
|
97e1a18253 | ||
|
|
88a850e8fc | ||
|
|
10c9194c5f | ||
|
|
94b477d8f7 | ||
|
|
ba38f4fd19 |
-52
@@ -1,52 +0,0 @@
|
||||
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"
|
||||
@@ -0,0 +1,73 @@
|
||||
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
|
||||
+2
-5
@@ -5,12 +5,9 @@ VOLUME ["/code"]
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
RUN dpkg --add-architecture i386
|
||||
RUN apt-get update && apt-get install -y \
|
||||
curl dos2unix wget git make nasm binutils xorriso grub-pc-bin \
|
||||
gcc-multilib g++-multilib && \
|
||||
curl dos2unix wget git make nasm binutils:i386 xorriso grub-pc-bin && \
|
||||
apt-get clean my room
|
||||
|
||||
RUN git clone --depth=1 --recurse-submodules https://github.com/cimgui/cimgui.git /cimgui
|
||||
|
||||
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 - && \
|
||||
@@ -19,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 chmod +x /usr/bin/semver
|
||||
RUN mkdir /code && chmod +x /usr/bin/semver
|
||||
WORKDIR /code
|
||||
RUN find . -type f -print0 | xargs -0 dos2unix
|
||||
ENTRYPOINT ["/bin/bash", "-c"]
|
||||
|
||||
+14
-19
@@ -20,31 +20,26 @@ runOrFail() {
|
||||
fi
|
||||
}
|
||||
|
||||
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!"
|
||||
)
|
||||
runOrFail $(pwd)/compile_stub.sh "Failed to compile stub!"
|
||||
|
||||
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
|
||||
#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!"
|
||||
|
||||
#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,90 +0,0 @@
|
||||
#!/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
|
||||
+1
-3
@@ -14,6 +14,4 @@ done;
|
||||
objstring=lib/stub.o" "$objstring
|
||||
echo "Object Files: "$objstring
|
||||
echo " "
|
||||
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
|
||||
ld -m elf_i386 -s --gc-sections -Tlinker.script -o bin/kernel.bin $objstring
|
||||
+1
-1
@@ -4,4 +4,4 @@ echo "======================="
|
||||
echo " "
|
||||
echo "Compiling FPC Sources..."
|
||||
echo " "
|
||||
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
|
||||
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
|
||||
@@ -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
|
||||
|
||||
---
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
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);
|
||||
+1
-12
@@ -2,7 +2,7 @@ ENTRY(loader)
|
||||
SECTIONS
|
||||
{
|
||||
. = 0xC0100000;
|
||||
kernel_start = .;
|
||||
|
||||
.text : AT(ADDR(.text) - 0xC0000000)
|
||||
{
|
||||
text = .; _text = .; __text = .;
|
||||
@@ -33,15 +33,4 @@ SECTIONS
|
||||
. = ALIGN(4096);
|
||||
}
|
||||
end = .; _end = .; __end = .;
|
||||
kernel_end = .;
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.init_array*)
|
||||
*(.fini_array*)
|
||||
*(.ctors)
|
||||
*(.dtors)
|
||||
*(.eh_frame*)
|
||||
*(.gcc_except_table*)
|
||||
*(.note.GNU-stack)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-48
@@ -838,18 +838,6 @@ const
|
||||
MAX_WINDOWS = 255; //< Maximum number of Windows open.
|
||||
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
|
||||
|
||||
uses
|
||||
@@ -1788,15 +1776,14 @@ 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 begin
|
||||
exit;
|
||||
If Console_Properties.BitsPerPixel <> 16 then while true do begin
|
||||
|
||||
end;
|
||||
kpalloc(uint32(fb));
|
||||
keyboard.hook(@keyhook);
|
||||
@@ -2271,7 +2258,6 @@ var
|
||||
x,y: Byte;
|
||||
|
||||
begin
|
||||
if WND_CaptureActive and (WND = WND_CaptureHWND) then exit;
|
||||
if WindowManager.Windows[WND] <> nil then begin
|
||||
for y:=0 to Console_Properties.MAX_CELL_Y do begin
|
||||
for x:=0 to Console_Properties.MAX_CELL_X do begin
|
||||
@@ -2432,26 +2418,8 @@ begin
|
||||
console.writeintlnexWND(i, Console_Properties.Default_Attribute, WND);
|
||||
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);
|
||||
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
|
||||
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;
|
||||
@@ -2634,13 +2602,6 @@ end;
|
||||
|
||||
procedure backspaceWND(WND : uint32);
|
||||
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
|
||||
Dec(WindowManager.Windows[WND]^.Cursor.X);
|
||||
writecharWND(' ', WND);
|
||||
@@ -2697,13 +2658,6 @@ end;
|
||||
|
||||
procedure _safeincrement_y_WND(WND : uint32);
|
||||
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
|
||||
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
|
||||
|
||||
-23
@@ -291,28 +291,6 @@ 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.');
|
||||
@@ -322,7 +300,6 @@ begin
|
||||
getCPUCapabilities;
|
||||
getCPUClockSpeed;
|
||||
enableSSE;
|
||||
enableAVX;
|
||||
end;
|
||||
|
||||
end.
|
||||
+32
-37
@@ -49,12 +49,8 @@ type
|
||||
y : sint32;
|
||||
end;
|
||||
|
||||
{ Mouse hook callback: receives absolute position and button states }
|
||||
TMouseHook = procedure(x, y: sint32; lmb, rmb, mmb: boolean);
|
||||
|
||||
procedure init();
|
||||
procedure DrawCursor;
|
||||
procedure setHook(h: TMouseHook);
|
||||
|
||||
implementation
|
||||
|
||||
@@ -71,7 +67,6 @@ var
|
||||
LMouseDownPos : TMousePos;
|
||||
LMouseDown : Boolean;
|
||||
RMouseDown : Boolean;
|
||||
MouseHookCB : TMouseHook = nil;
|
||||
|
||||
procedure DrawCursor;
|
||||
var
|
||||
@@ -179,38 +174,43 @@ begin
|
||||
if Current.y > (Console.getConsoleProperties^.Height-8) then Current.y:= (Console.getConsoleProperties^.Height-8);
|
||||
end;
|
||||
Cycle:= 0;
|
||||
{ Track button transitions }
|
||||
if Packet.LMB_Down and (not LMouseDown) then begin
|
||||
LMouseDown:= true;
|
||||
LMouseDownPos.x:= Current.x;
|
||||
LMouseDownPos.y:= Current.y;
|
||||
if Packet.LMB_Down then begin
|
||||
if not LMouseDown then begin
|
||||
LMouseDown:= true;
|
||||
LMouseDownPos.x:= Current.x;
|
||||
LMouseDownPos.y:= Current.y;
|
||||
//MouseDownEvent
|
||||
console._mouseDown();
|
||||
end;
|
||||
end;
|
||||
if (not Packet.LMB_Down) and LMouseDown then
|
||||
LMouseDown:= false;
|
||||
if Packet.RMB_Down and (not RMouseDown) then begin
|
||||
RMouseDown:= true;
|
||||
RMouseDownPos.x:= Current.x;
|
||||
RMouseDownPos.y:= Current.y;
|
||||
end;
|
||||
if (not Packet.RMB_Down) and RMouseDown then
|
||||
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
|
||||
if not Packet.LMB_Down then begin
|
||||
if LMouseDown then begin
|
||||
If (Current.x = LMouseDownPos.x) and (Current.y = LMouseDownPos.y) then begin
|
||||
Console._MouseClick(true);
|
||||
end;
|
||||
//MouseUpEvent
|
||||
Console._MouseUp();
|
||||
LMouseDown:= false;
|
||||
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;
|
||||
if Packet.RMB_Down then begin
|
||||
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;
|
||||
end;
|
||||
|
||||
console.setMousePosition(Current.x, Current.y);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@@ -242,11 +242,6 @@ begin
|
||||
pop_trace;
|
||||
end;
|
||||
|
||||
procedure setHook(h: TMouseHook);
|
||||
begin
|
||||
MouseHookCB := h;
|
||||
end;
|
||||
|
||||
procedure init();
|
||||
var
|
||||
devid : TDeviceIdentifier;
|
||||
|
||||
+295
-388
File diff suppressed because it is too large
Load Diff
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -10,14 +10,16 @@ interface
|
||||
|
||||
uses
|
||||
console,
|
||||
storagemanagement,
|
||||
util, terminal,
|
||||
util,
|
||||
terminal,
|
||||
lmemorymanager,
|
||||
strings,
|
||||
lists,
|
||||
tracer,
|
||||
serial,
|
||||
rtc;
|
||||
rtc,
|
||||
volumemanager,
|
||||
storagetypes;
|
||||
|
||||
type
|
||||
|
||||
@@ -89,7 +91,7 @@ var
|
||||
filesystem : TFilesystem;
|
||||
|
||||
procedure init;
|
||||
procedure create_volume(disk : PStorage_Device; sectors : uint32; start : uint32; config : puint32);
|
||||
procedure create_volume(volume : PStorage_Volume; 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
|
||||
@@ -751,7 +753,7 @@ end;
|
||||
|
||||
//TODO check directory commands for errors with a clean disk
|
||||
|
||||
procedure create_volume(disk : PStorage_Device; sectors : uint32; start : uint32; config : puint32);
|
||||
procedure create_volume(volume : PStorage_Volume; sectors : uint32; start : uint32; config : puint32);
|
||||
var
|
||||
buffer : puint32;
|
||||
bt: puint32;
|
||||
@@ -772,9 +774,18 @@ 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);
|
||||
|
||||
@@ -811,7 +822,7 @@ begin //maybe increase buffer size by one?
|
||||
bootRecord^.jmp2boot := $0; //TODO impliment boot jump
|
||||
bootRecord^.OEMName := asuroArray;
|
||||
bootRecord^.sectorSize := disk^.sectorsize;
|
||||
bootRecord^.spc := config^;
|
||||
bootRecord^.spc := 1;
|
||||
bootRecord^.rsvSectors := 32; //32 is standard
|
||||
bootRecord^.numFats := 1;
|
||||
bootRecord^.mediaDescp := $F8;
|
||||
@@ -873,8 +884,16 @@ 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);
|
||||
@@ -903,11 +922,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;
|
||||
volume^.sectorStart:= 1; //THIS MAKE SURE IF NOT FUCKY, cos im getting info from 2
|
||||
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);
|
||||
// storagemanagement.register_volume(disk, volume); TODO repalce with new thing
|
||||
end;
|
||||
|
||||
kfree(buffer);
|
||||
@@ -917,6 +936,7 @@ procedure init();
|
||||
begin
|
||||
push_trace('fat32.init()');
|
||||
filesystem.sName:= 'FAT32';
|
||||
filesystem.system_id:= $01;
|
||||
filesystem.readDirCallback:= @readDirectoryGen;
|
||||
filesystem.createDirCallback:= @writeDirectoryGen;
|
||||
filesystem.createcallback:= @create_volume;
|
||||
@@ -924,7 +944,7 @@ begin
|
||||
filesystem.writecallback:= @writeFile;
|
||||
filesystem.readcallback := @readFile;
|
||||
|
||||
storagemanagement.register_filesystem(@filesystem);
|
||||
volumemanager.register_filesystem(@filesystem);
|
||||
end;
|
||||
|
||||
end.
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user