The Windows DOS shell is just an emulated DOS, but it is so close to the original that I've never, repeat never, had any problem using assembly language or anything else. The only problems I've had are directyl related to hardware - in fact memory access is faster in a DOS box than in pure DOS.
If you don't believe me, fire up your favorite text editor and scroll down in both pure DOS and DOS shell. The DOS shell will run faster. So, in reality, your apps (if you still code apps for DOS) will run much faster in a DOS shell.
Also the DMA problem is directly related to how Windows is managing me messing around directly with the hardware. The DMA chip does not properly reset under a Windows shell so you must reset it 4 times. In pure DOS this is not a problem and its not related to my programming. Some DOS games wont even run in a DOS shell (Crusader and Crusader:No Regret for examples). This is because most DOS32 games load a sound driver into memory prior to running. Often times these drivers don't quite act the same in DOS shell as they do in pure DOS. So really your best bet is to code for Windows and not DOS. Personally, I despise Windows programming and about all I can take is enough to do DirectX and Direct3D.
Programming games and apps in DOS was usually very low-level and hardware specific so attempting to do this today on hardware designed to run under Windows is quite a daunting task. Best bet is to move to the Windows platform and come join the dark side :)
To quote Andre Lamothe - "...the dark side always seems to have the best technology."
Believe it or not you can setup a small Win32 shell in DirectX and basically write your graphics program or game just like you were inside of a DOS32 shell - with a couple of minor differences - but you can gain access to the video memory, or a pointer to it, if need be.
You can do this in DirectX:
But in DirectX it looks more like this:
Same principle. Not to mention that in DirectX page flipping is trivial (not so in DOS) and you can use the hardware blitter easily (DOS takes some special low level interaction witht the hardware for this and is not guranteed to work with every card). Take my advice Sunny and move to Windows and DirectX - you'll never look back - I've made the move to the dark side if you will and trust me, it's really not that bad. I still code in DOS just to tinker around but for serious stuff I use Win32 or DirectX.
So go purchase a book like Tricks of the Windows Game Programming Gurus or something similar and make the move to DirectX - or buy a book on Win32 programming and dive in. Windows is very complex but thankfully it does not require that you know the entire API before you can use it.
If you want some more information, contact me via PM on this board. Just imagines being able to develop programs that had sound, GUI, great graphics, speed, stability, worked on nearly ever Intel/AMD config, and hid most of the low-level stuff from you so that you could concentrate on the task at hand instead of all the nitty gritty stuff.