diff --git a/boot/loader/cpu/cpuid.inc b/boot/loader/cpu/cpuid.inc deleted file mode 100644 index 44e19e7..0000000 --- a/boot/loader/cpu/cpuid.inc +++ /dev/null @@ -1,70 +0,0 @@ -;=----------------------------------------------------------------------------=; -; GNU GPL OS/K ; -; ; -; Desc: Basic realmode CPU Detection ; -; (x86_64 architecture only) ; -; ; -; ; -; 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 . ; -;=----------------------------------------------------------------------------=; - -[BITS 32] - -; ---------------------------------------------------------------------------- ; -; Checks if the CPU is compatible with 64-bits operating systems ; -; If the 21th bit of the eax register is set, then CPUID is supported ; -; We then test CPUID's result to see if long mode is supported ; -; ---------------------------------------------------------------------------- ; -Is64Bits: - ;; test if extended processor info in available - mov eax, 0x80000000 ; implicit argument for cpuid - cpuid ; get highest supported argument - cmp eax, 0x80000001 ; it needs to be at least 0x80000001 - jb .no_64 ; if it's less, the CPU is too old for long mode - - ;; use extended info to test if long mode is available - mov eax, 0x80000001 ; argument for extended processor info - cpuid ; returns various feature bits in ecx and edx - test edx, 1 << 29 ; test if the LM-bit is set in the D-register - jz .no_64 ; If it's not set, there is no long mode - ret -.no_64: - mov al, "2" ; ERROR 1 : 64bits unsupported - jmp Error - -; ---------------------------------------------------------------------------- ; -; Check if CPUID is supported by flip the bit 21 (ID bit) in the FLAGS ; -; register. If we can flip, CPUID is available. ; -; ---------------------------------------------------------------------------- ; -Check_cpuid: - pushfd ; Copy FLAGS in to EAX via stack - pop eax - mov ecx, eax ; Copy to ECX as well for comparing later on - xor eax, 1 << 21 ; Flip the ID bit - push eax ; Copy EAX to FLAGS via the stack - popfd - pushfd ; Copy FLAGS back to EAX (with the flipped bit if CPUID is supported) - pop eax - push ecx ; flipping the flipped ID bit back if it was ever flipped like flipper - popfd - cmp eax, ecx ; VERITY MOMENT - je .no_cpuid - ret -.no_cpuid: - mov al, "1" ; ERROR 1 : CPUID UNSUPPORTED - jmp Error diff --git a/boot/loader/mem/management.inc b/boot/loader/mem/management.inc deleted file mode 100644 index 3790a9d..0000000 --- a/boot/loader/mem/management.inc +++ /dev/null @@ -1,54 +0,0 @@ -;=----------------------------------------------------------------------------=; -; GNU GPL OS/K ; -; ; -; Desc: Memory management from protected mode ; -; (x86_64 architecture only) ; -; ; -; ; -; 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 . ; -;=----------------------------------------------------------------------------=; - -[BITS 32] - -; ---------------------------------------------------------------------------- ; -; Constructor for the page tables in protected mode ; -; ---------------------------------------------------------------------------- ; -Setup_paging: - ;; Map the first PML4 entry to PDP table - mov eax, PDP_table - or eax, 0b11 ; present + writable - mov [PML4_table], eax - - ;; Map the first PDP entry to PD table - mov eax, PD_table - or eax, 0b11 ; present + writable - mov [PDP_table], eax - - ;; Map each PD entry to a 'huge' 2MiB page - mov ecx, 0 ; counter variable -.map_p2_table: - ;; map ecx-th PD entry to a huge page that starts at address 2MiB*ecx - mov eax, 0x200000 - mul ecx ; start address of ecx-th page - or eax, 0b10000011 ; present + writable + huge - mov [PD_table + ecx * 8], eax - inc ecx - cmp ecx, 512 ; if counter == 512, the whole PD table is mapped - jne .map_p2_table ; else map the next entry - - ret diff --git a/boot/loader/mem/structures.inc b/boot/loader/mem/structures.inc deleted file mode 100644 index 31e98b4..0000000 --- a/boot/loader/mem/structures.inc +++ /dev/null @@ -1,113 +0,0 @@ -;=----------------------------------------------------------------------------=; -; GNU GPL OS/K ; -; ; -; Desc: Memory Design Structures ; -; (x86_64 architecture only) ; -; ; -; ; -; 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 . ; -;=----------------------------------------------------------------------------=; - -[BITS 32] - -;; GDT WITH DOC -ALIGN 4 -GDT64: - NULL_SELECTOR: ;; null selector within 64 bits - dw GDT_LENGTH ; limit of GDT - dw GDT64 ; linear address of GDT - dd 0x0 ; - - CODE_SELECTOR: ;; 32-bit code selector (ring 0) - dw 0x0000FFFF ; Segment Limit - db 0x0, 0x0, 0x0 ; Base Address - db 10011010b ; |7|6|5|4|3|2|1|0| - ; | | | | | | | `----- 1 when segment used. - ; | | | | | | `------ 1 when writable. - ; | | | | | `------- 1 if "conformant". Don't know what is it... spectral ? xD - ; | | | | `-------- 1 always - ; | | | `--------- 1 for segment descriptor, 0 for system descriptor - ; | | `---------- DPL !!! 0 for ring 0 - ; | `----------- DPL (2/2) - ; `------------ 1 if in physical memory, 0 if page fault - db 11001111b ; |7|6|5|4|3|2|1|0| - ; | | | | | | | `----- Limit 16 - ; | | | | | | `------ Limit 17 - ; | | | | | `------- Limit 18 - ; | | | | `-------- Limit 19 - ; | | | `--------- available for use - ; | | `---------- 0 always - ; | `----------- size of data. 1 for 32bits - ; `------------ 0 if limit is in Bytes, 1 if it's in pages (4ko) - db 0x0 ; Base Address - - DATA_SELECTOR: ;; flat data selector (ring 0) - dw 0x0000FFFF ; Segment Limit - db 0x0, 0x0, 0x0 ; Base Address - db 10010010b ; |7|6|5|4|3|2|1|0| - ; | | | | | | | `----- 1 when segment used. - ; | | | | | | `------ 1 when writable. - ; | | | | | `------- expansion direction. 1 for a LIFO - ; | | | | `-------- 1 always - ; | | | `--------- 1 for segment descriptor, 0 for system descriptor - ; | | `---------- DPL !!! 0 for ring 0 - ; | `----------- DPL (2/2) - ; `------------ 1 if in physical memory, 0 if page fault - db 10001111b ; |7|6|5|4|3|2|1|0| - ; | | | | | | | `----- Limit 16 - ; | | | | | | `------ Limit 17 - ; | | | | | `------- Limit 18 - ; | | | | `-------- Limit 19 - ; | | | `--------- available for use - ; | | `---------- 0 always - ; | `----------- size of data. 1 for 32bits - ; `------------ 0 if limit is in Bytes, 1 if it's in pages (4ko) - db 0x0 ; Base Address - - LONG_SELECTOR: ;; 64-bit code selector (ring 0) - dw 0x0000FFFF ; Segment Limit - db 0x0, 0x0, 0x0 ; Base Address - db 10011010b ; |7|6|5|4|3|2|1|0| - ; | | | | | | | `----- 1 when segment used. - ; | | | | | | `------ 1 when writable. - ; | | | | | `------- 1 if "conformant". Don't know what is it... spectral ? xD - ; | | | | `-------- 1 always - ; | | | `--------- 1 for segment descriptor, 0 for system descriptor - ; | | `---------- DPL !!! 0 for ring 0 - ; | `----------- DPL (2/2) - ; `------------ 1 if in physical memory, 0 if page fault - db 10101111b ; |7|6|5|4|3|2|1|0| - ; | | | | | | | `----- Limit 16 - ; | | | | | | `------ Limit 17 - ; | | | | | `------- Limit 18 - ; | | | | `-------- Limit 19 - ; | | | `--------- available for use - ; | | `---------- 0 always - ; | `----------- size of data. 1 for 32bits - ; `------------ 0 if limit is in Bytes, 1 if it's in pages (4ko) - db 0x0 ; Base Address - GDT_LENGTH: - -;; EMPTY PAGE TABLES (identity of the first 1GiB) -ALIGN 4 -PML4_table: - resb 4096 -PDP_table: - resb 4096 -PD_table: - resb 4096 diff --git a/boot/loader/multiboot/check.inc b/boot/loader/multiboot/check.inc deleted file mode 100644 index e1b42e3..0000000 --- a/boot/loader/multiboot/check.inc +++ /dev/null @@ -1,35 +0,0 @@ -;=----------------------------------------------------------------------------=; -; GNU GPL OS/K ; -; ; -; Desc: Multiboot useful functions ; -; (x86_64 architecture only) ; -; ; -; ; -; 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 . ; -;=----------------------------------------------------------------------------=; - -; ---------------------------------------------------------------------------- ; -; Multiboot check function to ensure we are launch by GRUB ; -; ---------------------------------------------------------------------------- ; -MB_check: - cmp ecx, MB_GRUB_MAGIC ; The magic number must be in ecx - jne .no_MB - ret -.no_MB: - mov al, "0" ; ERROR 0 : No multiboot - jmp Error diff --git a/boot/loader/multiboot/header.inc b/boot/loader/multiboot/header.inc deleted file mode 100644 index 8688c28..0000000 --- a/boot/loader/multiboot/header.inc +++ /dev/null @@ -1,34 +0,0 @@ -;=----------------------------------------------------------------------------=; -; GNU GPL OS/K ; -; ; -; Desc: Multiboot header ; -; (x86_64 architecture only) ; -; ; -; ; -; 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 . ; -;=----------------------------------------------------------------------------=; - -;; MULTIBOOT HEADER -MB_AOUT_KLUDGE equ 1 << 16 ; We are not an ELF executable -MB_ALIGN equ 1 << 0 ; Ask to align loaded modules on page boundaries -MB_MEMINFO equ 1 << 1 ; Ask to provide memory map -MB_HEADER_MAGIC equ 0x1badb002 -MB_GRUB_MAGIC equ 0x2badb002 -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