|
|
|
Antes de comenzar
en la programación de gráficos, es bueno conocer un poco
el funcionamiento de la máquina, o por lo menos tener algunos conocimientos
básicos de
su forma de trabajar, por eso sino conoces nada sobre el funcionamiento interno de un PC es importante leer lo que hay a continuación. Si quieres profundizar más en el
tema y aprender a programar en ensamblador, puedes bajar un curso de ensamblador
en formato PDF.
Introducción Cuando aparecieron los primeros computadores
existía una memoria de solo 640 Kb (memoria convencional) y el procesador
que dominaba en aquella época era el 8086 y 8088 el cual podía
direccionar hasta 1 Mb de memoria, ya que el microprocesador era de 16
bits. Añadieron a este diferentes áreas de memoria, para
la BIOS, el video, cartuchos ROM, etc.
Organización de la memoria de
un PC
A000: corresponde a la memoria de la pantalla en los modos gráficos de las tarjetas EGA y VGA. B000: Es para las tarjetas de video monocromo MDA y Hercules. También sirve para la tarjeta CGA. Se utiliza como alojamiento de los modos alfanuméricos. C000: Se depositan algunas rutinas BIOS, que no forman parte del núcleo original de esta. D000: Para cartuchos ROM. No se suele utilizar. E000: Igual que D000. F000: Aquí se guardan todas la rutinas (funciones) de la ROM-BIOS. El Procesador Para hacer la programación del sistema, hay que conocer algunos conceptos que juegan un papel importante, términos como por ejemplo los registros, a los que hay que conocer si se quieren manejar las interrupciones, ya sean a nivel DOS o BIOS. Los registros Los registros son muy importantes para el ordenador, sirven para ayudar al funcionamiento de las instrucciones. Una definición un poco más acertada, sería decir que los registros son como variables internas con las que el computador realiza operaciones, y lleva el control de los programas. El tamaño de estos registros en
un 286 es de 16 bits, pero a partir del 386 estos registros son de 32 bits.
Cada uno de estos registros se divide en dos partes de 8 bits cada una
(esto es así, por que el DOS trabaja en modo Real, y no puede
direccionar más de 16 bits). Por ejemplo, el registro AX, se divide
en AH y AL (H de High y L de Low). Podemos distinguir cinco tipos de registros
diferentes:
![]()
![]() Las interrupciones Las interrupciones, tal y como indica su nombre, tienen como función interrumpir en medio de un procedimiento, ejecutar un trozo de código y continuar con lo que se estaba haciendo. De esta manera la CPU se ahorra de ir preguntado todo el rato a los diferentes periféricos si “necesitan” su ayuda (polling). Hay de varios tipos, las que son ejecutadas por el hardware, las del Sistema Operativo y las iniciadas por el sistema (BIOS). Dentro de estas hay las enmascarable, y las no enmascarables (NMI). El B.I.O.S ( Basic Input Output System) tiene una serie de interrupciones, para que cuando utilicemos alguna de ellas sepamos donde se encuentra. Para eso utilizaremos una tabla que nos servirá de “índice” para así obtener la dirección de la rutina. Esta tabla se aloja en la parte más baja de la memoria, es decir, en 0000:0000, y tiene una longitud de 256 entrada de 4bytes cada una; 2 bytes de dirección (segmento) y 2 bytes de desplazamiento (offset), o sea, 1 kb en total. El Bios dispone de las funciones
principales que necesita un programa para la comunicación
con el hardware del PC y los dispositivos conectados a él.
A continuación describiré
todas las interrupciones de la BIOS y su finalidad de la 00H a la 1BH,
pero aunque hay más, no serán comentadas ya que es de uso
de la BIOS.
INTERRUPCION 00H: División entre cero.
La Programación del Sistema A la hora de programar una aplicación, la forma de tratar la información, ordenarla, y representarla es siempre igual para todos los computadores, los algoritmos utilizados no varían, los podemos describir de forma muy general. Pero lo que sí varía y que depende del sistema, es la forma en la que se debe tratar la información que entra en un programa y la forma en la que sale, esto sí es realmente la programación de sistemas, en la que se deben conocer como acceder al teclado, pantalla, impresora, archivos, etc. Una de las cosas mas importantes en este tipo de programación es el acceso al hardware. Debemos saber por donde nos movemos si queremos que nuestra aplicación funcione correctamente. Aunque la programación de sistemas esté tan fuertemente ligada al hardware, no significa que tengamos que rompernos la cabeza para poner un "¡Hola!" en pantalla, tenemos unas ayudas que nos simplifican mucho la vida. Esto es las funciones de el BIOS y del Sistemas Operativo. Estas rutinas (interrupciones) nos ahorrará mucho trabajo, ya que cada uno de estos servicios, conlleva más tiempo mediante la programación directa al hardware. Resumiendo, tenemos que las diferentes capas a la que una aplicación puede acceder son tres:
Para decidirnos por uno de
los tres, se tendrá que pensar en el objetivo de la aplicación
que se está desarrollando: si es un juego se tendrá que ir
directo al hardware del computador, por que si se hace mediante rutinas
BIOS, el juego quedará demasiado lento. Esto no quiere
decir que las rutinas de la BIOS sean lentas de por si,
lo que pasa es que son “universales” y llevan muchos tipos
de comprobaciones. Por otro lado, si lo que se quiere es hacer
una aplicación en modo texto, simplemente usaremos las funciones
que nos pone a disposición nuestro lenguaje de programación
favorito.
|