¿Qué es exactamente VGA y cuál es la diferencia entre él y una tarjeta de video?

30

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?


fuente
Para un pequeño contexto histórico, consulte mi respuesta a una pregunta relacionada: superuser.com/questions/357328/…
Russell Borogove
Cabe señalar que, además de referirse a la tecnología / protocolo de la tarjeta de visualización, el término ha venido a designar estándares eléctricos particulares y resoluciones de visualización. Es difícil adivinar qué significado se está aplicando, incluso cuando ve los términos "en contexto".
Daniel R Hicks

Respuestas:

65

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í:

ingrese la descripción de la imagen aquí

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.

ingrese la descripción de la imagen aquí

(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) ingrese la descripción de la imagen aquí


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.

  G = RAM de video en modo de gráficos
  M = RAM de video en modo de texto monocromo
  C = RAM de video en modo de texto en color
  V = BIOS de ROM de video (sería "a" en PS / 2)
  a = ROM de la placa adaptadora y RAM de propósito especial (espacio libre de UMA)
  r = BIOS de ROM de placa base PS / 2 adicional (UMA libre en sistemas que no son PS / 2)
  R = BIOS de la placa base ROM
  b = IBM Cassette ROM BÁSICA (sería "R" en IBM compatibles)
  h = Área de memoria alta (HMA), si se carga HIMEM.SYS.

Memoria convencional (base):   
Primero 512 KB (u 8 trozos de 64 KB). 

Área de memoria superior (UMA):

0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0E0000: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
0F0000: RRRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRR

( Fuente del mapa ASCII).

Hennes
fuente
1
Comentario Nit: No es un conector "DB15". Un conector DB15 tiene solo 2 filas de pines (al igual que DB9 y DB25). El conector VGA tiene 3 filas de pines, y a menudo se llama "HD15" (HD para alta densidad en comparación con DB) (aunque algunos afirman que "HD15" no es un nombre oficial).
aserrín
2
Comentario n. ° 2: la PC original de IBM puede haberse lanzado con una división 512/512, pero pronto se cambió a una división 640/384 (se hace referencia en su página de origen). La memoria de gráficos comienza en la marca 640K (hexadecimal 0A0000). No creo que nadie se haya dado cuenta realmente de un "límite de 512K" en la forma en que el "límite de 640K" finalmente se convirtió en un problema bien conocido.
Hellion
2
@sawdust: HD15 definitivamente no es un nombre oficial (pero es tan bueno como en estos días). En la Dx-nnfamilia de conectores, xes el tamaño de la carcasa, nnes 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-subminiature
Alexios
3
Me encanta la inflación superlativa de resoluciones: ultra-wide-super-extended-hyper-quad-graphics-array. No puedes llamarlo alta definición, porque un día no lo será.
aidan
2
@LackingConfidence si desea el rendimiento que pueden ofrecer las tarjetas, debe usar sus interfaces propietarias individuales. Si no le importa el rendimiento, existe el BIOS VGA para configurar un framebuffer VESA para usted. Mire vesafb.txt de Linux para obtener detalles (y, por supuesto, el código fuente también en Linux).
derobert
10

Escribir 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.

haimg
fuente
Entonces, ¿cómo tendría sentido eso con una tarjeta de video integrada? Todavía no entiendo cómo VGA puede ser el agregado si la tarjeta no es dictada por VGA.
1
Incluso si su tarjeta de video está integrada, todavía está conectada al resto del sistema a través de algún tipo de bus: PCIe, PCI, AGP, ISA, etc. Estos buses pueden conectar componentes externos a la placa base y pueden conectar componentes internos. dentro del chipset (SATA, video, etc.)
Haimg
1
Pero, ¿cómo saben los autobuses qué hacer con las direcciones? Esto diferirá entre PCI y tarjetas integradas, incluso GPU o microprocesadores gráficos integrados.
1
No hay ninguna diferencia, ya sea que los cables se enruten al conector PCI, o si todas las conexiones están dentro de su puente norte. en.wikipedia.org/wiki/Conventional_PCI#PCI_address_spaces
enviado el
3

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.

pjc50
fuente
Mi tarjeta gráfica está integrada en mi northbridge, no está conectada a PCI. Creo que es un Intel GMA.
3
Es posible que su procesador de gráficos no ocupe una ranura PCI , pero ciertamente se encuentra en uno de los buses del sistema ... incluso si está en la placa base, diablos, incluso si está integrado directamente como parte de un sistema en un chip. De la misma manera que son los controladores SATA de su placa base, o controladores USB, o ... Debería ver la GPU incorporada en la lista (y los controladores SATA, USB, etc.), junto con su ID PCI, si utiliza un bus PCI suficientemente básico. herramienta de inspección para su sistema operativo. Bajo linux es solo 'lspci' en la línea de comando. Para Windows, prefiero el "SIW" de Gabriel Topala. ¿Macs ... también podría tener un 'lspci'?
FeRD
El sistema operativo no importa en tal caso, porque la arquitectura y plataforma de hardware es lo que cuenta. El sistema operativo se acaba de construir sobre eso, y es el punto de entrada principal para interactuar con todo el hardware que el kernel admite para un servicio. La arquitectura y las especificaciones de nits es con lo que estás interactuando. Para determinar su hardware, simplemente busque su placa base en línea. Ese es un comienzo fácil de Fairlu.
+1 comenzando escaneando el bus PCI para encontrar la tarjeta.
n611x007
2

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.

Kevin Cathcart
fuente
Un controlador devce solo es necesario en un sistema operativo. Se puede acceder a todo el hardware directamente desde la arquitectura.
1
Claro, el problema con el acceso directo para las partes 3D es que algunas partes importantes del protocolo son consideradas secretos comerciales por algunos de los principales fabricantes de GPU y, por lo tanto, a menos que se modifique la ingeniería o se firme un acuerdo de confidencialidad, un controlador que ya contiene dicho conocimiento es necesario.
Kevin Cathcart
Depende de la tarjeta. Si es nVidia o AMD, será propietario. Un Intel GMA a bordo sería mucho más fácil que un nVidia GEForce.
1
He actualizado la línea en cuestión para solicitar "buzos o especificaciones". Las especificaciones son suficientes cuando puede obtenerlas, que es el caso de muchas soluciones gráficas de Intel recientes.
Kevin Cathcart
1
Por lo que vale, todas las tarjetas gráficas modernas de Intel y la mayoría de AMD tienen una gran cantidad de especificaciones de programación publicadas. Nvidia aún permanece en silencio sobre el tema, pero el controlador de gráficos de código abierto Nouveau contiene mucha documentación (en forma de código fuente) sobre la programación de tarjetas gráficas de Nvidia. Intel / AMD / Nvidia son más abiertos que los ASIC ARM patentados en estos días; Los chips integrados / móviles son los más secretos de todos.
allquixotic