> Патч не должен виснуть.
Виснет система - факт. Я закомментировал это:
Code: Select all
;;patch for some ugly BIOS
; cmp [ctrl.vendor], VID_INTEL
; jne .default
; mov esi, msgIrqMap
; call SysMsgBoardStr
; stdcall PciRead8, 0, 0xF8, 0x61
; and eax, 0xFF
; call dword2str
; call SysMsgBoardStr
; btr eax, 7 ;when bit 7 set remap disabled
; jnc @F
; xor eax, eax
; jmp @F
Создаю статический буфер (в формате указываю флаг PCM_STATIC). Заметил, что нужно явно задавать размер (0 тут не катит как в PCM_OUT). Задал размер = 64Кб. Потом я его заполняю целиком, 16 раз вызывая SND_SETBUFF по 4Кб за раз. Далее я задаю SND_PLAY - на доске появляется сообщение play start. Потом я начинаю периодически опрашивать позицию в фуфере, чтобы дозаполнить освободившееся место. Первый вызов SND_GETPOS возвращает pos = 0, т.е. проигрывание как бы ещё не начиналось. Странно, что позиция не успела сдвинуться хотя бы чуть-чуть... Через некоторое время снова вызываю SND_GETPOS. Теперь pos = 4000h, т.е. курсор сдвинулся на 16Кб. Ещё через какое-то время я снова вызываю SND_GETPOS и получаю, что pos снова = 4000h. В дальнейшем курсор просто замирает на этой позиции. Почему он дальше не играет? Никакая из функций ошибку не возвращает.