etc-ii apm-octubre-2007 universidad autónoma de madrid escuela politécnica superior etc-ii...
TRANSCRIPT
ETC-II
APM-Octubre-2007
Universidad Autónoma de Madrid
Escuela Politécnica Superior
ETC-II
Septiembre-2009
Laboratorio de Estructura y Tecnología de Computadores
Proyecto Piano
ETC-II
APM-Octubre-2007
Introducción
Programar en Ensamblador x86 un Teclado electrónico para MSDOS
Objetivos:Aprender a programar el entorno 8086 Aprender a realizar un driverAprender la interacción con los recursos hardwareAprender la interacción entre C y Lenguaje ensamblador
Conocimientos:Programación y depuración 8086Funcionamiento de interrupciones softwareComunicación con programas residentesTimer del PC (interrupción 0x1C , generación de sonidos)RTCUso de la pila para paso de parámetros
Septiembre-2009
ETC-II
APM-Octubre-2007
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
Septiembre-2009
Onda sonoraSeñal Eléctrica conectada al altavoz
PC
ETC-II
APM-Octubre-2007
Escala musical temperada
Septiembre-2009
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
f 2f
12
2Relación entre una nota y la siguiente
ETC-II
APM-Octubre-2007
Estructura Proyecto
Driver INT 61H
Generador Notas musicales por TMR y RTC
Practica 3
Programa en C para
leer canciones de fichero
Librería en ASM que hace de interfaz
entre C y el driver
Septiembre-2009
Teclado Electrónico
Práctica 2
Práctica 1
Mandamos la nota
Servicios Int 61H
Mandamos la nota
ETC-II
APM-Octubre-2007
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.
Septiembre-2009
ETC-II
APM-Octubre-2007
Práctica 1 objetivos
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. Dibujar el teclado (Texto o QVGA)2. Leer teclas asignadas y mandar orden al simulador3. Leer el estado del simulador para mostrar el estado del teclado4. Implementar funciones duración y tono.5. Usar Makefile y Depurador (TD)
Opcional: Melodías pre-seleccionadasTeclado ampliadoSonidos a otras escalasEfectos…
Septiembre-2009
ETC-II
APM-Octubre-2007
Práctica 1 Ejemplo
Septiembre-2009
Estado nota
Lo gestiona el simulador pero lo lee el programa
Driver en memoria
ETC-II
APM-Octubre-2007
Práctica 1 entregables
Práctica 1: Entregables
Programa: piano.asmFichero: MakefileLibrerias: Opcionales (VGA/Texto , Teclado, …)
Simulador
Drvmio.comINT 61H
Generador Notas musicales
Práctica 1
Teclado Electrónico
Septiembre-2009
ETC-II
APM-Octubre-2007
Práctica 1: Estructura Driver
Septiembre-2009
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
1.Configura vector2.Deja parte residente en memoria
Estructura Driver
Parte 1: Instalación
Parte 2: Residente en memoria
Palabra de seguridad 0FECAH
ETC-II
APM-Octubre-2007
Práctica 1: Servicios del Driver
Septiembre-2009
Servicios Driver Parámetros entrada 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
Duración 51 rápido2 normal3 lento
--- AH = 00H
Escala 61 aguda2 normal3 grave
--- AH = 00H
Estado 7 --- ---AH = 00H
AL = 01 suenaAL = 0 no suena
ETC-II
APM-Octubre-2007
Práctica 1: Comprobación Driver
Septiembre-2009
Offset
Segmento
Int #0
Int #1
Int #61H
2 bytes
0
2
4
6
184H
186H
Tabla Interrupciones
0FECAH +3
IRET
Servicios Driver
MOV AH, 0INT 61HCMP AX,0EE01H
1º
2º
3º Comprobamos Servicio Identificación
Comprobamos que hay algo en memoria Memoria
ETC-II
APM-Octubre-2007
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.
Septiembre-2009
ETC-II
APM-Octubre-2007
Ejemplo de libreria
Septiembre-2009
GetKey es accesible el resto no
No hay punto de entrada
Solo segmento de código
ETC-II
APM-Octubre-2007
Ejemplo de librería: compilación
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.
Septiembre-2009
ETC-II
APM-Octubre-2007
Ejemplo de libreria
Septiembre-2009
Programa.asm
Indico función externa
Llamada a la función. Cómo si fuese una interna
ETC-II
APM-Octubre-2007
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.objtlink /v test.obj
test.obj: test.asmtasm /zi test.asm
clean:del *.obj del test.exe
Si tecleamos make clean, nos aseguramos de partir de un punto limpio
Makefiles
ETC-II
APM-Octubre-2007
# 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
Makefiles
Si ponemos make all se ejecutan todos estos procesos
Proyecto 1: drvmio.com
Proyecto 2: test.exe
Reglas de construcción genéricas
Limpieza
ETC-II
APM-Octubre-2007
Práctica 2
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 2Driver
INT 61H
Generador Notas musicales por TMR y RTC
Práctica 1
Teclado Electrónico
Septiembre-2009
ETC-II
APM-Octubre-2007
Práctica 2: Interrupciones involucradas
Septiembre-2009
Interrupción 61h: Driver Acceso a las funciones del driver desde programas externosInterrupció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
ETC-II
APM-Octubre-2007
Práctica 2: Estructura Driver
Septiembre-2009
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
1.Configura vectores interrupción2.Deja parte residente en memoria
Estructura Driver
Parte 1: Instalación
Parte 2: Residente en memoria
Palabra de seguridad 0FECAH
ETC-II
APM-Octubre-2007
PUSH DSMOV AX,CSMOV DS,AXMOV AX,DATO2POP DSIRET
Práctica 2: Segmento de datos
Septiembre-2009
Programa Principal
Driver
DATO2DATO1
DSCSESSS
1
MOV AX,DATO1INT 61h…
MOV AX,DATO2
IRET
2
2
3
ETC-II
APM-Octubre-2007
Práctica 2: El Temporizador (TMR 8253)
Septiembre-2009
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 1Ch41h : Contador 1-> Refresco memoria RAM42h : Contador 2 -> Generación de tonos en el altavoz43h : Registro de control
Se accede a ellos mediante las instrucciones IN/OUT
Amplificador y Filtro
Puerto 61h 7 1 0
0
1
2
18.2Hz (INT 1CH)
Puerto 42h
ETC-II
APM-Octubre-2007
Práctica 2: Temporizador Registro de Control
Septiembre-2009
SC1..SC0: Seleccionan el contador que vamos a configurar0 0 : Contador 00 1 : Contador 11 0 : Contador 21 1 : Sin uso
RL1..RL0: Modo de acceso a los contadores0 0 : Captura de la cuenta en un latch (leer sin para contador)0 1 : Leer/Escribir el byte más significativo1 0 : Leer/Escribir el byte menos significativo1 1 : Leer/Escribir ambos bytes (primero menos significativo)
M2..M0: Modo de funcionamiento(x11 -> Aestable, generador de onda cuadrada)
BCD: Cuenta en modo BCD
SC1 SC0 RL1 RL0 M2 M1 M0 BCD
ETC-II
APM-Octubre-2007
Práctica 2: Reloj en Tiempo Real (RTC)
Septiembre-2009
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=0Registro 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
ETC-II
APM-Octubre-2007
Práctica 2: Controlador Interrupciones (PIC)
Septiembre-2009
Direcciones del PIC-0 (maestro): 20h y 21hDirecciones del PIC-1 (esclavo): A0h y A1hInterrupciones PIC-0: 08h (IR0), 09h (IR1)…0Fh (IR7)Interrupciones PIC-1: 70h (IR8), 71h (IR9)…7Fh (IR15)
ETC-II
APM-Octubre-2007
Práctica 2: Controlador Interrupciones (PIC)
Septiembre-2009
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 maestroAND AL, 0FBh ; Pongo a cero (habilito) entrada del PIC esclavoOUT 020h,AL ; Guardo el valor en la máscara
ETC-II
APM-Octubre-2007
Práctica 3
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.
Driver INT 61H
Generador Notas musicales por TMR y RTC
Practica 3
Programa en C para
leer canciones de fichero
Librería en ASM que hace de interfaz
entre C y el driver
Septiembre-2009