source: branches/minix3-book/include/ibm/memory.h@ 9

Last change on this file since 9 was 4, checked in by Mattia Monga, 14 years ago

Importazione sorgenti libro

File size: 8.7 KB
Line 
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
Note: See TracBrowser for help on using the repository browser.