;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;; Miguel's FoolOS Helper Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; switch_to_pm - actual switch from 16bit real to 32bit protected ; init_pm - sets up some regs and calls boot_32_pm ; [bits 16] switch_to_pm: cli ;switch off interrupts! lgdt [gdt_descriptor] ;load descriptor table! ; lldt [gdt_descriptor] ;load descriptor table! (local) ;switch on 32-bit protected mode mov eax, cr0 or eax,0x1 mov cr0, eax jmp CODE_SEG:init_pm [bits 32] init_pm: mov ax, DATA_SEG mov ds, ax mov ss, ax mov es, ax mov fs, ax mov gs, ax mov ebp, 0x07bff mov esp, ebp call boot_32_pm ;continue booting in 32-bit protected mode