From 4d827ec4e97919365b556659299c36f4a14e8bea Mon Sep 17 00:00:00 2001 From: Ain <41307858+nero@users.noreply.github.com> Date: Wed, 13 Mar 2019 21:11:30 +0000 Subject: [PATCH] Add proper _exit procedure --- main.asm | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/main.asm b/main.asm index c4fbd4e..40ad2d8 100644 --- a/main.asm +++ b/main.asm @@ -6,26 +6,37 @@ org 0x0000 ; if we are not at CS:0000, CS adjustment will fix it for us ; 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 -push bx ; offset register for calculations -call near __startup_push_ip ; push ip -__startup_push_ip: +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, __startup_push_ip ; subtract expected value ... +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 +pop bx ; restore bx push ax ; cs mov ax, main push ax ; ip +sti retf ; jump -string_halt: +_exit: + mov si, .message + call kprintf + int 0x20 +.loop: + hlt + jmp .loop +.message: db "Halted: Waiting for poweroff...", 0 main: