III.rész

Üdvözlök mindenkit, aki ismét megvette az újságot, vagy azért, mert "engem" akar elolvasni, vagy azért, hogy más témakörben "bővítse" tudását és éppen erre az "oldalra" kalandozott. Ne nevessetek! Kaptam egy levelet, melyben egy gyerek (nem is biztos, hogy az) végre kimondta azt, amire vártam. Csak értem veszi meg az újságot. Lehet, hogy túlzás, de ezt írta és mellé még kérdezett néhány dolgot a Delphivel kapcsolatban. Végre valaki...

Na de váltsunk témát, mert még sok dolgot kell leírnom. Többek között például a SB Pro mixerével kell foglalkoznunk. Ez lenne a mai (e havi) téma. Vágjunk is bele!

Szóval nagy előrelépést jelentett a SB hangkártyacsalád életében, mikor is megjelent a SB pro. A mellett, hogy a kártya már stereo hangot tud kiadni, hogy a mintavételezés is elérte a CD szabványt, a 44.1 kHz-et és hogy van már CD-ROM csatlakozója is, nem törpül el az a tény, hogy van benne egy keverő-áramkör, melynek segítségével a térbeli hangzás és a hangszínek szinte tetszés szerint variálhatóak. Ugyan az ötlet jó, a megvalósítás viszont egy kicsit limitált és csak a SB 16 változtatott a korlátozottságon. Ezt majd meglátjátok lejjebb...

Mivel nekem nincs Pro kompatibilis (vagy a fölötti) kártyám, kénytelenek lesztek beérni egy kis referencia anyaggal, de aki egy kicsit is tud programozni - az előző számok mintaprogramjai alapján - pillanatok alatt megtudja írni a megfelelő programot, ugyanis...

...Ugyanis nem áll másból a programozás, mint az előző cikkek egyikében említett Pro portok segítségével történő regiszterirogatásból és olvasgatásból. A 224h (2x4h) portra kerül a regiszter száma és a 225h (2x5h) portról pedig be kell olvasni vagy ki kell írni rá a megfelelő értéket. Nem egy nagy dolog, de itt is vigyázni kell az időzítésre (100 s)! Na lássuk a tényeket!

SB-Pro-tól kezdve a sorozat végéig működő funkciók:

00h - Mixer RESETelése (csak írás)

Csak ki kell küldenünk egy 0 értéket a mixer használata előtt. Ez elég egyértelmű!

01h - A legutoljára kiírt regiszter tartalma (csak olvasás)

A legutoljára kiírt értéket tartalmazza. Tesztelési célokra használt. Nem sok fantáziát látok benne, de ha valaki megtalálja az igazi indokot, kérem írjon!

04h - A DA (kimenet) szintje

0. bit: Jobb csatorna hangerejének legalacsonyabb bitje (16)
1-3. bit: Relatív hangerő (Pro), illetve a maradék bitek (16)
4. bit: Bal csatornára a hangerő alacsony bitje (16)
5-7. bit: Relatív hangerő (Pro), illetve a maradék felső bitek (16)

Már itt szembetűnik a különbség a két kártya között, ugyanis a SB16 3 helyett 4 bitet rendel egy hangerőhöz és ez még sok helyen elő fog jönni.

0Ah - Mikrofon-bemenet kimeneten való megjelenésének szintje

0. bit: Hangerő legalacsonyabb bitje (16)
1-2. bit: Hangerő (Pro), illetve a maradék bitek (16)
3-7. bit: Fenntartva, értékük 0

22h - Abszolút hangerő

26h - FM hangerő

28h - CD hangerő

2Eh - Bemenet (LINE) szintje (kimeneten való megjelenése)

Ezekre mind igazak a 04h regiszterben leírtak, ezért ezt hadd ne írjam le újra! De fontos megjegyezni, hogy SB16-on a szinonim regiszterek értéke automatikusan változik (30h, 31h, 34h, 35h)

Csak SB-Pro-n működő funkciók (SB16-on felváltották őket másikak)

02h - Abszolút hangerő

1-3. bit: Jobb csatorna
5-7. bit: Bal csatorna
többi értéke 1

06h - FM vezérlés

0. bit: 1
1-3. bit: Kimeneti relatív hangerő
4. bit: 1
5. bit: Bal csatorna állapota (0:szól, 1:nem szól)
6. bit: Jobb csatorna állapota (0:szól, 1:nem szól)
7. bit: 0

Ez egy elég elavult technológia, de csak ilyen volt abban az időben.

0Ch - Bemeneti szűrő kiválasztása

0. bit: 1
1-2. bit: Bemenet típusa
    21
    00 - mikrofon
    01 - CD
    11 - LINE bemenet
    10 - ilyen nincs, hi-hi!
    3. bit: Szűrő típusa (0:felül-, 1:aluláteresztő)
    4. bit: 1
    5. bit: Bemenet szűrése (0:van, 1:nincs)
    6-7. bit: Fenntartva, 0

0Eh - Kimenet szűrése/Stereo mód

0. bit: 1
1. bit: Stereo indikátor (0:mono, 1:stereo)
2-3. bit: 0
4. bit: 1
5. bit: Kimenet szűrése (0:van, 1:nincs)
6-7. bit: 0

Ez is elég egyértelmű, szerintem.

Röviden ennyi lett volna az, amit a Pro tud (illetve az, amit csak ő tud), de ezek után jön a velős része a dolognak, ugyanis rátérünk a nagyobb képességekkel megáldott SB16-ra. Ezeket már minden SB16 feletti kártya tudja (AWE-32, AWE-64, nincs is több eddig még!).

30h - Abszolút hangerő, bal csatorna

31h - Abszolút hangerő, jobb csatorna

32h - DA szint, bal csatorna

33h - DA szint, jobb csatorna

34h - FM szint, bal csatorna

35h - FM szint, jobb csatorna

36h - CD szint, bal csatorna

37h - CD szint, jobb csatorna

38h - LINE szint, bal csatorna

39h - LINE szint, jobb csatorna

3Ah - Mikrofon szint

3Bh - A kártyára átirányított speaker szintje

Mindegyikre ugyanaz igaz, ezért tömbösítettem:

0-2.: Fenntartva, 0
3-7.: Hangerő értéke

Itt is igaz, hogy a SB16 a Pro regiszterekbe visszaírja az értékeket, hogy ne legyen kompatibilitási probléma.

3Ch - A bejövő jelek kimeneten való megjelenésének szabályozása

0.: Mikrofon
1.: CD jobb
2.: CD bal
3.: LINE jobb
4.: LINE bal
5-7.: 0

Ha a bitek be vannak állítva, megjelennek, ha pedig nincsenek...akkor azt találja ki mindenki maga!

3Dh - Bemenetek megjelenése a kimenet BAL csatornáján

3Eh - Bemenetek megjelenése a kimenet JOBB csatornáján

0.: Mikrofon
1.: CD jobb
2.: CD bal
3.: LINE jobb
4.: LINE bal
5.: FM jobb
6.: FM bal
7.: 0

Ugyanaz, mint a 3Ch regiszterben ,csak itt az egyes oldalakhoz is hozzárendelhetjük a bemeneteket. Gondolom, mindenki el tudja képzelni, mi is a 4 kombináció:

- Ne szóljon
- Bal oldalon szóljon
- Jobb oldalon szóljon
- Mindkét csatornán jelenjen meg az adott egység adott oldala (pl.: LINE-jobb)

3Fh - Bemenet bal csatorna erősítése

40h - Bemenet jobb csatorna erősítése

41h - Kimenet bal csatorna erősítése

42h - Kimenet jobb csatorna erősítése

0-5.: 0
6-7.: Erősítés mértéke
    76
    00 - Nincs erősítés
    01 - 2x
    10 - 4x
    11 - 8x

Kezdeti értéke: 00h (nincs erősítés)

43h - Automatikus erősítés

0.: Auto-erősítés (0:on, 1:off)
1-7.: 0

Alaphelyzetben ki van kapcsolva az AUTO-erősítés, mert egy kis torzítást okoz.

44h - Magashangok erősítése, bal csatorna - Treble

45h - Magashangok erősítése, jobb csatorna - Treble

46h - Mélyhangok erősítése, bal csatorna - Bass

47h - Melyhangok erősítése, jobb csatorna - Bass

0-3.: 0
1-7.: Erősítés mértéke (-14dB - +14dB-ig, 2dB-es lépésben)

Ez talán az egyik legérdekesebb hatás, mely kombinálva a stereoval igen sokat nyom a LAT-ba.

80h - IRQ kiválasztása

0.: IRQ2
1.: IRQ5
2.: IRQ7
3.: IRQ10
4-7.: 0

IRQ-t választhatunk ki a kártyának és ha jól végiggondoljátok, akár többet is. Ez így igaz, akár mind a négyet kiválaszthatjátok, de annak semmi értelme. Ha a bit beállított, akkor van bekapcsolva!

81h - DMA csatorna kiválasztása

0.: DMA0
1.: DMA1
2.: DMA2 (csak 0 lehet)
3.: DMA3
4.: DMA4 (csak 0 lehet)
5.: DMA5
6.: DMA6
7.: DMA7

- Ha a bitek beállítottak, akkor kiválasztottunk egy DMA csatornát a kártya részére. Akár többet is kiválaszthatunk, de csak max. 6-ot, mert a DMA2-t nem (HDD) és a DMA4-et sem (CASCADE).

Ugyanúgy mint a 80h-nál a mixer resetelésétől vagy a meleg resettől (Alt+Ctrl+Del) az értékek nem változnak meg. Ha letiltunk minden 16 bites DMA csatornát (4-7), akkor a 8 biteseken folynak e kérelmek és ha pedig azokat tiltjuk le, akkor nem folyik 8 bites DMA átvitel, még akkor sem, ha a 16 bitesek helyett lenne rá szükség. Ez egy furcsa dolog, de nincs mit tenni. Ez is olyan, mint a fizika, az élet és a természet tulajdonságait kutatja, de azokat befolyásolni, megváltoztatni nem tudja.

82h - IRQ állapota (csak olvasás)

0.: legalább az egyik 8 bites művelet (0:nem aktív, 1:aktív)
1.: legalább az egyik 16 bites művelet (0:nem aktív, 1:aktív)
2.: az MPU-401 IRQ-ja (0:nem aktív, 1:aktív)
3.: 0
4-7.: Nem publikált, de valószínűleg a DSP verziószámával van szoros összefüggésben, az egyik van csak beállítva egyszerre:
    4.: v4.04
    5.: v4.05
    6.: v4.11
    7.: v4.12

Mindössze ennyit kell tudni a MIXER programozásáról. Ha az ember átfutja - legalábbis az én tapasztalatom szerint - nem tartja valami nagy eresztésnek, de ha végiggondoljátok, hogy ezt a fizikai apparátust összekombináljátok egy akár kevésbé gyors processzorral, mely tud real-timeban hangmintát keverni (és ezt akár egy 286-os is megteszi, úgy 16kHz-is), rájöttök, hogy nem is kell hozzá igazán több.

És úgy gondolom, ebbe a részbe még belefér egy kis kiegészítés, ugyanis senki sem kérdezte meg, hogy honnan tudjuk egyáltalán, hogy van-e a gépben valamilyen hangkártya? Ezért szeretnék most közzétenni két detektáló eljárást, melyek közül az egyik az ADLIB kártyá(ka)t detektálja, míg a másik - ki gondolná - a Sound Blastereket.

Az ADLIB detektálása a beépített időzítőkkel való kommunikáció lehetőségének vizsgálatát használja, míg a Sound Blasteré - az összes lehetséges portcímet felhasználva (210h-260h) - a DSP resetelése után érkező 0aah byte tényleges megérkezését figyeli.

Részletesen leírva az ADLIB vizsgálatát, a következő pontokra bonthatjuk a detektálást:

Ugyanígy kirészletezem a SB detektálás folyamatát is, mely egy "kicsit" egyszerűbb: IRQ és DMA csatorna keresése:

Ez a része a dolognak egy kicsit más, ugyanis figyelni kell, hogy más hardver-eszközök munkájába ne szóljunk bele! Szóval minden megszakítást át kell venni (persze csak a szóbajöhetőket - FIGYELEM, ez is kártyatípusonként változó, mert a SB16-on lehet IRQ10, míg a SB1.0-n lehet IRQ3.) és meg kell vizsgálni, hogy nem használja-e már más (21h port, IRQ vezérlő) és ha nem, meg kell vizsgálni, hogy a szoftveres úton kért IRQ (0F2h és 0F3h parancs) hol fut be. Ez lesz az IRQ-nk!

Ezek után pedig minden lehetséges DMA csatornán kezdeményezni kell egy átvitelt és mivel az egy IRQ-val lesz nyugtázva a folyamata végén, befut a már előre detektált IRQ-n. És amelyik befut az a DMA a jó. Sok program figyelmeztet, hogy lehet, hogy le fog fagyni. Ez így igaz, ha egy network kártya DMA-jába nyúlsz bele. De általában nem szokott ez gond lenni. Szóval ennyi! Ehhez nincs forrás, de ha lesz időm a következő számban megkapjátok!

Nem is kívánom tovább vesztegetni az időtöket, röviden ennyi az, amit szerettem volna megbeszélni és hadd legyen meglepetés, hogy mivel foglalkozunk a köv. számban. Érdekes és szokatlan téma lesz, annyit elárulok. Na legyetek jók! Sziasztok!
 

 Mr.TSCHuby
eMail:PC-XUser@IDG.HU, Subject: "Audio rovat"
TSCHSOFT@TTK.JPTE.HU