Pregunta

Hace unos 15 años, solía divertirme y molestar a mi maestra de CS al escribir mal código que modificar directamente el texto en el monitor. Esto fue / se hace fácilmente mediante el acceso a la memoria de vídeo en VGA 0xB8000-equipado PC-compatibles.

Un avance rápido hasta hoy, decidí probar mi viejo truco a través de un puerto de depuración que me da acceso a la lectura de la memoria física. Para mi satisfacción, aún funcionaba en la primera plataforma lo probé en. Entonces, descorazonadoramente, descubrí que no funciona en muchos otros sistemas. Parece que el sistema que no funciona en todos tienen UMA (memoria compartida) de gráficos.

Por lo tanto, una pregunta para todos ustedes, chicos BIOS escritores OS de bajo nivel, y los gurús de controlador de vídeo - si estoy en modo texto normal de color 80x25 en un sistema compatible con PC con memoria gráfica común, en modo real, y el contenido de 0xb8000 - 0xB8FFF son todos 0xFF en vez de darme lo que está en la pantalla, donde se fue el búfer de pantalla

?
¿Fue útil?

Solución

Ah, si se trata de una pantalla de BIOS, todas las apuestas están apagadas. El hecho de que se trata de un BIOS en una placa base con gráficos integrados se inclina aún más las cosas a favor de la extrañeza de vídeo.

con toda probabilidad funcionalidad VGA "clásico" es para todos los emulados. Con una tarjeta de video externa esto sería invisible para el BIOS - que todavía ve una tarjeta de vídeo VGA. Sin embargo, un BIOS cableado a la tarjeta de video no tendría que configurar la capa de VGA falso y dirección de bit de asignación de memoria del espacio de la vieja escuela 20 simplemente para pegar un texto en la pantalla.

En cambio, el BIOS puede interactuar directamente con la tarjeta (a través de algún modo propietario) hasta que el sistema operativo es en realidad va a ser puesto en marcha, en cuyo punto se hace la asignación de memoria en sí. Esto tiene una ventaja importante porque, para una tarjeta que comparte la memoria principal, que no recibe una pantalla en blanco en el inicio si la memoria RAM se instala correctamente (en lugar del modo de BIOS propritary tarjetas de vídeo podría utilizar un buffer normalmente reservado para algún otro propósito, lo que le permite entrar en la BIOS y ves 0 MB de memoria RAM instalada)

Otros consejos

El CGA (adaptador de gráficos de color) y MDA (adaptador de pantalla monocromática) tarjetas "rel =" en.wikipedia.org/wiki/Monochrome_Display_Adapter utilizan diferentes regiones. Un (color) es a 0xB8000 ; pero en blanco y negro comienza en 0xB0000 . Recuerde, usted podría tener dos pantallas activas en la máquina a la vez.

DOS Mapa de memoria del (aunque tiene una errata en el offset para CGA -. no debería ser 8000h 0800h)

En lo que VGA (Video Graphics Array) que pasa, su memoria empieza inferior, por lo el límite de 640K a 0xA0000 y se prolonga durante 64 K - pero puede ir más allá, ya que la tarjeta podría tener hasta 256K. Algunos código de ejemplo para VGA programación es aquí . Pero no es tan sencillo, ya que tiene múltiples modos de vídeo. Usted puede tratar de aquí un poco de ayuda.

¿Estás seguro de que tiene VGA, y no EGA o XGA o Super-VGA? Todos los que tienen una semántica ligeramente diferente ... Pero aún así, estoy bastante seguro de que cualquiera de esos deben poner texto, ya sea en 0xB0000 o 0xB8000 . Lo que ocurre cuando se escribe o bien

MODE MONO

o

MODO CO80

- afecta eso a la pantalla? Esos serían cambiar del modo de texto de un adaptador a la otra, bajo DOS.

Podría darse el caso de que la memoria virtual está activada en ese momento.

Para por ejemplo., Yo estaba tratando de escribir en el búfer de vídeo en el código base gpxe y que no reflejaba en la pantalla. Después de investigar, me di cuenta de que tenía que llamar a la función:

phys_to_virt(0xB8000);

para poder escribir en el buffer de vídeo directamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top