ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

void sb16_play ( WAVE_HDR wave)

Definition at line 39 of file wave.c.

{
    ULONG MappedIrq;
    KIRQL Dirql;
    KAFFINITY Affinity;
    PKINTERRUPT IrqObject;
    unsigned int newmask;

    unsigned int i;
    unsigned int tmp[255];
    i=0;
    dump_wav(wave);
    do
    {
//          tmp[i++]=get_dma_page(0x0fffff);
//          DPRINT1("0x%x ",tmp[i-1]);
    }
    while((tmp[i-1]&0xffff)!=0);
            // free_page((tmp[0]),i-1);
    sb16.buffer=((unsigned char*)tmp[i-1]);

   /*
    * Because this is used by alomost every subsystem including irqs it
    * must be atomic. The following code sequence disables interrupts after
    * saving the previous state of the interrupt flag
    */

    _disable();

       memcpy(sb16.buffer,(&wave->data),wave->dLen);


                MappedIrq = HalGetInterruptVector(Internal,0,0,8+sb16.irq,&Dirql,&Affinity);



                IoConnectInterrupt(&IrqObject,DMAOutputISR,0,NULL,MappedIrq,Dirql,Dirql,0,FALSE,Affinity,FALSE);

    // mask=inb(0x21);
    newmask=((int)1<<sb16.irq);
    // outb(0x21,(mask&~newmask));

       // Restore the interrupt flag
    _enable();



    // disable_dma(sb16.dma8);
    //outb(0x0a,5);
    // clear_dma_ff(1);
    //outb(0xc,0);
    // set_dma_count(1,wave->dLen);
    //set_dma_mode(1,DMA_MODE_WRITE);
    //outb(0xb,0x49);
    //outb(0x3,(wave->dLen)&0xff);
    //outb(0x3,((unsigned int)(wave->dLen)>>8)&0xff);
    //set_dma_addr(sb16.dma8,(unsigned int)sb16.buffer);
    //outb(0x83,(((unsigned int)(sb16.buffer-IDMAP_BASE)>>16))&0xf);
    //outb(0x2,((unsigned int)sb16.buffer&0xff));
    //outb(0x2,(((unsigned int)(sb16.buffer-IDMAP_BASE)>>8))&0xff);
    //enable_dma(sb16.dma8);
    //outb(0xa,1);

    write_dsp(sb16.base,0x00D1);

    write_dsp(sb16.base,0x40);
    write_dsp(sb16.base,((unsigned char)256-(1000000/wave->nSamplesPerSec)));

//  outb(sb16.base + 4, (int) 0xa);
//  outb(sb16.base + 5, (int) 0x00);

//  outb(sb16.base + 4, (int) 4);
//  outb(sb16.base + 5, (int) 0xFF);

//  outb(sb16.base + 4, (int) 0x22);
//  outb(sb16.base + 5, (int) 0xFF);

    write_dsp(sb16.base,0x14);
    write_dsp(sb16.base,(wave->dLen&0x00ff));
    write_dsp(sb16.base,((wave->dLen)&0xff00)>>8);

//  write_dsp(sb16.base,0xc0);
//  write_dsp(sb16.base,0x0);
//  OldIRQ=HalGetInterruptVector(Internal,0,0,irq+8,&irql,&affinity);
//  DPRINT1("OldIRQ: 0x%x\n",OldIRQ);

//  status=IoConnectInterrupt(&IrqObject,playRoutine,0,NULL,OldIRQ,irql,irql,0,FALSE,affinity,FALSE);
//  if(status!=STATUS_SUCCESS) DPRINT1("Couldn't set irq\n");
//  else DPRINT1("IRQ set\n");

}

Generated on Sat May 26 2012 05:11:21 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.