root / lab4 / .minix-src / include / i386 / memory.h @ 14
History | View | Annotate | Download (8.66 KB)
1 |
/* Physical memory layout on IBM compatible PCs. Only the major, fixed memory
|
---|---|
2 |
* areas are detailed here. Known addresses of the BIOS data area are defined
|
3 |
* in <ibm/bios.h>. The map upper memory area (UMA) is only roughly defined
|
4 |
* since the UMA sections may vary in size and locus.
|
5 |
*
|
6 |
* Created: March 2005, Jorrit N. Herder
|
7 |
*/
|
8 |
|
9 |
/* I/O-mapped peripherals. I/O addresses are different from memory addresses
|
10 |
* due to the I/O signal on the ISA bus. Individual I/O ports are defined by
|
11 |
* the drivers that use them or looked up with help of the BIOS.
|
12 |
*/
|
13 |
#define IO_MEMORY_BEGIN 0x0000 |
14 |
#define IO_MEMORY_END 0xFFFF |
15 |
|
16 |
|
17 |
/* Physical memory layout. Design decisions made for the earliest PCs, caused
|
18 |
* memory to be broken broken into the following four basic pieces:
|
19 |
* - Conventional or base memory: first 640 KB (incl. BIOS data, see below);
|
20 |
* The top of conventional memory is often used by the BIOS to store data.
|
21 |
* - Upper Memory Area (UMA): upper 384 KB of the first megabyte of memory;
|
22 |
* - High Memory Area (HMA): ~ first 64 KB of the second megabyte of memory;
|
23 |
* - Extended Memory: all the memory above first megabyte of memory.
|
24 |
* The high memory area overlaps with the first 64 KB of extended memory, but
|
25 |
* is different from the rest of extended memory because it can be accessed
|
26 |
* when the processor is in real mode.
|
27 |
*/
|
28 |
#define BASE_MEM_BEGIN 0x000000 |
29 |
#define BASE_MEM_TOP 0x090000 |
30 |
#define BASE_MEM_END 0x09FFFF |
31 |
|
32 |
#define UPPER_MEM_BEGIN 0x0A0000 |
33 |
#define UPPER_MEM_END 0x0FFFFF |
34 |
|
35 |
#define HIGH_MEM_BEGIN 0x100000 |
36 |
#define HIGH_MEM_END 0x10FFEF |
37 |
|
38 |
#define EXTENDED_MEM_BEGIN 0x100000 |
39 |
#define EXTENDED_MEM_END ((unsigned) -1) |
40 |
|
41 |
|
42 |
/* The logical memory map of the first 1.5 MB is as follows (hexadecimals):
|
43 |
*
|
44 |
* offset [size] (id) = memory usage
|
45 |
* ------------------------------------------------------------------------
|
46 |
* 000000 [00400] (I) = Real-Mode Interrupt Vector Table (1024 B)
|
47 |
* 000400 [00100] (B) = BIOS Data Area (256 B)
|
48 |
* 000800 [00066] (W) = 80286 Loadall workspace
|
49 |
* 010000 [10000] (c) = Real-Mode Compatibility Segment (64 KB)
|
50 |
* 020000 [70000] (.) = Program-accessible memory (free)
|
51 |
* 090000 [10000] (E) = BIOS Extension
|
52 |
* 0A0000 [10000] (G) = Graphics Mode Video RAM
|
53 |
* 0B0000 [08000] (M) = Monochrome Text Mode Video RAM
|
54 |
* 0B8000 [08000] (C) = Color Text Mode Video RAM
|
55 |
* 0C0000 [08000] (V) = Video ROM BIOS (would be "a" in PS/2)
|
56 |
* 0C8000 [18000] (a) = Adapter ROM + special-purpose RAM (free UMA space)
|
57 |
* 0E0000 [10000] (r) = PS/2 Motherboard ROM BIOS (free UMA in non-PS/2)
|
58 |
* 0F0000 [06000] (R) = Motherboard ROM BIOS
|
59 |
* 0F6000 [08000] (b) = IBM Cassette BASIC ROM ("R" in IBM compatibles)
|
60 |
* 0FD000 [02000] (R) = Motherboard ROM BIOS
|
61 |
* 100000 [.....] (.) = Extended memory, program-accessible (free)
|
62 |
* 100000 [0FFEF] (h) = High Memory Area (HMA)
|
63 |
*
|
64 |
*
|
65 |
* Conventional (Base) Memory:
|
66 |
*
|
67 |
* : [~~~~~16 KB~~~~][~~~~~16 KB~~~~][~~~~~16 KB~~~~][~~~~~16 KB~~~~]
|
68 |
* : 0---1---2---3---4---5---6---7---8---9---A---B---C---D---E---F---
|
69 |
* 000000: IBW.............................................................
|
70 |
* 010000: cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
71 |
* 020000: ................................................................
|
72 |
* 030000: ................................................................
|
73 |
* 040000: ................................................................
|
74 |
* 050000: ................................................................
|
75 |
* 060000: ................................................................
|
76 |
* 070000: ................................................................
|
77 |
* 080000: ................................................................
|
78 |
* 090000: EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
|
79 |
*
|
80 |
* Upper Memory Area (UMA):
|
81 |
*
|
82 |
* : 0---1---2---3---4---5---6---7---8---9---A---B---C---D---E---F---
|
83 |
* 0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
|
84 |
* 0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
|
85 |
* 0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
86 |
* 0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
87 |
* 0E0000: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
|
88 |
* 0F0000: RRRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRR
|
89 |
*
|
90 |
* Extended Memory:
|
91 |
*
|
92 |
* : 0---1---2---3---4---5---6---7---8---9---A---B---C---D---E---F---
|
93 |
* 100000: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh.
|
94 |
* 110000: ................................................................
|
95 |
* 120000: ................................................................
|
96 |
* 130000: ................................................................
|
97 |
* 140000: ................................................................
|
98 |
* 150000: ................................................................
|
99 |
* 160000: ................................................................
|
100 |
* 170000: ................................................................
|
101 |
*
|
102 |
* Source: The logical memory map was partly taken from the book "Upgrading
|
103 |
* & Repairing PCs Eight Edition", Macmillan Computer Publishing.
|
104 |
*/
|
105 |
|
106 |
|
107 |
/* The bottom part of conventional or base memory is occupied by BIOS data.
|
108 |
* The BIOS memory can be distinguished in two parts:
|
109 |
* o The first the first 1024 bytes of addressable memory contains the BIOS
|
110 |
* real-mode interrupt vector table (IVT). The table is used to access BIOS
|
111 |
* hardware services in real-mode by loading a interrupt vector and issuing
|
112 |
* an INT instruction. Some vectors contain BIOS data that can be retrieved
|
113 |
* directly and are useful in protected-mode as well.
|
114 |
* o The BIOS data area is located directly above the interrupt vectors. It
|
115 |
* comprises 256 bytes of memory. These data are used by the device drivers
|
116 |
* to retrieve hardware details, such as I/O ports to be used.
|
117 |
*/
|
118 |
#define BIOS_MEM_BEGIN 0x00000 /* all BIOS memory */ |
119 |
#define BIOS_MEM_END 0x004FF |
120 |
#define BIOS_IVT_BEGIN 0x00000 /* BIOS interrupt vectors */ |
121 |
#define BIOS_IVT_END 0x003FF |
122 |
#define BIOS_DATA_BEGIN 0x00400 /* BIOS data area */ |
123 |
#define BIOS_DATA_END 0x004FF |
124 |
|
125 |
/* The base memory is followed by 384 KB reserved memory located at the top of
|
126 |
* the first MB of physical memory. This memory is known as the upper memory
|
127 |
* area (UMA). It is used for memory-mapped peripherals, such as video RAM,
|
128 |
* adapter BIOS (adapter ROM and special purpose RAM), and the motherboard
|
129 |
* BIOS (I/O system, Power-On Self Test, bootstrap loader). The upper memory
|
130 |
* can roughly be distinguished in three parts:
|
131 |
*
|
132 |
* o The first 128K of the upper memory area (A0000-BFFFF) is reserved for use
|
133 |
* by memory-mapped video adapters. Hence, it is also called Video RAM. The
|
134 |
* display driver can directly write to this memory and request the hardware
|
135 |
* to show the data on the screen.
|
136 |
*/
|
137 |
#define UMA_VIDEO_RAM_BEGIN 0xA0000 /* video RAM */ |
138 |
#define UMA_VIDEO_RAM_END 0xBFFFF |
139 |
#define UMA_GRAPHICS_RAM_BEGIN 0xA0000 /* graphics RAM */ |
140 |
#define UMA_GRAPHICS_RAM_END 0xAFFFF |
141 |
#define UMA_MONO_TEXT_BEGIN 0xB0000 /* monochrome text */ |
142 |
#define UMA_MONO_TEXT_END 0xB7FFF |
143 |
#define UMA_COLOR_TEXT_BEGIN 0xB8000 /* color text */ |
144 |
#define UMA_COLOR_TEXT_END 0xBFFFF |
145 |
|
146 |
/* o The next 128K (the memory range C0000-DFFFF) is reserved for the adapter
|
147 |
* BIOS that resides in the ROM on some adapter boards. Most VGA-compatible
|
148 |
* video adapters use the first 32 KB of this area for their on-board BIOS.
|
149 |
* The rest can be used by any other adapters. The IDE controller often
|
150 |
* occupies the second 32 KB.
|
151 |
*/
|
152 |
#define UMA_ADAPTER_BIOS_BEGIN 0xC0000 /* adapter BIOS */ |
153 |
#define UMA_ADAPTER_BIOS_END 0xDFFFF |
154 |
#define UMA_VIDEO_BIOS_BEGIN 0xC0000 /* video adapter */ |
155 |
#define UMA_VIDEO_BIOS_END 0xC7FFF |
156 |
#define UMA_IDE_HD_BIOS_BEGIN 0xC8000 /* IDE hard disk */ |
157 |
#define UMA_IDE_HD_BIOS_END 0xCBFFF |
158 |
|
159 |
/* o The last 128K of the upper memory area (E0000-FFFFF) is reserved for
|
160 |
* motherboard BIOS (Basic I/O System). The POST (Power-On Self Test) and
|
161 |
* bootstrap loader also reside in this space. The memory falls apart in
|
162 |
* two areas: Plug & Play BIOS data and the system BIOS data.
|
163 |
*/
|
164 |
#define UMA_MB_BIOS_BEGIN 0xE0000 /* motherboard BIOS */ |
165 |
#define UMA_MB_BIOS_END 0xFFFFF |
166 |
#define UMA_PNP_ESCD_BIOS_BEGIN 0xE0000 /* PnP extended data */ |
167 |
#define UMA_PNP_ESCD_BIOS_END 0xEFFFF |
168 |
#define UMA_SYSTEM_BIOS_BEGIN 0xF0000 /* system BIOS */ |
169 |
#define UMA_SYSTEM_BIOS_END 0xFFFFF |
170 |
|
171 |
|