diff --git a/Makefile b/Makefile index 08241e9..b072066 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,14 @@ -OSNAME = CustomOS +OSNAME = zugiOS GNUEFI = ../gnu-efi OVMFDIR = ../OVMFbin -LDS = -CC = x86_64-w64-mingw32-gcc +LDS = kernel.ld +CC = gcc +LD = ld CFLAGS = -ffreestanding -fshort-wchar -LDFLAGS = -T $(LDS) -shared -Bsymbolic -nostdlib +LDFLAGS = -T $(LDS) -static -no-pie -Bsymbolic -nostdlib SRCDIR := src OBJDIR := lib @@ -20,6 +21,17 @@ SRC = $(call rwildcard,$(SRCDIR),*.c) OBJS = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(SRC)) DIRS = $(wildcard $(SRCDIR)/*) +kernel: $(OBJS) link + +$(OBJDIR)/%.o: $(SRCDIR)/%.c + @ echo !==== COMPILING $^ + @ mkdir -p $(@D) + $(CC) $(CFLAGS) -c $^ -o $@ + +link: + @ echo !==== LINKING + $(LD) $(LDFLAGS) -o $(BUILDDIR)/kernel.elf $(OBJS) + setup: @mkdir $(BUILDDIR) @mkdir $(SRCDIR) @@ -32,6 +44,8 @@ buildimg: mmd -i $(BUILDDIR)/$(OSNAME).img ::/EFI/BOOT mcopy -i $(BUILDDIR)/$(OSNAME).img $(BOOTEFI) ::/EFI/BOOT mcopy -i $(BUILDDIR)/$(OSNAME).img startup.nsh :: + mcopy -i $(BUILDDIR)/$(OSNAME).img $(BUILDDIR)/kernel.elf :: + mcopy -i $(BUILDDIR)/$(OSNAME).img $(BUILDDIR)/zap-vga16.psf :: run: qemu-system-x86_64 -drive file=$(BUILDDIR)/$(OSNAME).img -m 256M -cpu qemu64 -drive if=pflash,format=raw,unit=0,file="$(OVMFDIR)/OVMF_CODE-pure-efi.fd",readonly=on -drive if=pflash,format=raw,unit=1,file="$(OVMFDIR)/OVMF_VARS-pure-efi.fd" -net none diff --git a/bin/kernel.elf b/bin/kernel.elf new file mode 100644 index 0000000..087f475 Binary files /dev/null and b/bin/kernel.elf differ diff --git a/bin/zap-vga16.psf b/bin/zap-vga16.psf new file mode 100644 index 0000000..53c53ab Binary files /dev/null and b/bin/zap-vga16.psf differ diff --git "a/bin/zap-vga16.psf\357\200\272Zone.Identifier" "b/bin/zap-vga16.psf\357\200\272Zone.Identifier" new file mode 100644 index 0000000..e69de29 diff --git a/bin/zugiOS.img b/bin/zugiOS.img new file mode 100644 index 0000000..0f36af0 Binary files /dev/null and b/bin/zugiOS.img differ diff --git a/kernel.ld b/kernel.ld new file mode 100644 index 0000000..63fbd4c --- /dev/null +++ b/kernel.ld @@ -0,0 +1,23 @@ +OUTPUT_FORMAT(elf64-x86-64) +ENTRY(_start) + +SECTIONS +{ + .text : ALIGN(0x100) + { + *(.text) + } + .data : ALIGN(0x100) + { + *(.data) + } + .rodata : ALIGN(0x100) + { + *(.rodata) + } + .bss : ALIGN(0x100) + { + *(COMMON) + *(.bss) + } +} \ No newline at end of file diff --git a/lib/kernel.o b/lib/kernel.o new file mode 100644 index 0000000..7c841ad Binary files /dev/null and b/lib/kernel.o differ diff --git a/run.bat b/run.bat index 2482315..71931ad 100644 --- a/run.bat +++ b/run.bat @@ -1,4 +1,4 @@ -set OSNAME=CustomOS +set OSNAME=zugiOS set BUILDDIR=%0/../bin set OVMFDIR=%0/../../OVMFbin diff --git a/src/kernel.c b/src/kernel.c new file mode 100644 index 0000000..5aa7b3c --- /dev/null +++ b/src/kernel.c @@ -0,0 +1,21 @@ + +#include +#include + +typedef struct { + void* BaseAddress; + size_t BufferSize; + unsigned int Width; + unsigned int Height; + unsigned int PixelsPerScanLine; +} Framebuffer; + +void _start(Framebuffer* framebuffer){ + unsigned int y = 50; + unsigned int B8P = 4; + + for(unsigned int x = 0; x < framebuffer->Width / 2 * B8P; x+=B8P){ + *(unsigned int*)(x + (y * framebuffer->PixelsPerScanLine * B8P) + framebuffer->BaseAddress) = 0xff00ffff; + } + return; +} \ No newline at end of file