home *** CD-ROM | disk | FTP | other *** search
/ Groovy Bytes: Behind the Moon / groovybytes.iso / GROOVY / SND_TOOL / SWMP13.ZIP / PAS_SDK.ZIP / MODPLAY.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-05-16  |  4.0 KB  |  207 lines

  1. UNIT MODPLAY;
  2.  
  3. INTERFACE
  4.  
  5. CONST Detection         = 0;
  6.       SoundBlaster      = 1;
  7.       SoundBlaster_Pro  = 2;
  8.       Gravis_UltraSound = 3;
  9.  
  10. VAR   Soundcard: WORD;
  11.       Channels:  WORD;
  12.       Peak:      ARRAY [1..8] OF BYTE;
  13.  
  14. PROCEDURE Mod_Init(Driver,Port: WORD; IRQ,DMA: BYTE);
  15. PROCEDURE Mod_Load(File_Name: STRING);
  16. PROCEDURE Mod_Play(Looping: WORD);
  17. PROCEDURE Mod_Stop;
  18. PROCEDURE Mod_Volume(Volume: BYTE);
  19. FUNCTION  Mod_Status: WORD;
  20. FUNCTION  Mod_Position: WORD;
  21. PROCEDURE Mod_Rewind;
  22. PROCEDURE Mod_Forward;
  23. PROCEDURE Mod_Peak;
  24.  
  25.  
  26. IMPLEMENTATION
  27.  
  28. USES DETECT,SB_DRV,SBP_DRV,GUS_DRV;
  29.  
  30. VAR Mod_Driver,Old_Exit: POINTER;
  31.     Mod_File:            STRING[128];
  32.  
  33. PROCEDURE Mod_Close; FAR; ASSEMBLER;    {* do not call this procedure! *}
  34. ASM
  35.   mov     ax,WORD PTR [Old_Exit]
  36.   mov     dx,WORD PTR [Old_Exit+2]
  37.   mov     WORD PTR [ExitProc],ax
  38.   mov     WORD PTR [ExitProc+2],dx
  39.   mov     bx,1
  40.   call    DWORD PTR [Mod_Driver]
  41. END;
  42.  
  43. PROCEDURE Mod_Init(Driver,Port: WORD; IRQ,DMA: BYTE); ASSEMBLER;
  44. ASM
  45.   mov     ax,[Driver]
  46.   or      ax,ax
  47.   jz      @@1
  48.   cmp     ax,Gravis_UltraSound
  49.   ja      @@Error
  50.   mov     cl,BYTE PTR [IRQ]
  51.   mov     ch,BYTE PTR [DMA]
  52.   mov     dx,[Port]
  53.   jmp     @@2
  54. @@1:
  55.   call    FAR PTR Detect_Hardware
  56.   or      ax,ax
  57.   jz      @@Error
  58.   cmp     ax,Gravis_UltraSound
  59.   ja      @@Error
  60. @@2:
  61.   mov     [Soundcard],ax
  62.   mov     WORD PTR [Mod_Driver],0
  63.   cmp     ax,SoundBlaster
  64.   jnz     @@3
  65.   mov     WORD PTR [Mod_Driver+2],SEG Driver_SB
  66.   jmp     @@Test
  67. @@3:
  68.   cmp     ax,SoundBlaster_Pro
  69.   jnz     @@4
  70.   mov     WORD PTR [Mod_Driver+2],SEG Driver_SBP
  71.   jmp     @@Test
  72. @@4:
  73.   mov     WORD PTR [Mod_Driver+2],SEG Driver_GUS
  74. @@Test:
  75.   xor     bx,bx
  76.   call    DWORD PTR [Mod_Driver]
  77.   or      ax,ax
  78.   jz      @@Error
  79.   mov     ax,WORD PTR [ExitProc]
  80.   mov     dx,WORD PTR [ExitProc+2]
  81.   mov     WORD PTR [Old_Exit],ax
  82.   mov     WORD PTR [Old_Exit+2],dx
  83.   mov     WORD PTR [ExitProc],OFFSET Mod_Close
  84.   mov     WORD PTR [ExitProc+2],SEG Mod_Close
  85.   jmp     @@Out
  86. @@Error:
  87.   mov     [Soundcard],0
  88. @@Out:
  89. END;
  90.  
  91. PROCEDURE Mod_Load(File_Name: STRING); ASSEMBLER;
  92. ASM
  93.   mov     ax,[Soundcard]
  94.   or      ax,ax
  95.   jz      @@Out
  96.   cld
  97.   mov     ax,ds
  98.   mov     es,ax
  99.   lds     si,DWORD PTR [File_Name]
  100.   lodsb
  101.   mov     cl,al
  102.   and     cx,7Fh
  103.   mov     dx,OFFSET Mod_File
  104.   mov     di,dx
  105.   rep     movsb
  106.   xor     al,al
  107.   stosb
  108.   mov     ax,es
  109.   mov     ds,ax
  110.   mov     bx,2
  111.   call    DWORD PTR [Mod_Driver]
  112. @@Out:
  113.   mov     [Channels],ax
  114. END;
  115.  
  116. PROCEDURE Mod_Play(Looping: WORD); ASSEMBLER;
  117. ASM
  118.   cmp     [Soundcard],0
  119.   jz      @@Out
  120.   mov     bx,3
  121.   mov     ax,[Looping]
  122.   call    DWORD PTR [Mod_Driver]
  123. @@Out:
  124. END;
  125.  
  126. PROCEDURE Mod_Stop; ASSEMBLER;
  127. ASM
  128.   cmp     [Soundcard],0
  129.   jz      @@Out
  130.   mov     bx,4
  131.   call    DWORD PTR [Mod_Driver]
  132. @@Out:
  133. END;
  134.  
  135. PROCEDURE Mod_Volume(Volume: BYTE); ASSEMBLER;
  136. ASM
  137.   cmp     [Soundcard],0
  138.   jz      @@Out
  139.   mov     bx,5
  140.   mov     al,[Volume]
  141.   call    DWORD PTR [Mod_Driver]
  142. @@Out:
  143. END;
  144.  
  145. FUNCTION  Mod_Status: WORD; ASSEMBLER;
  146. ASM
  147.   mov     ax,[Soundcard]
  148.   or      ax,ax
  149.   jz      @@Out
  150.   mov     bx,6
  151.   call    DWORD PTR [Mod_Driver]
  152. @@Out:
  153. END;
  154.  
  155. FUNCTION  Mod_Position: WORD; ASSEMBLER;
  156. ASM
  157.   mov     ax,[Soundcard]
  158.   or      ax,ax
  159.   jz      @@Out
  160.   mov     bx,7
  161.   xor     al,al
  162.   call    DWORD PTR [Mod_Driver]
  163. @@Out:
  164. END;
  165.  
  166. PROCEDURE Mod_Rewind; ASSEMBLER;
  167. ASM
  168.   cmp     [Soundcard],0
  169.   jz      @@Out
  170.   mov     bx,7
  171.   mov     al,-1
  172.   call    DWORD PTR [Mod_Driver]
  173. @@Out:
  174. END;
  175.  
  176. PROCEDURE Mod_Forward; ASSEMBLER;
  177. ASM
  178.   cmp     [Soundcard],0
  179.   jz      @@Out
  180.   mov     bx,7
  181.   mov     al,1
  182.   call    DWORD PTR [Mod_Driver]
  183. @@Out:
  184. END;
  185.  
  186. PROCEDURE Mod_Peak; ASSEMBLER;
  187. ASM
  188.   push    es
  189.   mov     ax,ds
  190.   mov     es,ax
  191.   mov     di,OFFSET Peak
  192.   cmp     [Soundcard],0
  193.   jnz     @@Ok
  194.   cld
  195.   mov     cx,4
  196.   xor     ax,ax
  197.   rep     stosw
  198.   jmp     @@Out
  199. @@Ok:
  200.   mov     bx,8
  201.   call    DWORD PTR [Mod_Driver]
  202. @@Out:
  203.   pop     es
  204. END;
  205.  
  206. END.
  207.