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