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
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
Onda sonora
Señal Eléctrica conectada al altavoz
PC
Escala musical temperada
f
2f
12
2
Relación entre una nota y la siguiente
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
Teclado Electrónico
Práctica 2
Práctica 1
Mandamos la nota
Servicios Int 61H
Mandamos la nota
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.
Práctica 1 objetivos
Práctica 1: Objetivos
Detectar instalación correcta del driver:
Vector interrupción distinto de cero.
Comprobación palabra clave.
Comprobación Identificador del driver.
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…
Práctica 1 Ejemplo
Estado nota
Lo gestiona el simulador pero lo lee el programa
Driver en memoria
Práctica 1 entregables
Práctica 1: Entregables
Programa: piano.asm
Fichero: Makefile
Librerias: Opcionales (VGA/Texto , Teclado, …)
Simulador
Drvmio.com
INT 61H
Generador Notas musicales
Práctica 1
Teclado Electrónico
Práctica 1: Estructura Driver
Se accede mediante interrupción software: INT61H
Nos ofrece servicios, seleccionables por registro AH
Resto de registro para paso de parámetros
Configura vector
Deja parte residente en memoria
Estructura Driver
Parte 1: Instalación
Parte 2: Residente en memoria
Palabra de seguridad 0FECAH
Práctica 1: Servicios del Driver
Práctica 1: Comprobación Driver
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, 0
INT 61H
CMP AX,0EE01H
1º
2º
3º
Comprobamos Servicio Identificación
Comprobamos que hay algo en memoria
Memoria
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:
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.
Las funciones que queramos exportar o hacer visibles se declaran como PUBLIC en el archivo fuente de la librería.
Los programas que quieran llamar a esas funciones las tendrán que declarar como EXTERN
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.
Ejemplo de libreria
GetKey es accesible el resto no
No hay punto de entrada
Solo segmento de código
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.
Ejemplo de libreria
Programa.asm
Indico función externa
Llamada a la función. Cómo si fuese una interna
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
Makefiles
Página siguiente |