Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Proyecto Piano
ETC-II
Introduccin
Programar en Ensamblador x86 un Teclado electrnico para MSDOS Objetivos: Aprender a programar el entorno 8086 Aprender a realizar un driver Aprender la interaccin con los recursos hardware Aprender la interaccin entre C y Lenguaje ensamblador Conocimientos: Programacin y depuracin 8086 Funcionamiento de interrupciones software Comunicacin con programas residentes Timer del PC (interrupcin 0x1C , generacin de sonidos) RTC Uso de la pila para paso de parmetros
Septiembre-2009 APM-Octubre-2007
ETC-II
Introduccin
Generacin de un sonido mediante el altavoz del PC: El altavoz del PC est conectado al bit 1 del Puerto 61H (xxxx-xxox) Cambiando el estado del bit a ciertas frecuencias se produce una seal audible. Segn la frecuencia, tenemos un sonido (nota) u otro. Dos opciones: Bucle con espera activa y acceso directo al altavoz Usar el Timer 0 para generar la seal cuadrada automticamente PC
Onda sonora
Septiembre-2009 APM-Octubre-2007
ETC-II Nota
1 2 3 4 5 6 7 8 9 10 11 12 13 DO DO# RE RE# MI FA FA# SOL SOL# LA LA# SI DO
Tecla
C C# D D# E F F# G G# A A# B
12
2
2f
Septiembre-2009 APM-Octubre-2007
ETC-II
Estructura Proyecto
Prctica 1
Man Ser damos vicio la s In nota t 61 H
Teclado Electrnico
Prctica 2 Driver INT 61H Generador Notas musicales por TMR y RTC
Practica 3 Programa en C para leer canciones de fichero Librera en ASM que hace de interfaz entre C y el driver
os m a nd a M
la
ta no
Septiembre-2009 APM-Octubre-2007
ETC-II
Prctica 1
Prctica 1: Diseo del teclado Hacer un programa en ensamblador que dibuja un teclado en la pantalla (modo QVGA / VGA) y que detecta las teclas introducidas por el usuario. Este programa llamar al driver sonido.com que se encargar de reproducir las notas por el altavoz. Este driver se proporcionar a los alumnos.
Septiembre-2009 APM-Octubre-2007
Prctica 1 objetivos
1. Detectar instalacin correcta del driver: 1. Vector interrupcin distinto de cero. 2. Comprobacin palabra clave. 3. Comprobacin Identificador del driver. 1. 2. 3. 4. 5. Dibujar el teclado (Texto o QVGA) Leer teclas asignadas y mandar orden al simulador Leer el estado del simulador para mostrar el estado del teclado Implementar funciones duracin y tono. Usar Makefile y Depurador (TD) Opcional: Melodas pre-seleccionadas Teclado ampliado Sonidos a otras escalas Efectos
Septiembre-2009 APM-Octubre-2007
Prctica 1 Ejemplo
Driver en memoria
Septiembre-2009 APM-Octubre-2007
ETC-II
Prctica 1 entregables
Prctica 1: Entregables Programa: piano.asm Fichero: Makefile Librerias: Opcionales (VGA/Texto , Teclado, )
Simulador Prctica 1 Teclado Electrnico Drvmio.com INT 61H Generador Notas musicales
Septiembre-2009 APM-Octubre-2007
ETC-II
Septiembre-2009 APM-Octubre-2007
ETC-II Servicios Driver INT 61H Identificacin Desinstalar Play Nota Play Frec Stop Duracin
Escala
---
AH = 00H
Estado
---
Septiembre-2009 APM-Octubre-2007
ETC-II
2
+3
Int #61H
Offset Segmento
Comprobamos Servicio
Identificacin
ETC-II
Prctica 1: Libreras
Una librera mantiene una estructura muy parecida a la de un programa normal, pero con algunas caractersticas especiales: 1. Es un archivo fuente .ASM que generalmente slo lleva la definicin del segmento de cdigo, ya que comparte pila y segmento de datos con el programa principal que llama a las funciones de la misma. 2. Las funciones que queramos exportar o hacer visibles se declaran como PUBLIC en el archivo fuente de la librera. 3. Los programas que quieran llamar a esas funciones las tendrn que declarar como EXTERN 4. Una librera se compila con el TASM primero y una vez obtenido el .OBJ se encapsula en un fichero .LIB mediante el comando TLIB.
Septiembre-2009 APM-Octubre-2007
ETC-II
Ejemplo de libreria
Septiembre-2009 APM-Octubre-2007
ETC-II
ETC-II
Ejemplo de libreria
Programa.asm Indico funcin externa
Septiembre-2009 APM-Octubre-2007
ETC-II
Makefiles
La herramienta make entorno de compilacin, nos permite hacer la compilacin de un programa ms sencilla permitir definir en un fichero una serie de reglas o pasos de compilacin para que a partir de una serie de archivos fuente se obtenga el fichero o ficheros ejecutables. Las reglas est contenidas en un fichero que tiene que llamarse Makefile y que ser llamado por defecto al ejecutar el comando make. Cuidado, Makefile sin extensin. Un ejemplo sencillo de fichero Makefile es:
test.exe: test.obj tlink /v test.obj test.obj: test.asm tasm /zi test.asm clean: del *.obj del test.exe
APM-Octubre-2007
ETC-II
Makefiles
# Ejemplo de fichero Makefile all: drvmio.com test.exe drvmio.com: drvmio.obj TLINK /t /v drvmio.obj test.exe: test.obj teclado.lib TLINK /V test.obj teclado.lib .asm.obj: TASM /zi $< .obj.lib: TLIB $&.lib -+$< clean: del *.obj del *.map del *.exe del *.lib del *.com
Si ponemos make all se ejecutan todos estos procesos Proyecto 1: drvmio.com Proyecto 2: test.exe
Limpieza
APM-Octubre-2007
ETC-II
Prctica 2
Prctica 2: Diseo driver generador de notas Hacer un driver que use el TMR2 y el RTC para generar un tono a la frecuencia de cada nota musical. Este driver sustituir al proporcionado en la prctica anterior. Opcional: Que el driver saque sonidos por el puerto paralelo
Prctica 2 Driver INT 61H Generador Notas musicales por TMR y RTC
Septiembre-2009 APM-Octubre-2007
ETC-II
Septiembre-2009 APM-Octubre-2007
ETC-II
Septiembre-2009 APM-Octubre-2007
ETC-II
DATO2
Driver
Septiembre-2009 APM-Octubre-2007
ETC-II
0
Puerto 42h
1 2
Puerto 61h
Septiembre-2009 APM-Octubre-2007
ETC-II
SC1..SC0: Seleccionan el contador que vamos a configurar 0 0 : Contador 0 0 1 : Contador 1 1 0 : Contador 2 1 1 : Sin uso RL1..RL0: Modo de acceso a los contadores 0 0 : Captura de la cuenta en un latch (leer sin para contador) 0 1 : Leer/Escribir el byte ms significativo 1 0 : Leer/Escribir el byte menos significativo 1 1 : Leer/Escribir ambos bytes (primero menos significativo) M2..M0: Modo de funcionamiento (x11 -> Aestable, generador de onda cuadrada) BCD: Cuenta en modo BCD
Septiembre-2009 APM-Octubre-2007
ETC-II
El Chip MC146818 mantiene la hora del sistema cuando esta apagado Lo vamos a usar para temporizar la duracin del sonido. Usaremos su capacidad de generar interrupciones hardware.
Tiene 64 registros internos, de los cuales nosotros vamos a usar: Registro A (Direccin 10): Configuracin general (Frecuencia) Frec. Osc. = 32.768khz Registro B (Direccin 11): Configuracin interrupciones (PIE). PIE=1, SQWE=0 Registro C (Direccin 12): Estado (PIE). Con leer se borran los flags. El acceso a sus registros internos se hace indirectamente a travs del puerto 70h y 71h mediante instrucciones IN/OUT. Para realizar lectura: Se escribe (OUT) en el puerto 70h la direccin de la posicin que se desea leer. Se realiza una lectura en el puerto 71h. Para realizar una escritura Se escribe (OUT) en el puerto 70h la direccin de la posicin que se desea escribir Se escribe (OUT) en el puerto 71h el dato que se quiere escribir
Septiembre-2009 APM-Octubre-2007
ETC-II
Septiembre-2009 APM-Octubre-2007
ETC-II
Septiembre-2009 APM-Octubre-2007
ETC-II
Prctica 3
Prctica 3: Interaccin de Ensamblador con el Lenguaje C Hacer un programa en C y una librera intermedia que llame al driver anterior y reproduzca canciones escritas en un fichero. Opcional: Tener un teclado y poder reproducir y guardar canciones.
Practica 3 Programa en C para leer canciones de fichero Librera en ASM que hace de interfaz entre C y el driver Driver INT 61H Generador Notas musicales por TMR y RTC
Septiembre-2009 APM-Octubre-2007