elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: [1]
1  Informática / Electrónica / ayuda en ensamblador en: 15 Mayo 2007, 05:40 am
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

Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines