Este é o terceiro artigo de uma série sobre como portar o jogo Another World. Ele vai falar sobre truques ao trabalhar com o Atari ST . É recomendável que você leia os artigos anteriores primeiro.
O nascimento do Atari ST foi, para dizer o mínimo, inquieto. Tudo começa como um conto de fadas, mas termina com guerras e traições com a participação de Amiga Corp, Commodore, Atari e Atari Computer.

Série de artigos
- Polígonos Outro Mundo .
- Polígonos Outro Mundo: Amiga 500 .
- Polígonos Outro Mundo: Atari ST.
História da ATARI ST
Em 1983, a Hi-Toro era uma startup de Santa Clara que desenvolvia um console de jogos chamado Lorraine. Com um poderoso 68.000 com incríveis recursos gráficos, era uma maravilha tecnológica, muito superior a todos os seus concorrentes. A Hi-Toro, no entanto, ficou sem dinheiro. A Atari, então gigante dos videogames, investiu US $ 500.000 para continuar o desenvolvimento em troca do direito de adicionar um teclado e vender o console como um computador.
Longe da Califórnia, na Pensilvânia, a luta pelo poder no Commodore levou à saída do fundador Jack Tramiel. Ele fundou imediatamente a Tramel Technology, no processo de atrair engenheiros da Commodore. Escusado será dizer que a separação estava longe de ser amigável.
Em meados de 1984, foi a vez de Atari experimentar turbulências financeiras. Quando Jack Tramiel manifestou interesse em comprar a divisão de computadores da Atari, a Commodore viu uma oportunidade de se opor ao seu ex-CEO. Eles compraram a Hi-Toro (que na época era renomeada Amiga Corporation) e só devolveram o "crédito" a Atari [1] .
Tramiel concluiu a aquisição da Atari Computers e imediatamente processou a Amiga Corporation. Este problema não será resolvido até março de 1987 [2] . Enquanto isso, a Atari estava sem novas tecnologias que ajudariam a se tornar rentável novamente [3] .
Por algum tempo, Jack Tramiel pensou em comprar o Genesis da Sega, que procurava um parceiro com experiência na América do Norte. Por fim, a ideia foi rejeitada. O que aconteceu depois, diz DadHacker [4] [5] . Jack deixou apenas 900 dos 10.000 funcionários da Atari. Os demais participaram da marcha da morte com o objetivo de desenvolver e liberar um carro novo em um ano.
Surpreendentemente, eles fizeram isso. O Atari ST foi lançado em junho de 1985, entrando no mercado um mês antes do Amiga 1000.

O dispositivo foi bem recebido pelos usuários. Em novembro de 1985, Jack Tramiel havia anunciado que a Atari havia vendido 50.000 unidades. O preço foi surpreendente. O 520ST foi vendido por US $ 999 e o Amiga 1000, por 1285.
Escolhendo entre duas máquinas com o mesmo processador e a mesma quantidade de RAM, um extra de US $ 300 não valeu a pena. Muitos consumidores escolheram ST.
Além da principal vantagem de preço, o carro tem várias vantagens notáveis sobre os concorrentes. O modo monocromático de alta resolução de 640x480 era ideal para programadores. MIDI embutido foi apreciado por músicos. Um pequeno detalhe que poderia fazer a diferença, o sistema operacional (TOS) e o kernel estavam na ROM. Não havia necessidade de inicializar a partir de um disquete!
O Atari ST rapidamente reuniu um culto de seguidores, especialmente na Europa. Os criadores da cena demo estavam tentando obsessivamente desenvolver métodos de over-scan [6] [7] [8] [9] para remover as bordas da tela preta. No final, essas tentativas foram bem-sucedidas [10] .
Durante sua vida, de 1985 a 1993, a Atari Computers vendeu 2 milhões de dispositivos [11] . Para muitos que sobreviveram a essa época, foi lembrada como a notória guerra de Amiga contra o Atari ST.

Atari st e
Do ponto de vista da computação gráfica, animação e videogame, não houve guerra como tal. É até difícil chamar uma batalha. Graças aos seus coprocessadores Agnus e Denise, o Amiga é significativamente superior ao Atari ST. Por exemplo, trabalhar com a memória de um framebuffer Atari ST foi doloroso ao tentar mover um sprite pela tela.
Para atenuar suas deficiências, a Atari Computers atualizou a linha Atari ST em 1989 com o lançamento das 520 ST E e 1040 ST E. Entre as melhorias: Genlock, cores de 12 bits, áudio PCM e, mais importante, BLiTTER [12] . Essas inovações fizeram do Atari ST uma tecnologia para competir com a Amiga.
Arquitetura
Os recursos do Blitter eram inestimáveis para os desenvolvedores de jogos. Infelizmente, ele apareceu tarde demais. O Atari ST tinha uma base enorme que evitava que os desenvolvedores perdessem tempo, melhorando seu jogo para um pequeno número de usuários. Sem mencionar que ninguém se atreveu a lançar o jogo exclusivamente em ST E. Outro mundo não é exceção, de acordo com o desenvolvedor da versão Jaguar (que viu o código-fonte do Atari ST).
Outro mundo foi totalmente programado para rodar em 68000. Os recursos do ST E não foram utilizados.
- Sébastien Briais
Observe que em todo o Atari ST existe um controlador DMA, mas ele só pode ser transferido de um disquete / disco rígido para a RAM, o que não ajudou muito no desenvolvimento de jogos. Não havia muito para os programadores. Ou seja, o processador Motorola 68000 com uma frequência de clock de 8 MHz e 512 KiB de RAM.

Sistema de vídeo
O chip GLUE, responsável por gerar o sinal de vídeo, usa 3 bits por canal (9 bits por pixel), o que fornece 512 cores.

Nota: foi manipulando Shifter, GLUE e MMU que o criador de demo conseguiu remover as notórias bordas pretas da tela do Atari. Os técnicos de overscan e tela cheia alteram a taxa de atualização entre 50 Hz e 60 Hz e também alternam de hiRes para LowRes até que a varredura de linha seja concluída para atrasar o GLUE sinais VSYNC / HSYNC [13] !
Outro mundo na Atari ST
Outro mundo sob Atari ST foi completamente escrito por Eric Shayi em paralelo com a versão Amiga. O processador 68000, semelhante ao Amiga, facilitou a porta, pois a maioria das VMs do ASM poderia ser reutilizada. Havia diferenças na parte gráfica, onde três modos estão disponíveis. Alta resolução (640x400 2 cores), ideal para programação, resolução média (640x200 4 cores), que não é muito interessante nesse contexto, e baixa resolução (320x200 16 cores [14] ), ideal para outro mundo.

Todas as permissões usam 32 KB para cada framebuffer. Não há planos de ritmo como o Amiga mencionado no último artigo. Em alta resolução, cada bit corresponde a um pixel. Em baixa resolução, o índice de pixels é dividido em 4 bits, distribuídos em 64 bits.
Pequeno inferno
Para um jogo usando sprites, um layout de baixo nível era um problema. Tente imaginar a tarefa de usar uma máscara / gravação com uma resolução de um bit, quando a resolução do barramento for de um byte (8 bits). Agora imagine como um sprite cruza um limite de bytes e a tarefa se transforma em um pesadelo [15] . A carga da CPU era tão pesada que os jogos não usavam máscara / gravação e preferiam usar sprites pré-rotacionados (um conjunto para cada alinhamento de bits), o que, para honra do Atari ST, não era um problema muito grande, dada a quantidade generosa de RAM na memória. placa.
Curiosamente, em outro mundo, o inferno de alternar camadas gráficas se transforma em paraíso quando se trata de desenhar longas linhas da mesma cor. Vamos ver o porquê.
ENCHER e COPIAR
Com apenas um processador para executar FILL e COPY, essa tarefa é executada da maneira mais simples. Não há truques complicados aqui, mas o layout não-plano do framebuffer permite que 68.000 viajem. Com um move.l
32 KB, as operações move.l
8000 (32 bits) move.l
o trabalho nos dois casos. A saída gravada de parte da operação COPY no 68000th é a seguinte.
... move.w #49,d0 ;50*160*4 = 32000 octets .copy_loop: rept 160 move.l (a1)+,(a0)+ endr dbra d0,.copy_loop ...
Como o tempo de 68000 está muito bem documentado [16] [17] , podemos calcular com precisão quanto tempo leva para concluir a operação COPY. Como move.l
requer 20 ciclos, o número total de ciclos necessários é 20 * 160 * 50 = 160.000 ciclos. A uma velocidade de 8.000.000 ciclos / s, o COPY leva 20 ms.
A mesma idéia para o FILL, exceto que, em vez do operando "Registrador de endereço indireto com pós-incremento", o primeiro operando de move.l
é "Dados diretos", que leva "apenas" 12 ciclos. Isso fornece um total de 12 ms para o preenchimento.
... 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: você pode distinguir facilmente a versão do Atari ST da versão do Amiga se olhar para a segunda tela do jogo.
O lindo escaravelho encontrado na versão Amiga desapareceu no Atari ST. De fato, ele está ausente em todos os outros portos [18] , o que o torna um exclusivo da Amiga por algum motivo pouco claro.

Resolvendo o problema com a renderização
Sem os modos "desenho de linha" e "preenchimento de área", a porta no Atari ST usa o algoritmo simples de Bresenham [22] para rastrear arestas de polígono. Com duas arestas e linhas horizontais, são criadas as coordenadas inicial e final do espaço da tela. Então 68.000 preenchem o espaço entre eles [19] . Em geral, o princípio de operação é semelhante ao Amiga blitter, exceto que aqui tudo é feito programaticamente.
A abordagem à primeira vista é muito lenta, mas a "velocidade de cruzeiro" também pode ser alcançada aqui, aproveitando o layout de tecido. Se você olhar com cuidado, a maioria dos quadros de Another World consiste em longas linhas horizontais da mesma cor. Isso permite que o 68000 escreva linhas em um bloco de 16 pixels usando a instrução move.l
que analisamos anteriormente.
A tela onde Leicester encontra seu "salvador" é um bom exemplo.

Aqui vemos as partes vermelhas das linhas que não podem ser exibidas em blocos de 16 pixels devido à localização e alinhamento do buffer de estrutura. Esses pixels “lentos” representam apenas 23% do buffer de quadros na borda dos polígonos. 77% do buffer de quadro é renderizado com um registro de bloco "rápido" de 16 pixels.

Resolvendo o problema com a paleta
O último problema a ser resolvido é que o Atari ST possui uma profundidade de cores rasa. Enquanto o Amiga permite 12 bits por cor, o AtariST pode fornecer apenas 9.
A solução foi colocar o jogo com as paletas Amiga e permitir que os 68.000 cuidassem da conversão de 12 bits para 9 bits com um simples deslocamento de 1 bit (LRS) para cada canal no momento da inicialização.
A imagem final parece um pouco mais sombria em comparação com a Amiga, mas a diferença é quase imperceptível [20] .
Em conclusão
Apesar das falhas óbvias, o Atari ST conseguiu lançar a versão exata de Another World. Apesar de tudo, o jogo não deve se desviar da versão Amiga. O menor espaço de cores era quase imperceptível, e o mecanismo só funcionava um pouco mais devagar [21] do que no Amiga (que trabalhava a quase 24 quadros por segundo).
Referências
- A história de Amiga: Concebida em Atari, nascida em Commodore .
- Amiga Corporation .
- Wikipedia: Origens do Atari ST .
- 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 parte 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 Histórico de demos em tela cheia .
- Vendas e compartilhamento de mercado de computadores da Atari ST: uma comparação .
- ST Magazine 70: 'Le Blitter, animação tres grande vitesse' de Mathias Agopian .
- Técnicas do Atari Overscan .
- Gráficos 3D em tempo real para o Atari ST .
- Por que os jogos Atari ST foram mais lentos que as versões Amiga .
- Mova os Tempos de Execução das Instruções .
- O conjunto de instruções do 68000 .
- Prazeres Nerds .
- Outro código-fonte mundial: Video :: fillPolygon .
- Prazeres nerds, 'ST tem uma paleta um pouco mais escura que a Amiga'. .
- Prazeres nerds, 'A versão do Atari ST corre um pouco mais devagar que o Amiga' .
- Algoritmo de Bresenham .