; assumptions about the starting envionment cpu 8086 org 0x0000 ; dl probable drive number ; ds:si probable pointer to partition structure ; es:bx probable pxeenv+ structure ; ss:sp functional stack _startup: ; during PXE, CS=0000 and IP=7C00 ; adjust CS so our offsets match org setting above mov ax, _exit push ax ; store exit addr on stack so main will return to it push bx ; backup bx call near .push_ip .push_ip: pop bx sub bx, .push_ip ; subtract expected value ... shr bx,1 ; shift it to 4 bits to the right shr bx,1 shr bx,1 shr bx,1 mov ax,cs add ax,bx ; so we can add it to cs pop bx ; restore bx push ax ; cs mov ax, main push ax ; ip sti retf ; jump _exit: mov si, .message call kprintf int 0x20 .loop: hlt jmp .loop .message: db "Halted: Waiting for poweroff...", 0 main: mov ax, cs mov ds, ax mov es, ax mov bx, 0x002E mov dx, debug_reg_ir call ivt_set call heap_init mov ax, 18 call malloc ret %include "kernel/heap.asm" %include "kernel/intr.asm" %include "kernel/debug.asm" %include "kernel/kprintf.asm" align 16 heap: dw 0