pan069
Member
- Joined
- Jun 4, 2019
- Messages
- 49
Hi all!
I'm playing around with some digital sound blaster stuff and I have question about DMA addressing. Various texts I have been reading through point out that a DMA transfer can't cross 64k boundries. This makes sense since that is a general limitation of real mode DOS.
However, what I am confused about is wether this applies to a phyiscal 64k page boundry or a logical one. I.e. there are 16 physical page segments, 0x0000 to 0xF000. If I wanted to have a 64k buffer, would that buffer have to start on exactly one of those physical page boundries, or, can I simply allocate a block of memory (e.g. C malloc), find the segment and offset of that pointer. Then from the segment find which phyiscal page the segment exists in and determine the physical offset of my memory block within that page? If that is true, if the physical offset turns out to be near the end of a physical page (e.g page 0x7 with offset 0xEFFF), can the DMA transfer go over that boundry? E.g. crossing from physical page 0x7000 into 0x8000?
Thanks!
I'm playing around with some digital sound blaster stuff and I have question about DMA addressing. Various texts I have been reading through point out that a DMA transfer can't cross 64k boundries. This makes sense since that is a general limitation of real mode DOS.
However, what I am confused about is wether this applies to a phyiscal 64k page boundry or a logical one. I.e. there are 16 physical page segments, 0x0000 to 0xF000. If I wanted to have a 64k buffer, would that buffer have to start on exactly one of those physical page boundries, or, can I simply allocate a block of memory (e.g. C malloc), find the segment and offset of that pointer. Then from the segment find which phyiscal page the segment exists in and determine the physical offset of my memory block within that page? If that is true, if the physical offset turns out to be near the end of a physical page (e.g page 0x7 with offset 0xEFFF), can the DMA transfer go over that boundry? E.g. crossing from physical page 0x7000 into 0x8000?
Thanks!