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ě mé základní desky
Gigabyte GA-P67-DS3-B3 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 -> PCI můstku IT8892E,
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. Zkoušel jsem také další PCI zvukové karty ForteMedia FM801 a C-Media CMI8738,
které mají SB emulační ovladač pro DOS, ale bez úspěchu.
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 legacy SB s podporou DMA) 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. BTW později jsem zjistil,
že dsdma.exe instaluje do paměti rezidentní 32-bitový DPMI 0.9 server
a zlikviduje kompletně VCPI služby. Dostupná paměť přes DPMI závisí na použitém manažeru (patrně dle
velikosti VCPI paměti, kterou nabízel) EMM386 (32 MB) nebo JEMM386 (60 MB), což pro starší
hry v pohodě stačí.
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. Když jsem tam manuálně zeditoval
např. hodnotu parametru SBIRQ, tak ovladač změnu patrně nereflektoval
(alespoň ne ve výpisu), nicméně doporučuju nastavit SBIRQ na jinou hodnotu
než INTAIRQ (PCI přerušení). Později jsem také napsal jednoduchou DOSovou
utilitu YMF7XX na zapnutí S/P-DIF výstupu.
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:
* někdy se zvuk v průběhu přehrávání zasekne a opakuje dokola poslední DMA buffer
** pouze při nastavení SB DSP 2.00 - 3.xx, 8-bit, mono, sem tam zvuk přeskakuje
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)?
UPDATE: Ruthan úspěšně otestoval funkčnost zvukovek Yamaha YMF7xx a Aureal
Vortex na novější základní desce Gigabyte GA-X79-UP4
se socketem LGA 2011 pro HEDT procesory Sandy Bridge-E a Ivy Bridge-E. PCH chipset intel
X79
má ještě nativní podporu PCI 2.3 slotu, ale deska už má AMI UEFI, což ukazuje, že samotné UEFI není
obecně překážkou kompatability.
28.4.2022 Sehnal jsem základní desku
Gigabyte GA-H97-HD3 rev. 1.1
s 2 PCI sloty a tak jsem otestoval, zda-li v ní bude fungovat zvukovka Yamaha YMF744 pod DOSem. PCI sloty
jsou řešeny přes stejný PCIe -> PCI můstek IT8892E
jako na mé základní desce Gigabyte GA-P67-DS3-B3. V UEFI setupu jsem
povypínal všechny zbytečnosti nechal aktivní pouze legacy funkce. Ovladač zvukovku zinicializoval,
zavedl se i dsdma.exe, testovací WAV se v nativním režimu v
setupds.exe přehrál taky, ale emulace SB SFX nefunguje. Všechny hry,
co jsem zkoušel, tak zatuhnou při spuštění, např. Doom vytuhne ve fázi "S_Init: Setting up sound".
Funguje akorát FM syntéza. Zkoušel jsem ještě měnit správce paměti a přendat zvukovku do druhého
PCI slotu, ale nemělo to žádný efekt. Zatím tedy poslední chipset, kde to ještě funguje, zůstává X79.
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 TV 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í).
3.9.2018 Dostal jsem jednu Yamahu YMF744B
s upadlým blokovacím kondenzátorem na napájení 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 (starších) základních deskách to nepraská.
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. TSR načítá nastavení z textového souboru vortex.ini
z adresáře Windows (dle systémové proměnné WINBOOTDIR), ale k dispozici je
i patchnutá verze pro samotný DOS, jenž se řídí systémovou proměnnou VORTEXINI,
kterou si lze libovolně nastavit. Nastavení v INI souboru lze upravit buď ručně (důležité jsou zejména
proměnné PCIIRQ - skutečné IRQ PCI karty, SBFMIRQ
- emulované IRQ SB, SBFMDMA, SBFMDMA2,
SBFMBase, FMBase a MPU401Base)
nebo pokud máte nainstalované i Windows 9x, tak nainstalovat windowsí ovladač a nechat nastavení na něm.
Pod Windows navíc funguje wavetable syntéza (využívá 5MB banku samplů aurealgm).
Otestoval jsem znovu hry a dema uvedená v tabulce výše.
Všechny hry fungovaly, ale nepodařilo se mi rozběhnout demíčka Dream a Second Reality. Vyzkoušel jsem 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 vždy došlo k zatuhnutí při startu dema. Akorát demo Boost fungovalo
se zvukem, ale občas se stalo, že se třeba po 30 s od spuštění zvuk zaseknul (neustále se opakoval dokola
poslední obsah DMA bufferu) a obraz běžel dál. Paradoxně pod Windows 98 SE fungovala emulace SB lépe, povedlo
se mi tam rozběhnout i demo Dream. Second Reality mi nešlo spustit zřejmě z důvodu nekompatability s Windows.
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 naštěstí řeší DreamBlaster.
15.12.2018 Ruthan mi zapůjčil na vyzkoušení
zvukovou kartou Aureal Vortex2 AU8830. Nic moc jsem si od toho nesliboval, což se mi také potvrdilo.
Nainstaloval jsem ovladače
a znovu otestoval hry a dema uvedená v tabulce výše. Karta se chovala prakticky
stejně, jako její předchůdce Aureal Vortex AU8820B2, v kvalitě FM syntézy jsem nepoznal žádný podstatný
rozdíl. Snad jediná výhoda je, že tahle karta má header na WaveBlaster.
DreamBlaster - wavetable syntéza do game portu
28.8.2018 Problém ošklivé FM syntézy a chybějící
wavetable syntézy se dá řešit pomocí externího MIDI syntezátoru jako např.
Roland Sound Canvas,
který se dá připojit přes rozhraní MPU-401 MIDI
skoro ke každé zvukovce s game portem.
Na 15-pinovém game portu je pin 12 využit jako výstup UARTu MIDI out a pin 15 jako vstup MIDI in. Na pinech
1, 8 a 9 je navíc k dispozici napájecí napětí 5 V. Rychlost je 31250 baudů a posílají se tam
MIDI příkazy
jako zapni notu x, vypni notu y atd. Napěťová úroveň na výstupu není přesně definovaná (důležitá je proudová
budicí schopnost), záleží jakým napětím je napájen zvukový čip na kartě z kterého výstup jde. V případě
YMF724 je to 3,3 V.
Ještě poznamenám, že kdysi některé karty podporovaly MPU-401
"intelligent mode" s dalšími funkcemi,
které využívaly nějaké staré hry.
Novější zvukové karty už mají MPU-401 jen v UART režimu. V případě potřeby lze funkcionalitu "intelligent mode"
získat pomocí rezidentního OpenSource programu SoftMPU
pro DOS, který podporuje tyto zvukové karty
a nebo pro slabší PC lze pořídit HW řešení HardMPU
v podobě 8-bitové ISA karty s MCU ATmega1284P
či karty PCMIDI.
Jelikož takový synťák od Rolandu je velká a drahá krabice, tak francouzská
firma Dream vyvinula vlastní jednočipové řešení v podobě
integrovaného obvodu SAM2695
(a dalších). Tento obvod obsahuje 0,5 MB
banku samplů, efektový DSP (umožňující 64-hlasnou polyfonii, reverb, chorus, prostorový efekt a 4-pásmový
ekvalizér), stereo DAC a pomocný analogový mikrofonní vstup. Čip je v poměrně mrňavém pouzdře QFN48
(6 x 6 mm; 0,4 mm pitch), napájený z 3,3 V (MIDI vstup je 5V-tolerantní) a s typickým odběrem
18 mA. Je použitý např. v daughterboardu WaveBlaster
za 35 euro, který lze osadit na pin header karet Sound Blaster. Obě mé zvukové karty Yamaha 724 a 744
však takový header nemají a na Aureal Vortexu se s ním sice počítalo, ale zůstal neosazený (spolu s dalšími
součástkami). Navíc se mi cena zdá poněkud vysoká, takže jsem se rozhodl navrhnout si vlastní univerzální
DreamBlaster do game portu, který se vejde do krytky konektoru Cannon. Jeho výstup se jednoduše propojí
jack-jack kablíkem do line-in vstupu zvukovky a v mixéru se nastaví vhodná hlasitost. U her se v setupu vybere
místo Adlib či FM syntézy General MIDI nebo MPU-401 a jede se. Pokud by někdo chtěl zároveň používat gameport
i pro joystick, dá se snadno vyrobit rozdvojka, kde se na druhý konektor pro DreamBlaster vytáhnou 3 dráty
(5 V, GND a MIDI out).
Sehnat čipy SAM2695 nebylo úplně jednoduché (v běžných obchodech se součástkama
je vůbec nevedou a na eBay jsou předražené). Nakonec jsem ale sehnal pár kousků od jednoho maníka z Belgie,
kterému jsem na oplátku poslal jeden osazený DreamBlaster. Schéma zapojení je celkem minimalistické, vycházející
z datasheetu. Napájení je řešeno mým oblíbeným 3,3V LDO TLV70033
z 5V výstupu game portu. Pro analogovou část je napájení ještě lehce filtrováno RC článkem R1 - C9. Výstupní
napětí vnitřního 1,2V regulátoru lze zkontrolovat na pinu 34, resp. C16 a C17. Po zapnutí je aktivní sériové
rozhraní MIDI IN na pinu 16 a paralelní rozhraní je neaktivní.
Vytvořil jsem layout 2-vrstvého plošného spoje, který jsem poslal do výroby
čínskému AllPCB, neboť jsem se dozvěděl, že tam teď mají
dopravu DHLkem zdarma při ceně 10 $ za 5 ks destiček do velikosti 5 x 5 cm. Abych využil možnou
plochu, přifařil jsem k zakázce ještě druhý plošňák na spínaný snižující měnič s LM43603,
takže výsledná velikost byla 75 x 33 mm, což pořád spadalo do 10$ kategorie. Za 3 dny už byla zakázka
vyrobená a odeslaná. Za další 2 dny dorazila do ČR, ale jelikož jsem byl zrovna mimo, vyzvednul jsem ji
později. Po rozbalení (dorazilo 6 ks PCB) můžu říct, že kvalita je na velmi slušné úrovni, pouhým okem
jsem nepoznal rozdíl např. od Pragoboardu. Za ty prachy s takhle rychlou dopravou je to fakt paráda, to už
asi nebudu doma nic osvětlovat přes fólii a leptat (vyjma jednoduchých
PCB, které instantně načmárám lihovkou :).
 |
 |
 |
 |
 |
 |
PCB layout |
GERBER panelizace |
vyrobené PCB |
vyrobené PCB |
osazený PCB |
osazený PCB |
Destičky jsem rozřezal, zapiloval okraje a hned jednu na zkoušku osadil.
Obvod SAM2695 jsem připájel regulovanou horkovzdušnou pistolí, zbytek klasicky mikropájkou. Nenarazil
jsem na žádné podstatné chyby a DreamBlaster fungoval na první zapnutí. Rozdíl proti FM syntéze je
opravdu znát, viz ukázková videa: test s Doomem,
test s Duke Nukem 3D.