Le simulateur du YASEP est différent de la plupart des autres simulateurs/débogueurs comme GDB. L'architecture du YASEP est prévue pour permettre d'exécuter plusieurs programmes simultanément (simultaneous multithreading) ce qui fait que le simulateur est modulaire, constitué d'une collection d'outils-fenêtres qui interagissent ensemble. Vous pouvez reconfigurer les liens entre ces outils, ou leur contenu, à tout moment, même lors d'une simulation. Vous pouvez même simuler plusieurs systèmes simultanément !
L'image ci-dessous montre une simulation comportant deux cœurs YASEP, deux fenêtres de code source et un framebuffer.
Au centre, la fenêtre appelée "Memory map" (Carte de la mémoire) représente à la fois un projet et le système informatique à simuler (avec sa configuration et ses ressources). Il peut y en avoir plusieurs, chacune gérant un espace d'adressage différent (du point de vue des cœurs CPU).
L'espace mémoire est rempli par des fenêtres d'édition de code (YASMed) et un/des framebuffers (d'autres outils sont prévus). Faites attention d'éviter que les zones mémoires se recouvrent (le comportement n'est pas défini sinon). Ces fenêtres peuvent être accédées par plus d'une carte mémoire, mais à la même adresse dans chaque espace (c'est un point à résoudre, la carte pourrait gérer l'offset mais ça complique les éditeurs de code).
Les espaces mémoires sont accédés par les cœurs CPU au travers de leur carte mémoire assignée. Vous pouvez créer et simuler autant de cœurs que votre navigateur peut supporter.
Vous pouvez créer et assembler un système à partir de n'importe quelle fenêtre proposant une zone de connexion, située dans leur coin supérieur droit.
Par exemple, vous venez de cliquer sur le code source d'un tutoriel ou dans la fenêtre Premier pas. Cela ouvre une fenêtre YASMed qui n'est pas connectée. Si aucune carte mémoire n'est ouverte, YASMed vous suggère d'en créer une en cliquant sur le bouton "Créer une nouvelle carte", sinon il propose une liste parmi laquelle vous pouvez sélectionner laquelle peut accéder à la fenêtre.
Le bouton "Créer une nouvelle carte" ouvre une nouvelle fenêtre, liée automatiquement à la fenêtre YASMed qui l'a appelée. Vous pouvez alors simuler le code en cliquant sur "Nouveau simulateur", qui ouvre à son tour une nouvelle fenêtre connectée à la carte.
Le processeur est initialisé et charge sa première instruction à l'adresse 0. Si le code source fournit cette adresse, vous verrez alors apparaître l'opcode correspondant dans la fenêtre YASim. Ce dernier place aussi un curseur sur la ligne correspondante de l'éditeur. Il peut même y avoir plus d'un CPU exécutant la même ligne :
Le simulateur du YASEP est conçu pour fournir une vision précise et exacte de chaque élément du système. Il n'est pas (encore) multithreadé et chaque processeur exécute un cycle l'un après l'autre. Chaque cœur conserve l'historique des dernières valeurs de chaque élément, ce qui prend de la place et pas mal de temps CPU réel, surtout pour raffraîchir l'affichage.
Le simulateur peut exécuter plusieurs centaines à plusieurs milliers d'instructions YASEP par seconde, réparties également entre chaque CPU simulé. Pour réduire le temps perdu à l'affichage, voici quelques recommandations :