Index: uspace/drv/audio/sb16/Makefile
===================================================================
--- uspace/drv/audio/sb16/Makefile	(revision 0687e1bc5c63116cad13f0ff8a18b9a655875a0d)
+++ uspace/drv/audio/sb16/Makefile	(revision 763444e5d45c778213eb31a355aad93a304deced)
@@ -38,4 +38,5 @@
 
 SOURCES = \
+	dsp.c \
 	main.c \
 	mixer.c \
Index: uspace/drv/audio/sb16/dsp.c
===================================================================
--- uspace/drv/audio/sb16/dsp.c	(revision 763444e5d45c778213eb31a355aad93a304deced)
+++ uspace/drv/audio/sb16/dsp.c	(revision 763444e5d45c778213eb31a355aad93a304deced)
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011 Jan Vesely
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/** @addtogroup drvaudiosb16
+ * @{
+ */
+/** @file
+ * @brief DSP helper functions implementation
+ */
+
+#include <libarch/ddi.h>
+#include "dsp.h"
+
+int dsp_play_direct(sb16_regs_t *regs, const uint8_t *data, size_t size,
+    unsigned sampling_rate, unsigned channels, unsigned bit_depth)
+{
+	if (channels != 1 || bit_depth != 8)
+		return EIO;
+	/* In microseconds */
+	const unsigned wait_period = 1000000 / sampling_rate;
+	int ret;
+	while (size--) {
+		ret = dsp_write(regs, DIRECT_8B_OUTPUT);
+		if (ret != EOK)
+			return ret;
+		ret = dsp_write(regs, *data++);
+		if (ret != EOK)
+			return ret;
+		udelay(wait_period);
+	}
+	return EOK;
+}
+
+/**
+ * @}
+ */
Index: uspace/drv/audio/sb16/dsp.h
===================================================================
--- uspace/drv/audio/sb16/dsp.h	(revision 0687e1bc5c63116cad13f0ff8a18b9a655875a0d)
+++ uspace/drv/audio/sb16/dsp.h	(revision 763444e5d45c778213eb31a355aad93a304deced)
@@ -26,10 +26,9 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-
 /** @addtogroup drvaudiosb16
  * @{
  */
 /** @file
- * @brief SB16 main structure combining all functionality
+ * @brief Sound Blaster Digital Sound Processor (DSP) helper functions.
  */
 #ifndef DRV_AUDIO_SB16_DSP_H
@@ -37,6 +36,8 @@
 
 #include <libarch/ddi.h>
+#include <errno.h>
 
 #include "registers.h"
+#include "dsp_commands.h"
 
 #ifndef DSP_PIO_DELAY
@@ -90,4 +91,7 @@
 	pio_write_8(&regs->dsp_reset, 0);
 }
+/*----------------------------------------------------------------------------*/
+int dsp_play_direct(sb16_regs_t *regs, const uint8_t *data, size_t size,
+    unsigned sample_rate, unsigned channels, unsigned bit_depth);
 #endif
 /**
Index: uspace/drv/audio/sb16/dsp_commands.h
===================================================================
--- uspace/drv/audio/sb16/dsp_commands.h	(revision 0687e1bc5c63116cad13f0ff8a18b9a655875a0d)
+++ uspace/drv/audio/sb16/dsp_commands.h	(revision 763444e5d45c778213eb31a355aad93a304deced)
@@ -36,5 +36,5 @@
 #define DRV_AUDIO_SB16_DSP_COMMANDS_H
 
-/** See SoundBlaster Series HW programming Guide Chapter 6. */
+/** See Sound Blaster Series HW programming Guide Chapter 6. */
 typedef enum dsp_command {
 	DIRECT_8B_OUTPUT = 0x20, /* Followed by unsigned byte of digital data,
Index: uspace/drv/audio/sb16/sb16.c
===================================================================
--- uspace/drv/audio/sb16/sb16.c	(revision 0687e1bc5c63116cad13f0ff8a18b9a655875a0d)
+++ uspace/drv/audio/sb16/sb16.c	(revision 763444e5d45c778213eb31a355aad93a304deced)
@@ -87,5 +87,5 @@
 	dsp_read(drv->regs, &drv->dsp_version.major);
 	dsp_read(drv->regs, &drv->dsp_version.minor);
-	ddf_log_note("Sound blaster DSP (%x.%x) Initialized.\n",
+	ddf_log_note("Sound blaster DSP (%x.%x) initialized.\n",
 	    drv->dsp_version.major, drv->dsp_version.minor);
 
