Beruflich Dokumente
Kultur Dokumente
PRCTICA 4
PRCTICA 4
GENERACIN DE SONIDOS DE DIFERENTES FRECUENCIAS
1.
INTRODUCCIN
Esta prctica est centrada a los sonidos que se pueden emitir en una computadora a travs de un programa en LENGUAJE ENSAMBLADOR. Todos los sonidos que se emiten, se pueden variar mediante la frecuencia, la cual est dada en veces por segundo.
2.
OBJETIVOS
2.1 El alumno aprender a usar los puertos de salida para emitir sonidos y ruidos por el altavoz. Aprender a variar la frecuencia de duracin de cualquier meloda. Aprender a usar rutinas para producir tonos y efectos raros.
2.2 2.3
3
3.1
DESARROLLO
Capturar el siguiente mdulo y guardarlo en SONIDO.ASM.
%TITLE
small
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
PRCTICA 4
DW DW DW DW DW DW
;G ;A ;B
PROC
push push mov mov div mov pop pop
ENDP
Frec
Salvamos registros, hacemos la divisin con el registro CX. El resultado est en el registro AX, lo movemos al registro CX, ya que el registro CX tendr la frecuencia usada.
3.2
PROC
push
PoneTono ax
;Carga perodo en el timer
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
PRCTICA 4
out pop
42h,al ax
;Repone registro
ENDP
PoneTono
El registro CX contiene la frecuencia. Movemos la parte baja del registro CX al registro AL para mandar el contenido de AL a la puerta de salida 42h. La parte alta del registro CX la mandamos al registro AL y lo ponemos en la puerta de salida 42h.
3.3
PROC
push in or out pop
ENDP
ATono
Traemos byte al puerto de entrada, posteriormente encendemos el altavoz y sacamos el nuevo valor del registro AL por el puerto de salida 61h.
3.4
PROC
push mov mov mov div mov
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
PRCTICA 4
;Trae tics del da con BIOS ;Salva parte alta ;Salva parte baja
@@10:
mov int sub sbb cmp jb ja cmp jb ah,0 1ah dx,bx cx,0 cx,[word ContReloj] @@10 @@20 dx,[word ContReloj+2] @@10
;Lee con BIOS los tics ;Les resta tics del lapso ;Compara parte alta ;Si es menor vuelve a leer ;Si mayor, ya termino ;Iguales, compara parte inferior
@@20:
pop ret bx cx dx ax
;recobra registros
ENDP
Lapso
Salvamos registros. Cargamos registro DX con cero, registro AX con el tiempo del registro CX y el registro BX con 55. Dividimos el registro BX, el resultado se encuentra en AX, lo colocamos en el registro BX (nmero de tics). Usamos el servicio 0 de la interrupcin 1Ah para obtener los tics del reloj y salvarlos en la variable: ContReloj dw ?,? (CX,DX)
Volvemos a usar la interrupcin 1Ah para obtener los nuevos tics del reloj. Restamos el registro DX con el nmero de tics (BX). El resultado es almacenado en DX. Hacemos una resta con prstamo del registro CX con cero. Comparamos la parte alta de la variable ContReloj con el registro CX; si es menor salta a @@10 para volver a usar la interrupcin 1Ah; si es mayor termina y recupera registros; si no suceden ambos casos comparamos la parte inferior de la variable ContReloj con el registro DX; si es menor salta a @@10 para usar la interrupcin 1Ah; si no termina con la subrutina y recupera registros.
3.5
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
PRCTICA 4
PROC
push in and out pop
ENDP
QTono
Traemos valor a puerta de entrada, apagamos el altavoz y sacamos el valor del registro AL por la puerta de salida 61h.
3.6
PROC
push push push mov mov div mov mov cbw shl mov mov call xchg neg add sal pop pop pop
Nota cx bx ax ah,0 cl,12 cl dl,al al,ah ax,1 bx,ax cx,[notas + bx] Frec cx,dx cl cl,8 dx,cl ax bx cx
;Salva registros que ;usa ;Extiende nmero de nota ;Divide entre 12 ;Has la divisin ;El cociente da la octava ;El residuo es el ndice ;Bsqueda requiere 16 bits ;Dos bytes por nota ;Usa direccionamiento base ;Trae de la tabla ;Convierte la frecuencia ;Octava en CL, periodo en DX ;Contador de corrimiento ;= 8 - octava ;Recupera registros
ENDP
Nota
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
4-5
PRCTICA 4
RUTINA QUE TOCA MSICA A PARTIR DE DATOS BINARIOS ;Toca ; DS: SI apunta a lista de datos binarios, formada por 4 comandos: ;Entrada: T, N, D y X, que forman la tonada, donde: ; ; ; Comando Tiempo: ; 1er. Byte = ASCII T ; 2do. Byte = tiempo en notas enteras por minuto ; ; Comando Nota: ; ; 1er. Byte = ASCII N ; 2do. Byte = nmero de nota (0 a 95) ; 3er. Byte = largo (binario de punto fijo 8 bits, escala 1) ; 4to. Byte = estilo (binario de punto fijo 8 bits, escala 0) ; ; Comando Descanso: ; 1er. Byte = ASCII D ; 2do. Byte = largo (binario de punto fijo 8 bits, escala 1) ; ; Comando de Terminacin: ; 1er. Byte = ASCII X ; ;Salida: A bocina y temporizador solamente ;Registros: Ninguno
PROC
push push push push push
;
Toca si dx cx bx ax
;Salva registros usados
mov cld
[Entera],2000
@@10:
lodsb
; ;Trae byte de la lista
;Final ?
comando tempo.
@@20:
cmp jne al,'T' @@30
;Comando tiempo? ;No, brinca 4-6
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
PRCTICA 4
;Trae tempo ;Lo pone en CX ;Milisegundos en un minuto ;Borra parte superior ;Divide entre el tiempo ;ms por nota entera
comando nota..
@@30:
cmp jne lodsb call mov call call mov lodsb mov mov sal mul mov lodsb mov mov mul mov sub mov mov call call mov call jmp
;
al,'N' @@40 Nota cx,dx PoneTono Atono cx,[Entera] ah,al al,0 cx,1 cx cx,dx ah,al al,0 cx [ContA],dx cx,dx [ContD],cx cx,[ContA] Lapso QTono cx,[contD] Lapso @@10
;Comando nota ? ;No, brinca ;Trae nmero de nota ;Convierte ;Resultado en CX ;Pone la frecuencia ;Prende el altavoz ;Trae ms por nota entera ;Trae duracin ;Prepara multiplicador ;de duracin ;Factor de escala 1 ;Multiplica ;Contador total para la nota ;Trae estilo ;Prepara multiplicador ;de estilo ;Multiplica ;Salva contador para nota ;Contador para descanso ;Lo salva ;Parte audible de la nota ;Retardo ;Apaga altavoz ;Parte inaudible de la nota
Comando de descanso..
@@40:
cmp jne mov lodsb mov mov sal mul mov al,'D' @@99 cx,[Entera] ah,al al,0 cx,1 cx cx,dx
;Comando de silencio ? ;No, salir ;Trae ms por nota entera ;Trae duracin ;Prepara multiplicador ;de duracin ;Factor para escala 1 ;Multiplica ;Contador total 4-7
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
PRCTICA 4
call jmp
Lapso @@10
@@99:
pop pop pop pop pop ret ax bx cx dx si
;Recupera
ENDP END
Toca
;Fin de mdulo SONIDO.ASM.
Salvamos registros. Colocamos 2,000 milisegundos en variable [Entera]. Traemos Byte de la lista y lo comparamos con "X", con "T", con "N" y con "D".
3.7
3.8
3.9
%TITLE
IDEAL
small 512
0 'T',18 'N',58,24,192 'N',62,08,192 'N',65,96,192 'N',62,24,192 'N',67,08,192 'N',65,32,192 'N',62,24,192 N',58,08,192 'N',53,32,192 'N',58,24,192
;Corno Francs
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
4-8
PRCTICA 4
DB DB DB DB DB DB DB DB DB DB
'N',62,08,192 'N',60,32,192 'N',58,24,192 'N',53,08,192 'N',50,32,192 'N',46,24,192 'N',55,08,192 'N',53,64,192 'N',41,64,192 'X'
CODESEG
; De SONIDO.OBJ
EXTRN Inicia:
mov mov mov mov call mov mov nt
Toca:proc
END Inicia
3.10
C:\SEM386>strauss
3.12 Capturar las siguientes rutinas y ponerlas en el mdulo SONIDO.ASM:
%TITLE
DATASEG
f1 f2 DW DW 256 4096
;frecuencia inicial ;frecuencia final
CODESEG
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
4-9
PRCTICA 4
PUBLIC
;Fuga ; ;Entrada: ; ; ;Salida: ;Registros:
Alerta
SONIDO QUE DESLIZA LA FRECUENCIA HACIA ARRIBA O HACIA ABAJO BX = frecuencia inicial CX = frecuencia final DX = control de la razn de cambio (ms bajo rpido) Bocina y 8254 solamente Ninguno
PROC
push push push push push mov mov call
;
@@10:
mov call call mov shl cx,bx Frec PoneTono cx,dx cx,2
;trae la frecuencia ;convierte la frecuencia ;prepara el tono ;parmetro de retardo
@@20:
nop nop loop cmp je add jmp
@@30:
call pop pop pop pop Qtono ax bx cx dx
;apaga la bocina ;repone todo
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
4-10
PRCTICA 4
pop ret
si
ENDP
;Alerta ; ;Entrada: ;Salida: ;Registros:
Fuga
EFECTA UNA ALERTA ROJA CON DIEZ FUGAS CRECIENTES Ninguna Bocina y temporizador nicamente Ninguno
PROC
push push push mov
Alerta dx cx bx cx,10
;salva todo
@@10:
push mov mov mov call pop loop pop pop pop cx bx,256 cx,4096 dx,2 Fuga cx @@10 bx cx dx
;salva contador ;frecuencia inicial ;frecuencia final ;control ;restaura contador ;repone registros
ENDP
3.13
Alerta
%TITLE
small 512
CODESEG
; De SONIDO.OBJ
EXTRN
Alerta:proc
4-11
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
PRCTICA 4
Inicia:
mov mov mov call mov mov int ax,@data ds,ax es,ax Alerta ah,4ch al,[ClaveFin] 21h
;inicia segmento de datos
END Inicia
3.14
C:\SEM386>roja
(Se debe escuchar como sirena)
4.
4.1
TAREAS
Hacer que la meloda STRAUSS se escuche ms rpido.
4.2
Con las siguientes notas hacer el programa FANFA, tonadilla muy usada en los hipdromos (Himno a la victoria). 55,32,128 60,32,128 64,32,128 67,48,228 67,16,228 67,32,228 64,48,228 64,16,228 64,32,228 60,32,128 64,32,128 60,34,128 55,96,240
4.3
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
PRCTICA 4
4.4
4.5
Crear un programa llamado EJECUTA que ejecute una meloda guardada en un archivo. Capturar el archivo tipo ASCII cuyo listado se da con el nombre ALEGRIA.MLD que permite ejecutar el conocido himno a la alegra. Hacer otro archivo para tocar Yesterday. El uso de EJECUTA es:
C:\SEM386>ejecuta alegria
T,35 N,59,64,192 N,60,32,192 N,62,32,192 N,62,32,192 N,60,32,192 N,59,32,192 N,57,32,192 N,55,32,192 N,55,32,192 N,57,32,192 N,59,32,192 N,59,48,192 N,57,16,228 N,57,64,192 D,24 N,59,64,192 N,60,32,192 N,62,32,192 N,62,32,192 N,60,32,192 N,59,32,192 N,57,32,192 N,55,32,192 N,55,32,192 N,57,32,192 N,59,32,192 N,57,48,192 N,55,16,228 N,55,64,192 D,16 N,57,64,192 N,59,32,192 N,55,32,192 N,57,32,192 N,59,16,228 N,60,16,228 N,59,32,192 N,55,32,192 N,57,32,192 N,59,16,228 N,60,16,228 N,59,32,192
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
4-13
PRCTICA 4
N,57,32,192 N,55,32,192 N,57,32,192 N,50,64,192 D,16 N,59,64,192 N,60,32,192 N,62,32,192 N,62,32,192 N,60,32,192 N,59,32,192 N,57,32,192 N,55,32,192 N,55,32,192 N,57,32,192 N,59,32,192 N,57,48,192 N,55,16,228 N,55,64,192 X
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
4-14
PRCTICA 4
DOS OCTAVAS EN EL TECLADO DE UN PIANO CON SUS FRECUENCIAS C 130 8 D 146 8 E 164 8 F 174 6 G 196 0 A 220.0 B 246 8 C 261.7 D 293 7 E 329 6 F 349 2 G 392 0 A 440 0 B 493.9 C 523.3
AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIN: PROFESOR PABLO FUENTES RAMOS
4-15
Nombre de archivo: practica 4 ensamblador 80386 Directorio: C:\Computacion V\practicas 80386 Plantilla: C:\WINDOWS\Application Data\Microsoft\Plantillas\Normal.dot Ttulo: PRCTICA 4 Asunto: Prcticas de Laboratorio de Computacin V Autor: M. en C. Salvador Saucedo Flores Palabras clave: Comentarios: Fecha de creacin: 08/07/02 04:59 P.M. Cambio nmero: 18 Guardado el: 30/07/02 09:47 A.M. Guardado por: Pablo Fuentes Ramos Tiempo de edicin: 517 minutos Impreso el: 30/07/02 09:47 A.M. ltima impresin completa Nmero de pginas: 15 Nmero de palabras: 1,781 (aprox.) Nmero de caracteres: 10,153 (aprox.)