Compare commits
41
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
81d1b97cd0 | ||
|
|
84b589c856 | ||
|
|
8b80b6864b | ||
|
|
232f6b5485 | ||
|
|
569b2f0bca | ||
|
|
ed0f8d9c08 | ||
|
|
a2f6d7e76d | ||
|
|
babe4290e4 | ||
|
|
05eab23956 | ||
|
|
f04f8aa411 | ||
|
|
6a3ebf1387 | ||
|
|
b2ecbe58da | ||
|
|
2014ce4f9c | ||
|
|
6cd9ae4f46 | ||
|
|
0855abfd41 | ||
|
|
fd0de9f1d2 | ||
|
|
920aca5bbf | ||
|
|
837d69a44b | ||
|
|
f0d5eb21f1 | ||
|
|
07e9095582 | ||
|
|
72769fbef7 | ||
|
|
95599c0e7c | ||
|
|
fcaafa0d12 | ||
|
|
e490b95f1d | ||
|
|
b601080960 | ||
|
|
27177979a2 | ||
|
|
f88a282893 | ||
|
|
ff4c597ff3 | ||
|
|
24c371cab1 | ||
|
|
7588a4c9cb | ||
|
|
5cb415c76b | ||
|
|
118d8b0c03 | ||
|
|
28caca3bcc | ||
|
|
6476a774dc | ||
|
|
e791edb02a | ||
|
|
da36f6fabb | ||
|
|
97e1a18253 | ||
|
|
88a850e8fc | ||
|
|
10c9194c5f | ||
|
|
94b477d8f7 | ||
|
|
ba38f4fd19 |
No files matched your search
-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
|
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 xorriso grub-pc-bin \
|
curl dos2unix wget git make nasm binutils:i386 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 - && \
|
||||||
@@ -19,7 +16,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 chmod +x /usr/bin/semver
|
RUN mkdir /code && 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"]
|
||||||
|
|||||||
+14
-19
@@ -20,31 +20,26 @@ runOrFail() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
declare -a run_steps=(
|
runOrFail $(pwd)/compile_stub.sh "Failed to compile stub!"
|
||||||
"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!"
|
|
||||||
)
|
|
||||||
|
|
||||||
for ((i=0; i<${#run_steps[@]}; i+=2))
|
#Generate .pas with versioning headers.
|
||||||
do
|
runOrFail $(pwd)/compile_vergen.sh "Versions failed to compile"
|
||||||
if [ "$ERRCOUNT" -eq "0" ]
|
|
||||||
then
|
#Compile all .pas sources
|
||||||
script=$(pwd)/"${run_steps[$i]}"
|
runOrFail $(pwd)/compile_sources.sh "Failed to compile FPC Sources!"
|
||||||
message="${run_steps[$i+1]}"
|
|
||||||
runOrFail "$script" "$message"
|
#Link into a binary.
|
||||||
fi
|
runOrFail $(pwd)/compile_link.sh "Failed linking!"
|
||||||
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 ..
|
||||||
@@ -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
|
objstring=lib/stub.o" "$objstring
|
||||||
echo "Object Files: "$objstring
|
echo "Object Files: "$objstring
|
||||||
echo " "
|
echo " "
|
||||||
LIBGCC=$(gcc -m32 -print-libgcc-file-name)
|
ld -m elf_i386 -s --gc-sections -Tlinker.script -o bin/kernel.bin $objstring
|
||||||
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 -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 -O3 -Op3 -Si -Sc -Sg -Xd -CX -XXs -CfSSE -CfSSE2 -Rintel -Pi386 -Tlinux -FElib/ -Fusrc/* -Fusrc/driver/storage/* -Fusrc/driver/storage/AHCI/* -Fusrc/driver/* -Fusrc/driver/net/* -Fusrc/prog/* 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);
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Hello from the Asuro ISO!
|
||||||
+1
-12
@@ -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,15 +33,4 @@ 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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
+2
-48
@@ -838,18 +838,6 @@ 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
|
||||||
@@ -1788,15 +1776,14 @@ 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 begin
|
If Console_Properties.BitsPerPixel <> 16 then while true do begin
|
||||||
exit;
|
|
||||||
end;
|
end;
|
||||||
kpalloc(uint32(fb));
|
kpalloc(uint32(fb));
|
||||||
keyboard.hook(@keyhook);
|
keyboard.hook(@keyhook);
|
||||||
@@ -2271,7 +2258,6 @@ 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
|
||||||
@@ -2432,26 +2418,8 @@ 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;
|
||||||
@@ -2634,13 +2602,6 @@ 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);
|
||||||
@@ -2697,13 +2658,6 @@ 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,28 +291,6 @@ 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.');
|
||||||
@@ -322,7 +300,6 @@ begin
|
|||||||
getCPUCapabilities;
|
getCPUCapabilities;
|
||||||
getCPUClockSpeed;
|
getCPUClockSpeed;
|
||||||
enableSSE;
|
enableSSE;
|
||||||
enableAVX;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
+585
File diff suppressed because it is too large.
Load diff
@@ -91,6 +91,7 @@ function getDeviceInfo(class_code : uint8; subclass_code : uint8; prog_if : uint
|
|||||||
procedure requestConfig(bus : uint8; slot : uint8; func : uint8; row : uint8);
|
procedure requestConfig(bus : uint8; slot : uint8; func : uint8; row : uint8);
|
||||||
procedure writeConfig(bus: uint8; slot : uint8; func : uint8; row : uint8; val : uint32);
|
procedure writeConfig(bus: uint8; slot : uint8; func : uint8; row : uint8; val : uint32);
|
||||||
procedure setBusMaster(bus : uint8; slot : uint8; func : uint8; master : boolean);
|
procedure setBusMaster(bus : uint8; slot : uint8; func : uint8; master : boolean);
|
||||||
|
procedure enableDevice(bus : uint8; slot : uint8; func : uint8);
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@@ -442,4 +443,34 @@ begin
|
|||||||
pop_trace;
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
//Enable device inturrupts and set bus master
|
||||||
|
procedure enableDevice(bus : uint8; slot : uint8; func : uint8);
|
||||||
|
var
|
||||||
|
addr : uint32;
|
||||||
|
cmd : uint32;
|
||||||
|
begin
|
||||||
|
push_trace('PCI.enableDevice');
|
||||||
|
|
||||||
|
addr := ($1 shl 31);
|
||||||
|
addr := addr or (bus shl 16);
|
||||||
|
addr := addr or ((slot) shl 11);
|
||||||
|
addr := addr or ((func) shl 8);
|
||||||
|
addr := addr or ($04 and $FC);
|
||||||
|
|
||||||
|
outl(PCI_CONFIG_ADDRESS_PORT, addr);
|
||||||
|
cmd := inl(PCI_CONFIG_DATA_PORT);
|
||||||
|
cmd := cmd or PCI_COMMAND_MEM_SPACE;
|
||||||
|
cmd := cmd or PCI_COMMAND_BUS_MASTER;
|
||||||
|
cmd := cmd or (3 shl 1);
|
||||||
|
|
||||||
|
//enable interrupts, remove disable interrupt bit maybe
|
||||||
|
cmd := cmd and not PCI_COMMAND_INT_DISABLE;
|
||||||
|
// cmd := cmd and not (1 shl 9);
|
||||||
|
|
||||||
|
outl(PCI_CONFIG_ADDRESS_PORT, addr);
|
||||||
|
outl(PCI_CONFIG_DATA_PORT, cmd);
|
||||||
|
|
||||||
|
pop_trace;
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
+24
-29
@@ -49,12 +49,8 @@ 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
|
||||||
|
|
||||||
@@ -71,7 +67,6 @@ var
|
|||||||
LMouseDownPos : TMousePos;
|
LMouseDownPos : TMousePos;
|
||||||
LMouseDown : Boolean;
|
LMouseDown : Boolean;
|
||||||
RMouseDown : Boolean;
|
RMouseDown : Boolean;
|
||||||
MouseHookCB : TMouseHook = nil;
|
|
||||||
|
|
||||||
procedure DrawCursor;
|
procedure DrawCursor;
|
||||||
var
|
var
|
||||||
@@ -179,38 +174,43 @@ 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;
|
||||||
{ Track button transitions }
|
if Packet.LMB_Down then begin
|
||||||
if Packet.LMB_Down and (not LMouseDown) then begin
|
if 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;
|
||||||
if (not Packet.LMB_Down) and LMouseDown then
|
end;
|
||||||
|
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;
|
LMouseDown:= false;
|
||||||
if Packet.RMB_Down and (not RMouseDown) then begin
|
end;
|
||||||
|
end;
|
||||||
|
if Packet.RMB_Down then begin
|
||||||
|
if not RMouseDown then begin
|
||||||
RMouseDown:= true;
|
RMouseDown:= true;
|
||||||
RMouseDownPos.x:= Current.x;
|
RMouseDownPos.x:= Current.x;
|
||||||
RMouseDownPos.y:= Current.y;
|
RMouseDownPos.y:= Current.y;
|
||||||
end;
|
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
|
|
||||||
Console._MouseClick(true);
|
|
||||||
Console._MouseUp();
|
|
||||||
end;
|
end;
|
||||||
if (not Packet.RMB_Down) and RMouseDown then begin
|
|
||||||
if (Current.x = RMouseDownPos.x) and (Current.y = RMouseDownPos.y) then
|
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);
|
Console._MouseClick(false);
|
||||||
end;
|
end;
|
||||||
console.setMousePosition(Current.x, Current.y);
|
|
||||||
end;
|
end;
|
||||||
|
RMouseDown:= false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
console.setMousePosition(Current.x, Current.y);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@@ -242,11 +242,6 @@ 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,6 +21,29 @@ unit drivertypes;
|
|||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
const
|
||||||
|
PCI_CONFIG_ADDRESS_PORT = $0CF8;
|
||||||
|
PCI_CONFIG_DATA_PORT = $0CFC;
|
||||||
|
|
||||||
|
PCI_COMMAND_IO_SPACE = $0001;
|
||||||
|
PCI_COMMAND_MEM_SPACE = $0002;
|
||||||
|
PCI_COMMAND_BUS_MASTER = $0004;
|
||||||
|
PCI_COMMAND_SPECIAL_CYC = $0008;
|
||||||
|
PCI_COMMAND_MEM_WRITE = $0010;
|
||||||
|
PCI_COMMAND_VGA_PALETTE = $0020;
|
||||||
|
PCI_COMMAND_PARITY = $0040;
|
||||||
|
PCI_COMMAND_WAIT = $0080;
|
||||||
|
PCI_COMMAND_SERR = $0100;
|
||||||
|
PCI_COMMAND_FAST_BACK = $0200;
|
||||||
|
PCI_COMMAND_INT_DISABLE = $0400;
|
||||||
|
PCI_COMMAND_SERR_ENABLE = $8000;
|
||||||
|
|
||||||
|
PCI_CAP_ID_MSI = $05;
|
||||||
|
|
||||||
|
// Bits in the MSI Control register (16-bit):
|
||||||
|
MSI_CONTROL_ENABLE = 1 shl 0; // Bit 0
|
||||||
|
MSI_CONTROL_64BIT = 1 shl 7; // Bit 7
|
||||||
|
MSI_CONTROL_PVMASK = 1 shl 8; // Bit 8 (optional: per-vector masking)
|
||||||
type
|
type
|
||||||
|
|
||||||
PPCI_Device = ^TPCI_Device;
|
PPCI_Device = ^TPCI_Device;
|
||||||
@@ -44,6 +67,7 @@ type
|
|||||||
address1 : uint32;
|
address1 : uint32;
|
||||||
address2 : uint32;
|
address2 : uint32;
|
||||||
address3 : uint32;
|
address3 : uint32;
|
||||||
|
|
||||||
address4 : uint32;
|
address4 : uint32;
|
||||||
address5 : uint32;
|
address5 : uint32;
|
||||||
CIS_pointer : uint32;
|
CIS_pointer : uint32;
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
Loaded 20 of 76 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user