Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
31 | halyavin | 1 | |
2 | add dx, [NAMBAR] |
||
3 | in al, dx |
||
4 | ret |
||
5 | |||
6 | |||
7 | |||
8 | add dx, [NAMBAR] |
||
9 | in ax, dx |
||
10 | ret |
||
11 | |||
12 | |||
13 | |||
14 | add dx, [NAMBAR] |
||
15 | in eax, dx |
||
16 | ret |
||
17 | |||
18 | |||
19 | add dx, [NAMBAR] |
||
20 | out dx, al |
||
21 | ret |
||
22 | |||
23 | |||
24 | add dx, [NAMBAR] |
||
25 | out dx, ax |
||
26 | ret |
||
27 | |||
28 | |||
29 | add dx, [NAMBAR] |
||
30 | out dx, eax |
||
31 | ret |
||
32 | |||
33 | |||
34 | |||
35 | |||
36 | add dx, [NABMBAR] |
||
37 | in al, dx |
||
38 | ret |
||
39 | |||
40 | |||
41 | add dx, [NABMBAR] |
||
42 | in ax, dx |
||
43 | ret |
||
44 | |||
45 | |||
46 | add dx, [NABMBAR] |
||
47 | in eax, dx |
||
48 | ret |
||
49 | |||
50 | |||
51 | add dx, [NABMBAR] |
||
52 | out dx, al |
||
53 | ret |
||
54 | |||
55 | |||
56 | add dx, [NABMBAR] |
||
57 | out dx, ax |
||
58 | ret |
||
59 | |||
60 | |||
61 | add dx, [NABMBAR] |
||
62 | out dx, eax |
||
63 | ret |
||
64 | |||
65 | |||
66 | |||
67 | |||
68 | push ecx edx |
||
69 | |||
70 | |||
71 | call NABMBAR_read_dword |
||
72 | and eax, PRI_CODEC_RDY ; 100h primary codec ready |
||
73 | jz .success ; exit if codec not ready !!! |
||
74 | |||
75 | |||
76 | mov ecx, 0ffffh ; try 65535 times |
||
77 | .wait: |
||
78 | mov edx, ACC_SEMA_REG ; 0x34 codec write semaphore |
||
79 | call NABMBAR_read_byte |
||
80 | and al, CODEC_BUSY ; 01h codec access semaphore |
||
81 | jz .success ; exit if codec not busy !!! |
||
82 | |||
83 | |||
84 | jnz .wait |
||
85 | |||
86 | |||
87 | mov eax, 0 |
||
88 | jmp .exit |
||
89 | |||
90 | |||
91 | pop edx ecx |
||
92 | mov eax, 1 |
||
93 | .exit: |
||
94 | ret |
||
95 | |||
96 | |||
97 | |||
98 | |||
99 | |||
100 | |||
101 | push eax ebx edx |
||
102 | |||
103 | |||
104 | mov al, 0 ; stop all PCM out data |
||
105 | call NABMBAR_write_byte |
||
106 | |||
107 | |||
108 | |||
109 | |||
110 | mov al, RR ; reset PCM out regs |
||
111 | call NABMBAR_write_byte |
||
112 | |||
113 | |||
114 | |||
115 | |||
116 | ret |
||
117 | |||
118 | |||
119 | |||
120 | |||
121 | |||
122 | ; in ax = volume level |
||
123 | setVolume: |
||
124 | push eax edx |
||
125 | |||
126 | |||
127 | call semaphore |
||
128 | mov edx, CODEC_RESET_REG ; 0 |
||
129 | xor eax, eax ; register reset the codec |
||
130 | call NAMBAR_write_word |
||
131 | |||
132 | |||
133 | pop eax |
||
134 | imul ax, 0101h ; set volume for both chn |
||
135 | mov edx, CODEC_MASTER_VOL_REG ; 2 |
||
136 | call NAMBAR_write_word |
||
137 | push eax |
||
138 | |||
139 | |||
140 | pop eax ; set volume for both chn |
||
141 | mov edx, CODEC_HP_VOL_REG ; 4 |
||
142 | call NAMBAR_write_word |
||
143 | push eax |
||
144 | |||
145 | |||
146 | mov edx, CODEC_CD_VOL_REG ; 12h |
||
147 | pop eax ; set volume for both chn |
||
148 | shr eax, 2 ; adjust CD VOL |
||
149 | call NAMBAR_write_word |
||
150 | |||
151 | |||
152 | mov edx, CODEC_PCM_OUT_REG ; 18h |
||
153 | mov ax, 0808h ; standard PCM out volume |
||
154 | call NAMBAR_write_word |
||
155 | |||
156 | |||
157 | ret |
||
158 | |||
159 | |||
160 | |||
161 | |||
162 | |||
163 | |||
164 | |||
165 | |||
166 | |||
167 | ; in : ax = desired sample rate |
||
168 | ; out: ax = true or false |
||
169 | ; |
||
170 | codecConfig: |
||
171 | pushad |
||
172 | mov [samplerate], ax ; save sample rate |
||
173 | |||
174 | |||
175 | |||
176 | ; call NABMBAR_read_dword |
||
177 | ; and eax, PRI_CODEC_RDY ; 0100h primary codec ready |
||
178 | ; jnz skip_init ; skip init if codec ready !!! |
||
179 | |||
180 | |||
181 | ;;; call codecStop |
||
182 | |||
183 | |||
184 | ; call NABMBAR_read_dword |
||
185 | ; dps "GLOB_STA = " |
||
186 | ; dph eax |
||
187 | ; newline |
||
188 | |||
189 | |||
190 | ; call NABMBAR_read_dword |
||
191 | ; dps "GLOB_CNT = " |
||
192 | ; dph eax |
||
193 | ; newline |
||
194 | |||
195 | |||
196 | |||
197 | |||
198 | ;; jnz .skip_cold_reset |
||
199 | |||
200 | |||
201 | ; do a cold reset |
||
202 | mov edx, GLOB_CNT_REG ; 2ch global control register |
||
203 | xor eax, eax |
||
204 | call NABMBAR_write_dword ; enable (AC Link off clear) |
||
205 | |||
206 | |||
207 | mcall 5, 5 |
||
208 | ; print "alive!" |
||
209 | |||
210 | |||
211 | |||
212 | |||
213 | mov eax, ACCOLD_RESET + PRI_RES_EN ; cold reset + primary resume |
||
214 | call NABMBAR_write_dword ; 2 channels & 16 bit samples |
||
215 | |||
216 | |||
217 | call NABMBAR_read_dword |
||
218 | and eax, ACCOLD_RESET ; cold reset |
||
219 | jz init_error ; INIT FAILED !!! |
||
220 | |||
221 | |||
222 | |||
223 | |||
224 | mov ecx, 128 |
||
225 | codec_ready_loop: |
||
226 | mov edx, GLOB_STS_REG ; 30h global status register |
||
227 | call NABMBAR_read_dword |
||
228 | and eax, PRI_CODEC_RDY ; 0100h primary codec ready |
||
229 | jnz codec_ready_exit ; move on if codec ready !!! |
||
230 | mcall 5, 1 |
||
231 | dec ecx |
||
232 | jnz codec_ready_loop |
||
233 | ;dps "~" |
||
234 | codec_ready_exit: |
||
235 | |||
236 | |||
237 | mcall 5, 60 |
||
238 | |||
239 | |||
240 | mov edx, GLOB_STS_REG ; 30h global status register |
||
241 | call NABMBAR_read_dword |
||
242 | and eax, PRI_CODEC_RDY ; 0100h primary codec ready |
||
243 | jnz codec_ready_bit_set ; move on if codec ready !!! |
||
244 | cmp [AC97ICH4], 1 |
||
245 | jne init_error |
||
246 | ; je codec_ready_bit_set ; ignore codec ready for ICH4 |
||
247 | ; jmp init_error ; codec ready bit not set !!! |
||
248 | codec_ready_bit_set: |
||
249 | |||
250 | |||
251 | mov edx, CODEC_RESET_REG ; 0h codec reset register |
||
252 | call NAMBAR_read_word |
||
253 | |||
254 | |||
255 | |||
256 | call semaphore |
||
257 | test eax, eax |
||
258 | jz init_error |
||
259 | mov edx, CODEC_POWER_CTRL_REG ; 26h codec powerdown ctrl |
||
260 | call NAMBAR_read_word |
||
261 | and eax, 01111b |
||
262 | cmp eax, 01111b |
||
263 | jne init_error ; codec sections not ready |
||
264 | |||
265 | |||
266 | |||
267 | |||
268 | mov al, 0 |
||
269 | |||
270 | |||
271 | call NABMBAR_write_byte |
||
272 | |||
273 | |||
274 | call NABMBAR_write_byte |
||
275 | |||
276 | |||
277 | call NABMBAR_write_byte |
||
278 | |||
279 | |||
280 | mov al, RR ; 02h reset Bus master regs |
||
281 | |||
282 | |||
283 | call NABMBAR_write_byte |
||
284 | |||
285 | |||
286 | call NABMBAR_write_byte |
||
287 | |||
288 | |||
289 | call NABMBAR_write_byte |
||
290 | |||
291 | |||
292 | mov eax, 15 ; set average volume level |
||
293 | call setVolume |
||
294 | |||
295 | |||
296 | call semaphore |
||
297 | test eax, eax |
||
298 | jz init_error |
||
299 | mov edx, CODEC_EXT_AUDIO_CTRL_REG ; register 2ah |
||
300 | call NAMBAR_read_word ; get ext audio ctl |
||
301 | |||
302 | |||
303 | call semaphore |
||
304 | test eax, eax |
||
305 | jz init_error |
||
306 | mov eax, ebx |
||
307 | and eax, 0FFFFh - BIT1 ; clear DRA (BIT1) |
||
308 | or eax, BIT0 ; set VRA (BIT0) |
||
309 | mov edx, CODEC_EXT_AUDIO_CTRL_REG ; register 2ah |
||
310 | call NAMBAR_write_word ; write ext audio ctl |
||
311 | |||
312 | |||
313 | skip_init: |
||
314 | call semaphore |
||
315 | test eax, eax |
||
316 | jz init_error |
||
317 | |||
318 | |||
319 | ; call NAMBAR_read_word |
||
320 | ; and eax, 0xFFFF |
||
321 | ; newline |
||
322 | ; dps "old PCM OUT RATE: " |
||
323 | ; dpd eax |
||
324 | ; newline |
||
325 | |||
326 | |||
327 | ; mov edx, CODEC_PCM_FRONT_DACRATE_REG ; register 2ch |
||
328 | ; call NAMBAR_write_word |
||
329 | call set_sample_rate |
||
330 | |||
331 | |||
332 | mov eax, 1 ; exit with success |
||
333 | jmp exit_config |
||
334 | init_error: |
||
335 | popad |
||
336 | xor eax, eax ; exit with error |
||
337 | exit_config: |
||
338 | ret |
||
339 | |||
340 | |||
341 | mov edx, CODEC_PCM_FRONT_DACRATE_REG ; 0x2C reg |
||
342 | call NAMBAR_write_word |
||
343 | ret |
||
344 |