El truco de programación de videojuegos que exprimía cada ciclo del 6809

A great old-timey game-programming hack (2013)

A principios de los 80, un estudiante casi termina un side-scroller para PC de 8 bits, pero el juego iba demasiado lento. Su amigo revisa el código, ya optimizado a mano, y no encuentra margen: copiar cada tile de 28x28 píxeles cuesta 2893 ciclos. La solución no está en el código, sino en un manual del microprocesador 6809 y en una instrucción poco convencional que lo cambia todo.

El hardware gráfico no hacía absolutamente nada. En el PC en cuestión, si querías dibujar algo en pantalla, tenías que hacerlo tú mismo, byte a byte.
  1. rob74

    Aquí va la versión rápida: el hardware gráfico no hacía absolutamente nada.

    En el PC en cuestión, si querías dibujar algo en pantalla, tenías que hacerlo tú mismo, byte a byte. Sin mapeadores de texturas, sin blitters. Solo bytes. Bytes que tenías que mover tú mismo.

    Eso no es del todo correcto: el hardware gráfico tomaba la memoria de vídeo y construía una imagen a partir de ella (gráficos de framebuffer). Lo cual ya es más de lo que hacían las primeras consolas de videojuegos.

  2. mikewarot

    Allá por los tiempos de MS-DOS, mi amigo Ward Christensen trabajaba en IBM en Soporte Técnico de Ventas. Tenían un archivo mantenido de forma informal que listaba cada uno de los productos que tenían a la venta, en un formato que se podía leer en un PC. Se le daba muy bien buscarlo con su editor de texto, pero quería un programa independiente basado en MS-DOS para que sus compañeros pudieran buscarlo fácilmente. Así nació PCxREF, un programa basado en Turbo Pascal que escribí yo, que incluía búsqueda.

    Mi primera versión fue una búsqueda ingenua usando la coincidencia de cadenas integrada. Debido al tamaño del archivo y a la velocidad de los PCs, a veces tardaba más de 30 segundos en hacer una búsqueda. Ward lo quería más rápido, mucho más rápido.

    Finalmente se me ocurrió un algoritmo que tomaba el texto que querías buscar y lo convertía en un tipo especial de tabla de máscaras de bits. Era una tabla de 256 bytes, inicializada a ceros. Si el primer carácter de la cadena que querías buscar era una D, entonces se activaba el primer bit de la máscara $44 y $64, para manejar la sensibilidad a mayúsculas y minúsculas. Un comodín * solo ocupaba 1 carácter, pero activaba todos los bits de ese carácter. Luego usaba la instrucción XLAT del 8088 y un bucle muy pequeño para ingerir un carácter del texto que se estaba buscando, usarlo como índice en la tabla de máscaras, y hacer AND con la bandera existente en otro registro, luego desplazarla, comprobando CARRY (¡una coincidencia!) y repitiendo si no era cero.

    La búsqueda bajó a menos de 3 segundos si todo el archivo estaba cargado en RAM. La delgada […]

  3. taspeotis

    Algo relacionado [1]:

    > Hace años, trabajaba en Video Seven, un fabricante de adaptadores de vídeo hoy desaparecido, ayudando a desarrollar un clon de VGA. El tipo que estaba diseñando el chip VGA de Video Seven, Tom Wilson, había trabajado sin descanso durante meses para que su VGA funcionara lo más rápido posible, y estaba seguro de que había agotado prácticamente su rendimiento. Sin embargo, mientras Tom daba los últimos retoques al diseño de su chip, llegó de cuarta mano la noticia de que un competidor, Paradise, había mejorado el rendimiento del clon que estaban desarrollando metiendo un FIFO.

    > Eso era todo lo que sabía; no había información sobre qué tipo de FIFO, ni cuánto ayudaba, ni nada más. Aun así, Tom, normalmente un tipo afable y relajado, adoptó el aspecto despierto y atormentado de un hombre con demasiada cafeína en el cuerpo y ninguna respuesta que mostrar, mientras intentaba averiguar, a partir de información desesperadamente escasa, qué había hecho Paradise. Finalmente, concluyó que Paradise debía haber puesto un FIFO de escritura entre el bus del sistema y la VGA, de modo que cuando la CPU escribiera en la memoria de vídeo, la escritura fuera inmediatamente al FIFO, permitiendo a la CPU seguir procesando en lugar de detenerse cada vez que escribía en la memoria de pantalla.

    > Tom no podía prescindir de las puertas lógicas ni del tiempo para hacer un FIFO completo, pero sí podía implementar un FIFO de un solo nivel, permitiendo a la CPU ir una escritura por delante de la VGA. No estaba seguro de qué tal funcionaría, pero era todo lo que podía hacer, así que lo puso y mandó el chip a fabricación.

    > El FIFO de un solo nivel resultó funcionar […]

  4. green_wheel

    Artículo genial. Supongo que la hierba siempre es más verde, pero programar en aquellos días parece realmente genial. Hoy todo son gestores de paquetes por aquí y cadenas de herramientas por allá. Estamos tan abstraídos de lo que realmente ejecuta nuestro código. Artículos como este me hacen oír a la CPU gritando "¡vuelve conmigo, por favoooor!"

  5. pjc50

    Intentando averiguar qué ordenador tenía realmente el 6509; los candidatos parecen ser Dragon o Tandy.

    Este tipo de cosas es la razón por la que el Amiga tuvo tanto éxito al añadir una colección de coprocesadores: https://en.wikipedia.org/wiki/Amiga_Original_Chip_Set

    Cada uno de los cuales tenía una funcionalidad limitada pero dedicada a mover y transformar bytes en RAM. El blitter en particular estaba dedicado a mover memoria para el renderizado de tiles y sprites.

Más de este día

2026-11-11