[FREELDR] Re-integrate the ASM files (and corresponding C code) in MSVC builds, that...
[reactos.git] / boot / freeldr / freeldr / include / arch / pc / x86common.h
index 3d5c7ff..1b40ca3 100644 (file)
@@ -4,26 +4,30 @@
 #endif
 
 /* Memory layout */
-//#ifdef _M_AMD64
+#ifdef _M_AMD64
 #define PML4_ADDRESS        HEX(1000) /* One page PML4 page table */
 #define PDP_ADDRESS         HEX(2000) /* One page PDP page table */
 #define PD_ADDRESS          HEX(3000) /* One page PD page table */
-//#endif
+#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)
+#define STACKADDR           HEX(F000) /* The 32/64-bit stack top will be at 0000:F000, or 0xF000 */
 #define FREELDR_BASE        HEX(F800)
 #define FREELDR_PE_BASE    HEX(10000)
-#define DISKREADBUFFER     HEX(80000) /* Buffer to store data read in from the disk via the BIOS */
-#define STACKLOWLIMIT      HEX(90000)
-#define STACK32ADDR        HEX(98000) /* The 32-bit stack top will be at 9000:8000, or 0xA8000 */
-#define STACK64ADDR           HEX(98000) /* The 64-bit stack top will be at 98000 */
-#define BIOSCALLBUFFER     HEX(98000) /* Buffer to store temporary data for any Int386() call */
-#define DISKREADBUFFER_SIZE HEX(10000)
+#define MEMORY_MARGIN      HEX(88000) /* We need this much memory */
 
 #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 */
 #define BIOSCALLBUFSIZE     PAGE_SIZE /* max is sizeof(VESA_SVGA_INFO) = 512 */
-#define MAX_FREELDR_PE_SIZE (DISKREADBUFFER - FREELDR_PE_BASE)
+#define MAX_FREELDR_PE_SIZE (MEMORY_MARGIN - FREELDR_PE_BASE - PAGE_SIZE)
+
+/* MAX_DISKREADBUFFER_SIZE is later passed to INT 13h, AH=42h.
+   According to https://en.wikipedia.org/wiki/INT_13H#INT_13h_AH.3D42h:_Extended_Read_Sectors_From_Drive
+   some BIOSes can only read a maximum of 127 sectors. (0xFE00 / 512 = 127)
+   Confirmed when booting from USB on Dell Latitude D531 and Lenovo ThinkPad X61. */
+#define MAX_DISKREADBUFFER_SIZE HEX(FE00)
 
 /* These addresses specify the realmode "BSS section" layout */
 #define BSS_RealModeEntry        (BSS_START +  0)
@@ -62,7 +66,7 @@
 
 /* Defines needed for switching between real and protected mode */
 //#ifdef _M_IX86
-#define NULL_DESC    HEX(00)    /* NULL descriptor */
+#define NULL_DESC   HEX(00)    /* NULL descriptor */
 #define PMODE_CS    HEX(08)    /* PMode code selector, base 0 limit 4g */
 #define PMODE_DS    HEX(10)    /* PMode data selector, base 0 limit 4g */
 #define RMODE_CS    HEX(18)    /* RMode code selector, base 0 limit 64k */
@@ -73,6 +77,3 @@
 #define LMODE_DS HEX(18)
 #define CMODE_CS HEX(30)
 //#endif
-
-/* Makes "x" a global variable or label */
-#define EXTERN(x)    .global x; x: