{"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":"https:\/\/mo5.com\/en\/les-debuts-dun-emulateur\/","title":{"rendered":"The beginnings of an emulator"},"content":{"rendered":"<p><em>By Sylvain Glaize.<\/em><\/p>\n<p>Let's go back a bit. From our earliest discussions on the project, there was the idea of creating a Micral N simulator, for two main reasons.<br \/>\nThe first is, in the long term, to offer everyone the chance to virtually handle this rare machine. Secondly, to be able to study a machine that we didn't yet know about and of which we didn't know if our copy was functional or even complete.<\/p>\n<p>Having a simulator, or emulator whatever you want to call it, means being able to work on a replica of a precious machine, without the risk of damaging it.<br \/>\nThis enables parallel progress to be made between the real machine and its double.<\/p>\n<p>Later, after studying the detailed physical composition of this Micral N, we will be able to validate the interest of the simulator. We're missing the connection cables between certain cards, so we're going to have to rebuild them. And to do that, we need to understand exactly how the cards communicate with each other.<\/p>\n<h1>Simulate the 8008<\/h1>\n<p>A processor can be simulated at several levels. At the very bottom, in detail, you can use an FPGA to reproduce its structure. Much higher up, you can simulate the changes of state due to the execution of each machine instruction. I'm starting from an intermediate level: a simulation of state changes after each processor 'state'.<\/p>\n<p>This is a way of simulating processor signals in some detail and understanding how they work in detail. The official 8008 documentation helps in that it contains a table of these states and the basic operations performed by the processor in each of these states.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"195\" class=\"aligncenter size-large wp-image-20143\" title=\"Extract 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>And this translates quite naturally into data describing the operation of the processor, step by step.<\/p>\n<p><em><img loading=\"lazy\" decoding=\"async\" width=\"753\" height=\"334\" class=\"aligncenter size-full wp-image-20146\" title=\"Instruction code Emulator\" 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>The simulator's execution is timed by a scheduler, which indicates which simulated components should be notified each time the system's state changes. If this component in turn causes a change in system state, it tells the scheduler when this change will occur.<\/p>\n<p>Here again, with a good knowledge of the system, it would be simpler to have a fixed scheduler that knows who talks to what and who reacts to what. If you don't know the system, an architecture where each component talks to the scheduler allows you to be flexible, at the cost of a certain slowness. But for a processor running at 500 kHz, it's fine; even on a Raspberry Pi 4.<\/p>\n<h1>Coating<\/h1>\n<p>To launch the emulator, two 'wraps' are provided.<\/p>\n<p>The first wrapper is a mode with no direct interaction, but which we can imagine opening a serial port or interfacing with BlinkenBone (http:\/\/retrocmp.com\/projects\/blinkenbone), an architecture that enables interaction with luminous control panels, whether replicas or real.<\/p>\n<p>The second wrapper is an interactive mode with numerous windows, for viewing the status of the machine, the contents of its memory and reproducing the front control panel. This will be the main mode used throughout the research. This version uses the indispensable Dear ImGui library (https:\/\/github.com\/ocornut\/imgui) for the graphics.<\/p>\n<p>The simulator is designed in such a way that it is possible to imagine other coatings at a later date. It is entirely conceivable and envisaged to have a simplified user version to introduce the machine. On the Web, for example, with scenarios and explanations of how it works. But let's not get ahead of ourselves.<\/p>\n<p>Here is one of the first screens in the programme:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"620\" class=\"aligncenter size-large wp-image-20148\" title=\"Screenshot of the Micral N emulator\" 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>Reproduce a map<\/h1>\n<p>To reproduce a map is to understand it. As a basis, there's the documentation. But the documentation we have does not cover all the boards in the Micral N configuration. Another vector of understanding: the operation of the Pluribus. This bus is passive; it simply transmits electrical information to the cards (and supplies them with the necessary electrical power). However, even though it is passive, Pluribus describes an interface: a set of rules and constraints on the signals that the cards must respect. And this is valuable information.<\/p>\n<p>So we know the different important moments in the system. The moment when the processor card requests data and the moment when the data arrives, for example. We can be sure that the cards respect these contracts.<\/p>\n<p>Another vector of understanding is the physical boards themselves. It's quite tedious, but thanks to scans we've made of the boards and by visually following the tracks linking the components, we can refine our idea of how the board works. Tedious, but not impossible. The boards only have two layers, one on the surface of each side of the board.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-20150 size-medium\" title=\"Scan Micral N Processor Card\" 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>The last, and by no means least, major vector of understanding is the content of the two ROMs present in the system, the subject of a previous article. These two ROMs are also functional elements of the system. Executing them will validate that operations are running correctly.<\/p>\n<p>When the mental model of the map reaches a certain level that seems functional, it is time to implement a first version in the system. Lessons are learned from this version, sometimes leading to a reconsideration of the theories put forward. And little by little, by cross-referencing all these vectors, a functional model emerges.<\/p>\n<p>There's still a lot to be done at this level of analysis, and we'll come back to the further construction of the simulation programme in a future article.<\/p>\n<p>Don't forget to take part in the campaign to support our work! <a href=\"https:\/\/micral.mo5.com\">https:\/\/micral.mo5.com<\/a><\/p>","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\/en\/les-debuts-dun-emulateur\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\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\/en\/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=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sylvain Glaize\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\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\":\"en-GB\"},{\"@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\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mo5.com\\\/les-debuts-dun-emulateur\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@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\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mo5.com\\\/#organization\",\"name\":\"Association MO5.COM\",\"url\":\"https:\\\/\\\/mo5.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@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\":\"en-GB\",\"@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\":\"https:\\\/\\\/mo5.com\\\/en\\\/author\\\/mokona78\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The beginnings of an emulator - 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\/en\/les-debuts-dun-emulateur\/","og_locale":"en_GB","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\/en\/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":{"Written by":"Sylvain Glaize","Estimated reading time":"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":"en-GB"},{"@type":"WebPage","@id":"https:\/\/mo5.com\/les-debuts-dun-emulateur\/","url":"https:\/\/mo5.com\/les-debuts-dun-emulateur\/","name":"The beginnings of an emulator - 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":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mo5.com\/les-debuts-dun-emulateur\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@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":"Preserve, explore, replay","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":"en-GB"},{"@type":"Organization","@id":"https:\/\/mo5.com\/#organization","name":"MO5.COM Association","url":"https:\/\/mo5.com\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@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":"en-GB","@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":"https:\/\/mo5.com\/en\/author\/mokona78\/"}]}},"_links":{"self":[{"href":"https:\/\/mo5.com\/en\/wp-json\/wp\/v2\/posts\/634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mo5.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mo5.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mo5.com\/en\/wp-json\/wp\/v2\/users\/329"}],"replies":[{"embeddable":true,"href":"https:\/\/mo5.com\/en\/wp-json\/wp\/v2\/comments?post=634"}],"version-history":[{"count":0,"href":"https:\/\/mo5.com\/en\/wp-json\/wp\/v2\/posts\/634\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mo5.com\/en\/wp-json\/wp\/v2\/media\/20351"}],"wp:attachment":[{"href":"https:\/\/mo5.com\/en\/wp-json\/wp\/v2\/media?parent=634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mo5.com\/en\/wp-json\/wp\/v2\/categories?post=634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mo5.com\/en\/wp-json\/wp\/v2\/tags?post=634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}