{"id":634,"date":"2023-03-22T14:00:29","date_gmt":"2023-03-22T12:00:29","guid":{"rendered":"https:\/\/mo5.com\/micral\/?p=634"},"modified":"2023-03-23T11:05:00","modified_gmt":"2023-03-23T09:05:00","slug":"les-debuts-dun-emulateur","status":"publish","type":"post","link":"http:\/\/mo5.com\/fr\/les-debuts-dun-emulateur\/","title":{"rendered":"Les d\u00e9buts d&#8217;un \u00e9mulateur"},"content":{"rendered":"<p><em>Par Sylvain Glaize.<\/em><\/p>\n<p>Retournons un peu en arri\u00e8re. D\u00e8s nos premi\u00e8res discussions sur le projet, il y avait l&#8217;id\u00e9e de cr\u00e9ation d&#8217;un simulateur de Micral N. Et cela pour deux raisons principales.<br \/>\nLa premi\u00e8re est, \u00e0 terme, d&#8217;offrir \u00e0 chacun la possibilit\u00e9 de manipuler virtuellement cette machine rare. La seconde, de pouvoir \u00e9tudier une machine que nous ne connaissions pas encore et dont nous ne savions pas si notre exemplaire \u00e9tait fonctionnel ni m\u00eame complet.<\/p>\n<p>Avoir un simulateur, ou un \u00e9mulateur peu importe le nom qu&#8217;on lui donne, c&#8217;est pouvoir travailler sur un replica d&#8217;une machine pr\u00e9cieuse, sans risque de l&#8217;endommager.<br \/>\nCela permet d&#8217;avancer en parall\u00e8le entre la machine r\u00e9elle et son double.<\/p>\n<p>Plus tard, apr\u00e8s avoir \u00e9tudi\u00e9 la composition physique d\u00e9taill\u00e9e de ce Micral N, l&#8217;int\u00e9r\u00eat du simulateur sera valid\u00e9. En effet, il nous manque les c\u00e2bles de branchements entre certaines cartes, il va donc falloir les reconstruire. Et pour cela, il nous faut comprendre exactement comment les cartes communiquent entre elles.<\/p>\n<h1>Simuler le 8008<\/h1>\n<p>Simuler un processeur peut se faire \u00e0 plusieurs niveaux. Tout en bas, dans le d\u00e9tail, on peut utiliser un FPGA pour reproduire sa structure. Beaucoup plus haut, on peut simuler les changements d&#8217;\u00e9tats d\u00fb \u00e0 l&#8217;ex\u00e9cution de chaque instruction machine. C&#8217;est sur un niveau interm\u00e9diaire que je pars : une simulation des changements d&#8217;\u00e9tats apr\u00e8s chaque \u00ab state \u00bb (\u00e9tat) du processeur.<\/p>\n<p>C&#8217;est une mani\u00e8re de simuler les signaux du processeur assez finement et d&#8217;en comprendre le fonctionnement d\u00e9taill\u00e9. La documentation officielle du 8008 aide en cela qu&#8217;elle contient un tableau de ces \u00e9tats et des op\u00e9rations \u00e9l\u00e9mentaires effectu\u00e9es par le processeur \u00e0 chacun de ces \u00e9tats.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"195\" class=\"aligncenter size-large wp-image-20143\" title=\"Extrait Datasheet 8008\" src=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/ExtraitDatasheet8008-1024x195.png\" alt=\"Extrait Datasheet i8008\" srcset=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/ExtraitDatasheet8008-1024x195.png 1024w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/ExtraitDatasheet8008-300x57.png 300w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/ExtraitDatasheet8008-768x146.png 768w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/ExtraitDatasheet8008-958x182.png 958w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/ExtraitDatasheet8008.png 1510w\"  sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Et cela se traduit assez naturellement sous forme de donn\u00e9es d\u00e9crivant le fonctionnement du processeur, \u00e9tape par \u00e9tape.<\/p>\n<p><em><img loading=\"lazy\" decoding=\"async\" width=\"753\" height=\"334\" class=\"aligncenter size-full wp-image-20146\" title=\"Code d'instructions \u00c9mulateur\" src=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/MicralN-Instructions-Emulateur.png\" alt=\"Code d'instructions \u00c9mulateur\" srcset=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/MicralN-Instructions-Emulateur.png 753w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/MicralN-Instructions-Emulateur-300x133.png 300w\"  sizes=\"(max-width: 753px) 100vw, 753px\" \/><\/em><\/p>\n<p>L&#8217;ex\u00e9cution du simulateur est cadenc\u00e9e par un ordonnanceur qui indique \u00e0 chaque changement d&#8217;\u00e9tat du syst\u00e8me quels sont les composants simul\u00e9s qui doivent en \u00eatre avertis. Si ce composant provoque \u00e0 son tour un changement d&#8217;\u00e9tat du syst\u00e8me, il indique \u00e0 l&#8217;ordonnanceur \u00e0 quel moment ce changement se produira.<\/p>\n<p>Ici encore, avec une bonne connaissance du syst\u00e8me, il serait plus simple d&#8217;avoir un ordonnanceur fixe qui sait qui parle \u00e0 quoi et qui r\u00e9agit \u00e0 quoi. Ne connaissant pas le syst\u00e8me, une architecture o\u00f9 chaque composant dialogue avec l&#8217;ordonnanceur permet d&#8217;\u00eatre flexible, au prix d&#8217;un certaine lenteur. Mais pour un processeur qui tourne \u00e0 500 kHz, \u00e7a passe ; m\u00eame sur un Raspberry Pi 4.<\/p>\n<h1>L&#8217;enrobage<\/h1>\n<p>Pour lancer l&#8217;\u00e9mulateur, deux \u00ab enrobages \u00bb sont pr\u00e9vus.<\/p>\n<p>Le premier enrobage est un mode sans interaction direct, mais que l&#8217;on peut imaginer ouvrir un port s\u00e9rie ou bien s&#8217;interfacer avec BlinkenBone (http:\/\/retrocmp.com\/projects\/blinkenbone), cette architecture qui permet une interaction avec des panneaux de contr\u00f4le lumineux, r\u00e9pliques ou r\u00e9els.<\/p>\n<p>Le second enrobage est un mode interactif avec de nombreuses fen\u00eatres, pour visualiser l&#8217;\u00e9tat de la machine, le contenu de sa m\u00e9moire et reproduire le panneau de contr\u00f4le en fa\u00e7ade. C&#8217;est principalement celui-l\u00e0 qui sera utilis\u00e9 pendant toute la recherche. Cette version utilise l&#8217;incontournable biblioth\u00e8que Dear ImGui (https:\/\/github.com\/ocornut\/imgui) pour la partie graphique.<\/p>\n<p>Le simulateur est architectur\u00e9 de mani\u00e8re \u00e0 pouvoir imaginer d&#8217;autres enrobages plus tard. Il est tout \u00e0 fait envisageable et envisag\u00e9 d&#8217;avoir une version utilisateur simplifi\u00e9e afin de faire d\u00e9couvrir la machine. Sur le Web, par exemple, avec des scenarii et des explications de fonctionnement. Mais n&#8217;allons pas trop vite.<\/p>\n<p>Voici un des premiers \u00e9crans du programme :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"620\" class=\"aligncenter size-large wp-image-20148\" title=\"Capture d'\u00e9cran de l'\u00e9mulateur Micral N\" src=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-1024x620.png\" alt=\"Capture d'\u00e9cran de l'\u00e9mulateur Micral N\" srcset=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-1024x620.png 1024w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-300x182.png 300w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-768x465.png 768w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-958x580.png 958w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur.png 1502w\"  sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h1>Reproduire une carte<\/h1>\n<p>Reproduire une carte, c&#8217;est d\u00e9j\u00e0 la comprendre. Pour base, il y a la documentation. Mais la documentation que nous avons ne couvre pas l\u2019int\u00e9gralit\u00e9 des cartes de la configuration de ce Micral N. Et elle en couvre d&#8217;autres que nous n&#8217;avons pas. Autre vecteur de compr\u00e9hension : le fonctionnement du Pluribus. Ce bus est passif, il ne fait que transmettre des informations \u00e9lectriques aux cartes (et leur amener l&#8217;\u00e9nergie \u00e9lectrique n\u00e9cessaire). Cependant, m\u00eame en \u00e9tant passif, le Pluribus d\u00e9crit une interface : un ensemble de r\u00e8gles et contraintes sur les signaux que les cartes doivent respecter. Et c&#8217;est une information pr\u00e9cieuse.<\/p>\n<p>Ainsi, on connait les diff\u00e9rents moment importants du syst\u00e8me. Le moment de la demande d&#8217;une donn\u00e9e de la part de la carte processeur et le moment o\u00f9 cette donn\u00e9e arrive par exemple. On peut \u00eatre certain que les cartes respectent ces contrats.<\/p>\n<p>Un autre vecteur de compr\u00e9hension sont les cartes physiques elles-m\u00eame. C&#8217;est assez fastidieux mais gr\u00e2ce \u00e0 des scans de cartes que nous avons faits et en suivant visuellement les pistes reliant les composants, on peut affiner l&#8217;id\u00e9e que l&#8217;on se fait du fonctionnement de la carte. Fastidieux, mais pas impossible. Les cartes ne comportent que deux couches, une en surface de chaque c\u00f4t\u00e9 de la carte.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-20150 size-medium\" title=\"Scan Carte Processeur Micral N\" src=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/Scan-Carte-Processeur-Micral-N-300x233.jpeg\" alt=\"Scan Carte Processeur Micral N\" width=\"300\" height=\"233\" srcset=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/Scan-Carte-Processeur-Micral-N-300x233.jpeg 300w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/Scan-Carte-Processeur-Micral-N-1024x797.jpeg 1024w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/Scan-Carte-Processeur-Micral-N-768x598.jpeg 768w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/Scan-Carte-Processeur-Micral-N-958x745.jpeg 958w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/Scan-Carte-Processeur-Micral-N.jpeg 1032w\"  sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Le dernier grand vecteur de compr\u00e9hension, et pas des moindres, est le contenu des deux ROMs pr\u00e9sentes dans le syst\u00e8me, sujet d&#8217;un article pr\u00e9c\u00e9dent. Ces deux ROMs sont aussi des \u00e9l\u00e9ments fonctionnels du syst\u00e8me. Ainsi, leur ex\u00e9cution va permettre de valider le bon d\u00e9roulement des op\u00e9rations.<\/p>\n<p>Quand le mod\u00e8le mental de la carte atteint un certain niveau qui semble fonctionnel, il est temps d&#8217;en impl\u00e9menter une premi\u00e8re version dans le syst\u00e8me. De cette version, on tire des enseignements qui font parfois reconsid\u00e9rer les th\u00e9ories \u00e9mises. Et petit \u00e0 petit, en recoupant tous ces vecteurs, un mod\u00e8le fonctionnel apparait.<\/p>\n<p>Il y a encore beaucoup \u00e0 faire \u00e0 ce niveau-l\u00e0 de l&#8217;analyse, et nous reviendrons dans un futur article sur la suite de la construction du programme de simulation.<\/p>\n<p>N&#8217;oubliez pas de participer \u00e0 la campagne pour soutenir nos travaux ! <a href=\"https:\/\/micral.mo5.com\">https:\/\/micral.mo5.com<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Par Sylvain Glaize. Retournons un peu en arri\u00e8re. D\u00e8s nos premi\u00e8res discussions sur le projet, il y avait l&#8217;id\u00e9e de cr\u00e9ation d&#8217;un simulateur de Micral N. Et cela pour deux raisons principales. La premi\u00e8re est, \u00e0 terme, d&#8217;offrir \u00e0 chacun la possibilit\u00e9 de manipuler virtuellement cette machine rare. La seconde, de pouvoir \u00e9tudier une machine que nous ne connaissions pas encore et dont nous ne savions pas si notre exemplaire \u00e9tait fonctionnel ni m\u00eame complet. Avoir un simulateur, ou un \u00e9mulateur peu importe le nom qu&#8217;on lui donne, c&#8217;est pouvoir travailler sur un replica d&#8217;une machine pr\u00e9cieuse, sans risque de l&#8217;endommager. Cela permet d&#8217;avancer en parall\u00e8le entre la machine r\u00e9elle et son double. Plus tard, apr\u00e8s avoir \u00e9tudi\u00e9 la composition physique d\u00e9taill\u00e9e de ce Micral N, l&#8217;int\u00e9r\u00eat du simulateur sera valid\u00e9. En effet, il nous manque les c\u00e2bles de branchements entre certaines cartes, il va donc falloir les reconstruire. Et pour cela, il nous faut comprendre exactement comment les cartes communiquent entre elles. Simuler le 8008 Simuler un processeur peut se faire \u00e0 plusieurs niveaux. Tout en bas, dans le d\u00e9tail, on peut utiliser un FPGA pour reproduire sa structure. Beaucoup plus haut, on peut simuler les changements d&#8217;\u00e9tats d\u00fb \u00e0 l&#8217;ex\u00e9cution de chaque instruction machine. C&#8217;est sur un niveau interm\u00e9diaire que je pars : une simulation des changements d&#8217;\u00e9tats apr\u00e8s chaque \u00ab state \u00bb (\u00e9tat) du processeur. C&#8217;est une mani\u00e8re de simuler les signaux du processeur assez finement et d&#8217;en comprendre le fonctionnement d\u00e9taill\u00e9. La documentation officielle du 8008 aide en cela qu&#8217;elle contient un tableau de ces \u00e9tats et des op\u00e9rations \u00e9l\u00e9mentaires effectu\u00e9es par le processeur \u00e0 chacun de ces \u00e9tats. Et cela se traduit assez naturellement sous forme de donn\u00e9es d\u00e9crivant le fonctionnement du processeur, \u00e9tape par \u00e9tape. L&#8217;ex\u00e9cution du simulateur est cadenc\u00e9e par un ordonnanceur qui indique \u00e0 chaque changement d&#8217;\u00e9tat du syst\u00e8me quels sont les composants simul\u00e9s qui doivent en \u00eatre avertis. Si ce composant provoque \u00e0 son tour un changement d&#8217;\u00e9tat du syst\u00e8me, il indique \u00e0 l&#8217;ordonnanceur \u00e0 quel moment ce changement se produira. Ici encore, avec une bonne connaissance du syst\u00e8me, il serait plus simple d&#8217;avoir un ordonnanceur fixe qui sait qui parle \u00e0 quoi et qui r\u00e9agit \u00e0 quoi. Ne connaissant pas le syst\u00e8me, une architecture o\u00f9 chaque composant dialogue avec l&#8217;ordonnanceur permet d&#8217;\u00eatre flexible, au prix d&#8217;un certaine lenteur. Mais pour un processeur qui tourne \u00e0 500 kHz, \u00e7a passe ; m\u00eame sur un Raspberry Pi 4. L&#8217;enrobage Pour lancer l&#8217;\u00e9mulateur, deux \u00ab enrobages \u00bb sont pr\u00e9vus. Le premier enrobage est un mode sans interaction direct, mais que l&#8217;on peut imaginer ouvrir un port s\u00e9rie ou bien s&#8217;interfacer avec BlinkenBone (http:\/\/retrocmp.com\/projects\/blinkenbone), cette architecture qui permet une interaction avec des panneaux de contr\u00f4le lumineux, r\u00e9pliques ou r\u00e9els. Le second enrobage est un mode interactif avec de nombreuses fen\u00eatres, pour visualiser l&#8217;\u00e9tat de la machine, le contenu de sa m\u00e9moire et reproduire le panneau de contr\u00f4le en fa\u00e7ade. C&#8217;est principalement celui-l\u00e0 qui sera utilis\u00e9 pendant toute la recherche. Cette version utilise l&#8217;incontournable biblioth\u00e8que Dear ImGui (https:\/\/github.com\/ocornut\/imgui) pour la partie graphique. Le simulateur est architectur\u00e9 de mani\u00e8re \u00e0 pouvoir imaginer d&#8217;autres enrobages plus tard. [&hellip;]<\/p>\n","protected":false},"author":329,"featured_media":20351,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"give_campaign_id":0,"footnotes":""},"categories":[1485,1502],"tags":[],"class_list":["post-634","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-micral","category-programmation"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Les d\u00e9buts d&#039;un \u00e9mulateur - MO5.COM<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mo5.com\/fr\/les-debuts-dun-emulateur\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Les d\u00e9buts d&#039;un \u00e9mulateur - MO5.COM\" \/>\n<meta property=\"og:description\" content=\"Par Sylvain Glaize. Retournons un peu en arri\u00e8re. D\u00e8s nos premi\u00e8res discussions sur le projet, il y avait l&#8217;id\u00e9e de cr\u00e9ation d&#8217;un simulateur de Micral N. Et cela pour deux raisons principales. La premi\u00e8re est, \u00e0 terme, d&#8217;offrir \u00e0 chacun la possibilit\u00e9 de manipuler virtuellement cette machine rare. La seconde, de pouvoir \u00e9tudier une machine que nous ne connaissions pas encore et dont nous ne savions pas si notre exemplaire \u00e9tait fonctionnel ni m\u00eame complet. Avoir un simulateur, ou un \u00e9mulateur peu importe le nom qu&#8217;on lui donne, c&#8217;est pouvoir travailler sur un replica d&#8217;une machine pr\u00e9cieuse, sans risque de l&#8217;endommager. Cela permet d&#8217;avancer en parall\u00e8le entre la machine r\u00e9elle et son double. Plus tard, apr\u00e8s avoir \u00e9tudi\u00e9 la composition physique d\u00e9taill\u00e9e de ce Micral N, l&#8217;int\u00e9r\u00eat du simulateur sera valid\u00e9. En effet, il nous manque les c\u00e2bles de branchements entre certaines cartes, il va donc falloir les reconstruire. Et pour cela, il nous faut comprendre exactement comment les cartes communiquent entre elles. Simuler le 8008 Simuler un processeur peut se faire \u00e0 plusieurs niveaux. Tout en bas, dans le d\u00e9tail, on peut utiliser un FPGA pour reproduire sa structure. Beaucoup plus haut, on peut simuler les changements d&#8217;\u00e9tats d\u00fb \u00e0 l&#8217;ex\u00e9cution de chaque instruction machine. C&#8217;est sur un niveau interm\u00e9diaire que je pars : une simulation des changements d&#8217;\u00e9tats apr\u00e8s chaque \u00ab state \u00bb (\u00e9tat) du processeur. C&#8217;est une mani\u00e8re de simuler les signaux du processeur assez finement et d&#8217;en comprendre le fonctionnement d\u00e9taill\u00e9. La documentation officielle du 8008 aide en cela qu&#8217;elle contient un tableau de ces \u00e9tats et des op\u00e9rations \u00e9l\u00e9mentaires effectu\u00e9es par le processeur \u00e0 chacun de ces \u00e9tats. Et cela se traduit assez naturellement sous forme de donn\u00e9es d\u00e9crivant le fonctionnement du processeur, \u00e9tape par \u00e9tape. L&#8217;ex\u00e9cution du simulateur est cadenc\u00e9e par un ordonnanceur qui indique \u00e0 chaque changement d&#8217;\u00e9tat du syst\u00e8me quels sont les composants simul\u00e9s qui doivent en \u00eatre avertis. Si ce composant provoque \u00e0 son tour un changement d&#8217;\u00e9tat du syst\u00e8me, il indique \u00e0 l&#8217;ordonnanceur \u00e0 quel moment ce changement se produira. Ici encore, avec une bonne connaissance du syst\u00e8me, il serait plus simple d&#8217;avoir un ordonnanceur fixe qui sait qui parle \u00e0 quoi et qui r\u00e9agit \u00e0 quoi. Ne connaissant pas le syst\u00e8me, une architecture o\u00f9 chaque composant dialogue avec l&#8217;ordonnanceur permet d&#8217;\u00eatre flexible, au prix d&#8217;un certaine lenteur. Mais pour un processeur qui tourne \u00e0 500 kHz, \u00e7a passe ; m\u00eame sur un Raspberry Pi 4. L&#8217;enrobage Pour lancer l&#8217;\u00e9mulateur, deux \u00ab enrobages \u00bb sont pr\u00e9vus. Le premier enrobage est un mode sans interaction direct, mais que l&#8217;on peut imaginer ouvrir un port s\u00e9rie ou bien s&#8217;interfacer avec BlinkenBone (http:\/\/retrocmp.com\/projects\/blinkenbone), cette architecture qui permet une interaction avec des panneaux de contr\u00f4le lumineux, r\u00e9pliques ou r\u00e9els. Le second enrobage est un mode interactif avec de nombreuses fen\u00eatres, pour visualiser l&#8217;\u00e9tat de la machine, le contenu de sa m\u00e9moire et reproduire le panneau de contr\u00f4le en fa\u00e7ade. C&#8217;est principalement celui-l\u00e0 qui sera utilis\u00e9 pendant toute la recherche. Cette version utilise l&#8217;incontournable biblioth\u00e8que Dear ImGui (https:\/\/github.com\/ocornut\/imgui) pour la partie graphique. Le simulateur est architectur\u00e9 de mani\u00e8re \u00e0 pouvoir imaginer d&#8217;autres enrobages plus tard. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mo5.com\/fr\/les-debuts-dun-emulateur\/\" \/>\n<meta property=\"og:site_name\" content=\"MO5.COM\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/pages\/Association-MO5COM\/9540357570\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-22T12:00:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-23T09:05:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-1024x620-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"620\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Sylvain Glaize\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@assomo5\" \/>\n<meta name=\"twitter:site\" content=\"@assomo5\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sylvain Glaize\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/mo5.com\\\/les-debuts-dun-emulateur\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/les-debuts-dun-emulateur\\\/\"},\"author\":{\"name\":\"Sylvain Glaize\",\"@id\":\"https:\\\/\\\/mo5.com\\\/#\\\/schema\\\/person\\\/e2593639b2e77eace001e56b26086749\"},\"headline\":\"Les d\u00e9buts d&#8217;un \u00e9mulateur\",\"datePublished\":\"2023-03-22T12:00:29+00:00\",\"dateModified\":\"2023-03-23T09:05:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/les-debuts-dun-emulateur\\\/\"},\"wordCount\":1032,\"publisher\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/les-debuts-dun-emulateur\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/20210218-Capture-Ecran-Emulateur-1024x620-1.png\",\"articleSection\":[\"Micral\",\"Programmation\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mo5.com\\\/les-debuts-dun-emulateur\\\/\",\"url\":\"https:\\\/\\\/mo5.com\\\/les-debuts-dun-emulateur\\\/\",\"name\":\"Les d\u00e9buts d'un \u00e9mulateur - MO5.COM\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/les-debuts-dun-emulateur\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/les-debuts-dun-emulateur\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/20210218-Capture-Ecran-Emulateur-1024x620-1.png\",\"datePublished\":\"2023-03-22T12:00:29+00:00\",\"dateModified\":\"2023-03-23T09:05:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/les-debuts-dun-emulateur\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mo5.com\\\/les-debuts-dun-emulateur\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/mo5.com\\\/les-debuts-dun-emulateur\\\/#primaryimage\",\"url\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/20210218-Capture-Ecran-Emulateur-1024x620-1.png\",\"contentUrl\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/20210218-Capture-Ecran-Emulateur-1024x620-1.png\",\"width\":1024,\"height\":620,\"caption\":\"20210218 Capture Ecran Emulateur 1024x620 1\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mo5.com\\\/les-debuts-dun-emulateur\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/mo5.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Les d\u00e9buts d&#8217;un \u00e9mulateur\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mo5.com\\\/#website\",\"url\":\"https:\\\/\\\/mo5.com\\\/\",\"name\":\"MO5.COM\",\"description\":\"Pr\u00e9server, explorer, rejouer\",\"publisher\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/mo5.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mo5.com\\\/#organization\",\"name\":\"Association MO5.COM\",\"url\":\"https:\\\/\\\/mo5.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/mo5.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/Logo_MO5_A_Colo_Texte_Bleu-e1697059504554.png\",\"contentUrl\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/Logo_MO5_A_Colo_Texte_Bleu-e1697059504554.png\",\"width\":2094,\"height\":559,\"caption\":\"Association MO5.COM\"},\"image\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/pages\\\/Association-MO5COM\\\/9540357570\",\"https:\\\/\\\/x.com\\\/assomo5\",\"http:\\\/\\\/www.instagram.com\\\/assomo5\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCRncMsBo89C9u_8gpWnsOVw\\\/featured\",\"https:\\\/\\\/bsky.app\\\/profile\\\/assomo5.bsky.social\",\"https:\\\/\\\/twitch.tv\\\/mo5assoretro\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mo5.com\\\/#\\\/schema\\\/person\\\/e2593639b2e77eace001e56b26086749\",\"name\":\"Sylvain Glaize\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c57fffe6046f79130765edc0cc15c31865aef60892197deca86f5c61d3f2261b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c57fffe6046f79130765edc0cc15c31865aef60892197deca86f5c61d3f2261b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c57fffe6046f79130765edc0cc15c31865aef60892197deca86f5c61d3f2261b?s=96&d=mm&r=g\",\"caption\":\"Sylvain Glaize\"},\"url\":\"http:\\\/\\\/mo5.com\\\/fr\\\/author\\\/mokona78\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Les d\u00e9buts d'un \u00e9mulateur - MO5.COM","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mo5.com\/fr\/les-debuts-dun-emulateur\/","og_locale":"fr_FR","og_type":"article","og_title":"Les d\u00e9buts d'un \u00e9mulateur - MO5.COM","og_description":"Par Sylvain Glaize. Retournons un peu en arri\u00e8re. D\u00e8s nos premi\u00e8res discussions sur le projet, il y avait l&#8217;id\u00e9e de cr\u00e9ation d&#8217;un simulateur de Micral N. Et cela pour deux raisons principales. La premi\u00e8re est, \u00e0 terme, d&#8217;offrir \u00e0 chacun la possibilit\u00e9 de manipuler virtuellement cette machine rare. La seconde, de pouvoir \u00e9tudier une machine que nous ne connaissions pas encore et dont nous ne savions pas si notre exemplaire \u00e9tait fonctionnel ni m\u00eame complet. Avoir un simulateur, ou un \u00e9mulateur peu importe le nom qu&#8217;on lui donne, c&#8217;est pouvoir travailler sur un replica d&#8217;une machine pr\u00e9cieuse, sans risque de l&#8217;endommager. Cela permet d&#8217;avancer en parall\u00e8le entre la machine r\u00e9elle et son double. Plus tard, apr\u00e8s avoir \u00e9tudi\u00e9 la composition physique d\u00e9taill\u00e9e de ce Micral N, l&#8217;int\u00e9r\u00eat du simulateur sera valid\u00e9. En effet, il nous manque les c\u00e2bles de branchements entre certaines cartes, il va donc falloir les reconstruire. Et pour cela, il nous faut comprendre exactement comment les cartes communiquent entre elles. Simuler le 8008 Simuler un processeur peut se faire \u00e0 plusieurs niveaux. Tout en bas, dans le d\u00e9tail, on peut utiliser un FPGA pour reproduire sa structure. Beaucoup plus haut, on peut simuler les changements d&#8217;\u00e9tats d\u00fb \u00e0 l&#8217;ex\u00e9cution de chaque instruction machine. C&#8217;est sur un niveau interm\u00e9diaire que je pars : une simulation des changements d&#8217;\u00e9tats apr\u00e8s chaque \u00ab state \u00bb (\u00e9tat) du processeur. C&#8217;est une mani\u00e8re de simuler les signaux du processeur assez finement et d&#8217;en comprendre le fonctionnement d\u00e9taill\u00e9. La documentation officielle du 8008 aide en cela qu&#8217;elle contient un tableau de ces \u00e9tats et des op\u00e9rations \u00e9l\u00e9mentaires effectu\u00e9es par le processeur \u00e0 chacun de ces \u00e9tats. Et cela se traduit assez naturellement sous forme de donn\u00e9es d\u00e9crivant le fonctionnement du processeur, \u00e9tape par \u00e9tape. L&#8217;ex\u00e9cution du simulateur est cadenc\u00e9e par un ordonnanceur qui indique \u00e0 chaque changement d&#8217;\u00e9tat du syst\u00e8me quels sont les composants simul\u00e9s qui doivent en \u00eatre avertis. Si ce composant provoque \u00e0 son tour un changement d&#8217;\u00e9tat du syst\u00e8me, il indique \u00e0 l&#8217;ordonnanceur \u00e0 quel moment ce changement se produira. Ici encore, avec une bonne connaissance du syst\u00e8me, il serait plus simple d&#8217;avoir un ordonnanceur fixe qui sait qui parle \u00e0 quoi et qui r\u00e9agit \u00e0 quoi. Ne connaissant pas le syst\u00e8me, une architecture o\u00f9 chaque composant dialogue avec l&#8217;ordonnanceur permet d&#8217;\u00eatre flexible, au prix d&#8217;un certaine lenteur. Mais pour un processeur qui tourne \u00e0 500 kHz, \u00e7a passe ; m\u00eame sur un Raspberry Pi 4. L&#8217;enrobage Pour lancer l&#8217;\u00e9mulateur, deux \u00ab enrobages \u00bb sont pr\u00e9vus. Le premier enrobage est un mode sans interaction direct, mais que l&#8217;on peut imaginer ouvrir un port s\u00e9rie ou bien s&#8217;interfacer avec BlinkenBone (http:\/\/retrocmp.com\/projects\/blinkenbone), cette architecture qui permet une interaction avec des panneaux de contr\u00f4le lumineux, r\u00e9pliques ou r\u00e9els. Le second enrobage est un mode interactif avec de nombreuses fen\u00eatres, pour visualiser l&#8217;\u00e9tat de la machine, le contenu de sa m\u00e9moire et reproduire le panneau de contr\u00f4le en fa\u00e7ade. C&#8217;est principalement celui-l\u00e0 qui sera utilis\u00e9 pendant toute la recherche. Cette version utilise l&#8217;incontournable biblioth\u00e8que Dear ImGui (https:\/\/github.com\/ocornut\/imgui) pour la partie graphique. Le simulateur est architectur\u00e9 de mani\u00e8re \u00e0 pouvoir imaginer d&#8217;autres enrobages plus tard. [&hellip;]","og_url":"https:\/\/mo5.com\/fr\/les-debuts-dun-emulateur\/","og_site_name":"MO5.COM","article_publisher":"https:\/\/www.facebook.com\/pages\/Association-MO5COM\/9540357570","article_published_time":"2023-03-22T12:00:29+00:00","article_modified_time":"2023-03-23T09:05:00+00:00","og_image":[{"width":1024,"height":620,"url":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-1024x620-1.png","type":"image\/png"}],"author":"Sylvain Glaize","twitter_card":"summary_large_image","twitter_creator":"@assomo5","twitter_site":"@assomo5","twitter_misc":{"\u00c9crit par":"Sylvain Glaize","Dur\u00e9e de lecture estim\u00e9e":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mo5.com\/les-debuts-dun-emulateur\/#article","isPartOf":{"@id":"https:\/\/mo5.com\/les-debuts-dun-emulateur\/"},"author":{"name":"Sylvain Glaize","@id":"https:\/\/mo5.com\/#\/schema\/person\/e2593639b2e77eace001e56b26086749"},"headline":"Les d\u00e9buts d&#8217;un \u00e9mulateur","datePublished":"2023-03-22T12:00:29+00:00","dateModified":"2023-03-23T09:05:00+00:00","mainEntityOfPage":{"@id":"https:\/\/mo5.com\/les-debuts-dun-emulateur\/"},"wordCount":1032,"publisher":{"@id":"https:\/\/mo5.com\/#organization"},"image":{"@id":"https:\/\/mo5.com\/les-debuts-dun-emulateur\/#primaryimage"},"thumbnailUrl":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-1024x620-1.png","articleSection":["Micral","Programmation"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/mo5.com\/les-debuts-dun-emulateur\/","url":"https:\/\/mo5.com\/les-debuts-dun-emulateur\/","name":"Les d\u00e9buts d'un \u00e9mulateur - MO5.COM","isPartOf":{"@id":"https:\/\/mo5.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mo5.com\/les-debuts-dun-emulateur\/#primaryimage"},"image":{"@id":"https:\/\/mo5.com\/les-debuts-dun-emulateur\/#primaryimage"},"thumbnailUrl":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-1024x620-1.png","datePublished":"2023-03-22T12:00:29+00:00","dateModified":"2023-03-23T09:05:00+00:00","breadcrumb":{"@id":"https:\/\/mo5.com\/les-debuts-dun-emulateur\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mo5.com\/les-debuts-dun-emulateur\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/mo5.com\/les-debuts-dun-emulateur\/#primaryimage","url":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-1024x620-1.png","contentUrl":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-1024x620-1.png","width":1024,"height":620,"caption":"20210218 Capture Ecran Emulateur 1024x620 1"},{"@type":"BreadcrumbList","@id":"https:\/\/mo5.com\/les-debuts-dun-emulateur\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/mo5.com\/"},{"@type":"ListItem","position":2,"name":"Les d\u00e9buts d&#8217;un \u00e9mulateur"}]},{"@type":"WebSite","@id":"https:\/\/mo5.com\/#website","url":"https:\/\/mo5.com\/","name":"MO5.COM","description":"Pr\u00e9server, explorer, rejouer","publisher":{"@id":"https:\/\/mo5.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mo5.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/mo5.com\/#organization","name":"Association MO5.COM","url":"https:\/\/mo5.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/mo5.com\/#\/schema\/logo\/image\/","url":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/10\/Logo_MO5_A_Colo_Texte_Bleu-e1697059504554.png","contentUrl":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/10\/Logo_MO5_A_Colo_Texte_Bleu-e1697059504554.png","width":2094,"height":559,"caption":"Association MO5.COM"},"image":{"@id":"https:\/\/mo5.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/pages\/Association-MO5COM\/9540357570","https:\/\/x.com\/assomo5","http:\/\/www.instagram.com\/assomo5","https:\/\/www.youtube.com\/channel\/UCRncMsBo89C9u_8gpWnsOVw\/featured","https:\/\/bsky.app\/profile\/assomo5.bsky.social","https:\/\/twitch.tv\/mo5assoretro"]},{"@type":"Person","@id":"https:\/\/mo5.com\/#\/schema\/person\/e2593639b2e77eace001e56b26086749","name":"Sylvain Glaize","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/c57fffe6046f79130765edc0cc15c31865aef60892197deca86f5c61d3f2261b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c57fffe6046f79130765edc0cc15c31865aef60892197deca86f5c61d3f2261b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c57fffe6046f79130765edc0cc15c31865aef60892197deca86f5c61d3f2261b?s=96&d=mm&r=g","caption":"Sylvain Glaize"},"url":"http:\/\/mo5.com\/fr\/author\/mokona78\/"}]}},"_links":{"self":[{"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/posts\/634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/users\/329"}],"replies":[{"embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/comments?post=634"}],"version-history":[{"count":0,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/posts\/634\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/media\/20351"}],"wp:attachment":[{"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/media?parent=634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/categories?post=634"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/tags?post=634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}