You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
529 lines
10 KiB
529 lines
10 KiB
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<HTML
|
|
><HEAD
|
|
><TITLE
|
|
>Sound Blaster 16 Emulation</TITLE
|
|
><META
|
|
NAME="GENERATOR"
|
|
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
|
|
REL="HOME"
|
|
TITLE="Bochs User Manual"
|
|
HREF="index.html"><LINK
|
|
REL="UP"
|
|
TITLE="Setup"
|
|
HREF="setup.html"><LINK
|
|
REL="PREVIOUS"
|
|
TITLE="bochsrc"
|
|
HREF="bochsrc.html"><LINK
|
|
REL="NEXT"
|
|
TITLE="How to write your own keymap table"
|
|
HREF="keymap.html"></HEAD
|
|
><BODY
|
|
CLASS="SECTION"
|
|
BGCOLOR="#FFFFFF"
|
|
TEXT="#000000"
|
|
LINK="#0000FF"
|
|
VLINK="#840084"
|
|
ALINK="#0000FF"
|
|
><DIV
|
|
CLASS="NAVHEADER"
|
|
><TABLE
|
|
SUMMARY="Header navigation table"
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TH
|
|
COLSPAN="3"
|
|
ALIGN="center"
|
|
>Bochs User Manual</TH
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="10%"
|
|
ALIGN="left"
|
|
VALIGN="bottom"
|
|
><A
|
|
HREF="bochsrc.html"
|
|
ACCESSKEY="P"
|
|
>Prev</A
|
|
></TD
|
|
><TD
|
|
WIDTH="80%"
|
|
ALIGN="center"
|
|
VALIGN="bottom"
|
|
>Chapter 4. Setup</TD
|
|
><TD
|
|
WIDTH="10%"
|
|
ALIGN="right"
|
|
VALIGN="bottom"
|
|
><A
|
|
HREF="keymap.html"
|
|
ACCESSKEY="N"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"></DIV
|
|
><DIV
|
|
CLASS="SECTION"
|
|
><H1
|
|
CLASS="SECTION"
|
|
><A
|
|
NAME="SB16-EMULATION"
|
|
>4.3. Sound Blaster 16 Emulation</A
|
|
></H1
|
|
><P
|
|
>This section is a detailed description for configuring Sound Blaster 16 from
|
|
source. If you have a binary and all you want to know is what to put in your
|
|
<TT
|
|
CLASS="FILENAME"
|
|
>bochsrc</TT
|
|
> file, see <A
|
|
HREF="bochsrc.html#SB16LINE"
|
|
>sb16 option</A
|
|
>.</P
|
|
><P
|
|
>Sound Blaster 16 (SB16) emulation for Bochs was written and donated by
|
|
Josef Drexler, who has a
|
|
<A
|
|
HREF="http://publish.uwo.ca/~jdrexler/bochs/"
|
|
TARGET="_top"
|
|
>web page</A
|
|
> on the topic.
|
|
The entire set of his SB16 patches have been integrated into
|
|
Bochs, however, so you can find everything you need here.</P
|
|
><P
|
|
>SB16 Emulation has been tested with several soundcards and versions of Linux. Please give
|
|
Josef <A
|
|
HREF="mailto:jdrexler@julian.uwo.ca"
|
|
TARGET="_top"
|
|
>feedback</A
|
|
> on
|
|
whether is does or doesn't work on your combination of software and hardware.</P
|
|
><DIV
|
|
CLASS="SECTION"
|
|
><H2
|
|
CLASS="SECTION"
|
|
><A
|
|
NAME="AEN1942"
|
|
>4.3.1. How well does it work?</A
|
|
></H2
|
|
><P
|
|
>Right now, MPU401 emulation is next to perfect. It supports UART
|
|
and SBMIDI mode, because the SB16's MPU401 ports can't do anything else as well.</P
|
|
><P
|
|
>The digital audio basically works, but the emulation is too slow for fluent
|
|
output unless the application doesn't do much in the background (or the
|
|
foreground, really). The sound tends to looping or crackle on slower
|
|
computer, but the emulation appears to be correct. Even a MOD
|
|
player works, although only for lower sampling speeds.</P
|
|
><P
|
|
>Also, the MIDI data running through the MPU401 ports can be written
|
|
into a SMF, that is the standard midi file. The wave output
|
|
can be written into a VOC file, which has a format defined by
|
|
Creative Labs. This file format can be converted to WAV by
|
|
sox for example.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECTION"
|
|
><H2
|
|
CLASS="SECTION"
|
|
><A
|
|
NAME="AEN1947"
|
|
>4.3.2. Output to a sound card</A
|
|
></H2
|
|
><P
|
|
>Output is supported on Windows, Linux, FreeBSD, MacOS 9 and MacOSX at the moment.</P
|
|
><P
|
|
>On Linux, the output goes to any file or device. If you have a wavetable synthesizer,
|
|
midi can go to <TT
|
|
CLASS="FILENAME"
|
|
>/dev/midi00</TT
|
|
>, otherwise you may need
|
|
a midi interpreter. For example, the midid program from the DosEmu project would work.
|
|
Wave output should go to <TT
|
|
CLASS="FILENAME"
|
|
>/dev/dsp</TT
|
|
>. These devices
|
|
are assumed to be OSS devices, if they're not some of the ioctl's might fail.</P
|
|
><P
|
|
>On Windows, midi and (wave) output go to the midi mapper and the wave mapper,
|
|
respectively. A future version might have selectable output devices.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECTION"
|
|
><H2
|
|
CLASS="SECTION"
|
|
><A
|
|
NAME="AEN1954"
|
|
>4.3.3. Installation on Linux</A
|
|
></H2
|
|
><DIV
|
|
CLASS="SECTION"
|
|
><H3
|
|
CLASS="SECTION"
|
|
><A
|
|
NAME="AEN1956"
|
|
>4.3.3.1. Prerequisites</A
|
|
></H3
|
|
><P
|
|
>A wavetable synthesizer on <TT
|
|
CLASS="FILENAME"
|
|
>/dev/midi00</TT
|
|
>
|
|
and a working <TT
|
|
CLASS="FILENAME"
|
|
>/dev/dsp</TT
|
|
> if you want real
|
|
time music and sound, otherwise output to midi and wave files is also possible.
|
|
Optionally, you can use a software midi interpreter, such as the midid program
|
|
from the DosEmu project instead of <TT
|
|
CLASS="FILENAME"
|
|
>/dev/midi00</TT
|
|
>.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECTION"
|
|
><H3
|
|
CLASS="SECTION"
|
|
><A
|
|
NAME="AEN1962"
|
|
>4.3.3.2. Configuring Bochs</A
|
|
></H3
|
|
><P
|
|
>You need to <B
|
|
CLASS="COMMAND"
|
|
>configure</B
|
|
> Bochs using the <CODE
|
|
CLASS="OPTION"
|
|
>--enable-sb16</CODE
|
|
>
|
|
option.
|
|
There are a few values in <TT
|
|
CLASS="FILENAME"
|
|
>config.h</TT
|
|
> that are relevant to the sound functions.
|
|
Edit <TT
|
|
CLASS="FILENAME"
|
|
>config.h</TT
|
|
> after running configure, but before compiling.</P
|
|
><P
|
|
>BX_USE_SB16_SMF should be 1 unless you intend to have several sound cards
|
|
running at the same time.</P
|
|
><P
|
|
>BX_USE_SOUND_VIRTUAL can be 0 or 1, and determines whether the output class
|
|
uses virtual functions or not. The former is more versatile and allows to
|
|
select the class at runtime (not supported at the moment), while the latter
|
|
is slightly faster.</P
|
|
><P
|
|
>BX_SOUND_OUTPUT_C is the name of the class used for output. The default is
|
|
to have no output functions, so you need to change this if you want any sound.
|
|
The following are supported at the moment:</P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> bx_sound_linux_c for output to /dev/dsp and /dev/midi00 on Linux
|
|
(and maybe other OSes that use the OSS driver)
|
|
bx_sound_windows_c for output to the midi and wave mapper of
|
|
Windows 3.1 and higher.
|
|
bx_sound_output_c for no output at all.</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><P
|
|
>Setup the SB16 emulation in your <TT
|
|
CLASS="FILENAME"
|
|
>bochsrc</TT
|
|
>, according to instructions
|
|
in that file (see <A
|
|
HREF="bochsrc.html#SB16LINE"
|
|
>sb16 option</A
|
|
>).</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECTION"
|
|
><H3
|
|
CLASS="SECTION"
|
|
><A
|
|
NAME="AEN1976"
|
|
>4.3.3.3. Runtime configuration</A
|
|
></H3
|
|
><P
|
|
>The source for the SB16CTRL program that is used to modify
|
|
the runtime behaviour of the SB16 emulation is included in
|
|
<TT
|
|
CLASS="FILENAME"
|
|
>misc/sb16/</TT
|
|
>. It is a C
|
|
program that can be run from inside the emulation.</P
|
|
><P
|
|
>It currently supports the following commands:</P
|
|
><DIV
|
|
CLASS="TABLE"
|
|
><A
|
|
NAME="AEN1981"
|
|
></A
|
|
><P
|
|
><B
|
|
>Table 4-5. Supported options for <B
|
|
CLASS="COMMAND"
|
|
>sb16ctl</B
|
|
></B
|
|
></P
|
|
><TABLE
|
|
BORDER="1"
|
|
CLASS="CALSTABLE"
|
|
><COL><COL><THEAD
|
|
><TR
|
|
><TH
|
|
>Option</TH
|
|
><TH
|
|
>Description</TH
|
|
></TR
|
|
></THEAD
|
|
><TBODY
|
|
><TR
|
|
><TD
|
|
><CODE
|
|
CLASS="OPTION"
|
|
>-i <TT
|
|
CLASS="REPLACEABLE"
|
|
><I
|
|
>number</I
|
|
></TT
|
|
></CODE
|
|
></TD
|
|
><TD
|
|
> Show the selected emulator info string,
|
|
e.g. <B
|
|
CLASS="COMMAND"
|
|
>sb16ctrl -i 3</B
|
|
> to show how many patch translations are active.
|
|
</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
><CODE
|
|
CLASS="OPTION"
|
|
>-t <TT
|
|
CLASS="REPLACEABLE"
|
|
><I
|
|
>six numbers</I
|
|
></TT
|
|
></CODE
|
|
></TD
|
|
><TD
|
|
> Load a translation into the translation table. The numbers are:
|
|
"OldBankMSB,OldBankLSB,OldProgram,NewBankMSB,NewBankLSB,NewProgram".
|
|
All values can be 0..127 or 255. 255 for "Old" values means <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>match
|
|
any</I
|
|
></SPAN
|
|
> and for "New" values means <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>don't change</I
|
|
></SPAN
|
|
>,
|
|
e.g. <B
|
|
CLASS="COMMAND"
|
|
>sb16ctrl -t 255,255,0,255,255,32</B
|
|
>
|
|
to change patch 0 (Piano) to patch 32 (Acoustic Bass).
|
|
</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
><CODE
|
|
CLASS="OPTION"
|
|
>-r</CODE
|
|
></TD
|
|
><TD
|
|
> Reset the patch translation table e.g. <B
|
|
CLASS="COMMAND"
|
|
>sb16ctrl -r</B
|
|
>.
|
|
</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
><CODE
|
|
CLASS="OPTION"
|
|
>-m <TT
|
|
CLASS="REPLACEABLE"
|
|
><I
|
|
>some numbers</I
|
|
></TT
|
|
></CODE
|
|
></TD
|
|
><TD
|
|
> Upload the given numbers to the midi output device. Note
|
|
that it should be a complete midi message, and also that it is
|
|
subject to patch translation,
|
|
e.g. <B
|
|
CLASS="COMMAND"
|
|
>sb16ctrl -m 0x80,64,0</B
|
|
>
|
|
to send a note-off message to channel 0.
|
|
</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
><CODE
|
|
CLASS="OPTION"
|
|
>-f <TT
|
|
CLASS="REPLACEABLE"
|
|
><I
|
|
>filename</I
|
|
></TT
|
|
></CODE
|
|
></TD
|
|
><TD
|
|
> Read in a file and execute the commands in it. These have
|
|
the same format as the above commands, except that they don't have
|
|
the dash "-" in front of them.
|
|
Comment lines are supported and start with a hash sign "#".
|
|
</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
><CODE
|
|
CLASS="OPTION"
|
|
>-h</CODE
|
|
></TD
|
|
><TD
|
|
> Show a brief summary of the commands.
|
|
</TD
|
|
></TR
|
|
></TBODY
|
|
></TABLE
|
|
></DIV
|
|
><P
|
|
>All numbers can be valid parameters to the <CODE
|
|
CLASS="FUNCTION"
|
|
>strtol()</CODE
|
|
> function, so hex and
|
|
octal notation is fine. They have to be delimited by either commas "," or
|
|
slashes "/", spaces are not allowed.</P
|
|
><P
|
|
>The command line can have any number of commands. However, if none are given,
|
|
"-f -" is assumed, which means commands are taken from stdin.</P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECTION"
|
|
><H2
|
|
CLASS="SECTION"
|
|
><A
|
|
NAME="AEN2027"
|
|
>4.3.4. Features planned for the future</A
|
|
></H2
|
|
><P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
>Port it to more OS's, but I can't do this myself.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>Finish the OPL3 FM emulation by translating the music to midi data.</P
|
|
></LI
|
|
></UL
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECTION"
|
|
><H2
|
|
CLASS="SECTION"
|
|
><A
|
|
NAME="AEN2034"
|
|
>4.3.5. Description of the sound output classes</A
|
|
></H2
|
|
><P
|
|
>You can find a description of the sound output classes and more details on
|
|
Sound Blaster 16 emulation in the
|
|
<A
|
|
HREF="../development/sb16-emulation-basics.html"
|
|
TARGET="_top"
|
|
>developer documentation</A
|
|
>.</P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="NAVFOOTER"
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"><TABLE
|
|
SUMMARY="Footer navigation table"
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="bochsrc.html"
|
|
ACCESSKEY="P"
|
|
>Prev</A
|
|
></TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="index.html"
|
|
ACCESSKEY="H"
|
|
>Home</A
|
|
></TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="keymap.html"
|
|
ACCESSKEY="N"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
>bochsrc</TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="setup.html"
|
|
ACCESSKEY="U"
|
|
>Up</A
|
|
></TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
>How to write your own keymap table</TD
|
|
></TR
|
|
></TABLE
|
|
></DIV
|
|
></BODY
|
|
></HTML
|
|
>
|