format elf use32 MULTIBOOT_PAGE_ALIGN equ (1 shl 0) MULTIBOOT_MEMORY_INFO equ (1 shl 1) MULTIBOOT_VIDEO_REQUEST equ (0 shl 2) MULTIBOOT_AOUT_KLUDGE equ (1 shl 16) MULTIBOOT_HEADER_MAGIC equ 0x1BADB002 MULTIBOOT_HEADER_FLAGS equ MULTIBOOT_PAGE_ALIGN or MULTIBOOT_MEMORY_INFO or MULTIBOOT_VIDEO_REQUEST MULTIBOOT_CHECKSUM equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) .multiboot: align 4 dd MULTIBOOT_HEADER_MAGIC dd MULTIBOOT_HEADER_FLAGS dd MULTIBOOT_CHECKSUM ; dd 0 ; header address ; dd 0 ; load address ; dd 0 ; load end address ; dd 0 ; bss end address ; dd 0 ; entry address ; dd 0 ; video mode_type (0:fb, 1:txt) (set flags[2]!) ; dd 1024 ; video width ; dd 768 ; video height ; dd 32 ; video depth section '.bss' writable align 16 stack_bottom: rb 16384 stack_top: section '.text' executable public _start extrn kmain disable_cursor: pushf push eax push edx mov dx, 0x3D4 mov al, 0xA ; low cursor shape register out dx, al inc dx mov al, 0x20 ; bits 6-7 unused, bit 5 disables the cursor, bits 0-4 control the cursor shape out dx, al pop edx pop eax popf ret _start: ; Setup stack mov esp, stack_top call disable_cursor ; Call the main kernel function. push ebx push eax call kmain @@: cli hlt jmp @b