diff options
Diffstat (limited to 'src/boot.asm')
-rw-r--r-- | src/boot.asm | 55 |
1 files changed, 51 insertions, 4 deletions
diff --git a/src/boot.asm b/src/boot.asm index 8e463be..eb3b2c9 100644 --- a/src/boot.asm +++ b/src/boot.asm @@ -1,9 +1,17 @@ bits 16 org 0x7c3e -kernel_sectors equ 16 +kernel_sectors equ 64 kernel_segment equ 0x3000 +support_flags equ 0x4000 +pci_hw_char equ 0x4001 +pci_ver equ 0x4002 + +pci_support equ 0x80 + +vesa_segment equ 0x0420 + in al, 0x92 or al, 0x02 out 0x92, al @@ -24,6 +32,31 @@ kernel_segment equ 0x3000 xor dh, dh int 0x13 + mov ax, 0xb101 + int 0x1a + + cmp edx, 0x20494350 + jne no_pci + + test ah, ah + jnz no_pci + + mov byte [support_flags], pci_support + mov byte [pci_hw_char], al + mov word [pci_ver], bx + +no_pci: + mov dword [vesa_segment * 16], 'V' + 'B' * 256 + 'E' * 65535 + '2' * 16777216 + + mov ax, vesa_segment + mov es, ax + xor di, di + mov ax, 0x4f00 + int 0x10 + + cmp ax, 0x004f + jne no_vbe + cli lgdt [gdt] @@ -34,6 +67,15 @@ kernel_segment equ 0x3000 jmp 0x08:pmode +no_vbe: + ;TODO + + cli + +real_halt: + hlt + jmp real_halt + bits 32 pmode: @@ -49,14 +91,19 @@ halt: hlt jmp halt +times $$ + 0x018a - $ db 0 + +;0x7dc8 gdt: dw .e - .t dd .t .t: dq 0x0000_0000_0000_0000 - dq 0x00c0_9a00_0000_007f - dq 0x00c0_9200_0000_00ff + dq 0x00c0_9a00_0000_0037 + dq 0x00c1_9200_0000_ffff + dq 0x0000_0000_0000_0000;TODO: task + dq 0x0000_0000_0000_0000 + dq 0x0000_0000_0000_0000 .e: -times $$ + 448 - $ db 0 dw 0xaa55
\ No newline at end of file |