1===========================================
2Sound Blaster Live mixer / default DSP code
3===========================================
4
5
6The EMU10K1 chips have a DSP part which can be programmed to support
7various ways of sample processing, which is described here.
8(This article does not deal with the overall functionality of the
9EMU10K1 chips. See the manuals section for further details.)
10
11The ALSA driver programs this portion of chip by default code
12(can be altered later) which offers the following functionality:
13
14
15IEC958 (S/PDIF) raw PCM
16=======================
17
18This PCM device (it's the 3rd PCM device (index 2!) and first subdevice
19(index 0) for a given card) allows to forward 48kHz, stereo, 16-bit
20little endian streams without any modifications to the digital output
21(coaxial or optical). The universal interface allows the creation of up
22to 8 raw PCM devices operating at 48kHz, 16-bit little endian. It would
23be easy to add support for multichannel devices to the current code,
24but the conversion routines exist only for stereo (2-channel streams)
25at the time.
26
27Look to tram_poke routines in lowlevel/emu10k1/emufx.c for more details.
28
29
30Digital mixer controls
31======================
32
33These controls are built using the DSP instructions. They offer extended
34functionality. Only the default built-in code in the ALSA driver is described
35here. Note that the controls work as attenuators: the maximum value is the
36neutral position leaving the signal unchanged. Note that if the same destination
37is mentioned in multiple controls, the signal is accumulated and can be clipped
38(set to maximal or minimal value without checking for overflow).
39
40
41Explanation of used abbreviations:
42
43DAC
44	digital to analog converter
45ADC
46	analog to digital converter
47I2S
48	one-way three wire serial bus for digital sound by Philips Semiconductors
49	(this standard is used for connecting standalone D/A and A/D converters)
50LFE
51	low frequency effects (used as subwoofer signal)
52AC97
53	a chip containing an analog mixer, D/A and A/D converters
54IEC958
55	S/PDIF
56FX-bus
57	the EMU10K1 chip has an effect bus containing 16 accumulators.
58	Each of the synthesizer voices can feed its output to these accumulators
59	and the DSP microcontroller can operate with the resulting sum.
60
61
62``name='Wave Playback Volume',index=0``
63---------------------------------------
64This control is used to attenuate samples from left and right PCM FX-bus
65accumulators. ALSA uses accumulators 0 and 1 for left and right PCM samples.
66The result samples are forwarded to the front DAC PCM slots of the AC97 codec.
67
68``name='Wave Surround Playback Volume',index=0``
69------------------------------------------------
70This control is used to attenuate samples from left and right PCM FX-bus
71accumulators. ALSA uses accumulators 0 and 1 for left and right PCM samples.
72The result samples are forwarded to the rear I2S DACs. These DACs operates
73separately (they are not inside the AC97 codec).
74
75``name='Wave Center Playback Volume',index=0``
76----------------------------------------------
77This control is used to attenuate samples from left and right PCM FX-bus
78accumulators. ALSA uses accumulators 0 and 1 for left and right PCM samples.
79The result is mixed to mono signal (single channel) and forwarded to
80the ??rear?? right DAC PCM slot of the AC97 codec.
81
82``name='Wave LFE Playback Volume',index=0``
83-------------------------------------------
84This control is used to attenuate samples from left and right PCM FX-bus
85accumulators. ALSA uses accumulators 0 and 1 for left and right PCM.
86The result is mixed to mono signal (single channel) and forwarded to
87the ??rear?? left DAC PCM slot of the AC97 codec.
88
89``name='Wave Capture Volume',index=0``, ``name='Wave Capture Switch',index=0``
90------------------------------------------------------------------------------
91These controls are used to attenuate samples from left and right PCM FX-bus
92accumulator. ALSA uses accumulators 0 and 1 for left and right PCM.
93The result is forwarded to the ADC capture FIFO (thus to the standard capture
94PCM device).
95
96``name='Synth Playback Volume',index=0``
97----------------------------------------
98This control is used to attenuate samples from left and right MIDI FX-bus
99accumulators. ALSA uses accumulators 4 and 5 for left and right MIDI samples.
100The result samples are forwarded to the front DAC PCM slots of the AC97 codec.
101
102``name='Synth Capture Volume',index=0``, ``name='Synth Capture Switch',index=0``
103--------------------------------------------------------------------------------
104These controls are used to attenuate samples from left and right MIDI FX-bus
105accumulator. ALSA uses accumulators 4 and 5 for left and right MIDI samples.
106The result is forwarded to the ADC capture FIFO (thus to the standard capture
107PCM device).
108
109``name='Surround Playback Volume',index=0``
110-------------------------------------------
111This control is used to attenuate samples from left and right rear PCM FX-bus
112accumulators. ALSA uses accumulators 2 and 3 for left and right rear PCM samples.
113The result samples are forwarded to the rear I2S DACs. These DACs operate
114separately (they are not inside the AC97 codec).
115
116``name='Surround Capture Volume',index=0``, ``name='Surround Capture Switch',index=0``
117--------------------------------------------------------------------------------------
118These controls are used to attenuate samples from left and right rear PCM FX-bus
119accumulators. ALSA uses accumulators 2 and 3 for left and right rear PCM samples.
120The result is forwarded to the ADC capture FIFO (thus to the standard capture
121PCM device).
122
123``name='Center Playback Volume',index=0``
124-----------------------------------------
125This control is used to attenuate sample for center PCM FX-bus accumulator.
126ALSA uses accumulator 6 for center PCM sample. The result sample is forwarded
127to the ??rear?? right DAC PCM slot of the AC97 codec.
128
129``name='LFE Playback Volume',index=0``
130--------------------------------------
131This control is used to attenuate sample for center PCM FX-bus accumulator.
132ALSA uses accumulator 6 for center PCM sample. The result sample is forwarded
133to the ??rear?? left DAC PCM slot of the AC97 codec.
134
135``name='AC97 Playback Volume',index=0``
136---------------------------------------
137This control is used to attenuate samples from left and right front ADC PCM slots
138of the AC97 codec. The result samples are forwarded to the front DAC PCM
139slots of the AC97 codec.
140
141.. note::
142  This control should be zero for the standard operations, otherwise
143  a digital loopback is activated.
144
145
146``name='AC97 Capture Volume',index=0``
147--------------------------------------
148This control is used to attenuate samples from left and right front ADC PCM slots
149of the AC97 codec. The result is forwarded to the ADC capture FIFO (thus to
150the standard capture PCM device).
151
152.. note::
153   This control should be 100 (maximal value), otherwise no analog
154   inputs of the AC97 codec can be captured (recorded).
155
156``name='IEC958 TTL Playback Volume',index=0``
157---------------------------------------------
158This control is used to attenuate samples from left and right IEC958 TTL
159digital inputs (usually used by a CDROM drive). The result samples are
160forwarded to the front DAC PCM slots of the AC97 codec.
161
162``name='IEC958 TTL Capture Volume',index=0``
163--------------------------------------------
164This control is used to attenuate samples from left and right IEC958 TTL
165digital inputs (usually used by a CDROM drive). The result samples are
166forwarded to the ADC capture FIFO (thus to the standard capture PCM device).
167
168``name='Zoom Video Playback Volume',index=0``
169---------------------------------------------
170This control is used to attenuate samples from left and right zoom video
171digital inputs (usually used by a CDROM drive). The result samples are
172forwarded to the front DAC PCM slots of the AC97 codec.
173
174``name='Zoom Video Capture Volume',index=0``
175--------------------------------------------
176This control is used to attenuate samples from left and right zoom video
177digital inputs (usually used by a CDROM drive). The result samples are
178forwarded to the ADC capture FIFO (thus to the standard capture PCM device).
179
180``name='IEC958 LiveDrive Playback Volume',index=0``
181---------------------------------------------------
182This control is used to attenuate samples from left and right IEC958 optical
183digital input. The result samples are forwarded to the front DAC PCM slots
184of the AC97 codec.
185
186``name='IEC958 LiveDrive Capture Volume',index=0``
187--------------------------------------------------
188This control is used to attenuate samples from left and right IEC958 optical
189digital inputs. The result samples are forwarded to the ADC capture FIFO
190(thus to the standard capture PCM device).
191
192``name='IEC958 Coaxial Playback Volume',index=0``
193-------------------------------------------------
194This control is used to attenuate samples from left and right IEC958 coaxial
195digital inputs. The result samples are forwarded to the front DAC PCM slots
196of the AC97 codec.
197
198``name='IEC958 Coaxial Capture Volume',index=0``
199------------------------------------------------
200This control is used to attenuate samples from left and right IEC958 coaxial
201digital inputs. The result samples are forwarded to the ADC capture FIFO
202(thus to the standard capture PCM device).
203
204``name='Line LiveDrive Playback Volume',index=0``, ``name='Line LiveDrive Playback Volume',index=1``
205----------------------------------------------------------------------------------------------------
206This control is used to attenuate samples from left and right I2S ADC
207inputs (on the LiveDrive). The result samples are forwarded to the front
208DAC PCM slots of the AC97 codec.
209
210``name='Line LiveDrive Capture Volume',index=1``, ``name='Line LiveDrive Capture Volume',index=1``
211--------------------------------------------------------------------------------------------------
212This control is used to attenuate samples from left and right I2S ADC
213inputs (on the LiveDrive). The result samples are forwarded to the ADC
214capture FIFO (thus to the standard capture PCM device).
215
216``name='Tone Control - Switch',index=0``
217----------------------------------------
218This control turns the tone control on or off. The samples for front, rear
219and center / LFE outputs are affected.
220
221``name='Tone Control - Bass',index=0``
222--------------------------------------
223This control sets the bass intensity. There is no neutral value!!
224When the tone control code is activated, the samples are always modified.
225The closest value to pure signal is 20.
226
227``name='Tone Control - Treble',index=0``
228----------------------------------------
229This control sets the treble intensity. There is no neutral value!!
230When the tone control code is activated, the samples are always modified.
231The closest value to pure signal is 20.
232
233``name='IEC958 Optical Raw Playback Switch',index=0``
234-----------------------------------------------------
235If this switch is on, then the samples for the IEC958 (S/PDIF) digital
236output are taken only from the raw FX8010 PCM, otherwise standard front
237PCM samples are taken.
238
239``name='Headphone Playback Volume',index=1``
240--------------------------------------------
241This control attenuates the samples for the headphone output.
242
243``name='Headphone Center Playback Switch',index=1``
244---------------------------------------------------
245If this switch is on, then the sample for the center PCM is put to the
246left headphone output (useful for SB Live cards without separate center/LFE
247output).
248
249``name='Headphone LFE Playback Switch',index=1``
250------------------------------------------------
251If this switch is on, then the sample for the center PCM is put to the
252right headphone output (useful for SB Live cards without separate center/LFE
253output).
254
255
256PCM stream related controls
257===========================
258
259``name='EMU10K1 PCM Volume',index 0-31``
260----------------------------------------
261Channel volume attenuation in range 0-0x1fffd. The middle value (no
262attenuation) is default. The channel mapping for three values is
263as follows:
264
265* 0 - mono, default 0xffff (no attenuation)
266* 1 - left, default 0xffff (no attenuation)
267* 2 - right, default 0xffff (no attenuation)
268
269``name='EMU10K1 PCM Send Routing',index 0-31``
270----------------------------------------------
271This control specifies the destination - FX-bus accumulators. There are
272twelve values with this mapping:
273
274*  0 -  mono, A destination (FX-bus 0-15), default 0
275*  1 -  mono, B destination (FX-bus 0-15), default 1
276*  2 -  mono, C destination (FX-bus 0-15), default 2
277*  3 -  mono, D destination (FX-bus 0-15), default 3
278*  4 -  left, A destination (FX-bus 0-15), default 0
279*  5 -  left, B destination (FX-bus 0-15), default 1
280*  6 -  left, C destination (FX-bus 0-15), default 2
281*  7 -  left, D destination (FX-bus 0-15), default 3
282*  8 - right, A destination (FX-bus 0-15), default 0
283*  9 - right, B destination (FX-bus 0-15), default 1
284* 10 - right, C destination (FX-bus 0-15), default 2
285* 11 - right, D destination (FX-bus 0-15), default 3
286
287Don't forget that it's illegal to assign a channel to the same FX-bus accumulator
288more than once (it means 0=0 && 1=0 is an invalid combination).
289
290``name='EMU10K1 PCM Send Volume',index 0-31``
291---------------------------------------------
292It specifies the attenuation (amount) for given destination in range 0-255.
293The channel mapping is following:
294
295*  0 -  mono, A destination attn, default 255 (no attenuation)
296*  1 -  mono, B destination attn, default 255 (no attenuation)
297*  2 -  mono, C destination attn, default 0 (mute)
298*  3 -  mono, D destination attn, default 0 (mute)
299*  4 -  left, A destination attn, default 255 (no attenuation)
300*  5 -  left, B destination attn, default 0 (mute)
301*  6 -  left, C destination attn, default 0 (mute)
302*  7 -  left, D destination attn, default 0 (mute)
303*  8 - right, A destination attn, default 0 (mute)
304*  9 - right, B destination attn, default 255 (no attenuation)
305* 10 - right, C destination attn, default 0 (mute)
306* 11 - right, D destination attn, default 0 (mute)
307
308
309
310MANUALS/PATENTS
311===============
312
313ftp://opensource.creative.com/pub/doc
314-------------------------------------
315
316Note that the site is defunct, but the documents are available
317from various other locations.
318
319LM4545.pdf
320	AC97 Codec
321m2049.pdf
322	The EMU10K1 Digital Audio Processor
323hog63.ps
324	FX8010 - A DSP Chip Architecture for Audio Effects
325
326
327WIPO Patents
328------------
329
330WO 9901813 (A1)
331	Audio Effects Processor with multiple asynchronous streams
332	(Jan. 14, 1999)
333
334WO 9901814 (A1)
335	Processor with Instruction Set for Audio Effects (Jan. 14, 1999)
336
337WO 9901953 (A1)
338	Audio Effects Processor having Decoupled Instruction
339        Execution and Audio Data Sequencing (Jan. 14, 1999)
340
341
342US Patents (https://www.uspto.gov/)
343-----------------------------------
344
345US 5925841
346	Digital Sampling Instrument employing cache memory (Jul. 20, 1999)
347
348US 5928342
349	Audio Effects Processor integrated on a single chip
350        with a multiport memory onto which multiple asynchronous
351        digital sound samples can be concurrently loaded
352	(Jul. 27, 1999)
353
354US 5930158
355	Processor with Instruction Set for Audio Effects (Jul. 27, 1999)
356
357US 6032235
358	Memory initialization circuit (Tram) (Feb. 29, 2000)
359
360US 6138207
361	Interpolation looping of audio samples in cache connected to
362        system bus with prioritization and modification of bus transfers
363        in accordance with loop ends and minimum block sizes
364	(Oct. 24, 2000)
365
366US 6151670
367	Method for conserving memory storage using a
368        pool of  short term memory registers
369	(Nov. 21, 2000)
370
371US 6195715
372	Interrupt control for multiple programs communicating with
373        a common interrupt by associating programs to GP registers,
374        defining interrupt register, polling GP registers, and invoking
375        callback routine associated with defined interrupt register
376	(Feb. 27, 2001)
377