SB1.0-2.0/SBPro/Voicecard1000 with other OBJ-file IF YOU UPLOAD THIS FILE, DONT RENAME OR/AND MADE CHANCES Code by Jari Kaija (1991) all rights reserved v1.2 SB - Playerdemo for PRE-Calculated sounddata. This file shows, how to play 4-channel voices together via SB. Questions about all my codes, via SB-Connection BBSs ------------ Stereomode supported. ! WORKS ONLY WITH 286 or HIGHER PROCESSORS ! ! REMEMBER: USE 286-Processor COMPILING ! ! (*.OBJ, is compiled with 286 extensions) ! ! WHEN USING STEREO MODE, YOU MUST WAIT, UNTIL ! ! DMA-TRANSFER ENDS BEFORE PLAY AGAIN... ! ! USE "WAITDMA" PROCEDURE FOR THIS ! ! ! OTHERWISE; CHANNELS JUMPS LEFT TO RIGHT, LIKE ! ! A HABITUAL DRUNKARD... (test it, and you will ! ! know what I mean... :) ! ! INCLUDED MIXER SETUP FOR STEREO/MONO/VOLUMES ! **************************************************************************** BITTI = Wait until SB is ready to read data Procedure Bitti;External; **************************************************************************** RESETSB = Resets SB. (No effects to mixer in SB-PRO) Segment 4000Hex - F000Hex Soundbuffer Addres 220Hex / 240Hex SB's address Interrupt 2,3,5,7,10 SB's IRQ Procedure Resetsb(Segment,Addres,Interrupt:Word);External; **************************************************************************** RESETDMA = You don't need this, if DMA-transfer works correctly. It may halts your DMA-chip. Procedure ResetDma;External; **************************************************************************** SETVOICE = Soundlength and tell to object file, where it finds sounddata. Procedure Setvoice1(seg1,ofs1,len1:Word);External; Procedure Setvoice2(seg2,ofs2,len2:Word);External; Procedure Setvoice3(seg3,ofs3,len3:Word);External; Procedure Setvoice4(seg4,ofs4,len4:Word);External; **************************************************************************** CALCDATA = Calcs sounddatas Totlen 0 - 65535 in mono mode 0 - 32760 in stereo mode Speed 0 - 255 Playpitch Stereo 0 / 1 Modeswitch 0=Mono, 1=Stereo Procedure Calcdata(Totlen,Speed,Stereo:Word);External; **************************************************************************** RESETMIXER = Reset your SBPRO mixer chip... Procedure Resetmixer;External; **************************************************************************** SETMIXER = Set your SBPRO mixer to Stereo/Mono mode, and volumesets... 0 - Mono 1 - Stereo Both volumes-> Bits: Left 7 6 5 4 Right 3 2 1 0 x x x x x x x x = 0-255 Procedure Setmixer(Mastervol,Vocvol,Mode:Word);External; **************************************************************************** WAITDMA = Wait, until DMA-transfers ends This procedure uses pregiven IRQ-value... It halts, until IRQ line is high... Waitdma needed, when processing DMA-transfer in STEREO-mode. Btw, if you play just one time your sounds or your program has delay longer than DMA-transfer you don't need this. Procedure Waitdma;External; **************************************************************************** PLAYDATA = Play sounds Procedure Playdata;External; **************************************************************************** Ett„ t„mm”inen tapaus t„ll„ kertaa, kaikki muut proceduurit n„iss„ faileissa pelaavatkin, PAITSI "WAITDMA"-prosetuuri. Laittelen sen kuntoon heti, kun aika vain antaa v„h„nkin periksi. (Menee meinaan ensin emolta piirin vaihdok- si). Ongelmia tulee ilman Dmawaittia silloin, kun soitetaan stereomoodissa, ja sample jatkuisi viel„ seuraavan PLAYDATA komennonkin j„lkeen. Tuo „„ni kun rupeaa hyppelehtim„„n milloin vasemmalle ja milloin oikealle... Tuo SB/DMA siirto kun on sen verran idioottimainen sen 'ep„k„yt„nn”llisyy- den' vuoksi stereomoodissa. Joka toinen databyte kun menee leftille ja joka toinen rightille, ja muiden kuin minun (Morsen emon DMA-piiri) DMA kun ei tunnu kertovan, ett„ miss„ menn„„n BYTEN tarkkuudella, saati sitten ett„ teid„n ep„standardit koneenne osaisivat edes ilmoittaa DMA:n status- portissa siirron tilan bitill„ kutakin kanavaa kohti, niin vaikeapa siit„ on laskeskella, ett„ pitik”h„n se seuraavaksi laittaa parilliseen vaiko parittomaan osoitteeseen t„m„ uusi laskettu arvo... Kunhan tuo DMAwaittikin rupeaa jekuttamaan, niin DMA:han p„„see uudestaan vasta k„siksi, kun se on saanut vanhan siirtonsa loppuun asti ja aiheuttaa Irkku-keskeytyksen. Jolloin DMA piirin rekisterit ovat kiltisti nollautuneet, ja osoite on tietty automaattisesti parillisesta alkava, johon seuraavat databytet laskeskellaan. Monomoodissa tuolla ei ole pirunkaan merkityst„, ett„ heitell„„nk” DMA:lle vaikka sadasosasekunnin v„lein uudet soittoarvot... (Ps, ostakaa tekin morsen emoja, niin n„ist„ temppuilusta p„„see eroon...) R”yh, nyt te tietty kuolaatte viel„ tuota xxx.OBJ failia, joka tuolla vinsulla jossain on, ett„ saisitte laskea nuoteille tarvittavat datat + vibratot sun muut trackerim„isyydet. Sanoisinko, ett„ jos te ette jo t„st„ p„„se omin avuin eteenp„in, niin... Maalaisj„rki se on joka jyll„„ :) (Yll„tt„v„n hyvin Assemblerin suhteen itseasiassa) - M„ maalaispoika oon...... TV: Jari Kaija alias BEAN HAAGA HELSINKI FINLAND EARTH SOME UNLEVIABLE SOLARSYSTEM UNIVERSUM PR-PRODUCTS