Posted: Wed Feb 15, 2006 9:02 am
По IRQ или по значениям портов, которые зависят от звуковой карты.
Процедура shed обрабатывает IRQ 0 (и переключает задачи).
Процедура shed обрабатывает IRQ 0 (и переключает задачи).
А должно всё это зависеть от драйвераПо IRQ или по значениям портов, которые зависят от звуковой карты
Мдя, вставил перед вызовом PlayNote, предварительно переведя систему на 44100. Сразу пришлось убрать из загрузки скринсейвер (мешает собака, каждую секунду вылезает), система начала тормозить.Процедура shed обрабатывает IRQ 0 (и переключает задачи).
Code: Select all
uglobal
some_mem rb 4096
endg
А я вот в цикле переключения задач не могу разобраться3. Специалистов по звуку нет...
cmp [virtual_timer_tick],441С слишком частым переключением задач можно бороться переключая задачи только каждый 441 раз
Я уже в нём ковыряюсь, кое что придётся изменить. Заодно драйвер звука, при невозможности выполнить какое-либо действие, в eax будет выдавать код ошибки. Так программы будут узнавать загрузился звуковой блок или нет. Может после этого моя C-Media не будет вешать систему.Как именно SB определяет момент передачи данных я не знаю - надо смотреть в его исходники.
Зачем нужны адреса 2B0000 -> 2B00FF ? Может 2B0000 -> 2BFFFF выделить для второго звукового буфера?2A0000 -> 2B00ff wav device data
Code: Select all
irq0:
save_ring3_context
mov ax, os_data
mov ds, ax
mov es, ax
cmp [virtual_counter],441
je .norm
cmp [0xffff],byte 2
je .norm
inc [virtual_counter]
inc [context_counter]
; call your_play_sound
mov al,0x20 ; send End Of Interrupt signal
mov dx,0x20
out dx,al
restore_ring3_context
iret
.norm:
mov [virtual_counter],0
;далее идет mov edi,[0x3000] и.т.д.
;где-то далее добавь строчку virtual_counter dd ?
м-да... похоже ты меня "не услышал". Математика, даже самая простая, все же наука о фактах :0) если без ошибок считать. Делать, в смысле творить, хорошее занятие и полезное, но ведь еще лучше, когда есть максимум пользы и не только 2-3 людям... Советую еще раз прикинуть вопрос о тактировании COVOX`а его потребности в частоте, качестве 8 битного LPT ЦАП с учетом еще и того что это моно... Ну реально желающих будет, столько, столько тех кто хотел бы удовлетворить свое любопытство, скажем, в таком вопросе как АЦП-ЦАП и выделение огибающей сигнала...Hater wrote:я предлагаю не новый стандарт, а всего лишь альтернативу, на уровне исходников, которые можно распространять вместе с основными исходниками. Для тех людей, чья звуковуха пока не поддержана - возможность вразрез производительности получить функциональность. По этому затею с COVOX'ом бросать не собираюсь.
Спасибо. Отчет в принципе имеется, а чего нет, писал. Ну если будет желание или придешь в результате к AC97, скажешь сам. Мыло в перечне пользователей видно.Hater wrote: По поводу AC97. У меня VIA8233, но я ей не пользуюсь (использую какую-то C-Media 5.1). Для проверки твоей программы пришлось в биосе её включить. Звука, как ты уже писал, не было. По этому могу пока отослать отчёт. Если укажешь мыло. Пока в данном девайсе не разбирался, но в дальнейшем придётся, т.к. у нас это более распространённая девайсина чем от интела.
Code: Select all
servetable:
;...
dd my_function
;...
my_function:
;передача данных приложению через регистры
mov [esp+36],eax_value
mov [esp+24],ebx_value
mov [esp+32],ecx_value
mov [esp+28],edx_value
mov [esp+12],esi_value
mov [esp+8],edi_value
ret
могу привести все исходники, хотя разобраться в них будет непросто (для вычислений номера буфера, куда можно заносить новый блок, использовал булевы операции)Use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x820000 ; memory for app
dd 0x820000-0x10000 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon