diff --git a/reactos/boot/freeldr/freeldr/arch/amd64/int386.S b/reactos/boot/freeldr/freeldr/arch/amd64/int386.S index cd58fce70b7..fe5f3256c4f 100644 --- a/reactos/boot/freeldr/freeldr/arch/amd64/int386.S +++ b/reactos/boot/freeldr/freeldr/arch/amd64/int386.S @@ -19,6 +19,7 @@ #include #include +#include .code64 EXTERN CallRealMode:PROC diff --git a/reactos/boot/freeldr/freeldr/arch/i386/entry.S b/reactos/boot/freeldr/freeldr/arch/i386/entry.S index d352f10e79f..63c0a0b3048 100644 --- a/reactos/boot/freeldr/freeldr/arch/i386/entry.S +++ b/reactos/boot/freeldr/freeldr/arch/i386/entry.S @@ -19,6 +19,7 @@ #include #include +#include EXTERN _BootMain:PROC EXTERN _InitIdt:PROC diff --git a/reactos/boot/freeldr/freeldr/arch/i386/int386.S b/reactos/boot/freeldr/freeldr/arch/i386/int386.S index 52930ec58d1..87b914ae95e 100644 --- a/reactos/boot/freeldr/freeldr/arch/i386/int386.S +++ b/reactos/boot/freeldr/freeldr/arch/i386/int386.S @@ -45,6 +45,8 @@ Int386_esi: .long 0 Int386_edi: .long 0 +Int386_ebp: + .long 0 Int386_ds: .word 0 diff --git a/reactos/boot/freeldr/freeldr/arch/realmode/int386.inc b/reactos/boot/freeldr/freeldr/arch/realmode/int386.inc index 1fe18fb6062..d6a08088028 100644 --- a/reactos/boot/freeldr/freeldr/arch/realmode/int386.inc +++ b/reactos/boot/freeldr/freeldr/arch/realmode/int386.inc @@ -1,4 +1,5 @@ +#include "../../include/arch/pc/pcbios.h" Int386: /* Save all registers + segment registers */ diff --git a/reactos/boot/freeldr/freeldr/include/arch/pc/pcbios.h b/reactos/boot/freeldr/freeldr/include/arch/pc/pcbios.h index 69a3036e4d4..dcf89b3c641 100644 --- a/reactos/boot/freeldr/freeldr/include/arch/pc/pcbios.h +++ b/reactos/boot/freeldr/freeldr/include/arch/pc/pcbios.h @@ -10,6 +10,7 @@ typedef struct unsigned long esi; unsigned long edi; + unsigned long ebp; unsigned short ds; unsigned short es; @@ -29,6 +30,7 @@ typedef struct unsigned short si, _upper_si; unsigned short di, _upper_di; + unsigned short bp, _upper_bp; unsigned short ds; unsigned short es; @@ -56,6 +58,7 @@ typedef struct unsigned short si, _upper_si; unsigned short di, _upper_di; + unsigned short bp, _upper_bp; unsigned short ds; unsigned short es; @@ -96,3 +99,19 @@ VOID SoftReboot(VOID); // Implemented in boot.S VOID DetectHardware(VOID); // Implemented in hardware.c #endif /* ! __ASM__ */ + +/* Layout of the REGS structure */ +#define REGS_EAX 0 +#define REGS_EBX 4 +#define REGS_ECX 8 +#define REGS_EDX 12 +#define REGS_ESI 16 +#define REGS_EDI 20 +#define REGS_EBP 24 +#define REGS_DS 28 +#define REGS_ES 30 +#define REGS_FS 32 +#define REGS_GS 34 +#define REGS_EFLAGS 36 +#define REGS_SIZE 40 + diff --git a/reactos/boot/freeldr/freeldr/include/arch/pc/x86common.h b/reactos/boot/freeldr/freeldr/include/arch/pc/x86common.h index 4cdc80e57df..44a24c4e047 100644 --- a/reactos/boot/freeldr/freeldr/include/arch/pc/x86common.h +++ b/reactos/boot/freeldr/freeldr/include/arch/pc/x86common.h @@ -23,25 +23,10 @@ #define BIOSCALLBUFSEGMENT (BIOSCALLBUFFER/16) /* Buffer to store temporary data for any Int386() call */ #define BIOSCALLBUFOFFSET HEX(0000) /* Buffer to store temporary data for any Int386() call */ -/* Layout of the REGS structure */ -#define REGS_EAX 0 -#define REGS_EBX 4 -#define REGS_ECX 8 -#define REGS_EDX 12 -#define REGS_ESI 16 -#define REGS_EDI 20 -#define REGS_DS 24 -#define REGS_ES 26 -#define REGS_FS 28 -#define REGS_GS 30 -#define REGS_EFLAGS 32 -#define REGS_SIZE 36 - /* These addresses specify the realmode "BSS section" layout */ #define BSS_RealModeEntry (BSS_START + 0) -#define BSS_CallbackAddress (BSS_START + 4) -#define BSS_CallbackReturn (BSS_START + 8) -#define BSS_RegisterSet (BSS_START + 16) /* size = 36 */ +#define BSS_CallbackReturn (BSS_START + 4) +#define BSS_RegisterSet (BSS_START + 8) /* size = 40 */ #define BSS_IntVector (BSS_START + 52) #define BSS_PxeEntryPoint (BSS_START + 56) #define BSS_PxeBufferSegment (BSS_START + 60)