Only in dos: 1
diff -r -u dosemu.bak/Makefile dos/Makefile
--- dosemu.bak/Makefile	Mon Jun 12 12:58:57 1995
+++ dos/Makefile	Wed Jul 19 11:05:33 1995
@@ -181,7 +181,8 @@
 OPTIONALSUBDIRS =examples v-net ipxutils
 endif
 
-LIBSUBDIRS=video dosemu pic dpmi mfs init serial keyboard mouse $(NET) $(IPX) drivers
+LIBSUBDIRS=video dosemu pic dpmi mfs init serial keyboard mouse dma sound \
+	$(NET) $(IPX) drivers
 
 SUBDIRS= include boot \
 	$(CLIENTSSUB) kernel
Only in dos/commands: rawplay.S
Only in dos: dma
Only in dos/doc: #dosemu.texinfo#
diff -r -u dosemu.bak/dosemu/sigsegv.c dos/dosemu/sigsegv.c
--- dosemu.bak/dosemu/sigsegv.c	Mon Jun 12 12:59:08 1995
+++ dos/dosemu/sigsegv.c	Fri Jul  7 14:53:19 1995
@@ -173,6 +173,9 @@
 /* Needed for DIAMOND define */
 #include "vc.h"
 
+#include "sound.h"
+
+#include "dma.h"
 
 /* PORT_DEBUG is to specify whether to record port writes to debug output.
  * 0 means disabled.
@@ -322,6 +325,16 @@
 	break;
       }
 
+    /* Sound I/O */
+    if ((port & SOUND_IO_MASK) == sound_base) {r=sb_read(port & SOUND_IO_MASK2)};
+    /* It seems that we might need 388, but this is write-only, at least in the
+       older chip... */
+
+    /* DMA I/O */
+    if ((port & ~15) == 0) {dma_read(port, byte)};
+    if ((port & ~15) == 0x80) {dma_read(port, byte)};
+    if ((port & ~31) == 0xC0) {dma_read(port, byte)};
+
     /* The diamond bug */
     if (config.chipset == DIAMOND && (port >= 0x23c0) && (port <= 0x23cf)) {
       iopl(3);
@@ -545,6 +558,16 @@
 	return;
       }
     }
+
+    /* Sound I/O */
+    if ((port & SOUND_IO_MASK) == sound_base) {sb_write(port & SOUND_IO_MASK2, byte)};
+    if ((port & ~3) == 388) {fm_write(port & 3, byte)};
+
+    /* DMA I/O */
+    if ((port & ~15) == 0) {dma_write(port, byte)};
+    if ((port & ~15) == 0x80) {dma_write(port, byte)};
+    if ((port & ~31) == 0xC0) {dma_write(port, byte)};
+
     i_printf("outb [0x%x] 0x%02x\n", port, byte);
   }
   lastport = port;
diff -r -u dosemu.bak/emu.c dos/emu.c
--- dosemu.bak/emu.c	Mon Jun 12 12:59:01 1995
+++ dos/emu.c	Sat Jul 15 13:03:46 1995
@@ -488,6 +488,10 @@
      * always invoke vm86() with this call.  all the messy stuff will be
      * in here.
      */
+
+    dma_trans();
+    /* FIXME: is this the optimal place for this??????? */
+
     in_vm86 = 1;
     if (pic_icount||pic_dos_time<pic_sys_time)
 	REG(eflags) |= (VIP);
Only in dos/include: dma.h
Only in dos/include: sound.h
diff -r -u dosemu.bak/init/init.c dos/init/init.c
--- dosemu.bak/init/init.c	Mon Jun 12 12:59:13 1995
+++ dos/init/init.c	Mon Jun 26 18:08:11 1995
@@ -29,6 +29,8 @@
 #endif
 #include "bitops.h"
 #include "pic.h"
+#include "dma.h"
+#include "sound.h"
 
 extern void pkt_check_receive_quick(void);
 
@@ -195,6 +197,9 @@
   pic_seti(PIC_NET, pkt_check_receive_quick, 0);
   pic_unmaski(PIC_NET);
 #endif
+  
+  /* DMA Init */
+  dma_init();
 
   g_printf("Hardware initialized\n");
 }
@@ -473,6 +478,7 @@
   mouse_init();
   printer_init();
   disk_init();
+  sound_init();
 }
 
 /* 
Only in dos: sound
