home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / BLACDEMO.ZIP / sound.inc < prev    next >
Text File  |  1995-04-17  |  5KB  |  219 lines

  1. ;************************************************************************
  2. ;* Filename : SOUND.INC                                                 *
  3. ;* Purpose  : Include file for SB interface STMIK                       *
  4. ;************************************************************************
  5.  
  6.  
  7. .data
  8.  
  9. ModSeg          dw      ?
  10. SBInstalled     db      0
  11. SBirq           db      0
  12. BaseAddr        dw      0
  13. MixRate         dw      0
  14. SBText1         db      13, 10, "            -=  Sinbad's Sound Card Setup =-"                                                                                
  15.         db      13, 10, 13, 10, "Do you have a SB compatible sound card? (Y/N)$"
  16. SBText2         db      13, 10, "What's the IRQ setting?$ "
  17. SBText3         db      13, 10, "What's the base address? Choose:"
  18.         db      13, 10, "Press: [0] - 200h"
  19.         db      13, 10, "       [1] - 210h"
  20.         db      13, 10, "       [2] - 220h"
  21.         db      13, 10, "       [3] - 230h"
  22.         db      13, 10, "       [4] - 240h", 13, 10, "$"
  23. SBText4         db      13, 10, "What Mixing Rate? (higher = better) Choose:"
  24.         db      13, 10, "Press: [0] - 5000Hz"
  25.         db      13, 10, "       [1] - 10000Hz"
  26.         db      13, 10, "       [2] - 16000Hz", 13, 10, "$"
  27.  
  28.  
  29.  
  30. .code
  31.  
  32.  
  33. ;--------------------- LOAD A STX FILE ----------------------------------
  34. ; *** PRE-LOAD:
  35. ;              [FileName] = ASCIIZ filename
  36. ;               DX = offset to filename
  37. ;               AX = minimum paragraphs reserved
  38. ;*** RETURNS: 
  39. ;               DX = segment of MOD
  40.  
  41.  
  42. tmpseg  dw      0
  43. filerquit db    1
  44. LoadSTX         PROC    NEAR
  45.         push    ds
  46.         mov     bp,ax
  47.         mov     ax,cs
  48.         mov     ds,ax ;set ds=cs
  49.         mov     ah,3dh ;open file
  50.         mov     al,0 ;read only
  51.         int     21h
  52.         jc      ferror
  53.         mov     bx,ax ;store filehandle to bx
  54.         ;get length of file (seek to end)
  55.         mov     ah,42h
  56.         mov     al,2
  57.         mov     cx,0
  58.         mov     dx,0
  59.         int     21h
  60.         jc      ferror
  61.         ;get memory
  62.         push    bx
  63.         shr     dx,1
  64.         rcr     ax,1
  65.         shr     dx,1
  66.         rcr     ax,1
  67.         shr     dx,1
  68.         rcr     ax,1
  69.         shr     dx,1
  70.         rcr     ax,1
  71.         mov     bx,ax
  72.         inc     bx ;one extra, just in case :-)
  73.         cmp     bx,bp
  74.         ja      loff1
  75.         mov     bx,bp
  76. loff1:          
  77.         call    GetMem
  78.         ;mov     ah,48h
  79.         ;int     21h
  80.         jc      ferror
  81.         mov     cs:tmpseg,ax
  82.         pop     bx
  83.         ;Seek file back to the beginning
  84.         mov     ah,42h
  85.         mov     al,0
  86.         mov     cx,0
  87.         mov     dx,0
  88.         int     21h
  89.         jc      ferror
  90.         ;read file
  91.         mov     ds,cs:tmpseg
  92. faga:           mov     ah,3fh
  93.         mov     cx,32768
  94.         mov     dx,0
  95.         int     21h
  96.         jc      ferror
  97.         mov     dx,ds
  98.         add     dx,800h
  99.         mov     ds,dx
  100.         cmp     ax,32768
  101.         je      faga
  102.         ;close file
  103.         mov     ah,3eh
  104.         int     21h
  105.         mov     dx,cs:tmpseg ;segment
  106.         xor     ax,ax
  107.         pop     ds
  108.         ret
  109. ferror2:        mov     ax,1
  110.         pop     ds
  111.         ret
  112. ferror:         cmp     cs:filerquit,0
  113.         je      ferror2
  114.         pop    bx            ;get rid of bx
  115.         pop     ds
  116.         inc    [OutMemFlag]        ;note out of memory
  117.         ret            
  118. LoadSTX         ENDP
  119.  
  120.  
  121. SoundSetup      PROC NEAR
  122.     mov     dx, offset SBText1
  123.     mov     ah, 9
  124.     int     21h
  125.     
  126.     mov     ah, 1
  127.     int     21h
  128.     cmp     al, 'y'
  129.     je      GotSB
  130.     cmp     al, 'Y'
  131.     je      GotSB
  132.     ret                             ;no SB installed - exit
  133.  GotSB:
  134.     inc     [SBInstalled]           ;note SB is installed
  135.     mov     dx, offset SBText2
  136.     mov     ah, 9
  137.     int     21h
  138.     
  139.     mov     ah, 1                   ;get IRQ
  140.     int     21h
  141.     sub     al, '0'                 ;ASCII -> decimal
  142.     mov     [SBirq], al             ;save irq
  143.     
  144.     mov     dx, offset SBText3
  145.     mov     ah, 9
  146.     int     21h
  147.  
  148.  GetBase:
  149.     mov     ah, 1                   ;get base address
  150.     int     21h             
  151.     cmp     al, '6'
  152.     jae     GetBase                 ;invalid answer
  153.     sub     al, '0'                 ;ASCII -> decimal       
  154.     xor     ah, ah
  155.     shl     ax, 4                   ;mult by 16 (2x0h)
  156.     add     ax, 200h                ;final base address
  157.     mov     [BaseAddr], ax          ;save base address
  158.     
  159.  GetMix:
  160.     mov     dx, offset SBText4
  161.     mov     ah, 9
  162.     int     21h
  163.     
  164.     mov     ah, 1                   ;get Mixing rate
  165.     int     21h
  166.     cmp     al, '3'
  167.     jae     GetMix                  ;invalid response
  168.     cmp     al, '2'
  169.     jb      mix2
  170.     mov     [MixRate], 16000        
  171.     jmp     endmix
  172.  mix2:
  173.     cmp     al, '1'
  174.     jb      mix3
  175.     mov     [MixRate], 10000
  176.     jmp     endmix
  177.  mix3:  
  178.     mov     [MixRate], 5000
  179.  endmix:
  180.  
  181.  
  182.     cmp     [SBInstalled], 1
  183.     jne     skipSBsetup             ;skip the next bit if no SB
  184.     mov     dx, offset STXName
  185.     mov     ax, 0
  186.     call    LoadSTX                
  187.     mov     [ModSeg], dx            ;save segment of MOD
  188.     
  189.     mov     ax, 0                   ;function - init SB
  190.     mov     bh, [SBirq]             ;IRQ x, mode 1 (SB)
  191.     mov     bl, 1
  192.     mov     cx, [BaseAddr]          ;address
  193.     mov     dx, [MixRate]           ;mix speed
  194.     call    stmik_asm
  195.  
  196.     mov     ax, 3
  197.     mov     bx, 1
  198.     call    stmik_asm               ;manual polling
  199. skipSBsetup:
  200.  
  201.     ret
  202. SoundSetup      ENDP
  203.  
  204. StartSTX    MACRO
  205.     ;** pre-load: BX = segment of mod to play
  206.     mov     ax, 1                   ;play MOD
  207.     call    stmik_asm
  208.     ret
  209.     ENDM
  210.  
  211. StopSTX        MACRO
  212.     mov     ax, 2                   ;stop MOD
  213.     call    stmik_asm               
  214.     ENDM
  215.  
  216. PollSB    MACRO
  217.     mov     ax, 4
  218.     call    stmik_asm                       ;poll music     
  219.     ENDM