diff --git a/.stylehlp b/.stylehlp index 588d391..66bda54 100644 --- a/.stylehlp +++ b/.stylehlp @@ -24,3 +24,29 @@ //------------------------------------------// + +;=----------------------------------------------------------------------------=; +; GNU GPL OS/K ; +; ; +; Desc: ; +; ; +; ; +; Copyright © 2018-2019 The OS/K Team ; +; ; +; This file is part of OS/K. ; +; ; +; OS/K is free software: you can redistribute it and/or modify ; +; it under the terms of the GNU General Public License as published by ; +; the Free Software Foundation, either version 3 of the License, or ; +; (at your option) any later version. ; +; ; +; OS/K is distributed in the hope that it will be useful, ; +; but WITHOUT ANY WARRANTY; without even the implied warranty of ; +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; +; GNU General Public License for more details. ; +; ; +; You should have received a copy of the GNU General Public License ; +; along with OS/K. If not, see . ; +;=----------------------------------------------------------------------------=; + + diff --git a/Makefile b/Makefile index d7ae0dc..02e1fd7 100644 --- a/Makefile +++ b/Makefile @@ -22,120 +22,179 @@ # along with OS/K. If not, see . # #=----------------------------------------------------------------------------=# -.PHONY: all +## VARIABLES ----------------------------------------------------------------- # #Programs ASM=nasm LD=ld +CCNAME=x86_64-elf-gcc + ASMFLAGS=-f elf64 LDFLAGS=-melf_x86_64 +COPTIM=-O2 +CWARNS=-Wall -Wextra # -Werror=implicit-function-declaration +CINCLUDES=-Ikaleid/include +CFLAGS1=-nostdlib -ffreestanding -mcmodel=large # -std=gnu11 +CFLAGS2= -c -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -fno-strict-aliasing +CFLAGS=$(CFLAGS1) $(CFLAGS2) -DNDEBUG +KCC=$(CCNAME) $(COPTIM) $(CWARNS) $(CFLAGS) $(CINCLUDES) -D_OSK_SOURCE -D_KALEID_KERNEL #Folders MBRDIR=boot/grub LOADERDIR=boot/loader +KERNELDIR=kaleid OBJDIR=build/obj BINDIR=build/bin -# Object to link (temp) -l_objects=./build/obj/kaleid/crtlib/memory.o \ - ./build/obj/kaleid/crtlib/rand.o \ - ./build/obj/kaleid/crtlib/string.o \ - ./build/obj/kaleid/crtlib/ultoa.o \ - ./build/obj/kaleid/crtlib/utoa.o \ - ./build/obj/kaleid/crtlib/ctype.o \ - ./build/obj/kaleid/crtlib/itoa.o \ - ./build/obj/kaleid/crtlib/ltoa.o \ - ./build/obj/kaleid/crtlib/sprintf.o \ - ./build/obj/kaleid/extras/prog.o \ - ./build/obj/kaleid/extras/argv.o \ - ./build/obj/kaleid/kernel/init/table.o \ - ./build/obj/kaleid/kernel/init/init.o \ - ./build/obj/kaleid/kernel/io/vga.o \ - ./build/obj/kaleid/kernel/io/cursor.o \ - ./build/obj/kaleid/kernel/io/term.o \ - ./build/obj/kaleid/kernel/ke/panic.o \ - ./build/obj/boot/loader.o - #Color codes CL='\033[0;32m' CL2='\033[1;36m' CL3='\033[0m' NC='\033[1;37m' -kernel: - cpp ./Makefile.in > build/Makefile.out - python build/idttool.py - make kernel -f build/Makefile.out.2 - rm build/Makefile.out build/Makefile.out.2 -kernel-asm: - cpp -D_TO_ASM ./Makefile.in > build/Makefile.out - python build/idttool.py - make kernel -f build/Makefile.out.2 - rm build/Makefile.out build/Makefile.out.2 +.PHONY: all +all : OS/K -tests: - cpp -D_TESTS ./Makefile.in > build/Makefile.out - python build/idttool.py - make tests -f build/Makefile.out.2 - rm build/Makefile.out build/Makefile.out.2 +## KALEID MAKEFILE ----------------------------------------------------------- # -boot.mbr: $(BINDIR)/disk.img $(MBRDIR)/grub.cfg - @mkdir -p $(BINDIR)/disk - @echo ${CL2}[boot.mbr]${NC} Installing MBR on image...${CL3} - @$(MBRDIR)/grub-install.sh $(BINDIR)/disk.img $(BINDIR)/disk $(MBRDIR)/grub.cfg - @echo ${CL2}[boot.mbr]${CL} OK${CL3} - @rmdir $(BINDIR)/disk +# Common objects +kal_com_obj= $(OBJDIR)/kaleid/atoi.o $(OBJDIR)/kaleid/ctype.o \ + $(OBJDIR)/kaleid/itoa.o $(OBJDIR)/kaleid/memory.o \ + $(OBJDIR)/kaleid/rand.o $(OBJDIR)/kaleid/sprintf.o \ + $(OBJDIR)/kaleid/status.o $(OBJDIR)/kaleid/string.o \ + $(OBJDIR)/kaleid/strtol.o $(OBJDIR)/kaleid/argv.o \ + $(OBJDIR)/kaleid/prog.o $(OBJDIR)/kaleid/atol.o \ + $(OBJDIR)/kaleid/atou.o $(OBJDIR)/kaleid/atoul.o \ + $(OBJDIR)/kaleid/utoa.o $(OBJDIR)/kaleid/ltoa.o \ + $(OBJDIR)/kaleid/ultoa.o -boot.loader.asm: $(LOADERDIR)/loader.asm - @echo ${CL2}[boot.loader.asm]${NC} Making loader...${CL3} - @$(ASM) $(ASMFLAGS) $(LOADERDIR)/loader.asm -o $(OBJDIR)/boot/loader.o > /dev/null - @echo ${CL2}[boot.loader.asm]${CL} OK${CL3} +$(OBJDIR)/kaleid/atoi.o: $(KERNELDIR)/crtlib/atoi.c + @$(KCC) -D_NEED_ATOI $< -o $@ +$(OBJDIR)/kaleid/atol.o: $(KERNELDIR)/crtlib/atoi.c + @$(KCC) -D_NEED_ATOL $< -o $@ +$(OBJDIR)/kaleid/atou.o: $(KERNELDIR)/crtlib/atoi.c + @$(KCC) -D_NEED_ATOU $< -o $@ +$(OBJDIR)/kaleid/atoul.o: $(KERNELDIR)/crtlib/atoi.c + @$(KCC) -D_NEED_ATOUL $< -o $@ +$(OBJDIR)/kaleid/ctype.o: $(KERNELDIR)/crtlib/ctype.c + @$(KCC) $< -o $@ +$(OBJDIR)/kaleid/itoa.o: $(KERNELDIR)/crtlib/itoa.c + @$(KCC) -D_NEED_ITOA $< -o $@ +$(OBJDIR)/kaleid/ltoa.o: $(KERNELDIR)/crtlib/itoa.c + @$(KCC) -D_NEED_LTOA $< -o $@ +$(OBJDIR)/kaleid/utoa.o: $(KERNELDIR)/crtlib/itoa.c + @$(KCC) -D_NEED_UTOA $< -o $@ +$(OBJDIR)/kaleid/ultoa.o: $(KERNELDIR)/crtlib/itoa.c + @$(KCC) -D_NEED_ULTOA $< -o $@ +$(OBJDIR)/kaleid/memory.o: $(KERNELDIR)/crtlib/memory.c + @$(KCC) -fno-strict-aliasing $< -o $@ +$(OBJDIR)/kaleid/rand.o: $(KERNELDIR)/crtlib/rand.c + @$(KCC) $< -o $@ +$(OBJDIR)/kaleid/sprintf.o: $(KERNELDIR)/crtlib/sprintf.c + @$(KCC) $< -o $@ +$(OBJDIR)/kaleid/status.o: $(KERNELDIR)/crtlib/status.c + @$(KCC) $< -o $@ +$(OBJDIR)/kaleid/string.o: $(KERNELDIR)/crtlib/string.c + @$(KCC) $< -o $@ +$(OBJDIR)/kaleid/strtol.o: $(KERNELDIR)/crtlib/strtol.c + @$(KCC) $< -o $@ +$(OBJDIR)/kaleid/argv.o: $(KERNELDIR)/extras/argv.c + @$(KCC) $< -o $@ +$(OBJDIR)/kaleid/prog.o: $(KERNELDIR)/extras/prog.c + @$(KCC) $< -o $@ -loader: boot.loader.asm link copykernel +# Kernel objects +kal_kern_obj= $(OBJDIR)/kaleid/kernel/cpuid.o $(OBJDIR)/kaleid/kernel/init.o \ + $(OBJDIR)/kaleid/kernel/table.o $(OBJDIR)/kaleid/kernel/cursor.o \ + $(OBJDIR)/kaleid/kernel/term.o $(OBJDIR)/kaleid/kernel/vga.o \ + $(OBJDIR)/kaleid/kernel/panic.o -copykernel: - @mkdir -p $(BINDIR)/disk - @echo ${CL2}[disk]${NC} Integrating kernel...${CL3} - @$(MBRDIR)/mount.sh $(BINDIR)/disk.img $(BINDIR)/disk - @cp $(BINDIR)/kaleid $(BINDIR)/disk/boot/kaleid - @$(MBRDIR)/umount.sh $(BINDIR)/disk - @echo ${CL2}[disk]${CL} OK${CL3} - @rmdir $(BINDIR)/disk +$(OBJDIR)/kaleid/kernel/cpuid.o: $(KERNELDIR)/kernel/cpu/cpuid.c + @$(KCC) $< -o $@ +$(OBJDIR)/kaleid/kernel/init.o: $(KERNELDIR)/kernel/init/init.c + @$(KCC) $< -o $@ +$(OBJDIR)/kaleid/kernel/table.o: $(KERNELDIR)/kernel/init/table.c + @$(KCC) $< -o $@ +$(OBJDIR)/kaleid/kernel/cursor.o: $(KERNELDIR)/kernel/io/cursor.c + @$(KCC) $< -o $@ +$(OBJDIR)/kaleid/kernel/term.o: $(KERNELDIR)/kernel/io/term.c + @$(KCC) $< -o $@ +$(OBJDIR)/kaleid/kernel/vga.o: $(KERNELDIR)/kernel/io/vga.c + @$(KCC) $< -o $@ +$(OBJDIR)/kaleid/kernel/panic.o: $(KERNELDIR)/kernel/ke/panic.c + @$(KCC) $< -o $@ -make_disk: - @echo ${CL2}[make_disk]${NC} Constructing disk image...${CL3} - @$(MBRDIR)/create_disk.sh $(BINDIR)/disk.img - @echo ${CL2}[make_disk]${CL} OK${CL3} +## MAIN MAKEFILE ------------------------------------------------------------- # - -kaleid: kernel loader - -test: kaleid +.PHONY: test +test: all @qemu-system-x86_64 -hda build/bin/disk.img -d cpu_reset,guest_errors,pcall,int -enable-kvm 2> qemu.log & @ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 64 > loader_disasm64.asm @ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 32 > loader_disasm32.asm - -test32: kaleid +.PHONY: test32 +test32: all @qemu-system-i386 -hda build/bin/disk.img -d cpu_reset,guest_errors,pcall,int -enable-kvm 2> qemu.log & @ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 64 > loader_disasm64.asm @ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 32 > loader_disasm32.asm -debug: kaleid +.PHONY: debug +debug: all @qemu-system-x86_64 -hda build/bin/disk.img -d cpu_reset,guest_errors,pcall,int -s -S -enable-kvm 2> qemu.log & @ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 64 > loader_disasm64.asm @ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 32 > loader_disasm32.asm -boot: make_disk boot.mbr - @echo ${CL2}[[boot]]${CL} Terminated without error.${CL3} +.PHONY:OS/K +OS/K: $(BINDIR)/kaleid $(BINDIR)/disk.img + @mkdir -p $(BINDIR)/disk + @echo ${CL2}[[$@]] ${NC}Integrating kernel...${CL3} + -@$(MBRDIR)/umount.sh $(BINDIR)/disk + @$(MBRDIR)/mount.sh $(BINDIR)/disk.img $(BINDIR)/disk + @cp $(BINDIR)/kaleid $(BINDIR)/disk/boot/kaleid + @$(MBRDIR)/umount.sh $(BINDIR)/disk + @echo ${CL2}[[$@]] ${CL}Success.${CL3} + @rmdir $(BINDIR)/disk -all: boot kaleid - @echo ${CL2}[[all]]${CL} Terminated without error.${CL3} - -link: - @$(LD) $(LDFLAGS) -T build/kernel.ld $(l_objects) -o $(OBJDIR)/boot/kaleid.x86_64 - @x86_64-elf-objcopy -I elf64-x86-64 -O elf32-i386 $(OBJDIR)/boot/kaleid.x86_64 $(BINDIR)/kaleid +.PHONY: install_mbr +install_mbr: $(BINDIR)/disk.img $(MBRDIR)/grub.cfg + @mkdir -p $(BINDIR)/disk + @echo ${CL2}[$@] ${NC}Installing MBR on image...${CL3} + -@$(MBRDIR)/umount.sh $(BINDIR)/disk + @$(MBRDIR)/grub-install.sh $(BINDIR)/disk.img $(BINDIR)/disk $(MBRDIR)/grub.cfg + @tail -1 grub.log | head -1 | grep "Installation terminée, sans erreur." + @rmdir $(BINDIR)/disk + @echo ${CL2}[$@] ${CL}Success.${CL3} +.PHONY: clean clean: - @rm -Rf $(BINDIR)/* - @rm -Rf $(OBJDIR)/*/*/*/*.o + -@$(MBRDIR)/umount.sh $(BINDIR)/disk + @rm -Rvf $(BINDIR)/*.* + @rm -Rvf $(OBJDIR)/*.o + @rm -Rvf $(OBJDIR)/*/*.o + @rm -Rvf $(OBJDIR)/*/*/*.o + +$(BINDIR)/kaleid: $(OBJDIR)/boot/kaleid.x86_64 + @echo ${CL2}[$@] ${NC}Objcopy...${CL3} + @x86_64-elf-objcopy -I elf64-x86-64 -O elf32-i386 $(OBJDIR)/boot/kaleid.x86_64 $(BINDIR)/kaleid + @echo ${CL2}[$@] ${CL}Success.${CL3} + +$(OBJDIR)/boot/kaleid.x86_64: $(kal_kern_obj) $(kal_com_obj) $(OBJDIR)/boot/loader.o + @echo ${CL2}[$@] ${NC}Linking kernel objects...${CL3} + @$(LD) $(LDFLAGS) -T build/kernel.ld \ + $(OBJDIR)/boot/loader.o \ + $(OBJDIR)/kaleid/*.o \ + $(OBJDIR)/kaleid/kernel/*.o \ + -o $(OBJDIR)/boot/kaleid.x86_64 + @echo ${CL2}[$@] ${CL}Success.${CL3} + +$(OBJDIR)/boot/loader.o: $(LOADERDIR)/loader.asm + @echo ${CL2}[$@] ${NC}Making loader...${CL3} + @$(ASM) $(ASMFLAGS) $(LOADERDIR)/loader.asm -o $(OBJDIR)/boot/loader.o > /dev/null + @echo ${CL2}[$@] ${CL}Success.${CL3} + +$(BINDIR)/disk.img: $(MBRDIR)/create_disk.sh + @echo ${CL2}[$@]${NC} Constructing disk image...${CL3} + -@$(MBRDIR)/umount.sh $(BINDIR)/disk + @$(MBRDIR)/create_disk.sh $(BINDIR)/disk.img + @make install_mbr + @echo ${CL2}[$@]${NC} Constructing disk image...${CL3} diff --git a/Makefile.in b/Makefile.in deleted file mode 100644 index eec9b98..0000000 --- a/Makefile.in +++ /dev/null @@ -1,104 +0,0 @@ -// -*- Mode: Makefile -*- - -//----------------------------------------------------------------------------// -// GNU GPL OS/K // -// // -// Desc: Project Makefile // -// // -// // -// Copyright © 2018-2019 The OS/K Team // -// // -// This file is part of OS/K. // -// // -// OS/K is free software: you can redistribute it and/or modify // -// it under the terms of the GNU General Public License as published by // -// the Free Software Foundation, either version 3 of the License, or // -// any later version. // -// // -// OS/K is distributed in the hope that it will be useful, // -// but WITHOUT ANY WARRANTY//without even the implied warranty of // -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // -// GNU General Public License for more details. // -// // -// You should have received a copy of the GNU General Public License // -// along with OS/K. If not, see . // -//----------------------------------------------------------------------------// - -// The madman's Makefile -#include "build/preproc.h" - -CCNAME=x86_64-elf-gcc -CC2NAME=gcc -COPTIM=-O2 -CWARNS=-Wall -Wextra // -Werror=implicit-function-declaration -CINCLUDES=-Ikaleid/include - -CFLAGS1=-nostdlib -ffreestanding -mcmodel=large // -std=gnu11 -CFLAGS2=_ASMTYPE -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -CFLAGS=$(CFLAGS1) $(CFLAGS2) -DNDEBUG - -CC=$(CCNAME) $(COPTIM) $(CWARNS) $(CFLAGS) $(CINCLUDES) - -BINDIR=build/bin -OBJDIR=build/obj - -BOOTDIR=boot -COMMDIR=kaleid/crtlib -KERNDIR=kaleid/kernel -SYSTDIR=kaleid/system -LINXDIR=kaleid/test - - -// COMMON MAKEFILE - -COBJDIR=$(OBJDIR)/$(COMMDIR) -LOBJDIR=$(OBJDIR)/$(LINXDIR) - -COMMOBJS=COBJ6(string, status, rand, memory, strtol, sprintf) COBJ4(itoa, ltoa, utoa, ultoa) COBJ4(atoi, atol, atou, atoul) COBJ3(../extras/prog, ../extras/argv, ctype) - -TCC=$(CC2NAME) $(COPTIM) $(CWARNS) $(CINCLUDES) -KCC=$(CC) -D_OSK_SOURCE -D_KALEID_KERNEL - -comm-convert: - @COMPILE_CONVRT1(itoa) -D_NEED_ITOA - @COMPILE_CONVRT1(ltoa) -D_NEED_LTOA - @COMPILE_CONVRT1(utoa) -D_NEED_UTOA - @COMPILE_CONVRT1(ultoa) -D_NEED_ULTOA - @COMPILE_CONVRT2(atoi) -D_NEED_ATOI - @COMPILE_CONVRT2(atol) -D_NEED_ATOL - @COMPILE_CONVRT2(atou) -D_NEED_ATOU - @COMPILE_CONVRT2(atoul) -D_NEED_ATOUL - -common: comm-convert - @COMPILE_COMMON(rand) - @COMPILE_COMMON(ctype) - @COMPILE_COMMON(string) - @COMPILE_COMMON(status) - @COMPILE_COMMON(memory) -fno-strict-aliasing - @COMPILE_COMMON(strtol) - @COMPILE_COMMON(sprintf) - @COMPILE_COMMON(../extras/prog) - @COMPILE_COMMON(../extras/argv) - -tests: common - $(TCC) -c $(LINXDIR)/test-common.c -o $(LOBJDIR)/test-common.o - $(TCC) $(COMMOBJS) $(LOBJDIR)/test-common.o -o $(BINDIR)/comm-test - -//----------------------------------------------------------------------------# -// KERNEL MAKEFILE - -KOBJDIR=$(OBJDIR)/$(KERNDIR) - -KERNOBJS=KOBJ6(init/init, init/table, ke/panic, io/term, io/cursor, io/vga) - -kernel: common - @COMPILE_KERNEL(init/init) - @COMPILE_KERNEL(init/table) - @COMPILE_KERNEL(ke/panic) - @COMPILE_KERNEL(io/cursor) - @COMPILE_KERNEL(io/term) - @COMPILE_KERNEL(io/vga) - //LINK_KERNEL(kaleid-kernel.elf) - -//----------------------------------------------------------------------------# - diff --git a/Readme.md b/Readme.md index 566c708..3133e29 100644 --- a/Readme.md +++ b/Readme.md @@ -20,19 +20,17 @@ To compile this project from sources, you must first install the dependencies ``` apt update && apt upgrade -apt install grub-pc dosfstools make nasm +apt install grub-pc dosfstools make nasm qemu ``` You also need to have the [x86-64 ELF gcc cross-compiler](https://www.os-k.eu/build-tools/cross-cc.tar.xz) in `/opt/cross-cc`. -To compile for the first time, you must compile the whole project, in order to build the loop disk image : - +To compile, simply use at the root of this project : ``` -make all +make ``` -After that, you can use this to compile the kernel only : - +To compile and test, simply use at the root of this project : ``` -make kaleid +make test ``` diff --git a/boot/grub/grub-install.sh b/boot/grub/grub-install.sh index cd76028..d89d6eb 100755 --- a/boot/grub/grub-install.sh +++ b/boot/grub/grub-install.sh @@ -61,4 +61,4 @@ sudo umount /dev/loop1 > /dev/null echo ${CL2}[grub-install.sh]${NC} Unmounting image... \(losetup\)${CL3} sudo losetup -D > /dev/null -echo ${CL2}[grub-install.sh]${CL} Terminated without error. See grub.log for more informations.${CL3} +echo ${CL2}[grub-install.sh]${CL} See grub.log for more informations.${CL3} diff --git a/boot/loader/cpu/cpu.inc b/boot/loader/cpu/cpu.inc index 25a3b08..f0fbc95 100644 --- a/boot/loader/cpu/cpu.inc +++ b/boot/loader/cpu/cpu.inc @@ -23,11 +23,12 @@ ; along with OS/K. If not, see . ; ;=----------------------------------------------------------------------------=; -[global temporize] -[global bitemporize] -[global tritemporize] +global temporize +global bitemporize +global tritemporize [BITS 64] +[section .text] temporize: push rcx @@ -59,16 +60,3 @@ tritemporize: loop .looping pop rcx ret - - -; ---------------------------------------------------------------------------- ; -; Returns the CPU Vendor String.pointer in eax ; -; ---------------------------------------------------------------------------- ; -cpu_vendor: - - ;; Calling the competent authorities - mov eax, 0 - cpuid - - ret -.string db " " diff --git a/boot/loader/cpu/cpu32.inc b/boot/loader/cpu/cpu32.inc index c67fb08..9eaa036 100644 --- a/boot/loader/cpu/cpu32.inc +++ b/boot/loader/cpu/cpu32.inc @@ -24,6 +24,7 @@ ;=----------------------------------------------------------------------------=; [BITS 32] +[section .text] ; ---------------------------------------------------------------------------- ; ; Checks if the CPU is compatible with 64-bits operating systems ; diff --git a/boot/loader/io/terminal.inc b/boot/loader/io/terminal.inc index c2bce9a..50b4175 100644 --- a/boot/loader/io/terminal.inc +++ b/boot/loader/io/terminal.inc @@ -22,7 +22,9 @@ ; You should have received a copy of the GNU General Public License ; ; along with OS/K. If not, see . ; ;=----------------------------------------------------------------------------=; -[global testf] + +[BITS 64] +[section .text] ;;VIDEO %define TRAM 0xB8000 ; [T]ext[RAM] @@ -30,16 +32,12 @@ %define VGA_HEIGHT 80 ;; GLOBAL DATA - NextTRAM dq 0xB8000 ; Last position of cursor NextTRAM32 dq 0xB8000 ; Last position of cursor VGA_X32 dq 0 VGA_HEIGHT64 dq VGA_HEIGHT VGA_X dq 0 -;; TEXT - -[BITS 64] testf: push rsi diff --git a/boot/loader/loader.asm b/boot/loader/loader.asm index 33236e0..785e4c2 100644 --- a/boot/loader/loader.asm +++ b/boot/loader/loader.asm @@ -31,9 +31,10 @@ %include "boot/loader/cpu/cpu.inc" %include "boot/loader/mem/structures.inc" -[BITS 32] -[global MB_start] +global MB_start +extern StartKern +[BITS 32] [section .multiboot] ;; MAGNIFICENT MULTIBOOT HEADER FOR GRUB ------------------------------------ ;; @@ -50,8 +51,8 @@ MB_start: mov esp, KERNEL_STACK ; Setup the stack push 0 ; Reset EFLAGS popf - push eax ; 2nd argument is magic number - push ebx ; 1st argument multiboot info pointer + mov [mbInfo], ebx + mov [mbMagic], eax mov ecx, eax ; For debug call _loader add esp, 8 ; Cleanup arguments "A la MIPS" @@ -95,7 +96,9 @@ Die: _loader: jmp lbegin -LOGO: db 219, 219, 219, " OS/K", 0 +LOGO db 219, 219, 219, " OS/K", 0 +mbInfo dq 0 +mbMagic dq 0 lbegin: call clear ; Clear the screen @@ -152,7 +155,8 @@ _loader64: ;; Launch the kernel ! call tritemporize ; Let time to see - extern StartKern + mov rdi, [mbInfo] + mov rsi, [mbMagic] call StartKern ;; We must never reach this point ------------------------------------------- ;; diff --git a/boot/loader/mem/management.inc b/boot/loader/mem/management.inc index 876d2fe..b44bf4f 100644 --- a/boot/loader/mem/management.inc +++ b/boot/loader/mem/management.inc @@ -24,7 +24,7 @@ ;=----------------------------------------------------------------------------=; [BITS 32] - +[section .text] ; ---------------------------------------------------------------------------- ; ; Constructor for the page tables in protected mode ; ; ---------------------------------------------------------------------------- ; diff --git a/boot/loader/mem/structures.inc b/boot/loader/mem/structures.inc index 4b92e56..0c7bd8b 100644 --- a/boot/loader/mem/structures.inc +++ b/boot/loader/mem/structures.inc @@ -24,7 +24,7 @@ ;=----------------------------------------------------------------------------=; [BITS 32] -section .rodata +[section .rodata] ;; GDT WITH DOC ALIGN 4096 GDT64: @@ -44,7 +44,7 @@ GDT64: dq GDT64 ;; EMPTY PAGE TABLES (identity of the first 1GiB) -section .bss +[section .bss] ALIGN 4096 PML4_table: resb 4096 diff --git a/boot/loader/multiboot/header.inc b/boot/loader/multiboot/header.inc index 337d168..06f89a4 100644 --- a/boot/loader/multiboot/header.inc +++ b/boot/loader/multiboot/header.inc @@ -29,6 +29,6 @@ MB_ALIGN equ 1 << 0 ; Ask to align loaded modules on page bounda MB_MEMINFO equ 1 << 1 ; Ask to provide memory map MB_HEADER_MAGIC equ 0x1badb002 MB_GRUB_MAGIC equ 0x2badb002 -MB_HEADER_FLAGS equ 0x0 ; MB_AOUT_KLUDGE|MB_ALIGN|MB_MEMINFO +MB_HEADER_FLAGS equ MB_AOUT_KLUDGE|MB_ALIGN|MB_MEMINFO CHECKSUM equ -(MB_HEADER_MAGIC + MB_HEADER_FLAGS) KERNEL_STACK equ 0x00200000 ; Stack starts at the 2mb address & grows down diff --git a/build/idttool.py b/build/idttool.py deleted file mode 100644 index 200d19d..0000000 --- a/build/idttool.py +++ /dev/null @@ -1,14 +0,0 @@ -# don't mind this file - -f1 = open("build/Makefile.out", "r+") -f2 = open("build/Makefile.out.2", "w+") - -fl = f1.readlines() -for ln in fl: - if ln[0] == ' ' and ln[1] != ' ': - f2.write('\t') - f2.write(ln) - -f1.close() -f2.close() - diff --git a/build/obj/kaleid/extras/.placeholder b/build/obj/kaleid/extras/.placeholder deleted file mode 100644 index e69de29..0000000 diff --git a/build/obj/kaleid/common/test/.placeholder b/build/obj/kaleid/kernel/.placeholder similarity index 100% rename from build/obj/kaleid/common/test/.placeholder rename to build/obj/kaleid/kernel/.placeholder diff --git a/build/obj/kaleid/kernel/init/.placeholder b/build/obj/kaleid/kernel/init/.placeholder deleted file mode 100644 index e69de29..0000000 diff --git a/build/obj/kaleid/kernel/io/.placeholder b/build/obj/kaleid/kernel/io/.placeholder deleted file mode 100644 index e69de29..0000000 diff --git a/build/obj/kaleid/kernel/ke/.placeholder b/build/obj/kaleid/kernel/ke/.placeholder deleted file mode 100644 index e69de29..0000000 diff --git a/build/obj/kaleid/test/.placeholder b/build/obj/kaleid/test/.placeholder deleted file mode 100644 index e69de29..0000000 diff --git a/build/preproc.h b/build/preproc.h deleted file mode 100644 index 746bd2c..0000000 --- a/build/preproc.h +++ /dev/null @@ -1,44 +0,0 @@ -// be careful with this file - -#ifdef _TESTS -# define CCC TCC -#else -# define CCC KCC -#endif - -#ifdef _TO_ASM -# define _CSPREF -S -# define _OUTFIX S -# define _ASMTYPE -masm=intel -# define LINK_KERNEL(out) -#else -# define _CSPREF -c -# define _OUTFIX o -# define _ASMTYPE -# define LINK_KERNEL(out) $(KCC) -T ./build/kernel.ld $(CLDSCR) $(COMMOBJS) $(KERNOBJS) -o $(BINDIR)/out -#endif - -#define COMPILE_CONVRT1(file) $(CCC) _CSPREF $(COMMDIR)/itoa.c -o $(COBJDIR)/file._OUTFIX -#define COMPILE_CONVRT2(file) $(CCC) _CSPREF $(COMMDIR)/atoi.c -o $(COBJDIR)/file._OUTFIX - -#define COMPILE_COMMON(file) $(CCC) _CSPREF $(COMMDIR)/file.c -o $(COBJDIR)/file._OUTFIX -#define COMPILE_KERNEL(file) $(KCC) _CSPREF $(KERNDIR)/file.c -o $(KOBJDIR)/file._OUTFIX - -#define COBJ1(x1) $(COBJDIR)/x1.o -#define COBJ2(x1,x2) COBJ1(x1) $(COBJDIR)/x2.o -#define COBJ3(x1,x2,x3) COBJ2(x1,x2) $(COBJDIR)/x3.o -#define COBJ4(x1,x2,x3,x4) COBJ3(x1,x2,x3) $(COBJDIR)/x4.o -#define COBJ5(x1,x2,x3,x4,x5) COBJ4(x1,x2,x3,x4) $(COBJDIR)/x5.o -#define COBJ6(x1,x2,x3,x4,x5,x6) COBJ5(x1,x2,x3,x4,x5) $(COBJDIR)/x6.o -#define COBJ7(x1,x2,x3,x4,x5,x6,x7) COBJ6(x1,x2,x3,x4,x5,x6) $(COBJDIR)/x7.o -#define COBJ8(x1,x2,x3,x4,x5,x6,x7,x8) COBJ7(x1,x2,x3,x4,x5,x6,x7) $(COBJDIR)/x8.o - -#define KOBJ1(x1) $(KOBJDIR)/x1.o -#define KOBJ2(x1,x2) KOBJ1(x1) $(KOBJDIR)/x2.o -#define KOBJ3(x1,x2,x3) KOBJ2(x1,x2) $(KOBJDIR)/x3.o -#define KOBJ4(x1,x2,x3,x4) KOBJ3(x1,x2,x3) $(KOBJDIR)/x4.o -#define KOBJ5(x1,x2,x3,x4,x5) KOBJ4(x1,x2,x3,x4) $(KOBJDIR)/x5.o -#define KOBJ6(x1,x2,x3,x4,x5,x6) KOBJ5(x1,x2,x3,x4,x5) $(KOBJDIR)/x6.o -#define KOBJ7(x1,x2,x3,x4,x5,x6,x7) KOBJ6(x1,x2,x3,x4,x5,x6) $(KOBJDIR)/x7.o -#define KOBJ8(x1,x2,x3,x4,x5,x6,x7,x8) KOBJ7(x1,x2,x3,x4,x5,x6,x7) $(KOBJDIR)/x8.o - diff --git a/kaleid/include/kernel/cpu.h b/kaleid/include/kernel/cpu.h new file mode 100644 index 0000000..f347d99 --- /dev/null +++ b/kaleid/include/kernel/cpu.h @@ -0,0 +1,29 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: CPU related functions // +// // +// // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// + +#define cpuid(in, a, b, c, d) asm("cpuid" \ + : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ + : "a" (in) \ + ); + diff --git a/kaleid/include/kernel/mm.h b/kaleid/include/kernel/mm.h new file mode 100644 index 0000000..95971fe --- /dev/null +++ b/kaleid/include/kernel/mm.h @@ -0,0 +1,23 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: Memory related functions // +// // +// // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// diff --git a/kaleid/include/multiboot/multiboot.h b/kaleid/include/multiboot/multiboot.h index 2c93a2a..04f6322 100644 --- a/kaleid/include/multiboot/multiboot.h +++ b/kaleid/include/multiboot/multiboot.h @@ -1,282 +1,198 @@ -/* multiboot2.h - Multiboot 2 header file. */ -/* Copyright (C) 1999,2003,2007,2008,2009,2010 Free Software Foundation, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ANY - * DEVELOPER OR DISTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR - * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: multiboot.h - Multiboot header file. // +// // +// // +// Copyright © 1999,2003,2007-2010 Free Software Foundation, Inc. // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// #ifndef MULTIBOOT_HEADER #define MULTIBOOT_HEADER 1 /* How many bytes from the start of the file we search for the header. */ -#define MULTIBOOT_SEARCH 32768 -#define MULTIBOOT_HEADER_ALIGN 8 +#define MULTIBOOT_SEARCH 8192 +#define MULTIBOOT_HEADER_ALIGN 4 /* The magic field should contain this. */ -#define MULTIBOOT2_HEADER_MAGIC 0xe85250d6 +#define MULTIBOOT_HEADER_MAGIC 0x1BADB002 /* This should be in %eax. */ -#define MULTIBOOT2_BOOTLOADER_MAGIC 0x36d76289 +#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 /* Alignment of multiboot modules. */ -#define MULTIBOOT_MOD_ALIGN 0x00001000 +#define MULTIBOOT_MOD_ALIGN 0x00001000 /* Alignment of the multiboot info structure. */ -#define MULTIBOOT_INFO_ALIGN 0x00000008 +#define MULTIBOOT_INFO_ALIGN 0x00000004 /* Flags set in the 'flags' member of the multiboot header. */ -#define MULTIBOOT_TAG_ALIGN 8 -#define MULTIBOOT_TAG_TYPE_END 0 -#define MULTIBOOT_TAG_TYPE_CMDLINE 1 -#define MULTIBOOT_TAG_TYPE_BOOT_LOADER_NAME 2 -#define MULTIBOOT_TAG_TYPE_MODULE 3 -#define MULTIBOOT_TAG_TYPE_BASIC_MEMINFO 4 -#define MULTIBOOT_TAG_TYPE_BOOTDEV 5 -#define MULTIBOOT_TAG_TYPE_MMAP 6 -#define MULTIBOOT_TAG_TYPE_VBE 7 -#define MULTIBOOT_TAG_TYPE_FRAMEBUFFER 8 -#define MULTIBOOT_TAG_TYPE_ELF_SECTIONS 9 -#define MULTIBOOT_TAG_TYPE_APM 10 -#define MULTIBOOT_TAG_TYPE_EFI32 11 -#define MULTIBOOT_TAG_TYPE_EFI64 12 -#define MULTIBOOT_TAG_TYPE_SMBIOS 13 -#define MULTIBOOT_TAG_TYPE_ACPI_OLD 14 -#define MULTIBOOT_TAG_TYPE_ACPI_NEW 15 -#define MULTIBOOT_TAG_TYPE_NETWORK 16 -#define MULTIBOOT_TAG_TYPE_EFI_MMAP 17 -#define MULTIBOOT_TAG_TYPE_EFI_BS 18 -#define MULTIBOOT_TAG_TYPE_EFI32_IH 19 -#define MULTIBOOT_TAG_TYPE_EFI64_IH 20 -#define MULTIBOOT_TAG_TYPE_LOAD_BASE_ADDR 21 +/* Align all boot modules on i386 page (4KB) boundaries. */ +#define MULTIBOOT_PAGE_ALIGN 0x00000001 -#define MULTIBOOT_HEADER_TAG_END 0 -#define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST 1 -#define MULTIBOOT_HEADER_TAG_ADDRESS 2 -#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS 3 -#define MULTIBOOT_HEADER_TAG_CONSOLE_FLAGS 4 -#define MULTIBOOT_HEADER_TAG_FRAMEBUFFER 5 -#define MULTIBOOT_HEADER_TAG_MODULE_ALIGN 6 -#define MULTIBOOT_HEADER_TAG_EFI_BS 7 -#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI32 8 -#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64 9 -#define MULTIBOOT_HEADER_TAG_RELOCATABLE 10 +/* Must pass memory information to OS. */ +#define MULTIBOOT_MEMORY_INFO 0x00000002 -#define MULTIBOOT_ARCHITECTURE_I386 0 -#define MULTIBOOT_ARCHITECTURE_MIPS32 4 -#define MULTIBOOT_HEADER_TAG_OPTIONAL 1 +/* Must pass video information to OS. */ +#define MULTIBOOT_VIDEO_MODE 0x00000004 -#define MULTIBOOT_LOAD_PREFERENCE_NONE 0 -#define MULTIBOOT_LOAD_PREFERENCE_LOW 1 -#define MULTIBOOT_LOAD_PREFERENCE_HIGH 2 +/* This flag indicates the use of the address fields in the header. */ +#define MULTIBOOT_AOUT_KLUDGE 0x00010000 -#define MULTIBOOT_CONSOLE_FLAGS_CONSOLE_REQUIRED 1 -#define MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 2 + +#define MULTIBOOT_INFO_MEMORY 0x00000001 +/* is there a boot device set? */ +#define MULTIBOOT_INFO_BOOTDEV 0x00000002 +/* is the command-line defined? */ +#define MULTIBOOT_INFO_CMDLINE 0x00000004 +/* are there modules to do something with? */ +#define MULTIBOOT_INFO_MODS 0x00000008 + +/* These next two are mutually exclusive */ + +/* is there a symbol table loaded? */ +#define MULTIBOOT_INFO_AOUT_SYMS 0x00000010 +/* is there an ELF section header table? */ +#define MULTIBOOT_INFO_ELF_SHDR 0x00000020 + +/* is there a full memory map? */ +#define MULTIBOOT_INFO_MEM_MAP 0x00000040 + +/* Is there drive info? */ +#define MULTIBOOT_INFO_DRIVE_INFO 0x00000080 + +/* Is there a config table? */ +#define MULTIBOOT_INFO_CONFIG_TABLE 0x00000100 + +/* Is there a boot loader name? */ +#define MULTIBOOT_INFO_BOOT_LOADER_NAME 0x00000200 + +/* Is there a APM table? */ +#define MULTIBOOT_INFO_APM_TABLE 0x00000400 + +/* Is there video information? */ +#define MULTIBOOT_INFO_VBE_INFO 0x00000800 +#define MULTIBOOT_INFO_FRAMEBUFFER_INFO 0x00001000 #ifndef ASM_FILE -typedef unsigned char multiboot_uint8_t; -typedef unsigned short multiboot_uint16_t; -typedef unsigned int multiboot_uint32_t; -typedef unsigned long long multiboot_uint64_t; +typedef unsigned char multiboot_uint8_t; +typedef unsigned short multiboot_uint16_t; +typedef unsigned int multiboot_uint32_t; +typedef unsigned long long multiboot_uint64_t; struct multiboot_header { /* Must be MULTIBOOT_MAGIC - see above. */ multiboot_uint32_t magic; - /* ISA */ - multiboot_uint32_t architecture; - - /* Total header length. */ - multiboot_uint32_t header_length; + /* Feature flags. */ + multiboot_uint32_t flags; /* The above fields plus this one must equal 0 mod 2^32. */ multiboot_uint32_t checksum; -}; -struct multiboot_header_tag -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; -}; - -struct multiboot_header_tag_information_request -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; - multiboot_uint32_t requests[0]; -}; - -struct multiboot_header_tag_address -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; + /* These are only valid if MULTIBOOT_AOUT_KLUDGE is set. */ multiboot_uint32_t header_addr; multiboot_uint32_t load_addr; multiboot_uint32_t load_end_addr; multiboot_uint32_t bss_end_addr; -}; - -struct multiboot_header_tag_entry_address -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; multiboot_uint32_t entry_addr; -}; -struct multiboot_header_tag_console_flags -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; - multiboot_uint32_t console_flags; -}; - -struct multiboot_header_tag_framebuffer -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; + /* These are only valid if MULTIBOOT_VIDEO_MODE is set. */ + multiboot_uint32_t mode_type; multiboot_uint32_t width; multiboot_uint32_t height; multiboot_uint32_t depth; }; -struct multiboot_header_tag_module_align +/* The symbol table for a.out. */ +struct multiboot_aout_symbol_table { - multiboot_uint16_t type; - multiboot_uint16_t flags; + multiboot_uint32_t tabsize; + multiboot_uint32_t strsize; + multiboot_uint32_t addr; + multiboot_uint32_t reserved; +}; +typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t; + +/* The section header table for ELF. */ +struct multiboot_elf_section_header_table +{ + multiboot_uint32_t num; multiboot_uint32_t size; + multiboot_uint32_t addr; + multiboot_uint32_t shndx; }; +typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t; -struct multiboot_header_tag_relocatable +struct multiboot_info { - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; - multiboot_uint32_t min_addr; - multiboot_uint32_t max_addr; - multiboot_uint32_t align; - multiboot_uint32_t preference; -}; + /* Multiboot info version number */ + multiboot_uint32_t flags; -struct multiboot_color -{ - multiboot_uint8_t red; - multiboot_uint8_t green; - multiboot_uint8_t blue; -}; - -struct multiboot_mmap_entry -{ - multiboot_uint64_t addr; - multiboot_uint64_t len; -#define MULTIBOOT_MEMORY_AVAILABLE 1 -#define MULTIBOOT_MEMORY_RESERVED 2 -#define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3 -#define MULTIBOOT_MEMORY_NVS 4 -#define MULTIBOOT_MEMORY_BADRAM 5 - multiboot_uint32_t type; - multiboot_uint32_t zero; -}; -typedef struct multiboot_mmap_entry multiboot_memory_map_t; - -struct multiboot_tag -{ - multiboot_uint32_t type; - multiboot_uint32_t size; -}; - -struct multiboot_tag_string -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - char string[0]; -}; - -struct multiboot_tag_module -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t mod_start; - multiboot_uint32_t mod_end; - char cmdline[0]; -}; - -struct multiboot_tag_basic_meminfo -{ - multiboot_uint32_t type; - multiboot_uint32_t size; + /* Available memory from BIOS */ multiboot_uint32_t mem_lower; multiboot_uint32_t mem_upper; -}; -struct multiboot_tag_bootdev -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t biosdev; - multiboot_uint32_t slice; - multiboot_uint32_t part; -}; + /* "root" partition */ + multiboot_uint32_t boot_device; -struct multiboot_tag_mmap -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t entry_size; - multiboot_uint32_t entry_version; - struct multiboot_mmap_entry entries[0]; -}; + /* Kernel command line */ + multiboot_uint32_t cmdline; -struct multiboot_vbe_info_block -{ - multiboot_uint8_t external_specification[512]; -}; + /* Boot-Module list */ + multiboot_uint32_t mods_count; + multiboot_uint32_t mods_addr; -struct multiboot_vbe_mode_info_block -{ - multiboot_uint8_t external_specification[256]; -}; + union + { + multiboot_aout_symbol_table_t aout_sym; + multiboot_elf_section_header_table_t elf_sec; + } u; -struct multiboot_tag_vbe -{ - multiboot_uint32_t type; - multiboot_uint32_t size; + /* Memory Mapping buffer */ + multiboot_uint32_t mmap_length; + multiboot_uint32_t mmap_addr; + /* Drive Info buffer */ + multiboot_uint32_t drives_length; + multiboot_uint32_t drives_addr; + + /* ROM configuration table */ + multiboot_uint32_t config_table; + + /* Boot Loader Name */ + multiboot_uint32_t boot_loader_name; + + /* APM table */ + multiboot_uint32_t apm_table; + + /* Video */ + multiboot_uint32_t vbe_control_info; + multiboot_uint32_t vbe_mode_info; multiboot_uint16_t vbe_mode; multiboot_uint16_t vbe_interface_seg; multiboot_uint16_t vbe_interface_off; multiboot_uint16_t vbe_interface_len; - struct multiboot_vbe_info_block vbe_control_info; - struct multiboot_vbe_mode_info_block vbe_mode_info; -}; - -struct multiboot_tag_framebuffer_common -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint64_t framebuffer_addr; multiboot_uint32_t framebuffer_pitch; multiboot_uint32_t framebuffer_width; @@ -284,21 +200,14 @@ struct multiboot_tag_framebuffer_common multiboot_uint8_t framebuffer_bpp; #define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 #define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 -#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 +#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 multiboot_uint8_t framebuffer_type; - multiboot_uint16_t reserved; -}; - -struct multiboot_tag_framebuffer -{ - struct multiboot_tag_framebuffer_common common; - union { struct { + multiboot_uint32_t framebuffer_palette_addr; multiboot_uint16_t framebuffer_palette_num_colors; - struct multiboot_color framebuffer_palette[0]; }; struct { @@ -311,21 +220,46 @@ struct multiboot_tag_framebuffer }; }; }; +typedef struct multiboot_info multiboot_info_t; -struct multiboot_tag_elf_sections +struct multiboot_color { - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t num; - multiboot_uint32_t entsize; - multiboot_uint32_t shndx; - char sections[0]; + multiboot_uint8_t red; + multiboot_uint8_t green; + multiboot_uint8_t blue; }; -struct multiboot_tag_apm +struct multiboot_mmap_entry { - multiboot_uint32_t type; multiboot_uint32_t size; + multiboot_uint64_t addr; + multiboot_uint64_t len; +#define MULTIBOOT_MEMORY_AVAILABLE 1 +#define MULTIBOOT_MEMORY_RESERVED 2 +#define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3 +#define MULTIBOOT_MEMORY_NVS 4 +#define MULTIBOOT_MEMORY_BADRAM 5 + multiboot_uint32_t type; +} __attribute__((packed)); +typedef struct multiboot_mmap_entry multiboot_memory_map_t; + +struct multiboot_mod_list +{ + /* the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */ + multiboot_uint32_t mod_start; + multiboot_uint32_t mod_end; + + /* Module command line */ + multiboot_uint32_t cmdline; + + /* padding to take it to 16 bytes (must be zero) */ + multiboot_uint32_t pad; +}; +typedef struct multiboot_mod_list multiboot_module_t; + +/* APM BIOS info. */ +struct multiboot_apm_info +{ multiboot_uint16_t version; multiboot_uint16_t cseg; multiboot_uint32_t offset; @@ -337,81 +271,6 @@ struct multiboot_tag_apm multiboot_uint16_t dseg_len; }; -struct multiboot_tag_efi32 -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t pointer; -}; - -struct multiboot_tag_efi64 -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint64_t pointer; -}; - -struct multiboot_tag_smbios -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint8_t major; - multiboot_uint8_t minor; - multiboot_uint8_t reserved[6]; - multiboot_uint8_t tables[0]; -}; - -struct multiboot_tag_old_acpi -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint8_t rsdp[0]; -}; - -struct multiboot_tag_new_acpi -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint8_t rsdp[0]; -}; - -struct multiboot_tag_network -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint8_t dhcpack[0]; -}; - -struct multiboot_tag_efi_mmap -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t descr_size; - multiboot_uint32_t descr_vers; - multiboot_uint8_t efi_mmap[0]; -}; - -struct multiboot_tag_efi32_ih -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t pointer; -}; - -struct multiboot_tag_efi64_ih -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint64_t pointer; -}; - -struct multiboot_tag_load_base_addr -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t load_base_addr; -}; - #endif /* ! ASM_FILE */ #endif /* ! MULTIBOOT_HEADER */ diff --git a/kaleid/kernel/cpu/cpuid.c b/kaleid/kernel/cpu/cpuid.c new file mode 100644 index 0000000..ef8b36a --- /dev/null +++ b/kaleid/kernel/cpu/cpuid.c @@ -0,0 +1,25 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: CPU detection // +// // +// // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// + +int stub; diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index cfa2991..c6a1853 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -31,11 +31,8 @@ extern void testf(void); // // Entry point of the Kaleid kernel // -noreturn void StartKern(void *mbInfo, int mbMagic) +noreturn void StartKern(multiboot_info_t *mbInfo, int mbMagic) { - (void)mbInfo; - (void)mbMagic; - // We're not ready to deal with interrupts DisableIRQs(); @@ -43,6 +40,20 @@ noreturn void StartKern(void *mbInfo, int mbMagic) InitTerms(); // We're out - StartPanic("Goodbye World :("); -} + StartPanic( "We were loaded by : %s\n\n\n" + "We get\n" + " *mbInfo : %p\n" + " mbMagic : %x\n" + " mbBootdrv : %x\n" + " *mbMmap : %p\n" + " `-length : %d\n" + "\nGoodbye World :(", + mbInfo->boot_loader_name, + mbInfo, + mbMagic, + mbInfo->boot_device, + mbInfo->mmap_addr, + mbInfo->mmap_length + ); +} diff --git a/kaleid/kernel/init/table.c b/kaleid/kernel/init/table.c index 5fcdd2c..7a51088 100644 --- a/kaleid/kernel/init/table.c +++ b/kaleid/kernel/init/table.c @@ -29,5 +29,3 @@ Processor_t cpuTable[NCPUS] = {0}; Terminal_t *stdOut = 0, *stdDbg = 0; -volatile ushort *vga = (volatile ushort *)0xB8000; - diff --git a/kaleid/kernel/io/term.c b/kaleid/kernel/io/term.c index fa5da06..5392b23 100644 --- a/kaleid/kernel/io/term.c +++ b/kaleid/kernel/io/term.c @@ -32,7 +32,7 @@ extern Terminal_t VGA_Terminal; // void InitTerms(void) { - //KalAssert(!GetStdOut() && !GetStdDbg()); + KalAssert(!GetStdOut() && !GetStdDbg()); VGA_Init(); diff --git a/build/obj/kaleid/crtlib/test/.placeholder b/kaleid/kernel/mm/.placeholder similarity index 100% rename from build/obj/kaleid/crtlib/test/.placeholder rename to kaleid/kernel/mm/.placeholder