mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 02:36:13 +00:00
[FREELDR]
Move the BIOS call buffer to physical address 0x4000, making another page available at the top, moving the margin down to 0x9E000. Should fix boot with machines that have a large EBDA. CORE-8692 #comment please retest. svn path=/trunk/; revision=64945
This commit is contained in:
parent
9bc147ffd5
commit
3b3996b399
3 changed files with 9 additions and 10 deletions
|
@ -108,8 +108,7 @@ i386PrintExceptionText(ULONG TrapIndex, PKTRAP_FRAME TrapFrame, PKSPECIAL_REGIST
|
|||
i386_ScreenPosX = 0;
|
||||
i386_ScreenPosY = 0;
|
||||
|
||||
PrintText("An error occured in FreeLoader\n"
|
||||
VERSION"\n"
|
||||
PrintText("An error occured in " VERSION "\n"
|
||||
"Report this error to the ReactOS Development mailing list <ros-dev@reactos.org>\n\n"
|
||||
"0x%02lx: %s\n", TrapIndex, i386ExceptionDescriptionText[TrapIndex]);
|
||||
#ifdef _M_IX86
|
||||
|
|
|
@ -32,7 +32,6 @@ DBG_DEFAULT_CHANNEL(MEMORY);
|
|||
#define STACK_BASE_PAGE (STACKLOW / PAGE_SIZE)
|
||||
#define FREELDR_BASE_PAGE (FREELDR_BASE / PAGE_SIZE)
|
||||
#define DISKBUF_BASE_PAGE (DISKREADBUFFER / PAGE_SIZE)
|
||||
#define BIOSBUF_BASE_PAGE (BIOSCALLBUFFER / PAGE_SIZE)
|
||||
|
||||
#define STACK_PAGE_COUNT (FREELDR_BASE_PAGE - STACK_BASE_PAGE)
|
||||
#define FREELDR_PAGE_COUNT (DISKBUF_BASE_PAGE - FREELDR_BASE_PAGE)
|
||||
|
@ -45,11 +44,10 @@ ULONG PcBiosMapCount;
|
|||
FREELDR_MEMORY_DESCRIPTOR PcMemoryMap[MAX_BIOS_DESCRIPTORS + 1] =
|
||||
{
|
||||
{ LoaderFirmwarePermanent, 0x00, 1 }, // realmode int vectors
|
||||
{ LoaderFirmwareTemporary, 0x01, STACK_BASE_PAGE - 1 }, // freeldr stack + cmdline
|
||||
{ LoaderFirmwareTemporary, 0x01, STACK_BASE_PAGE - 1 }, // freeldr stack, cmdline, BIOS call buffer
|
||||
{ LoaderOsloaderStack, STACK_BASE_PAGE, FREELDR_BASE_PAGE - STACK_BASE_PAGE }, // prot mode stack.
|
||||
{ LoaderLoadedProgram, FREELDR_BASE_PAGE, FREELDR_PAGE_COUNT }, // freeldr image
|
||||
{ LoaderFirmwareTemporary, DISKBUF_BASE_PAGE, DISKBUF_PAGE_COUNT }, // Disk read buffer for int 13h. DISKREADBUFFER
|
||||
{ LoaderFirmwareTemporary, BIOSBUF_BASE_PAGE, BIOSBUF_PAGE_COUNT }, // BIOSCALLBUFFER
|
||||
{ LoaderFirmwarePermanent, 0x9F, 0x1 }, // EBDA
|
||||
{ LoaderFirmwarePermanent, 0xA0, 0x50 }, // ROM / Video
|
||||
{ LoaderSpecialMemory, 0xF0, 0x10 }, // ROM / Video
|
||||
|
@ -203,13 +201,14 @@ PcMemGetBiosMemoryMap(PFREELDR_MEMORY_DESCRIPTOR MemoryMap, ULONG MaxMemoryMapSi
|
|||
bit value at address 0x413 inside the BDA, which gives us the usable size
|
||||
in KB */
|
||||
Size = (*(PUSHORT)(ULONG_PTR)0x413) * 1024;
|
||||
if (Size < 0x9F000)
|
||||
if (Size < MEMORY_MARGIN)
|
||||
{
|
||||
FrLdrBugCheckWithMessage(
|
||||
MEMORY_INIT_FAILURE,
|
||||
__FILE__,
|
||||
__LINE__,
|
||||
"The BIOS reported a usable memory range up to 0x%x, which is too small!\n",
|
||||
"The BIOS reported a usable memory range up to 0x%x, which is too small!\n\n"
|
||||
"If you see this, please report to the ReactOS team!",
|
||||
Size);
|
||||
}
|
||||
|
||||
|
@ -230,13 +229,13 @@ PcMemGetBiosMemoryMap(PFREELDR_MEMORY_DESCRIPTOR MemoryMap, ULONG MaxMemoryMapSi
|
|||
{
|
||||
/* Check if this is high enough */
|
||||
ULONG EbdaBase = (ULONG)Regs.w.es << 4;
|
||||
if (EbdaBase < 0x9F000)
|
||||
if (EbdaBase < MEMORY_MARGIN)
|
||||
{
|
||||
FrLdrBugCheckWithMessage(
|
||||
MEMORY_INIT_FAILURE,
|
||||
__FILE__,
|
||||
__LINE__,
|
||||
"The location of your EBDA is 0x%lx, which is too low!\n"
|
||||
"The location of your EBDA is 0x%lx, which is too low!\n\n"
|
||||
"If you see this, please report to the ReactOS team!",
|
||||
EbdaBase);
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#define PDP_ADDRESS HEX(2000) /* One page PDP page table */
|
||||
#define PD_ADDRESS HEX(3000) /* One page PD page table */
|
||||
//#endif
|
||||
#define BIOSCALLBUFFER HEX(4000) /* Buffer to store temporary data for any Int386() call */
|
||||
#define STACK16ADDR HEX(6F00) /* The 16-bit stack top will be at 0000:6F00 */
|
||||
#define BSS_START HEX(6F00)
|
||||
#define STACKLOW HEX(7000)
|
||||
|
@ -16,7 +17,7 @@
|
|||
#define FREELDR_BASE HEX(F800)
|
||||
#define FREELDR_PE_BASE HEX(10000)
|
||||
#define DISKREADBUFFER HEX(8E000) /* Buffer to store data read in from the disk via the BIOS */
|
||||
#define BIOSCALLBUFFER HEX(9E000) /* Buffer to store temporary data for any Int386() call */
|
||||
#define MEMORY_MARGIN HEX(9E000) /* Highest usable address */
|
||||
/* 9F000- 9FFFF is reserved for the EBDA */
|
||||
#define DISKREADBUFFER_SIZE HEX(10000)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue