rdos/nbp.asm

66 lines
1.1 KiB
NASM
Raw Normal View History

; assumptions about the starting envionment
2019-03-10 20:23:09 +01:00
cpu 8086
org 0x0000
; dl probable drive number
; ds:si probable pointer to partition structure
; es:bx probable pxeenv+ structure
; ss:sp functional stack
2019-03-10 20:23:09 +01:00
2019-03-13 22:11:30 +01:00
_startup:
; during PXE, CS=0000 and IP=7C00
; adjust CS so our offsets match org setting above
2019-03-13 22:11:30 +01:00
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
2019-03-13 22:11:30 +01:00
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
2019-03-13 22:11:30 +01:00
pop bx ; restore bx
push ax ; cs
mov ax, main
push ax ; ip
2019-03-13 22:11:30 +01:00
sti
retf ; jump
2019-03-10 20:23:09 +01:00
2019-03-13 22:11:30 +01:00
_exit:
mov si, .message
call kprintf
int 0x20
.loop:
hlt
jmp .loop
.message:
db "Halted: Waiting for poweroff...", 0
2019-03-13 18:28:38 +01:00
2019-03-10 20:23:09 +01:00
main:
mov ax, cs
mov ds, ax
mov es, ax
2019-03-13 22:11:49 +01:00
mov bx, 0x002E
mov dx, debug_reg_ir
2019-03-13 22:11:49 +01:00
call ivt_set
2019-03-13 22:11:49 +01:00
call heap_init
mov ax, 18
call malloc
2019-03-13 22:11:49 +01:00
ret
2019-03-10 20:23:09 +01:00
%include "kernel/heap.asm"
%include "kernel/intr.asm"
%include "kernel/debug.asm"
%include "kernel/kprintf.asm"
align 16
2019-03-16 11:46:01 +01:00
heap:
dw 0