Memory hole at 15/16MB
Memory hole at 15/16MB
I know it exists because of the bios setting. I also found it in a text.
But what exactly is it? What is located there? Since bios can actualy enable and disable it, how to detect it?
Przemek Grzywacz
thanks for help.
But what exactly is it? What is located there? Since bios can actualy enable and disable it, how to detect it?
Przemek Grzywacz
thanks for help.
RE:Memory hole at 15/16MB
In my BIOS its labelled as something to do with something called OS2.
Dont know what that means.
The bios int routines should take into account that hole.
DangerMoose
Dont know what that means.
The bios int routines should take into account that hole.
DangerMoose
RE:Memory hole at 15/16MB
Many 16-bit video boards support a 1 MB linear framebuffer. Because of it's size, the framebuffer must be at or above 1 MB. Because the 16-bit ISA bus has only 24 address lines, the framebuffer must be below 16 MB.
The BIOS setting to leave a hole at 15 MB disables system RAM in this address range, preventing contention (conflict) between system RAM and video RAM.
In some cases, the video chip supports a linear framebuffer but the board does not, e.g. Cirrus Logic 5422 video board -- see http://groups.google.com/groups?hl=en&t ... s1.unl.edu
I don't know if any mainstream software actually used this feature.
The BIOS setting to leave a hole at 15 MB disables system RAM in this address range, preventing contention (conflict) between system RAM and video RAM.
In some cases, the video chip supports a linear framebuffer but the board does not, e.g. Cirrus Logic 5422 video board -- see http://groups.google.com/groups?hl=en&t ... s1.unl.edu
I don't know if any mainstream software actually used this feature.
RE:Memory hole at 15/16MB
This is my memory size testing routine:
[code]
get_pmemory_size:
cli
mov edx, (x200000); sets the memory test start at 2MB
mov esi, edx; sets the pointer
.access_loop:
mov eax, [esi]; backup original value
mov [esi], 1; sets a check value (1)
mov ebx, [esi]; gets the value from the same location
cmp ebx, 1; compare it
jne .finish; it is not equal so mem is finished
mov [esi], eax; restore original value
add esi, MEMORY_PAGE_SIZE; increment it's value
.finish:
mov eax, esi; saves the result
mov [__total_pysical_memory], eax
%ifdef CONF_K_CORE_DEBUG
;; if core debuging, we will save the memory size in debug segment
mov ax, ds; backup the ds descriptor
mov cx, ax
mov edx, [__total_pysical_memory]; get the memory size
mov ax, DSK_K_DEBUG; sets the new descriptor
mov ds, ax
mov [ds:K_DEBUG_MEMORY_SIZE], edx; write the size
mov ax, cx; restore the DS descriptor
mov ds, ax
%endif
.exit:
sti
retn
[/code]
Do you have a simple idea how to add that hole support?
So DMA does not use real momory ? It leaves a hole?
So for example, when I have 10MB of DMA, and 16RAM, I will actualy access the first 26MB of mem instead of 16MB.
Also, does bochs support that memory hole?
[code]
get_pmemory_size:
cli
mov edx, (x200000); sets the memory test start at 2MB
mov esi, edx; sets the pointer
.access_loop:
mov eax, [esi]; backup original value
mov [esi], 1; sets a check value (1)
mov ebx, [esi]; gets the value from the same location
cmp ebx, 1; compare it
jne .finish; it is not equal so mem is finished
mov [esi], eax; restore original value
add esi, MEMORY_PAGE_SIZE; increment it's value
.finish:
mov eax, esi; saves the result
mov [__total_pysical_memory], eax
%ifdef CONF_K_CORE_DEBUG
;; if core debuging, we will save the memory size in debug segment
mov ax, ds; backup the ds descriptor
mov cx, ax
mov edx, [__total_pysical_memory]; get the memory size
mov ax, DSK_K_DEBUG; sets the new descriptor
mov ds, ax
mov [ds:K_DEBUG_MEMORY_SIZE], edx; write the size
mov ax, cx; restore the DS descriptor
mov ds, ax
%endif
.exit:
sti
retn
[/code]
Do you have a simple idea how to add that hole support?
So DMA does not use real momory ? It leaves a hole?
So for example, when I have 10MB of DMA, and 16RAM, I will actualy access the first 26MB of mem instead of 16MB.
Also, does bochs support that memory hole?
RE:Memory hole at 15/16MB
I've read that probing for memory by writing to it and reading it back is a bad idea precisely because of the possible presence of this or perhaps even other holes between the 1MB and 16MB marks. It's better to use the new BIOS routines (there are three of them) for detecting memory beyond 1MB.
See: http://www.uruk.org/orig-grub/mem64mb.html
See: http://www.uruk.org/orig-grub/mem64mb.html
RE:Memory hole at 15/16MB
Yes, but my notebook have 128MB and the other PC have 256MB, so the bios method is not realy a good idea for me.
RE:Memory hole at 15/16MB
Sorry, I don't understand. Why would your memory size be a problem? I've always used GRUB's memory map, and it uses the BIOS method. I've always assumed it was just as accurate regardless of the memory size. And the web-site Karig pointed you to doesn't seem to indicate any problem with 128 - 256 MB of RAM (unless I missed that part). In fact, it indicates that it should be able to detect anything up to 4GB or ALL memory depending on which method you use.
RE:Memory hole at 15/16MB
Same here.
I use the grub memory map and i can resize my ram in vmware, grub always picks up the change and thus, so does my os. And since grub will get its details from the bios int routines.
You do realise there are more than 1 bios ints that gets the memory state. You have to probe them in order to find the most appropriate one that works for your bios and gives you accurate details.
Moose.
I use the grub memory map and i can resize my ram in vmware, grub always picks up the change and thus, so does my os. And since grub will get its details from the bios int routines.
You do realise there are more than 1 bios ints that gets the memory state. You have to probe them in order to find the most appropriate one that works for your bios and gives you accurate details.
Moose.
RE:Memory hole at 15/16MB
I admint, i was wrong. Checked my bios and the os2 thing was for a different memory option. .
Moose.
Moose.
RE:Memory hole at 15/16MB
As I know BIOS have it's limits aboud memory detections. It's maybe I don't know them all.
Anyway you all talk about GRUB, I don't use it, so I don't have GRUB's memory map. We are writing everything ourselfs.
Anyway you all talk about GRUB, I don't use it, so I don't have GRUB's memory map. We are writing everything ourselfs.