home *** CD-ROM | disk | FTP | other *** search
/ Audio 4.94 - Over 11,000 Files / audio-11000.iso / msdos / sndbords / proaudio / pcmtlsrc / pcmtlsrc.arj / PCM.ARJ / INT94.INC < prev    next >
Text File  |  1992-08-31  |  7KB  |  405 lines

  1. ;$Author:   BCRANE  $
  2. ;$Date:   31 Aug 1992 09:34:34  $
  3. ;$Header:   X:/sccs/sdkapp/int94.inv   1.1   31 Aug 1992 09:34:34   BCRANE  $
  4. ;$Log:   X:/sccs/sdkapp/int94.inv  $
  5. ;
  6. ;   Rev 1.1   31 Aug 1992 09:34:34   BCRANE
  7. ;added support for 16-bit 
  8. ;
  9. ;   Rev 1.0   29 Jul 1992 16:57:38   BCRANE
  10. ;Initial revision.
  11. ;$Logfile:   X:/sccs/sdkapp/int94.inv  $
  12. ;$Modtimes$
  13. ;$Revision:   1.1  $
  14. ;$Workfile:   int94.inc  $ 
  15.  
  16.     db 'int94.inc: copyright Media Vision, Inc., 1992', 00h
  17. ;; intr94 - PCM interrupt handler 
  18.  
  19.     if VERBOSE
  20.     align 256
  21.     db 'START OF INT94 VARIABLES:'
  22.     endif
  23.  
  24.     align 16
  25. DMADONEFLAG dw 0
  26.     if VERBOSE
  27.     db ':DMADONEFLAG'
  28.     endif
  29.  
  30.     align 2
  31. MAXI94FUNCS equ 12
  32. dispatch:
  33. d_i94f00 dw offset _i94f00
  34. d_i94f01 dw offset _i94f01
  35. d_i94f02 dw offset _i94f02
  36. d_i94f03 dw offset _i94f03
  37. d_i94f04 dw offset _i94f04
  38. d_i94f05 dw offset _i94f05
  39. d_i94f06 dw offset _i94f06
  40. d_i94f07 dw offset _i94f07
  41. d_i94f08 dw offset _i94f08
  42. d_i94f09 dw offset _i94f09
  43. d_i94f10 dw offset _i94f10
  44. d_i94f11 dw offset _i94f11
  45.  
  46.     if VERBOSE
  47.     align 16
  48.     db 'I94INHERE:'
  49.     endif
  50. i94inhere dw 0
  51.  
  52.     align 2
  53. MAXI94SPEC equ 24
  54. shark:
  55. s_i94f80     dw offset _i94f80, offset _i94f81
  56.         dw offset _i94f82, offset _i94f83
  57.         dw offset _i94f84, offset _i94f85
  58.         dw offset _i94f86, offset _i94f87
  59.         dw offset _i94f88, offset _i94f89
  60.         dw offset _i94f8A, offset _i94f8B
  61.         dw offset _i94f8C, offset _i94f8D
  62.         dw offset _i94f8E, offset _i94f8F
  63.         dw offset _i94f90, offset _i94f91
  64.         dw offset _i94f92, offset _i94f93
  65.         dw offset _i94f94, offset _i94f95
  66.         dw offset _i94f96, offset _i94f97
  67.  
  68.     if VERBOSE
  69.     align 256
  70.     endif
  71.  
  72. int94check:
  73. pcmversion    dw 02h
  74. pcmverstring    db 'PCMDRIVER', 0
  75.  
  76.     org int94check+11
  77.  
  78. intr94    proc far
  79.  
  80.     sti
  81.  
  82.     inc word ptr cs:id94.cnt        ; for the hell of it
  83.  
  84.     or si, si                ; test for high bit set
  85.     jns i94default                ; no, not a shark call
  86.  
  87.     push si                    ; save it
  88.  
  89.     and si, 07FFFh                ; make positive
  90.     cmp si, MAXI94SPEC            ; out of range?
  91.     jb @F                    ; si < MAX and > 0
  92.  
  93.     pop si                    ; restore
  94.     iret
  95.  
  96. @@:    push ax
  97.     shl si, 1
  98.     mov ax, word ptr cs:[shark][si]
  99.     or ax, ax
  100.     pop ax                    ; restore
  101.     jnz @F
  102.  
  103.     pop si
  104.     iret
  105.  
  106. @@:    push di                    ; should not be necessary
  107.     call word ptr cs:[shark][si]        ; only ax,dx,si can change
  108.     pop di                    ; was saved for safety
  109.  
  110.     pop si                    ; restore
  111.     iret
  112.  
  113. i94default:
  114.     cmp si, MAXI94FUNCS            ; out of range?
  115.     jb @F                    ; si < MAX and > 0
  116.  
  117.     iret                    ; request out of range
  118.  
  119. @@:    push si                    ; last restore before return
  120.  
  121.     shl si, 1                ; index
  122.     cmp word ptr cs:[dispatch][si], 0    ; address valid?
  123.     jnz @F                    ; yes, continue
  124.  
  125.     pop si                    ; not a supported function
  126.     iret
  127.  
  128. @@:    cli                    ; no interruptions
  129.  
  130.     test word ptr cs:[i94inhere], 0FFFFh    ; are we in int 94 already?
  131.     jnz @F                    ; yes, stack is set
  132.                         ; set stack now if desired
  133.  
  134. @@:    inc cs:[i94inhere]            ; we are in here
  135.  
  136.     sti                    ; okay, let someone else go
  137.  
  138.     push ax                    ; save for possible restore
  139.     push dx
  140.  
  141.     push bx                    ; dx:ax may be affected
  142.     push cx
  143.     push si
  144.     push di
  145.     push es
  146.     push ds
  147.     push bp
  148.  
  149.     mov ax, cs                ; ds= cs
  150.     mov ds, ax
  151.  
  152.     call word ptr cs:[dispatch][si]        ; ss= user stack
  153.  
  154.     pop bp
  155.     pop ds
  156.     pop es
  157.     pop di
  158.     pop si
  159.     pop cx
  160.     pop bx
  161.  
  162.     cli                    ; no interruptions
  163.  
  164.     dec cs:[i94inhere]            ; we are exiting
  165.     jnz @F                    ; not zero, called by i94f?
  166.                         ; reset stack if desired
  167.  
  168. @@:    sti                    ; okay, i feel safe now
  169.  
  170.     shr si, 1                ; si= function number
  171.  
  172.     cmp si, 0
  173.     jz popnone94
  174.  
  175.     cmp si, 1
  176.     jz popdx94
  177.  
  178.     cmp si, 2
  179.     jz popdx94
  180.  
  181.     cmp si, 3
  182.     jz popnone94
  183.  
  184.     cmp si, 4
  185.     jz popboth94
  186.  
  187.     cmp si, 5
  188.     jz popdx94    
  189.  
  190.     cmp si, 6
  191.     jz popdx94
  192.  
  193.     cmp si, 7
  194.     jz popboth94
  195.  
  196.     cmp si, 8
  197.     jz popboth94
  198.  
  199.     cmp si, 9
  200.     jz popboth94
  201.  
  202.     cmp si, 10
  203.     jz popboth94
  204.  
  205.     cmp si, 11
  206.     jz popnone94
  207.  
  208.     jmp short popboth94
  209.  
  210. popboth94:
  211.     pop dx
  212.     pop ax
  213.     jmp short done94
  214.  
  215. popdx94:
  216.     pop dx
  217.     add sp, 2
  218.     jmp short done94
  219.  
  220. popnone94:
  221.     add sp, 4
  222.     jmp short done94
  223.  
  224. done94:
  225.     pop si                    ; oh, yeah
  226.     iret
  227.  
  228. intr94    endp
  229.  
  230. ;; init94() - call int 94h, function 0
  231.  
  232. initf2    dd 11025                ; default samplerate
  233.     dw 0                    ; default mono/stereo
  234.     dw 0                    ; default compression 
  235.     dw 8                    ; default datasize
  236.  
  237. init94 proc near
  238.  
  239.     pushall
  240.  
  241.     call InitMVSound
  242.  
  243.     call InitPCM
  244.  
  245.     push word ptr initf2[8]
  246.     push word ptr initf2[6]
  247.     push word ptr initf2[4]            ; channels
  248.     push word ptr initf2[2]            ; hi word of samplerate
  249.     push word ptr initf2[0]            ; lo word of samplerate
  250.     call PCMInfo
  251.     add sp, 10
  252.  
  253.     popall
  254.  
  255.     ret
  256.  
  257. init94 endp
  258.  
  259. machinetable dw offset badmachine
  260. machinetype equ offset badmachine - offset flawlist
  261.  
  262. setupptr proc
  263.  
  264.     mov dx, machinetable        
  265.     push dx                
  266.  
  267.     sub dx,  machinetype + 1    ; d2- (d2-d1+1) = d1-1
  268.     or dx, dx
  269.     jz st_setupptr            
  270.                 
  271.     mov ax, di            
  272.                   
  273. st_setupptr:
  274.     inc     dx                 ; next element
  275.     inc    cx                  ; set count
  276.     push    dx                  ; save address
  277.     push    sp                  ; save frame address 
  278.     pop    di                 ; restore target pointer
  279.     inc    bx                ; next data value
  280.  
  281.     push    dx                ; save
  282.     inc    cx                ; set up for bytes
  283.     dec    si                ; back up to source
  284.     inc    bp                ; set flag
  285.                     
  286. flawlist: 
  287.     ret                    ; we are done
  288.               
  289. badmachine:                
  290.     inc si                ; next source
  291.     dec bx                  ; backup in table
  292.     dec bp                  ; clear flag
  293.     sub cx, 2            ; word count
  294.     mov di, ax            ; linked list
  295.  
  296. exitsetupptr:
  297.     
  298.     ret                
  299.  
  300. setupptr endp
  301.  
  302. ;; functions - all int 94h functions use the following:
  303. ;;    es:bx points to parameters
  304. ;;    si= function # * 2
  305. ;;    ds points to cs
  306. ;;    ;;;ss:sp points to internal stack
  307. ;;    ax, dx may return parameters
  308. ;;     bx, cx, si, di, es, ds are trashable
  309. ;;    flags are undefined
  310.  
  311.     assume ds:_text
  312.  
  313. include _i94f00.inc
  314. include _i94f01.inc
  315. include _i94f02.inc
  316. include _i94f03.inc
  317. include _i94f04.inc
  318. include _i94f05.inc
  319. include _i94f06.inc
  320. include _i94f07.inc
  321. include _i94f08.inc
  322. include _i94f09.inc
  323. include _i94f10.inc
  324. include _i94f11.inc
  325.  
  326. ;; shark functions
  327. ;; dx:ax can be used to return values
  328. ;; si can be trashed
  329. ;; no other precautions taken
  330.  
  331.     assume ds:nothing
  332. include _i94f80.inc
  333. include _i94f81.inc
  334. _i94f82 proc
  335.     ret
  336. _i94f82 endp
  337. _i94f83 proc
  338.     ret
  339. _i94f83 endp
  340. include _i94f84.inc
  341. _i94f85 proc
  342.     ret
  343. _i94f85 endp
  344. _i94f86 proc
  345.     ret
  346. _i94f86 endp 
  347. _i94f87 proc
  348.     ret
  349. _i94f87 endp 
  350. _i94f88 proc
  351.     ret
  352. _i94f88 endp 
  353. _i94f89 proc
  354.     ret
  355. _i94f89 endp 
  356. _i94f8A proc
  357.     ret
  358. _i94f8A endp 
  359. _i94f8B proc
  360.     ret
  361. _i94f8B endp 
  362. _i94f8C proc
  363.     ret
  364. _i94f8C endp 
  365. _i94f8D proc
  366.     ret
  367. _i94f8D endp 
  368. _i94f8E proc
  369.     ret
  370. _i94f8E endp 
  371. _i94f8F proc
  372.     ret
  373. _i94f8F endp 
  374. _i94f90 proc
  375.     ret
  376. _i94f90 endp 
  377. include _i94f91.inc
  378. if DOI94F92
  379. include _i94f92.inc
  380. include _i94f93.inc
  381. include _i94f94.inc
  382. include _i94f95.inc
  383. include _i94f96.inc
  384. else
  385. _i94f92 proc
  386.     ret
  387. _i94f92 endp
  388. _i94f93 proc
  389.     ret
  390. _i94f93 endp 
  391. _i94f94 proc
  392.     ret
  393. _i94f94 endp 
  394. _i94f95 proc
  395.     ret
  396. _i94f95 endp 
  397. _i94f96 proc
  398.     ret
  399. _i94f96 endp 
  400. endif
  401. _i94f97 proc
  402.     ret
  403. _i94f97 endp 
  404.  
  405.