sound, SB, AC97 и другое
-
Further testing revealed that the problem was introduced in SVN #3727."Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
It has nothing to do with MMX. r3727 has allowed the memory previously reserved as SB16 buffer to be allocated for other goals. When SB16 code tries to reuse buffer for the sound, it destroys all data. It depends on memory size, what exactly data are destroyed, in the case of 64 Mb it turns out to be something system-critical like process page table or TSS, I didn't bothered to find out what exactly. I have fixed this in r5057.hidnplayr wrote:it means we dont catch invalid memory access through MMX registers, why dont we do this?
Сделаем мир лучше!
Ah, so the memory was'valid' but just not meant for us. Understood.
Thanks for the fix.
Thanks for the fix.
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
Я исправила щелчки в VirtualBox со звуковой картой AC97 в r5077. Если где-то перестало работать - теперь вы знаете, какую ревизию надо проверять первой.
Сделаем мир лучше!
Мышка, разъясни, пожалуйста, действие мнемоники LEAVE в твоём коде без ENTER.CleverMouse wrote:Я исправила щелчки в VirtualBox со звуковой картой AC97 в r5077. Если где-то перестало работать - теперь вы знаете, какую ревизию надо проверять первой.
Code: Select all
proc START c uses ebx esi edi, state:dword, cmdline:dword
mov eax, [srv_entry]
cmp [state], 1
jne .stop
if DEBUG
mov esi, msgInit
invoke SysMsgBoardStr
end if
test eax, eax
jnz .done
call detect_controller
ret
.stop:
test eax, eax
jz .done
leave
jmp eax
.done:
xor eax, eax
ret
endp
Code: Select all
proc START c uses ebx esi edi, state:dword, cmdline:dword
то подразумевается:
Code: Select all
push ebx
push esi
push edi
...............
некий код функции
...............
pop edi
pop esi
pop ebx
ret
Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!
Code: Select all
proc START c uses ebx esi edi, state:dword, cmdline:dword
Code: Select all
START:
push ebp
mov ebp, esp
push ebx esi edi
...define state = [ebp+8]
...define cmdline = [ebp+12]
...define ret = macro {
pop edi esi ebx
leave
ret
}
Сделаем мир лучше!
Мышка, помогите пожалуйста, если в диспетчере виндовс HDA отображен в диапазоне адресов AFDFC000 AFDFFFFF
(тоесть длинна 003FFF ), то как считать инфу собственно с HD кодека? -_-
(замапить и считать с физ адреса то непроблема)
читал исходники intel_hda.asm, большое спасибо Asper и всем фанатам лоу левела, и чтото из линуксовых материалов но так и не разобрался
раньше то кой какие наработки были под AC97, но там все через порты
извиняюсь за офтоп, это просто к теме некоторой проблематики
http://tippach.business.t-online.de/asi ... f=8&t=1077
(тоесть длинна 003FFF ), то как считать инфу собственно с HD кодека? -_-
(замапить и считать с физ адреса то непроблема)
читал исходники intel_hda.asm, большое спасибо Asper и всем фанатам лоу левела, и чтото из линуксовых материалов но так и не разобрался
раньше то кой какие наработки были под AC97, но там все через порты
Code: Select all
procedure via_ac97_write_reg (reg:byte; value:word);
var data, i : integer;
begin
data := (reg shl 16) + value;
outl (data, baseaddr + via_base0_ac97_ctrl);
end;
procedure ring0;
begin
via_ac97_write_reg (ac97_extended_status, 1);
sleep (5);
via_ac97_write_reg (ac97_pcm_front_dac_rate, 48000 ); //44100);
end;
http://tippach.business.t-online.de/asi ... f=8&t=1077
Ну если читали исходники intel_hda.asm то могли заметить, что общение с кодеком через порты там тоже предусмотрено, но не рекомендуется.
Вместо этого используются специальные циклические буферы для отправки команд (CORB) и приема данных (RIRB).
Кстати переключить драйвер на работу через порты можно выставив
но не везде реализована корректная работа в этом режиме.
Собственно в связи с этим вопрос, вы хотите написать драйвер для Win?
Вместо этого используются специальные циклические буферы для отправки команд (CORB) и приема данных (RIRB).
Кстати переключить драйвер на работу через порты можно выставив
Code: Select all
USE_SINGLE_MODE equ 1
ASIO это API или HAL драйвер, непосредственно работой с оборудованием она не занимается, поручая эту работу соответствующему WDM драйверу.microxa wrote:извиняюсь за офтоп, это просто к теме некоторой проблематики
http://tippach.business.t-online.de/asi ... f=8&t=1077
Собственно в связи с этим вопрос, вы хотите написать драйвер для Win?
Нет, интерес разве что, в пересборке-оптимизации уже написаного Realtek-ом... По реализации APIAsper:
Собственно в связи с этим вопрос, вы хотите написать драйвер для Win?
-шной части (COM-интерфейс), сделано относительно простенько, и весьма шустро (в отличии даже от asio4all), ну и
большее самообразование в этом вопросе...
А про порты - разумееться, хотелось бы забыть
хм. чтото какието непонятки со сборкой, с обьявлением публичных символов в FASM (codec.inc)
к примеру
Code: Select all
public make_codec_cmd ; +++
proc make_codec_cmd stdcall, nid:dword, direct:dword, verb:dword, parm:dword
....
public codec_exec_verb ; +++
proc codec_exec_verb stdcall, cmd:dword;, res:dword <- returned in eax
....
а стоит добавить еще один public дойдя до
Code: Select all
public snd_hda_sequence_write
proc snd_hda_sequence_write stdcall, seq:dword
Code: Select all
codec.inc [162]:
mov ecx, [esi + hda_verb.nid]
error: undefined symbol 'hda_verb.nid'.
Code: Select all
FASM.EXE intel_hda.asm -s
flat assembler version 1.71.21 (1048576 kilobytes memory)
error: write failed.
гм..
CleverMouse, ах, какой это был занимательный квест!
вначале то не разобрался что после -s должно идти выходное имя, отладочных символов формата .fas, но не всё так просто:
утилита pecvt.exe , расчитаная судя по всему на "fasm 1.67.29 with debug symbols", перестала заявлять
после маленькой поправочки" incorrect fas file signature"
Code: Select all
.004046D8: cmp d,[esi],01A736166 ;'→saf'
.004046DE: jz .000404705 --↓1
.004046E0: push 00040D498 ;'incorrect fas file signature'
.004046E5: call printf
Spoiler:
ого, не знал что новые ревизии собираются в
up:
эммм..
CleverMouse прошу извинить за дурацкий, по своей нетривиальности вопрос...
Asper еще раз, большущий респект, за такую компактную реализацию...
Ну как сказать... по крайней мере хоть и в жутко сыром виде, на чтение вроде работает...
(кой как перенесено на дельфи-асм, не обошлось без пары ерундовых bsod-ов, но кудаж без этого)
круто..format PE DLL native 0.05
up:
эммм..
CleverMouse прошу извинить за дурацкий, по своей нетривиальности вопрос...
Asper еще раз, большущий респект, за такую компактную реализацию...
Ну как сказать... по крайней мере хоть и в жутко сыром виде, на чтение вроде работает...
(кой как перенесено на дельфи-асм, не обошлось без пары ерундовых bsod-ов, но кудаж без этого)
кстати некоторый момент в коде, который не имеет возврата (на дельфи то такие конструкции автоматом подразумевают ret, поэтому ссори, что не сразу заметил)...
Code: Select all
.flat:00000E08
.flat:00000E08 ; =============== S U B R O U T I N E =======================================
.flat:00000E08
.flat:00000E08
.flat:00000E08 azx_bus_reset proc near ; CODE XREF: codec_exec_verb+45
.flat:00000E08 call azx_stop_chip
.flat:00000E0D call azx_init_chip
.flat:00000E0D azx_bus_reset endp ; sp-analysis failed
.flat:00000E0D
.flat:00000E12
.flat:00000E12 ; =============== S U B R O U T I N E =======================================
.flat:00000E12
.flat:00000E12
.flat:00000E12 azx_codec_create proc near
.flat:00000E12 push ebx
.flat:00000E13 push ecx
.flat:00000E14 push edx
viewtopic.php?f=50&t=2888 у него проблема со звуком (звуковая плата sis7012), что ему написать?
При воспроизведении mp3 АС97 громкость воспроизведения в небольшом диапазоне на железе Asus eee pc900.
На доске отладки NewVolume = 95B а MinVolume=12C0 почему то, так и должно быть?
отображает ALC662
P.S. Нетбук ещё и не сильно, но греется без нагрузки на CPU
Ещё заметил, что клавиатура в Колибри в последних сборках на Аsus сразу же устанавливается в NumLock режим (через Fn + NumLock можно переключить) а на обработку других функциональных клавиш не заметно реакции (например изменение громкости звука)
На доске отладки NewVolume = 95B а MinVolume=12C0 почему то, так и должно быть?
отображает ALC662
P.S. Нетбук ещё и не сильно, но греется без нагрузки на CPU
Ещё заметил, что клавиатура в Колибри в последних сборках на Аsus сразу же устанавливается в NumLock режим (через Fn + NumLock можно переключить) а на обработку других функциональных клавиш не заметно реакции (например изменение громкости звука)
Добавил automute. Потыкайте наушники/колонки. Звук переключается?
Да и тестировать естественно надо на реальном железе, вм пока такое не умеют.
Да и тестировать естественно надо на реальном железе, вм пока такое не умеют.
Проверил, отлично работает!
Из хаоса в космос
Who is online
Users browsing this forum: No registered users and 1 guest