Основная проблема в том, что отсутствует промежуточное звено между драйверами и программами: программа>интерфейс>драйвер. Именно стандартный интерфейс (простой и удобный), может упростить написание драйверов.
Hater
А что ты называешь "стандартным интерфейсом" ?
Есть вызов 68.17 который отправляет драйверу сообщения в виде struc IOCTL. Вот и весь интерфейс, примерно такой же как и в других системах. Есть статья diamond-a с примером создания драйвера, дополнительные комментарии к ней на форуме (ссылку не помню) и готовые драйверы для примера.
Есть ли возможность написать драйвер, выводящий музыку через PC-Speaker? Гдето я видел на паскале прогу, которая проигрывала на нём Wav-ики. Качество приемлемое, особенно, если не имеешь альтернатив. Как пример - игра RoketZ, умела проигрывать музыку через спикер, только для этого её надо было изпод доса запускать (там таймер нужен высокочастотный, который винда походу для переключения задач использовала), а мне было лень дос ставить, настраивать...
Для PC-Speaker'а драйверы не нужны, для проигрывания музыки на нём есть специальные системные функции. В качестве примера - приложение midamp и файл kuzkina.mid на рамдиске, который можно запустить (в midamp) в любом файловом менеджере. Только чтобы услышать звук, нужно разрешить обращение к спикеру (на панели есть такой рисунок, по умолчанию перечёркнутый).
Dragon
Возможность есть всегда! Если ты желаешь и готов этим заняться - мы все будем только рады.
На текущий момент все программисты заняты "своей" работой и выполнять дополнительные "хотелки" ни у кого нет времени.
diamond
Как я понял, он имел в виду эмуляцию звуковой карты через спикер, с псевдополифонией. Такое в принципе возможно - я сам у знакомого видел и слышал запущенный проигрывать под DOS для MOD файлов. Даже голосовые включения в трекерную музыку звучали вполне прилично.
Mario79 wrote:
Возможность есть всегда! Если ты желаешь и готов этим заняться - мы все будем только рады.
На текущий момент все программисты заняты "своей" работой и выполнять дополнительные "хотелки" ни у кого нет времени.
Понимаю, у меня, к сожалению, тоже проблема со временем
Возникла проблема при перехвате и обработке int 0x20. Ниже код (исполняется в драйвере). На Celeron, Celeron 2 никаких проблем не возникало, а вот на машинках поновее перехват выполняется, но при обращении к HDD, например, чтение ранее не открытого файла, система виснет. Всё это планируется для вывода звука через PCSpeaker (если проблема не решится, я и разоряться не стану).
proc hook
mov bx,-1
.waiting:
mov al,0 ;фиксация значения счетчика в канале 0
out 43h,al ;порт 43h: управляющий регистр таймера
in al,40h ;младший байт счетчика
mov ah,al ;в АН
in al,40h ;старший байт счетчика в AL
xchg ah,al ;поменять их местами
cmp ax,bx
mov bx,ax
jb .waiting
cli
sidt [idtreg]
mov eax,[idt]
lea ecx,[eax+32*8] ;0x8000B200+32*8
mov ax,[ecx+6] ;старший word смещения (биты 31-16 старшего dword-а шлюза)
shl eax, 16
mov ax,[ecx] ;младший word смещения(биты 15-0 младшего dword-а шлюза)
xor ebx,ebx
mov bx,[ecx+2] ;bx - селектор сегмента кода, где находится код обработчика
mov [oldselector],bx
mov [oldhandler],eax
Serge, спасибо за подсказку.
Исходник spksnd и драйвер в архиве (закинуть в папку с драйверами вместо sound.obj). Качество звука очень плохое (вполне ожидаемо), при каждом чтении файла раздаётся громкий писк, мышь тоже попискивает Ж). Любая попытка чтения с HDD (SATA) убивает файловый менеджер, так что я слушал MP3 с привода.