File:  [NeXTSTEP 3.3 examples] / Examples / DriverKit / SoundBlaster8 / SoundBlaster8_reloc.tproj / SoundBlaster8Registers.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:49:02 2018 UTC (8 years, 1 month ago) by root
Branches: NeXT, MAIN
CVS tags: NeXTSTEP33, HEAD
Sample Programs from NeXSTEP 3.3

/*
 * Copyright (c) 1994 NeXT Computer, Inc.  All rights reserved. 
 *
 * HISTORY
 * 4-Mar-94    Rakesh Dubey at NeXT
 *      Created. 
 */

/*
 * The default base address is 0x220. Adresses depend upon the flavor of
 * sound card and are not software selectable. 
 */

/* 
 *  SB 1.5 and earlier : 16 bytes at 0x210 to 0x260
 *  SB 2.0 : 16 bytes at 0x220 and 0x240
 *  SB Pro : 24 bytes at 0x220 and 0x240
 */
#define SB_BASE_ADDRESS_1                       0x0210
#define SB_BASE_ADDRESS_2                       0x0220
#define SB_BASE_ADDRESS_3                       0x0230
#define SB_BASE_ADDRESS_4                       0x0240
#define SB_BASE_ADDRESS_5                       0x0250
#define SB_BASE_ADDRESS_6                       0x0260

/*
 * DSP register offsets. 
 */
#define SB_DSP_RESET_OFFSET                     0x06    /* write only */
#define SB_DSP_READ_DATA_OFFSET                 0x0a    /* read only */
#define SB_DSP_WRITE_DATA_OR_COMMAND_OFFSET     0x0c    /* write */


/*
 * These two indicate whether the DSP is busy and whether the result is
 * available from DSP (if any). Success is indicated by bit 7 of the
 * appropriate register getting set and reset respectively.
 */
#define SB_DSP_WRITE_BUFFER_STATUS_OFFSET       0x0c    /* read */
#define SB_DSP_DATA_AVAILABLE_STATUS_OFFSET     0x0e    /* read only */

/*
 * DSP Command list. SB SDK advises to wait for 3.3us after an address write
 * and 23us after a data write. 
 */

#define SB_ADDRESS_WRITE_DELAY                  10
#define SB_DATA_WRITE_DELAY                     25
#define SB_DATA_READ_DELAY              	10

/* 
 * Set the sampling rate. There are many limitations depending upon the
 * flavor of card and transfer mode. 
 */
#define DC_SET_TIME_CONSTANT                   0x40

/*
 * Speaker control. Speaker must be off while doing input. 
 */
#define DC_TURN_ON_SPEAKER                      0xd1
#define DC_TURN_OFF_SPEAKER                     0xd3
#define DC_GET_SPEAKER_STATUS                   0xd8

/*
 * Request low speed DMA transfer. 
 */
#define DC_START_LS_DMA_DAC_8                   0x14
#define DC_START_LS_DMA_ADC_8                   0x24

/*
 * Request high speed DMA transfer. 
 */
#define DC_SET_BLOCK_SIZE                       0x48

#define DC_START_HS_DMA_DAC_8                   0x91
#define DC_START_HS_DMA_ADC_8                   0x99

/*
 * DSP side other DMA control commands. 
 */
#define DC_HALT_DMA                             0xd0

/*
 * Not used. 
 */
#define DC_CONTINUE_DMA                         0xd4
#define DC_SEND_SILENCE                         0x80
#define DC_PIO_ADC_8                            0x20	/* Programmed I/O */
#define DC_PIO_DAC_8                            0x10

/*
 * Other transfer modes for output. Currently unsupported.
 */
#define DC_START_LS_DMA_DAC_2                   0x16
#define DC_START_LS_DMA_DAC_2_6                 0x76
#define DC_START_LS_DMA_DAC_4                   0x74

/*
 * Other miscelleaneous DSP Coomands. 
 */
#define DC_GET_VERSION                          0xe1
#define DC_INVERT_BYTE                          0xe0

/*
 * Record mode control (available only for SBPro) 
 */
#define DC_RECORD_IN_MONO                       0xa0
#define DC_RECORD_IN_STEREO                     0xa8

/*
 * Note: Mixer is available in SB Pro model only. 
 */

/*
 * Mixer register offsets. 
 */
#define SB_MIXER_ADDRESS_OFFSET                 0x04
#define SB_MIXER_DATA_OFFSET                    0x05

/*
 * Mixer Commands for setting volume. 
 */
#define MC_MASTER_VOLUME                        0x22
#define MC_FM_VOLUME                            0x26
#define MC_CD_VOLUME                            0x28
#define MC_LINE_VOLUME                          0x2e
#define MC_VOC_VOLUME                           0x04
#define MC_MICROPHONE_VOLUME                    0x0a

/*
 * Other mixer commands for selecting input output type. 
 */
#define MC_RECORD_CONTROL                       0x0c
#define MC_PLAYBACK_CONTROL                     0x0e

/*
 * Actually you have only half as many settings. 
 */
#define MAX_INPUT_GAIN_LINE                     0x0f
#define MAX_INPUT_GAIN_MICROPHONE               0x07

#define MAX_MASTER_OUTPUT_VOLUME                0x0f
#define MAX_FM_OUTPUT_VOLUME                    0x0f
#define MAX_LINE_OUTPUT_VOLUME                  0x0f
#define MAX_CD_OUTPUT_VOLUME                    0x0f

#define MUTE_OUTPUT                             1
#define UNMUTE_OUTPUT                           0

#define PLAYBACK_ENABLE                         1
#define PLAYBACK_DISABLE                        0
#define CAPTURE_ENABLE                          1
#define CAPTURE_DISABLE                         0

#define ENABLE_DMA_PLAYBACK                     0
#define ENABLE_DMA_CAPTURE                      0
#define DISABLE_DMA_PLAYBACK                    1
#define DISABLE_DMA_CAPTURE                     1

#define DSP_DATA_LINEAR                       	0
#define DSP_DATA_COMPANDED                    	1

/*
 * After these sampling rates we must use the high speed part of the DSP (and
 * use different commands). 
 */
#define SB_CLASSIC_MAX_SPEED_RECORD             13000
#define SB_CLASSIC_MAX_SPEED_PLAYBACK           23000

#define SB_20_LOW_SPEED_RECORD                  15000
#define SB_20_LOW_SPEED_PLAYBACK                23000

#define SB_PRO_LOW_SPEED                        23000

/*
 * Maximum and minimum sampling rates. 
 */
#define SB_MAX_SAMPLE_RATE                      47619
#define SB_MIN_SAMPLE_RATE                      3906

#define DSP_MONO_MODE                         	0
#define DSP_STEREO_MODE                       	1

#define LEFT_CHANNEL                            0
#define RIGHT_CHANNEL                           1

#define LINE_LEVEL_INPUT                        0
#define MICROPHONE_LEVEL_INPUT                  1

#define DMA_DIRECTION_IN                        0
#define DMA_DIRECTION_OUT                       1

/*
 * Typedefs for SB Mono and stereo mixer registers. 
 */
typedef unsigned char sbMonoMixerRegister_t;

typedef union {
    struct {
        unsigned char
                right:4,
                left:4;
    }       reg;
    unsigned char data;
}       sbStereoMixerRegister_t;

/*
 * This list will grow bigger, if we decide to take advantages of different
 * cards in each of these two classes. That will be a pain though. ObS: Why
 * do we have to call old things classic? 
 */
typedef enum {
    SB_CLASSIC = 1, SB_20, SB_PRO, SB_16, SB_NONE
}       sbCardVersion_t;

typedef struct  {
        sbCardVersion_t version;
	char		*name;
        unsigned int 	majorVersion;
        unsigned int 	minorVersion;
        BOOL    	mixerPresent;
} sbCardParameters_t;


/*
 * Shadow registers for recording. Available only for SB Pro model.
 */
#define SB_RECORD_SOURCE_MIC                    0
#define SB_RECORD_SOURCE_CD                     1
#define SB_RECORD_SOURCE_LINE                   2

#define SB_RECORD_FREQ_HIGH                     1
#define SB_RECORD_FREQ_LOW                      0

#define SB_RECORD_ANFI_ON                       1
#define SB_RECORD_ANFI_OFF                      0

typedef union {
    struct {
        unsigned char
                rsvd1:1,                /* bit 0 */
                source:2, 
                highFreq:1, 
                rsvd2:1, 
                inputFilter:1, 
                rsvd3:2;                /* bit 7 */
    }       reg;
    unsigned char data;
}       sbRecordingMode_t;

/*
 * For playback. 
 */
#define SB_PLAYBACK_STEREO                      1
#define SB_PLAYBACK_MONO                        0

#define SB_PLAYBACK_DNFI_ON                     1
#define SB_PLAYBACK_DNFI_OFF                    0

typedef union {
    struct {
        unsigned char
                rsvd1:1,
                stereo:1,
                rsvd2:3,
                outputFilter:1,
                rsvd3:2;
    }       reg;
    unsigned char data;
}       sbPlaybackMode_t;
                

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.