{"id":20591,"date":"2023-04-13T20:03:49","date_gmt":"2023-04-13T18:03:49","guid":{"rendered":"https:\/\/mo5.fr\/les-debuts-dun-emulateur-copy\/"},"modified":"2023-04-13T20:15:24","modified_gmt":"2023-04-13T18:15:24","slug":"the-beginnings-of-an-emulator","status":"publish","type":"post","link":"http:\/\/mo5.com\/fr\/the-beginnings-of-an-emulator\/","title":{"rendered":"The beginnings of an emulator"},"content":{"rendered":"<p><em>By Sylvain Glaize. Translation by S\u00e9bastien Marty.<\/em><\/p>\n<p>Let&#8217;s go back a bit. From the moment we first discussed the project, there was the idea of creating a Micral N simulator. And this for two main reasons. First of all to offer everyone, at the end of the day, the opportunity of virtually handling this rare machine. Second, to be able to study a machine we didn&#8217;t know yet, and didn&#8217;t know whether our unit was in working order or even complete.<\/p>\n<p>Having a simulator or an emulator, whatever you call it, makes it possible to work on a replica of a precious machine without risk of damaging it. It allows you to move forward in parallel between the real machine and its virtual twin.<\/p>\n<p>Later on, after studying the detailed physical arrangement of this Micral N, the interest of the simulator will be validated. Indeed, we are missing the connection cables between certain boards, so we will have to rebuild them. And to do that, we need to understand exactly how the boards communicate with each other.<\/p>\n<p>&nbsp;<\/p>\n<h1>Simulating the 8008<\/h1>\n<p>Simulating a processor can be done at several different levels. At the very lowest and most detailed level, we can use an FPGA to reproduce its structure. At a much higher level, we can simulate the state changes due to the execution of each machine instruction. I decided to work at an intermediate level: simulating the state changes after each \u201cstate\u201d of the processor.<\/p>\n<p>It is a way to simulate the processor&#8217;s signals quite finely and to understand their detailed operation. The official documentation for the 8008 helps in that it contains a table of these states and of the elementary operations performed by the processor at each of these states.<\/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>&nbsp;<\/p>\n<p>And that quite naturally translates into data describing how the processor works, step by step.<\/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>The execution of the simulator is clocked by a scheduler which indicates, at each state change of the system, the simulated components that must be notified. If this component in turn causes a change in the state of the system, it indicates to the scheduler when this change will occur.<\/p>\n<p>Here again, with good knowledge of the system, it would be easier to have a fixed scheduler that knows who is talking to what and who is reacting to what. Not knowing the system, an architecture where each component talks with the scheduler provides flexibility, at the cost of a certain slowness. But for a processor that runs at 500 kHz, it&#8217;s ok \u2013 even on a Raspberry Pi 4.<\/p>\n<p>&nbsp;<\/p>\n<h1>The wrapping<\/h1>\n<p>PTo launch the emulator, two \u201cwrappings\u201d are provided.<\/p>\n<p>The first wrapping is a mode without direct interaction, but one can imagine opening a serial port or interfacing with BlinkenBone (<a href=\"http:\/\/retrocmp.com\/projects\/blinkenbone\">http:\/\/retrocmp.com\/projects\/blinkenbone<\/a>)\u00a0\u2013 an architecture which allows interaction with illuminated control panels, either real or replicas.<\/p>\n<p>The second wrapping is an interactive mode with many windows to visualize the state of the machine, the contents of its memory and reproduce the control panel at the front. This is the main one that will be used throughout our research work. This version uses the essential Dear ImGui library (<a href=\"https:\/\/github.com\/ocornut\/imgui\">https:\/\/github.com\/ocornut\/imgui<\/a>) for the graphics part.<\/p>\n<p>The simulator is structured in such a way as to be able to imagine other wrappings later. It is quite possible, and actually planned, to have a simplified user version in order to let people discover the machine \u2013 on the Web, for instance, with scenarios and operating explanations. But let&#8217;s not go too fast.<\/p>\n<p>Here is one of the first screens of the program:<\/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<p>&nbsp;<\/p>\n<h1>Reproducing a board<\/h1>\n<p>Reproducing a board is already a good way to understand it. As a starting point, there is the documentation. But the documentation we have does not cover all the boards in this specific Micral N&#8217;s configuration. Conversely, it does cover others that we do not have. Another vector of understanding is the operation of the Pluribus. This is a passive bus, it only transmits electrical information to the boards (and brings them the necessary electrical energy). However, even though it&#8217;s passive, the Pluribus describes an interface: a set of rules and constraints on the signals that the boards must respect. And that&#8217;s valuable information.<\/p>\n<p>We know thereby the different important moments of the system. The moment the processor board requests data and the moment this data arrives, for instance. You can be sure that the boards respect these contracts.<\/p>\n<p>Another vector of understanding are the physical boards themselves. It&#8217;s quite tedious but thanks to the board scans we did and by visually following the tracks connecting the components, we can refine our idea of the board&#8217;s functioning. Tedious it is, but not impossible. The boards only have two surface layers, one on each side.<\/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>&nbsp;<\/p>\n<p>The last major vector of understanding, and not the least, is the contents of the two ROMs installed in the system, which were discussed in a previous article. These two ROMs are functional elements of the system too. Thus, their execution will make it possible to validate the smooth running of the operations.<\/p>\n<p>When the mental model of the board reaches a certain level that seems functional, it is time to implement a first version of it in the system. From this version, lessons are drawn which sometimes lead to reconsideration of the theories put forward. And little by little, by corroborating all these vectors, a working model appears.<\/p>\n<p>There is still a lot to do at this stage of the analysis, and we will come back in a future article to the next steps in the building of the simulation program.<\/p>\n<p>Meanwhile, don&#8217;t forget to take part in the campaign to support our work! <a href=\"https:\/\/micral.mo5.com\">https:\/\/micral.mo5.com<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Sylvain Glaize. Translation by S\u00e9bastien Marty. Let&#8217;s go back a bit. From the moment we first discussed the project, there was the idea of creating a Micral N simulator. And this for two main reasons. First of all to offer everyone, at the end of the day, the opportunity of virtually handling this rare machine. Second, to be able to study a machine we didn&#8217;t know yet, and didn&#8217;t know whether our unit was in working order or even complete. Having a simulator or an emulator, whatever you call it, makes it possible to work on a replica of a precious machine without risk of damaging it. It allows you to move forward in parallel between the real machine and its virtual twin. Later on, after studying the detailed physical arrangement of this Micral N, the interest of the simulator will be validated. Indeed, we are missing the connection cables between certain boards, so we will have to rebuild them. And to do that, we need to understand exactly how the boards communicate with each other. &nbsp; Simulating the 8008 Simulating a processor can be done at several different levels. At the very lowest and most detailed level, we can use an FPGA to reproduce its structure. At a much higher level, we can simulate the state changes due to the execution of each machine instruction. I decided to work at an intermediate level: simulating the state changes after each \u201cstate\u201d of the processor. It is a way to simulate the processor&#8217;s signals quite finely and to understand their detailed operation. The official documentation for the 8008 helps in that it contains a table of these states and of the elementary operations performed by the processor at each of these states. &nbsp; And that quite naturally translates into data describing how the processor works, step by step. The execution of the simulator is clocked by a scheduler which indicates, at each state change of the system, the simulated components that must be notified. If this component in turn causes a change in the state of the system, it indicates to the scheduler when this change will occur. Here again, with good knowledge of the system, it would be easier to have a fixed scheduler that knows who is talking to what and who is reacting to what. Not knowing the system, an architecture where each component talks with the scheduler provides flexibility, at the cost of a certain slowness. But for a processor that runs at 500 kHz, it&#8217;s ok \u2013 even on a Raspberry Pi 4. &nbsp; The wrapping PTo launch the emulator, two \u201cwrappings\u201d are provided. The first wrapping is a mode without direct interaction, but one can imagine opening a serial port or interfacing with BlinkenBone (http:\/\/retrocmp.com\/projects\/blinkenbone)\u00a0\u2013 an architecture which allows interaction with illuminated control panels, either real or replicas. The second wrapping is an interactive mode with many windows to visualize the state of the machine, the contents of its memory and reproduce the control panel at the front. This is the main one that will be used throughout our research work. This version uses [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":20351,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"give_campaign_id":0,"footnotes":""},"categories":[1517,973],"tags":[],"class_list":["post-20591","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-micral-en","category-non-classe-en"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>The beginnings of an emulator - 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\/the-beginnings-of-an-emulator\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The beginnings of an emulator - MO5.COM\" \/>\n<meta property=\"og:description\" content=\"By Sylvain Glaize. Translation by S\u00e9bastien Marty. Let&#8217;s go back a bit. From the moment we first discussed the project, there was the idea of creating a Micral N simulator. And this for two main reasons. First of all to offer everyone, at the end of the day, the opportunity of virtually handling this rare machine. Second, to be able to study a machine we didn&#8217;t know yet, and didn&#8217;t know whether our unit was in working order or even complete. Having a simulator or an emulator, whatever you call it, makes it possible to work on a replica of a precious machine without risk of damaging it. It allows you to move forward in parallel between the real machine and its virtual twin. Later on, after studying the detailed physical arrangement of this Micral N, the interest of the simulator will be validated. Indeed, we are missing the connection cables between certain boards, so we will have to rebuild them. And to do that, we need to understand exactly how the boards communicate with each other. &nbsp; Simulating the 8008 Simulating a processor can be done at several different levels. At the very lowest and most detailed level, we can use an FPGA to reproduce its structure. At a much higher level, we can simulate the state changes due to the execution of each machine instruction. I decided to work at an intermediate level: simulating the state changes after each \u201cstate\u201d of the processor. It is a way to simulate the processor&#8217;s signals quite finely and to understand their detailed operation. The official documentation for the 8008 helps in that it contains a table of these states and of the elementary operations performed by the processor at each of these states. &nbsp; And that quite naturally translates into data describing how the processor works, step by step. The execution of the simulator is clocked by a scheduler which indicates, at each state change of the system, the simulated components that must be notified. If this component in turn causes a change in the state of the system, it indicates to the scheduler when this change will occur. Here again, with good knowledge of the system, it would be easier to have a fixed scheduler that knows who is talking to what and who is reacting to what. Not knowing the system, an architecture where each component talks with the scheduler provides flexibility, at the cost of a certain slowness. But for a processor that runs at 500 kHz, it&#8217;s ok \u2013 even on a Raspberry Pi 4. &nbsp; The wrapping PTo launch the emulator, two \u201cwrappings\u201d are provided. The first wrapping is a mode without direct interaction, but one can imagine opening a serial port or interfacing with BlinkenBone (http:\/\/retrocmp.com\/projects\/blinkenbone)\u00a0\u2013 an architecture which allows interaction with illuminated control panels, either real or replicas. The second wrapping is an interactive mode with many windows to visualize the state of the machine, the contents of its memory and reproduce the control panel at the front. This is the main one that will be used throughout our research work. This version uses [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mo5.com\/fr\/the-beginnings-of-an-emulator\/\" \/>\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-04-13T18:03:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-13T18:15:24+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=\"Philippe Dubois\" \/>\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=\"Philippe Dubois\" \/>\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\\\/en\\\/the-beginnings-of-an-emulator\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/en\\\/the-beginnings-of-an-emulator\\\/\"},\"author\":{\"name\":\"Philippe Dubois\",\"@id\":\"https:\\\/\\\/mo5.com\\\/#\\\/schema\\\/person\\\/c389d0a47ac596b1fd688078cc054924\"},\"headline\":\"The beginnings of an emulator\",\"datePublished\":\"2023-04-13T18:03:49+00:00\",\"dateModified\":\"2023-04-13T18:15:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/en\\\/the-beginnings-of-an-emulator\\\/\"},\"wordCount\":973,\"publisher\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/en\\\/the-beginnings-of-an-emulator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/20210218-Capture-Ecran-Emulateur-1024x620-1.png\",\"articleSection\":[\"Micral\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mo5.com\\\/en\\\/the-beginnings-of-an-emulator\\\/\",\"url\":\"https:\\\/\\\/mo5.com\\\/en\\\/the-beginnings-of-an-emulator\\\/\",\"name\":\"The beginnings of an emulator - MO5.COM\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/en\\\/the-beginnings-of-an-emulator\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/en\\\/the-beginnings-of-an-emulator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/20210218-Capture-Ecran-Emulateur-1024x620-1.png\",\"datePublished\":\"2023-04-13T18:03:49+00:00\",\"dateModified\":\"2023-04-13T18:15:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/en\\\/the-beginnings-of-an-emulator\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mo5.com\\\/en\\\/the-beginnings-of-an-emulator\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/mo5.com\\\/en\\\/the-beginnings-of-an-emulator\\\/#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\\\/en\\\/the-beginnings-of-an-emulator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/mo5.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The beginnings of an emulator\"}]},{\"@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\\\/c389d0a47ac596b1fd688078cc054924\",\"name\":\"Philippe Dubois\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3a534a9c352e6ed7f37634e003a6f697bae2d2c12f8a8ff7030738791af9c1ac?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3a534a9c352e6ed7f37634e003a6f697bae2d2c12f8a8ff7030738791af9c1ac?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3a534a9c352e6ed7f37634e003a6f697bae2d2c12f8a8ff7030738791af9c1ac?s=96&d=mm&r=g\",\"caption\":\"Philippe Dubois\"},\"url\":\"http:\\\/\\\/mo5.com\\\/fr\\\/author\\\/prez\\\/\"}]}<\/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\/fr\/the-beginnings-of-an-emulator\/","og_locale":"fr_FR","og_type":"article","og_title":"The beginnings of an emulator - MO5.COM","og_description":"By Sylvain Glaize. Translation by S\u00e9bastien Marty. Let&#8217;s go back a bit. From the moment we first discussed the project, there was the idea of creating a Micral N simulator. And this for two main reasons. First of all to offer everyone, at the end of the day, the opportunity of virtually handling this rare machine. Second, to be able to study a machine we didn&#8217;t know yet, and didn&#8217;t know whether our unit was in working order or even complete. Having a simulator or an emulator, whatever you call it, makes it possible to work on a replica of a precious machine without risk of damaging it. It allows you to move forward in parallel between the real machine and its virtual twin. Later on, after studying the detailed physical arrangement of this Micral N, the interest of the simulator will be validated. Indeed, we are missing the connection cables between certain boards, so we will have to rebuild them. And to do that, we need to understand exactly how the boards communicate with each other. &nbsp; Simulating the 8008 Simulating a processor can be done at several different levels. At the very lowest and most detailed level, we can use an FPGA to reproduce its structure. At a much higher level, we can simulate the state changes due to the execution of each machine instruction. I decided to work at an intermediate level: simulating the state changes after each \u201cstate\u201d of the processor. It is a way to simulate the processor&#8217;s signals quite finely and to understand their detailed operation. The official documentation for the 8008 helps in that it contains a table of these states and of the elementary operations performed by the processor at each of these states. &nbsp; And that quite naturally translates into data describing how the processor works, step by step. The execution of the simulator is clocked by a scheduler which indicates, at each state change of the system, the simulated components that must be notified. If this component in turn causes a change in the state of the system, it indicates to the scheduler when this change will occur. Here again, with good knowledge of the system, it would be easier to have a fixed scheduler that knows who is talking to what and who is reacting to what. Not knowing the system, an architecture where each component talks with the scheduler provides flexibility, at the cost of a certain slowness. But for a processor that runs at 500 kHz, it&#8217;s ok \u2013 even on a Raspberry Pi 4. &nbsp; The wrapping PTo launch the emulator, two \u201cwrappings\u201d are provided. The first wrapping is a mode without direct interaction, but one can imagine opening a serial port or interfacing with BlinkenBone (http:\/\/retrocmp.com\/projects\/blinkenbone)\u00a0\u2013 an architecture which allows interaction with illuminated control panels, either real or replicas. The second wrapping is an interactive mode with many windows to visualize the state of the machine, the contents of its memory and reproduce the control panel at the front. This is the main one that will be used throughout our research work. This version uses [&hellip;]","og_url":"https:\/\/mo5.com\/fr\/the-beginnings-of-an-emulator\/","og_site_name":"MO5.COM","article_publisher":"https:\/\/www.facebook.com\/pages\/Association-MO5COM\/9540357570","article_published_time":"2023-04-13T18:03:49+00:00","article_modified_time":"2023-04-13T18:15:24+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":"Philippe Dubois","twitter_card":"summary_large_image","twitter_creator":"@assomo5","twitter_site":"@assomo5","twitter_misc":{"\u00c9crit par":"Philippe Dubois","Dur\u00e9e de lecture estim\u00e9e":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mo5.com\/en\/the-beginnings-of-an-emulator\/#article","isPartOf":{"@id":"https:\/\/mo5.com\/en\/the-beginnings-of-an-emulator\/"},"author":{"name":"Philippe Dubois","@id":"https:\/\/mo5.com\/#\/schema\/person\/c389d0a47ac596b1fd688078cc054924"},"headline":"The beginnings of an emulator","datePublished":"2023-04-13T18:03:49+00:00","dateModified":"2023-04-13T18:15:24+00:00","mainEntityOfPage":{"@id":"https:\/\/mo5.com\/en\/the-beginnings-of-an-emulator\/"},"wordCount":973,"publisher":{"@id":"https:\/\/mo5.com\/#organization"},"image":{"@id":"https:\/\/mo5.com\/en\/the-beginnings-of-an-emulator\/#primaryimage"},"thumbnailUrl":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-1024x620-1.png","articleSection":["Micral"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/mo5.com\/en\/the-beginnings-of-an-emulator\/","url":"https:\/\/mo5.com\/en\/the-beginnings-of-an-emulator\/","name":"The beginnings of an emulator - MO5.COM","isPartOf":{"@id":"https:\/\/mo5.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mo5.com\/en\/the-beginnings-of-an-emulator\/#primaryimage"},"image":{"@id":"https:\/\/mo5.com\/en\/the-beginnings-of-an-emulator\/#primaryimage"},"thumbnailUrl":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/01\/20210218-Capture-Ecran-Emulateur-1024x620-1.png","datePublished":"2023-04-13T18:03:49+00:00","dateModified":"2023-04-13T18:15:24+00:00","breadcrumb":{"@id":"https:\/\/mo5.com\/en\/the-beginnings-of-an-emulator\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mo5.com\/en\/the-beginnings-of-an-emulator\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/mo5.com\/en\/the-beginnings-of-an-emulator\/#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\/en\/the-beginnings-of-an-emulator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/mo5.com\/"},{"@type":"ListItem","position":2,"name":"The beginnings of an emulator"}]},{"@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\/c389d0a47ac596b1fd688078cc054924","name":"Philippe Dubois","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/3a534a9c352e6ed7f37634e003a6f697bae2d2c12f8a8ff7030738791af9c1ac?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/3a534a9c352e6ed7f37634e003a6f697bae2d2c12f8a8ff7030738791af9c1ac?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3a534a9c352e6ed7f37634e003a6f697bae2d2c12f8a8ff7030738791af9c1ac?s=96&d=mm&r=g","caption":"Philippe Dubois"},"url":"http:\/\/mo5.com\/fr\/author\/prez\/"}]}},"_links":{"self":[{"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/posts\/20591","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\/4"}],"replies":[{"embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/comments?post=20591"}],"version-history":[{"count":0,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/posts\/20591\/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=20591"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/categories?post=20591"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/tags?post=20591"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}