; Multiboot macros to make a few lines later more readable
MULTIBOOT_PAGE_ALIGN equ 1<<0
MULTIBOOT_MEMORY_INFO equ 1<<1
+ MULTIBOOT_REQVIDMODE equ 1<<2
MULTIBOOT_HEADER_MAGIC equ 0x1BADB002
- MULTIBOOT_HEADER_FLAGS equ MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO
+ MULTIBOOT_HEADER_FLAGS equ MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO | MULTIBOOT_REQVIDMODE
MULTIBOOT_CHECKSUM equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
; This is the GRUB Multiboot header. A boot signature
dd MULTIBOOT_HEADER_MAGIC
dd MULTIBOOT_HEADER_FLAGS
dd MULTIBOOT_CHECKSUM
+
dd mboot; - KERNEL_BASE ;Location of Multiboot Header
+ dd 0 ; load_addr
+ dd 0 ; load_end_addr
+ dd 0 ; bss_end_addr
+ dd 0 ; entry_addr
+
+ dd 0 ; Mode type (0: LFB)
+ dd 0 ; Width (no preference)
+ dd 0 ; Height (no preference)
+ dd 32 ; Depth (32-bit preferred)
; Multiboot 2 Header
;mboot2:
; dd 8
;mboot2_end:
-[section .text]
+[section .inittext]
[extern kmain]
+[extern Desctab_Install]
[global start]
start:
; Just show we're here
.higher_half:
mov WORD [0xB8006], 0x0773 ; 's'
+
+ push ebx ; Multiboot Info
+ push eax ; Multiboot Magic Value
+ ; NOTE: These are actually for kmain
+
+ call Desctab_Install
mov WORD [0xB8008], 0x0773 ; 's'
; Call the kernel
- push ebx ; Multiboot Info
- push eax ; Multiboot Magic Value
mov WORD [0xB800A], 0x0732 ; '2'
call kmain
; Load initial GDT
mov ax, 0xFFFF
mov ds, ax
- lgdt [DWORD ds:lGDTPtr-KERNEL_BASE-0xFFFF0]
+ lgdt [DWORD ds:lGDTPtr-0xFFFF0]
; Enable PMode in CR0
mov eax, cr0
or al, 1
mov cr0, eax
; Jump into PMode
- jmp 08h:DWORD .ProtectedMode-KERNEL_BASE
+ jmp 08h:DWORD .ProtectedMode
[bits 32]
.ProtectedMode:
; Load segment registers
jmp .hlt
%endif
+;
+;
+;
+[section .text]
[global GetEIP]
GetEIP:
mov eax, [esp]