home *** CD-ROM | disk | FTP | other *** search
/ Groovy Bytes: Behind the Moon / groovybytes.iso / GROOVY / SND_TOOL / CDMP16.ZIP / SOURCE.ZIP / SBTIMER.ASM < prev    next >
Encoding:
Assembly Source File  |  1994-12-28  |  5.0 KB  |  249 lines

  1. ;[]------------------------------------------------------------------------[]
  2. ;|                                                                          |
  3. ;| (c) 1993,1994 by Marc van Shaney , aka Kaya Memisoglu                    |
  4. ;|                                                                          |
  5. ;| Dieser Assembler-Source-Code unterliegt dem Urheberrecht von Kaya        |
  6. ;| Memisoglu und darf auch nur mit seiner schriftlichen Genehmigung         |
  7. ;| in kommerziellen Programmen verwendet werden.                            |
  8. ;| Ich übernehme keinerlei Verantwortung für eventuelle Schäden,die dieses  |
  9. ;| Programm verursacht.                                                     |
  10. ;|                                                                          |
  11. ;|                                                                          |
  12. ;|                                                                          |
  13. ;| 18.1.1994 Kaya Memisoglu                                                 |
  14. ;|                                                                          |
  15. ;[]------------------------------------------------------------------------[]
  16.  
  17. ; !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!!
  18. ; !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!!
  19. ;
  20. ; I DO NOT SAVE THE REGISTER VARIABLES SI AND DI IN THIS CODE AND IN SOME
  21. ; OTHER MODULES. SO MAKE SURE BEFORE COMPILING THIS CODE THAT THE REGISTER
  22. ; VARIABLES IN BORLAND C ARE SET TO *NONE*.
  23. ; BUT IF YOU STILL WANT TO USE THEM, YOU HAVE TO SAVE THEM BY CHANGING THIS
  24. ; CODE !!!
  25. ;
  26. ; !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!!
  27. ; !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!!
  28.  
  29.  
  30. P386
  31. LOCALS
  32.  
  33.  
  34.  
  35. DSP_Out_DMA         equ  14h
  36. DSP_Reset_Port      equ  6
  37. DSP_Read_Port       equ  0ah
  38. DSP_Write_Port      equ  0ch
  39. DSP_Status_Port     equ  0eh
  40.  
  41. DRV_TEXT         equ 'Sound-Blaster timer driver     ',0  ; 32 Bytes
  42. DRV_VERSION     equ 1
  43.  
  44. DRV_NAME MACRO
  45. PUBLIC C SBTIMER_Driver
  46. SBTIMER_Driver dd DISPATCH
  47.     ENDM
  48. EXTERNAL_ROUTINES MACRO
  49.  
  50. DSP_Base        DW 220h
  51. DSP_Retry    DW 10
  52. Config_Port    DW 2
  53. SB_Pro        DB 0
  54.  
  55.  
  56. DSP_Init PROC NEAR
  57.       mov dx,cs:[DSP_Base]
  58.       add dx,DSP_Reset_Port
  59.       mov al,1
  60.       out dx,al
  61.     push cx
  62.     push ax
  63.     push si
  64.     push ds
  65.     pushfd
  66.     cld
  67.     xor si,si
  68.     mov cx,0fffeh
  69.     rep lodsb
  70.     xor si,si
  71.     mov cx,0fffeh
  72.     rep lodsb
  73.     popfd
  74.     pop ds
  75.     pop si
  76.     pop ax
  77.     pop cx
  78.       xor al,al
  79.       out dx,al
  80.  
  81.       mov dx,cs:[DSP_Base]
  82.       add dx,DSP_Read_Port
  83.       mov cx,1000h
  84.  Schleife51:
  85.     push cx
  86.     mov dx,cs:[DSP_Base]
  87.     add dx,DSP_Status_Port
  88.     mov cx,1400h
  89.    Schleife61:
  90.      in al,dx
  91.      test al,128
  92.    loope Schleife61
  93.        mov dx,cs:[DSP_Base]
  94.        add dx,DSP_Read_Port
  95.        in al,dx
  96.        pop cx
  97.        cmp al,0aah
  98.        je OK
  99.  loopne Schleife51
  100.  
  101.       mov ax,FALSE
  102.       retn
  103.   OK:
  104.       mov ax,TRUE
  105.       retn
  106. DSP_Init ENDP
  107.  
  108.  
  109.  
  110.  
  111. DSP_Read PROC NEAR
  112.       mov dx,cs:[DSP_Base]
  113.       add dx,DSP_Status_Port
  114.       mov cx,2000h
  115.  Schleife73:
  116.        in al,dx
  117.        test al,128
  118.  loope Schleife73
  119.       mov dx,cs:[DSP_Base]
  120.       add dx,DSP_Read_Port
  121.       in al,dx
  122.       movzx ax,al
  123.       retn
  124. DSP_Read ENDP
  125.  
  126.  
  127.  
  128.  
  129.  
  130. DSP_Write PROC NEAR
  131.       ARG Value:word
  132.       push bp
  133.       mov bp,sp
  134.  
  135.       mov dx,cs:[DSP_Base]
  136.       add dx,DSP_Write_Port
  137.       mov cx,2000h
  138.  Schleife97:
  139.        in al,dx
  140.        test al,128
  141.  loopne Schleife97
  142.  
  143.       mov ax,Value
  144.       out dx,al
  145.       pop bp
  146.       retn
  147. DSP_Write ENDP
  148.       ENDM
  149.  
  150.  
  151.  
  152. DRV_INIT MACRO
  153.       mov bx,cs:[Config_Port]
  154.       shl bx,4
  155.       add bx,200h
  156.       mov cs:[DSP_Base],bx
  157.  
  158.       call DSP_Init
  159.      ENDM
  160.  
  161.  
  162.  
  163. VOICE_INIT MACRO
  164.       mov ax,cs:[Voice_Rate]
  165.       call DSP_Init
  166.       call DSP_Write C,040h
  167.  
  168.       xor cl,cl
  169.       xor edx,edx
  170.       mov eax,1000000
  171.       movzx ebx,cs:[Voice_Rate]
  172.       div ebx
  173.       neg al
  174.  
  175.       cmp ebx,23000
  176.       jb NoProCommand
  177.       mov cl,1
  178.  
  179.   NoProCommand:
  180.       mov cs:[SB_Pro],cl
  181.       mov ah,al
  182.       call DSP_Write c,ax
  183.     ENDM
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190. VOICE_PLAY MACRO
  191.       call DSP_Write C,0d1h          ;Lautsprecher einschalten
  192.     ENDM
  193.  
  194.  
  195.  
  196. VOICE_STOP MACRO
  197.       call DSP_Write C,0d2h
  198.         ENDM
  199.  
  200.  
  201.  
  202. VOICE_OUT MACRO
  203.       push dx
  204.       push cx
  205.       mov ah,al
  206.       mov dx,cs:[DSP_Base]
  207.       add dx,DSP_Write_Port
  208.       mov cx,cs:[DSP_Retry]
  209.  Schleife242:
  210.        in al,dx
  211.        test al,128
  212.  loopne Schleife242
  213.       mov al,10h
  214.       out dx,al
  215.  
  216.       mov cx,cs:[DSP_Retry]
  217.  Schleife250:
  218.        in al,dx
  219.        test al,128
  220.  loopne Schleife250
  221.       mov al,ah
  222.       out dx,al
  223.       pop cx
  224.       pop dx
  225.       ENDM
  226.  
  227.  
  228.  
  229.  
  230.  
  231. include sndtimer.inc
  232.  
  233.  
  234.  
  235. Config_Info     dd 036bea73fh
  236.         dw 2        ;Einträge
  237.  
  238.         db 2,14
  239.         dw OFFSET Config_Port
  240.         dw 0,8,1
  241.         dw 0,0,0
  242.         DB "I/O Port 2x0h",0
  243.                 db 2,14
  244.                 dw OFFSET DSP_Retry
  245.                 dw 4,50,2
  246.                 dw 0,0,0
  247.                 db "Timeout value",0
  248.  
  249. END