Оказывается в моем случае ac97snd все же работает. Только не понятно как его запускать. Получилось только через KFM. Через cmd и коммандную строку из меню, ничего не вышло.
Делал так: ac97snd /hd0/1/test.mp3
..bw
sound, SB, AC97 и другое
OFFTOP
Наличие 2-х сетевых карт часто приводит к проблемам даже в ХР. Я еще не на одном компе не смог нормально заставить работать вторую сетевуху.
А однажды когда воткнул контроллер USB в PCI относительно старого компа (что-то вроде Celeron333), то он вообще отказывался включаться.
/OFFTOP
Наличие 2-х сетевых карт часто приводит к проблемам даже в ХР. Я еще не на одном компе не смог нормально заставить работать вторую сетевуху.
А однажды когда воткнул контроллер USB в PCI относительно старого компа (что-то вроде Celeron333), то он вообще отказывался включаться.
/OFFTOP
Quantum
Виснет драйвер из архива ? Я тестил его на ICH5 - никакиз проблем
Виснет драйвер из архива ? Я тестил его на ICH5 - никакиз проблем
2 Serge:
Да, виснет именно драйвер из архива (который ставит IRQ 5). На ICH6 виснет поток, а на ICH - система. На данный момент на обоих машинах со всеми версиями драйвера и всеми конфигурациями pic было зафиксировано 3 возможных варианта развития событий:
1. Либо выводится ошибка при запуске драйвера (устройство не найдено, irq не валидный и т.д.) В этом случае ничего не виснет.
2. Либо драйвер загружается без ошибок, но первый SND_OUT (а конкретнее функция wave_out из infinity.asm) приводит к зависанию.
3. Либо при назначении/переназначении прерывания всё виснет. При этом на доску ничего не выводится (не успевает). До SND_OUT дело даже не доходит.
В предыдущих постах я описал каким версиям драйвера и при какой конфигурации наблюдаются данные симптомы.
Встроенная утилита для тестирования железа OEM, которая загружается биосом из нулевого раздела ЖД, определила мой кодек ICH6 так:
Intel ICH6 Audio with AD1980
AC'97 controller revision 03h
AC'97 controller I/O base E8C0h
Codec I/O base addres EC00h
IRQ 4
PIC 8259 compatible
Значения сходятся с теми, что выдаёт твой драйвер. Только адреса mmio тут не указаны.
Данная утилита провела ряд тестов кодека (reset, suspend, аналоговое и цифровое проигрывание, сурраунд и т.д.) - все тесты завершились успешно. В логе я заметил упоминание чего-то вроде windows sound system, встроенного в кодек.
Может, есть возможность исправить обработчик установленного IRQ, чтоб он работал даже если прерывание зашарено?
Кстати, я уже практически дописал дистрибутив uFMOD для Колибри. Раз уж мне не суждено пока послушать его персонально, может, я его вышлю тебе для тестов?
2 Mario79:
Обе сетевухи я отключил перед тестированием.
Да, виснет именно драйвер из архива (который ставит IRQ 5). На ICH6 виснет поток, а на ICH - система. На данный момент на обоих машинах со всеми версиями драйвера и всеми конфигурациями pic было зафиксировано 3 возможных варианта развития событий:
1. Либо выводится ошибка при запуске драйвера (устройство не найдено, irq не валидный и т.д.) В этом случае ничего не виснет.
2. Либо драйвер загружается без ошибок, но первый SND_OUT (а конкретнее функция wave_out из infinity.asm) приводит к зависанию.
3. Либо при назначении/переназначении прерывания всё виснет. При этом на доску ничего не выводится (не успевает). До SND_OUT дело даже не доходит.
В предыдущих постах я описал каким версиям драйвера и при какой конфигурации наблюдаются данные симптомы.
Встроенная утилита для тестирования железа OEM, которая загружается биосом из нулевого раздела ЖД, определила мой кодек ICH6 так:
Intel ICH6 Audio with AD1980
AC'97 controller revision 03h
AC'97 controller I/O base E8C0h
Codec I/O base addres EC00h
IRQ 4
PIC 8259 compatible
Значения сходятся с теми, что выдаёт твой драйвер. Только адреса mmio тут не указаны.
Данная утилита провела ряд тестов кодека (reset, suspend, аналоговое и цифровое проигрывание, сурраунд и т.д.) - все тесты завершились успешно. В логе я заметил упоминание чего-то вроде windows sound system, встроенного в кодек.
Может, есть возможность исправить обработчик установленного IRQ, чтоб он работал даже если прерывание зашарено?
Кстати, я уже практически дописал дистрибутив uFMOD для Колибри. Раз уж мне не суждено пока послушать его персонально, может, я его вышлю тебе для тестов?
2 Mario79:
Обе сетевухи я отключил перед тестированием.
В /programs/media/ac97snd/trunk отсутствуют проекты pe2kos, pow_test, ac97 и sound. mp3dec и mpg со скрипом собрались.
Quantum
http://infinity-sound.narod.ru/ich6.7z Ядро пропатчено, теперь irq3 и 4 доступны.
Есть подозрение что БИОС назначает прерывание на ICH0 но забывает записать PCICFG. Проверь этот драйвер. Меня интересует строка irq remap и ещё create primary buffer... done.
http://infinity-sound.narod.ru/ich6.7z Ядро пропатчено, теперь irq3 и 4 доступны.
Есть подозрение что БИОС назначает прерывание на ICH0 но забывает записать PCICFG. Проверь этот драйвер. Меня интересует строка irq remap и ещё create primary buffer... done.
Serge
Проверил на старом ICH. Теперь я вообще ничего не понимаю. При первом тесте вышло вот что:
irq remap
00000009
потом уже знакомые данные и потом:
create primary buffer...done
IRQ что-то invalid or not assigned
Service not loaded
А недоумение у меня вызывает IRQ, т.к. судя по pcidev на IRQ 9 висит девайс начинающийся на "serial" (полное название не видно, т.к. разрешение 640x480) Оба ком-порта у меня назначены на IRQ 3 и 4. Поэтому я думаю, что этот "serial" - USB.
Тогда я зарезервировал в настройках биоса IRQ 9 и снова попробовал загрузить драйвер:
irq remap
0000000B ; почему теперь 11 а не 9???
далее идут сообщения идентичные прежним.
В этот момент IRQ B назначен тому же "serial", котоый раньше висел на 9м.
На ICH6 ещё не тестил.
Проверил на старом ICH. Теперь я вообще ничего не понимаю. При первом тесте вышло вот что:
irq remap
00000009
потом уже знакомые данные и потом:
create primary buffer...done
IRQ что-то invalid or not assigned
Service not loaded
А недоумение у меня вызывает IRQ, т.к. судя по pcidev на IRQ 9 висит девайс начинающийся на "serial" (полное название не видно, т.к. разрешение 640x480) Оба ком-порта у меня назначены на IRQ 3 и 4. Поэтому я думаю, что этот "serial" - USB.
Тогда я зарезервировал в настройках биоса IRQ 9 и снова попробовал загрузить драйвер:
irq remap
0000000B ; почему теперь 11 а не 9???
далее идут сообщения идентичные прежним.
В этот момент IRQ B назначен тому же "serial", котоый раньше висел на 9м.
На ICH6 ещё не тестил.
На ICH6 теперь ЗАРАБОТАЛОООО!!! Но пока не совсем корректно. В отладочный буфер выводится пулемётная очередь из сообщений "AC97 IRQ". Поэтому звук очень обрывочный. Да и шапку сообщений при инициализации драйвера не видно. Убери этот "AC97 IRQ" скорее
Quantum
Я был прав. БИОС действительно назначает прерывание ICH0 и забывает записать номер в PCICFG.
Потому система висла когда я переназначал прерывание.
Для ICH6 скачай последний SVN и замени строку
ATTCH_IRQ equ 0000111010111000b
Я был прав. БИОС действительно назначает прерывание ICH0 и забывает записать номер в PCICFG.
Потому система висла когда я переназначал прерывание.
Для ICH6 скачай последний SVN и замени строку
ATTCH_IRQ equ 0000111010111000b
Quantum
Сделал патч для ICH0 и залил на SVN. Надо просто скомпилировать без изменений.
Для ICH6 добавил директивы условной компиляции USE_COM_IRQ в kernel.asm и sound.asm, если не удаётся выбрать подходящее прерывание в БИОС.
Сделал патч для ICH0 и залил на SVN. Надо просто скомпилировать без изменений.
Для ICH6 добавил директивы условной компиляции USE_COM_IRQ в kernel.asm и sound.asm, если не удаётся выбрать подходящее прерывание в БИОС.
Так-с. Начнём с хорошей новости: на ICH теперь всё замечательно работает!!!
А теперь плохая новость: на ICH6 при первом тесте система зависла. Тогда я решил закомментировать ugly bios patch, т.к. касательно конфигурации ICH6 он всё равно не нужен. После этого кодек заработал, но с заметными тормозами, хотя тут я использую совсем простенький и коротенький wav. По сравнению с ICH (PIII и всего 64Мб памяти), где теперь прекрасно проигрываются mp3, ICH6 (PIV и 512Мб памяти) немного тормозит даже при проигрывании wav, а mp3 я пока не могу тут попробовать.
И ещё напрягает, что нужно всё время переключать колонки с основного разьёма в другой. Гугл нашёл несколько сообщений в разных *никсовых форумах о похожей проблеме: на SoundMAX'е AD1980 при использовании старых драйверов OSS/ALSA звук выводиться не в тот разьём. Установка новых драйверов устраняет проблему.
Но в целом прогресс на лицо - это здорово!
А теперь плохая новость: на ICH6 при первом тесте система зависла. Тогда я решил закомментировать ugly bios patch, т.к. касательно конфигурации ICH6 он всё равно не нужен. После этого кодек заработал, но с заметными тормозами, хотя тут я использую совсем простенький и коротенький wav. По сравнению с ICH (PIII и всего 64Мб памяти), где теперь прекрасно проигрываются mp3, ICH6 (PIV и 512Мб памяти) немного тормозит даже при проигрывании wav, а mp3 я пока не могу тут попробовать.
И ещё напрягает, что нужно всё время переключать колонки с основного разьёма в другой. Гугл нашёл несколько сообщений в разных *никсовых форумах о похожей проблеме: на SoundMAX'е AD1980 при использовании старых драйверов OSS/ALSA звук выводиться не в тот разьём. Установка новых драйверов устраняет проблему.
Но в целом прогресс на лицо - это здорово!
Не работает SND_GETPOS. Глянув в исходник infinity.asm, стало ясно, что эта функция возвращает не курсор проигрывания в буфере, а курсор + базу буфера. Исправил код на такой:
mov ebx, [edx+STREAM.in_rp]
sub ebx,[edx+STREAM.in_base] ; добавил эту строчку
xor eax, eax
ret
Теперь в отладчике всегда получаю одно значение: 0x4080. Что делать?
Судя по исходнику, курсор in_rp оновляется по ходу проигрывания внутри wave_out. Но я не посылаю SND_OUT, а заполняю сначала весь буфер через SND_SETBUFF, потом посылаю SND_PLAY и по ходу проигрывания (SND_GETPOS) дозаполняю буфер через SND_SETBUFF.
Переделал пока библиотеку под SND_OUT и убрал SND_GETPOS, но поток почему-то сильно тормозит.
mov ebx, [edx+STREAM.in_rp]
sub ebx,[edx+STREAM.in_base] ; добавил эту строчку
xor eax, eax
ret
Теперь в отладчике всегда получаю одно значение: 0x4080. Что делать?
Судя по исходнику, курсор in_rp оновляется по ходу проигрывания внутри wave_out. Но я не посылаю SND_OUT, а заполняю сначала весь буфер через SND_SETBUFF, потом посылаю SND_PLAY и по ходу проигрывания (SND_GETPOS) дозаполняю буфер через SND_SETBUFF.
Переделал пока библиотеку под SND_OUT и убрал SND_GETPOS, но поток почему-то сильно тормозит.
Last edited by Quantum on Fri Jul 06, 2007 10:49 pm, edited 1 time in total.
Quantum
SND_GETPOS предназначена только для статических буферов, SND_PLAY и SND_SETBUFF игнорируют буферы с флагом PCM_OUT. Смотри исходники внимательнее.
Если звук создан с флагом PCM_OUT то звук выводится только через вызов SND_OUT. Других вариантов нет.
>После этого кодек заработал, но с заметными тормозами
Я уже не понимаю этих проблем с ICH6. Чипсет практически копия ICH5 и виснуть не должен. И откуда берутся тормоза ? Что показывает CPU ? Как распределяется загрузка процессов. У меня mp3 проигрываются без сбоев при работающем лабиринте со 100% загрузкой процессора. Кстати какие прерывания БИОС назначила COM портам ? И ещё предыдущая версия выводила AC97 IRQ. Эта надпись появляется если только загрузить драйвер ? Например запустить ac97snd без параметров после загрузки системы ?
SND_GETPOS предназначена только для статических буферов, SND_PLAY и SND_SETBUFF игнорируют буферы с флагом PCM_OUT. Смотри исходники внимательнее.
Code: Select all
proc play_buffer stdcall, str:dword, flags:dword
mov ebx, [str]
mov eax, [ebx+STREAM.format]
test eax, PCM_OUT
jnz .fail
proc GetBufferPos stdcall, str:dword
mov edx, [str]
test [edx+STREAM.format], PCM_OUT+PCM_RING
jnz .fail
proc set_buffer stdcall, str:dword,src:dword,offs:dword,size:dword
mov edx, [str]
test [edx+STREAM.format], PCM_OUT
jnz .fail
>После этого кодек заработал, но с заметными тормозами
Я уже не понимаю этих проблем с ICH6. Чипсет практически копия ICH5 и виснуть не должен. И откуда берутся тормоза ? Что показывает CPU ? Как распределяется загрузка процессов. У меня mp3 проигрываются без сбоев при работающем лабиринте со 100% загрузкой процессора. Кстати какие прерывания БИОС назначила COM портам ? И ещё предыдущая версия выводила AC97 IRQ. Эта надпись появляется если только загрузить драйвер ? Например запустить ac97snd без параметров после загрузки системы ?
2 Serge:
> SND_GETPOS предназначена только для статических буферов
Да, я уже заметил комментарий в исходнике. Такие пометки нужно указывать хотя бы в заголовочном файле, раз уж документации пока нет. Статический буфер - это буфер, который проигрывается без зацикливания или с чем это вообще едят?
> SND_PLAY и SND_SETBUFF игнорируют буферы с флагом PCM_OUT.
Этот флаг у меня явно не указан. Зачем он предусмотрен?
> Чипсет практически копия ICH5 и виснуть не должен.
После того как я закомментировал твой патч (который предназначен для ICH), зависания на ICH6 больше не наблюдалось. Возможно, он и не тормозит даже. По крайней мере простейший wav уже играет нормально.
> И ещё предыдущая версия выводила AC97 IRQ. Эта надпись появляется если только загрузить драйвер ?
Без параметров тогда запускать не пробовал. Позже проверю.
> SND_GETPOS предназначена только для статических буферов
Да, я уже заметил комментарий в исходнике. Такие пометки нужно указывать хотя бы в заголовочном файле, раз уж документации пока нет. Статический буфер - это буфер, который проигрывается без зацикливания или с чем это вообще едят?
> SND_PLAY и SND_SETBUFF игнорируют буферы с флагом PCM_OUT.
Этот флаг у меня явно не указан. Зачем он предусмотрен?
> Чипсет практически копия ICH5 и виснуть не должен.
После того как я закомментировал твой патч (который предназначен для ICH), зависания на ICH6 больше не наблюдалось. Возможно, он и не тормозит даже. По крайней мере простейший wav уже играет нормально.
> И ещё предыдущая версия выводила AC97 IRQ. Эта надпись появляется если только загрузить драйвер ?
Без параметров тогда запускать не пробовал. Позже проверю.
Патч не должен виснуть. Это альтернативный способ узнать линию IRQ. Он универсален и годится для любого интелловского чипсета.
Есть три вида буферов - статические (PCM_STATIC), потоковые (PCM_OUT) и кольцевые (PCM_RING).
Самый простой для програмирования - потоковый. Просто создаешь буфер и потом выводишь в него данные при помощи WaveOut() (SND_OUT). Статического буфер не сильно отличается от буфера в DirectSound. SND_SETBUFF заполняет буфер, SND_GETPOS и SND_SETPOS получают и устанавливают текущую позицию в буфере. В SND_GETPOS действительно ошибка, правильный код
mov ebx, [edx+STREAM.in_rp]
sub ebx, [edx+STREAM.in_base]
sub ebx, 128
xor eax, eax
ret
Кольцевой предназначен специально для игр потому что позволяет выводить звук с маленькой задержкой. Это аналог Direct Sound буфера с событиями, поделённого на две части.
Есть три вида буферов - статические (PCM_STATIC), потоковые (PCM_OUT) и кольцевые (PCM_RING).
Самый простой для програмирования - потоковый. Просто создаешь буфер и потом выводишь в него данные при помощи WaveOut() (SND_OUT). Статического буфер не сильно отличается от буфера в DirectSound. SND_SETBUFF заполняет буфер, SND_GETPOS и SND_SETPOS получают и устанавливают текущую позицию в буфере. В SND_GETPOS действительно ошибка, правильный код
mov ebx, [edx+STREAM.in_rp]
sub ebx, [edx+STREAM.in_base]
sub ebx, 128
xor eax, eax
ret
Кольцевой предназначен специально для игр потому что позволяет выводить звук с маленькой задержкой. Это аналог Direct Sound буфера с событиями, поделённого на две части.
Who is online
Users browsing this forum: No registered users and 1 guest