mirror of
https://github.com/gbowne1/ClassicOS.git
synced 2025-10-13 13:15:07 -07:00
new OS
This commit is contained in:
0
bootloader/Makefile
Normal file
0
bootloader/Makefile
Normal file
67
bootloader/boot.asm
Normal file
67
bootloader/boot.asm
Normal file
@@ -0,0 +1,67 @@
|
||||
[BITS 16]
|
||||
[ORG 0x7C00]
|
||||
|
||||
start:
|
||||
cli
|
||||
xor ax, ax
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
mov ss, ax
|
||||
mov sp, 0x7C00
|
||||
|
||||
call enable_a20
|
||||
call setup_gdt
|
||||
call switch_to_pm
|
||||
|
||||
; ----------------------
|
||||
; A20 Gate Enable (Fast method)
|
||||
enable_a20:
|
||||
in al, 0x92
|
||||
or al, 0x02
|
||||
out 0x92, al
|
||||
ret
|
||||
|
||||
; ----------------------
|
||||
; Set up a minimal GDT
|
||||
gdt_start:
|
||||
dq 0x0000000000000000 ; null descriptor
|
||||
dq 0x00CF9A000000FFFF ; code segment descriptor
|
||||
dq 0x00CF92000000FFFF ; data segment descriptor
|
||||
|
||||
gdt_descriptor:
|
||||
dw gdt_end - gdt_start - 1 ; size of GDT
|
||||
dd gdt_start ; address of GDT
|
||||
|
||||
gdt_end:
|
||||
|
||||
setup_gdt:
|
||||
lgdt [gdt_descriptor]
|
||||
ret
|
||||
|
||||
; ----------------------
|
||||
; Switch to Protected Mode
|
||||
switch_to_pm:
|
||||
cli
|
||||
mov eax, cr0
|
||||
or eax, 1
|
||||
mov cr0, eax
|
||||
jmp 0x08:protected_mode_entry
|
||||
; ----------------------
|
||||
; 32-bit Protected Mode Entry Point
|
||||
[BITS 32]
|
||||
protected_mode_entry:
|
||||
mov ax, 0x10 ; data segment selector
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
mov fs, ax
|
||||
mov gs, ax
|
||||
mov ss, ax
|
||||
mov esp, 0x90000
|
||||
|
||||
; Kernel is assumed to be loaded at 0x100000
|
||||
jmp 0x08:0x100000
|
||||
|
||||
; ----------------------
|
||||
; Boot signature
|
||||
times 510 - ($ - $$) db 0
|
||||
dw 0xAA55
|
17
bootloader/linker.ld
Normal file
17
bootloader/linker.ld
Normal file
@@ -0,0 +1,17 @@
|
||||
ENTRY(start)
|
||||
|
||||
SECTIONS {
|
||||
. = 1M;
|
||||
|
||||
.text : {
|
||||
*(.multiboot)
|
||||
*(.text*)
|
||||
}
|
||||
|
||||
.rodata : { *(.rodata*) }
|
||||
.data : { *(.data*) }
|
||||
.bss : {
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user