Page 30 of 66

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

Posted: Sat Jan 05, 2008 12:47 pm
by Nable
В общем, сел я 31декабря писать драйвер для SB16, благо готовых для DOS достаточно, документация тоже есть. Почти закончил на бумаге(в голове, до блокнота лень тянутся), уже почти готов был реализовывать, но упёрся в очень обидную лажу:How to hook an interrupt in KOS? Not an IRQ, but INT? Для непрерывного воспроизведения нужно hook прерывание по следующеву правилу: (SB IRQ)+8, то есть, например, если SB на IRQ2, то нужно int 0xA. А текущая реализация об этом не подозревает, поэтому имеем щелчки, гудение, и прочий хлам. Если интересно, то прочитанные мной доки ныне здесь: http://www.febr7.narod.ru/sbc_prog.7z

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

Posted: Sat Jan 05, 2008 10:44 pm
by Serge
Такого правила нет. В ДОС контроллер прерываний настроен так, что IRQ_0 соответствует INT_8, а IRQ_2 - INT_0x0A. В Колибри IRQ_0 = INT_0x20. Если надо установить обработчик IRQ есть импортируемая AttachIntHandler или attach_int_handler если драйвер в ядре.
P.S. Часть irq уже занята так что доступны 5,7,9,0xA,0xB.

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

Posted: Wed Jan 09, 2008 2:17 pm
by Nable
to Serge
То есть на самом деле для своевременной подгрузки данных нужно ждать поступления соответствующего IRQ? Я об этом подозревал, но недостаток опыта сказался. Однако что делать, если мой PNP BIOS выделяет для SB карточки IRQ_2?
В каком формате и как передаёт AC97WAV проигрыватель данные драйверу? В существующих драйверах я разобрался, но недостаточно, остались неясными вышеописанные моменты.

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

Posted: Fri Jan 11, 2008 6:34 am
by Serge
Плеер не работает непосредственно с драйвером железа. Это делает infinity - системный ресемплер/микшер. При каждом прерывании драйвер вызывает callback функцию которая записывает смикшированный звук в первичный буфер в формате 16 бит стерео 48КГц. Это не очень совместимо с SB потому что у него максимум 44100, но ресемплеры можно настроить на этот формат. За каждое прерывание записывается 16 Кб. Этого достаточно для равномерного проигрывания.
Irq_2 довольно нестандартный вариант. Стоит посмотреть распределение прерываний в системе. Попробуй назначить прерываение вручную или отключить ненужные порты, особенно usb. В крайнем случае можно и ядро поправить. Это совсем не сложно.

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

Posted: Fri Jan 11, 2008 10:50 am
by Nable
to Serge
Спасибо за информацию. Буду копаться, если не разберусь спрошу ещё.

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

Posted: Fri Jan 11, 2008 12:56 pm
by Serge
Надо учесть ещё один момент.
AC97 DMA работает со списками буферов (BDL) аналогично IDE. Первичный буфер в 64 Кб разбит на четыре части по 16 Кб которые проигрываются по-кругу без остановок.
Когда происходит прерывание данные для буфера который должен воспроизводиться уже полностью готовы и выбираются ДМА немедленно, а микшер производит запись в следующий сегмент. При такой схеме нет щелчков если прерывания надолго замаскированы, а в Колибри такое бывает.

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

Posted: Mon Jan 14, 2008 11:23 am
by Nable
to Serge
У SB это называется auto-init DMA mode. Буфер какого-либо размера разбит на два (в документации это называется наоборот - создан буфер двойного размера), он заполнен данными, которые в цикле проигрываются, пока не сбросят карту или не прервут этот режим соответствующей командой, когда доходит до середины буфера, генерится прерывание, хэндлер которого заполняет первую половину буфера новыми данными, пока воспроизводится вторая. Когда она закончится снова идёт переход к первой половине, генерится прерывание, оповещающие о необходимости записать новые данные в неё, далее процесс повторяется, пока не произойдёт нечто прерывающее этот процесс (смотри выше). Т.е. как я понимаю у AC97 то же, что и у SB, только вместо 2 частей - 4.

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

Posted: Mon Jan 14, 2008 12:42 pm
by Serge
В общем похоже, только интелловские контроллеры не умеют гонять буферы по кругу. Они работают со списком буферов (BDL) и когда доходят до конца списка останавливаются. Максимум в списке 32 элемента и номер последнего элемента записывается в регистр lvi(last valid index). Чтобы не мудрить с BDL я заполнил его последовательно адресами сегментов 0 1 2 3 0 1 2 3... и после каждого прерывания по кругу обновляю lvi. В принципе можно обойтись и двумя сегментами. Раньше я писал в буфер с запасом, потом выяснил что система успевает обработать прерывания, но схему менять не стал.

В тему

Posted: Sat Feb 02, 2008 4:01 pm
by Dron2004
Ура, товарищи! Материнка ASUS P4P800-E Deluxe, чипсет Intel 865PE, интегрированный звук Realtek ALC850 - Ac97-плеер РАБОТАЕТ!

С большим удовольствием послушал "Аквариум" под Колибри.

Всем, всем - ОГРОМНОЕ СПАСИБО!

Image

: Входя на форум, в поле "Логин", я ввёл "root"... Но потом, призадумавшись, стёр и ввёл-таки своё имя пользователя. :D :D :D

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

Posted: Sat Feb 02, 2008 11:19 pm
by Alver
Версия драйвера sis.obj на svn не рабочая (по крайней мере у меня), в дистре 0710 (вродебы) и в Колибри AZ от Diamonda также, а в 0700 вполне работоспособная.
Для последнего драйвера доска выдает чтото типа:

detect hardvare
Silicon Integrated Systems
7012 AC97 controller
PCI command 00000005
PCI status 00000290
codec io base 0000E001
controller io base 0000E401
codec mmio base 00000000
controller mmio base 00000000
global control 00000002
global status 00300100
device not found
Sound service not loaded
Sound service not installed

А для драйвера из 0700:

detect hardvare
Silicon Integrated Systems
7012 AC97 controller
init codec
global control 00000002
global status 00300100
unknown manufacturer
unknown chip
create primary buffer
service installed

У меня встроенная звуковуха SiS7012 на материнке SIS 651-M (Чипсеты: SIS650GX B0 Northbridge и SIS962L Southbridge (так в книжке написано))

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

Posted: Sun Feb 03, 2008 1:01 am
by Serge
Alver
Проверь последний SVN и напиши работает или нет. Там какая-то фигня непонятная с кодеком.

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

Posted: Sun Feb 03, 2008 5:01 pm
by Alver
Serge

Проверил, теперь работает.

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

Posted: Sun Feb 03, 2008 11:51 pm
by Serge
Alver

А что пишет ? Чип кодека определяется ?

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

Posted: Tue Feb 05, 2008 9:29 pm
by Alver
Serge
Пишет типа этого:
detect hardvare
Silicon Integrated Systems
7012 AC97 controller
PCI command 00000005
PCI status 00000290
codec io base 0000E001
controller io base 0000E401
codec mmio base 00000000
controller mmio base 00000000
global control 00000002
global status 00300100
unknown codec id 00004961
create primary buffer ...done
start play

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

Posted: Tue Feb 05, 2008 11:53 pm
by Serge
Alver
Похоже это CMedia 9739, только id чипа читается не полностью. А в Win или другим программами удаётся определить чип ?