Este es el tercer artículo de una serie sobre portar el juego Another World. Hablará de trucos cuando trabaje con Atari ST . Se recomienda que lea primero los artículos anteriores.
El nacimiento de Atari ST fue, por decirlo suavemente, inquieto. Todo comienza como en un cuento de hadas, pero termina con guerras y traiciones con la participación de Amiga Corp, Commodore, Atari y Atari Computer.

Serie de artículos
- Polígonos de otro mundo .
- Polígonos de otro mundo: Amiga 500 .
- Polígonos de otro mundo: Atari ST.
Historia de ATARI ST
En 1983, Hi-Toro era una startup de Santa Clara que desarrollaba una consola de juegos llamada Lorraine. Con un poderoso 68,000 con increíbles capacidades gráficas, fue una maravilla tecnológica, muy superior a todos sus competidores. Hi-Toro, sin embargo, se quedó sin dinero. Atari, entonces un gigante de los videojuegos, invirtió $ 500,000 para continuar el desarrollo a cambio del derecho de agregar un teclado y vender la consola como una computadora.
Lejos de California, en Pensilvania, la lucha de poder en Commodore condujo a la partida del fundador Jack Tramiel. Inmediatamente fundó Tramel Technology, en el proceso de atraer a los ingenieros de Commodore. No hace falta decir que la separación estuvo lejos de ser amistosa.
A mediados de 1984, fue el turno de Atari de experimentar problemas financieros. Cuando Jack Tramiel expresó interés en comprar la división de computadoras Atari, Commodore vio la oportunidad de oponerse a su ex CEO. Compraron Hi-Toro (que en ese momento pasó a llamarse Amiga Corporation), y solo le devolvieron a Atari su "crédito" [1] .
Tramiel completó la adquisición de Atari Computers e inmediatamente demandó a Amiga Corporation. Este problema no se resolverá hasta marzo de 1987 [2] . Mientras tanto, Atari carecía de nuevas tecnologías que ayudaran a volver a ser rentables [3] .
Durante algún tiempo, Jack Tramiel consideró comprar Genesis a Sega, que estaba buscando un socio con experiencia en América del Norte. Finalmente, la idea fue rechazada. Lo que sucedió después, dice DadHacker [4] [5] . Jack dejó solo 900 de los 10,000 empleados de Atari. Los restantes participaron en la marcha de la muerte con el objetivo de desarrollar y lanzar un auto nuevo dentro de un año.
Sorprendentemente, lo hicieron. Atari ST se lanzó en junio de 1985, ingresando al mercado un mes antes que el Amiga 1000.

El dispositivo fue bien recibido por los usuarios. Para noviembre de 1985, Jack Tramiel había anunciado que Atari había vendido 50,000 unidades. El precio fue sorprendente. El 520ST se vendió por $ 999 y el Amiga 1000 por 1285.
Al elegir entre dos máquinas con el mismo procesador y la misma cantidad de RAM, no valieron la pena $ 300 adicionales. Muchos consumidores han elegido ST.
Además de la principal ventaja de precio, el automóvil tiene varias ventajas notables sobre los competidores. El modo monocromo de alta resolución 640x480 fue ideal para programadores. El MIDI incorporado fue apreciado por los músicos. Un pequeño detalle que podría marcar la diferencia, el sistema operativo (TOS) y el núcleo estaban realmente en ROM. ¡No había necesidad de arrancar desde un disquete!
Atari ST rápidamente reunió un culto de seguidores, especialmente en Europa. Los creadores de la escena de demostración estaban tratando obsesivamente de desarrollar métodos de escaneo excesivo [6] [7] [8] [9] para eliminar los bordes de la pantalla en negro. Al final, estos intentos tuvieron éxito [10] .
Durante su vida, de 1985 a 1993, Atari Computers vendió 2 millones de dispositivos [11] . Para muchos de los que sobrevivieron a esta época, fue recordado como la famosa guerra de Amiga contra Atari ST.

Atari st e
Desde el punto de vista de los gráficos por computadora, la animación y los videojuegos, no hubo guerra como tal. Incluso es difícil convocar una batalla. Gracias a sus coprocesadores Agnus y Denise, Amiga es significativamente superior a Atari ST. Por ejemplo, trabajar con la memoria de un framebuffer Atari ST fue doloroso al intentar mover un sprite por la pantalla.
Para mitigar sus defectos, Atari Computers actualizó la línea Atari ST en 1989 con el lanzamiento de 520 ST E y 1040 ST E. Entre las mejoras: Genlock, colores de 12 bits, audio PCM y, lo más importante, BLiTTER [12] . Estas innovaciones hicieron de Atari ST una tecnología para competir con Amiga.
Arquitectura
Las capacidades de Blitter fueron invaluables para los desarrolladores de juegos. Lamentablemente, apareció demasiado tarde. Atari ST tenía una base enorme que evitaba que los desarrolladores perdieran el tiempo mejorando su juego para un pequeño número de usuarios. Sin mencionar que nadie se atrevió a lanzar el juego exclusivamente en ST E. Another World no es una excepción, según el desarrollador de la versión Jaguar (que vio el código fuente de Atari ST).
Otro mundo estaba totalmente programado para ejecutarse en 68000. Las funciones ST E no se utilizaron en absoluto.
- Sébastien Briais
Tenga en cuenta que todos los Atari ST tienen un controlador DMA, pero solo se pueden transferir desde un disquete / disco duro a la RAM, lo que no ayudó mucho al desarrollar juegos. No quedaba mucho para los programadores. A saber, el procesador Motorola 68000 con una frecuencia de reloj de 8 MHz y 512 KiB RAM.

Sistema de video
El chip GLUE, que es responsable de generar la señal de video, utiliza 3 bits por canal (9 bits por píxel), lo que proporciona 512 colores.

Nota: fue manipulando Shifter, GLUE y MMU que el creador de la demostración logró eliminar los notorios bordes negros de la pantalla de Atari. ¡Los técnicos de sobreexploración y pantalla completa cambian la frecuencia de actualización entre 50 Hz y 60 Hz, y también cambian de alta a baja hasta que se completa el escaneo de línea para obligar a GLUE a retrasar las señales VSYNC / HSYNC [13] !
Otro mundo en Atari ST
Otro mundo bajo Atari ST fue completamente escrito por Eric Shayi en paralelo con la versión de Amiga. El procesador 68000, similar al Amiga, facilitó el puerto ya que la mayoría de las VM de ASM podrían reutilizarse. Hubo diferencias en la parte gráfica, donde hay tres modos disponibles. Alta resolución (640x400 2 colores), que es excelente para la programación, resolución media (640x200 4 colores), que no es muy interesante en este contexto, y baja resolución (320x200 16 colores [14] ), que es ideal para Another World.

Todos los permisos usan 32 KB para cada framebuffer. No hay planes de ritmo como el Amiga mencionado en el último artículo. En alta resolución, cada bit corresponde a un píxel. En baja resolución, el índice de píxeles se divide en 4 bits, distribuidos en 64 bits.
Pequeño infierno
Para un juego que usa sprites, un diseño de bajo nivel era un problema. Intente imaginar la tarea de usar una máscara / grabación con una resolución de un bit, cuando la resolución del bus es de un byte (8 bits). Ahora imagine cómo un sprite cruza un límite de bytes, y la tarea se convierte en una pesadilla [15] . La carga de la CPU fue tan grande que los juegos no usaron una máscara / grabación y prefirieron usar sprites pre-rotados (un conjunto para cada alineación de bits), lo que, para el honor de Atari ST, no fue un problema demasiado grande, dada la generosa cantidad de RAM en tablero.
Curiosamente, en Another World, el infierno de alternar capas gráficas se convierte en un paraíso cuando se trata de dibujar largas líneas del mismo color. A ver por qué.
LLENAR y COPIAR
Con solo un procesador para realizar FILL y COPY, esta tarea se realiza de la manera más simple. No hay ningún truco complicado aquí, pero el diseño no plano del framebuffer permite que 68,000 "viajen". Con un move.l
32 KB, las operaciones 8000 (32 bits) move.l
hacen el trabajo en ambos casos. La salida grabada de parte de la operación COPY en el 68000 es la siguiente.
... move.w #49,d0 ;50*160*4 = 32000 octets .copy_loop: rept 160 move.l (a1)+,(a0)+ endr dbra d0,.copy_loop ...
Dado que el tiempo de 68000 está muy bien documentado [16] [17] , podemos calcular con precisión cuánto tiempo se tarda en completar la operación de COPIA. Dado que move.l
requiere 20 ciclos, el número total de ciclos requerido es 20 * 160 * 50 = 160,000 ciclos. A una velocidad de 8,000,000 ciclos / s, COPY toma 20 ms.
La misma idea para FILL, excepto que en lugar del operando "Registro indirecto de direcciones con post-incremento", el primer operando de move.l
es "Datos directos", que toma "solo" 12 ciclos. Esto da un total de 12 ms para FILL.
... move.w #49,d0 ;50*160*4 = 32000 octets .fill_loop: rept 160 ; d1 = color repeated 8 times since d1=32 bits and color index=4 bits) move.l d1,(a0)+ endr dbra d0,.fill_loop ...
Nota: puedes distinguir fácilmente la versión Atari ST de la versión Amiga si miras la segunda pantalla del juego.
El lindo escarabajo encontrado en la versión de Amiga desapareció en el Atari ST. De hecho, está ausente en todos los demás puertos [18] , lo que lo convierte en un Amiga exclusivo por alguna razón poco clara.

Resolviendo el problema con renderizado
Sin los modos "dibujo lineal" y "relleno de área", el puerto bajo Atari ST usa el algoritmo Bresenham simple [22] para rastrear los bordes del polígono. Con dos bordes y líneas horizontales, se crean las coordenadas inicial y final del espacio de la pantalla. Entonces 68,000 llena el espacio entre ellos [19] . En general, el principio de funcionamiento es similar al blitter de Amiga, excepto que aquí todo se hace mediante programación.
El enfoque a primera vista es muy lento, pero aquí también se puede lograr la "velocidad de crucero", aprovechando el diseño tejido. Si observa con cuidado, la mayoría de los cuadros de Another World consisten en largas líneas horizontales del mismo color. Esto permite que el 68000 escriba líneas en un bloque de 16 píxeles utilizando la instrucción move.l
que revisamos anteriormente.
La pantalla donde Leicester se encuentra con su "salvador" es un buen ejemplo.

Aquí vemos las partes de las líneas resaltadas en rojo que no se pueden mostrar en bloques de 16 píxeles debido a la ubicación y alineación del framebuffer. Estos píxeles "lentos" constituyen solo el 23% del buffer de cuadros en el borde de los polígonos. El 77% del búfer de cuadros se procesa con un registro de bloque "rápido" de 16 píxeles.

Resolviendo el problema con la paleta
El último problema a resolver es que el Atari ST tiene una profundidad de color poco profunda. Mientras Amiga permite 12 bits por color, AtariST solo puede dar 9.
La solución fue poner el juego con las paletas Amiga y dejar que los 68,000 se encargaran de convertir de 12 bits a 9 bits con un simple cambio de 1 bit (LRS) para cada canal en el momento del arranque.
La imagen final se ve un poco más oscura en comparación con el Amiga, pero la diferencia apenas se nota [20] .
En conclusión
A pesar de los defectos obvios, Atari ST logró lanzar la versión exacta de Another World. A pesar de todo, el juego no debe desviarse de la versión de Amiga. El espacio de color más pequeño apenas se notaba, y el motor solo funcionaba un poco más lento [21] que en Amiga (que funcionaba a casi 24 cuadros por segundo).
Referencias
- La historia de Amiga: concebida en Atari, nacida en comodoro .
- Corporación Amiga .
- Wikipedia: Atari ST Origins .
- Dadhacker, The Atari ST, Parte 1 .
- Dadhacker, The Atari ST, Parte 2 .
- ST Magazine 51: 'Les Techniques de l'Overscan parte 1' de Shengan Short .
- ST Magazine 51: 'Les Techniques de l'Overscan Part 2' de Shengan Short .
- ST Magazine 55: 'Les Techniques de l'Overscan 3' de Shengan Short .
- ST Magazine 70: 'Les Techniques de l'Overscan 4' de Shengan Short .
- Atari ST Historial de demos en pantalla completa .
- Atari ST Computer Sales and Marketshare: A Comparison .
- ST Magazine 70: 'Le Blitter, animación tres grande vitesse' de Mathias Agopian .
- Atari Overscan Techniques .
- Gráficos 3D en tiempo real para el Atari ST .
- Por qué los juegos de Atari ST fueron más lentos que las versiones de Amiga .
- Mover tiempos de ejecución de instrucciones .
- El conjunto de instrucciones del 68000 .
- Placeres nerds .
- Otro código fuente mundial: Video :: fillPolygon .
- Nerdy Pleasures, 'ST tiene una paleta un poco más oscura que la Amiga'. .
- Nerdy Pleasures, 'La versión Atari ST corre algo más lenta que la Amiga' .
- Algoritmo de Bresenham .