X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f From: "Rod Pemberton" Newsgroups: comp.os.msdos.djgpp References: <1179198543 DOT 710532 DOT 156270 AT w5g2000hsg DOT googlegroups DOT com> <4649645d$0$20296$9b4e6d93 AT newsspool3 DOT arcor-online DOT net> <1179233938 DOT 968657 DOT 125170 AT q75g2000hsh DOT googlegroups DOT com> Subject: Re: DMA and Soundblaster with DJGPP Date: Tue, 15 May 2007 23:29:09 -0400 Lines: 109 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1437 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441 NNTP-Posting-Host: c-68-60-59-250.hsd1.mi.comcast.net Message-ID: <464ad01d$1@news.cuneo2lemon.net> X-Trace: news.cuneo2lemon.net 1179308061 68.60.59.250 (16 May 2007 11:34:21 +0200) Organization: Cuneo2Lemon Project To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com wrote in message news:1179233938 DOT 968657 DOT 125170 AT q75g2000hsh DOT googlegroups DOT com... > Slash'EM to start out with. Nothing official, just for fun. > > What DJ said makes perfect sense to me now, (Thanks DJ). What I still > don't understand is that there seems to be code out there that is > supposed to work with DJGPP, but doesn't take this into account. > > http://www.shdon.com/dos/sound#mixing > is an excellent example. I downloaded it and compiled it. It compiles > perfectly, but it's wav file reproduction is faulty. The wav's start > playing somewhere in the middle and are generally messed up. > dmamix-d.zip for DJGPP? I downloaded that. When I first ran it, it crackled like crazy. But, I figured I was using the wrong IRQ and DMA. My sound blaster string is this: SET BLASTER=A220 I5 D1 When I tried IRQ 5 and DMA 1, all the .wav's ran nicely in a Windows console. When I tried under DOS, it couldn't find my sound card. I compiled with gcc -Wall -pedantic which found a few errors. Delete the start and end lines and run through patch: patch -p0 < dmagcc.dif Rod Pemberton ----START--dmagcc.dif--- --- dmagcc.c 1999-02-16 01:12:42.000000000 +0000 +++ dmagcc.new 2007-05-15 23:11:20.000000000 +0000 @@ -56,7 +56,7 @@ outportb (Test + 0x6, 0); delay(10); //Check if (reset was succesfull - if ((inportb(Test + 0xE) & 0x80 == 0x80) && (inportb(Test + 0xA) == 0xAA)) + if (((inportb(Test + 0xE) & 0x80) == 0x80) && (inportb(Test + 0xA) == 0xAA)) { //DSP was found Base = Test; @@ -134,7 +134,7 @@ { char *Address; //Fill an 8K block in the DMA buffer with 128's - silence - Address = DMABuffer + (Buffer << 13); + Address = (char *)(DMABuffer + (Buffer << 13)); memset (Address, 128, 8192); //Copy DMA buffer to DOS memory dosmemput(Address, 8192, DOSBufOfs + (Buffer << 13)); @@ -197,7 +197,7 @@ Voice->SoundLength = ftell (WAVFile) - 48; fseek(WAVFile, 0L, SEEK_SET); - Voice->Sample = (char *)malloc(Voice->SoundLength + 2); //Assign memory + Voice->Sample = (unsigned char *)malloc(Voice->SoundLength + 2); //Assign memory fseek(WAVFile, 46L, SEEK_SET); //Skip the header //Load the sample data @@ -250,7 +250,7 @@ unsigned int Page1, Page2; //Words //Assign 32K to DMA Buffer - DMABuffer = (char *)malloc (32768); + DMABuffer = (unsigned char *)malloc (32768); //Assign 32K (2048 paragraphs) of DOS memory TempBuf.size = 2048; @@ -298,7 +298,7 @@ _go32_dpmi_set_protected_mode_interrupt_vector (Vector, &OldIRQ); } -void main () +int main (void) { int Temp; //Clear screen @@ -317,11 +317,11 @@ if (Temp == 9) { //or none at all printf ("No Sound Blaster found\n"); - return; + return(0); } else printf ("Sound Blaster found at %Xh\n", Base); - printf ("Please specify DMA channel : "); scanf("%d", &DMA); - printf ("Please specify IRQ level : "); scanf("%d", &IRQ); + printf ("Please specify DMA channel : "); scanf("%u", &DMA); + printf ("Please specify IRQ level : "); scanf("%u", &IRQ); //Assign memory to the DMA Buffer AssignBuffer (); @@ -390,5 +390,5 @@ outportb (0x21, inportb (0x21) | 4); } else outportb (0x21, inportb (0x21) | (1 << IRQ)); - return; + return(0); } ----END---