Pourquoi les vieux jeux étaient-ils programmés en assembleur quand existaient des langages de plus haut niveau?
J'ai remarqué que la plupart, si pas tous les Nes /Atari, etc jeux ont été codées à l'assemblée, cependant, à ce moment, C, COBOL et FORTRAN existait qui je pense serait plus facile pour le code de droit? Alors pourquoi ont-ils choisi de l'assemblée au cours de ces disponibles un langage de haut niveau?
source d'informationauteur jmasterx | 2011-02-05
Vous devez vous connecter pour publier un commentaire.
Ces jeux 8-bits les processeurs et les mémoires, comme, 2 ko. Cette réponse devrait prendre plus de la moitié de la RAM.
Code compilé, il était hors de question. Même sur 8 bits PROCESSEUR avec la "grande" souvenirs, comme "64 KO" (whee!) le code compilé est difficile à utiliser; il n'a pas été vu régulièrement jusqu'à 16 bits microprocesseurs est apparu.
Aussi, le seul potentiellement utiles de la langue a été C et il n'avait pas encore envahi le monde. Il y avait peu ou pas de compilateurs C pour 8-bit micros de l'époque.
Mais C n'aurait pas aidé beaucoup. Ces jeux avaient horriblement cher hacks en eux que pratiquement nécessaires à la synchronisation des instructions spécifiques de boucles ... par exemple, un sprite est coordonnée pourrait dépendre de la date (dans la vidéo scan) de son registre de contrôle a été écrit. (Frisson...)
Maintenant, il y a était une belle interprété-bytecode langue autour de cette époque, ou peut-être un peu plus tard: Pascal UCSD en cours d'exécution sur l'UCSD P-System. Bien que je ne suis pas un grand fan de Pascal, il était en avance sur tout le reste pour ces premiers processeurs. Il ne rentrait pas sur un jeu, ou de courir suffisamment vite pour le jeu, cependant.
Performance, performance, performance. Les jeux ont toujours été tout au sujet d'obtenir les la plupart hors de la matériel. Même le meilleur, C, COBOL ou FORTRAN compilateurs aujourd'hui ne peut pas rivaliser avec habilement conçu à l'assemblée de code.
Comme DigitalRoss l'a souligné, il y avait aussi de graves contraintes de mémoire, et de l'assemblée était le seul outil qui a permis le contrôle de précision nécessaire.
La même chose s'applique aujourd'hui, bien que le vieux jours l'assembleur a été plus ou moins remplacé par C++. Même si les langages de programmation comme Python existent (qui sont très facile à utiliser), le faible niveau des langages de programmation sont encore préféré pour les applications les plus exigeantes.
N'avait pas d'importance.
De haute performance, le minimum de l'utilisation de la mémoire est essentielle.
Facile à code n'était pas pertinent.
Rappelez-vous, les premiers jeux ont eu une quantité microscopique de mémoire très, très lent processeurs qui n'ont pas les périphériques. Tout ça est connecté -- essentiellement, directement à la puce du PROCESSEUR.
Je suppose, il y avait un pourcentage bien plus important de programmeurs qui savaient tous les deux assembleur et ne pense pas deux fois sur la programmation en assembleur. Et même dans les IBM-PC et À jours des gens qui n'ont jamais vraiment programmé quelque chose, mais assembleur étaient encore là, et pourrait facilement programme des cercles autour de la C et Pascal programmeurs.
Pascal, et C était merveilleux (pour les ordinateurs de bureau) une fois qu'ils ont obtenu une prise de pied et vous pouvez vous permettre un compilateur, on était heureux d'être juste la programmation d'une nouvelle langue et n'avait jamais entendu parler d'un optimiseur, il vous suffit suppose le langage de haut niveau transformé en code machine de la même façon avec chaque compilateur. Vous avez encore facilement s'adapter à vos programmes sur une baie 5,25" lecteur de disquettes. Et avait beaucoup de 640K de rechange.
Je pense que nous avons besoin de ramener ou avoir plus de 4K, la programmation des concours. Écrire un jeu de la GBA ou NDS, mais le binaire, de données, de code, de tout, ne peut pas être plus grand que la 4K. Ou peut-être ré-inventer le gameplay des astéroïdes, des rochers, des navires, des méchants, missles, ne vous inquiétez pas au sujet de la vidéo pixels parce que, d'abord, il n'était pas, et la deuxième qui a été traitée par un second processeur (matériels, de l'état de la machine), il suffit de générer le vecteur des commandes de dessin. Il y a des gratuit 6502 compilateurs C là maintenant, et le p-code basé pascal compilateurs qu'il serait facile de faire fonctionner la sortie sur le 6502, et voir si vous pouvez obtenir le taux de trame jusqu'à temps réel à 1,5 mhz ou ce qui était en cours d'exécution. Et rentrer dans le bal. Je pense que l'exercice sera répondre à votre question. OU...tout simplement faire un moteur d'exécution de p-code interprète et voir si cela correspond. (standardpascal.org, regardez pour les p5 de compilateur).
Une poignée de Ko est comme un millier de lignes de code ou moins. Il n'y avait pas autant d'argent pour le programme, et l'assembleur n'est pas difficile du tout, certainement pas sur un 6502 ou d'autres systèmes similaires. Vous n'avez pas les caches et les mmus et de la virtualisation et multi core, du moins, pas de maux de tête que nous avons aujourd'hui. Vous avez eu la liberté de choisir ce que résistant que vous avez voulu, chaque sous-routine pourrait utiliser sa propre convention d'appel, vous n'avez pas jeter d'énormes quantités d'instructions de la jonglerie, des registres ou de la pile ou de la mémoire, de sorte que vous pourrait appeler des fonctions dans un façon standard. Vous aviez sans interruption et utilisé pour les temps de sondage et de gérer le matériel (vidéo, mises à jour régulièrement chronométré interrogation de boutons et d'autres entrées de l'utilisateur, de l'interrogation du trimestre fente du détecteur, alors même que le jeu est joué).
Astéroïdes qui ressemble à peu près 3000 lignes d'assembleur. Avec l'efficacité de la compilateurs maintenant, ou puis-je dirais que vous auriez besoin d'écrire tout le jeu en environ 500 lignes de code C pour les battre, de pascal à l'aide de p-code, je vais vous donner 100 lignes de code, ok 200 (pas de p-code, mais optimisé pour la cible, je vais vous donner plus de lignes de C).
L'Atari VCS (un.k.un 2600) n'ont même pas besoin de la mémoire pour un framebuffer pour la vidéo. Le programme avait pour générer les pixels seulement dans le temps ainsi que d'effectuer toutes les tâches de jeu. Bien sûr, pas beaucoup de pixels, mais pensez à la programmation de la tâche et de la taille limitée et de la vitesse de la rom. Pour quelque chose comme ça, vous commencez à recevoir du nombre d'instructions par pixel, et nous parlons d'un petit nombre. Haut niveau a compilé le code va s'exécuter dans des coupes et des poussées et ne va pas être assez lisse pour garantir les délais.
Si vous avez la chance de vous devez démonter certains de ces vieux jeu rom, très pédagogique, l'enseignement des séquences ont été souvent très élégant. Optimisé compilé de haut niveau code a des trucs cool, mais il n'est tout simplement pas la même.
Soi-disant mieux les langues et les compilateurs ne sont pas automatiquement vous faire une meilleure, plus rapide, plus efficace ou plus fiable. Tout comme une voiture de fantaisie ne fait pas de quelqu'un un meilleur pilote.
Compilateurs de retour alors n'étaient pas aussi bon que les compilateurs que nous avons maintenant. Par conséquent, nombreux sont ceux qui pensent, à tort ou à raison, qu'ils pouvaient optimiser le compilateur.
Bien que limitée de la mémoire et de la vitesse limitée ont été certainement un problème pour Atari 2600 jeux, le principal problème avec un langage de haut niveau a été un manque de contrôle sur le calendrier. Juste au sujet de tous les aspects du système qui participent au bon moment pour être traitées par le logiciel, y compris des choses comme la suppression verticale que, généralement, vous vous attendez le matériel pour le faire pour vous.
Le plus de changements que vous faites dans la position, la couleur ou des données d'une ligne de balayage la plus critique, le moment serait devenu. Dans certains cas, vous avez eu à effectuer une écriture dans un registre un certain nombre de cycles CPU après le début de la ligne. Si vous avez été 1 cycle du PROCESSEUR tôt ou 1 cycle du PROCESSEUR en retard, le résultat serait incorrect.
Une telle précision de la synchronisation n'est tout simplement pas pratique à l'aide d'un langage de haut-niveau.
Au moment où ils ont été développés, un langage de haut niveau n'étaient pas disponibles ou n'ont pas bien pour les plates-formes sur lesquelles ils ont à exécuter.
De la mémoire et de la vitesse ont toujours été d'une importance critique pour les jeux. Mon beau-frère a un système qui dépasse de loin le PC je lance mon serveurs virtuels, ainsi que de bureau. Il se plaint que le taux de rafraîchissement sur les jeux. Le code d'assemblée peut offrir la capacité à optimiser le code ne sont pas nécessairement disponibles à partir d'un vieux compilateur. Moderne optimisation des compilateurs peuvent faire des optimisations qui rendent le code plus rapide qu'à la main codé.
Les vieux jeux sont fortement appuyés sur la vitesse du PROCESSEUR pour le chronométrage. Ils sont mortelles pour fonctionner sur les Processeurs modernes qui exécuter plusieurs fois plus rapide. Un de la le retard méthodes a été de faire une boucle qui incrémentée ou décrémentée un contre un certain nombre de fois. (Ceux-ci peuvent obtenir optimisé par un compilateur.)