Hello everyone,
The pre-release of chapter 21 of our OS development series has been released. It can be found here at http://www.brokenthorn.com/Resources/OSDev21.html Sorry, no demo yet. Demo is finished, however we plan on updating the chapter and demo a little more. It should be released tomorrow.
It covers:
*DMA concepts
*DMA hardware
*DMA Ports, Registers, Commands
*DMA programming topics
Please let us know if there are any comments or suggestions.
OSDev Series Chapter 21
Moderator:Moderators
Lead Programmer for BrokenThorn Entertainment, Co.
Website: http://www.brokenthorn.com
Email: webmaster@brokenthorn.com
Website: http://www.brokenthorn.com
Email: webmaster@brokenthorn.com
-
- Posts:63
- Joined:Wed Jul 22, 2009 6:44 am
Re: OSDev Series Chapter 21
Thanks. As you know, I'm checking your website, precisely, every single day!!! (and this is, absolutely, a huge achievement)
One question: Your example codes are incremental projects?
One question: Your example codes are incremental projects?
_____________
Think it, build it, bit by bit...
Think it, build it, bit by bit...
Re: OSDev Series Chapter 21
Hello,
I am glad to hear that you like the site
The series chapters all build off of the previous demos, yes.
I am glad to hear that you like the site

Lead Programmer for BrokenThorn Entertainment, Co.
Website: http://www.brokenthorn.com
Email: webmaster@brokenthorn.com
Website: http://www.brokenthorn.com
Email: webmaster@brokenthorn.com
-
- Posts:22
- Joined:Sat Jul 17, 2010 7:55 am
Re: OSDev Series Chapter 21
I noticed some errors in this chapter:
1. According to http://wiki.osdev.org/DMA, the mask channel function is bugged.
2. The dma_unmask_all function is bugged... address 0x0E corresponds to DMA0, not DMA1.
3. There might be a small performance issue in the dma_set_address and dma_set_count functions, because of writing to the same port consecutively. You should outport something to address 0x80 (usually used as an IO delay port).
1. According to http://wiki.osdev.org/DMA, the mask channel function is bugged.
In the tutorial, you were in fact using the bit mask for the MultiChannel Mask Register (0x0F). The unmask function is however correct.Single Channel Mask Registers 0x0A and 0xD4 (Write):
Bit2: ON/OFF
Bit0-1: Channel
2. The dma_unmask_all function is bugged... address 0x0E corresponds to DMA0, not DMA1.
3. There might be a small performance issue in the dma_set_address and dma_set_count functions, because of writing to the same port consecutively. You should outport something to address 0x80 (usually used as an IO delay port).