[FREELDR]
[reactos.git] / reactos / boot / freeldr / freeldr / include / arch / pc / x86common.h
1
2 #ifndef HEX
3 #define HEX(y) 0x##y
4 #endif
5
6 /* Memory layout */
7 #define STACK16ADDR HEX(6F00) /* The 16-bit stack top will be at 0000:6F00 */
8 #define BSS_START HEX(6F00)
9 #define FREELDR_BASE HEX(8000)
10 #define FREELDR_PE_BASE HEX(9000)
11 #define STACK32ADDR HEX(78000) /* The 32-bit stack top will be at 7000:8000, or 0x78000 */
12 #define BIOSCALLBUFFER HEX(78000) /* Buffer to store temporary data for any Int386() call */
13 #define BIOSCALLBUFSEGMENT HEX(7800) /* Buffer to store temporary data for any Int386() call */
14 #define BIOSCALLBUFOFFSET HEX(0000) /* Buffer to store temporary data for any Int386() call */
15 #define FILESYSBUFFER HEX(80000) /* Buffer to store file system data (e.g. cluster buffer for FAT) */
16 #define DISKREADBUFFER HEX(90000) /* Buffer to store data read in from the disk via the BIOS */
17 #define DISKREADBUFFER_SIZE 512
18
19 /* These addresses specify the realmode "BSS section" layout */
20 #define BSS_EntryPoint (BSS_START + 0)
21 #define BSS_CallbackAddress (BSS_START + 4)
22 #define BSS_CallbackReturn (BSS_START + 8)
23 #define BSS_BootDrive (BSS_START + 12)
24 #define BSS_BootPartition (BSS_START + 16)
25
26
27 // Flag Masks
28 #define I386FLAG_CF HEX(0001) // Carry Flag
29 #define I386FLAG_RESV1 HEX(0002) // Reserved - Must be 1
30 #define I386FLAG_PF HEX(0004) // Parity Flag
31 #define I386FLAG_RESV2 HEX(0008) // Reserved - Must be 0
32 #define I386FLAG_AF HEX(0010) // Auxiliary Flag
33 #define I386FLAG_RESV3 HEX(0020) // Reserved - Must be 0
34 #define I386FLAG_ZF HEX(0040) // Zero Flag
35 #define I386FLAG_SF HEX(0080) // Sign Flag
36 #define I386FLAG_TF HEX(0100) // Trap Flag (Single Step)
37 #define I386FLAG_IF HEX(0200) // Interrupt Flag
38 #define I386FLAG_DF HEX(0400) // Direction Flag
39 #define I386FLAG_OF HEX(0800) // Overflow Flag
40
41 #define CR0_PE_SET HEX(00000001) /* OR this value with CR0 to enable pmode */
42 #define CR0_PE_CLR HEX(FFFFFFFE) /* AND this value with CR0 to disable pmode */
43
44 /* Defines needed for switching between real and protected mode */
45 //#ifdef _M_IX86
46 #define NULL_DESC HEX(00) /* NULL descriptor */
47 #define PMODE_CS HEX(08) /* PMode code selector, base 0 limit 4g */
48 #define PMODE_DS HEX(10) /* PMode data selector, base 0 limit 4g */
49 #define RMODE_CS HEX(18) /* RMode code selector, base 0 limit 64k */
50 #define RMODE_DS HEX(20) /* RMode data selector, base 0 limit 64k */
51 //#endif
52
53 /* Makes "x" a global variable or label */
54 #define EXTERN(x) .global x; x: