Welcome to TFM's DSP commands Page.




TFM's Home Page  TFM's Sound Blaster PAGE   


 003h           ASP Status                                          SB16ASP
 004h           DSP Status (Obsolete)                               SB2.0-Pro2
 004h           ASP ???                                             SB16ASP
 005h           ASP ???                                             SB16ASP
 010h           Direct DAC, 8-bit                                   SB
 014h           DMA DAC, 8-bit                                      SB
 016h           DMA DAC, 2-bit ADPCM                                SB
 017h           DMA DAC, 2-bit ADPCM Reference                      SB
 01Ch           Auto-Initialize DMA DAC, 8-bit                      SB2.0
 01Fh           Auto-Initialize DMA DAC, 2-bit ADPCM Reference      SB2.0
 020h           Direct ADC, 8-bit                                   SB
 024h           DMA ADC, 8-bit                                      SB
 028h           Direct ADC, 8-bit (Burst)                           SB-Pro2
 02Ch           Auto-Initialize DMA ADC, 8-bit                      SB2.0
 030h           MIDI Read Poll                                      SB
 031h           MIDI Read Interrupt                                 SB
 032h           MIDI Read Timestamp Poll                            SB???
 033h           MIDI Read Timestamp Interrupt                       SB???
 034h           MIDI Read Poll + Write Poll (UART)                  SB2.0
 035h           MIDI Read Interrupt + Write Poll (UART)             SB2.0???
 037h           MIDI Read Timestamp Interrupt + Write Poll (UART)   SB2.0???
 038h           MIDI Write Poll                                     SB
 040h           Set Time Constant                                   SB
 041h           Set Sample Rate                                     SB16
 045h           Continue Auto-Initialize DMA, 8-bit                 SB16
 047h           Continue Auto-Initialize DMA, 16-bit                SB16
 048h           Set DMA Block Size                                  SB2.0
 074h           DMA DAC, 4-bit ADPCM                                SB
 075h           DMA DAC, 4-bit ADPCM Reference                      SB
 076h           DMA DAC, 2.6-bit ADPCM                              SB
 077h           DMA DAC, 2.6-bit ADPCM Reference                    SB
 07Dh           Auto-Initialize DMA DAC, 4-bit ADPCM Reference      SB2.0
 07Fh           Auto-Initialize DMA DAC, 2.6-bit ADPCM Reference    SB2.0
 080h           Silence DAC                                         SB
 090h           Auto-Initialize DMA DAC, 8-bit (High Speed)         SB2.0-Pro2
 098h           Auto-Initialize DMA ADC, 8-bit (High Speed)         SB2.0-Pro2
 0A0h           Disable Stereo Input Mode                           SBPro Only
 0A8h           Enable Stereo Input Mode                            SBPro Only
 0Bxh/0Cxh      Generic DAC/ADC DMA (16-bit, 8-bit)                 SB16
 0D0h           Halt DMA Operation, 8-bit                           SB
 0D1h           Enable Speaker                                      SB
 0D3h           Disable Speaker                                     SB
 0D4h           Continue DMA Operation, 8-bit                       SB
 0D5h           Halt DMA Operation, 16-bit                          SB16
 0D6h           Continue DMA Operation, 16-bit                      SB16
 0D8h           Speaker Status                                      SB
 0D9h           Exit Auto-Initialize DMA Operation, 16-bit          SB16
 0DAh           Exit Auto-Initialize DMA Operation, 8-bit           SB2.0
 0E0h           DSP Identification                                  SB2.0
 0E1h           DSP Version                                         SB
 0E3h           DSP Copyright                                       SBPro2???
 0E4h           Write Test Register                                 SB2.0
 0E8h           Read Test Register                                  SB2.0
 0F0h           Sine Generator                                      SB
 0F1h           DSP Auxiliary Status (Obsolete)                     SB-Pro2
 0F2h           IRQ Request, 8-bit                                  SB
 0F3h           IRQ Request, 16-bit                                 SB16
 0FBh           DSP Status                                          SB16
 0FCh           DSP Auxiliary Status                                SB16
 0FDh           DSP Command Status                                  SB16

------------------------------------------------------------------------------
 003h       ASP Status                                              SB16ASP
    COMMAND <-STATUS

    ???
------------------------------------------------------------------------------
 004h       DSP Status (Obsolete)                                   SB2.0-Pro2
    COMMAND <-STATUS

    DESCRIPTION
     Retrieves information about pending DSP operations.

    STATUS BYTE
     /===v===v===v===v===v===v===v===\
     I 7 | 6 | 5 | 4 | 3 |[2]| 1 | 0 I
     \=v=^=v=Ï=v=^=v=^=v=^=v=^=v=^=v=/
       |   |   |   |   |   |   |   \--- Speaker Status           (1 = Active)
       |   |   |   |   |   |   \------- Stereo ADC Status        (1 = Active)
       |   |   |   |   |   \----------- Reserved (0)
       |   |   |   |   \--------------- Direct ADC   8-bit Burst (1 = Active)
       |   |   |   \------------------- DMA    DAC   2-bit ADPCM (1 = Active)
       |   |   \----------------------- DMA    DAC 2.6-bit ADPCM (1 = Active)
       |   \--------------------------- DMA    DAC   4-bit ADPCM (1 = Active)
       \------------------------------- DMA    DAC   8-bit       (1 = Active)

    NOTES
     * SoundBlaster 2.0 implements only bit 3 and 7.
     * SoundBlaster Pro models do not support bit 7.

    SEE ALSO
     0F1h   DSP Auxiliary Status (Obsolete)
     -----------------------------------------------------
     0FBh   DSP Status
     0FCh   DSP Auxiliary Status
     0FDh   DSP Command Status
     -----------------------------------------------------
     0D8h   Speaker Status
------------------------------------------------------------------------------
 004h       ASP ???                                                 SB16ASP
    COMMAND->???

    ???
------------------------------------------------------------------------------
 005h       ASP ???                                                 SB16ASP
    COMMAND->DATAHIBYTE->DATALOBYTE

    ???
------------------------------------------------------------------------------
 010h       Direct DAC, 8-bit                                       SB
    COMMAND->SAMPLEBYTE

    DESCRIPTION
     Outputs single sample.

    PROCEDURE
      a) Send Direct DAC, 8-bit command (010h) and sample
      b) Wait for correct timing

    NOTES
     * Direct mode maximum sample rate is 23KHz.

    SEE ALSO
     020h   Direct ADC, 8-bit
------------------------------------------------------------------------------
 014h       DMA DAC, 8-bit                                          SB
    COMMAND->LENGTHLOBYTE->LENGTHHIBYTE

    DESCRIPTION
     Initiates 8-bit DMA transfer.

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Enable Speaker command (0D1h)
      d) Setup DMA controller (mode = 048h + channel)
      e) Perform DMA DAC, 8-bit command (014h)
      f) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      g) Perform Disable Speaker command (0D3h)

    LENGTH = SAMPLES - 1

    NOTES
     * Use command 0Cxh to avoid SoundBlaster 16 quantization errors.

    SEE ALSO
     0D0h   Halt DMA Operation, 8-bit
     0D4h   Continue DMA Operation, 8-bit
     -----------------------------------------------------
     01Ch   Auto-Initialize DMA DAC, 8-bit                     
     090h   Auto-Initialize DMA DAC, 8-bit (High Speed)        
     0Cxh   Generic DAC/ADC DMA, 8-bit
     -----------------------------------------------------
     017h   DMA DAC, 2-bit ADPCM Reference
     075h   DMA DAC, 4-bit ADPCM Reference
     077h   DMA DAC, 2.6-bit ADPCM Reference         
     -----------------------------------------------------
     024h   DMA ADC, 8-bit                                          
------------------------------------------------------------------------------
 016h       DMA DAC, 2-bit ADPCM                                    SB
    COMMAND->LENGTHLOBYTE->LENGTHHIBYTE

    DESCRIPTION
     Initiates 2-bit ADPCM DMA transfer with accumulated reference byte.
    This operation uses 8-bit DMA mode.

    PROCEDURE (after command 017h)
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Enable Speaker command (0D1h)
      d) Setup DMA controller (mode = 048h + channel)
      e) Perform DMA DAC, 2-bit ADPCM command (016h)
      f) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      g) Perform Disable Speaker command (0D3h)

    LENGTH = (SAMPLES-1 + 3)/4

    NOTES
     * Supports up to 11KHz on SoundBlaster 1.x  
     * Ensoniq Soundscape does not support ADPCM.

    SEE ALSO
     0D0h   Halt DMA Operation, 8-bit
     0D4h   Continue DMA Operation, 8-bit
     -----------------------------------------------------
     017h   DMA DAC, 2-bit ADPCM Reference
     -----------------------------------------------------
     074h   DMA DAC, 4-bit ADPCM
     076h   DMA DAC, 2.6-bit ADPCM
------------------------------------------------------------------------------
 017h       DMA DAC, 2-bit ADPCM Reference                          SB
    COMMAND->LENGTHLOBYTE->LENGTHHIBYTE

    DESCRIPTION
     Initiates 2-bit ADPCM DMA transfer with new reference byte.  This
    operation uses 8-bit DMA mode.

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Enable Speaker command (0D1h)
      d) Setup DMA controller (mode = 048h + channel)
      e) Perform DMA DAC, 2-bit ADPCM Reference command (017h)
      f) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      g) Perform Disable Speaker command (0D3h)

    LENGTH = (SAMPLES-1 + 3)/4 + 1

    NOTES
     * Supports up to 11KHz on SoundBlaster 1.x
     * Ensoniq Soundscape does not support ADPCM.

    SEE ALSO
     0D0h   Halt DMA Operation, 8-bit
     0D4h   Continue DMA Operation, 8-bit
     -----------------------------------------------------
     016h   DMA DAC, 2-bit ADPCM
     -----------------------------------------------------
     075h   DMA DAC, 4-bit ADPCM Reference
     077h   DMA DAC, 2.6-bit ADPCM Reference
------------------------------------------------------------------------------
 01Ch       Auto-Initialize DMA DAC, 8-bit                          SB2.0
    COMMAND

    DESCRIPTION
     Initiates auto-initialize 8-bit DMA transfer.

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Set DMA Block Size command (048h)
      d) Perform Enable Speaker command (0D1h)
      e) Setup DMA controller (mode = 058h + channel)
      f) Perform Auto-Initialize DMA DAC, 8-bit command (01Ch)
      g) IRQ: Prepare next half of buffer (not always in handler)
      h) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 0x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      i) Loop to G until complete
      j) Perform Disable Speaker command (0D3h)
      k) Perform Halt DMA Operation, 8-bit command (0D0h - for virtual speaker)
      l) Perform Exit Auto-Initialize DMA Operation, 8-bit command (0DAh)
      m) Perform Halt DMA Operation, 8-bit command (0D0h - for virtual speaker)

    NOTES
     * Supports up to 23KHz (11.5KHz stereo???)
     * Exit auto-initialized mode by programming single-cycle DMA output or
        with Exit Auto-Initialize DMA Operation, 8-bit (0DAh).
     * Use command 0Cxh to avoid SoundBlaster 16 quantization errors.     

    LENGTH = (SAMPLES + 1)/2 - 1

    SEE ALSO
     048h   Set DMA Block Size                       
     -----------------------------------------------------
     0D0h   Halt DMA Operation, 8-bit
     045h   Continue Auto-Initialize DMA Operation, 8-bit
     0DAh   Exit Auto-Initialize DMA Operation, 8-bit       
     -----------------------------------------------------
     090h   Auto-Initialize DMA DAC, 8-bit (High Speed) 
     0Cxh   Generic DAC/ADC DMA, 8-bit               
------------------------------------------------------------------------------
 01Fh       Auto-Initialize DMA DAC, 2-bit ADPCM Reference          SB2.0
    COMMAND

    DESCRIPTION
     Initiates auto-initialize 2-bit ADPCM DMA transfer with reference byte.     

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Set DMA Block Size command (048h)
      d) Perform Enable Speaker command (0D1h)
      e) Setup DMA controller (mode = 058h + channel)
      f) Perform Auto-Initialize DMA DAC, 2-bit ADPCM command (01Fh)
      g) IRQ: Prepare next half of buffer (not always in handler)
      h) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      i) Loop to G until complete
      j) Perform Disable Speaker command (0D3h)
      k) Perform Halt DMA Operation, 8-bit command (0D0h - for virtual speaker)
      l) Perform Exit Auto-Initialize DMA Operation, 8-bit command (0DAh)
      m) Perform Halt DMA Operation, 8-bit command (0D0h - for virtual speaker)

    NOTES
     * Exit auto-initialized mode by programming single-cycle DMA output or
        with Exit Auto-Initialize DMA Operation, 8-bit (0DAh).
     * Ensoniq Soundscape does not support ADPCM.     

    SAMPLEBYTES = (SAMPLES     + 3)/4 + 1
    LENGTH      = (SAMPLEBYTES + 1)/2 - 1

    SEE ALSO 
     048h   Set DMA Block Size                       
     -----------------------------------------------------
     0D0h   Halt DMA Operation, 8-bit
     045h   Continue Auto-Initialize DMA Operation, 8-bit
     0DAh   Exit Auto-Initialize DMA Operation, 8-bit       
     -----------------------------------------------------
     017h   DMA DAC, 2-bit ADPCM Reference                     
     -----------------------------------------------------
     07Dh   Auto-Initialize DMA DAC, 4-bit ADPCM Reference      
     07Fh   Auto-Initialize DMA DAC, 2.6-bit ADPCM Reference    
------------------------------------------------------------------------------
 020h       Direct ADC, 8-bit                                       SB
    COMMAND <-SAMPLEBYTE

    DESCRIPTION
     Inputs single sample.
                                
    PROCEDURE
      a) Send Direct ADC, 8-bit command (020h)
      b) Read sample
      c) Wait for correct timing    

    NOTES
     * Direct mode maximum sample rate is 23KHz.

    SEE ALSO
     010h   Direct DAC, 8-bit                           
------------------------------------------------------------------------------
 024h       DMA ADC, 8-bit                                          SB
    COMMAND->LENGTHLOBYTE->LENGTHHIBYTE

    DESCRIPTION
     Initiates 8-bit DMA transfer (record).

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Enable Speaker command (0D1h)
      d) Setup DMA controller (mode = 044h + channel)
      e) Perform DMA ADC, 8-bit command (024h)
      f) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      g) Perform Disable Speaker command (0D3h)

    LENGTH = SAMPLES - 1

    NOTES
     * SoundBlasters prior to SB16 return the first sample in direct mode.

    SEE ALSO                 
     0D0h   Halt DMA Operation, 8-bit
     0D4h   Continue DMA Operation, 8-bit
     -----------------------------------------------------
     02Ch   Auto-Initialize DMA ADC, 8-bit                    
     098h   Auto-Initialize DMA ADC, 8-bit (High Speed)
     0Cxh   Generic DAC/ADC DMA, 8-bit                  
------------------------------------------------------------------------------
 028h       Direct ADC, 8-bit (Burst)                               SB-Pro2
    COMMAND <-SAMPLEBYTE0...SAMPLEBYTEn

    DESCRIPTION
     ???

    PROCEDURE
     ???

    NOTES
     * Terminate operation with DSP reset.

    SEE ALSO
     020h   Direct ADC, 8-bit
------------------------------------------------------------------------------
 02Ch           Auto-Initialize DMA ADC, 8-bit                      SB2.0
    COMMAND

    DESCRIPTION
     Initiates auto-initialize 8-bit DMA transfer (record).

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Set DMA Block Size command (048h)
      d) Perform Enable Speaker command (0D1h)
      e) Setup DMA controller (mode = 054h + channel)
      f) Perform Auto-Initialize DMA ADC, 8-bit command (02Ch)
      g) IRQ: Prepare next half of buffer (not always in handler)
      h) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      i) Loop to G until complete
      j) Perform Disable Speaker command (0D3h)
      k) Perform Halt DMA Operation, 8-bit command (0D0h - for virtual speaker)
      l) Perform Exit Auto-Initialize DMA Operation, 8-bit command (0DAh)
      m) Perform Halt DMA Operation, 8-bit command (0D0h - for virtual speaker)

    NOTES
     * Supports up to 23KHz (11.5KHz stereo???)
     * Exit auto-initialized mode by programming single-cycle DMA output or
        with Exit Auto-Initialize DMA Operation, 8-bit (0DAh).
     * Use command 0Cxh to avoid SoundBlaster 16 quantization errors.     

    LENGTH = (SAMPLES + 1)/2 - 1

    SEE ALSO
     048h   Set DMA Block Size                       
     -----------------------------------------------------
     0D0h   Halt DMA Operation, 8-bit
     045h   Continue Auto-Initialize DMA Operation, 8-bit
     0DAh   Exit Auto-Initialize DMA Operation, 8-bit       
     -----------------------------------------------------
     098h   Auto-Initialize DMA ADC, 8-bit (High Speed)
     0Cxh   Generic DAC/ADC DMA, 8-bit               
------------------------------------------------------------------------------
 030h       MIDI Read Poll                                          SB
    COMMAND <-MIDICODE

    DESCRIPTION
     Reads MIDI code.

    PROCEDURE
      a) Send MIDI Read Poll command (030h)
      b) Read MIDI code when available

    NOTES
     * SoundBlasters buffer up to 64bytes of MIDI data.

    SEE ALSO
     031h   MIDI Read Interrupt
     -----------------------------------------------------
     032h   MIDI Read Timestamp Poll
     033h   MIDI Read Timestamp Interrupt
     -----------------------------------------------------
     034h   MIDI Read Poll + Write Poll (UART)
     035h   MIDI Read Interrupt + Write Poll (UART)
     037h   MIDI Read Timestamp Interrupt + Write Poll (UART)
     -----------------------------------------------------
     038h   MIDI Write Poll
------------------------------------------------------------------------------
 031h       MIDI Read Interrupt                                     SB
    COMMAND {<-MIDICODE}

    DESCRIPTION
     Generates interrupt when MIDI code is available.

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform MIDI Read Interrupt command (031h)
      c) IRQ: Read MIDI code
      d) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      e) Perform MIDI Read Interrupt command (031h) to terminate

    NOTES
     * SoundBlasters buffer up to 64bytes of MIDI data.

    SEE ALSO
     033h   MIDI Read Timestamp Interrupt
     -----------------------------------------------------
     035h   MIDI Read Interrupt + Write Poll (UART)
     037h   MIDI Read Timestamp Interrupt + Write Poll (UART)
     -----------------------------------------------------
     030h   MIDI Read Poll
-----------------------------------------------------------------------------
 032h       MIDI Read Timestamp Poll                                SB???
    COMMAND <-TIMESTAMPLOBYTE<-TIMESTAMPMIDBYTE<-TIMESTAMPHIBYTE<-MIDICODE

    DESCRIPTION
     Reads MIDI code with timestamp.

    PROCEDURE
      a) Send MIDI Read Timestamp Poll command (032h)
      b) Read timestamp and MIDI code when available

    NOTES
     * Timestamp if 24-bit value containing the time since the last MIDI
        command in milliseconds.
     * SoundBlasters buffer up to 64bytes of MIDI data.

    SEE ALSO
     033h   MIDI Read Timestamp Interrupt
     -----------------------------------------------------
     037h   MIDI Read Timestamp Interrupt + Write Poll (UART)
------------------------------------------------------------------------------
 033h       MIDI Read Timestamp Interrupt                           SB???
    COMMAND {<-TIMESTAMPLOBYTE<-TIMESTAMPMIDBYTE<-TIMESTAMPHIBYTE<-MIDICODE}

    DESCRIPTION
     Generates interrupt when MIDI code is available, includes timestamp.

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform MIDI Read Interrupt with Timestamp command (033h)
      c) IRQ: Read MIDI code with timestamp
      d) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      e) Perform MIDI Read Interrupt with Timestamp command (033h) to terminate

    NOTES
     * Timestamp if 24-bit value containing the time since the last MIDI
        command in milliseconds.
     * SoundBlasters buffer up to 64bytes of MIDI data.

    SEE ALSO
     032h   MIDI Read Timestamp Poll
     -----------------------------------------------------
     037h   MIDI Read Timestamp Interrupt + Write Poll (UART)
------------------------------------------------------------------------------
 034h       MIDI Read Poll + Write Poll (UART)                      SB2.0
    COMMAND [->MIDICODE] [<-MIDICODE]

    DESCRIPTION
     Enables UART mode, where all DSP read/writes are interpreted as MIDI codes.

    PROCEDURE
      a) Send MIDI Read Poll + Write Poll (UART) command (034h)
      b) Send and receive MIDI codes
      c) Reset DSP to terminate

    NOTES
     * Disable UART mode with DSP reset (port 02x06h)
     * Read/write status must still be checked (port 02x0Eh/02x0Ch)
     * SoundBlasters buffer up to 64bytes of MIDI data.

    SEE ALSO
     030h   MIDI Read Poll
     038h   MIDI Write Poll
     -----------------------------------------------------
     035h   MIDI Read Interrupt + Write Poll (UART)
     037h   MIDI Read Timestamp Interrupt + Write Poll (UART)
------------------------------------------------------------------------------
 035h       MIDI Read Interrupt + Write Poll (UART)                 SB2.0???
    COMMAND [->MIDICODE] {<-MIDICODE}

    DESCRIPTION
     Enables UART mode with interrupt, where all DSP writes are interpreted as
      MIDI codes and interrupts are generated when a MIDI code is to be read.

    PROCEDURE
      a) Send MIDI Read Interrupt + Write Poll (UART) command (035h)
      b) Send and receive MIDI codes (see command 031h)
      c) Reset DSP to terminate

    NOTES
     * Disable UART mode with DSP reset (port 02x06h)
     * Write buffer status must still be checked (port 02x0Ch)
     * SoundBlasters buffer up to 64bytes of MIDI data.

    SEE ALSO
     034h   MIDI Read Poll + Write Poll (UART)
     037h   MIDI Read Timestamp Interrupt + Write Poll (UART)
     -----------------------------------------------------
     031h   MIDI Read Interrupt
------------------------------------------------------------------------------
 037h       MIDI Read Timestamp Interrupt + Write Poll (UART)       SB2.0???
    COMMAND [->MIDICODE]
             {<-TIMESTAMPLOBYTE<-TIMESTAMPMIDBYTE<-TIMESTAMPHIBYTE<-MIDICODE}

    DESCRIPTION
     Enables UART mode with interrupt, where all DSP writes are interpreted as
      MIDI codes and interrupts are generated when a timestamped MIDI code is
      to be read.

    PROCEDURE
      a) Send MIDI Read Timestamp Interrupt + Write Poll (UART) command (037h)
      b) Send and receive MIDI codes with timestamps (see command 033h)
      c) Reset DSP to terminate

    NOTES
     * Disable UART mode with DSP reset (port 02x06h)
     * Write buffer status must still be checked (port 02x0Ch)
     * SoundBlasters buffer up to 64bytes of MIDI data.

    SEE ALSO
     034h   MIDI Read Poll + Write Poll (UART)
     035h   MIDI Read Interrupt + Write Poll (UART)
     -----------------------------------------------------
     038h   MIDI Write Poll
------------------------------------------------------------------------------
 038h       MIDI Write Poll                                         SB
    COMMAND->MIDICODE

    DESCRIPTION
     Writes MIDI code.

    PROCEDURE
      a) Send MIDI Write Poll command (038h) and data

    SEE ALSO
     034h   MIDI Read Poll + Write Poll (UART)
     035h   MIDI Read Interrupt + Write Poll (UART)
     037h   MIDI Read Timestamp Interrupt + Write Poll (UART)
     -----------------------------------------------------
     030h   MIDI Read Poll
------------------------------------------------------------------------------
 040h       Set Time Constant                                       SB
    COMMAND->TIMEBYTE

    DESCRIPTION
     Sets sample rate through internal I/O transfer timer.

    FORMULA
     TimeConstant = 256 - (1000000 / (SampleChannels * SampleRate))

    NOTES
     * For non-SoundBlaster Pro cards, always set SampleChannels equal to one.

    SEE ALSO
     041h   Set Sample Rate
------------------------------------------------------------------------------
 041h       Set Sample Rate                                         SB16
    COMMAND->RATEHIBYTE->RATELOBYTE

    DESCRIPTION
     Sets sample rate.

    NOTES
     * Sampling rate precision is truncated to nearest time constant.
     * Sampling rate is programmed independent of stereo or monaural modes.

    SEE ALSO
     040h   Set Time Constant
------------------------------------------------------------------------------
 045h       Continue Auto-Initialize DMA, 8-bit                     SB16
    COMMAND

    DESCRIPTION
     Continues a halted auto-initialized 8-bit DMA operation.

    SEE ALSO
     0DAh   Exit Auto-Initialize DMA Operation, 8-bit
     -----------------------------------------------------
     0Cxh   Generic DAC/ADC, 8-bit
     -----------------------------------------------------
     01Ch   Auto-Initialize DMA DAC,   8-bit
     01Fh   Auto-Initialize DMA DAC,   2-bit ADPCM
     02Ch   Auto-Initialize DMA ADC,   8-bit
     07Dh   Auto-Initialize DMA DAC,   4-bit ADPCM
     07Fh   Auto-Initialize DMA DAC, 2.6-bit ADPCM
     090h   Auto-Initialize DMA DAC,   8-bit (High Speed)
     098h   Auto-Initialize DMA ADC,   8-bit (High Speed)
------------------------------------------------------------------------------
 047h       Continue Auto-Initialize DMA, 16-bit                    SB16
    COMMAND

    DESCRIPTION
     Continues a halted auto-initialized 16-bit DMA operation.

    SEE ALSO
     0D9h   Exit Auto-Initialize DMA, 16-bit
     -----------------------------------------------------
     0Bxh   Generic DAC/ADC, 16-bit
------------------------------------------------------------------------------
 048h       Set DMA Block Size                                      SB2.0
    COMMAND->LENGTHLOBYTE->LENGTHHIBYTE

    DESCRIPTION
     Set DMA transfer size for auto-initialize and high speed modes.

    SAMPLEBYTES =  SAMPLES                    8-bit
                  (SAMPLES-1   + 1)/2 + 1     4-bit ADPCM + Reference
                  (SAMPLES-1   + 2)/3 + 1   2.6-bit ADPCM + Reference
                  (SAMPLES-1   + 3)/4 + 1     2-bit ADPCM + Reference

    LENGTH      =  SAMPLEBYTES        - 1  (Single Cycle)
                  (SAMPLEBYTES + 1)/2 - 1  (Auto-Init   )

    NOTES
     * Length is always equal to the number of bytes to transfer minus one.

    SEE ALSO
     01Ch   Auto-Initialize DMA DAC,   8-bit
     01Fh   Auto-Initialize DMA DAC,   2-bit ADPCM
     02Ch   Auto-Initialize DMA ADC,   8-bit
     07Dh   Auto-Initialize DMA DAC,   4-bit ADPCM
     07Fh   Auto-Initialize DMA DAC, 2.6-bit ADPCM
     090h   Auto-Initialize DMA DAC,   8-bit (High Speed)
     098h   Auto-Initialize DMA ADC,   8-bit (High Speed)
------------------------------------------------------------------------------
 074h       DMA DAC, 4-bit ADPCM                                    SB
    COMMAND->LENGTHLOBYTE->LENGTHHIBYTE

    DESCRIPTION
     Initiates 4-bit ADPCM DMA transfer with accumulated reference byte.
    This operation uses 8-bit DMA mode.

    PROCEDURE (after command 075h)
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Enable Speaker command (0D1h)
      d) Setup DMA controller (mode = 048h + channel)
      e) Perform DMA DAC, 4-bit ADPCM command (074h)
      f) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      g) Perform Disable Speaker command (0D3h)

    LENGTH      = (SAMPLES-1   + 1)/2

    NOTES
     * Supports up to 12KHz on SoundBlaster 1.x  
     * Ensoniq Soundscape does not support ADPCM.
                                                          
    SEE ALSO
     0D0h   Halt DMA Operation, 8-bit
     0D4h   Continue DMA Operation, 8-bit
     -----------------------------------------------------
     074h   DMA DAC, 4-bit ADPCM Reference
     -----------------------------------------------------
     016h   DMA DAC, 2-bit ADPCM
     076h   DMA DAC, 2.6-bit ADPCM
------------------------------------------------------------------------------
 075h       DMA DAC, 4-bit ADPCM Reference                          SB
    COMMAND->LENGTHLOBYTE->LENGTHHIBYTE

    DESCRIPTION
     Initiates 4-bit ADPCM DMA transfer with new reference byte.  This
    operation uses 8-bit DMA mode.

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Enable Speaker command (0D1h)
      d) Setup DMA controller (mode = 048h + channel)
      e) Perform DMA DAC, 4-bit ADPCM Reference command (075h)
      f) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      g) Perform Disable Speaker command (0D3h)

    LENGTH      = (SAMPLES-1   + 1)/2 + 1

    NOTES
     * Supports up to 12KHz on SoundBlaster 1.x  
     * Ensoniq Soundscape does not support ADPCM.

    SEE ALSO
     0D0h   Halt DMA Operation, 8-bit
     0D4h   Continue DMA Operation, 8-bit
     -----------------------------------------------------
     075h   DMA DAC, 4-bit ADPCM
     -----------------------------------------------------
     017h   DMA DAC, 2-bit ADPCM Reference
     077h   DMA DAC, 2.6-bit ADPCM Reference
------------------------------------------------------------------------------
 076h       DMA DAC, 2.6-bit ADPCM                                  SB
    COMMAND->LENGTHLOBYTE->LENGTHHIBYTE

    DESCRIPTION
     Initiates 2.6-bit ADPCM DMA transfer with accumulated reference byte.
    This operation uses 8-bit DMA mode.

    PROCEDURE (after command 077h)
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Enable Speaker command (0D1h)
      d) Setup DMA controller (mode = 048h + channel)
      e) Perform DMA DAC, 2.6-bit ADPCM command (076h)
      f) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      g) Perform Disable Speaker command (0D3h)

    LENGTH      = (SAMPLES-1   + 2)/3

    NOTES
     * Supports up to 13KHz on SoundBlaster 1.x  
     * Ensoniq Soundscape does not support ADPCM.

    SEE ALSO
     0D0h   Halt DMA Operation, 8-bit
     0D4h   Continue DMA Operation, 8-bit
     -----------------------------------------------------
     077h   DMA DAC, 2.6-bit ADPCM Reference
     -----------------------------------------------------
     016h   DMA DAC, 2-bit ADPCM
     074h   DMA DAC, 4-bit ADPCM
------------------------------------------------------------------------------
 077h       DMA DAC, 2.6-bit ADPCM Reference                        SB
    COMMAND->LENGTHLOBYTE->LENGTHHIBYTE

    DESCRIPTION
     Initiates 2.6-bit ADPCM DMA transfer with new reference byte.  This
    operation uses 8-bit DMA mode.

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Enable Speaker command (0D1h)
      d) Setup DMA controller (mode = 048h + channel)
      e) Perform DMA DAC, 2.6-bit ADPCM Reference command (077h)
      f) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      g) Perform Disable Speaker command (0D3h)

    LENGTH      = (SAMPLES-1   + 2)/3 + 1

    NOTES
     * Supports up to 13KHz on SoundBlaster 1.x  
     * Ensoniq Soundscape does not support ADPCM.

    SEE ALSO
     0D0h   Halt DMA Operation, 8-bit
     0D4h   Continue DMA Operation, 8-bit
     -----------------------------------------------------
     076h   DMA DAC, 2.6-bit ADPCM
     -----------------------------------------------------
     017h   DMA DAC, 2-bit ADPCM Reference
     075h   DMA DAC, 4-bit ADPCM Reference
------------------------------------------------------------------------------
 07Dh       Auto-Initialize DMA DAC, 4-bit ADPCM Reference          SB2.0
    COMMAND

    DESCRIPTION
     Initiates auto-initialize 4-bit ADPCM DMA transfer with reference byte.         

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Set DMA Block Size command (048h)
      d) Perform Enable Speaker command (0D1h)
      e) Setup DMA controller (mode = 058h + channel)
      f) Perform Auto-Initialize DMA DAC, 4-bit ADPCM command (07Dh)
      g) IRQ: Prepare next half of buffer (not always in handler)
      h) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      i) Loop to G until complete
      j) Perform Disable Speaker command (0D3h)
      k) Perform Halt DMA Operation, 8-bit command (0D0h - for virtual speaker)
      l) Perform Exit Auto-Initialize DMA Operation, 8-bit command (0DAh)
      m) Perform Halt DMA Operation, 8-bit command (0D0h - for virtual speaker)

    NOTES
     * Exit auto-initialized mode by programming single-cycle DMA output or
        with Exit Auto-Initialize DMA Operation, 8-bit (0DAh).
     * Ensoniq Soundscape does not support ADPCM.

    SAMPLEBYTES = (SAMPLES     + 1)/2 + 1
    LENGTH      = (SAMPLEBYTES + 1)/2 - 1

    SEE ALSO     
     048h   Set DMA Block Size                       
     -----------------------------------------------------
     0D0h   Halt DMA Operation, 8-bit
     045h   Continue Auto-Initialize DMA Operation, 8-bit
     0DAh   Exit Auto-Initialize DMA Operation, 8-bit       
     -----------------------------------------------------
     075h   DMA DAC, 4-bit ADPCM Reference                   
     -----------------------------------------------------
     01Fh   Auto-Initialize DMA DAC, 2-bit ADPCM Reference      
     07Fh   Auto-Initialize DMA DAC, 2.6-bit ADPCM Reference    
------------------------------------------------------------------------------
 07Fh       Auto-Initialize DMA DAC, 2.6-bit ADPCM Reference        SB2.0
    COMMAND

    DESCRIPTION
     Initiates auto-initialize 2.6-bit ADPCM DMA transfer with reference byte.          

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Set DMA Block Size command (048h)
      d) Perform Enable Speaker command (0D1h)
      e) Setup DMA controller (mode = 058h + channel)
      f) Perform Auto-Initialize DMA DAC, 2.6-bit ADPCM command (07Fh)
      g) IRQ: Prepare next half of buffer (not always in handler)
      h) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      i) Loop to G until complete
      j) Perform Disable Speaker command (0D3h)
      k) Perform Halt DMA Operation, 8-bit command (0D0h - for virtual speaker)
      l) Perform Exit Auto-Initialize DMA Operation, 8-bit command (0DAh)
      m) Perform Halt DMA Operation, 8-bit command (0D0h - for virtual speaker)

    NOTES
     * Exit auto-initialized mode by programming single-cycle DMA output or
        with Exit Auto-Initialize DMA Operation, 8-bit (0DAh).
     * Ensoniq Soundscape does not support ADPCM.    

    SAMPLEBYTES = (SAMPLES     + 2)/3 + 1
    LENGTH      = (SAMPLEBYTES + 1)/2 - 1

    SEE ALSO
     048h   Set DMA Block Size                       
     -----------------------------------------------------
     0D0h   Halt DMA Operation, 8-bit
     045h   Continue Auto-Initialize DMA Operation, 8-bit
     0DAh   Exit Auto-Initialize DMA Operation, 8-bit       
     -----------------------------------------------------
     077h   DMA DAC, 2.6-bit ADPCM Reference            
     -----------------------------------------------------
     01Fh   Auto-Initialize DMA DAC, 2-bit ADPCM Reference      
     07Dh   Auto-Initialize DMA DAC, 4-bit ADPCM Reference      
------------------------------------------------------------------------------
 080h       Silence DAC                                             SB
    COMMAND->LENGTHLOBYTE->LENGTHHIBYTE

    DESCRIPTION
     Outputs block of silent samples at current sample rate, and signals
      IRQ when complete.

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Silence DAC command (080h)
      d) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      e) Remove IRQ handler (restore vector, restore PIC mask)

    LENGTH = SAMPLES - 1

    SEE ALSO
     040h   Set Time Constant
------------------------------------------------------------------------------
 090h       Auto-Initialize DMA DAC, 8-bit (High Speed)             SB2.0-Pro2
    COMMAND

    DESCRIPTION
     Initiates 8-bit DMA transfer (>23KHz).

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Set DMA Block Size command (048h)
      d) Perform Enable Speaker command (0D1h)
      e) Setup DMA controller (mode = 058h + channel)
      f) Perform Auto-Initialize DMA DAC, 8-bit (HighSpeed) command (090h)
      g) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      h) Reset DSP (or terminate normally on SB16+)

    NOTES
     * High speed mode ignores DSP commands during transfers (23KHz).

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Perform Set DMA Block Size command (048h)
      d) Perform Enable Speaker command (0D1h)
      e) Setup DMA controller (mode = 054h + channel)
      f) Perform Auto-Initialize DMA ADC, 8-bit (HighSpeed) command (098h)
      g) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)
      h) Reset DSP (or terminate normally on SB16+)

    NOTES
     * High speed mode ignores DSP commands during transfers (MODE->LENGTHLOBYTE->LENGTHHIBYTE

    DESCRIPTION
     Generalized sampling and playback command (includes 16-bit operations).

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform Set Time Constant command (040h), or otherwise set sample rate
      c) Setup DMA controller (mode = mode + channel)
      d) Perform Generic DAC/ADC DMA command (0Bxh/0Cxh)
      e) IRQ: Acknowledge IRQ (input from IRQ Acknowledge port - 02x0Eh/02x0Fh;
                               perform Generic EOI (020h) to appropriate PICs)
      f) Terminate transfer, method dependent on mode

    COMMAND BYTE
     /===v===v===v===v===v===v===v===\
     I(7)|(6)|(5)|(4)| 3 | 2 | 1 |[0]I
     \=v=^=v=^=v=^=v=^=v=^=v=^=v=^=v=/
       |   |   |   |   |   |   |   \--- Reserved (0)
       |   |   |   |   |   |   \------- FIFO Mode (0 = Disable, 1 = Enable)
       |   |   |   |   |   \----------- DMA Mode  (0 = Single, 1 = Auto-Init)
       |   |   |   |   \--------------- Transfer Mode (0 = DAC, 1 = ADC)
       |   |   |   \-----------------¿
       |   |   \---------------------Å- Sampling Resolution
       |   \-------------------------´   1011b = 16-bit, 1100b = 8-bit
       \-----------------------------Ù

    MODE BYTE
     /===v===v===v===v===v===v===v===\
     I[7]|[6]| 5 | 4 |[3]|[2]|[1]|[0]I
     \=v=^=v=^=v=^=v=^=v=^=v=^=v=^=v=/
       |   |   |   |   |   |   |   \-Â- Reserved (0)
       |   |   |   |   |   |   \-----´
       |   |   |   |   |   \---------´
       |   |   |   |   \-------------Ù
       |   |   |   \------------------- Sample Mode (0 = Unsigned, 1 = Signed)
       |   |   \----------------------- Stereo Mode (0 = Monaural, 1 = Stereo)
       |   \-------------------------Â- Reserved (0)
       \-----------------------------Ù

    LENGTH = SAMPLES - 1        (even for 16-bit samples)

    NOTES
     * Enable FIFO mode for high speed mode or large data transfers.
     * BUG: SoundBlaster 16 ADC only accurate to 12-bits.

    SEE ALSO
     0D0h   Halt DMA Operation, 8-bit
     0D4h   Continue DMA Operation, 8-bit
     045h   Continue Auto-Initialize DMA Operation, 8-bit
     0DAh   Exit Auto-Initialize DMA Operation, 8-bit       
     -----------------------------------------------------
     0D5h   Halt DMA Operation, 16-bit
     0D6h   Continue DMA Operation, 16-bit
     047h   Continue Auto-Initialize DMA, 16-bit
     0D9h   Exit Auto-Initialize DMA Operation, 16-bit
     -----------------------------------------------------
     014h   DMA DAC, 8-bit
     024h   DMA ADC, 8-bit
     -----------------------------------------------------
     01Ch   Auto-Initialize DMA DAC, 8-bit
     02Ch   Auto-Initialize DMA ADC, 8-bit
     -----------------------------------------------------
     090h   Auto-Initialize DMA DAC, 8-bit (High Speed)
     098h   Auto-Initialize DMA ADC, 8-bit (High Speed)
------------------------------------------------------------------------------
 0D0h       Halt DMA Operation, 8-bit                               SB
    COMMAND

    DESCRIPTION
     Pauses 8-bit single-cycle DMA operation.

    NOTES
     * Halts every 8-bit DMA mode on SoundBlaster 16.              
     * BUG: Halts 16-bit DMA operation on early SoundBlaster 16s (4.04).     

    SEE ALSO
     0D4h   Continue DMA Operation, 8-bit             
     0DAh   Exit Auto-Initialize DMA Operation, 8-bit 
------------------------------------------------------------------------------
 0D1h       Enable Speaker                                          SB
    COMMAND

    DESCRIPTION
     Enables speaker output.

    NOTES
     * Reset of DSP disables speaker.
     * BUG: Halts pending DMA operations on SoundBlaster 1.x.
     * BUG: Enabled speaker generates sampling noise on SoundBlaster 2.0.
     * BUG: Speaker MUST be disabled before sampling on SoundBlaster Pro.
     * BUG: Speaker state does NOT physically change on SoundBlaster 16.
     * Originator of noisy 'pops' on some models (capacitor discharge).            

    SEE ALSO
     0D3h   Disable Speaker
------------------------------------------------------------------------------
 0D3h       Disable Speaker                                         SB
    COMMAND

    DESCRIPTION
     Disables speaker output.  

    NOTES    
     * Reset of DSP disables speaker.
     * BUG: Halts pending DMA operations on SoundBlaster 1.x.
     * BUG: Enabled speaker generates sampling noise on SoundBlaster 2.0.
     * BUG: Speaker MUST be disabled before sampling on SoundBlaster Pro.
     * BUG: Speaker state does NOT physically change on SoundBlaster 16.
     * Originator of noisy 'pops' on some models (capacitor discharge).            

    SEE ALSO
     0D1h   Enable Speaker
------------------------------------------------------------------------------
 0D4h       Continue DMA Operation, 8-bit                           SB
    COMMAND

    DESCRIPTION
     Continues a halted 8-bit single-cycle DMA operation.

    NOTES
     * Continues every 8-bit DMA mode on SoundBlaster 16.           
     * BUG: Continues 16-bit DMA operation on early SoundBlaster 16 (4.04).     

    SEE ALSO
     0D0h   Halt DMA Operation, 8-bit                 
     0DAh   Exit Auto-Initialize DMA Operation, 8-bit 
------------------------------------------------------------------------------
 0D5h       Halt DMA Operation, 16-bit                              SB16
    COMMAND

    DESCRIPTION
     Pauses any 16-bit DMA operation.                        

    SEE ALSO
     0D6h   Continue DMA Operation, 16-bit                              
     0D9h   Exit Auto-Initialize DMA Operation, 16-bit              
------------------------------------------------------------------------------
 0D6h       Continue DMA Operation, 16-bit                          SB16
    COMMAND

    DESCRIPTION
     Continues any halted 16-bit DMA operation.

    SEE ALSO
     0D5h   Halt DMA Operation, 16-bit
     0D9h   Exit Auto-Initialize DMA Operation, 16-bit              
------------------------------------------------------------------------------
 0D8h       Speaker Status                                          SB
    COMMAND <-STATUS

    DESCRIPTION
     Determines current status of speaker.

    STATUS BYTE
     000h = Disabled
     0FFh = Enabled

    NOTES
     * Reset of DSP disables speaker.

    SEE ALSO
     0D1h   Enable Speaker
     0D3h   Disable Speaker
     -----------------------------------------------------
     004h   DSP Status (Obsolete)
     0F1h   DSP Auxiliary Status (Obsolete)
     -----------------------------------------------------
     0FBh   DSP Status
     0FCh   DSP Auxiliary Status
     0FDh   DSP Command Status
------------------------------------------------------------------------------
 0D9h       Exit Auto-Initialize DMA Operation, 16-bit              SB16
    COMMAND

    DESCRIPTION
     Terminates auto-initialized 16-bit DMA operation after current block.

    PROCEDURE                                  
      a) Perform Disable Speaker command (0D3h)
      b) Perform Halt DMA Operation, 16-bit command (0D5h - virtual speaker)
      c) Perform Exit Auto-Initialize DMA Operation, 16-bit command (0D9h)
      d) Perform Halt DMA Operation, 16-bit command (0D5h - virtual speaker)
             
    NOTES
     * Halt commands are required for immediate termination and to quiet SB16.

    SEE ALSO                                              
     0D5h   Halt DMA Operation, 16-bit
     047h   Continue Auto-Initialize DMA, 16-bit
     -----------------------------------------------------
     0D3h   Disable Speaker
------------------------------------------------------------------------------
 0DAh       Exit Auto-Initialize DMA Operation, 8-bit               SB2.0
    COMMAND

    DESCRIPTION
     Terminates auto-initialized 8-bit DMA operations after current block.

    PROCEDURE                                  
      a) Perform Disable Speaker command (0D3h)
      b) Perform Halt DMA Operation, 8-bit command (0D0h - virtual speaker)
      c) Perform Exit Auto-Initialize DMA Operation, 8-bit command (0DAh)
      d) Perform Halt DMA Operation, 8-bit command (0D0h - virtual speaker)
             
    NOTES
     * Halt commands are required for immediate termination and to quiet SB16.

    SEE ALSO
     0D0h   Halt DMA Operation, 8-bit                 
     045h   Continue Auto-Initialize DMA, 8-bit
     -----------------------------------------------------
     0D3h   Disable Speaker
------------------------------------------------------------------------------
 0E0h       DSP Identification                                      SB2.0
    COMMAND->DATA <-NOT(DATA)

    DESCRIPTION
     Returns bitwise NOT of data byte.

    NOTES
     * Results reliable only after DSP reset on early models.

    SEE ALSO
     0E1h   DSP Version
     0E3h   DSP Copyright
------------------------------------------------------------------------------
 0E1h       DSP Version                                             SB
    COMMAND <-MAJORVERSIONBYTE<-MINORVERSIONBYTE

    DESCRIPTION
     Determines DSP major and minor version.

    MODEL                      VERSION
     SoundBlaster 1.0           1.??  (1.05???)
     SoundBlaster 1.5           1.??  (1.05???)
     SoundBlaster 2.0           2.xx  (2.01)
     SoundBlaster Pro           3.00  (???)
     SoundBlaster Pro 2         3.01+ (3.01, 3.02)
     SoundBlaster 16            4.0x  (4.04, 4.05)
     SoundBlaster 16 SCSI-2     4.11  (4.11)
     SoundBlaster AWE32         4.12+ (4.12)

    NOTES
     * Ensure that no other card is mapped at the same port address by
         performing this command twice, checking for a consistent result.
     * BUG: Some SB1.x clones errantly return version 2.00.
     * BUG: Some SB16 SCSI-2s experience daughterboard communication errors.

    SEE ALSO
     0E0h   DSP Identification
     0E3h   DSP Copyright
------------------------------------------------------------------------------
 0E3h       DSP Copyright                                           SBPro2???
    COMMAND <-ASCII0...ASCIIn<-000h

    DESCRIPTION
     Reads DSP copyright string.

    PROCEDURE
      a) Send DSP Copyright command byte (0E3h)
      b) Read string byte
      c) Loop to B while string byte is not zero

    SEE ALSO
     0E0h   DSP Identification
     0E1h   DSP Version
------------------------------------------------------------------------------
 0E4h       Write Test Register                                     SB2.0
    COMMAND->TESTBYTE

    DESCRIPTION
     Writes diagnostic register.

    NOTES
     * DSP reset does not clear the test register.

    SEE ALSO
     0E8h   Read Test Register
------------------------------------------------------------------------------
 0E8h       Read Test Register                                      SB2.0
    COMMAND <-TESTBYTE

    DESCRIPTION
     Reads diagnostic register.

    NOTES
     * DSP reset does not clear the test register.

    SEE ALSO
     0E4h   Write Test Register
------------------------------------------------------------------------------
 0F0h       Sine Generator                                          SB
    COMMAND

    DESCRIPTION
     Diagnostic peak-to-peak sine wave generator.

    NOTES
     * Disable sound with DSP reset.
     * Sinusodal frequency is about 2KHz.
     * Sets time constant to approximately 0C0h (15625Hz).
     * Enables speaker on models prior to SoundBlaster 16.
------------------------------------------------------------------------------
 0F1h       DSP Auxiliary Status (Obsolete)                         SB-Pro2
    COMMAND <-STATUS

    DESCRIPTION
     Retrieves auxiliary information about pending DSP operations.

    STATUS BYTE
     /===v===v===v===v===v===v===v===\
     I 7 | 6 | 5 | 4 | 3 | 2 |[1]| 0 I
     \=v=^=v=^=v=^=v=^=v=^=v=^=v=^=v=/
       |   |   |   |   |   |   |   \--- Speaker Status  (0 = Enabled)
       |   |   |   |   |   |   \------- Reserved (1)
       |   |   |   |   |   \----------- DSPC 0ACh ???
       |   |   |   |   \--------------- Stereo Input Mode (1 = Stereo)
       |   |   |   \------------------- Reserved (1)
       |   |   \----------------------- DSPC 020h-02Fh (SB1.x) ???
       |   \--------------------------- DSPC 02Dh-02Fh (SB1.x) ???
       \------------------------------- ???

    NOTES
     * SoundBlaster Pro introduces bit 3.

    SEE ALSO
     004h   DSP Status (Obsolete)
     -----------------------------------------------------
     0FBh   DSP Status
     0FCh   DSP Auxiliary Status
     0FDh   DSP Command Status
     -----------------------------------------------------
     0D8h   Speaker Status    
------------------------------------------------------------------------------
 0F2h       IRQ Request, 8-bit                                      SB
    COMMAND

    DESCRIPTION
     Triggers 8-bit interrupt.

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform IRQ Request, 8-bit command (0F2h)
      c) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 8-bit port - 02x0Eh;
                               perform Generic EOI (020h) to appropriate PICs)

    SEE ALSO
     0F3h   Interrupt Request, 16-bit
------------------------------------------------------------------------------
 0F3h       IRQ Request, 16-bit                                     SB16
    COMMAND

    DESCRIPTION
     Triggers 16-bit interrupt.

    PROCEDURE
      a) Install IRQ handler (hook vector, update PIC mask)
      b) Perform IRQ Request, 16-bit command (0F3h)
      c) IRQ: Acknowledge IRQ (input from IRQ Acknowledge, 16-bit port - 02x0Fh;
                               perform Generic EOI (020h) to appropriate PICs)

    SEE ALSO
     0F2h   Interrupt Request, 8-bit
------------------------------------------------------------------------------
 0FBh       DSP Status                                              SB16
    COMMAND <-STATUS

    DESCRIPTION
     Retrieves information about pending DSP operations.

    STATUS BYTE
     /===v===v===v===v===v===v===v===\
     I 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 I
     \=v=^=v=^=v=^=v=^=v=^=v=^=v=^=v=/
       |   |   |   |   |   |   |   \--- DMA DAC, 8-bit  (1 = Active)
       |   |   |   |   |   |   \------- DMA ADC, 8-bit  (1 = Active)
       |   |   |   |   |   \----------- DMA DAC, 16-bit (1 = Active)
       |   |   |   |   \--------------- DMA ADC, 16-bit (1 = Active)
       |   |   |   \------------------- Virtual Speaker (1 = Active)
       |   |   \----------------------- ???
       |   \--------------------------- DSPC 04Fh ???
       \------------------------------- Time Constant   (1 = Modified)

    NOTES
     * Time Constant bit will not be set if too large a time constant was
        programmed (low sample rate).
     * MediaVision 3D-series cards use this command for DMA and IRQ selection.

    SEE ALSO
     0FCh   DSP Auxiliary Status
     0FDh   DSP Command Status
     -----------------------------------------------------
     004h   DSP Status (Obsolete)
     0F1h   DSP Auxiliary Status (Obsolete)
     -----------------------------------------------------
     0D8h   Speaker Status     
------------------------------------------------------------------------------
 0FCh       DSP Auxiliary Status                                    SB16
    COMMAND <-STATUS

    DESCRIPTION
     Retrieves auxiliary information about pending DMA operations.

    STATUS BYTE
     /===v===v===v===v===v===v===v===\
     I 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 I
     \=v=^=v=^=v=^=v=^=v=^=v=^=v=^=v=/
       |   |   |   |   |   |   |   \--- ???
       |   |   |   |   |   |   \------- DAC/ADC DMA           (1 = Synchronous)
       |   |   |   |   |   \----------- Auto-Init DMA, 8-bit  (1 = Active)
       |   |   |   |   \--------------- ???
       |   |   |   \------------------- Auto-Init DMA, 16-bit (1 = Active)
       |   |   \----------------------- ???
       |   \--------------------------- ???
       \------------------------------- ???

    SEE ALSO
     0FBh   DSP Status
     0FDh   DSP Command Status
     -----------------------------------------------------
     004h   DSP Status (Obsolete)
     0F1h   DSP Auxiliary Status (Obsolete)
     -----------------------------------------------------
     0D8h   Speaker Status    
------------------------------------------------------------------------------
 0FDh       DSP Command Status                                      SB16
    COMMAND <-COMMANDSTATUS

    DESCRIPTION
     Retrieves most recently successful DSP command.

    NOTES
     * Reseting the DSP clears this variable.
     * Command does not support all valid DSP commands, but most.
     * MediaVision 3D-series cards use this command for DMA and IRQ detection.

    SEE ALSO
     0FBh   DSP Status
     0FCh   DSP Auxiliary Status
     -----------------------------------------------------
     004h   DSP Status (Obsolete)
     0F1h   DSP Auxiliary Status (Obsolete)
     -----------------------------------------------------
     0D8h   Speaker Status