ReactOS
0.4.16-dev-1946-g52006dd
x86common.h
Go to the documentation of this file.
1
2
#ifndef HEX
3
#define HEX(y) 0x##y
4
#endif
5
6
/* Memory layout */
7
#ifdef _M_AMD64
8
#define PML4_ADDRESS HEX(1000)
/* One page PML4 page table */
9
#define PDP_ADDRESS HEX(2000)
/* One page PDP page table */
10
#define PD_ADDRESS HEX(3000)
/* One page PD page table */
11
#endif
12
#define BIOSCALLBUFFER HEX(4000)
/* Buffer to store temporary data for any Int386() call */
13
#define STACK16ADDR HEX(6F00)
/* The 16-bit stack top will be at 0000:6F00 */
14
#define BSS_START HEX(6F00)
15
#define STACKLOW HEX(8000)
16
#define STACKADDR HEX(F000)
/* The 32/64-bit stack top will be at 0000:F000, or 0xF000 */
17
#define FREELDR_BASE HEX(F800)
18
#define FREELDR_PE_BASE HEX(10000)
19
#define TEMPDATA16_BASE HEX(7000)
20
#define TEMPCODE16_BASE HEX(7400)
21
#define TEMPCODE_BASE HEX(200000)
22
#define MEMORY_MARGIN HEX(88000)
/* We need this much memory */
23
24
#define BIOSCALLBUFSEGMENT (BIOSCALLBUFFER/16)
/* Buffer to store temporary data for any Int386() call */
25
#define BIOSCALLBUFOFFSET HEX(0000)
/* Buffer to store temporary data for any Int386() call */
26
#define BIOSCALLBUFSIZE PAGE_SIZE
/* max is sizeof(VESA_SVGA_INFO) = 512 */
27
#define MAX_FREELDR_PE_SIZE (MEMORY_MARGIN - FREELDR_PE_BASE - PAGE_SIZE)
28
29
/* MAX_DISKREADBUFFER_SIZE is later passed to INT 13h, AH=42h.
30
According to https://en.wikipedia.org/wiki/INT_13H#INT_13h_AH.3D42h:_Extended_Read_Sectors_From_Drive
31
some BIOSes can only read a maximum of 127 sectors. (0xFE00 / 512 = 127)
32
Confirmed when booting from USB on Dell Latitude D531 and Lenovo ThinkPad X61. */
33
#define MAX_DISKREADBUFFER_SIZE HEX(FE00)
34
35
/* These addresses specify the realmode "BSS section" layout */
36
#define BSS_RealModeEntry (BSS_START + 0)
37
#define BSS_CallbackReturn (BSS_START + 4)
38
#define BSS_RegisterSet (BSS_START + 8)
/* size = 40 */
39
#define BSS_IntVector (BSS_START + 52)
40
#define BSS_PxeEntryPoint (BSS_START + 56)
41
#define BSS_PxeBufferSegment (BSS_START + 60)
42
#define BSS_PxeBufferOffset (BSS_START + 64)
43
#define BSS_PxeFunction (BSS_START + 68)
44
#define BSS_PxeResult (BSS_START + 72)
45
#define BSS_PnpBiosEntryPoint (BSS_START + 76)
46
#define BSS_PnpBiosDataSegment (BSS_START + 80)
47
#define BSS_PnpBiosBufferSegment (BSS_START + 84)
48
#define BSS_PnpBiosBufferOffset (BSS_START + 88)
49
#define BSS_PnpNodeSize (BSS_START + 92)
50
#define BSS_PnpNodeCount (BSS_START + 96)
51
#define BSS_PnpNodeNumber (BSS_START + 100)
52
#define BSS_PnpResult (BSS_START + 104)
53
#define BSS_BootDrive (BSS_START + 108)
// 1 byte
54
#define BSS_BootPartition (BSS_START + 109)
// 1 byte
55
#define BSS_CurrentSegmentBaseAddress (BSS_START + 110)
// 2 bytes
56
57
58
/* Realmode function IDs */
59
#define FNID_Int386 0
60
#define FNID_Reboot 1
61
#define FNID_Relocator16Boot 2
62
#define FNID_PxeCallApi 3
63
#define FNID_PnpBiosGetDeviceNodeCount 4
64
#define FNID_PnpBiosGetDeviceNode 5
65
#define FNID_PnpBiosGetDockStationInformation 6
66
67
/* Flag Masks */
68
#define CR0_PE_SET HEX(00000001)
/* OR this value with CR0 to enable pmode */
69
#define CR0_PE_CLR HEX(FFFFFFFE)
/* AND this value with CR0 to disable pmode */
70
71
/* Defines needed for switching between real and protected mode */
72
//#ifdef _M_IX86
73
#define NULL_DESC HEX(00)
/* NULL descriptor */
74
#define PMODE_CS HEX(08)
/* PMode code selector, base 0 limit 4g */
75
#define PMODE_DS HEX(10)
/* PMode data selector, base 0 limit 4g */
76
#define RMODE_CS HEX(18)
/* RMode code selector, base 0 limit 64k */
77
#define RMODE_DS HEX(20)
/* RMode data selector, base 0 limit 64k */
78
//#else
79
/* Long mode selectors */
80
#define LMODE_CS HEX(10)
81
#define LMODE_DS HEX(18)
82
#define L_RMODE_CS HEX(20)
83
#define L_RMODE_DS HEX(28)
84
#define CMODE_CS HEX(30)
85
//#endif
boot
freeldr
freeldr
include
arch
pc
x86common.h
Generated on Thu Dec 4 2025 06:03:00 for ReactOS by
1.9.6