;************************
;* MACRO SOUND BLASTER  *
;************************
SOUND_ROUTINES MACRO
 DRVHANDLE DW 0
 DRVMEM    DW 0
 TAILL     DW 0
 SNDMEM    DW 0
 
LOAD_SN:
  PUSH DX
  MOV CX,0                      ;Lit la taille du fichier
  MOV AH,4EH
  INT 21H
  POP DX
 JC ERRORSND
  PUSH DX
  GET_MEM CS:SNDMEM,TAILLE       ;Reserve un espace memoire pour le DRV
  MOV ECX,TAILLE
  MOV CS:TAILL,CX
 

  MOV AX,3D00H                    ;Ouvre le fichier en lecture
  POP DX
  INT 21H
  PUSH AX               ;Sauve le handle
 
 
 PUSH DS
  MOV AX,CS:SNDMEM
  MOV DS,AX
  MOV DX,0                       ;lit dans le fichier
  MOV CX,CS:TAILL
  POP BX
  PUSH BX
  MOV AH,3FH
  INT 21H
 POP DS

  MOV AH,3EH                 ;Ferme le fichier
  POP BX
  INT 21H

 ERRORSND:


RET
ENDM

LOAD_SND MACRO NOM,HAND
 MOV DX,OFFSET NOM
 CALL LOAD_SN
 MOV AX,CS:SNDMEM
 MOV HAND,AX
ENDM

LOAD_SND_DRV MACRO NOMFICH
  MOV CX,0                      ;Lit la taille du fichier
  MOV DX,OFFSET NOMFICH
  MOV AH,4EH
  INT 21H
 JC ERRORDRV

  GET_MEM CS:DRVMEM,TAILLE       ;Reserve un espace memoire pour le DRV
  MOV ECX,TAILLE
  MOV CS:TAILL,CX
 JC ERRORDRV

  MOV AX,3D00H                    ;Ouvre le fichier en lecture
  MOV DX,OFFSET NOMFICH
  INT 21H
  PUSH AX               ;Sauve le handle
 
 
 PUSH DS
  MOV AX,CS:DRVMEM
  MOV DS,AX
  MOV DX,0                       ;lit dans le fichier
  MOV CX,CS:TAILL
  POP BX
  PUSH BX
  MOV AH,3FH
  INT 21H
 POP DS

  MOV AH,3EH                 ;Ferme le fichier
  POP BX
  INT 21H

 ERRORDRV:
ENDM

ERASE_SND_DRV MACRO
 FREE_MEM CS:DRVMEM
ENDM

