Next: Resultados y conclusiones
Up: La aplicación VM
Previous: Ejecución de la aplicación
Se desarrolló la simulación del video CGA en funciones básicas.
Principalmente, cambio de modo (un modo texto y dos gráficos), posicionar
el cursor en la pantalla, escribir carácteres, activar páginas de
texto, y escribir pixeles.
La simulación trabaja con 3 modos de video:
MODO |
Servicio de INT 0x10 |
Resolución |
Texto |
0x07 |
80
25 |
4 Color Graphic |
0x04 |
320
200 |
2ColorGraphic |
0x06 |
640
200 |
Si el programa selecciona un modo distinto a los declarados, por omisión se
coloca en modo texto.
El objeto encargado de la simulación es el objeto ControlView.
El modo texto trabaja con 4 paginas de texto, cada pagina se simula con un
objeto ScrollView. Los modos gráficos se simulan con un objeto
CGAView. Se mantienen 4 matrices de carácteres que sirven como
memoria de video y que se cargan a los objetos ScrollView.
typedef struct _VideoTexto
{
unsigned row;
unsigned column;
char memVideo[25][81];
} VideoTexto;
@interface ControlCGA:Object
{
ScrollView *text1; // Pagina modo texto 1
ScrollView *text2; // Pagina modo texto 2
ScrollView *text3; // Pagina modo texto 3
ScrollView *text4; // Pagina modo texto 4
CGAView *graf; // Pagina de modo grafico
...
unsigned modo;
int pagina;
VideoTexto texto[4];
}
Los servicios del manejo del video de BIOS (INT 0x10) para CGA se simularon
de la siguiente manera:
- Selecciona el modo de video (0x00). Este servicio despliega el objeto
gráfico que simula al video, si la selección es algún modo
gráfico, se despliega en la ventana el objeto CGAView, si es el modo
gráfico, se despliega el objeto ScrollView correspondiente a la
página activa que tenga registrado el objeto ControlView.
- Define el tipo de cursor (0x01). Este servicio no se implantó.
- Coloca la posición del cursor (0x02). Este servicio se simula
actualizando las variables de renglón y columna del objeto
ControlView.
- Obtiene la posición del cursor (0x03). Este servicio se simula
obteniendo el valor de las variables de rengón y columna del objeto
ControlView.
- Obtiene la posición de la pluma de luz (0x04). Este servicio no se
implantó.
- Activa página de video (0x05). Este servicio se simula desplegando
el objeto ScrollView que corresponda a la página deseada.
- Corrimiento arriba y corrimiento abajo(0x06 y 0x07). Se recorren los
renglones de la matriz hacia arriba o abajo, dependiendo de la opción.
Los nuevos renglones se llenan con espacios en blanco, y los demás
renglones se pierden.
- Lee el atributo de video de un carácter (0x08). Regresa el valor
0x00, ya que no se implnato el desplegado de atributo de carácteres.
- Escribe carácter con su atributo (0x09). Escribe el carácter en
la página que indique y con los valores renglón y columna que tenga
el objeto ControlCGA. Se ignora byte de atributo.
- Escribe carácter sin atributo, en la posición del cursor (0x0a).
Se simula igual que el servicio 0x08.
- Coloca paleta de video (0x0b). Este servicio no se implantó.
- Escribe un pixel en el video (0x0c). Este servicio se simula mandando
las coordenadas al objeto CGAView, el cual guarda en una matriz (que
sirve como memoria de video) el pixel y su atributo de color. Y vuelve
a desplegar este objeto.
- Lee atributo de pixel (0x0d). Regresa el atributo del pixel de la
matriz de sirve como memoria de video.
- Salida de video en formato TTY (0x0e). Escribe el carácter y
actualiza la posición del renglón y la columna del objeto
ControlView.
- Obtiene el modo de video (0x0f). Obtiene el modo gráfico de video
de la variable modo del objeto ControlCGA.
La simulación gráfica de CGA se realizo con la clase CGAView.
Esta clase tiene una memoria de video, una variable que le indica el
modo de trabajo (resolución alta o media), y dos variables que indica
en tamaño del pixel. Este tamaño se obtiene de dividir la longitud
del marco donde se desplegará la información, con la resolución del
modo de video.
@interface CGAView:View
{
int modo; // Modo de trabajo: MEDIUM/HIGHT
float radioX; // radio de pixel (tamanho de salto w)
float radioY; // radio de pixel (tamanho de salto h)
id myWindow; // Ventana de la jerarquia View
char *videomemory; // Memoria de video
}
Aclaramos que esta simulación es un primer paso para obtener la
simulación del video VGA y que si faltan servicios es porque sólo
fue un ejercicio para mostrar el comportamiento de la aplicación
em VM.app y para mostrar las facilidades que se tienen para simular
los dispositivos de entrada y salida de una máquina DOS.
Esta simulación de video aún tiene problemas de rendimiento, pero
se está estudiando los diferentes mecanismos para acelerar la ejecución.
Next: Resultados y conclusiones
Up: La aplicación VM
Previous: Ejecución de la aplicación
Amilcar Meneses
2002-10-03