блин... сделал все как написано
Звук в старых DOS играх под Windows NT/2000/XP.
Предисловие
Новые игры это, конечно, круто. Но есть и старые любимые. У меня, например, среди них Duke3D, Doom/Doom2, Full Throttle. Но, как известно, технологии на месте не стоят, а идут вперед, оставляя за собой все милое и дорогое нашему сердцу. И вот, в очередном ностальгическом порыве (ну что я виноват, что меня хватает только на работу и, по пятницам, на пару-десять бутылок пива с друзьями; а на музей и театр ну никак...) решил ночью погонять свиней в Duke3D. И что? Звука-то нет! Долго искал выход, даже дебагер два раза запустил, проблему нашел, а вот простое и доступное решение... Вот чего я надумал:
VDMSound
Под WindowsXP есть «полноценный» эмулятор soundblaster — работает везде, но звук откровенно некачественный. А потому берем самый свежий драйвер VDMSound вот отсюда. Настраиваем параметры (по желанию) или пользуемся предустановленными:
Карта:SOUNDBLASTER v2.0
Порт: 220
IRQ: 7
HIDMA: 1
LODMA: 5
MIDI: General MIDI
MIDI порт: 330
По правому клику на EXE (или COM, мало ли что вы там запускаете) файле игры выбираем «run with VDMS». Если звук появился, и игрушка не вылетает — все нормально, играем как обычно. Если звук есть, но «рвется» попробуйте изменить настройки minDMAPeriod и maxDMAPeriod. Меньшие значения ускоряют реакцию звуковой карты, в случае большого количества коротких звуковых событий; большие — дают выигрыш при сплошном звуковом потоке. Например, для Full Throttle я установил значения 1 и 5 соответственно, это позволило избавиться от «хрипов и стонов».
CLI2NOP patch
Теперь случай сложнее: при запуске с VDMSound игра просто замирает при первой попытке проиграть какой-нибудь звук. Такая ситуация возникла с Duke3D. Проблема в том, что NTVDM-подсистема неадекватно реагирует на попытку выполнить CLI или STI инструкцию. При этом при выполнении STI не происходит ровным счетом ничего, а вот при CLI виртуальная машина «замирает». Решение — заменяем CLI на NOP; точнее pushfd, pop eax, cli меняем на pushfd, pop eax, nop; и, соответственно pushfd, cli на pushfd, nop. Желающие могут сделать замену сами, ручками. Я лентяй, а потому нашел такую штуку как CLI2NOP patch из комплекта SoundFX 2000 — эмулятора саундбластера для WinNT. Лежит патч здесь. Пользоваться не просто, а очень просто: распаковываем patch.exe и cli2nop.bat в директорию с игрой и выполняем (на примере Duke3D): cli2nop duke3d.exe duke3dnt.exe. А затем снова запускаем через «run with VDMS», но уже duke3dnt.exe. Вуаля!
Так запустилось со звуком ВСЕ, что я только ни пробовал. Вот и все о DOS играх под windows nt/2k/xp. А вот что касается такой важной детали как поддержка VESA под этими операционками... так ничего пока и не нашел. Правда автор VDMSound, похоже, планирует в будущем добавить и поддержку VESA-режимов в свой проект, попробуйте зайти к нему в гости.
не идет звук
я вот тока не понял куда эти настройки вводить ?