diff --git a/boot/common/bootinfo.inc b/boot/common/bootinfo.inc index 602aa14..e628c8c 100644 --- a/boot/common/bootinfo.inc +++ b/boot/common/bootinfo.inc @@ -1,21 +1,6 @@ ;; File: bootinfo.inc - ;; Struct: BootInfoRange -struc BootInfoRange { - .base dd ? - .legth dd ? -} - - ;; Struct: BootInfo - ;; - ;; StupidOS boot protocol structure -struc BootInfo { - .mmap dd 4*2*20 dup(0) - .kernel_start dd ? - .kernel_size dd ? -} - - ;; Section: Globals + include '../../kernel/sys/bootinfo.inc' ;; Constant: BOOTINFO_MEMORY_LIMIT BOOTINFO_MEMORY_LIMIT = 0xFFFFF000 diff --git a/boot/loader/Makefile b/boot/loader/Makefile index ed8597d..d560bb8 100644 --- a/boot/loader/Makefile +++ b/boot/loader/Makefile @@ -3,6 +3,8 @@ TARGET = stpdldr.sys LOADER_SRCS = loader.asm \ ../common/const.inc \ ../common/bootinfo.inc \ + ../../kernel/sys/bootinfo.inc \ + ../../kernel/sys/register.inc \ video.inc \ memory.inc \ logger.inc \ diff --git a/boot/loader/loader.asm b/boot/loader/loader.asm index 5093e8d..6d26e03 100644 --- a/boot/loader/loader.asm +++ b/boot/loader/loader.asm @@ -111,7 +111,7 @@ _start: ; enable protected mode mov eax, cr0 - or al, 1 + or al, CR0_PE mov cr0, eax ; reload ds, es, fs, gs, ss @@ -147,6 +147,7 @@ _start: include 'video.inc' include 'gdt.inc' include '../common/bootinfo.inc' + include '../../kernel/sys/register.inc' uDrive rb 1 bDriveLBA db FALSE @@ -237,7 +238,7 @@ common32: mov cr3, eax mov eax, cr0 - or eax, 0x80010000 + or eax, CR0_PG or CR0_WP mov cr0, eax mov eax, STPDBOOT_MAGIC diff --git a/boot/loader/video.inc b/boot/loader/video.inc index 71be57b..e492471 100644 --- a/boot/loader/video.inc +++ b/boot/loader/video.inc @@ -1,3 +1,5 @@ + ;; File: video.inc + struc VesaInfo { .Signature dd 'VBE2' diff --git a/docs/config/Menu.txt b/docs/config/Menu.txt index d10d636..1a06c47 100644 --- a/docs/config/Menu.txt +++ b/docs/config/Menu.txt @@ -20,7 +20,7 @@ Timestamp: Updated yyyy/mm/dd # These are indexes you deleted, so Natural Docs will not add them again # unless you remove them from this line. -Don't Index: Classes, Macros, Variables +Don't Index: Macros, Classes, Variables # -------------------------------------------------------------------------- @@ -66,7 +66,7 @@ Group: BootLoader { File: loader.asm (boot/loader/loader.asm) File: logger.inc (boot/loader/logger.inc) File: memory.inc (boot/loader/memory.inc) - File: video_setup (boot/loader/video.inc) + File: video.inc (boot/loader/video.inc) } # Group: Loader Group: Common { @@ -88,11 +88,22 @@ Group: BootLoader { Group: Kernel { - File: bootinfo.inc (kernel/bootinfo.inc) File: Introduction (kernel/intro.txt) File: kernel.asm (kernel/kernel.asm) - File: klog (kernel/klog.inc) - File: vga_console_clear (kernel/dev/vga_console.inc) + File: klog.inc (kernel/klog.inc) + + Group: Devices { + + File: IBM PC/AT (kernel/dev/at/intro.txt) + File: vga_console.inc (kernel/dev/vga_console.inc) + } # Group: Devices + + Group: System Includes { + + File: bootinfo.inc (kernel/sys/bootinfo.inc) + File: mmu.inc (kernel/sys/mmu.inc) + File: registers.inc (kernel/sys/register.inc) + } # Group: System Includes Group: Memory Manager { diff --git a/include/fs/fat16.h b/include/fs/fat16.h deleted file mode 100644 index 49e2ca3..0000000 --- a/include/fs/fat16.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef ECHFS_H -# define ECHFS_H 1 - -typedef struct { - uint8_t jmp[4]; - uint8_t signature[8]; - -} EchFSIdentityTable; - -#endif /* !ECHFS_H */ diff --git a/kernel/kernel.asm b/kernel/kernel.asm index 6e2068d..9c5cd29 100644 --- a/kernel/kernel.asm +++ b/kernel/kernel.asm @@ -60,7 +60,7 @@ kmain: call klog jmp .halt - include 'bootinfo.inc' + include 'sys/bootinfo.inc' include 'klog.inc' include 'dev/vga_console.inc' include 'mm/mm.inc' diff --git a/kernel/klog.inc b/kernel/klog.inc index 6b7db94..006c2f1 100644 --- a/kernel/klog.inc +++ b/kernel/klog.inc @@ -1,3 +1,6 @@ + ;; File: klog.inc + ;; Kernel logging utilities + CMOS_ADDRESS = 0x70 CMOS_DATA = 0x71 @@ -7,6 +10,10 @@ CMOS_REG_HOUR = 0x04 COM1 = 0x3F8 + ;; Function: klog_print + ;; + ;; In: + ;; ESI - Null-terminated string to print klog_print: mov dx, COM1 @@: @@ -18,7 +25,9 @@ klog_print: @@: ret -klog_print_date: + ;; Function: klog_print_time + ;; +klog_print_time: @@: mov al, 0x0A out CMOS_ADDRESS, al @@ -114,7 +123,7 @@ klog_print_hex: ;; Function: klog ;; Output kernel log klog: - call klog_print_date + call klog_print_time .loop: mov al, [esi] diff --git a/kernel/bootinfo.inc b/kernel/sys/bootinfo.inc similarity index 100% rename from kernel/bootinfo.inc rename to kernel/sys/bootinfo.inc diff --git a/kernel/sys/register.inc b/kernel/sys/register.inc index 91fe26e..f81c68c 100644 --- a/kernel/sys/register.inc +++ b/kernel/sys/register.inc @@ -17,23 +17,23 @@ ;; CR0_NW - Not-write through ;; CR0_CD - Cache disable ;; CR0_PG - Paging -CR0_PE equ 1 << 0 -CR0_MP equ 1 << 1 -CR0_EM equ 1 << 2 -CR0_TS equ 1 << 3 -CR0_ET equ 1 << 4 -CR0_NE equ 1 << 5 -CR0_WP equ 1 << 16 -CR0_AM equ 1 << 18 -CR0_NW equ 1 << 29 -CR0_CD equ 1 << 30 -CR0_PG equ 1 << 31 +CR0_PE = 0x00000001 +CR0_MP = 0x00000002 +CR0_EM = 0x00000004 +CR0_TS = 0x00000008 +CR0_ET = 0x00000010 +CR0_NE = 0x00000020 +CR0_WP = 0x00010000 +CR0_AM = 0x00040000 +CR0_NW = 0x20000000 +CR0_CD = 0x40000000 +CR0_PG = 0x80000000 ;; Defines: CR3 ;; CR3_PWT - Page-level Write-Through ;; CR3_PCD - Page-level Cache Disable -CR3_PWT equ 1 << 3 -CR3_PCD equ 1 << 4 +CR3_PWT = 0x08 +CR3_PCD = 0x10 ;; Defines: CR4 ;; CR4_VME - Virtual 8086 Mode Extensions @@ -60,67 +60,26 @@ CR3_PCD equ 1 << 4 ;; CR4_PKE - Protection Key Enable ;; CR4_CET - Control-flow Enforcement Technology ;; CR4_PKS - Enable Protection Keys for Supervisor-Mode Pages -CR4_VME equ 1 << 0 -CR4_PVI equ 1 << 1 -CR4_TSD equ 1 << 2 -CR4_DE equ 1 << 3 -CR4_PSE equ 1 << 4 -CR4_PAE equ 1 << 5 -CR4_MCE equ 1 << 6 -CR4_PGE equ 1 << 7 -CR4_PCE equ 1 << 8 -CR4_OSDXSR equ 1 << 9 -CR4_OSXMMEXCPT equ 1 << 10 -CR4_UMIP equ 1 << 11 -CR4_VMXE equ 1 << 13 -CR4_SMXE equ 1 << 14 -CR4_FSGSBASE equ 1 << 16 -CR4_PCIDE equ 1 << 17 -CR4_OSXSAVE equ 1 << 18 -CR4_SMEP equ 1 << 20 -CR4_SMAP equ 1 << 21 -CR4_PKE equ 1 << 22 -CR4_CET equ 1 << 23 -CR4_PKS equ 1 << 24 +CR4_VME = 0x0000001 +CR4_PVI = 0x0000002 +CR4_TSD = 0x0000004 +CR4_DE = 0x0000008 +CR4_PSE = 0x0000010 +CR4_PAE = 0x0000020 +CR4_MCE = 0x0000040 +CR4_PGE = 0x0000080 +CR4_PCE = 0x0000100 +CR4_OSDXSR = 0x0000200 +CR4_OSXMMEXCPT = 0x0000400 +CR4_UMIP = 0x0000800 +CR4_VMXE = 0x0002000 +CR4_SMXE = 0x0004000 +CR4_FSGSBASE = 0x0010000 +CR4_PCIDE = 0x0020000 +CR4_OSXSAVE = 0x0040000 +CR4_SMEP = 0x0100000 +CR4_SMAP = 0x0200000 +CR4_PKE = 0x0400000 +CR4_CET = 0x0800000 +CR4_PKS = 0x1000000 - ;; ========================================================================= - ;; eflags - ;; ========================================================================= - - ;; Defines: EFLAGS - ;; EFLAGS_CF - Carry flag - ;; EFLAGS_PF - Parity flag - ;; EFLAGS_AF - Auxiliary flag - ;; EFLAGS_ZF - Zero flag - ;; EFLAGS_SF - Sign flag - ;; EFLAGS_TF - Trap flag - ;; EFLAGS_IF - Interrupt enable flag - ;; EFLAGS_DF - Direction flag - ;; EFLAGS_OF - Overflow flag - ;; EFLAGS_IOPL1 - I/O privilege flag - ;; EFLAGS_IOPL2 - I/O privilege flag - ;; EFLAGS_NT - Nested task flag - ;; EFLAGS_RF - Resume flag - ;; EFLAGS_VM - Virtual 8086 mode flag - ;; EFLAGS_AC - Alignment check - ;; EFLAGS_VIF - Virtual Interrupt flag - ;; EFLAGS_VIP - Virtual Interrupt pending - ;; EFLAGS_ID - CPUID instruction available -EFLAGS_CF equ 1 << 0 -EFLAGS_PF equ 1 << 2 -EFLAGS_AF equ 1 << 4 -EFLAGS_ZF equ 1 << 6 -EFLAGS_SF equ 1 << 7 -EFLAGS_TF equ 1 << 8 -EFLAGS_IF equ 1 << 9 -EFLAGS_DF equ 1 << 10 -EFLAGS_OF equ 1 << 11 -EFLAGS_IOPL1 equ 1 << 12 -EFLAGS_IOPL2 equ 1 << 13 -EFLAGS_NT equ 1 << 14 -EFLAGS_RF equ 1 << 16 -EFLAGS_VM equ 1 << 17 -EFLAGS_AC equ 1 << 18 -EFLAGS_VIF equ 1 << 19 -EFLAGS_VIP equ 1 << 20 -EFLAGS_ID equ 1 << 21