Práctica 1. Manejo de recursos y elementos básicos

(Este enunciado será explicado en la primera clase que corresponda a cada grupo)



Objetivos didácticos:

- Realizar un primer programa COMPLEJO en ensamblador
- Aprender el uso de librerías
- Acceso tanto a servicios del S.O. y BIOS como a servicios propios
- Manejo del teclado, captura de teclas pulsadas
- Creación de ficheros Makefiles (PERO MAKEFILES DE VERDAD)
 

Objetivo de la Práctica:

Realizar un programa en ensamblador que presente en la pantalla un teclado simplificado de un piano y lea ciertas teclas del teclado del ordenador. Al pulsar las teclas se oirá un tono, generado por el altavoz interno.

Para la generación del sonido se utilizará un driver, que se le proporciona al alumno en esta primera práctica.

Descripción:

Las tareas a realizar son las siguientes:

Se deja a elección del alumno la forma de presentación en pantalla, así como la funcionalidad en el desarrollo.

Para descargar el driver pinchar aquí.


 

DESCRIPCIÓN DE LAS FUNCIONES DEL SIMULADOR
 

Las funciones del Simulador de Memoria están accesibles a través de la INT 61h. Para acceder a cada uno de sus servicios se deberán inicializar los registros correspondientes. A continuación se describen dichos servicios:
 

; ............................................
; --------------. Servicios del Driver .-----------------
; ............................................
 

E = Entrada

S = Salida
;............................................
;. SERVICIO AH=0 Comprobación del DRIVER .
;. E - AH=0 Comprobación del driver .
;. S - AX=0xEE01H .
;............................................

;............................................
;. SERVICIO AH=1 Desinstalar el driver .
;. E - AH=1 Desinstalar .
;. S - AH=OK .
;............................................

;............................................
;. SERVICIO AH=2 Play Nota .
;. E - AH=2 Play .
;. E - AL=Nota a tocar (Ver tabla) .
;. S - AH=ERRN (fuera tamaño o no disponible).
;. S - AH=OK .
;............................................

;............................................
;. SERVICIO AH=3 Play Nota .
;. E - AH=3 Play Frecuencia .
;. E - CX = 1.193.180 / (frec nota Hz) .
;............................................

;............................................
;. SERVICIO AH=4 Stop .
;. E - AH=4 Stop .
;............................................

;............................................
;. SERVICIO AH=5 Ritmo. Tiempo que dura la nota .
;. E - AH=5 Ritmo .
;. E - AL= 1 lento ,2 normal ,3 rápido .
;............................................

;............................................
;. SERVICIO AH=6 Escala .
;. E - AH=6 Escala .
;. E - AL= 1 baja, 2 normal, 4 superior .
;............................................

;............................................
;. SERVICIO AH=7 Estado .
;. E - AH=7 Estado .
;. S - AL= 1 sonando, AL=0 parado .
;............................................
 

 

Tabla de frecuencias y asignaciones por nota.

 

Escala musical temperada
; 1.193.180 / 440 Hz (nota LA) = 2711
;
; 1 - DO
; 2 - DO#
; 3 - RE
; 4 - RE#
; 5 - MI
; 6 - FA
; 7 - FA#
; 8 - SOL
; 9 - SOL#
; 10 - LA
; 11 - LA#
; 12 - SI
; 13 - DO (siguiente escala)
;
; 1 - Duración corta
; 2 - Duración media
; 3 - Duración larga
;
; 4 - Agudo
; 5 - Normal (LA 440Hz)
; 6 - Grave

 

Comentarios de forma breve:

1. Al mandar una nota esta se desactiva automáticamente después de un tiempo, marcado por la configuración del parámetro duración del driver. También se puede apagar antes con el comando stop.

2. Para hacer que suene una nota con las frecuencias por defecto se usa el servicio AH=2 y en AL un valor de 1 a 13 (de DO a siguiente DO contando con sostenidos). Si queremos parar un sonido usamos AH=4. Se recomienda que al salir del programa se desinstale el driver, servicio AH=1.

3. Los comandos extras son cambiar el tono (AH=6) y la duración (AH=5), los parámetros se pasan por AL y sus valores se corresponden con la tabla publicada.


Modo de vídeo gráfico MCGA

Para inicializar el modo de vídeo MCGA (320x200x256) se utiliza una llamada a la interrupción 10h. Ahora hemos de comprender como gestiona el ordenador esos pixels que escribimos en pantalla.

La dirección A000:0000 es el principio del segmento de VideoRAM, es decir, es donde la MCGA guarda los datos de las imágenes gráficas que dibuja en el monitor. Si escribimos algún valor en este segmento, la próxima vez que la tarjeta gráfica redibuje la pantalla (lo hace entre 50 y 70 veces por segundo) el valor que hemos escrito aparecerá en pantalla en forma de punto.

Para pintar un pixel basta con escribir en la posición de memoria correspondiente, el índice de color que queremos para que la tarjeta gráfica lo represente durante el próximo retrazado. El modo MCGA es el modo gráfico más sencillo en este sentido pues es un modo de 8 bits por pixel.

Esto quiere decir que cada número del 0 al 255 se corresponde con un color. Por defecto, el 0 es el negro, el 1 el azul, y así hasta llegar al 255. Entre el 0 y el 255 disponemos de gamas de azules, verdes, amarillos, etc..., que componen la paleta por defecto de la MCGA.

Que este modo gráfico sea de un byte por pixel significa que al escribir un byte en este segmento de memoria, su equivalente en pantalla será un pixel, que aparecerá automáticamente en cuanto el haz de electrones pase por esa posición al refrescar la imagen. En la figura adjunta tenemos una representación de cómo está organizada la VideoRAM en el modo 13h (MCGA).

Como puede verse, al byte 0 le corresponde el pixel (0,0) (el primero de la pantalla); al byte 1 le corresponde el pixel (1,0), al byte número 320 le correspondería el pixel (0,1), (primer pixel de la línea 1, porque hay 320 pixels de resolución horizontal) y así hasta el byte 63.999 del segmento, que corresponde a la posición (319,199). Depende del offset en que coloquemos el byte, el punto aparecerá en distinta posición en el monitor (cada byte es un pixel individual en la pantalla).

El segmento de la VideoRAM se comporta en este modo de video como si fuera una larga línea de pixels de manera que al llegar al final de una línea horizontal de pantalla, el siguiente byte de la VideoMemoria es el que continúa en la siguiente línea de pantalla. De ahí el término direccionamiento lineal: es como si la pantalla fuera un array unidimensional desde 0 a 64.000 donde cada 320 bytes estamos situados en una nueva línea de pantalla (el byte 320 es el primer pixel de la segunda línea). Así, durante el retrazado la tarjeta únicamente tiene que dedicarse a leer bytes (todos ellos consecutivos) y representarlos en pantalla.

Algunos links sobre el modo MCGA (hay muchos más por la web, buscar "programacion grafica PC msdos" o algo similar)

Curso de Programación gráfica. Santiago Romero

Modos gráficos. El Universo Digital 


Plazo de entrega : La presentación y evaluación de esta práctica será la indicada en el calendario, según el grupo (ver calendario ). El nombre del fichero o ficheros a entregar será de la forma parejap1.asm, por ejemplo 3a28p1.asm. Si hay más de un fichero, nombrarlo con números sucesivos y añadir un .bat que los ensamble y linke.(3a28p11.asm, 3a28p12.asm,... 3a28p1.bat)


 

2009. Página editada y mantenida por Guillermo Glez. de Rivera
Volver
al proyecto