[9] | 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 |
|
---|