EXTERNDEF m16GdtrBase:WORD\r
EXTERNDEF mTransition:WORD\r
\r
-THUNK_ATTRIBUTE_BIG_REAL_MODE EQU 1\r
THUNK_ATTRIBUTE_DISABLE_A20_MASK_INT_15 EQU 2\r
THUNK_ATTRIBUTE_DISABLE_A20_MASK_KBD_CTRL EQU 4\r
\r
call @Base ; push eip\r
@Base:\r
pop bp ; ebp <- offset @Base\r
+ push [esp + sizeof (IA32_REGS) + 2]\r
+ lea eax, [rsi + (offset @RealMode - offset @Base)]\r
+ push rax\r
+ retf\r
+@RealMode:\r
DB 2eh ; cs:\r
mov [rsi + (offset SavedSs - offset @Base)], edi\r
DB 2eh ; cs:\r
push 10h\r
pop rdx ; rdx <- selector for data segments\r
lgdt fword ptr [rcx + (offset _16Gdtr - offset SavedCr4)]\r
+ pushfq\r
call fword ptr [rcx + (offset _EntryPoint - offset SavedCr4)]\r
+ popfq\r
lidt fword ptr [rsp + 38h] ; restore protected mode IDTR\r
lea eax, [rbp - sizeof (IA32_REGS)]\r
pop gs\r