Académique Documents
Professionnel Documents
Culture Documents
LABORATORIO DE ARQUITECTURA DE
COMPUTADORAS
LABORATORIO N 4
TEMA:
LENGUAJE C
CODIGO
1410772
1220666
APELLIDOS Y NOMBRES
HORARIO
PC
FECHA
8:15-9:45
PC10 C209
21/10/2015
OBSERVACIONES
Octubre 2015
NOTA
LENGUAJE DE PROGRAMACIN C
MEMORIA DE VIDEO MODO TEXTO
Revisin de conceptos tericos
Se llama modo texto a cualquier modo de vdeo de un ordenador en el que el
contenido de la pantalla se representa internamente en trminos de caracteres
textuales en lugar de pxeles individuales. Tpicamente, la pantalla consistir en
una rejilla uniforme de celdas de caracteres, cada una de las cuales
contendr un carcter del juego de caracteres.
El uso del modo texto se hizo popular a principios de los aos 1970, cuando los
terminales de texto orientados a vdeo empezaron a reemplazar a los teletipos
en el uso interactivo de las computadoras.
Las aplicaciones en modo texto se comunican con el usuario mediante lneas
de comandos (CLIs) y interfaces textuales de usuario (TUIs). Muchos juegos de
caracteres usados en aplicaciones en modo texto tambin incluyen un conjunto
limitado de caracteres semi-grficos predefinidos que pueden usarse para
dibujar cajas y otros grficos rudimentarios usados para destacar el contenido o
simular widgets o controles como los presentes en las aplicaciones escritas
para interfaces grficas (GUIs).
Las ventajas de los modos de texto respecto a los grficos incluyen el menor
consumo de memoria y la ms rpida manipulacin de pantalla. Adems, las
aplicaciones en modo texto tienen unos requisitos de ancho de banda
relativamente bajos en uso remoto. Una desventaja obvia del modo texto es la
restriccin del contenido de pantalla, que lo hace inviable para muchos tipos de
aplicaciones.
Una caracterstica importante de los programas en modo texto es que asumen
un ancho constante de las fuentes, donde cada carcter tiene la misma
anchura en pantalla, lo que permite mantener fcilmente la alineacin vertical
cuando se muestran caracteres semi-grficos.
Segn el entorno, el buffer de pantalla puede ser directamente accesible, como
memoria convencional, para los programas locales.
La distincin entre los programas en modo texto y grfico puede a veces ser
difusa, especialmente en ordenadores con tarjetas VGA, debido a que muchos
programas en modo texto recientes llevaron al extremo las posibilidades de
dicho hardware manipulando la controladora de vdeo. Por ejemplo, redefinan
el juego de caracteres para crear caracteres semi-grficos a medida, e incluso
simulaban un cursor de ratn grfico redefiniendo la apariencia de los
caracteres sobre los que dicho cursor quedaba en cada momento. Tambin
pueden usarse estas tcnicas para videojuegos 2D que necesiten aprovechar
la mayor velocidad de manipulacin de los modos de texto respecto a los
grficos.
Tamao
caracter
Resolucin
grfica
Colores
Adaptadores
8025
914
720350
Blanco y
negro
MDA
4025
88
320200
16 colores
CGA, EGA
8025
88
640200
16 colores
CGA, EGA
8025
814
640350
16 colores
EGA
8043
88
640350
16 colores
EGA
8025
916
720400
16 colores
VGA
8050
98
720400
16 colores
VGA
El texto MDA poda ser realzado con los atributos de brillo, subrayado,
inversin y parpadeo.
Las tarjetas de vdeo suelen ser compatibles hacia atrs, es decir, EGA soporta
todos los modos MDA y CGA, VGA soporta los modos MDA, CGA y EGA,
etctera.
El modo texto ms usado con diferencia en entorno DOS y en las primeras
consolas Windows es el de 80 columnas por 25 filas con 16 colores. Este modo
estaba disponible en prcticamente todos los computadores personales IBM y
compatibles. Todos los modos 8025 tambin tena un modo virtual 8024,
usado por algunas aplicaciones que necesitaban una barra de estado en la
ltima fila, como los emuladores de terminal. En realidad era el mismo modo
8025, pero restringido por software para hacer inaccesible la ltima fila.
Existen otros dos modos texto VGA, 9043 y 9050, que se usan muy raras
veces. Los modos de texto a 40 columnas nunca fueron muy populares, y se
usaban slo con fines demostrativos o como hardware muy antiguo que no
soportaban los modos a 80 columnas.
Algunas tarjetas de vdeo (por ejemplo S3) soportaban modos de texto muy
grandes, como 10037 o incluso 160120. En los sistemas Linux se usaba a
menudo un programa llamado SVGATextMode con las tarjetas SVGA para
estableces modos de texto de consola muy grandes.
Revisar el contenido del archivo Modos de video.txt para mayor informacin.
#include <stdio.h>
#include <stdlib.h>
/***************************************/
void MuestraCaracter(char Caracter, int x, int y)
{
unsigned char far *p =(unsigned char far *)0xB8000000;
p = p + 2*(80*y + x);
*p = Caracter;
}
/***************************************/
int main(void)
{
char Estatus, Tecla, Atributo, Aux;
unsigned char far *p;
system("CLS");
MuestraCaracter(
MuestraCaracter(
MuestraCaracter(
MuestraCaracter(
'H', 10, 5 );
'o', 15, 7 );
'l', 20, 5 );
'a', 25, 7 );
system( "PAUSE" );
return 0;
}
/***************************************/
Parte prctica.
Problema 1: Para presentar durante el laboratorio.
Completar la siguiente aplicacin escrita en lenguaje C la misma que luego de
solicitar un mensaje al usuario, emplee los caracteres de dicho mensaje para
formar la letra M (eme mayscula). Dicha letra debe aparecer centrada en
pantalla. Cada trazo que forma parte de la letra debe ser formada con la cuarta
parte de los caracteres del mensaje ingresado. Considerar que el mensaje no
podr tener ms de 80 caracteres.
(20 puntos)
/***************************
Descripcin:
Programa que utiliza un mensaje ingresado por el usuario
para formar la letra M en pantalla
x3
y3
x4
y4
=
=
=
=
/*----Generacin de la M----*/
LineaVertAsc ( Mensaje
, N/4, x1, y1 );
LineaDiagDesc( Mensaje+N/4 , N/4, x2, y2 );
LineaDiagAsc ( Mensaje+N/2 , N/4, x3, y3 );
LineaVertDesc( Mensaje+3*N/4, N/4, x4, y4 );
return 0;
}
/*XXXXXXXXXXXXXXXXXXXXXXXXX*/
void LineaDiagAsc( char Cadena[], int n, int x, int y )
{
/*Completar*/
}
/*XXXXXXXXXXXXXXXXXXXXXXXXX*/
void LineaDiagDesc( char Cadena [], int n, int x, int y )
{
/*Completar*/
}
/*XXXXXXXXXXXXXXXXXXXXXXXXX*/
void LineaVertAsc( char Cadena [], int n, int x, int y )
{
/*Completar*/
}
/*XXXXXXXXXXXXXXXXXXXXXXXXX*/
void LineaVertDesc( char Cadena [], int n, int x, int y )
{
/*Completar*/
}
/*XXXXXXXXXXXXXXXXXXXXXXXXX*/
void MuestraCaracter(char Caracter, int x, int y)
{
char far *p =(char far *)0xB8000000;
p = p + 2*(80*y + x);
*p = Caracter;
}
/*XXXXXXXXXXXXXXXXXXXXXXXXX*/