Download Versión 1.1 - Universidad Autónoma de Madrid
Document related concepts
no text concepts found
Transcript
ETC-II Laboratorio de Estructura y Tecnología de Computadores Proyecto Piano Universidad Autónoma de Madrid Escuela Politécnica Superior APM-Octubre-2007 Septiembre-2009 ETC-II Introducción Programar en Ensamblador x86 un Teclado electrónico para MSDOS Objetivos: Aprender a programar el entorno 8086 Aprender a realizar un driver Aprender la interacción con los recursos hardware Aprender la interacción entre C y Lenguaje ensamblador Conocimientos: Programación y depuración 8086 Funcionamiento de interrupciones software Comunicación con programas residentes Timer del PC (interrupción 0x1C , generación de sonidos) RTC Uso de la pila para paso de parámetros APM-Octubre-2007 Septiembre-2009 ETC-II Introducción Generación 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 señal audible. • Según 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 señal cuadrada automáticamente PC Señal Eléctrica conectada al altavoz APM-Octubre-2007 Septiembre-2009 Onda sonora ETC-II Escala musical temperada Nota Frec Hz Tecla 1 DO 261,626 C 2 DO# 277,183 C# 3 RE 293,665 D 4 RE# 311,127 D# 5 MI 329,628 E 6 FA 349,228 F 7 FA# 369,994 F# 8 SOL 391,995 G 9 SOL# 415,305 G# 10 LA 440 A 11 LA# 466,164 A# 12 SI 493,883 B 13 DO 523,251 APM-Octubre-2007 Septiembre-2009 Relación entre una nota y la siguiente f 12 2 2f ETC-II Estructura Proyecto Práctica 1 Teclado Electrónico Práctica 2 Driver INT 61H Practica 3 Programa en C para leer canciones de fichero APM-Octubre-2007 Septiembre-2009 Librería en ASM que hace de interfaz entre C y el driver Generador Notas musicales por TMR y RTC ETC-II Práctica 1 Práctica 1: Diseño 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. APM-Octubre-2007 Septiembre-2009 Práctica 1 objetivos ETC-II Práctica 1: Objetivos 1. Detectar instalación correcta del driver: 1. Vector interrupción distinto de cero. 2. Comprobación palabra clave. 3. Comprobación 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 duración y tono. Usar Makefile y Depurador (TD) Opcional: Melodías pre-seleccionadas Teclado ampliado Sonidos a otras escalas Efectos… APM-Octubre-2007 Septiembre-2009 ETC-II Estado nota Lo gestiona el simulador pero lo lee el programa APM-Octubre-2007 Septiembre-2009 Práctica 1 Ejemplo Driver en memoria Práctica 1 entregables ETC-II Práctica 1: Entregables Programa: piano.asm Fichero: Makefile Librerias: Opcionales (VGA/Texto , Teclado, …) Simulador Práctica 1 Teclado Electrónico APM-Octubre-2007 Septiembre-2009 Drvmio.com INT 61H Generador Notas musicales ETC-II Práctica 1: Estructura Driver Estructura Driver Parte 2: Residente en memoria Palabra de seguridad 0FECAH 1. Se accede mediante interrupción software: INT61H 2. Nos ofrece servicios, seleccionables por registro AH 3. Resto de registro para paso de parámetros Parte 1: Instalación 1. Configura vector 2. Deja parte residente en memoria APM-Octubre-2007 Septiembre-2009 Práctica 1: Servicios del Driver ETC-II Parámetros entrada Servicios Driver Salida INT 61H AH AL CX Salida Identificación 0 --- --- AX = 0EE01H Desinstalar 1 --- --- AH = 00H Play Nota 2 Nota (1..13) --- AH = 00H Play Frec 3 --- Frec (*) AH = 00H Stop 4 --- --- AH = 00H 5 1 rápido 2 normal 3 lento --- AH = 00H 6 1 aguda 2 normal 3 grave --- AH = 00H --- AH = 00H AL = 01 suena AL = 0 no suena Duración Escala Estado APM-Octubre-2007 Septiembre-2009 7 --- Práctica 1: Comprobación Driver ETC-II 1º Comprobamos que hay algo en memoria 2 bytes Memoria Tabla Interrupciones 0 Int #0 2 4 Int #1 Servicios Driver 2º 6 0FECAH Int #61H 3º Offset 184H Segmento 186H IRET Comprobamos Servicio Identificación MOV AH, 0 INT 61H CMP AX,0EE01H APM-Octubre-2007 Septiembre-2009 +3 ETC-II Práctica 1: Librerías Una librería mantiene una estructura muy parecida a la de un programa normal, pero con algunas características especiales: 1. Es un archivo fuente .ASM que generalmente sólo lleva la definición del segmento de código, 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 librería. 3. Los programas que quieran llamar a esas funciones las tendrán que declarar como EXTERN 4. Una librería se compila con el TASM primero y una vez obtenido el .OBJ se encapsula en un fichero .LIB mediante el comando TLIB. APM-Octubre-2007 Septiembre-2009 ETC-II Ejemplo de libreria Solo segmento de código No hay punto de entrada APM-Octubre-2007 Septiembre-2009 GetKey es accesible el resto no Ejemplo de librería: compilación ETC-II tasm /zi teclado.asm para generar el fichero teclado.obj (suponiendo que el archivo que contiene la libreria se llame teclado.asm) tlib teclado.lib -+teclado.obj para generar el fichero teclado.lib que es la librería encapsulada. El + indica re-emplazo, es decir, si dentro del archivo teclado.lib ya existe una función GetKey procede a su reemplazo por la nueva versión. En caso de que no exista la añade directamente. tlink /v program.obj teclado.lib Una vez que se tiene el archivo teclado.lib se podrá compilar cualquier programa que use funciones de la librería. APM-Octubre-2007 Septiembre-2009 ETC-II Ejemplo de libreria Programa.asm Indico función externa Llamada a la función. Cómo si fuese una interna APM-Octubre-2007 Septiembre-2009 ETC-II Makefiles La herramienta make – entorno de compilación, – nos permite hacer la compilación de un programa más sencilla – permitir definir en un fichero una serie de reglas o pasos de compilación 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 extensión. 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 Si tecleamos make clean, nos aseguramos de partir de un punto limpio 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 $< Si ponemos make all se ejecutan todos estos procesos Proyecto 1: drvmio.com Proyecto 2: test.exe Reglas de construcción genéricas .obj.lib: TLIB $&.lib -+$< clean: del *.obj del *.map del *.exe del *.lib del *.com APM-Octubre-2007 Limpieza Práctica 2 ETC-II Práctica 2: Diseño 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 práctica anterior. Opcional: Que el driver saque sonidos por el puerto paralelo Práctica 1 Teclado Electrónico APM-Octubre-2007 Septiembre-2009 Práctica 2 Driver INT 61H Generador Notas musicales por TMR y RTC Práctica 2: Interrupciones involucradas ETC-II Interrupción 61h: Driver Acceso a las funciones del driver desde programas externos Interrupción software. No PIC, no EOI, IRET, síncrona. Hay que instalar la interrupción Interrupción 70h: Reloj Tiempo Real (RTC) Cada vez que suene una nota se activará para medir el tiempo que tiene que sonar. Cuando salte ‘n-veces’ la interrupción desactivaremos el sonido. Hay que instalar la interrupción y configurar los PIC, los registros A y B del RTC con la interrupción PIE del mismo. Interrupción hardware: PIC, EOI, IRET, asíncrona Interrupción 1Ch: Generada por el TMR (INT 08h) Se llama 18.2/seg y nos servirá para hacer efecto gráfico. Se configura al instalar el driver, y se desactiva al desinstalar el driver. Hay que instalar la interrupción. Pseudo-software: No PIC, no EOI, IRET, asíncrona APM-Octubre-2007 Septiembre-2009 ETC-II Práctica 2: Estructura Driver Estructura Driver Parte 2: Residente en memoria Palabra de seguridad 0FECAH 1. Se accede mediante interrupción software: INT61H 2. Nos ofrece servicios, seleccionables por registro AH 3. Resto de registro para paso de parámetros Parte 1: Instalación 1. Configura vectores interrupción 2. Deja parte residente en memoria APM-Octubre-2007 Septiembre-2009 Práctica 2: Segmento de datos ETC-II MOV INT … AX,DATO1 61h PUSH MOV MOV MOV POP IRET 2 DATO1 DATO2 1 3 Programa Principal Driver 2 DS CS ES SS APM-Octubre-2007 Septiembre-2009 DS AX,CS DS,AX AX,DATO2 DS Práctica 2: El Temporizador (TMR 8253) ETC-II El Chip 8253 contiene tres temporizadores de 16-bits Lo vamos a usar para generar sonidos. Registros internos (Accesibles directamente en los puertos siguientes): 40h : Contador 0 -> controla el reloj sistema -> INT8 -> INT 1Ch 41h : Contador 1-> Refresco memoria RAM 42h : Contador 2 -> Generación de tonos en el altavoz 43h : Registro de control Se accede a ellos mediante las instrucciones IN/OUT 0 1 Puerto 42h Puerto 61h APM-Octubre-2007 Septiembre-2009 18.2Hz (INT 1CH) Amplificador y Filtro 2 7 1 0 ETC-II Práctica 2: Temporizador Registro de Control SC1 SC0 RL1 RL0 M2 M1 M0 BCD 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 más 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 APM-Octubre-2007 Septiembre-2009 ETC-II Práctica 2: Reloj en Tiempo Real (RTC) El Chip MC146818 mantiene la hora del sistema cuando esta apagado Lo vamos a usar para temporizar la duración del sonido. Usaremos su capacidad de generar interrupciones hardware. Tiene 64 registros internos, de los cuales nosotros vamos a usar: Registro A (Dirección 10): Configuración general (Frecuencia) Frec. Osc. = 32.768khz Registro B (Dirección 11): Configuración interrupciones (PIE). PIE=1, SQWE=0 Registro C (Dirección 12): Estado (PIE). Con leer se borran los flags. El acceso a sus registros internos se hace indirectamente a través del puerto 70h y 71h mediante instrucciones IN/OUT. Para realizar lectura: • Se escribe (OUT) en el puerto 70h la dirección de la posición que se desea leer. • Se realiza una lectura en el puerto 71h. Para realizar una escritura • Se escribe (OUT) en el puerto 70h la dirección de la posición que se desea escribir • Se escribe (OUT) en el puerto 71h el dato que se quiere escribir APM-Octubre-2007 Septiembre-2009 Práctica 2: Controlador Interrupciones (PIC) ETC-II Direcciones del PIC-0 (maestro): 20h y 21h Direcciones del PIC-1 (esclavo): A0h y A1h Interrupciones PIC-0: 08h (IR0), 09h (IR1)…0Fh (IR7) Interrupciones PIC-1: 70h (IR8), 71h (IR9)…7Fh (IR15) APM-Octubre-2007 Septiembre-2009 Práctica 2: Controlador Interrupciones (PIC) ETC-II El RTC genera la interrupción 70h que proviene del PIC-esclavo. Para poderla recibir tenemos que configurar el PIC maestro y el esclavo. Para indicar que hemos recibido una interrupción tenemos que mandar EOI no especifico (OCW2 = 020h) al PIC esclavo y maestro. Configuración: PIC Maestro: 21h: Máscara de interrupción (habilitar entrada IR2 – esclavo) 20h: Mandar comandos (EOI no específico OCW2) PIC esclavo: A1h: Máscara de interrupción (habilitar entrada IR0 – RTC) A0h: Mandar comandos (EOI no específico OCW2) Ejemplo: IN AL, 021h ; Leo máscara interrupción del PIC maestro AND AL, 0FBh ; Pongo a cero (habilito) entrada del PIC esclavo OUT 020h,AL ; Guardo el valor en la máscara APM-Octubre-2007 Septiembre-2009 Práctica 3 ETC-II Práctica 3: Interacción de Ensamblador con el Lenguaje C Hacer un programa en C y una librería 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 APM-Octubre-2007 Septiembre-2009 Librería en ASM que hace de interfaz entre C y el driver Driver INT 61H Generador Notas musicales por TMR y RTC