Los archivos BGI y SVGA.BGI 4.00

Seguimos hablando de retroinformática, continuando con el Turbo Anti-Virus, Central Point Anti-Virus y Microsoft Anti-Virus, pero esta vez nuevamente centrado en el mundo de la programación. Si exceptuamos El curioso bug de QB64 (on error) creo que el último fue Uptime 2 para DOS de 2017.

El Borland Graphics Interface (BGI) apareció en 1987 y era un concepto revolucionario que se había utilizado en shells y sistemas operativos más avanzados como Windows. Básicamente era una interfaz de programación o API ideada para manejar los modos gráficos bajo DOS. La novedad es que era drivers reemplazables, es decir archivos externos que se cargaban en tiempo de ejecución, por tanto, sólo se cargaba en memoria el driver concreto que necesitase tu aplicación para correr en ese sistema (ATT.BGI, CGA.BGI, EGAVGA.BGI, HERC.BGI, IBM8514.BGI o PC3270.BGI).

Como muestra de la flexibilidad que proporcionaban, así como de la creatividad que tenía Borland por aquellos años, la herramienta BGIOBJ.EXE, permitía convertir los drivers .BGI a formato OBJ y así enlazarlo o linkarlo estáticamente con nuestro programa. Exactamente lo mismo que hoy en día nos permiten Delphi o Visual C++. De ese modo todo el código se incorporaba a nuestro ejecutable, aumentando el tamaño y la demanda de memoria, pero evitando tener que distribuir los drivers BGI por separado.

Los drivers BGI eran compatibles tanto con Turbo/Borland C/C++ como con Turbo/Borland Pascal. En este segundo caso, y dado que a partir de la versión 7 (también con el Borland Powerpack), permitía generar ejecutables en modo protegido (DPMI-16), se actualizó la especificación de drivers BGI a la versión 3, llamados a veces también BGX, BPG o BP7.

Los controladores gráficos BGI, así como sus correspondientes tipografías .CHR (BOLD.CHR, EURO.CHR, GOTH.CHR, LCOM.CHR, LITT.CHR, SANS.CHR, SCRI.CHR, SIMP.CHR, TRIP.CHR o TSCR.CHR) que seguían el mismo esquema se incluyeron oficialmente hasta tan tarde como 1997 con Borland C++ 5.02, si bien esos drivers llevaban tiempo sin estar actualizados y a efectos prácticos eran idénticos a los de versiones mucho más antiguas.

Aunque internamente se usaron drivers BGI en aplicaciones desarrolladas por la propia Borland, por ejemplo la hoja de cálculo Quattro Pro, es evidente que siempre faltó la compatibilidad con el modo VGA o superior. A fin de cuentas el EGAVGA.BGI permitía como máximo el modo VGAHi que eran 640×480 a 16 colores.

Por fortuna, y otra vez haciendo gala de la inventiva de Borland, en 1989 había aparecido el Borland BGI Toolkit o The BGI Toolkit (BGIKIT), era una librería para que los programadores pudieran desarrollar sus propios drivers BGI, pero lo mejor de todo es que en su interior venía VGA256.BGI. Con sólo 3 KB. sus funciones eran muy limitadas, de hecho solamente soportaba el modo VGA 320×200 a 256 colores, pero abrió las puertas para que otros desarrolladores crearan sus propios drivers BGI.

El más conocido fue el SVGA.BGI de Jordan Hargraphix Software (Jordan Hargravey) que en 2020 se liberaron en GitHub como código abierto. Aparecido en 1990 y actualizado hasta 1994 con la versión 5.5, soportaba mayor cantidad de modos gráficos, incluyendo aquellos no estandarizados como los proporcionados por ATI, Cirrus Logic e incluso soportando aceleración hardware vía VESA VBE.

Paralelamente Knight Software (Don T. Knight) lanzaba su BGI256.BGI su SVGA driver mantenido entre 1991 y 1995 y que a la sazón me dio para que yo mismo lo tomara como base y desarrollara en 1998 SVGABGI 3.06. Las BBS y el Shareware se llenaron de archivos tipo VGA256.BGI, BGI256.BGI, SVGA.BGI, SVGA256.BGI, XGA.BGI, …

La mayoría de ellas tenían un grave problema, igual que las originales de Borland eran muy lentas. Por un lado estaban diseñadas para ser portables y tan genéricas como para funcionar en hardware distinto y soportar diferentes resoluciones, y por otro usaban muchos servicios de la BIOS. Sin embargo Ullrich von Bassewitz, al que no llegué a conocer en su época, pero con el que pude estar en contacto recientemente, sí que creó unos drivers BGI que tenían en cuenta el rendimiento, si bien eran comerciales, y por tanto los vendía. Lanzó su primer SVGA.BGI en 1990 y como el resto, lo continuó actualizando hasta 1995. Basandose en la arquitectura BGI desarrolló también controladores de impresión matricial y láser (PRINTER.BGI), plotters vectoriales (PLOTTER.BGI) y PCX.BGI para guardar archivos gráficos en ese formato. A partir de 1994-1995 empezó a distribuirlos gratuitamente, si bien le quedaba la espinita clavada de liberar su código fuente, cosa que no hizo hasta 1997.

Pude comparar varios drivers BGI, y de serie, la mejora de velocidad que tienen los de von Bassewitz, eran evidentes, así que fueron los que escogí como base para algunos experimentos personales, pero también para aplicar las modificaciones al código con el objeto de comprobar si podía acelerarlo algo más. Su licencia por tanto, permite la modificación y la redistribución, así que por puro reto o entretenimiento, me los descargué y decidí ver si podía hacerlos aún más rápidos que Ullrich von Bassewitz. Era una forma de recordar mi trabajo con el SVGABGI de 1998. La tarea no fue sencilla, porque como él mismo confiesa, toda la documentación y los comentarios del código están en idioma alemán.

Cree un repositorio en GitHub y realicé solamente 10 commits. Esencialmente estos permitían:
– Usar la última versión de BGIBench, una prueba de rendimiento que había creado Ullrich, pero donde el ejecutable no estaba actualizado con el último código fuente, y que además aproveché para recompilar con el último Turbo Pascal 7.1.
– Compilados BGIDEMO y SVGADEMO con Borland C++ 5.02,
– Posibilidad de ensamblar el driver con TASM (Turbo Assembler 5.0) además de con versiones anteriores como la 3.1.
– Actualizar el makefile para que generara toda la construcción automáticamente.
– Generar el driver optimizado para instrucciones 286, algo que el código original ya permitía, pero que venía desactivado.
– Agregadas varias dependencias que eran necesarias para construir el proyecto (BH2.EXE, BH3.EXE, …) así como actualizados los últimos BGI y CHR.
– Optimizaciones de código, tanto en cuanto a velocidad como en cuanto a tamaño, la mayoría de 32 bits y por tanto sólo disponibles en SVGA386.BGI y SVGA386.BP7, pero otras también comunes a 286 y 8088/8086.

Y estos fueron los tiempos de ejecución en segundos que obtuve:

SVGA.BGI SVGA286.BGI SVGA386.BGI
SVGA 3.51A 196,25 188,55
SVGA 4.00 194,55 193,40 180,80

La mejoría global es más bien leve, apenas un 5%, pero demuestra que dedicándole tiempo podría ser mucho más veloz. Claro que el enfoque que seguí fue optimizar para los procesadores originales, por supuesto podría haber alterado el código del 386 para ejecutarse más rápido en 486 o Pentium, pero eso hubiera perjudicado al hardware antiguo y no hubiera sido fiel con el original. También es verdad que en algunos casos la mejora es muy superior, fundamentalmente aquellas que rellenan píxeles (filling) y que usando las instrucciones de 386 ahora lo pueden hacer de 4 en 4 en vez de 2 en 2.

Como es más que probable que el repositorio de Github quede ahí sin más actualizaciones, os dejo aquí el paquete con todos los fuentes, herramientas y ejecutables compilados (498 KB. en formato ZIP).

Como también se trata de preservar y recordar, aquí la memorabilia.

Drivers BGI (SVGA.BGI, SVGA286.BGI y SVGA386.BGI.
FreeDOS Edit con SVGA.ASM y Borland Make ejecutando las tareas para generar los binarios con los BGI y los archivos OBJ para enlazado estático (Turbo Assembler -TASM-, Turbo Linker -TLINK-, Turbo Debugger Symbol Table Stripper -TDSTRIP-, Exetobin y BGI Driver Builder -BH-).


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00

SVGADEMO
SVGADEMO en el IDE Borland C++ 3.1. Y luego la animación con la secuencia de las bolas rellenadas a 1200×960 con 256 colores.


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00

BGIDEMO
El BGIDEMO de Borland modificado para usar SVGA386.BGI en el IDE de Borland C++ 3.1 y después las diferentes secciones de su ejecución a 1024×768 con 256 colores.


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00

BGIBENCH
BGIBENCH en el IDE de Turbo Pascal 7.1 en su versión extendida TPX y después sus pasos durante la ejecución.


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00


Los archivos BGI y SVGA.BGI 4.00

18 comentarios en “Los archivos BGI y SVGA.BGI 4.00”

  1. Lanzo una pregunta al aire: Tras tantos años que ya han pasado, ¿existe algo como si fuera una distro ejecutable vía USB como algunas de Linux, pero basada en MS-Dos permitiendo funcionar a día de hoy con modo texto y modo gráfico (incluso la navegación web con modo texto utilizable)?

    Llego a haber nacido unos pocos años antes de cuando me tocó, y me toca esta etapa de lleno. Otra cosa sería como la recordaría a día de hoy, eso no lo sé. El caso es que por entonces la cosa fue diferente, algún primo mío me dejaba alucinado en alguna visita con un juego de la WWF que tenía para su AMSTRAD (por similar aspecto gráfico y todo monocromo en verde fósforo) y lo que me tocó de DOS fue de refilón por Windows 95 y en adelante.

    Bueno, y que en los 90 que ya había algunos ordenadores en las aulas de FP, de lo poco que nos “enseñaron” de ofimática (entrecomillado porque ya sabíamos mucho más de forma autodidacta con el Word/Office 97 que solían acompañar a los PC) fue con la siempre sorprendente Lotus Wordperfect… ¡pero era la versión bajo DOS! Aunque me gustaba como iba y prefería como se veía en pantalla respecto al Word 97 (especialmente si se tenían que tener tres barras de herramientas o más).

    Offtopic: Qué pena que no lograran mantener y mejorar en el tiempo la suite gratuita Lotus Symphony. Pintaba muy bien, y a día de hoy podría ser una alternativa perfecta para a quienes Libreoffice sea demasiado, y Wordpad o Abiword demasiado limitado.

  2. Javier Gutiérrez Chamorro (Guti)

    Me hubiera gustado mucho eso Alejandro. De hecho hace años intenté hacerlo yo, para evitarme complicaciones lo intenté sobre DOSBox, pero claro, lo suyo sería una ISO que arrancara directamente sobre DOS. En su momento lo vi con MS-DOS 7.1, pero me encantaría verlo con FreeDOS y un conjunto de herramientas de desarrollo. Vamos, lo que tu dices, el típico CD de Linux. No haría falta un DVD porque con DOS en 600 MB caben multitud de cosas.

  3. Javier Gutiérrez Chamorro (Guti)

    Me gustaba mucho en su momento Nina Barreira Lamprez Si hubiera un Smartsuite portable que no necesitara instalarse lo llevaría en mi pendrive.

  4. Javier Gutiérrez Chamorro (Guti)

    Como siempre muchas gracias por estar ahí Ricardo. Uno se va acostumbrando a ese intercambio de palabras. No te preocupes que pronto volveremos a tener relojes.

  5. La Smartsuite según reza por ahí fue la predecesora de la Lotus Symphony. La equivalente comercial a Office (lo que hoy sería Office Home). Creo que tampoco existe ya.

    La Lotus Symphony la sacaron al público en alpha y beta, y decían que pretendían que fuera gratis, y quizás algunas funciones o añadidos, pues serían bajo pago. Pintaba muy bien, abrías una ventana y podías crear un documento, hoja de cálculo o base de datos directamente, y si requerías otro, pues abrías otra pestaña nueva y podía ser de otra funcionalidad. Incluso incluía un navegador web (que también se podía abrir en una pestaña de la aplicación). Estaba muy curiosa, y la interfaz era parecida a la “Ribbon” que se hiciera tan famosa con la suite ofimática de Microsoft en su último cambio más profundo, muy intuitiva y clara… pero ahí se quedó. No fue a más. Dicen que donaron todo lo que fue Symphony a Open o LibreOffice, pero por ahora parece que no han tomado estos últimos de ello el tema de la interfaz (y francamente, deberían, en eso era una joyita, además de que también notaba Symphony más liviana y menos pesada en memoria y agilidad que otras suites.

    ¡Ricardo! ¿Qué tal va la cosa por el México lindo? Porque por aquí ya nos distraen desde hace tiempo sin apenas hablar (o nada) de cómo va el tema de la pandemia de fronteras para fuera, mientras llenan especialmente las televisiones de pamplinas o tretas de distracción en las noticias con el politiqueo detrás… a veces siento al poner la radio como cuando tenían que ponerla nuestros abuelos y padres para intentar pillar Radio Pirenaica y hasta Radio Tirana para intentar saber algo de fuera xD. Y así han fomentado que suficientemente gente se relaje y se vayan de fiesta (invitando a las actuales cepas, claro está, que se apuntan a un bombardeo) y ahí vamos, con la incidencia para arriba a todo trapo.

  6. Javier Gutiérrez Chamorro (Guti)

    Exacto Alejandro Smartsuite fue anterior al Lotus Symphony que luego sería liberado y daría Apache OpenOffice. Sin embargo antes de ese Smartsuite estaba el Lotus Symphony para DOS. No lo recordaba, pero del primero hablé en 2007: Lotus Symphony. Del mucho más interesante memorable Symphony para MS-DOS nunca lo hice, y como nunca es tarde para rendir un tributo me apunto la idea. Entre tanto un avance:

    Increíble que la versión 3.00 esté registrada al servicio de correos estadounidense.

  7. Vaya que buenos recuerdos, yo programé para el msdos a finales de los 90’s en la universidad, aprendí un poquito de graficos con graphics.h si no me equivoco, distribuia con el ejecutable los archivos .BGI (ya no me acuerdo cuales exactamente jejeje), pero nunca salí de hacer unos cuantos cuadros en pantalla y algunos que otros efectitos.

    Ahora soy programador de visual basic .net, que cambio no???, buenos tiempos, me trajo buenos recuerdos, gracias.

  8. Javier Gutiérrez Chamorro (Guti)

    Probablemente fuera el EGAVGA.BGI Manuel, era de los pocos que venía de serie. Me sorprendió que ofrecía cosas impensables hoy en día. ¿Te imaginas que VB.NET pudiera “dibujar” en una impresora o en una pantalla de 16 colores simplemente cambiando el driver que usa?

  9. Javier Gutiérrez Chamorro (Guti)

    Y no sólo eso marjuanm:
    “Basándose en la arquitectura BGI desarrolló también controladores de impresión matricial y láser (PRINTER.BGI), plotters vectoriales (PLOTTER.BGI) y PCX.BGI para guardar archivos gráficos en ese formato”.

    Es decir, podías dibujar no sólo en impresoras (láser y de matriz aunque creo que también los hubo para inyección de tinta), sino en plotters de impresión o corte. Unos dispositivos relativamente populares entonces, pero aún usados en algunas imprentas que se usan principalmente a la impresión de planos y otros contenidos vectoriales.

  10. Interesante, no se, tengo la impresión de que mucha de esa tecnología se perdió o solo es mi idea. Entiendo que llegó Windows y cambiaron muchas cosas, pero no se si el objeto Printer de Visual Basic 6 halla heredado algo de esta tecnología.

  11. Javier Gutiérrez Chamorro (Guti)

    Muy bien visto marjuanm. Sería más o menos eso. La posibilidad que desde tu código pudieras dibujar sobre la instancia de un objeto con APIs casi idénticas. Se me ocurre que podrías dibujar un círculo sobre un objeto. Si ese fuera Printer iría a la impresión y si fuera Form a la pantalla. Tu código no cambiaría y sería compatible con ambos.

  12. buenas a todos se ve qeu saben mucho sobre drives una pregunta alguno de ustedes save que driver bgi puedo usar para programar graficos a 256 colores y incluir em mouse, lo hago pero el mouse no se muestra no se que debo hacer gracias a todos y felicidades

  13. Javier Gutiérrez Chamorro (Guti)

    Bienvenido esteban. El problema no es del driver BGI, sino del driver de ratón. Dependiendo de lo que estés haciendo tienes dos opciones. Si es algo de uso reducido, puedes actualizar tu driver de mouse por uno que soporte modos gráficos extendidos y VESA. Si lo que deseas es algo de más amplia difusión, entonces lo que tendrá que hacer tu código es dibujar el puntero del ratón de manera que si el driver es viejo, todo siga funcionando correctamente.

Deja un comentario