{"version":"1.0","provider_name":"MO5.COM","provider_url":"https:\/\/mo5.com\/en","title":"Les d\u00e9buts d'un \u00e9mulateur - MO5.COM","type":"rich","width":600,"height":338,"html":"<blockquote class=\"wp-embedded-content\" data-secret=\"9ySzX8Csnv\"><a href=\"https:\/\/mo5.com\/en\/les-debuts-dun-emulateur\/\">The beginnings of an emulator<\/a><\/blockquote><iframe sandbox=\"allow-scripts\" security=\"restricted\" src=\"https:\/\/mo5.com\/en\/les-debuts-dun-emulateur\/embed\/#?secret=9ySzX8Csnv\" width=\"600\" height=\"338\" title=\"&quot;The beginnings of an emulator&quot; - MO5.COM\" data-secret=\"9ySzX8Csnv\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" class=\"wp-embedded-content\"><\/iframe><script type=\"text\/javascript\">\n\/* <![CDATA[ *\/\n\/*! This file is auto-generated *\/\n!function(d,l){\"use strict\";l.querySelector&&d.addEventListener&&\"undefined\"!=typeof URL&&(d.wp=d.wp||{},d.wp.receiveEmbedMessage||(d.wp.receiveEmbedMessage=function(e){var t=e.data;if((t||t.secret||t.message||t.value)&&!\/[^a-zA-Z0-9]\/.test(t.secret)){for(var s,r,n,a=l.querySelectorAll('iframe[data-secret=\"'+t.secret+'\"]'),o=l.querySelectorAll('blockquote[data-secret=\"'+t.secret+'\"]'),c=new RegExp(\"^https?:$\",\"i\"),i=0;i<o.length;i++)o[i].style.display=\"none\";for(i=0;i<a.length;i++)s=a[i],e.source===s.contentWindow&&(s.removeAttribute(\"style\"),\"height\"===t.message?(1e3<(r=parseInt(t.value,10))?r=1e3:~~r<200&&(r=200),s.height=r):\"link\"===t.message&&(r=new URL(s.getAttribute(\"src\")),n=new URL(t.value),c.test(n.protocol))&&n.host===r.host&&l.activeElement===s&&(d.top.location.href=t.value))}},d.addEventListener(\"message\",d.wp.receiveEmbedMessage,!1),l.addEventListener(\"DOMContentLoaded\",function(){for(var e,t,s=l.querySelectorAll(\"iframe.wp-embedded-content\"),r=0;r<s.length;r++)(t=(e=s[r]).getAttribute(\"data-secret\"))||(t=Math.random().toString(36).substring(2,12),e.src+=\"#?secret=\"+t,e.setAttribute(\"data-secret\",t)),e.contentWindow.postMessage({message:\"ready\",secret:t},\"*\")},!1)))}(window,document);\n\/\/# sourceURL=https:\/\/mo5.com\/wp-includes\/js\/wp-embed.min.js\n\/* ]]> *\/\n<\/script>","thumbnail_url":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-1024x620-1.png","thumbnail_width":1024,"thumbnail_height":620,"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;]"}