Blog literacki, portal erotyczny - seks i humor nie z tej ziemi


Assembler, C

Programowanie karty Sound Blaster, cz. 1

Tomasz Soroczyäski

Na temat programowania karty Sound Blaster nie napisano zbyt
wiele. Firma Creative oferuje sw¢j pakiet Sound Blaster Developer's
Kit, pojawiˆo si© te¼ kilka bibliotek shareware i public domain. S¡
one jednak zwykle sˆabo udokumentowane i rozpowszechniane bez kod¢w
«r¢dˆowych. Najlepiej opisany jest syntezator FM, odziedziczony po
karcie Adlib. W artykule tym postaram si© przedstawi† najwa¼niejsze
informacje o obsˆudze d«wi©ku digitalizowanego, czyli 8-bitowych
sampli.

Odtwarzanie i rejestracja d«wi©ku digitalizowanego mog¡ odbywa† si© w
dw¢ch trybach: bezpo˜rednim (direct) i przy u¼yciu kanaˆu DMA.
Przyjrzyjmy si© najpierw pracy w trybie bezpo˜rednim.

Wszelkie operacje zwi¡zane z programowaniem karty Sound Blaster
wykonujemy za pomoc¡ procesora DSP (Digital Sound Processor), poprzez
zapisy do odpowiednich port¢w, gdzie X oznacza port bazowy karty
(np. 220h):

X + 6 - sˆu¼y do inicjalizacji karty;

X + Ah - sˆu¼y do odczytywania informacji z karty;

X + Ch - sˆu¼y do zapisywania informacji do karty i testowania jej stanu
przy tej operacji;

X + Eh - sˆu¼y do testowania stanu karty przy operacji odczytu i
inicjalizacji karty;

Wszelkie operacje zwi¡zane z DSP realizuje si© przy u¼yciu
trzech procedur: SB_INIT, DSP_OUT i DSP_IN. Pierwsza z nich ma jeden
parametr - adres bazowy karty - i sˆu¼y do jej inicjalizacji.
Powinna ona zwraca† warto˜† zero. Je¼eli zwraca 1, to karty nie ma pod
wskazanym adresem. Operacj© zapisu do karty realizujemy za pomoc¡
procedury DSP_OUT. Jej parametr to komenda DSP lub dana. Procedura
DSP_IN sˆu¼y natomiast do odczytu informacji z karty. Przed jej
wykonaniem nale¼y przesˆa† odpowiedni¡ komend© do DSP.
Najwa¼niejsze komendy DSP to:

ON_SPEAKER (D1h): wˆ¡czenie gˆo˜nika - powinna by† wywoˆywana przed
rozpocz©ciem odtwarzania d«wi©ku;

OFF_SPEAKER (D3h): wyˆ¡czenie gˆo˜nika - nale¼y wywoˆywa† przed
rozpocz©ciem rejestracji d«wi©ku i przed zakoäczeniem pracy programu;

DSP_OUT (10h): wysˆanie 1 bajtu sampla na przetwornik cyfrowo-analogowy
karty - trzeba j¡ wywoˆywa† przed ka¼dym bajtem sampla;

DSP_IN (20h): odczytanie 1 bajtu sampla z wej˜cia karty - do odczytu
nale¼y wykorzysta† procedur© DSP_IN.

Sample powinny by† zapisane w postaci bez znaku (unsigned).
Zapis taki jest stosowany mi©dzy innymi w pliku VOC i przez program
Scream Tracker 3.0. Sample amigowskie musz¡ by† poddane konwersji
przez negacj© najstarszego bitu ka¼dego bajtu sampla. Odpowiedni¡
cz©stotliwo˜† odtwarzania/rejestracji d«wi©ku mo¼na osi¡gn¡† poprzez
zastosowanie przerwania zegarowego, zwi©kszaj¡c jego cz©stotliwo˜†.
Rozwi¡zanie to ma jednak powa¼n¡ wad©: bardzo du¼e
spowolnienie pr©dko˜ci komputera przy du¼ej cz©stotliwo˜ci. Mo¼e to
doprowadzi† nawet do zawieszenia systemu. Jest to szczeg¢lnie
prawdopodobne przy stosowaniu sterownik¢w pami©ci wykorzystuj¡cych
tryb chroniony procesora 386 (EMM386, QEMM386, itp.).

Opisane procedury zostaˆy napisane w Asemblerze z przeznaczeniem do
linkowania z C. Jako przykˆady ich zastosowania powstaˆy dwa programy.
Pierwszy z nich sˆu¼y do odtwarzania wskazanych sampli. Drugi
wy˜wietla na ekranie VGA w trybie 13h widmo oscyloskopowe d«wi©ku z
wej˜cia mikrofonowego (lub LINE-IN) karty Sound Blaster.

Druga cz©˜† artykuˆu zostanie opublikowana w nast©pnym numerze
PCkuriera.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • qualintaka.pev.pl
  •