Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вс апр 30, 2017 12:16 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 33 сообщения ]  На страницу 1 2 3 След.
Автор Сообщение
 Заголовок сообщения: Драйвер звука для COVOX'а
СообщениеДобавлено: Чт янв 19, 2006 2:06 am 
Не в сети

Зарегистрирован: Сб янв 07, 2006 4:07 am
Сообщения: 43
Вот написал я драйвер для ковокса под колибри в виде SB16.inc, но необходимо выполнять задержку. Для этого нуждаюсь в куске кода выполняющего её (с использованием таймера или любого другого средства).


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пт янв 20, 2006 1:29 pm 
Код:
;delay for 0.1 second
  mov  eax,[timer_ticks]
.loop:
  mov  ebx,[timer_ticks]
  sub  ebx,eax
  cmp  ebx,10 ;wait 10*0.01 second
  jge  .endloop
  call change_task
  jmp  .loop
.endloop:


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 04, 2006 3:45 pm 
Не в сети

Зарегистрирован: Сб янв 07, 2006 4:07 am
Сообщения: 43
Мне немного другая задержка необходима, но всё равно, спасибо. Надо в 1/44100 или 1/22050 и так далее. В голову приходят только два способа:
1. Временно сохранить значения регистров таймера и запрограммировать для задержки в 1/44100 секунды. Затем, по прерыванию от таймера пересылать байт из буфера в ковокс. По окончании воспроизведения вернуть состояние таймера в прежнее положение.
но тут есть серьёзный недостаток, на сколько я понял, система замрёт на время воспроизведения звукового блока, а между воспроизведением следующего блока пройдёт немало времени.
2. Перевести систему на 44100 переключений в секунду. И перед каждым переключением выполнять проверку на необходимость воспроизведения. И если надо воспроизводить, то пересылаем из буфера байт на ковокс, а затем выполняем переключение между процессами.
Тут тоже не всё гладко. Придётся переписывать некоторые функции, например- задержка в 1/100 сек.

Какие мнения по этому поводу?

А теперь основной вопрос. Используя первый метод, необходимы три куска кода для:
1.Сохранение состояния таймера, и программироваие его на новую величину- 44100, 22050, 11025, 8000.
2.Непосредственное выполнение задержки.
3.Восстановление таймера.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 04, 2006 5:15 pm 
Hater
Нахрена козе баян, а волку жилетка?
Это я к тому, что у тебя склонность как у любого начинающего программера (или генерала) решать проблемы в лоб. А обходные маневры на что? Это китайцев много, а нас мало...
Какой смысл дергать систему ради всего одного устройства, которое к тому же не часто встретишь на компах.
Может стоит запрограммировать контроллер DMA? Его всего то придется один раз запрограммировать, а дальше, оно без процессора шпарить будет.


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 09, 2006 8:42 pm 
Не в сети

Зарегистрирован: Сб янв 07, 2006 4:07 am
Сообщения: 43
Изучил (поверхностно) этот самый DMA. Много думал, ничего не понял. Как запрограммировать DMA для того, чтобы на порт принтера отправлять по одному байту 44100 раз в секунду, ведь ковокс- это всего лишь ЦАП и никаких синхросигналов и запросов у него нет?
Схема его очень простая, и спаять её может даже школьник, который знает что такое резистор. Подключается всё это дело к LPT. Лично моё мнение - ковокс может стать доступной альтернативой стандартному SB из за своей простоты. И вообще для неимущих необходимы нулевые драйверы некоторых устройств. Например по причине отсутствия SB у меня не идёт квака.

P.S. Продолжаю ждать ваших мнений по таймеру и DMA. Мне нужна ваша помощь, а то заброшу это дело!


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 09, 2006 11:32 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 19, 2005 4:43 pm
Сообщения: 896
Я так понимаю многие читатели этой темы не знают,что такое COVOX.Вот здесь
( http://www.sheppard.ru/articles/fe/covox/index.shtml) подробно обьяснено: что такое COVOX,как его сделать самому(очень просто! ),есть пример программы(на assemblere и Pascal),воспроизводящей звук через COVOX.

Человек,прочитавший эту статью,поймет,что НИКАКОГО DMA в COVOX'e НЕТ И НЕ БУДЕТ.

Hater,есть только один выход из этой проблемы - выводить звук в определенные интервалы времени.Например выводить звук 1/100 секунды,а следующую 1/100 секунды не выводить(чтобы другим программам было время),а потом обратно и т.д.При таких небольших задержках человек не заметить "заикания" звука.Причем драйвер можно писать прямо из Колибри(как драйвер принтера от Михаила Лизовина).


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 10, 2006 1:06 am 
извиняюсь за оффтоп, но ведь есть куча инфы по саунд бластерам, почему бы не написать к ним драйвера? нпр. тут [http://copyhere.by.ru/pub/sblaster.zip и http://copyhere.by.ru/pub/sbprogs.rar] инфа под все (вроде бы) старые и новые СБ (правда на саксе)
так же интересно будет почитать http://geom.mgsu.ru/Docs/CodeNet/www.co ... sbprot.htm, http://geom.mgsu.ru/Docs/CodeNet/www.co ... sbprot.htm, и http://www.megalib.com/books/923/c20.htm

Поддержка любого оборудовани (особенно такого экзотического) НУЖНА!, но зачем тратить драгоценные усилия на это, если есть возможность написать более стоющую программу.


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 10, 2006 7:31 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 19, 2005 4:43 pm
Сообщения: 896
В книге Зубкова С.В "Assembler для DOS,Windows и Unix" прекрасно описано устройство SoundBlasterов.А на странице 341 написано как его инициализировать(вы ведь в виндовс не перебираете порты вручную).Вся документация есть,только этим пока никто не занимается.

Кстати,есть программы эмулирующие на COVOX SoundBlaster 1.0.Я вот подумал,наверное драйвер COVOX'а лучше писать не из Колибри,а в коде самой ос,потомучто у COVOX'а нет автоинициализации.Тогда воспроизведение музыки можно будет делать все также через 55-ю функцию.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 10, 2006 6:18 pm 
Не в сети

Зарегистрирован: Сб янв 07, 2006 4:07 am
Сообщения: 43
Цитата:
Кстати,есть программы эмулирующие на COVOX SoundBlaster 1.0.Я вот подумал,наверное драйвер COVOX'а лучше писать не из Колибри,а в коде самой ос,потомучто у COVOX'а нет автоинициализации.Тогда воспроизведение музыки можно будет делать все также через 55-ю функцию.

Дык, а я про что в первой мессаге писал и в третьей тоже. Я уже написал драйвер, он полностью эмулирует SB и 55-ю функцию, но есть проблема с синхронизацией звука. Прочитай мои выводы по этому поводу во 2-ом (моём) сообщении.

А по поводу Звуковых карт, у меня их 2. Ac97 VIA и C-Media 5.1, но на все карты я написать не в состоянии.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 10, 2006 7:21 pm 
Hater
Да жаль, что нету у COVOX никаких запросов.
Тогда есть вариант с включением вызова драйвера в процедуру переключающую задачи (call change_task). Так можно запрашивать проверку достаточно часто. Правда возникает вопрос, как считать время. Вернее откуда его брать, ведь таймер работает на 1/100.
У меня тоже нету SB, однако, Квака нормально идет - сконфигурируй setup программы и должно работать.

andrew_programmer
Так не получится. Будет выводиться 1/100 сек звука, и на всех остальные приложения будет молчать - максимальная задержка 255*1/100 секунды, что точно неприемлемо.

DoomEd Archangel
Для того чтобы написать драйвер устройства надо это устройство иметь в наличии.


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 10, 2006 10:12 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 19, 2005 4:43 pm
Сообщения: 896
На процессорах Pentium и Celeron можно использовать команду rdtsc,а вот на процессорах от AMD вроде такой команды нет(хотя может в новых процессорах и появилась).


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 11, 2006 12:19 pm 
Не в сети

Зарегистрирован: Сб янв 07, 2006 4:07 am
Сообщения: 43
andrew_programmer
Цитата:
На процессорах Pentium и Celeron можно использовать команду rdtsc

Я уже над этим задумывался, но для подсчёта времени необходимо, как минимум, знать частоту проца

Пока пришёл к выводу, что необходимо перевести систему на 44100 переключений (пока без изменений 5-й функции) и перед каждым переключением обращаться к драйверу ковокса.
Куда поставить call драйвер ?
Где и на какое значение нужно изменить время задержки для таймера?


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 11, 2006 3:11 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 19, 2005 4:43 pm
Сообщения: 896
Лучше уж использовать rtdsc,чем перепрограммировать системный таймер.А для определения частоты процессора в Колибри есть функция 18/5.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 11, 2006 7:59 pm 
Hater
1) Все прерывания обрабатываются в sys32.inc - тебе нужно IRQ 0
2) kernel.asm
; TIMER SET TO 1/100 S

mov esi,boot_timer
call boot_log
mov al,0x34 ; set to 100Hz
out 0x43,al
mov al,0x9b ; lsb 1193180 / 1193
out 0x40,al
mov al,0x2e ; msb
out 0x40,al
Однако возникнет много накладок, так как много чего привязано на таймер и будет работать не правильно.


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 14, 2006 10:38 pm 
Не в сети

Зарегистрирован: Сб янв 07, 2006 4:07 am
Сообщения: 43
Цитата:
1) Все прерывания обрабатываются в sys32.inc - тебе нужно IRQ 0

А можно немного подробнее, я не разобрался куда именно.

Драйвер почти переделал, скоро будет готов. Пока не наделал лишних ошибок, хотелось бы выяснить, каким образом программа (например стандартный WAV плеер) узнаёт, что можно заносить новую порцию звука в буфер?


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 33 сообщения ]  На страницу 1 2 3 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB