Polígonos Outro Mundo: Atari ST

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


  1. Polígonos Outro Mundo .
  2. Polígonos Outro Mundo: Amiga 500 .
  3. 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


  1. A história de Amiga: Concebida em Atari, nascida em Commodore .
  2. Amiga Corporation .
  3. Wikipedia: Origens do Atari ST .
  4. Dadhacker, The Atari ST, Parte 1 .
  5. Dadhacker, The Atari ST, Parte 2 .
  6. ST Magazine 51: 'Les Techniques de l'Overscan parte 1' de Shengan Short .
  7. ST Magazine 51: 'Les Techniques de l'Overscan parte 2' de Shengan Short .
  8. ST Magazine 55: 'Les Techniques de l'Overscan 3', de Shengan Short .
  9. ST Magazine 70: 'Les Techniques de l'Overscan 4', de Shengan Short .
  10. Atari ST Histórico de demos em tela cheia .
  11. Vendas e compartilhamento de mercado de computadores da Atari ST: uma comparação .
  12. ST Magazine 70: 'Le Blitter, animação tres grande vitesse' de Mathias Agopian .
  13. Técnicas do Atari Overscan .
  14. Gráficos 3D em tempo real para o Atari ST .
  15. Por que os jogos Atari ST foram mais lentos que as versões Amiga .
  16. Mova os Tempos de Execução das Instruções .
  17. O conjunto de instruções do 68000 .
  18. Prazeres Nerds .
  19. Outro código-fonte mundial: Video :: fillPolygon .
  20. Prazeres nerds, 'ST tem uma paleta um pouco mais escura que a Amiga'. .
  21. Prazeres nerds, 'A versão do Atari ST corre um pouco mais devagar que o Amiga' .
  22. Algoritmo de Bresenham .

Source: https://habr.com/ru/post/pt484656/


All Articles