Annotation of Examples/DriverKit/SoundBlaster8/SoundBlaster8_reloc.tproj/SoundBlaster8Registers.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1994 NeXT Computer, Inc.  All rights reserved. 
                      3:  *
                      4:  * HISTORY
                      5:  * 4-Mar-94    Rakesh Dubey at NeXT
                      6:  *      Created. 
                      7:  */
                      8: 
                      9: /*
                     10:  * The default base address is 0x220. Adresses depend upon the flavor of
                     11:  * sound card and are not software selectable. 
                     12:  */
                     13: 
                     14: /* 
                     15:  *  SB 1.5 and earlier : 16 bytes at 0x210 to 0x260
                     16:  *  SB 2.0 : 16 bytes at 0x220 and 0x240
                     17:  *  SB Pro : 24 bytes at 0x220 and 0x240
                     18:  */
                     19: #define SB_BASE_ADDRESS_1                       0x0210
                     20: #define SB_BASE_ADDRESS_2                       0x0220
                     21: #define SB_BASE_ADDRESS_3                       0x0230
                     22: #define SB_BASE_ADDRESS_4                       0x0240
                     23: #define SB_BASE_ADDRESS_5                       0x0250
                     24: #define SB_BASE_ADDRESS_6                       0x0260
                     25: 
                     26: /*
                     27:  * DSP register offsets. 
                     28:  */
                     29: #define SB_DSP_RESET_OFFSET                     0x06    /* write only */
                     30: #define SB_DSP_READ_DATA_OFFSET                 0x0a    /* read only */
                     31: #define SB_DSP_WRITE_DATA_OR_COMMAND_OFFSET     0x0c    /* write */
                     32: 
                     33: 
                     34: /*
                     35:  * These two indicate whether the DSP is busy and whether the result is
                     36:  * available from DSP (if any). Success is indicated by bit 7 of the
                     37:  * appropriate register getting set and reset respectively.
                     38:  */
                     39: #define SB_DSP_WRITE_BUFFER_STATUS_OFFSET       0x0c    /* read */
                     40: #define SB_DSP_DATA_AVAILABLE_STATUS_OFFSET     0x0e    /* read only */
                     41: 
                     42: /*
                     43:  * DSP Command list. SB SDK advises to wait for 3.3us after an address write
                     44:  * and 23us after a data write. 
                     45:  */
                     46: 
                     47: #define SB_ADDRESS_WRITE_DELAY                  10
                     48: #define SB_DATA_WRITE_DELAY                     25
                     49: #define SB_DATA_READ_DELAY                     10
                     50: 
                     51: /* 
                     52:  * Set the sampling rate. There are many limitations depending upon the
                     53:  * flavor of card and transfer mode. 
                     54:  */
                     55: #define DC_SET_TIME_CONSTANT                   0x40
                     56: 
                     57: /*
                     58:  * Speaker control. Speaker must be off while doing input. 
                     59:  */
                     60: #define DC_TURN_ON_SPEAKER                      0xd1
                     61: #define DC_TURN_OFF_SPEAKER                     0xd3
                     62: #define DC_GET_SPEAKER_STATUS                   0xd8
                     63: 
                     64: /*
                     65:  * Request low speed DMA transfer. 
                     66:  */
                     67: #define DC_START_LS_DMA_DAC_8                   0x14
                     68: #define DC_START_LS_DMA_ADC_8                   0x24
                     69: 
                     70: /*
                     71:  * Request high speed DMA transfer. 
                     72:  */
                     73: #define DC_SET_BLOCK_SIZE                       0x48
                     74: 
                     75: #define DC_START_HS_DMA_DAC_8                   0x91
                     76: #define DC_START_HS_DMA_ADC_8                   0x99
                     77: 
                     78: /*
                     79:  * DSP side other DMA control commands. 
                     80:  */
                     81: #define DC_HALT_DMA                             0xd0
                     82: 
                     83: /*
                     84:  * Not used. 
                     85:  */
                     86: #define DC_CONTINUE_DMA                         0xd4
                     87: #define DC_SEND_SILENCE                         0x80
                     88: #define DC_PIO_ADC_8                            0x20   /* Programmed I/O */
                     89: #define DC_PIO_DAC_8                            0x10
                     90: 
                     91: /*
                     92:  * Other transfer modes for output. Currently unsupported.
                     93:  */
                     94: #define DC_START_LS_DMA_DAC_2                   0x16
                     95: #define DC_START_LS_DMA_DAC_2_6                 0x76
                     96: #define DC_START_LS_DMA_DAC_4                   0x74
                     97: 
                     98: /*
                     99:  * Other miscelleaneous DSP Coomands. 
                    100:  */
                    101: #define DC_GET_VERSION                          0xe1
                    102: #define DC_INVERT_BYTE                          0xe0
                    103: 
                    104: /*
                    105:  * Record mode control (available only for SBPro) 
                    106:  */
                    107: #define DC_RECORD_IN_MONO                       0xa0
                    108: #define DC_RECORD_IN_STEREO                     0xa8
                    109: 
                    110: /*
                    111:  * Note: Mixer is available in SB Pro model only. 
                    112:  */
                    113: 
                    114: /*
                    115:  * Mixer register offsets. 
                    116:  */
                    117: #define SB_MIXER_ADDRESS_OFFSET                 0x04
                    118: #define SB_MIXER_DATA_OFFSET                    0x05
                    119: 
                    120: /*
                    121:  * Mixer Commands for setting volume. 
                    122:  */
                    123: #define MC_MASTER_VOLUME                        0x22
                    124: #define MC_FM_VOLUME                            0x26
                    125: #define MC_CD_VOLUME                            0x28
                    126: #define MC_LINE_VOLUME                          0x2e
                    127: #define MC_VOC_VOLUME                           0x04
                    128: #define MC_MICROPHONE_VOLUME                    0x0a
                    129: 
                    130: /*
                    131:  * Other mixer commands for selecting input output type. 
                    132:  */
                    133: #define MC_RECORD_CONTROL                       0x0c
                    134: #define MC_PLAYBACK_CONTROL                     0x0e
                    135: 
                    136: /*
                    137:  * Actually you have only half as many settings. 
                    138:  */
                    139: #define MAX_INPUT_GAIN_LINE                     0x0f
                    140: #define MAX_INPUT_GAIN_MICROPHONE               0x07
                    141: 
                    142: #define MAX_MASTER_OUTPUT_VOLUME                0x0f
                    143: #define MAX_FM_OUTPUT_VOLUME                    0x0f
                    144: #define MAX_LINE_OUTPUT_VOLUME                  0x0f
                    145: #define MAX_CD_OUTPUT_VOLUME                    0x0f
                    146: 
                    147: #define MUTE_OUTPUT                             1
                    148: #define UNMUTE_OUTPUT                           0
                    149: 
                    150: #define PLAYBACK_ENABLE                         1
                    151: #define PLAYBACK_DISABLE                        0
                    152: #define CAPTURE_ENABLE                          1
                    153: #define CAPTURE_DISABLE                         0
                    154: 
                    155: #define ENABLE_DMA_PLAYBACK                     0
                    156: #define ENABLE_DMA_CAPTURE                      0
                    157: #define DISABLE_DMA_PLAYBACK                    1
                    158: #define DISABLE_DMA_CAPTURE                     1
                    159: 
                    160: #define DSP_DATA_LINEAR                        0
                    161: #define DSP_DATA_COMPANDED                     1
                    162: 
                    163: /*
                    164:  * After these sampling rates we must use the high speed part of the DSP (and
                    165:  * use different commands). 
                    166:  */
                    167: #define SB_CLASSIC_MAX_SPEED_RECORD             13000
                    168: #define SB_CLASSIC_MAX_SPEED_PLAYBACK           23000
                    169: 
                    170: #define SB_20_LOW_SPEED_RECORD                  15000
                    171: #define SB_20_LOW_SPEED_PLAYBACK                23000
                    172: 
                    173: #define SB_PRO_LOW_SPEED                        23000
                    174: 
                    175: /*
                    176:  * Maximum and minimum sampling rates. 
                    177:  */
                    178: #define SB_MAX_SAMPLE_RATE                      47619
                    179: #define SB_MIN_SAMPLE_RATE                      3906
                    180: 
                    181: #define DSP_MONO_MODE                          0
                    182: #define DSP_STEREO_MODE                        1
                    183: 
                    184: #define LEFT_CHANNEL                            0
                    185: #define RIGHT_CHANNEL                           1
                    186: 
                    187: #define LINE_LEVEL_INPUT                        0
                    188: #define MICROPHONE_LEVEL_INPUT                  1
                    189: 
                    190: #define DMA_DIRECTION_IN                        0
                    191: #define DMA_DIRECTION_OUT                       1
                    192: 
                    193: /*
                    194:  * Typedefs for SB Mono and stereo mixer registers. 
                    195:  */
                    196: typedef unsigned char sbMonoMixerRegister_t;
                    197: 
                    198: typedef union {
                    199:     struct {
                    200:         unsigned char
                    201:                 right:4,
                    202:                 left:4;
                    203:     }       reg;
                    204:     unsigned char data;
                    205: }       sbStereoMixerRegister_t;
                    206: 
                    207: /*
                    208:  * This list will grow bigger, if we decide to take advantages of different
                    209:  * cards in each of these two classes. That will be a pain though. ObS: Why
                    210:  * do we have to call old things classic? 
                    211:  */
                    212: typedef enum {
                    213:     SB_CLASSIC = 1, SB_20, SB_PRO, SB_16, SB_NONE
                    214: }       sbCardVersion_t;
                    215: 
                    216: typedef struct  {
                    217:         sbCardVersion_t version;
                    218:        char            *name;
                    219:         unsigned int   majorVersion;
                    220:         unsigned int   minorVersion;
                    221:         BOOL           mixerPresent;
                    222: } sbCardParameters_t;
                    223: 
                    224: 
                    225: /*
                    226:  * Shadow registers for recording. Available only for SB Pro model.
                    227:  */
                    228: #define SB_RECORD_SOURCE_MIC                    0
                    229: #define SB_RECORD_SOURCE_CD                     1
                    230: #define SB_RECORD_SOURCE_LINE                   2
                    231: 
                    232: #define SB_RECORD_FREQ_HIGH                     1
                    233: #define SB_RECORD_FREQ_LOW                      0
                    234: 
                    235: #define SB_RECORD_ANFI_ON                       1
                    236: #define SB_RECORD_ANFI_OFF                      0
                    237: 
                    238: typedef union {
                    239:     struct {
                    240:         unsigned char
                    241:                 rsvd1:1,                /* bit 0 */
                    242:                 source:2, 
                    243:                 highFreq:1, 
                    244:                 rsvd2:1, 
                    245:                 inputFilter:1, 
                    246:                 rsvd3:2;                /* bit 7 */
                    247:     }       reg;
                    248:     unsigned char data;
                    249: }       sbRecordingMode_t;
                    250: 
                    251: /*
                    252:  * For playback. 
                    253:  */
                    254: #define SB_PLAYBACK_STEREO                      1
                    255: #define SB_PLAYBACK_MONO                        0
                    256: 
                    257: #define SB_PLAYBACK_DNFI_ON                     1
                    258: #define SB_PLAYBACK_DNFI_OFF                    0
                    259: 
                    260: typedef union {
                    261:     struct {
                    262:         unsigned char
                    263:                 rsvd1:1,
                    264:                 stereo:1,
                    265:                 rsvd2:3,
                    266:                 outputFilter:1,
                    267:                 rsvd3:2;
                    268:     }       reg;
                    269:     unsigned char data;
                    270: }       sbPlaybackMode_t;
                    271:                 

unix.superglobalmegacorp.com

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