La programmation d’un émulateur

Étant actuellement un enseignant en architecture des ordinateurs, et un enseignant de programmation et structures de données dans le passé. Je peux sereinement suggérer aux étudiants en informatique, que le meilleur exercice pour maitriser les 2 disciplines est de développer soi-même un émulateur. Alors c’est quoi un émulateur ? L’émulateur par définition est un logiciel qui va reproduire ou répliquer exactement le même comportement d’une machine donnée sur une machine hôte différente. Vous pouvez par exemple émuler une console du type Nintendo sur un PC de bureau. L’émulateur va se comporter exactement comme une console Nintendo le ferait réellement. Vous aurez ainsi l’équivalent d’une console installé sur un PC et vous pourrez jouer à cette console. 

Le fait de programmer un émulateur est très enrichissant pour un étudiant. Ça va premièrement, le faire investir en programmation sur un projet relativement de grande envergure, à la différence des petits exercices et travaux pratiques qu’il a l’habitude de faire dans lequel il doit planifier au préalable et construire une architecture logicielle qu’il doit suivre et soutenir tout au long du projet. Et deuxièmement, il doit bien maîtriser l’architecture de la machine à émuler. Il doit effectivement reproduire en logiciel les composantes hardwares de la machine. Ainsi, il va reconstruire le processeur avec toutes ses instructions et ses caractéristiques, il doit aussi reproduire les mémoires de la machine, le système vidéo, le système de son, les entrées/sorties… etc. Sur la vidéo en bas de la chaîne YouTube Computerphile, un émulateur pour la célèbre machine Atari 2600 est grossièrement décrit par le docteur Steve Bagley.

L’émulateur de machines

Il faut savoir que les consoles de jeux sont principalement les émulateurs les plus connus parmi les émulateurs de toutes les machines. Pour la simple raison que ça va permettre aux utilisateurs de jouer à ces machines sur leurs propres ordinateurs. Malheureusement, ces consoles de jeux sont parmi les machines les plus dures à émuler, en raison de la complexité de leur système graphique. Cependant, pour un étudiant avec un bon niveau en programmation et en architecture des ordinateurs, Il lui est possible de développer des émulateurs jusqu’à la 4e génération des consoles de jeux, même si que pour faire tourner de simple démo ou homebrew, incluant ainsi des consoles comme la Nintendo NES, SNES, Sega Mega Drive, Master System…etc. Ce qu’on appelle les consoles à 16 bits. À partir de la 5e génération, ou les consoles dites 32 bits, ça devient difficile pour un simple étudiant de développer tout seul un émulateur pour une machine de ce type, en raison que ces machines sont devenues beaucoup plus puissantes que les précédentes, principalement à cause de l’intégration de la technologie 3D. On peut compter parmi ces consoles, la Sony Playstation 1, La Sega Saturn, La Nintendo 64. Jusqu’aux dernières générations de consoles. 

Les machines virtuelles

L’utilisation des machines virtuelles devient de plus en plus fréquente en cause principalement des vertus que cette technologie dispose et aussi surtout de la puissance fulgurante des PC modernes. Le concept des machines virtuelles est assez simple, c’est tout simplement un logiciel qui permet de simuler où émuler une autre machine sur votre PC. Par exemple vous pouvez aisément installer Linux dans une machine virtuelle créée et émulée par votre système Windows. Ça veut dire en d’autres mots que vous pouvez créer une machine virtuellement à l’intérieur de votre PC. Bien sûr la machine virtuelle va utiliser beaucoup de ressources de votre machine actuelle, mais dans la plupart des cas ça vaut le coup d’installer une nouvelle machine à l’intérieur de votre machine.

Explication de la virtualisation

La vidéo haut et celle de la chaîne YouTube PowerCertAnimated, Je trouve que c’est une excellente vidéo qui permet d’exposer d’une façon concise le concept des machines virtuelles. En contrepartie la vidéo en bas de la chaîne YouTube ExplainingComputers est l’implémentation concrète par l’exemple de l’installation d’une distribution Linux sur une machine Windows en utilisant VirtualBox

Installation de Linux dans Windows

Simple simulateur physique d’un moteur à combustion

J’ai eu personnellement l’occasion dans le passé de jouer à quelques simulateurs de voiture, ces jeux prétendent l’implémentation d’une physique la plus proche possible de la physique réelle des voitures de course. Mais à ma connaissance, les parties internes de la voiture ne sont pas réellement simulées, mais plutôt décrites par des modèles mathématiques qui vont le plus possible approximer le comportement global de la physique d’une voiture. Ce qui est proposé dans cette vidéo est une autre approche, puisque les compartiments internes sont reproduits dans la simulation. En réalité, seul le moteur a été reproduit, mine de rien, c’est l’élément de loin le plus complexe et le plus influent dans la physique d’une voiture.

L’idée initiale du créateur de ce simulateur était de reproduire le son d’un moteur d’une manière procédurale pour qu’il soit le plus fidèle possible au son réel des engins à combustion. Mais clairement avec la démonstration sur la vidéo de la simulation physique, ça pourrait facilement trouver dans d’autres domaines d’utilisation. C’est vrai que la simulation physique ici n’est pas aussi pertinente qu’un simulateur s’exécutant sur un supercalculateur, avec une énorme équipe de développeurs et des millions de lignes de code, mais ça reste un simulateur relativement précis et rigoureux, puisque selon le créateur, ça a abouti à plusieurs publications scientifiques. Et surtout son code reste relativement léger, ce qui lui permet probablement la possibilité d’être intégré dans des applications grand public comme, les jeux de course, les simulateurs de voitures sur PC, simulateur d’apprentissage mécanique…etc. Vous pouvez tester le simulateur et voir son code source sur le dépôt GitHub du développeur.

Simulateur physique d’un moteur à combustion

Jeux vidéo sur le thème des Systèmes embarqués

Les ingénieurs en systèmes embarqués sont les ingénieurs responsables de la conception et la réalisation de la quasi-totalité des appareils électroniques modernes, comme par exemple, les appareils d’électroménager, incluant la machine à laver, l’aspirateur, le réfrigérateur, le micro-onde…etc. Ou encore le consommable électronique, comme les smartphones, les caméscopes, les téléviseurs, les consoles de jeux…etc. Ou bien encore l’électronique enfouie à l’intérieur des machines, comme l’électronique dans les voitures, les véhicules de transport, dans des machines industrielles…etc. Ou l’électronique des équipements de bureau, comme les imprimantes, les scanners, fax, photocopieuses…etc. Il y a beaucoup d’exemples, c’est quasiment tous les appareils comportant de l’électronique, mis à part les PCs, les ordinateurs et les machines informatiques. Essayer de comprendre la définition des systèmes embarqués peut mener à confusion, puisque dans les exemples ci-dessus c’est l’électronicien qui doit normalement réaliser la partie électronique de la machine, mais l’électronique des appareils moderne a beaucoup changé en comparaison avec la pure électronique d’il y a 20 ans, dans les systèmes embarqués modernes, l’électronique repose sur un processeur ou un microcontrôleur que l’ingénieur non seulement doit le concevoir électroniquement mais aussi de pouvoir le programmer, en ajoutant à cela des connaissances en programmation et en informatique pour ce dernier. La vidéo en bas est une petite présentation du jeu.

Présentation de Shenzhen I/O .

Le jeu en question s’appelle Shenzhen I/O, en référence à la ville en Chine de Shenzhen, et comme décrit dans Wikipédia, c’est la métropole pilier du high-tech et des semi-conducteurs de la Chine, c’est l’équivalente et la concurrente de la Silicon valley au États Unis. Le jeu fait la simulation d’un ingénieur dans un future proche qui immigre vers Shenzhen, pour travailler dans la conception d’appareils électroniques. Le plus intéressant dans le jeu c’est que le joueur aura comme principale tâche la résolution de puzzles sous format de construction de circuits électroniques, et de faire leurs programmations en langage assembleur, il a aussi la possibilité d’utiliser les datasheets et l’oscilloscope. Les circuits sont simplistes et la programmation en assembleur est rudimentaire, mais les concepts utilisés sont réels directement inspirés de systèmes authentiques, et ce qui m’a encore le plus surpris c’est que j’ai trouvé des travaux de recherche scientifique sur ce jeu, c’est considéré comme une nouvelle forme d’apprentissage des technologies modernes en utilisant les jeux vidéo. Le lien du Shenzhen I/O est par ici pour plus d’informations. Il y a aussi en bas la vidéo d’un joueur qui a réussi à crée le jeu de Tetris sur le simulateur de Shenzhen I/O.

Tetris sur Shenzhen I/O

Simulateur de vol Flight Simulator

Contrairement à ce que peuvent laisser penser quelques écritures dans les magazines et blogs de jeux vidéo, Flight Simulateur n’est pas un jeux vidéo à proprement dit, mais plutôt un simulateur de vol très réaliste, simulant le plus fidèlement possible le pilotage d’avions réels avec tout ce qu’un avion peut comporter comme commandes et comportements, incluant le volant de contrôle, les leviers de gaz, les pédales, un aperçu réaliste sur le cockpit avec une vue sur les contrôles de navigation, comme l’altitude, la pression atmosphérique, la vitesse du vent, même avec une simulation de la communication avec les tours de contrôle…etc.

En fait, Flight Simulateur est une licence de Microsoft très très ancienne, du temps de MS-DOS en vrai, cependant il est dans cet article de parler de la dernière version de 2020, appelée simplement aussi Flight Simulator. La principale innovation de cette version qui nous intéresse réellement, c’est que pour la première fois dans l’histoire, Microsoft a réussi à faire une modélisation totale de la planète terre en 3d avec une échelle réelle de 1:1. Toute la planète est pour la première fois modélisée avec ses villes, ses océans, ses montagnes, tous ses paysages…etc, ça vient de détrôner Google Earth de Google jusque-là étant la représentation la plus fidèle de la terre, avec une couverture globale d’images satellites de celle-ci. Le simulateur a poussé encore le réalisme plus loin en ajoutant la possibilité de représenter en temps réel le fuseau horaire de l’endroit où on se trouve et simuler le jour et la nuit et les conditions météorologiques réelles de l’endroit. Les images photoréalistes en bas donnent un aperçu sur ce que l’application est capable de produire. Les images ne sont pas des images de synthèse mais elles sont rendues en temps réel par la carte graphique.

Techniquement parlant l’exploit n’était pas facile, modéliser la terre en 3d avait demandé à Microsoft beaucoup de ressources. Pour faire une modélisation 3d en manuelle en utilisant seulement les ressources humaines financièrement c’est pharamineux, ce qui a poussé Microsoft à s’appuyer grandement sur l’intelligence artificielle. Effectivement à l’aide de ses serveurs Azure cloud services pour les ressources en calculs, ajoutant à cela ses images satellites de Bing map (le concurrent de Google Earth), et mettant des opérateurs humains pour superviser l’intelligence artificielle, tout ça a permis sur une grande échelle à réaliser cet exploit. Néanmoins beaucoup de travail reste à faire et beaucoup de zones de la terre ne sont pas encore parfaitement modélisées, mais d’après Microsoft des équipes dédiées pour cela continuent le travail pour encore pas mal de temps, peut-être pour des années pour réussir la modélisation à 100% de la terre, néanmoins ça reste une première mondiale. La vidéo en bas donne un aperçu sur le fonctionnement du simulateur.

Flight Simulator vs reality