libmad library. Ported to MS-DOS/OpenWatcom by Jonathan Campbell. Notes: - The Sound Blaster MP3 player uses the same codebase as the test.exe executable under hw/sndsb, except that some modes have been removed and the code rewritten to decode and play back MP3 data. - If your DOS machine has no sound card, but does have the traditional "PC Speaker", you can use playspkr.exe to play the MP3 through the internal beeper (using the old DPCM trick). However there may be slight audio glitches depending on background processes, interrupts, and disk I/O. Make sure your DOS extender and CPU are fast enough to service interrupts at a high timer tick rate. Playback will also not sound very good if the "PC speaker" is not an actual speaker, such as the piezoelectric ones on laptops. - If you have a Gravis Ultrasound, use the playgus.exe MP3 player. The Sound Blaster version does NOT work with SBOS or MEGA-EM despite my best efforts. - If you have a LPT parallel port, you can use the LPT DAC version, playlpt.exe. Though playback up to 44.1KHz is supported, it may not be possibly depending on whether or not the parallel port delays I/O for compatability reasons, or any other sources of latency. - Experimental: If you have a Covox Sound Master, try playsm.exe. Since I don't actually have a Covox Sound Master, I don't know whether this works on real hardware. TODO LIST: - 16-bit real-mode MP3 decoding. Currently, libmad seems to compile properly only for 32-bit flat protected mode. I got it to "sort of" compile for 16-bit large memory model builds, but it doesn't work properly and it seems to cause memory corruption as well. Specification for 16-bit real mode: Take libmad, valgrind it under Linux to catch all possible problems, then incorporate the validated code into this source tree. That will be the 32-bit build. Then, take the libmad source code, put it under a separate directory (libmad16), modify it to use 14-bit precision and math that favors 16-bit integers (what will fit into real-mode 8086 CPU registers), and incorporate that into /etc/libmad16. Copy over the test programs here and compile them with it, to produce the 16-bit real mode builds. Make the makefile for libmad16 so that it only produces binaries for 16-bit real mode builds. If the differences are minimal enough, you could merge the two source trees into one project that can produce a fast high quality decode for 386+ systems, and a faster (less precise) decoder for systems as low as an 8086.