Sei sulla pagina 1di 28

ETC-II

Laboratorio de Estructura y Tecnologa de Computadores

Proyecto Piano

Universidad Autnoma de Madrid Escuela Politcnica Superior


Septiembre-2009 APM-Octubre-2007

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

Seal Elctrica conectada al altavoz

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

Escala musical temperada


Frec Hz
261,626 277,183 293,665 311,127 329,628 349,228 369,994 391,995 415,305 440 466,164 493,883 523,251

Tecla
C C# D D# E F F# G G# A A# B

Relacin entre una nota y la siguiente f

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

ETC-II Prctica 1: Objetivos

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

ETC-II Estado nota

Prctica 1 Ejemplo
Driver en memoria

Lo gestiona el simulador pero lo lee el programa

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

Prctica 1: Estructura Driver


Estructura Driver Parte 2: Residente en memoria Palabra de seguridad 0FECAH 1. Se accede mediante interrupcin software: INT61H 2. Nos ofrece servicios, seleccionables por registro AH 3. Resto de registro para paso de parmetros Parte 1: Instalacin 1.Configura vector 2.Deja parte residente en memoria

Septiembre-2009 APM-Octubre-2007

ETC-II Servicios Driver INT 61H Identificacin Desinstalar Play Nota Play Frec Stop Duracin

Prctica 1: Servicios del Driver


Parmetros entrada AH 0 1 2 3 4 5 AL ----Nota (1..13) ----1 rpido 2 normal 3 lento 1 aguda 2 normal 3 grave --CX ------Frec (*) ----Salida Salida AX = 0EE01H AH = 00H AH = 00H AH = 00H AH = 00H AH = 00H

Escala

---

AH = 00H

Estado

---

AH = 00H AL = 01 suena AL = 0 no suena

Septiembre-2009 APM-Octubre-2007

ETC-II

Prctica 1: Comprobacin Driver


Memoria
Tabla Interrupciones

1 Comprobamos que hay algo en memoria


2 bytes 0 2 4 6 Int #0 Int #1

Servicios Driver 0FECAH

2
+3

Int #61H

Offset Segmento

184H 186H IRET

Comprobamos Servicio

Identificacin

MOV INT CMP


Septiembre-2009 APM-Octubre-2007

AH, 0 61H AX,0EE01H

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

Solo segmento de cdigo

No hay punto de entrada

GetKey es accesible el resto no

Septiembre-2009 APM-Octubre-2007

ETC-II

Ejemplo de librera: compilacin

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 librera encapsulada. El + indica re-emplazo, es decir, si dentro del archivo teclado.lib ya existe una funcin GetKey procede a su reemplazo por la nueva versin. En caso de que no exista la aade 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 librera.
Septiembre-2009 APM-Octubre-2007

ETC-II

Ejemplo de libreria
Programa.asm Indico funcin externa

Llamada a la funcin. Cmo si fuese una interna

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

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 $< .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

Reglas de construccin genricas

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 1 Teclado Electrnico

Prctica 2 Driver INT 61H Generador Notas musicales por TMR y RTC

Septiembre-2009 APM-Octubre-2007

ETC-II

Prctica 2: Interrupciones involucradas


Interrupcin 61h: Driver Acceso a las funciones del driver desde programas externos Interrupcin software. No PIC, no EOI, IRET, sncrona. Hay que instalar la interrupcin Interrupcin 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 interrupcin desactivaremos el sonido. Hay que instalar la interrupcin y configurar los PIC, los registros A y B del RTC con la interrupcin PIE del mismo. Interrupcin hardware: PIC, EOI, IRET, asncrona Interrupcin 1Ch: Generada por el TMR (INT 08h) Se llama 18.2/seg y nos servir para hacer efecto grfico. Se configura al instalar el driver, y se desactiva al desinstalar el driver. Hay que instalar la interrupcin. Pseudo-software: No PIC, no EOI, IRET, asncrona

Septiembre-2009 APM-Octubre-2007

ETC-II

Prctica 2: Estructura Driver


Estructura Driver Parte 2: Residente en memoria Palabra de seguridad 0FECAH 1. Se accede mediante interrupcin software: INT61H 2. Nos ofrece servicios, seleccionables por registro AH 3. Resto de registro para paso de parmetros Parte 1: Instalacin 1.Configura vectores interrupcin 2.Deja parte residente en memoria

Septiembre-2009 APM-Octubre-2007

ETC-II

Prctica 2: Segmento de datos


PUSH MOV MOV MOV POP IRET DS AX,CS DS,AX AX,DATO2 DS

MOV AX,DATO1 INT 61h

DATO1 1 Programa Principal 2 DS CS ES SS 3

DATO2

Driver

Septiembre-2009 APM-Octubre-2007

ETC-II

Prctica 2: El Temporizador (TMR 8253)


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 -> Generacin de tonos en el altavoz 43h : Registro de control Se accede a ellos mediante las instrucciones IN/OUT 18.2Hz (INT 1CH) Amplificador y Filtro

0
Puerto 42h

1 2

Puerto 61h
Septiembre-2009 APM-Octubre-2007

ETC-II

Prctica 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 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

Prctica 2: Reloj en Tiempo Real (RTC)

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

Prctica 2: Controlador Interrupciones (PIC)


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)

Septiembre-2009 APM-Octubre-2007

ETC-II

Prctica 2: Controlador Interrupciones (PIC)


El RTC genera la interrupcin 70h que proviene del PIC-esclavo. Para poderla recibir tenemos que configurar el PIC maestro y el esclavo. Para indicar que hemos recibido una interrupcin tenemos que mandar EOI no especifico (OCW2 = 020h) al PIC esclavo y maestro. Configuracin: PIC Maestro: 21h: Mscara de interrupcin (habilitar entrada IR2 esclavo) 20h: Mandar comandos (EOI no especfico OCW2) PIC esclavo: A1h: Mscara de interrupcin (habilitar entrada IR0 RTC) A0h: Mandar comandos (EOI no especfico OCW2) Ejemplo:
IN AL, 021h ; Leo mscara interrupcin del PIC maestro AND AL, 0FBh ; Pongo a cero (habilito) entrada del PIC esclavo OUT 020h,AL ; Guardo el valor en la mscara

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

Potrebbero piacerti anche