<?xml version="1.0"?>
<oembed><version>1.0</version><provider_name>MO5.COM</provider_name><provider_url>https://mo5.com/en</provider_url><title>Les d&#xE9;buts d'un &#xE9;mulateur - MO5.COM</title><type>rich</type><width>600</width><height>338</height><html>&lt;blockquote class="wp-embedded-content" data-secret="63VHgJUWK7"&gt;&lt;a href="https://mo5.com/en/les-debuts-dun-emulateur/"&gt;The beginnings of an emulator&lt;/a&gt;&lt;/blockquote&gt;&lt;iframe sandbox="allow-scripts" security="restricted" src="https://mo5.com/en/les-debuts-dun-emulateur/embed/#?secret=63VHgJUWK7" width="600" height="338" title=""The beginnings of an emulator" - MO5.COM" data-secret="63VHgJUWK7" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" class="wp-embedded-content"&gt;&lt;/iframe&gt;&lt;script type="text/javascript"&gt;
/* &lt;![CDATA[ */
/*! This file is auto-generated */
!function(d,l){"use strict";l.querySelector&amp;&amp;d.addEventListener&amp;&amp;"undefined"!=typeof URL&amp;&amp;(d.wp=d.wp||{},d.wp.receiveEmbedMessage||(d.wp.receiveEmbedMessage=function(e){var t=e.data;if((t||t.secret||t.message||t.value)&amp;&amp;!/[^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&lt;o.length;i++)o[i].style.display="none";for(i=0;i&lt;a.length;i++)s=a[i],e.source===s.contentWindow&amp;&amp;(s.removeAttribute("style"),"height"===t.message?(1e3&lt;(r=parseInt(t.value,10))?r=1e3:~~r&lt;200&amp;&amp;(r=200),s.height=r):"link"===t.message&amp;&amp;(r=new URL(s.getAttribute("src")),n=new URL(t.value),c.test(n.protocol))&amp;&amp;n.host===r.host&amp;&amp;l.activeElement===s&amp;&amp;(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&lt;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);
//# sourceURL=https://mo5.com/wp-includes/js/wp-embed.min.js
/* ]]&gt; */
&lt;/script&gt;</html><thumbnail_url>https://mo5.com/wp-content/uploads/2023/01/20210218-Capture-Ecran-Emulateur-1024x620-1.png</thumbnail_url><thumbnail_width>1024</thumbnail_width><thumbnail_height>620</thumbnail_height><description>Par Sylvain Glaize. Retournons un peu en arri&#xE8;re. D&#xE8;s nos premi&#xE8;res discussions sur le projet, il y avait l&#x2019;id&#xE9;e de cr&#xE9;ation d&#x2019;un simulateur de Micral N. Et cela pour deux raisons principales. La premi&#xE8;re est, &#xE0; terme, d&#x2019;offrir &#xE0; chacun la possibilit&#xE9; de manipuler virtuellement cette machine rare. La seconde, de pouvoir &#xE9;tudier une machine que nous ne connaissions pas encore et dont nous ne savions pas si notre exemplaire &#xE9;tait fonctionnel ni m&#xEA;me complet. Avoir un simulateur, ou un &#xE9;mulateur peu importe le nom qu&#x2019;on lui donne, c&#x2019;est pouvoir travailler sur un replica d&#x2019;une machine pr&#xE9;cieuse, sans risque de l&#x2019;endommager. Cela permet d&#x2019;avancer en parall&#xE8;le entre la machine r&#xE9;elle et son double. Plus tard, apr&#xE8;s avoir &#xE9;tudi&#xE9; la composition physique d&#xE9;taill&#xE9;e de ce Micral N, l&#x2019;int&#xE9;r&#xEA;t du simulateur sera valid&#xE9;. En effet, il nous manque les c&#xE2;bles 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 &#xE0; plusieurs niveaux. Tout en bas, dans le d&#xE9;tail, on peut utiliser un FPGA pour reproduire sa structure. Beaucoup plus haut, on peut simuler les changements d&#x2019;&#xE9;tats d&#xFB; &#xE0; l&#x2019;ex&#xE9;cution de chaque instruction machine. C&#x2019;est sur un niveau interm&#xE9;diaire que je pars : une simulation des changements d&#x2019;&#xE9;tats apr&#xE8;s chaque &#xAB; state &#xBB; (&#xE9;tat) du processeur. C&#x2019;est une mani&#xE8;re de simuler les signaux du processeur assez finement et d&#x2019;en comprendre le fonctionnement d&#xE9;taill&#xE9;. La documentation officielle du 8008 aide en cela qu&#x2019;elle contient un tableau de ces &#xE9;tats et des op&#xE9;rations &#xE9;l&#xE9;mentaires effectu&#xE9;es par le processeur &#xE0; chacun de ces &#xE9;tats. Et cela se traduit assez naturellement sous forme de donn&#xE9;es d&#xE9;crivant le fonctionnement du processeur, &#xE9;tape par &#xE9;tape. L&#x2019;ex&#xE9;cution du simulateur est cadenc&#xE9;e par un ordonnanceur qui indique &#xE0; chaque changement d&#x2019;&#xE9;tat du syst&#xE8;me quels sont les composants simul&#xE9;s qui doivent en &#xEA;tre avertis. Si ce composant provoque &#xE0; son tour un changement d&#x2019;&#xE9;tat du syst&#xE8;me, il indique &#xE0; l&#x2019;ordonnanceur &#xE0; quel moment ce changement se produira. Ici encore, avec une bonne connaissance du syst&#xE8;me, il serait plus simple d&#x2019;avoir un ordonnanceur fixe qui sait qui parle &#xE0; quoi et qui r&#xE9;agit &#xE0; quoi. Ne connaissant pas le syst&#xE8;me, une architecture o&#xF9; chaque composant dialogue avec l&#x2019;ordonnanceur permet d&#x2019;&#xEA;tre flexible, au prix d&#x2019;un certaine lenteur. Mais pour un processeur qui tourne &#xE0; 500 kHz, &#xE7;a passe ; m&#xEA;me sur un Raspberry Pi 4. L&#x2019;enrobage Pour lancer l&#x2019;&#xE9;mulateur, deux &#xAB; enrobages &#xBB; sont pr&#xE9;vus. Le premier enrobage est un mode sans interaction direct, mais que l&#x2019;on peut imaginer ouvrir un port s&#xE9;rie ou bien s&#x2019;interfacer avec BlinkenBone (http://retrocmp.com/projects/blinkenbone), cette architecture qui permet une interaction avec des panneaux de contr&#xF4;le lumineux, r&#xE9;pliques ou r&#xE9;els. Le second enrobage est un mode interactif avec de nombreuses fen&#xEA;tres, pour visualiser l&#x2019;&#xE9;tat de la machine, le contenu de sa m&#xE9;moire et reproduire le panneau de contr&#xF4;le en fa&#xE7;ade. C&#x2019;est principalement celui-l&#xE0; qui sera utilis&#xE9; pendant toute la recherche. Cette version utilise l&#x2019;incontournable biblioth&#xE8;que Dear ImGui (https://github.com/ocornut/imgui) pour la partie graphique. Le simulateur est architectur&#xE9; de mani&#xE8;re &#xE0; pouvoir imaginer d&#x2019;autres enrobages plus tard. [&hellip;]</description></oembed>
