Piano 1

28
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

Transcript of Piano 1

Page 1: Piano 1

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

Page 2: Piano 1

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

Page 3: Piano 1

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

Page 4: Piano 1

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

Page 5: Piano 1

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

Page 6: Piano 1

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

Page 7: Piano 1

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

Page 8: Piano 1

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

Page 9: Piano 1

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

Page 10: Piano 1

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

Page 11: Piano 1

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

Page 12: Piano 1

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

3º Comprobamos Servicio Identificación

Comprobamos que hay algo en memoria Memoria

Page 13: Piano 1

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

Page 14: Piano 1

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

Page 15: Piano 1

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

Page 16: Piano 1

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

Page 17: Piano 1

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

Page 18: Piano 1

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

Page 19: Piano 1

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

Page 20: Piano 1

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

Page 21: Piano 1

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

Page 22: Piano 1

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

Page 23: Piano 1

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

Page 24: Piano 1

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

Page 25: Piano 1

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

Page 26: Piano 1

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)

Page 27: Piano 1

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

Page 28: Piano 1

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