Emulace Sound Blasteru v DOSu - heuréka!

      21.7.2018 O nefunkční emulaci Sound Blasteru v DOSových ovladačích od Creative pro zvukovky SB Live! a Audigy jsem se zmiňoval již dříve. Problém je v tom, že ovladače pro odchytávání legacy I/O přístupů potřebují funkční routování PCI signálu SERR# na NMI procesoru, které se z nových základních desek někam vytratilo, protože si asi návrháři MB mysleli, že už to nebude nikdo k ničemu potřebovat. Buď chybí přímo fyzicky spoj na MB nebo není routování nakonfigurované v chipsetu. Pro druhý případ jsem napsal utilitu SERREN, která někdy aspoň zprovozní FM syntézu (cvrdlikání přes Adlib). V případě této základní desky mi to ale stejně nepomohlo, zvukovka je úplně němá, ani ji žádný program nedetekuje. Zkoušel jsem ještě SERREN upravit tak, aby zapnul SERR# routování i na onboard PCIe to PCI můstku ITE, avšak nebylo to nic platné. Stejně by to ale neřešilo nefunkční samplovaný zvuk, který vyžaduje funkční DMA, jehož emulace na nových deskách také nefunguje (ani nevím, jakým způsobem je to řešeno). Patrně poslední chipsety, kde ještě v těchto ovladačích emulace SB fungovala, byla řada intel 8xx, na novějších chipsetech s PCIe už prostě smůla...
      Již jsem nevěřil, že by se našlo nějaké funkční řešení SB emulace v DOSu na nových MB, ale kupodivu někdo na fóru VOGONS před 2 lety objevil funkční zvukové karty od Yamahy s chipy YMF72x a 74x na PCIe chipsetu intel 965 a později také Aureal Vortex (2) - chipy AU88xx. Dále byla ověřena funkčnost i na novějším PCIe chipsetu intel x58 pro Core 1. generace (Nehalem) a úspěšně otestována více než stovka DOSových her. Tento chipset má na rozdíl od P67 ještě nativní PCI sběrnici, takže jsem byl zvědavý, jestli to bude fungovat i u mě přes PCIe to PCI můstek. S Ruthanem jsme si již předtím vyměňovali nějaké informace ohledně zvuku pod DOSem a tak nebyl problém se zapůjčením karty na testování, kterou jsem si v pátek v noci přivezl domů.
      V sobotu jsem kartu s čipem YMF744B s napětím strčil do PCI slotu mé základní desky a nainstaloval ovladače. Pro úspěšné zprovoznění v DOSu je potřeba splnit pár podmínek. Inicializační program setupds.exe používá extender DOS/4GW, který má problém s 4 GB RAM. Zkoušel jsem jak původní dos4gw.exe verze 1.97, který vyhodil paradoxní chybu: "DOS/4GW fatal error (1307): not enough memory", tak novější dos4g.exe verze 2.61, který též zkolaboval s chybou: "DOS/4G fatal error (1010): can't initialize loader LINEXE_LOADER [1]". Bylo tedy třeba omezit velikost XMS paměti na 2,5 GB či méně. Záhy jsem zjistil, že další potřebný program dsdma.exe (rezidentní emulátor DMA pro novější chipsety) při zavedení ihned restartuje PC, pokud je XMS více než cca 704 MB, takže jsem nakonec velikost XMS omezil na 512 MB. Toho lze docílit např. použitím správce paměti himemx.exe s parametrem /MAX=512M, celý řádek do config.sys:
DEVICE=C:\DOS\HIMEMX.EXE /MAX=512M /METHOD:FAST /VERBOSE
      Další háček je v tom, že rezident dsdma.exe vyžaduje správce paměti s podporou VCPI, který přepne CPU do virtuálního režimu v86, jinak vyhodí chybu: "Program could not load. This program requires an expanded memory manager such as EMM386.EXE with VCPI support". Je možné použít EMM386 (i v kombinaci s UMBPCI) s podporou EMS:
DEVICE=C:\DOS\UMBPCI.SYS
DEVICEHIGH=C:\DOS\EMM386.EXE FRAME=NONE RAM D=64 HIGHSCAN AUTO VERBOSE
nebo bez podpory EMS:
DEVICE=C:\DOS\UMBPCI.SYS
DEVICEHIGH=C:\DOS\EMM386.EXE NOEMS D=64 HIGHSCAN AUTO VERBOSE
A nebo Quarterdeck QEMM386, který sám neumí více jak 256 MB XMS, takže ho ani není třeba omezovat (parametry jsou specifické pro moji HW konfiguraci a nejsou tedy přenositelné):
DEVICE=C:\QEMM\QEMM386.SYS RAM ROM XBDA:N ARAM=B000-B7FF X=F000-FFFF X=C000-CFFF RF ST:M
Také jsem experimentoval moderním správcem paměti JEMMEX, ale při spuštění nějaké pmode hry jsem vždy dostal chybu: "DOS/16M error: [17] system software does not follow VCPI or DPMI specifications Spawn Error: Error 0" Později jsem přišel na to, že je třeba vypnout podporu rozšíření VME parametrem NOVME:
DEVICE=C:\DOS\JEMMEX.EXE A20METHOD:FAST XMSHANDLES=96 MAXEXT=512M MIN=32M MAX=64M NOVME VERBOSE
Bohužel některé hry či dema nejsou kompatabilní (nebo používají nesnášenlivé extendery) s režimem v86 a pak takový pokus o spuštění programu končí zátuhem nebo restartem PC.
      V souboru autoexec.bat jsem pak měl tyto řádky pro zavedení ovladače:
SET BLASTER=A220 I5 D1 T4
C:\DS-XG\setupds.exe /S
C:\DS-XG\dsdma.exe
Extender dos4gw.exe mám umístěný v systémové cestě PATH. Po spuštění setupds.exe bez parametru je možné ověřit funkčnost zvukové karty. Měl jsem tam aktivní akorát položky pro nativní zvuk a FM syntézu (oboje přehrálo čistě ukázkový zvuk), položka SB emulace byla zašedlá. Vyzkoušel jsem verze 3.14, 3.15 a 3.16 a všechny se chovaly stejně. Nastavení je uloženo v souboru ds.ini, ale když jsem tam manuálně zeditoval např. hodnotu parametru SBIRQ, tak ovladač změnu nereflektoval.
      Ve zbylém čase následovalo testování v několika hrách a demech, které mám trvale na disku. Výsledky jsou docela dobré, akorát jsem narazil na problém u her, které implicitně používají Sound Blaster Pro (např. Doom), kde se v samplovaném zvuku objevovalo jakési praskání. U her, kde šlo v nastavení změnit typ DSP na Sound Blaster 16 nebo Sound Blaster 2.x byl zvuk v pohodě. Také celkem nepřekvapivě nefungovala wavetable syntéza, protože karta nemá žádnou vlastní soundfont ROM či RAM, pouze fungovala FM syntéza Adlib či Sound Blaster. To se dá ale řešit přes externí DreamBlaster. Už se mi podařilo sehnat 2 čipy SAM2695 z Belgie a postavím si vlastní DreamBlaster přímo do gameportu. Při testování jsem zkusil natočit narychlo video: část 1., část 2. (zvuk je snímaný mikrofonem ve foťáku, takže za kvalitu se omlouvám). Zde jsou shrnuty výsledky testovaných her a demíček:

program YMF744B SFX YMF724F SFX AU8820B2 SFX music (FMS)
Dyna Blaster OK OK OK OK
Wolfenstein 3D OK OK OK OK
Doom 1 praskání ve zvuku OK OK OK
Doom 2 praskání ve zvuku OK OK OK
Quake praskání ve zvuku OK OK n/a
Blood OK (SB16), praskání s SB Pro OK OK OK
Duke Nukem 3D OK (SB16), praskání s SB Pro OK OK OK
SandWarriors OK (SB 2.x), praskání s SB Pro OK OK OK
Second Reality OK (SB mono), praskání s SB Pro OK zatuhne n/a
Dream OK (SB16), praskání s SB Pro OK zatuhne n/a
Boost zatuhne kvůli PMODE/W zatuhne bez zvuku n/a

      Tyto výsledky jsou pro mě rozhodně zajímavé a pokusím se nějakou takovou zvukovku získat. Bohužel ty nejlevnější se nabízí zrovna v Americe, kde poštovné přesahuje cenu samotné karty (a ještě k tomu clo). Na českých bazarech jsem neobjevil vůbec nic. Další zajímavá informace přišla od uživatele agent_x007 z VOGONS, který úspěšně otestoval demo Boost na zvukové kartě Aureal Vortex 2 a chipsetu intel x58. Tyto karty totiž používají ovladač, který řeší emulaci DMA nějakým jiným způsobem, jenž nevynucuje "problémový" režim v86. Tyto karty se také obecně prodávají za vyšší ceny než Yamahy. Z hlediska funkcionality pod DOSem by mělo být jedno, jestli je to starší Aureal Vortex (AU8810/AU8820) nebo novější Aureal Vortex 2 (AU8830).
      Ruthan také vyzkoušel svou Yamahu v novější základní desce Gigabyte s chipsetem intel Z97 bez nativních PCI slotů a fungovala mu jen FM syntéza. Taktéž byl problém, pokud se zvukovka připojila do PCIe slotu MB s chipsetem intel x58 přes externí PCIe to PCI můstek Pericom. Ve výpisu PCI konfiguračních registrů jsem si všiml, že externí můstek neměl zapnuté subtraktivní dekódování (v mém případě ho onboard můstek ITE zapnuté má), takže se domnívám, že pokud by se zapnulo, mohlo by to třeba fungovat. UPDATE: Ruthan už sehnal i Aureal Vortex a začal testovat. Další relevantní vlákna na VOGONS: Sound Blaster Emulator for Dos?, Is there PCI-E soundcard with working DOS SB driver?, PCI sound cards and Chipsets from various manufacturers... Which PCI Sound Card for DOS (SB, FM and General MIDI)?

      7.8.2018 Dnes mi dorazil balíček z Polska se zvukovou kartou Yamaha YMF724F, kterou jsem našel na Allegru. Nyní se tam zrovna nabízí Yamaha YMF744 XP za 15 Zlotých. Kartu jsem nadšeně strčil do druhého PCI slotu vedle SB Audigy místo DVB tuneru. K žádné kolizi prostředků nedošlo, nechám si tedy v PC obě zvukovky. Audigy budu nadále používat ve Windows, Linuxu a pár DOSových programech s nativní podporou a Yamahu pro SB emulaci v DOSu. Ve Windows jsem jí zatím ve správci zařízení zakázal. Oba výstupy mám připojené k zesilovači přes přepínač. V DOSu jsem použil stejné ovladače a nastavení jako při předchozím testu YMF744B. Příjemně mě překvapilo, že u YMF724F se neobjevuje ve zvuku žádné praskání při nastavení SB Pro ve hrách. Zkoušel sem kartu v obou PCI slotech i bez SB Audigy a prostě nepraská, hraje čistě. Ze zvědavosti jsem kartu vyzkoušel ještě ve 3 dalších základních deskách. Zatím co v Gigabyte GA-H55M-S2 s nativními PCI sloty fungovala YMF724F správně, tak na platformě AMD Asus M4A79XTD EVO a Gigabyte GA-MA790GP-DS4H sice setupds.exe správně kartu rozpoznal a TSR dsdma.exe se bez chyby zavedl, ale zvukovka pak nevydala ani hlásku. Ani testovací zvuky v setupds.exe nešly přehrát (menu v programu bylo neaktivní).

Yamaha YMF724F-V PCI

      3.9.2018 Dostal jsem jednu Yamahu YMF744B s upadlým blokovacím kondenzátorem na PVDD. Karta fungovala i bez něj, ale pro pořádek jsem tam připájel 1 µF keramiku 0603. Znovu jsem kartu přezkoušel a potvrdilo se, že YMF744B v Doomu 1 a 2 praská a také všude tam, kde se vybere typ karty SB Pro. Po výměně zvukovky zpět za mou YMF724F praskání zmizelo. Nevím, čím to je, ale na jiných základních deskách to nepraská.

Yamaha YMF744B-R PCI

      5.9.2018 Dnes mi dorazil balíček z Ruska se zvukovou kartou Diamond Aureal Vortex AU8820B2, kterou jsem koupil přes eBay. Ovladače jsou ke stažení zde. Pro DOS stačí zavést TSR asp4dos.com
, který funguje i v reálném módu a nepotřebuje žádnou podporu EMS/XMS, ale nevylučuje se s nimi. Pokud není k dispozici UMB, tak TSR sežere 37 kB dolní paměti, což může být v některých případech problém. Otestoval jsem znovu hry a dema uvedená v tabulce výše. Hry fungovaly správně, ale nepodařilo se mi rozběhnout zvuk ani v 1 ze tří demíček. Pro každé demo jsem zkoušel několik konfigurací správců paměti (JEMMEX, QEMM386, HIMEM + UMBPCI + EMM386 EMS/NOEMS, HIMEM + UMBPCI, HIMEM a bez) s minimem dalších driverů a TSR, ale funkčí konfigurace jsem se nedobral. 2nd Reality a Dream se vždy zaseklo a Boost buď crashnul PMODE/W nebo běžel bez zvuku. Pokud jsem nezavedl TSR asp4dos.com tak dema samozřejmě běžela bez zvuku. Nevím, čím to je, ale na starších základních deskách (s chipsetem intel X58) by to mělo fungovat, tak možná tomu nějakým způsobem vadí PCIe to PCI můstek. Další poznatek je ten, že Aureal Vortex má opravdu hnusný zvuk FM syntézy, horší sem ještě neslyšel. Yamaha nebo ESS zní o dost lépe. U her podporujících General MIDI to řeší DreamBlaster.

Diamond Aureal Vortex AU8820B2 PCI




Zpět

Aktualizováno 11.10.2018 v 4:55

„Nedostane-li žena koho chce, běda tomu, koho dostane.“ Mark Twain