Well, there's a couple ways you can go about this, and it's important to figure out right from the start if you want to work within the 640K limit, or go for something that uses more.
Working under the 640K limit, you're probably going to end up doing much of the hard work yourself, such as programming graphics, sound and input I/O, but resources on doing this aren't too difficult to find. Just type "DOS programming" into Google or any other search engine and you'll get a whole bunch of stuff. (Though anything that covers "batch files" won't be what you're looking for.) Making stuff that fits within the 640K limit isn't too tricky, but you'll be very limited in terms of how many graphics and sounds you can load up in one moment, not to mention if you have game maps, the size of each map can't be too large.
The other option is to use a modern SDK, such as the Allegro Game Programming Libraries, which work in DOS and can be utilized with free programming utilities such as DJGPP, which is a C/C++ compiler. This will do all the memory handling, graphics handling, I/O, etc., so that you don't have to, since writing these aspects from scratch and making sure they work properly can be time consuming. The downside to this approach is that Allegro is only designed to utilize 256 colour graphics modes, so you won't really be able to make an authentic CGA or EGA game with it. I mean, you could bypass the graphics handling and write your own routines, but then Allegro still compiles to protected-mode, and I don't think there's a single CGA or EGA game out there that is.
As for the language to use, C/C++ is your best bet. DOS programs can be written with only a handful of lines in C/C++. Turbo Pascal is OK... but the TP7 libraries have some issues running on fast systems due to an overflow error for timing stuff. Tyrian is also one of the few games to utilize a 16-bit DOS extender so it's not really the best example for learning DOS programming because its code will be very different from normal.
One benefit if you go with Allegro is you can join the Allegro.cc programming forums which are very active and the people there can help you get yourself going with Allegro itself. There's also a wrapper for Allegro to make it work with Pascal, but I know very little about it so I don't know if it will be useful for what you're doing.
--- Kris Asick (Gemini)
--- Pixelmusement Website: www.pixelships.com
--- Ancient DOS Games Webshow: www.pixelships.com/adg