diff --git a/bootloader/bios.asm b/bootloader/bios.asm deleted file mode 100644 index 339a9dc..0000000 --- a/bootloader/bios.asm +++ /dev/null @@ -1,7 +0,0 @@ -; EQUs -%include "bootloader/equ/bios.asm" - -; SRs -%include "bootloader/bios/convert.asm" -%include "bootloader/bios/print.asm" -%include "bootloader/bios/disk.asm" diff --git a/bootloader/bootloader.asm b/bootloader/bootloader.asm index a5578fe..09432ff 100644 --- a/bootloader/bootloader.asm +++ b/bootloader/bootloader.asm @@ -21,8 +21,49 @@ jmp $ ; inf loop %include "bootloader/equ/ascii.asm" -%include "bootloader/bios.asm" -%include "bootloader/pm.asm" +%include "bootloader/equ/bios.asm" + +; BIOS SRs +%include "bootloader/bios/convert.asm" +%include "bootloader/bios/print.asm" +%include "bootloader/bios/disk.asm" + +; Protected Mode SRs +%include "bootloader/equ/vga.asm" +%include "bootloader/pm/vga/print.asm" + +; GDT & switching to PM +%include "bootloader/pm/gdt.asm" ; GDT defined here + +; Switching to PM +[bits 16] +pm_preinit: + cli ; Switch interupts + + lgdt [gdt_descriptor] ; Tell the CPU about the GDT + + mov eax, cr0 ; Set first bit of the CR0 register + or eax, 0x1 ; to 1 + mov cr0, eax ; Update the control register + + ; Initialize PM + jmp GDT_CODE_SEG:pm_init + +[bits 32] +; Init registers & stack when in PM +pm_init: + mov ax, GDT_DATA_SEG ; Point the segment registers to GDT_DATA_SEG + ; Segment registers + mov ds, ax + mov ss, ax + mov es, ax + mov fs, ax + mov gs, ax + + mov ebp, 0x900000 ; Update the stack pointer + mov esp, ebp + + call BEGIN_PM BEGIN_PM: ; Inform of mode switch diff --git a/bootloader/pm.asm b/bootloader/pm.asm deleted file mode 100644 index 1965d11..0000000 --- a/bootloader/pm.asm +++ /dev/null @@ -1,37 +0,0 @@ -; Utils -%include "bootloader/equ/vga.asm" -%include "bootloader/pm/vga/print.asm" - -; GDT & switching to PM -%include "bootloader/pm/gdt.asm" ; GDT defined here - -; Switching to PM -[bits 16] -pm_preinit: - cli ; Switch interupts - - lgdt [gdt_descriptor] ; Tell the CPU about the GDT - - mov eax, cr0 ; Set first bit of the CR0 register - or eax, 0x1 ; to 1 - mov cr0, eax ; Update the control register - - ; Initialize PM - jmp GDT_CODE_SEG:pm_init - -[bits 32] -; Init registers & stack when in PM -pm_init: - mov ax, GDT_DATA_SEG ; Point the segment registers to GDT_DATA_SEG - ; Segment registers - mov ds, ax - mov ss, ax - mov es, ax - mov fs, ax - mov gs, ax - - mov ebp, 0x900000 ; Update the stack pointer - mov esp, ebp - - call BEGIN_PM -