1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
//
// Copyright 2009 Sun Microsystems, Inc. All rights reserved.
// Use is subject to license terms.
//
// Copyright (C) 4Front Technologies 1996-2008.
//
// CDDL HEADER START
//
// The contents of this file are subject to the terms of the
// Common Development and Distribution License (the "License").
// You may not use this file except in compliance with the License.
//
// You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
// or http://www.opensolaris.org/os/licensing.
// See the License for the specific language governing permissions
// and limitations under the License.
//
// When distributing Covered Code, include this CDDL HEADER in each
// file and include the License file at usr/src/OPENSOLARIS.LICENSE.
// If applicable, add the following below this CDDL HEADER, with the
// fields enclosed by brackets "[]" replaced with your own identifying
// information: Portions Copyright [yyyy] [name of copyright owner]
//
// CDDL HEADER END
// Constants for EMU 10k2 (SB Audigy)
// Inputs
.input IN_AC97_L 0
.input IN_AC97_R 1
.input IN_DIGCD_L 2
.input IN_DIGCD_R 3
.input IN_SPDIF1_L 4 // TOSLink
.input IN_SPDIF1_R 5
.input IN_MYSTERY_L 6
.input IN_MYSTERY_R 7
.input IN_LINE2_L 8 // LiveDrive
.input IN_LINE2_R 9
.input IN_SPDIF2_L 10 // Coaxial SPDIF
.input IN_SPDIF2_R 11
.input IN_AUX2_L 12 // LiveDrive
.input IN_AUX2_R 13
// Outputs
.output OUT_SPDIF_L 0
.output OUT_SPDIF_R 1
.output OUT_DCENTER 2 // Digital Center channel
.output OUT_DLFE 3 // Digital LFE
.output OUT_HEADPH_L 4 // LiveDrive headphone out
.output OUT_HEADPH_R 5
.output OUT_DSURR_L 6 // Surround output (digital)
.output OUT_DSURR_R 7
.output OUT_FRONT_L 8
.output OUT_FRONT_R 9
.output OUT_ACENTER 10 // Analog center channel
.output OUT_ALFE 11 // Analog LFE output
.output OUT_SIDE_L 12 // Side surround
.output OUT_SIDE_R 13
.output OUT_SURR_L 14 // Surround output
.output OUT_SURR_R 15
.output OUT_AC97_L 16 // Send to the AC97 front channel
.output OUT_AC97_R 17
.output OUT_ADC_L 22 // Send to the ADC recording channel
.output OUT_ADC_R 23
.output OUT_MICREC_L 24 // Send to the mic recording buffer
.output OUT_MICREC_R 25 // ??????? (maybe not in use at all)
// Temporaries
.gpr PCM_FRONT_L
.gpr PCM_FRONT_R
.gpr PCM_SURR_L
.gpr PCM_SURR_R
.gpr PCM_SIDE_L
.gpr PCM_SIDE_R
.gpr PCM_CEN
.gpr PCM_LFE
.gpr PCM_REC_L
.gpr PCM_REC_R
.gpr SPDIF_DELAY
// Code
// Load up the PCM inputs.
// We apply the PCM volume at the same time.
MACS(PCM_FRONT_L, 0, FX_FRONT_L, VOL_PCM)
MACS(PCM_FRONT_R, 0, FX_FRONT_R, VOL_PCM)
MACS(PCM_SURR_L, 0, FX_SURR_L, VOL_PCM)
MACS(PCM_SURR_R, 0, FX_SURR_R, VOL_PCM)
MACS(PCM_SIDE_L, 0, FX_SIDE_L, VOL_PCM)
MACS(PCM_SIDE_R, 0, FX_SIDE_R, VOL_PCM)
MACS(PCM_CEN, 0, FX_CEN, VOL_PCM)
MACS(PCM_LFE, 0, FX_LFE, VOL_PCM)
// Mix any monitor sources into the front PCM
// AC'97 (includes Line-In, analog CD, and Mic)
MACS(PCM_FRONT_L, PCM_FRONT_L, IN_AC97_L, MON_AC97_L)
MACS(PCM_FRONT_R, PCM_FRONT_R, IN_AC97_R, MON_AC97_R)
// DIGCD
MACS(PCM_FRONT_L, PCM_FRONT_L, IN_DIGCD_L, MON_DIGCD_L)
MACS(PCM_FRONT_R, PCM_FRONT_R, IN_DIGCD_R, MON_DIGCD_R)
// SPDIF1
MACS(PCM_FRONT_L, PCM_FRONT_L, IN_SPDIF1_L, MON_SPDIF1_L)
MACS(PCM_FRONT_R, PCM_FRONT_R, IN_SPDIF1_R, MON_SPDIF1_R)
// SPDIF2
MACS(PCM_FRONT_L, PCM_FRONT_L, IN_SPDIF2_L, MON_SPDIF2_L)
MACS(PCM_FRONT_R, PCM_FRONT_R, IN_SPDIF2_R, MON_SPDIF2_R)
// Line2/Mic2 (Live! Drive)
MACS(PCM_FRONT_L, PCM_FRONT_L, IN_LINE2_L, MON_LINE2_L)
MACS(PCM_FRONT_R, PCM_FRONT_R, IN_LINE2_R, MON_LINE2_R)
// Aux2 (Live! Drive)
MACS(PCM_FRONT_L, PCM_FRONT_L, IN_AUX2_L, MON_AUX2_L)
MACS(PCM_FRONT_R, PCM_FRONT_R, IN_AUX2_R, MON_AUX2_R)
// Outputs
MACS(OUT_FRONT_L, 0, PCM_FRONT_L, VOL_FRONT_L)
MACS(OUT_FRONT_R, 0, PCM_FRONT_R, VOL_FRONT_R)
MACS(OUT_SPDIF_L, 0, PCM_FRONT_L, VOL_FRONT_L)
// delay SPDIF right channel one sample to fix a bug
ACC3(OUT_SPDIF_R, 0, 0, SPDIF_DELAY)
MACS(SPDIF_DELAY, 0, PCM_FRONT_R, VOL_FRONT_R)
MACS(OUT_HEADPH_L, 0, PCM_FRONT_L, VOL_HEADPH_L)
MACS(OUT_HEADPH_R, 0, PCM_FRONT_R, VOL_HEADPH_R)
MACS(OUT_SURR_L, 0, PCM_SURR_L, VOL_SURR_L)
MACS(OUT_SURR_R, 0, PCM_SURR_R, VOL_SURR_R)
MACS(OUT_DSURR_L, 0, PCM_SURR_L, VOL_SURR_L)
MACS(OUT_DSURR_R, 0, PCM_SURR_R, VOL_SURR_R)
MACS(OUT_SIDE_L, 0, PCM_SIDE_L, VOL_SIDE_L)
MACS(OUT_SIDE_R, 0, PCM_SIDE_R, VOL_SIDE_R)
MACS(OUT_ACENTER, 0, PCM_CEN, VOL_CEN)
MACS(OUT_DCENTER, 0, PCM_CEN, VOL_CEN)
MACS(OUT_ALFE, 0, PCM_LFE, VOL_LFE)
MACS(OUT_DLFE, 0, PCM_LFE, VOL_LFE)
// Inputs (Recording) -- the source variables are treated as
// simple boolean enables.
MACINTS(PCM_REC_L, PCM_REC_R, IN_AC97_L, REC_AC97)
MACINTS(PCM_REC_R, PCM_REC_L, IN_AC97_R, REC_AC97)
MACINTS(PCM_REC_L, PCM_REC_L, IN_DIGCD_L, REC_DIGCD)
MACINTS(PCM_REC_R, PCM_REC_R, IN_DIGCD_R, REC_DIGCD)
MACINTS(PCM_REC_L, PCM_REC_L, IN_SPDIF1_L, REC_SPDIF1)
MACINTS(PCM_REC_R, PCM_REC_R, IN_SPDIF1_R, REC_SPDIF1)
MACINTS(PCM_REC_L, PCM_REC_L, IN_SPDIF2_L, REC_SPDIF2)
MACINTS(PCM_REC_R, PCM_REC_R, IN_SPDIF2_R, REC_SPDIF2)
MACINTS(PCM_REC_L, PCM_REC_L, IN_AUX2_L, REC_AUX2)
MACINTS(PCM_REC_R, PCM_REC_R, IN_AUX2_R, REC_AUX2)
MACINTS(PCM_REC_L, PCM_REC_L, IN_LINE2_L, REC_LINE2)
MACINTS(PCM_REC_R, PCM_REC_R, IN_LINE2_R, REC_LINE2)
MACINTS(PCM_REC_L, PCM_REC_L, PCM_FRONT_L, REC_PCM)
MACINTS(PCM_REC_R, PCM_REC_R, PCM_FRONT_R, REC_PCM)
// Apply master record gain
MACS(OUT_ADC_L, 0, PCM_REC_L, VOL_REC_L)
MACS(OUT_ADC_R, 0, PCM_REC_R, VOL_REC_R)
|