Marathon et l’accélération matérielle de la puce Valkyrie

Marathon est un titre plutôt populaire sur les Macintosh : c’était un FPS réussi, une alternative à Doom sur les Macintosh, et la trilogie (sortie sur Pippin ou plus récemment sur iPhone) avait un truc que je ne connaissais pas : une accélération matérielle sur certains Macintosh. Elle passe par la puce Valkyrie de certains modèles et permet un rendu très nettement plus rapide.

La puce en question est intégré dans les LC/Performa 580, les LC/Performa/Quadra 630 (à base de 68K), Power Macintosh/Performa 5200 et 6200 et Power Macintosh/Performa 5300 et 6300. Il y a aussi une évolution de la puce dans les Power Macintosh/Performa 5400 mais je ne sais pas si ça fonctionne avec le jeu.

La puce peut être vue comme ce qu’on nommerait un GPU en 2025, même si le mot n’existait pas. Elle permet notamment l’agrandissement (scaling) du 320 x 240 en 640 x 480, une fonction qui servait pour les cartes TV des modèles en question. Il y a aussi du double buffering, en schématisant la possibilité de créer une image dans une zone de la mémoire qui n’est pas affichée et ensuite de mettre cette image directement dans la zone affichée, sans devoir faire les transferts via le CPU. Il y a quelques explications dans ce sujet.

L’option d’accélération matérielle

De ce que j’ai compris, le seul jeu à profiter de la puce, c’est Marathon, et ce n’était pas documenté. Apple avait a priori donné les informations aux développeurs, et on trouve le nécessaire dans le code source de Marathon. Noglin a utilisé le code pour comprendre comment ça fonctionne et a proposé une démo pour certains Power Macintosh en 2024.

Tester avec Marathon

Pour tester, j’ai pris un Performa 630, ça permet de bien voir les gains. C’est un Macintosh à base de 68040 (33 MHz) et Marathon n’est pas spécialement fluide sans accélération. Le jeu est disponible sur Macintosh Garden et Bungie l’a offert il y a quelques années, donc vous trouverez un numéro de série sur le site. La version que j’ai récupérée est en version 1.2. Pour afficher le nombre d’images/s, il faut un clavier QWERTY (et Mac OS réglé pour l’utiliser) et taper shift + ? (vu dans les commentaires ici). Si vous avez un clavier francophone, c’est la touche juste à gauche du shift de droite (=).

Sans accélération, on a le choix entre low resolution (320 x 240) et high resolution (640 x 480)

En basse définition (et 256 couleurs), le jeu est lent, on peine à atteindre 10 images/s. En haute définition, c’est totalement injouable, avec à peine 3 images/s. Avec l’accélération activée, on passe en 16 bits (milliers de couleurs) et c’est très nettement plus fluide, en plus d’être (un peu) plus beau, avec entre 10 et 20 images/s. Ce n’est pas super fluide, mais pour un 68040 à 33 MHz, ce n’est pas si mal. Le compteur de FPS a visiblement un bug dans ce mode. On sent quand même que c’est du 320 x 240 upscalé, mais c’est tout de même nettement plus agréable. Je suppose que c’est plus fluide sur un Power Macintosh équipé de la même puce, mais je n’ai pas essayé.

En basse définition


En haute définition


Avec accélération

Un truc important, lié au fonctionnement du Mac : le jeu est rendu dans tous les cas en 640 x 480 au final. Dans le mode de base, l’agrandissement se fait via le CPU, dans le mode haute définition, il est rendu directement en 640 x 480 et dans le mode accéléré, c’est la puce Valkyrie qui s’en occupe, sans que le CPU intervienne. C’est notamment ça qui permet de gagner en performances. C’est la même chose pour le nombre de couleurs : on est en 8 bits de base (256 couleurs) mais en 16 bits (65 535 couleurs) avec la puce.

En 320 x 240


En 640 x 480, on voit le gain en finesse


Avec l’accélération, on voit bien que c’est du 320 x 240 agrandi

Sur le papier, il est possible d’implémenter ce genre d’accélération sur d’autres jeux, au hasard Doom. Parce que sur les 68K, Doom est particulièrement mal optimisé sur Macintosh.