Des polygones dans un autre monde: Atari ST

Il s'agit du troisième article d'une série sur le portage du jeu Another World. Il parlera d' astuces lorsque vous travaillez avec Atari ST . Il est recommandé de lire d'abord les articles précédents.


La naissance d'Atari ST a été, pour le moins, agitée. Tout commence comme dans un conte de fées, mais se termine par la guerre et les trahisons avec la participation d'Amiga Corp, Commodore, Atari et Atari Computer.




Série d'articles


  1. Polygones Another World .
  2. Polygones Another World: Amiga 500 .
  3. Polygones Another World: Atari ST.

Histoire d'ATARI ST


En 1983, Hi-Toro était une startup de Santa Clara développant une console de jeu appelée Lorraine. Avec un puissant 68 000 avec des capacités graphiques incroyables, c'était une merveille technologique, bien supérieure à tous ses concurrents. Hi-Toro, cependant, a manqué d'argent. Atari, alors géant du jeu vidéo, a investi 500 000 $ pour poursuivre le développement en échange du droit d'ajouter un clavier et de vendre la console comme ordinateur.


Loin de la Californie, en Pennsylvanie, la lutte pour le pouvoir à Commodore a conduit au départ du fondateur Jack Tramiel. Il a immédiatement fondé Tramel Technology, en train d'attirer les ingénieurs de Commodore. Inutile de dire que la séparation était loin d'être amicale.


Vers le milieu de 1984, ce fut au tour d'Atari de connaître des turbulences financières. Lorsque Jack Tramiel a manifesté son intérêt pour l'achat de la division informatique d'Atari, Commodore a vu une opportunité de s'opposer à son ancien PDG. Ils ont acheté Hi-Toro (qui à cette époque a été rebaptisée Amiga Corporation), et n'ont rendu à Atari que leur "crédit" [1] .


Tramiel a finalisé l'acquisition d'Atari Computers et a immédiatement poursuivi Amiga Corporation. Ce problème ne sera pas résolu avant mars 1987 [2] . Pendant ce temps, Atari ne disposait pas de nouvelles technologies qui permettraient de redevenir rentables [3] .


Pendant un certain temps, Jack Tramiel a envisagé d'acheter Genesis à Sega, qui recherchait un partenaire ayant une expérience en Amérique du Nord. Finalement, l'idée a été rejetée. Ce qui s'est passé ensuite, dit DadHacker [4] [5] . Jack n'a laissé que 900 des 10 000 employés d'Atari. Les autres ont participé à la marche de la mort dans le but de développer et de sortir une nouvelle voiture d'ici un an.


Étonnamment, ils l'ont fait. Atari ST a été lancé en juin 1985 et est entré sur le marché un mois plus tôt que l'Amiga 1000.



L'appareil a été bien accueilli par les utilisateurs. En novembre 1985, Jack Tramiel avait annoncé qu'Atari avait vendu 50 000 unités. Le prix était surprenant. Le 520ST s'est vendu 999 $ et l'Amiga 1000 1285.


Choisir parmi deux machines avec le même processeur et la même quantité de RAM, 300 $ supplémentaires ne valaient pas la peine. De nombreux consommateurs ont choisi ST.


En plus de l'avantage de prix principal, la voiture présente plusieurs avantages notables par rapport à ses concurrents. Le mode monochrome haute résolution 640x480 était idéal pour les programmeurs. Le MIDI intégré a été apprécié par les musiciens. Un petit détail qui pourrait faire la différence, le système d'exploitation (TOS) et le noyau étaient en fait en ROM. Il n'était pas nécessaire de démarrer à partir d'une disquette!


Atari ST a rapidement rassemblé un culte d'adeptes, en particulier en Europe. Les créateurs de la scène de démonstration essayaient de façon obsessionnelle de développer des méthodes de surbalayage [6] [7] [8] [9] pour supprimer les bordures de l'écran noir. Au final, ces tentatives ont réussi [10] .


Au cours de sa vie, de 1985 à 1993, Atari Computers a vendu 2 millions d'appareils [11] . Pour beaucoup de ceux qui ont survécu à cette époque, on se souvenait de la fameuse guerre d'Amiga contre Atari ST.




Atari st e


Du point de vue de l'infographie, de l'animation et des jeux vidéo, il n'y a pas eu de guerre en tant que telle. C'est même difficile d'appeler une bataille. Grâce à ses coprocesseurs Agnus et Denise, Amiga est nettement supérieur à Atari ST. Par exemple, travailler avec la mémoire d'un framebuffer Atari ST était pénible lorsque vous tentiez de déplacer un sprite sur l'écran.


Pour pallier ses lacunes, Atari Computers a mis à jour la gamme Atari ST en 1989 avec le lancement des 520 ST E et 1040 ST E. Parmi les améliorations: Genlock, couleurs 12 bits, audio PCM et, surtout, BLiTTER [12] . Ces innovations ont fait d'Atari ST une technologie pour rivaliser avec Amiga.


L'architecture


Les capacités de Blitter étaient inestimables pour les développeurs de jeux. Malheureusement, il est apparu trop tard. Atari ST avait une base énorme qui empêchait les développeurs de perdre du temps à améliorer leur jeu pour un petit nombre d'utilisateurs. Sans oublier que personne n'a osé sortir le jeu exclusivement sur ST E. Un autre monde ne fait pas exception, selon le développeur de la version Jaguar (qui a vu le code source d'Atari ST).


Another World était entièrement programmé pour fonctionner sur 68000. Les fonctionnalités ST E n'étaient pas du tout utilisées.


- Sébastien Briais



Veuillez noter que sur tous les Atari ST, il y a un contrôleur DMA, mais il ne peut transférer que d'une disquette / disque dur vers la RAM, ce qui n'a pas beaucoup aidé lors du développement de jeux. Il ne restait pas grand-chose pour les programmeurs. À savoir, le processeur Motorola 68000 avec une fréquence d'horloge de 8 MHz et 512 Ko de RAM.




Système vidéo


La puce GLUE, qui est responsable de la génération du signal vidéo, utilise 3 bits par canal (9 bits par pixel), ce qui donne 512 couleurs.



Remarque: c'est en manipulant Shifter, GLUE et MMU que le fabricant de démos a réussi à supprimer les bordures noires notoires de l'écran Atari. Les techniciens de surbalayage et de plein écran commutent le taux de rafraîchissement entre 50 Hz et 60 Hz, et passent également de hiRes à LowRes jusqu'à ce que le balayage de ligne soit terminé pour forcer GLUE à retarder les signaux VSYNC / HSYNC [13] !


Un autre monde sur Atari ST


Un autre monde sous Atari ST a été entièrement écrit par Eric Shayi en parallèle avec la version Amiga. Le processeur 68000, similaire à l'Amiga, a facilité le port car la plupart des machines virtuelles ASM pouvaient être réutilisées. Il y avait des différences dans la partie graphique, où trois modes sont disponibles. Haute résolution (640x400 2 couleurs), idéale pour la programmation, moyenne résolution (640x200 4 couleurs), ce qui n'est pas très intéressant dans ce contexte, et basse résolution (320x200 16 couleurs [14] ), idéale pour Another World.



Toutes les autorisations utilisent 32 Ko pour chaque framebuffer. Il n'y a pas de plans de battement comme l'Amiga mentionné dans le dernier article. En haute résolution, chaque bit correspond à un pixel. En basse résolution, l'indice de pixel est divisé en 4 bits, répartis sur 64 bits.



Petit enfer


Pour un jeu utilisant des sprites, une telle disposition de bas niveau était un problème. Essayez d'imaginer la tâche d'utiliser un masque / enregistrement avec une résolution d'un bit, lorsque la résolution du bus est d'un octet (8 bits). Imaginez maintenant comment un sprite franchit une limite d'octets, et la tâche se transforme en cauchemar [15] . La charge du processeur était si grande que les jeux n'utilisaient pas de masque / d'enregistrement et préféraient plutôt utiliser des sprites pré-tournés (un jeu pour chaque alignement de bits), ce qui, à l'honneur d'Atari ST, n'était pas un problème trop important, étant donné la généreuse quantité de RAM sur planche.


Fait intéressant, dans Another World, l'enfer des couches graphiques alternées se transforme en paradis quand il s'agit de dessiner de longues lignes de la même couleur. Voyons pourquoi.


REMPLIR et COPIER


Avec seulement un processeur pour effectuer FILL et COPY, cette tâche est effectuée de la manière la plus simple. Il n'y a pas d'astuce ici, mais la disposition non planaire du framebuffer permet à 68 000 personnes de «voyager». Avec un move.l 32 Ko, les opérations move.l 8000 (32 bits) font le travail dans les deux cas. La sortie enregistrée d'une partie de l'opération COPY sur le 68000th est la suivante.


  ... move.w #49,d0 ;50*160*4 = 32000 octets .copy_loop: rept 160 move.l (a1)+,(a0)+ endr dbra d0,.copy_loop ... 

Comme le timing de 68000 est très bien documenté [16] [17] , nous pouvons calculer avec précision le temps qu'il faut pour terminer l'opération COPY. Puisque move.l nécessite 20 cycles, le nombre total de cycles requis est de 20 * 160 * 50 = 160 000 cycles. À une vitesse de 8 000 000 cycles / s, la COPIE prend 20 ms.


La même idée pour FILL, sauf qu'au lieu de l'opérande «Registre d'adresses indirect avec post-incrémentation», le premier opérande de move.l est «Data direct», qui ne prend «que» 12 cycles. Cela donne un total de 12 ms pour 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 ... 

Remarque: vous pouvez facilement distinguer la version Atari ST de la version Amiga si vous regardez le deuxième écran de jeu.


Le joli scarabée trouvé dans la version Amiga a disparu sur l'Atari ST. En fait, il est absent dans tous les autres ports [18] , ce qui en fait une exclusivité Amiga pour une raison peu claire.




Résoudre le problème du rendu


Sans les modes «dessin au trait» et «remplissage de zone», le port sous Atari ST utilise le simple algorithme de Bresenham [22] pour suivre les bords du polygone. Avec deux bords et des lignes horizontales, les coordonnées de début et de fin de l'espace d'écran sont créées. 68 000 remplit alors l'espace entre eux [19] . En général, le principe de fonctionnement est similaire au blitter Amiga, sauf qu'ici tout se fait par programmation.


L'approche à première vue est très lente, mais la «vitesse de croisière» peut également être atteinte ici, en profitant de la disposition tissée. Si vous regardez attentivement, la plupart des cadres de Another World sont constitués de longues lignes horizontales de la même couleur. Cela permet au 68000 d'écrire des lignes dans un bloc de 16 pixels en utilisant l'instruction move.l nous avons examinée précédemment.


L'écran où Leicester rencontre son «sauveur» en est un bon exemple.



Ici, nous voyons les parties rouges des lignes qui ne peuvent pas être affichées dans des blocs de 16 pixels en raison de l'emplacement et de l'alignement du framebuffer. Ces pixels «lents» ne représentent que 23% du tampon d'image au bord des polygones. 77% du tampon d'image est rendu avec un enregistrement de bloc «rapide» de 16 pixels.




Résoudre le problème avec la palette


Le dernier problème à résoudre est que l'Atari ST a une faible profondeur de couleur. Alors qu'Amiga autorise 12 bits par couleur, AtariST ne peut en donner que 9.


La solution était de mettre le jeu avec les palettes Amiga et de laisser les 68000 se charger de la conversion de 12 bits en 9 bits avec un simple décalage de 1 bit (LRS) pour chaque canal au démarrage.


L'image finale semble un peu plus sombre que l'Amiga, mais la différence est à peine perceptible [20] .


En conclusion


Malgré les défauts évidents, Atari ST a réussi à lancer la version exacte de Another World. Malgré tout, le jeu ne doit pas dévier de la version Amiga. Le plus petit espace colorimétrique était à peine perceptible, et le moteur ne fonctionnait qu'un peu plus lentement [21] que sur Amiga (qui fonctionnait à près de 24 images par seconde).



Les références


  1. L'histoire d'Amiga: conçue à Atari, née à Commodore .
  2. Amiga Corporation .
  3. Wikipédia: Atari ST Origins .
  4. Dadhacker, L'Atari ST, partie 1 .
  5. Dadhacker, L'Atari ST, partie 2 .
  6. ST Magazine 51: «Les techniques de l'Overscan partie 1» par Shengan Short .
  7. ST Magazine 51: 'Les techniques de l'Overscan partie 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. Historique des démos en plein écran d'Atari ST .
  11. Atari ST Computer Sales and Marketshare: A Comparison .
  12. ST Magazine 70: «Le Blitter, animation tres grande vitesse» de Mathias Agopian .
  13. Atari Overscan Techniques .
  14. Graphiques 3D en temps réel pour l'Atari ST .
  15. Pourquoi les jeux Atari ST étaient plus lents que les versions Amiga .
  16. Déplacer les temps d'exécution des instructions .
  17. Jeu d'instructions du 68000 .
  18. Plaisirs ringards .
  19. Un autre code source mondial: Video :: fillPolygon .
  20. Nerdy Pleasures, 'ST a une palette légèrement plus sombre que l'Amiga.' .
  21. Nerdy Pleasures, «La version Atari ST fonctionne un peu plus lentement que l'Amiga» .
  22. Algorithme de Bresenham .

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


All Articles