You are on page 1of 4

(1/1) hernandez731: hola a todos, estoi desarrollando un programa en lenguaje ensamblador que lo qu e ase es de desplegar en pantalla una palabra

con el efecto de fuego i ya esta t erminado,pero ahora lo que necesito es meterle sonido,ya desarolle un programa q ue me krea el sonido con las teclas pero no se ligarlo i que el sonido se ejecut e solo sin tener que usar el teclado,si alguien sabe como hacerlo favor de ayuda rme se lo agradeceria mucho,aki les dejo mi codigo de los dos programas para que lo vean. se compilan con el tasm i tlink .. hernandez731@hotmail.com ;******************************************** ; 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 mov cli out inc mov out mov out out sti dec cmp ja dx,03C8H al,cl dx,al dx al,bh dx,al al,bl dx,al dx,al cx cl,69 short @pal0

mov bl,bh sar bl,1 dec bh jns short @pal0 ;Fin de paleta mov mov int @inicio: mov inc bh,9h dx ;950h ah,9 dx,OFFSET Nombre 21h

@l1: mov mov mov ax,0a000h es,ax ds,ax

mov di,bx scasb je short @term imul di,bx,5 sub mov sub sal mov mov add mov add @dib: imul ror mov and add si,si,371 si,3 ax,si ax,0010000000100000b ax,4b4bh di,dx ax,10 al,bh al,3 ds:[di+42245],ax ds:[di+42885],ax di,dx cx,7 di,22410

;42245 ;42885

;;rand de 32 ;75

stosw stosw stosb sub di,325 loop short @dib @term: dec jnz bx short @l1

;************llama al fuego*********************** mov @loop0: mov add xor sal mov div cmp jb mov mov mov mov ax,ds:[bx] al,ah ah,ah ax,50 ;visualizacion del fuego cl,34 ;que tanto fuego cl al,7 ;7 short @skip ah,al ds:[bx-1],ax ds:[bx-321],ax ds:[bx-641],ax bh,0fh

4,50

@skip: inc bx inc bx cmp bh,130 jbe short @loop0 ;********************************** in cmp ax,60h al,1 jnz @inicio

termino de fuego ;Leo el teclado

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 FIRMA2 codigo equ 2387h equ 7A8Dh 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.

silencio: sonar: mov al,ah or al,3 out 97,al

mov ax,dx loop ciclo_frec jmp short sonar mov ax,40 out 66,al out 66,al in al,97 pop dx

;AX = Siguiente medio semitono. ;Continuar calculando frecuencia. ;Ir a poner la nota. ;Silencio. ;Poner la parte baja del contador. ;Poner la parte alta del contador. ;Habilitar salida del parlante. ;Restaurar registros utilizados.

pop cx pop ax ir_a_viejo_INT9: jmp viejo_int9 ; ; Instalacion del TSR. ; verif_instalac: xor ax,ax mov es,ax lds bx,es:9*4 cmp jne cmp jne xor 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 ;Ir al viejo manejador de la ;interrupcion del teclado.

;Apuntar a la tabla de interrupcion.

;DS:BX = Puntero al manejador de la ;interrupcion del teclado. word ptr [bx-4],FIRMA1 ;Si la firma no coincide, instalar ;instalar el TSR. word ptr [bx-2],FIRMA2 ;Si la firma no coincide, instalar ;instalar el TSR. ds:Estado,1 ;Cambiar estado: sonido si/no.

You might also like