sound, SB, AC97 и другое

Drivers for sound cards
  • codec.inc

    Code: Select all

    align 4
    proc setup_codec
    
    	   xor eax, eax
    	   stdcall codec_write, dword CODEC_AUX_VOL
    
    	   mov eax, 0x0B0B
    	   stdcall codec_write, dword CODEC_MASTER_VOL_REG
    
    	   mov ax, 0x08
    	   stdcall codec_write, dword 0x0C
    
    	   mov ax, 0x0808
    	   stdcall codec_write, dword CODEC_PCM_OUT_REG
    
    	   mov ax, 0x0808
    	   stdcall codec_write, dword 0x10
    
    	   mov ax, 0x0808
    	   stdcall codec_write, dword 0x12
    
    	   mov ax, 0x0808
    	   stdcall codec_write, dword 0x16
    
    
    	   stdcall codec_read, dword CODEC_EXT_AUDIO_CTRL_REG
    	   and eax, 0FFFFh - BIT1		   ; clear DRA (BIT1)
    	   or eax, BIT0 			  ; set VRA (BIT0)
    	   stdcall codec_write, dword CODEC_EXT_AUDIO_CTRL_REG
    
    	   stdcall set_sample_rate, dword 48000
    
    .init_error:
    	   xor	  eax, eax			     ; exit with error
    	   ret
    endp
    
    
    Громкость задаётся ослаблением сигнала с шагом -1.5dB. Советую прибавлять осторожно, чтобы не спалить.
  • Roverman
    Для AC97 всё ещё работает System audio mixer.
    Для HDA не пременять!
    Нужно будет переделать соответствующие функции драйвера HDA.
  • Странно.. сейчас попробовал - не работает, кнопочки нажимаются, громкость не меняется.

    ps попробовал миксер который на SVN - тоже не работает
  • Roverman
    Asper wrote:Для регулировки левого канала - Home/End, правого - PageUp/PageDown.
    Для AC97 возможно регулировать только оба канала одновременно, т.е. уровень звучания в обоих каналах будет одинаковый.
    Roverman wrote:ps попробовал миксер который на SVN - тоже не работает
    По-моему он был предназначен для старого встроенного в ядро кода SB16, а так соответствующий код давно удалён из ядра, то и программа на SVN потеряла актуальность.
  • Спасибо большое за разъяснения, все работает.
  • Сделал Infinity, которая по умолчанию не использует инструкций MMX+ (изменить можно через USE_MMX_PLUS). Размер упакованного драйвера увеличивается на 8 байт, что как мне кажется приемлемо.
    Attachments
    INFINITY.ASM.txt (29.04 KiB)
    Downloaded 162 times
  • Asper wrote:Сделал Infinity, которая по умолчанию не использует инструкций MMX+ (изменить можно через USE_MMX_PLUS). Размер упакованного драйвера увеличивается на 8 байт, что как мне кажется приемлемо.
    Ура :!:
    А на какой ревизии SVN базируется Ваша версия? Я пробовал сравнивать - в последней ревизии очень много других изменений, не связанных с Вашими.
  • Asper
    Замечательно - хоть у меня не было железа без нужных инструкций, но зато теперь есть альтернатива. Спасибо.

    З.Ы. Для тех кто "совсем не флудит" - иногда простая человеческая поддержка не менее необходима, чем багрепорт.
  • yogev_ezra
    Да видимо ревизия старая, но разницы нет, с точки зрения наличия инструкций MMX+ в коде. Изменения касаются одной только функции set_vol_param
    Вот с последней ревизии.
    infinity.7z (9.3 KiB)
    Infinity without MMX+ by default
    Downloaded 157 times
    Mario
    Спасибо за поддержку.
  • Asper

    А зачем neg в операциях ?
  • Serge

    Потому что сравниваются положительное и отрицательное числа (например 0x0000DDF0 и 0xFFFFDDF0), что в итоге приводит к нулевому уровню звука.
  • Asper

    Там все сравнения в коротких целых ( 16 бит). Знаковые сравнения cmp ax, word[...], jl ... или jg ... должны работать. И диапазон vol_min,vol_max [-10000, 0]. Если не закладываться на возможность ограничения по максимальному уровню то vol_max всегда равно 0.
    Last edited by Serge on Mon Mar 28, 2011 7:48 pm, edited 1 time in total.
  • Serge wrote:Там все сравнения в коротких целых ( 16 бит), достаточно cmp ax, word[...]
    Хм... не знал, а зачем тогда 64 бита?
  • Asper

    64 бита - требование операций pminsw и pmaxsw, чтобы привести значение в диапазон -10000, 0 без гемороя с ветвлениями. А дальше считаем 16 битные целые на FPU

    Code: Select all

               movd [r_vol], mm0
    .calc_amp:
               emms
               fild word [l_vol]  << short int
               ...
               ...
               ... 
               fild word [r_vol]
  • Who is online

    Users browsing this forum: No registered users and 4 guests