Los tutoriales de desarrollo del sistema operativo identifican cómo llegar a los datos de la pantalla escribiendo directamente en VGA o EGA o Super VGA, pero lo que no entiendo es cuál es la verdadera diferencia entre escribir en una dirección fija para mostrar y escribir directamente en una tarjeta de video, ya sea a bordo o extraíble? Solo quiero la aclaración básica de mi confusión sobre esto en mi problema
Y dado que no es un caso tan simple con variables en tarjetas, interfaces conectivas, buses, arquitecturas, sistema en un chip, sistemas embebidos, etc., me resulta difícil encontrar una manera de entender la idea detrás de este 100% . ¿Las direcciones fijas diferirían de una GPU de gama alta a una de a bordo de gama baja? ¿Por qué y por qué no?
Es uno de mis objetivos en la programación alojar un kernel y hacer un sistema operativo, y un sueño descabellado. No entender la terminología no solo me dificulta en algunas áreas, sino que me hace parecer tonto en los temas de hardware.
EXTRA: Algunas de estas respuestas actuales hablan de usar la memoria máxima direccionable de los procesadores en los detalles de 16 bits. El problema es algunos de estos otros problemas que surgen:
1. ¿Qué pasa con la propia memoria de la tarjeta? Eso no necesitaría RAM del sistema para los datos de la pantalla.
2. ¿Qué pasa en los modos de bits más altos? ¿Y no puede no descuidar el BIOS en modo real (x86) y aún abordar la memoria a través de AL?
3. ¿Cómo permanecería el concepto de escritura en una dirección fija sin cambios en una GPU con multitud de registros y rendimiento en el microprocesador o por encima de él?
Respuestas:
Técnicamente, VGA significa Video Graphics Array , un estándar de video de 640x480 introducido en 1987. En ese momento, era una resolución relativamente alta, especialmente para una pantalla a color.
Antes de que se presentara VGA, teníamos algunos otros estándares gráficos, como Hércules que mostraba texto (80 líneas de 25 caracteres) o para gráficos monocromos de alta definición relativa (a 720x348 píxeles).
Otros estándares en ese momento eran CGA ( Adaptador gráfico en color ), que también permitía hasta 16 colores con una resolución de hasta 640x200 píxeles. El resultado de eso se vería así:
Finalmente, un estándar de PC notable fue el Adaptador de gráficos mejorado (EGA), que permitió resoluciones de hasta 640 × 350 con 64 colores.
(Estoy ignorando los estándares que no son de PC para mantener este relativo corto. Si empiezo a agregar estándares de Atari o Amiga, hasta 4096 colores en ese momento, entonces esto será bastante largo).
Luego, en 1987, IBM presentó la computadora PS2. Tenía varias diferencias notables en comparación con sus predecesores, que incluían nuevos puertos para mouse y teclados (anteriormente, los ratones usaban puertos seriales de 25 pines o puertos seriales de 9 pines, si es que tenían un mouse); unidades estándar de 3½ pulgadas y un nuevo adaptador gráfico con alta resolución y muchos colores.
Este estándar de gráficos se llamó Video Graphics Array . Utilizó un conector de 3 filas y 15 pines para transferir señales analógicas a un monitor. Este conector se mantuvo hasta hace unos años, cuando fue reemplazado por estándares digitales superiores como DVI y puerto de pantalla.
Después de VGA
El progreso no se detuvo con los estándares VGA. Poco después de la introducción de VGA, surgieron nuevos estándares, como el 800x600 S uper VGA (SVGA), que utilizaba el mismo conector. (Hercules, CGA, EGA, etc., todos tenían sus propios conectores. No podía conectar un monitor CGA a una tarjeta VGA, ni siquiera si intentaba mostrar una resolución lo suficientemente baja).
Desde entonces, pasamos a pantallas con una resolución mucho más alta, pero el nombre más utilizado sigue siendo VGA. Aunque los nombres correctos serían SVGA, XVGA, UXGA, etc.
(Gráfico cortesía de Wikipedia)
Otra cosa que se llama 'VGA' es el conector DE15 utilizado con la tarjeta VGA original. Este conector generalmente azul no es la única forma de transferir 'señales VGA' analógicas a un monitor, pero es la más común.
Izquierda: DB5HD Derecha: conectores VGA alternativos, generalmente utilizados para una mejor calidad)
Una tercera forma en que se usa 'VGA' es para describir una tarjeta gráfica, a pesar de que esa tarjeta puede producir resoluciones completamente diferentes a las de VGA. El uso es técnicamente incorrecto, o al menos debería ser 'tarjeta compatible con VGA', pero el discurso común no hace esa diferencia.
Eso deja de escribir a VGA
Esto proviene de la forma en que se dividió la memoria en un IBM XT. La CPU puede acceder hasta 1MiB (1024KiB) de memoria. Los 512 KB inferiores estaban reservados para RAM, los 512 KB superiores para tarjetas adicionales, ROM, etc.
Esta área superior es donde se asignó la memoria de las tarjetas VGA. Podrías escribirle directamente y el resultado se mostraría en la pantalla.
Esto no solo se usó para VGA, sino también para alternativas de la misma generación.
( Fuente del mapa ASCII).
fuente
Dx-nn
familia de conectores,x
es el tamaño de la carcasa,nn
es el número de pines. Shell B tiene el mismo tamaño que un puerto paralelo (o un puerto serie antiguo de 25 pines de implementación completa). Shell E tiene el mismo tamaño que el puerto serie. Entonces , técnicamente , el conector VGA de 15 pines sería DE-15, pero esto nunca fue parte de la línea original de conectores. AFAIK nunca existió antes del uso de IBM en PS / 2 MCGA, VGA y 8514 / a. Wikipedia tiene una buena explicación: en.wikipedia.org/wiki/D-subminiatureEscribir en una "dirección fija" era esencialmente escribir en una tarjeta de video directamente. Todas esas tarjetas de video ISA de video (CGA, EGA, VGA) esencialmente tenían algo de RAM (y registros) mapeados directamente en la memoria de la CPU y el espacio de E / S.
Entonces, cuando escribió un byte en una determinada ubicación de memoria, ese carácter (en modo de texto) apareció en la pantalla inmediatamente, ya que de hecho escribió en una memoria ubicada en una tarjeta de video, y la tarjeta de video simplemente usó esa memoria.
Todo esto parece muy confuso hoy en día, especialmente teniendo en cuenta que las tarjetas de video de hoy en día a veces se llaman VGA (y tienen un parecido con las tarjetas VGA "verdaderas" de la década de 1990). Sin embargo, incluso las tarjetas modernas emulan algunas de las funcionalidades de estos diseños más antiguos (puede iniciar DOS en la mayoría de las PC modernas y usar programas de DOS que escriben directamente en la memoria de video). Por supuesto, hoy en día todo está emulado en el firmware de la tarjeta de video.
fuente
Realmente no hay una diferencia: si está escribiendo en la dirección de la memoria de video, entonces el hardware lo enrutará a la tarjeta de video.
Si está escribiendo su propio sistema operativo, probablemente tendrá que hacer mucho trabajo para lograr que la tarjeta gráfica asigne su memoria como desee, comenzando escaneando el bus PCI para encontrar la tarjeta.
fuente
Hasta ahora, las respuestas han explicado que las viejas tarjetas de video funcionaban teniendo una memoria de video asignada en el espacio de direcciones del procesador. Este era el recuerdo de las cartas. El Northbridge sabe redirigir las solicitudes de esta memoria asignada al dispositivo VGA.
Luego, además de eso, hubo muchas expansiones y nuevos modos para tarjetas compatibles con VGA. Esto condujo a la creación de VESA BIOS Extensions (VBE), que funcionan a través de
int 10h
. Esto admite aceleración 2D básica (BitBlt), cursores de hardware, almacenamiento en búfer doble / triple, etc. Este es el método básico para la visualización a todo color en cualquier resolución compatible (incluidas las resoluciones altas). Esto normalmente usaba memoria interna de la tarjeta también, con el northbridge realizando redireccionamiento como con el VGA clásico. Esta es la forma más sencilla de utilizar gráficos de collor / resolución completa.A continuación, presentamos un método directo para acceder a una GPU sin usar la BIOS, que proporciona acceso a las mismas funciones que VBE, y posiblemente a otras adicionales. Mi comprensión es bastante confusa aquí. Creo que esta interfaz es específica del dispositivo, pero no estoy seguro de eso.
Luego está la interfaz de GPU que puede admitir el cálculo de aceleración 3D / GP-GPU, etc. Esto definitivamente requiere controladores o especificaciones provistos por el fabricante para su uso completo, y con frecuencia hay diferencias sustanciales incluso entre dispositivos del mismo fabricante.
fuente