hola a todos, estoi desarrollando un programa en lenguaje ensamblador que lo que ase es de desplegar en pantalla una palabra con el efecto de fuego i ya esta terminado,pero ahora lo que necesito es meterle sonido,ya desarolle un programa que me krea el sonido con las teclas pero no se ligarlo i que el sonido se ejecute solo sin tener que usar el teclado,si alguien sabe como hacerlo favor de ayudarme se lo agradeceria mucho,aki les dejo mi codigo de los dos programas para que lo vean. se compilan con el tasm i tlink
;********************************************
; PROYECTO DE ENSAMBLADOR *
; ARTURO HERNANDEZ *
; ISC 4 SEMESTRE *
; ESTE ES EL DEL FUEGO*
;********************************************
code segment public 'CODE'
assume CS:code,DS:code;,ES:code,SS:code
org 100h
begin:
.386
mov al,13h
int 10h
;Comienzo de paleta 60,40,40, color 230
mov cl,255
mov bx,3f27h ;60,40
@pal0:
mov dx,03C8H
mov al,cl
cli
out dx,al
inc dx
mov al,bh
out dx,al
mov al,bl
out dx,al
out dx,al
sti
dec cx
cmp cl,69
ja short @pal0
mov bl,bh
sar bl,1
dec bh
jns short @pal0
;Fin de paleta
mov ah,9
mov dx,OFFSET Nombre
int 21h
@inicio:
mov bh,9h ;950h
inc dx
@l1:
mov ax,0a000h
mov es,ax
mov ds,ax
mov di,bx
scasb
je short @term
imul di,bx,5
sub di,dx
mov ax,10
sub al,bh
sal al,3
mov ds:[di+42245],ax ;42245
mov ds:[di+42885],ax ;42885
add di,dx
mov cx,7
add di,22410
@dib:
imul si,si,371
ror si,3
mov ax,si
and ax,0010000000100000b ;;rand de 32
add ax,4b4bh ;75
stosw
stosw
stosb
sub di,325
loop short @dib
@term:
dec bx
jnz short @l1
;************llama al fuego***********************
mov bh,0fh
@loop0:
mov ax,ds:[bx]
add al,ah
xor ah,ah
sal ax,50 ;visualizacion del fuego 4,50
mov cl,34 ;que tanto fuego
div cl
cmp al,7 ;7
jb short @skip
mov ah,al
mov ds:[bx-1],ax
mov ds:[bx-321],ax
mov ds:[bx-641],ax
@skip:
inc bx
inc bx
cmp bh,130
jbe short @loop0
;********************************** termino de fuego
in ax,60h ;Leo el teclado
cmp al,1
jnz @inicio
mov ax,03h
int 10h
ret
Nombre db ' *ISC*$'
code ENDS
END begin
;********************************************
; PROYECTO DE ENSAMBLADOR *
; ARTURO HERNANDEZ *
; ISC 4 SEMESTRE *
; ESTE ES EL DEL SONIDO*
;********************************************
FIRMA1 equ 2387h
FIRMA2 equ 7A8Dh
codigo segment
assume cs:codigo
org 100h ;Inicio de programa .COM
inicio: jmp short verif_instalac ;Saltar al codigo de instalacion.
viejo_int9 label dword
offset_int9 dw 0
segmento_int9 dw 0
Estado db 1 ;1: Habilitado; 0: No habilitado.
Firma dw FIRMA1,FIRMA2
;
; Manejador de la interrupcion 9 (teclado)
;
int9handler: cmp Estado,0 ;Sonido habilitado?
jz ir_a_viejo_INT9 ;Saltar si no es asi.
push ax ;Preservar registros utilizados.
push cx
push dx
mov al,182 ;Generar onda cuadrada en timer 2
out 67,al ;para poder producir sonido.
in al,96 ;Leer el controlador de teclado.
cmp al,128 ;Ver si se apreto o solto una tecla.
jnc silencio ;Saltar si se solto.
add al,al ;Ajustar el codigo de exploracion:
jns hallar_frec ;cada dos valores se debe incrementar
sub al,127 ;un semitono.
hallar_frec: mov cl,al ;CX = Cantidad de medios semitonos
xor ch,ch ; por encima del LA (55 Hz).
mov ax,21690 ;AX = 55 Hz (LA)
ciclo_frec: mov dx,63670 ;DX = Medio semitono.
mul dx ;DX = Siguiente medio semitono.
mov ax,dx ;AX = Siguiente medio semitono.
loop ciclo_frec ;Continuar calculando frecuencia.
jmp short sonar ;Ir a poner la nota.
silencio: mov ax,40 ;Silencio.
sonar: out 66,al ;Poner la parte baja del contador.
mov al,ah
out 66,al ;Poner la parte alta del contador.
in al,97 ;Habilitar salida del parlante.
or al,3
out 97,al
pop dx ;Restaurar registros utilizados.
pop cx
pop ax
ir_a_viejo_INT9:
jmp viejo_int9 ;Ir al viejo manejador de la
;interrupcion del teclado.
;
; Instalacion del TSR.
;
verif_instalac: xor ax,ax ;Apuntar a la tabla de interrupcion.
mov es,ax
lds bx,es:9*4 ;DS:BX = Puntero al manejador de la
;interrupcion del teclado.
cmp word ptr [bx-4],FIRMA1 ;Si la firma no coincide,
jne instalar ;instalar el TSR.
cmp word ptr [bx-2],FIRMA2 ;Si la firma no coincide,
jne instalar ;instalar el TSR.
xor ds:Estado,1 ;Cambiar estado: sonido si/no.
push cs
pop ds ;DS = Segmento de codigo.
mov dx,offset sonido_si ;Puntero a texto de sonido activado.
jnz mostrar_texto
mov dx,offset sonido_no ;Puntero a texto de sonido desactivado.
mostrar_texto: mov ah,9
int 21h ;Llamar a funcion DOS para mostrarlo.
in al,97 ;Deshabilitar sonido.
and al,252
out 97,al
mov ax,4c00h ;Fin del programa.
int 21h
instalar: mov offset_int9,bx ;Preservar offset vieja interrupcion 9.
mov segmento_int9,ds ;Preservar segmento vieja int 9.
cli ;Deshabilitar interrupciones.
mov es:9*4,offset int9handler ;Nuevo offset interrupcion 9.
mov es:9*4+2,cs ;Nuevo segmento interrupcion 9.
sti ;Habilitar interrupciones.
push cs
pop ds ;DS = Segmento de codigo.
mov dx,offset sonido_si ;Mostrar texto de sonido habilitado.
mov ah,9
int 21h
mov dx,offset verif_instalac ;Instalar TSR.
int 27h
sonido_si db "Sonido activado.",13,10,"$"
sonido_no db "Sonido desactivado.",13,10,"$"
codigo ends
end inicio