home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Programmierung / SOURCE.mdf / programm / msdos / c / src_cpp / src / sbdac.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1993-08-14  |  1.6 KB  |  79 lines

  1. // Copyright 1993, Mark T. Pflaging
  2. //
  3. // Portions were borrowed from Jeff Bird's (cejjb@marlin.jcu.edu.au)
  4. // Sound Blaster Freedom routines dated    12 Feb 92
  5. //
  6. #include "sb.hpp"
  7.  
  8. static void far interrupt (*OldIRQ)(...);
  9. volatile int DMA_complete;
  10. extern void far interrupt SBHandler(...);
  11.  
  12. // Sets the sample rate to be used for digitizing or playback
  13. void SoundBlaster::Sample_Rate(unsigned long rate)
  14. {
  15.     unsigned char tc;
  16.  
  17.     tc = (unsigned char)(256 - (1000000/rate));
  18.  
  19.     writedac(TIME_CONSTANT);    // Command byte for sample rate
  20.     writedac(tc);            // Sample rate time constant
  21. }
  22.  
  23. // Argument should be True for "speaker on", False for "speaker off".
  24. void SoundBlaster::Voice(Boolean state)
  25. {
  26.     writedac((state) ? SPEAKER_ON : SPEAKER_OFF);
  27. }
  28.  
  29. void SoundBlaster::Init_Voice_DMA(void interrupt (*handler)(...))
  30. {
  31.     if (isValid()) {
  32.         // Insert our IRQ handler into interrupt chain
  33.         disable();
  34.         OldIRQ = getvect(0x08 + IRQ);
  35.         if(!handler) handler = SBHandler;
  36.  
  37.         setvect(0x08 + IRQ,handler);
  38.         enable();
  39.         DMA_complete = 1;
  40.     }
  41. }
  42.  
  43. void SoundBlaster::DeInit_Voice_DMA(void)
  44. {
  45.     if (isValid()) {
  46.         unsigned char tm;
  47.  
  48.         // Turn off stereo output
  49.         if (Type == SBPro) writemixer(0x0e,0x11);
  50.  
  51.         // Restore old IRQ vector
  52.         disable();
  53.         setvect(0x08 + IRQ,OldIRQ);
  54.         tm = inportb(0x21);
  55.         outportb(0x21,tm | (1 << IRQ));
  56.         enable();
  57.     }
  58. }
  59.  
  60. void SoundBlaster::reset_DMA_Complete(void)
  61. {
  62.     DMA_complete = 0;
  63. }
  64.  
  65. Boolean SoundBlaster::DMA_Complete(void)
  66. {
  67.     return (DMA_complete ? True : False);
  68. }
  69.  
  70. void SoundBlaster::Halt_DMA(void)
  71. {
  72.     writedac(HALT_DMA);
  73. }
  74.  
  75. void SoundBlaster::Continue_DMA(void)
  76. {
  77.     writedac(CONTINUE_DMA);
  78. }
  79.