DA převodník nejenom pro A.S.E. player
Úvod
Amiga Sound Emulátor (zkráceně A.S.E.) je přehrávač zkonvertovaných skladeb (MOD) z Amigy na ZX Spectrum, který používá tříkanálový 8 bitový DA převodník s výstupem ACB stereo, stejně jako se u nás používá zapojení kanálů AY-3-8912. Tento článek se věnuje převážně samotnému hardwaru, který je k hraní potřeba.
Převodník je tříkanálový, protože je zapojený na interface UR-4 používaný v té době naprostou většinou uživatelů Betadisku pro které je přehrávač určen. Obvod MHB8255 v UR-4 má tři osmibitové brány a na každé z nich je jedna odporová R-2R síť.
Následující obrázky ukazují první již neexistující verzi převodníku z doby, kdy jsem ještě neměl čím fotit. Ani zapojení nebylo zcela správně, ale hrálo to.
Velmi příhodné je, že 3 kanály má i AY-3-8912 (proto ACB stereo). Některé přehrávače a editory pracují pouze se 4 bitovými samply a mohou přehrávat stejné skladby na obojím, jak na AY-3-8912, tak i na 8 bitovém DA převodníku. Ale často hrají pouze na dolních 4 bitech, zvuk by tak byl příliš tichý, proto jsou na převodníku 3 přepínače, kterými lze zvolit 4 bitový režim.
Použití samozřejmě není omezeno pouze na UR-4, lze použít většinu rozhraní s 8255, třeba Jiiirův UPI, nebo 8255 v Didaktiku Gama 192k, případně upraveném Didaktiku Gama 80k (bez úpravy koliduje stránkování RAM).
Přehrávače
A.S.E. player je určen jen pro Betadisk a lze ho stáhnout tady. Existuje několik verzí, poslední, kterou jsem viděl je verze 2.0. Existuje i maličko novější verze, ale pouze přehrávač bez grafického rozhraní.
A.S.E. player používá při přehrávání značně zjednodušenou strukturu amigáckých modů. Neumí měnit hlasitost kanálů a další méně důležité efekty. Redukci jednoho kanálu A.S.E. řeší tak, že všechny samply jsou ve skutečnosti 7 bitové a v kanálu C se sčítají před zápisem na port. Nicméně používat se dá a ve své době byl jediným programem, který něčeho takového vůbec byl schopen.
Jak A.S.E. player hraje je trochu vidět v tomto videu (YouTube).
Samplerate A.S.E. playeru verze 2.0 se pohybuje mezi 5,63 až 6,07kHz na kanál. V kanálu C se sice sčítají dva kanály MODu, ale to trvá zhruba dvojnásobek času oproti kanálům A a B, takže se to vyrovná.
Kromě A.S.E. playeru existuje i rutina od Tritona, která je A.S.E. velmi silně inspirována, hraje o něco stabilněji s vyšším samplerate, ale nikdy nebyla rozšířena, protože používá jinak strukturovaná data.
Triton napsal verze dvě. Jedna se jmenuje XMOD a druhá HSTAB. XMOD přehrává se samplerate 8,1 až 8,7kHz na kanál. HSTAB přehrává se samplerate 7,67 - 7,25kHz, kolísá, ale vzhledem k možnostem Z80 v ZX Spectru relativně málo na relativně vysokém samplerate.
Na konci textu jsou odkazy na nějaké ukázkové diskety se skladbami pro A.S.E. a DA převodník.
Dalším přehrávačem, který lze s tříkanálovým DA převodníkem použít je Sampletracker. Kromě DA převodníku umí přehrávat i na AY-3-8912 a dokonce na jednobitový speaker. Proto jsou na převodníku přepínače, které ho přepnou do 4bit režimu kompatibilního s AY.
Sampletracker mi při měření uchystal malé překvapení, protože zvládá samplerate na kanál 11,74kHz a to zcela stabilně bez kolísání frekvence. Alespoň jsem nebyl schopen se svým osciloskopem žádné kolísání samplerate změřit.
Zajímavou konkurencí A.S.E. byl přehrávač od Štěpána Obdržálka, ke kterému sestavil 4 kanálový DA převodník Petr Simandl. Jeho přehrávač je původně určen pro ZX Spectrum +3 a umí přehrávat MODy přímo z FAT12 disket včetně hlasitostních efektů. Existuje i verze pro Betadisk. Nevýhodou je, že konstrukce převodníku je složitější a nedokázal si ho doma zbastlit kdokoliv už kvůli oboustranému plošnému spoji.
Bohužel přehrávač Š. Obdržálka pro Simandlův převodník je rychlostně silně nestabilní, samplerate výrazně kolísá někde mezi 28 - 33kHz pro všechny kanály (tj. cca 7 - 8kHz na kanál). Kvalita zvuku je díky tomu bohužel špatná (zatímco A.S.E. a spol se více drží okolo nějaké střední hodnoty v malém rozsahu). Narozdíl od A.S.E. musí zapisovat data na DA vždy i když se hodnota nemění, protože zápisem se kanály rotují. Krom toho provádí konverzi automaticky - leckdy lze kvalitu výrazně zvýšit ručním resamplováním a přehráváním v jiné oktávě, což takto není možné.
DA Out
První verze jsem měl nejspíš ubastlené jako vrabčí hnízdo přímo na konektoru, určitě jsme tak s kamarádem používali jednokanálový Covox připojený k LPT portu PC AT se 16MHz 286. Místo skřípajícího speakeru, nemaje peníze na alespoň Adlib, tím spíš ne na SoundBlaster, jsme konečně slyšeli "hudbu jak z Amigy". Další verze určitě existovala ubastlená na oboustranném neprokoveném plošném spoji, s ručně kreslenou předlohou pro výrobu fotocestou se standardními rezistory 0207 (viz foto v úvodu), to mohlo být někdy kolem roku 1992.
Jak vlastně DA převodník funguje?
Docela jednoduše. Protože jsem to nenašel nikde vysvětlené, pokusím se o to, pro zjednodušení na převodníku pouze dvoubitovém. Pro více bitů je princip stejný, jen se výpočet stává zbytečně rozsáhlejším.
V principu nezáleží na konkrétních hodnotách rezistorů, nebo napětí. Předpokládejme tedy, že zdroj napětí U1 a U2 je ideální (výstupy z obvodů typu LS na tom moc dobře nejsou, ani třeba MHB8255, ale CMOS obvody typu HC a HCT mívají na výstupu napětí velmi se blížící 0V a Ucc - obvykle 5V), stejně tak rezistory (často se používá kombinace 10kΩ a 20kΩ) a že audio zesilovač, resp. cokoli je k výstupu připojeno z obvodu odebírá nulový proud, čemuž se v praxi blíží třeba operační zesilovač, nebo něco s MOSFETem na vstupu.
Pro výše nakreslené zapojení se dají napsat dvě obecné rovnice smyčkových proudů.
2RIa+2R(Ia-Ib)+U1=0
-U1+2R(-Ia+Ib)+RIb+2RIb+U2=0
To se dá upravit na jednodušší tvar.
4RIa-2RIb=-U1
-2RIa+5RIb=U1-U2
Pak ještě jednou, aby se rovnice daly přímo sčítat.
20RIa-10RIb=-5U1
-4RIa+10RIb=2U1-2U2
4RIa-2RIb=-U1
-4RIa+10RIb=2U1-2U2
Po sečtení vyjádřím Ia
Ia=(-3U1-2U2)/16R
Po druhém sečtení vyjádřím Ib
Ib=(U1-2U2)/8R
vstupní bity 00
Začněme nejjednodušší situací. Oba bity jsou nulové, i napětí U1 a U2 jsou nulová. Na první pohled je zřejmé, že i Uout musí být nula, protože v obvodu nezbyl žádný další zdroj napětí, ale pro pořádek dosadím.
Ia=0/16R
Ib=0/8R
Oba proudy jsou nulové, tedy i napětí na rezistoru 2R úplně vpravo, kterým protéká Ib musí být nulový, což je Uout.
vstupní bity 01
Přidáme jeden zdroj napětí U1=U zatímco U2=0.
Ia=(-3U1-2U2)/16R=-3U/16R
Ib=(U1-2U2)/8R=U/8R
Teď mohu spočítat Ua i Uout, Ua spíš jen pro zajímavost a verifikaci. Vynásobím proud 2R, protože mne zajímá napětí na jednom z 2R rezistorů proti zemi. V obou případech se mi R pokrátí a zbyde jen poměrné napětí.
Ua=2R(-3U)/16R=-3U/8
Una 2R=2RU/8R=U/4
Uout = 1/4 z napětí zdroje.
vstupní bity 10
Analogicky, jako v předchozím případě dosadím, pro změnu U1=0 a U2=U.
Ia=(-3U1-2U2)/16R=(-2U)/16R=-U/8R
Ib=(U1-2U2)/8R=-U/4R
A opět spočítám napětí vynásobením proudů 2R. Verifikuji tím, že si obvod zjednoduším jinak. Je-li U1=0, tak mám z levých dvou 2R paralelní kombinaci, to dává R, k tomu přičtu R v sérii a zbydou mi dva stejné 2R rezistory s napájecím zdrojem v sérii. Mezi těmi dvěma rezistory musí být napětí poloviční. Matoucí je pouze znaménko, vyplývající z opačně nakreslené orientace proudu, protože mi vlastně vyšlo jaké napětí musím odečíst od U, který je s napětím na rezistoru 2R v sérii.
Ua=-U2R/8R=-U/4
Una 2R=-U2R/4R=-U/2
Uout=Una 2R+U=-U/2+U=U/2
Výstupní Uout je tedy 1/2 z U.
vstupní bity 11
A poslední situace, oba zdroje jsou zapnuté U1=U i U2=U.
Ia=(-3U1-2U2)/16R=(-3U-2U)/16R=-5U/16R
Ib=(U1-2U2)/8R=(U-2U)/8R=-U/8R
Spočítám napětí na 2R rezistorech.
Ua=-2R5U/16R=-5U/8R
Una 2R=-2RU/8R=-U/4
Uout=Una 2R+U=-U/4+U=3U/4
Opět mi vyšlo napětí záporné, protože jsem Ib nakreslil opačně než skutečně teče a opět ho musím odečíst od U, protože výsledkem výpočtu je napětí na rezistoru 2R, nikoli přímo napětí Uout. Výstupní napětí Uout je dáno součtem napětí na 2R rezistoru a U.
A nakonec mohu všechna napětí vynést do malého grafu, který mi pěkně ukazuje, jak DA převodník vytváří z digitálních dat něco, co by se mohlo podobat analogovému napětí, pokud je bitů dostatečný počet a měřící přístroj (osciloskop) dostatečně nepřesný, aby schodovitost zakryl (příp. signál proženu filtrem). Čistě prakticky zhruba od 8 bitů už se dá analogový signál napodobit docela obstojně, vyšší počty bitů dále zvyšují dynamický rozsah, aby např. pro tichý zvuk nezůstal jediný bit (LSB) a snižují šum.
Komu by graf nestačil, může se podívat na video (YouTube), jak vypadá 4bitový signál na osciloskopu při přehrávání skladby Sampletrackerem.
verze pro UR-4
Abych mohl převodník poskytnout dalším lidem, snažil jsem se později udělat celý převodník co možná nejmenší a zároveň maximálně jednoduchý a levný. Proto je celý navržen na jednostranném plošném spoji s použitím SMD rezistorů velikosti 0805. Pár drátových propojek, tři přepínače, datový konektor a audio 3,5mm jack - nic víc neobsahuje.
Typické použití DA může vypadat např. takto. Na druhém snímku je v popředí Betadisk (ta černá krabice), za ním SIF s modulem Connect One, za ním UR-4 a v ní zapojený DA převodník s audio jackem do monitoru.
verze pro Didaktik Gama 192k
O pár let později, když jsem si postavil Didaktik Gama 192k, jsem udělal další variantu převodníku, ještě menší než je ta pro UR-4 a to tak, aby se vešla do rozměru 50x50mm, protože na tento rozměr poskytoval výrobce plošných spojů slevu. A protože jsem desky nechával vyrábět, tak jsou narozdíl od těch samodomo prokovené, s nepájivou maskou i potiskem.
Didaktik Gama 192k nepoužívá 8255 ke stránkování paměti, naopak má pamět kompatibilní se ZX Spectrum 128k. Běží na něm prakticky všechny trackery, přehrávače i dema.
Teoreticky se dá DA out použít i s Didaktikem Gama 80k a možná i s disketovou mechanikou Didaktik 40/80. Ale u Didaktiku Gama 80k bude určitě nutné nejprve vyřešit stránkování RAM. Nejlépe doplnit přepínač, který stránkování RAM pomocí portu C0 vypne a přepne signál na IO konektor místo signálu z jednoho z invertorů. Při té příležitosti neuškodí vyvést i 5V po vzoru DG 192k, aby se daly připojit aktivní redukce pro joystick, nebo připojení tiskárny.
Download
- Schéma a dvě verze plošného spoje nakreslené v Eaglu plus exportované náhledy
- Výběr skladeb, které lze přehrát na ZX Spectrum 48kB
- Archiv 15 disket s A.S.E. playerem skladbami pro ZX Spectrum 128kB
Odkazy
- Krom A.S.E. na DA hraje i XTracker - image diskety s přehrávačem a skladbami na konci textu.
- V článku o samplovaném zvuku je něco málo o tom, jak napsat jednoduchý nejenom přehrávací software.
Historie změn článku
- 2008-02-16 - zveřejněno
- 2008-02-17 - aktualizováno, doplněny naměřené frekvence
- 2008-05-02 - doplněny fotky menší verze DA převodníku
- 2016-10-20 - aktualizace
- 2017-11-20 - aktualizace, fotky navíc a výpočet