Práctica 1: Sencillo Juego en Ensamblador

Anuncio
Periféricos e Interfaces
Curso 2010 – 2011
______________________________________________________________________
Práctica 1: Sencillo Juego en Ensamblador
El objetivo de esta práctica es aprender a programar usando el ensamblador 8086 y, en
particular, aprender a utilizar las interrupciones de la BIOS y de MSDOS para permitir
que el programa interactúe con periféricos de entrada y salida. Los periféricos que se
utilizarán serán el teclado y la pantalla del PC debido a la familiaridad de los alumnos
con su manejo.
La práctica consistirá en diseñar una versión sencilla del popular juego Arkanoid. Al
comenzar, el programa solicitará el nombre del jugador. Tras esto, el programa mostrará
por pantalla un pequeño entorno rectangular delimitado por una línea y el nombre del
jugador en una esquina, junto con su puntuación y el número de vidas restantes.
Durante la partida, el jugador controla una plataforma que se moverá lateralmente por la
parte baja del entorno de juego. Con esta plataforma, el jugador debe impedir que una
bola que rebota en vertical salga del entorno de juego. El jugador perderá una vida con
cada fallo y, si llega a cero, concluirá la partida, mostrándose una pantalla de final con
la puntuación alcanzada. En la parte superior de la pantalla habrá una serie de bloques.
Cada vez que la bola rebote contra uno de ellos será destruido, sumando un punto. La
partida también concluirá si se destruyen todos los bloques.
Resulta importante destacar que la belleza estética no es una característica primordial de
esta práctica. El objetivo es demostrar un cierto dominio de la programación
ensamblador y del manejo de las interrupciones para interactuar con los periféricos de
E/S. Por ejemplo, una forma sencilla de crear el espacio de juego es delimitar un
recuadro y pintarlo de un color distinto al resto de la pantalla, evitándose tener que
dibujar los bordes. Además, la plataforma, la bola y los bloques pueden crearse
simplemente usando caracteres del teclado que se consideren apropiados; el movimiento
puede realizarse borrando caracteres y volviéndolos a escribir en otra parte. Tampoco es
necesario elaborar animaciones complejas para la destrucción de los bloques, basta con
que desaparezcan.
Periféricos e Interfaces
Curso 2010 – 2011
______________________________________________________________________
Se valorará cualquier mejora que se aplique a este diseño inicial. Hay muchas opciones
posibles, aunque no serán exigidas para aprobar:
• Variaciones en la velocidad de la bola.
• Variaciones en el tamaño de la plataforma.
• Bloques especiales (que haya que golpear varias veces, que cambien la dirección
de rebote, que aumenten el número de vidas…)
• Y un largo etcétera.
Al concluir el periodo establecido para la realización de la práctica, los alumnos
defenderán el programa realizado ante el profesor en el laboratorio durante las fechas
determinadas para cada convocatoria. También presentarán el programa, correctamente
estructurado y comentado, junto con una memoria que detalle su funcionamiento
interno y el proceso de desarrollo que se ha llevado a cabo, así como los problemas que
pudieran haber surgido durante el trabajo, las soluciones adoptadas y, en general, el
porqué de las decisiones de diseño tomadas.
Una correcta ortografía y gramática se considera indispensable para la escritura de la
memoria. Este documento tendrá un máximo de diez páginas y será entregado en
formato electrónico (preferiblemente PDF) siguiendo el procedimiento indicado para
ello por el profesorado de la asignatura. En la memoria se hará especial hincapié en las
interrupciones utilizadas por el programa, describiendo su funcionamiento y los usos
concretos que se les han dado. Además, se valorará especialmente el apartado de
conclusiones del trabajo, donde los alumnos expondrán sus opiniones, fruto de la
experiencia, acerca del ensamblador 8086, la programación en este entorno y la
interacción con los periféricos por medio de interrupciones.
En ningún caso se incorporará a la memoria el código fuente, ya sea en su totalidad o en
parte. Como se ha mencionado anteriormente, el programa se entregará por separado y
debidamente comentado, por lo que incorporarlo a la memoria sería equivalente a
presentarlo por duplicado y, por tanto, se consideraría un relleno injustificado. Por
supuesto, también se considerará inapropiado copiar cualquier parte de este enunciado
para utilizarlo en la memoria.
La nota final de la práctica se establecerá en función de la defensa realizada por los
alumnos en el laboratorio y de la calidad de la memoria presentada de acuerdo con el
siguiente baremo:
• Defensa:
6 puntos
o Funcionamiento correcto del programa completo: 2 puntos
o Explicaciones acertadas y dominio del tema:
2 puntos
o Limpieza y estructuración del código:
1 punto
o Ampliaciones y mejoras:
1 punto
• Memoria:
4 puntos
1 punto
o Presentación, gramática y ortografía:
1 punto
o Descripción del funcionamiento del programa:
1 punto
o Descripción del uso de las interrupciones:
1 punto
o Conclusiones y valoración personal:
Periféricos e Interfaces
Curso 2010 – 2011
______________________________________________________________________
La Pantalla del PC
Las imágenes de la pantalla del PC están compuestas por unidades llamadas píxel. El
adaptador o controlador de pantalla es un circuito que sirve de interfaz entre el
procesador y la pantalla. Este controlador dispone de puertos que permiten la
comunicación entre el procesador y la pantalla, así como de una memoria que contiene
el valor de cada píxel.
Según el adaptador, la memoria puede funcionar en modo gráfico o en modo texto, en el
que sólo se representan caracteres. Cuando funciona en modo texto, la pantalla es como
una matriz de 80 columnas por 25 filas donde cada celda de la matriz representa un
carácter. Esta matriz es almacenada en la memoria de pantalla por filas, codificándose
cada carácter en una palabra de 16 bits que contiene el código ASCII en el byte menos
significativo, mientras que el byte más significativo contiene el atributo de
visualización. El valor normal del atributo es “gris sobre negro”, que se codifica 07h.
En esta figura se muestra la relación existente entre la pantalla y la memoria del
controlador de pantalla. Para visualizar un carácter en la posición (i,j) de la pantalla
debe escribirse su código ASCII y el atributo correspondiente en la celda (i,j) de la
matriz que representa la pantalla. Puesto que la matriz está almacenada por filas en
posiciones consecutivas de memoria, la celda (i,j) corresponderá a la palabra 80*i+j de
la memoria de pantalla, esto es, el código ASCII y el atributo de visualización se
almacenarán en los bytes:
dir_memoria_pantalla + 2 * (80 * i + j)
dir_memoria_pantalla + 2 * (80 * i + j) + 1
Periféricos e Interfaces
Curso 2010 – 2011
______________________________________________________________________
El Teclado del PC
El controlador del teclado del PC está explorando continuamente la matriz de teclas.
Cuando se detecta la pulsación de una tecla, el código de pulsación de la tecla se
almacena en una memoria. Este código es un número de 8 bits que tendrá el bit más
significativo a cero. Si una tecla permanece pulsada más de medio segundo, el
controlador colocará repetidamente su código en la memoria. Cuando se detecta la
liberación de una tecla, el código de liberación de la tecla se almacena en la memoria
del controlador. Este código es idéntico al de pulsación, pero con el bit más
significativo a uno.
La memoria de teclas actúa como una cola con capacidad para un número concreto de
códigos. Siempre que la memoria de teclas no esté vacía, el controlador colocará el
código más antiguo de los almacenados en ella en un registro que ocupa la dirección
60h del espacio de direcciones de entrada/salida, activando una interrupción para que el
procesador se percate de que tiene un carácter disponible.
Es importante tener en cuenta que el código de pulsación/liberación de cada tecla no
tiene nada que ver con el código ASCII del carácter correspondiente. El número de
teclados existentes en el mercado es muy grande y, aunque para muchas teclas el código
es siempre el mismo, cada teclado puede utilizar códigos diferentes para ciertas teclas
específicas.
Periféricos e Interfaces
Curso 2010 – 2011
______________________________________________________________________
Algunas Interrupciones Útiles
Interrupción 10h de la BIOS, función 00h
Establecer el modo de video de la pantalla.
Interrupción 10h de la BIOS, función 01h
Modificar el ancho del cursor (útil para ocultarlo).
Interrupción 10h de la BIOS, función 02h
Situar el cursor en un punto de la pantalla.
Interrupción 10h de la BIOS, función 03h
Obtener la posición del cursor en la pantalla.
Interrupción 10h de la BIOS, función 06h
Limpiar o desplazar hacia abajo la pantalla (o un rectángulo dentro de la pantalla).
Interrupción 10h de la BIOS, función 07h
Limpiar o desplazar hacia arriba la pantalla (o un rectángulo dentro de la pantalla).
Interrupción 16h de BIOS, función 00h
Obtener el código ASCII asociado a una pulsación de teclado sin esperar por ella.
Interrupción 16h de BIOS, función 01h
Detectar si se ha pulsado una tecla.
Interrupción 1Ah de BIOS, función 00h
Obtener el valor actual del reloj del procesador (útil para generar números aleatorios).
Interrupción 21h de MSDOS, función 01h
Esperar por una pulsación de teclado y obtener el código ASCII asociado.
Interrupción 21h de MSDOS, función 02h
Escribir un carácter en pantalla.
Interrupción 21h de MSDOS, función 08h
Esperar por una pulsación de teclado y obtener el código ASCII asociado sin mostrarlo
por la pantalla (sin eco).
Interrupción 21h de MSDOS, función 09h
Mostrar una ristra de caracteres almacenada en memoria por pantalla.
Interrupción 21h de MSDOS, función 0Bh
Detectar si se ha pulsado una tecla.
Interrupción 21h de MSDOS, función 4Ch
Terminar el programa y devolver el control al Sistema Operativo.
Periféricos e Interfaces
Curso 2010 – 2011
______________________________________________________________________
Bibliografía Recomendada
8088-8086/8087 – Programación Ensamblador en Entorno MS DOS
M.A. Rodríguez Roselló. Anaya.
80386/80286 Programación en Lenguaje Ensamblador.
W.H. Murray y C.H. Papas. McGraw-Hill.
Lenguajes ensambladores.
R. Martínez Tomás. Paraninfo.
Turbo Assembler 3.0 User’s Guide.
Borland.
Descargar