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
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
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: