works and returns to DOS on dosbox
[com32] / src / loader.asm
index ea0de70..d31c6a8 100644 (file)
@@ -96,14 +96,7 @@ _start:
        mov esp, _main_start
 
        call 8:startup
-
-       PMPRINT 'X'
-       PMPRINT 'Y'
-       PMPRINT 'Z'
-       PMPRINT 'Z'
-       PMPRINT 'Y'
-       PMPRINT 13
-       PMPRINT 10
+       cli
 
        ; return to real mode
        jmp 28h:.rm
@@ -120,12 +113,15 @@ _start:
        mov es, ax
        mov ss, ax
 
+       ; restore real-mode IVT
+       lidt [rmidt]
+       sti
+
+       mov ax, 3
+       int 10h
 exit:  mov ax, 4c00h
        int 21h
 
-dbg_inpm db 'DBG: in pmode',10,0
-dbg_retrm db 'DBG: returning to real mode...',10,0
-
 str_errvm86 db 'Error: memory manager detected! Stop it and try again (e.g. emm386 off)',10,0
 str_enterpm db 'Entering 32bit protected mode ...',10,0
 
@@ -532,5 +528,10 @@ gdt:       ; 0: null segment
        dd 0000ffffh
        dd 00009a00h
 
+       ; pseudo IDTR descriptor for real-mode IVT at address 0
+       align 4
+       dw 0
+rmidt: dw 3ffh         ; IVT limit (1kb / 256 entries)
+       dd 0            ; IVT base 0
 
 ; vi:set ts=8 sts=8 sw=8 ft=nasm: