{"id":583,"date":"2023-03-08T14:00:20","date_gmt":"2023-03-08T12:00:20","guid":{"rendered":"https:\/\/mo5.com\/micral\/?p=583"},"modified":"2023-03-14T11:02:49","modified_gmt":"2023-03-14T09:02:49","slug":"lecture-et-sauvegarde-des-roms-du-micral-n","status":"publish","type":"post","link":"http:\/\/mo5.com\/fr\/lecture-et-sauvegarde-des-roms-du-micral-n\/","title":{"rendered":"Lecture et sauvegarde des ROMs du Micral N"},"content":{"rendered":"<div id=\"pl-583\"  class=\"panel-layout\" ><div id=\"pg-583-0\"  class=\"panel-grid panel-no-style\" ><div id=\"pgc-583-0-0\"  class=\"panel-grid-cell\" ><div id=\"panel-583-0-0-0\" class=\"so-panel widget widget_sow-editor panel-first-child panel-last-child widgetopts-SO\" data-index=\"0\" ><div\n\t\t\t\n\t\t\tclass=\"so-widget-sow-editor so-widget-sow-editor-base\"\n\t\t\t\n\t\t>\n<div class=\"siteorigin-widget-tinymce textwidget\">\n\t<p><em>Par Sylvain Glaize.<\/em><\/p>\n<p>C'est le 5 avril 2021 qu'a lieu la tr\u00e8s importante session de dump, ou lecture et sauvegarde, des ROMs du Micral N.<\/p>\n<p><div style=\"width: 1610px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mo5.com\/micral\/wp-content\/uploads\/2022\/08\/IMG_20210405_135753.jpg\" alt=\"D\u00e9tail d'une des ROMs du moniteur du Micral N de l'association MO5\" width=\"1600\" height=\"555\" \/><\/p>\n<p class=\"wp-caption-text\">D\u00e9tail d'une des ROMs du moniteur du Micral N de l'association MO5<\/p>\n<\/div>\n<p>Ces EPROMs sont tellement anciennes qu'il est possible de voir les transistors de stockage tant la gravure est grossi\u00e8re. En nous renseignant sur leur technologie, nous apprenons que la tension \u00e9lectrique n\u00e9cessaire pour programmer ces EPROMs est de 47 volts, ce qui est \u00e9norme par rapport aux standards actuels. Cette tr\u00e8s importante diff\u00e9rence de potentiel a peut-\u00eatre prot\u00e9g\u00e9 le contenu de ces EPROMs, et nous allons nous en assurer tout de suite.<\/p>\n<p>\u00c0 noter que ces EPROMs sont des composants NMOS (<a href=\"https:\/\/fr.wikipedia.org\/wiki\/NMOS\">https:\/\/fr.wikipedia.org\/wiki\/NMOS<\/a>), comme le 8008 et certaines SRAMs de la machine. Ces composants\u00a0n\u00e9cessitent une alimentation bitension +5V et -9V, des niveaux logiques diff\u00e9rents des niveaux TTL classiques.<\/p>\n<p><div style=\"width: 1930px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mo5.com\/wp-content\/uploads\/2022\/08\/set-de-travail-Copie.jpg\" alt=\"Dumper de ROM sp\u00e9cialement con\u00e7u par Jean Fran\u00e7ois Del Nero pour le Micral N\" width=\"1920\" height=\"532\" \/><\/p>\n<p class=\"wp-caption-text\">Dumper de ROM sp\u00e9cialement con\u00e7u par Jean Fran\u00e7ois Del Nero pour le Micral N<\/p>\n<\/div>\n<p>Jean-Fran\u00e7ois Del Nero a pr\u00e9par\u00e9 en amont un appareil sp\u00e9cifique qui, en \u00e9tant adapt\u00e9 \u00e0 ces niveaux, va nous permettre de lire ces EPROMs. Cet outil permet, en plus de permettre la lecture de ces EPROMs 1702, de tester l'ensemble des m\u00e9moires RAM de la machine. Ces RAM (SRAMs 2102 et 4007) sont d'ailleurs en bon \u00e9tat de fonctionnement, \u00e0 part une que nous rempla\u00e7ons par une 2102A.<\/p>\n<p>Les sources et le sch\u00e9ma de cet outil sont disponibles sur ce d\u00e9p\u00f4t Github :<br \/>\n<a href=\"https:\/\/github.com\/jfdelnero\/TrucsEnVrac\/tree\/master\/EPROM_dumper_RAM_tester\">&gt;&gt;&gt;Sources ici<\/a><\/p>\n<p><div style=\"width: 1930px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mo5.com\/wp-content\/uploads\/2022\/08\/P1040172-Copie.jpg\" alt=\"Jean-Fran\u00e7ois \u00e0 l'\u0153uvre sur un plan de travail avec instruments de mesure\" width=\"1920\" height=\"555\" \/><\/p>\n<p class=\"wp-caption-text\">Jean-Fran\u00e7ois \u00e0 l'\u0153uvre sur un plan de travail avec instruments de mesure dans les locaux de Viveris Technologies<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<p><div style=\"width: 1376px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mo5.com\/micral\/wp-content\/uploads\/2022\/08\/eprom_dump.png\" alt=\"Le r\u00e9sultat d'un dump d'une des EPROMs\" width=\"1366\" height=\"648\" \/><\/p>\n<p class=\"wp-caption-text\">Le r\u00e9sultat d'un dump d'une des EPROMs<\/p>\n<\/div>\n<p>Tout se passe \u00e0 merveille. Le contenu des EPROMs est sauv\u00e9 ! Jean-Fran\u00e7ois et Philippe m'envoient imm\u00e9diatement le contenu fra\u00eechement sorti du \u00ab dumper \u00bb.<\/p>\n<p>La premi\u00e8re \u00e9tape est de v\u00e9rifier que le contenu est correct. En effet, ces octets ont \u00e9t\u00e9 stock\u00e9s pendant des ann\u00e9es sur des <strong>EPROMs<\/strong>. Le contenu a pu \u00eatre alt\u00e9r\u00e9.<br \/>\nIl y a deux ROMs diff\u00e9rentes, l'une de 256 octets, l'autre de 2 kilo octets. Autant commencer par la plus courte. 256 octets, \u00e7a n'est pas tr\u00e8s long \u00e0 parcourir.<\/p>\n<h1>La premi\u00e8re ROM<\/h1>\n<p>Imm\u00e9diatement, l'espoir de donn\u00e9es ex\u00e9cutables est permis. En effet, les deux premi\u00e8res instructions d\u00e9cod\u00e9es sont <code>LAA<\/code> et <code>JMP $0048<\/code>.<\/p>\n<p>Sous ces mn\u00e9moniques se cache une s\u00e9quence de d\u00e9marrage de processeur 8008, c'est tr\u00e8s bon signe !<\/p>\n<p><code>LAA<\/code> signifie \u00ab <em>Load from register A to register A<\/em> \u00bb, autrement dit, \u00ab charge le contenu du registre (un morceau de m\u00e9moire du processeur) A vers le registre A \u00bb. Ce qui n'a pas d'effet visible sur l'\u00e9tat du processeur et est la convention pour indiquer au 8008 de... ne rien faire d'int\u00e9ressant. Un mn\u00e9monique \u00e9quivalent sur d'autres processeur est <code>NOP<\/code>, pour \u00ab <em>No OPeration<\/em> \u00bb.<\/p>\n<p>Cette instruction est g\u00e9n\u00e9ralement la premi\u00e8re instruction que l'on pr\u00e9sente \u00e0 un 8008 qui vient de d\u00e9marrer. En effet, du fait de son fonctionnement, le processeur va ex\u00e9cuter cette instruction deux fois. Conventionnellement, le choix se porte sur une instruction qui n'a pas d'effet visible.<\/p>\n<p>La seconde instruction <code>JMP $0048<\/code> est un saut vers l'adresse indiqu\u00e9e, qui se trouve plus loin, apr\u00e8s un lot d'adresses r\u00e9serv\u00e9es.<\/p>\n<p>C'est l\u00e0 aussi une instruction classique, que l'on retrouve sur des machines \u00e0 base de Z80, qui pr\u00e9sente les m\u00eames premi\u00e8res adresses r\u00e9serv\u00e9es, r\u00e9v\u00e9lant une filiation.<\/p>\n<h2>Et la suite ?<\/h2>\n<p>\u00c0 partir de l'adresse `$0048`, cela ressemble \u00e0 un programme. Apr\u00e8s un peu de travail et quelques premi\u00e8res notes, je suis \u00e0 peu pr\u00e8s certain que ce programme n'a pas \u00e9t\u00e9 alt\u00e9r\u00e9. Cela a l'air coh\u00e9rent.<\/p>\n<p>Il y a cependant un petit point qui m\u00e9rite attention. Dans les adresses r\u00e9serv\u00e9es mentionn\u00e9es plus haut (les adresses de \u00ab <em>Restart<\/em> \u00bb, utilis\u00e9es par l'instruction <code>RST<\/code> et, sur le Micral N, par les interruptions), seules deux contiennent des choses coh\u00e9rentes.<\/p>\n<p>Le reste forme un ensemble incoh\u00e9rent, et ressemble plus \u00e0 une suite de bits al\u00e9atoires.<\/p>\n<h2>Une ROM de d\u00e9marrage<\/h2>\n<p>Ce point se rapproche d'un autre : \u00e0 la fin du traitement de la ROM, une instruction demande le red\u00e9marrage du processeur \u00e0 l'adresse 0.<\/p>\n<p>L'intuition est alors de dire que cette ROM effectue une op\u00e9ration de d\u00e9marrage, puis qu'elle \u00ab s'efface \u00bb, au sens de se cacher, pour laisser la place \u00e0 autre chose.<\/p>\n<p>Ce qui tend \u00e0 confirmer cette intuition, c'est que la ROM fait des requ\u00eates sur ses entr\u00e9es\/sorties pour acqu\u00e9rir des donn\u00e9es depuis un p\u00e9riph\u00e9rique. Ces donn\u00e9es sont alors plac\u00e9es, apr\u00e8s v\u00e9rification d'une somme de contr\u00f4le, en m\u00e9moire \u00e0 partir de l'adresse 0.<\/p>\n<p>Il s'agit donc probablement d'un programme d'amor\u00e7age qui va lire un second programme depuis une source externe. Un \u00ab <em>boot loader<\/em> \u00bb.<\/p>\n<p>Ces intuitions seront confirm\u00e9es plus tard.<\/p>\n<h1>La seconde ROM<\/h1>\n<p>La seconde ROM est plus volumineuse. 2048 octets, cela peut sembler petit, et \u00e7a n'est certes pas bien gros. Traduire ce contenu pour se faire une id\u00e9e assez pr\u00e9cise du fonctionnement reste tout de m\u00eame une t\u00e2che un peu fastidieuse.<\/p>\n<p>Mais c'est un exercice que je trouve n\u00e9anmoins plaisant.<\/p>\n<p>La premi\u00e8re \u00e9tape est de savoir o\u00f9 se trouve cette ROM en m\u00e9moire. Ici, la simplicit\u00e9 du 8008 aide. Les instructions de saut mentionnent toutes des adresses absolues. Une technique est alors de trouver une petite boucle d'instructions et d'en d\u00e9duire un emplacement probable.<\/p>\n<p>En effet, une boucle va mentionner une adresse proche de l'instruction de saut elle-m\u00eame. Apr\u00e8s avoir choisi une adresse probable, il reste \u00e0 la confirmer avec une paire d'autres boucles.<\/p>\n<p>Cette ROM se situe donc en <code>$3800<\/code>, c'est-\u00e0-dire tout \u00e0 la fin de l'espace adressable en m\u00e9moire du 8008, qui adresse une plage de 16 ko entre les adresses <code>$0000<\/code> et <code>$3FFF<\/code>.<\/p>\n<h2>Bouillie initiale<\/h2>\n<p>Dans ces exercices, au d\u00e9but, on nage un peu. Il faut trouver des extr\u00e9mit\u00e9s de fils, tirer dessus, et voir comment toute la pelote peut \u00eatre d\u00e9m\u00eal\u00e9e.<\/p>\n<p>La ROM commence par une sauvegarde du contexte du 8008 dans des adresses fixes.<\/p>\n<p>Puis continue en envoyant le code ASCII correspondant \u00e0 un point d'interrogation \u00e0 un p\u00e9riph\u00e9rique ext\u00e9rieur. \u00c7a ne ressemble pas \u00e0 une co\u00efncidence... y aurait-il un dialogue avec l'ext\u00e9rieur ?<\/p>\n<p>Je cherche alors s'il y a une r\u00e9cup\u00e9ration de donn\u00e9es depuis l'ext\u00e9rieur. En effet, il y en a bien une.<\/p>\n<h2>La ROM moniteur<\/h2>\n<p>Il est temps d'ouvrir le manuel du Micral N et de regarder la partie qui d\u00e9crit le moniteur, un programme qui permet d'effectuer des op\u00e9rations g\u00e9n\u00e9riques, comme lire et afficher la m\u00e9moire, charger des donn\u00e9es depuis un ruban perfor\u00e9...<\/p>\n<p>Et le manuel indique que celui-ci affiche un point d'interrogation en attendant une commande. Et les commandes, nombreuses, sont toutes form\u00e9es d'une lettre majuscule.<\/p>\n<p>Or il se trouve que dans un morceau de la ROM qui ne ressemble pas \u00e0 des instructions, ces lettres apparaissent, s\u00e9par\u00e9es par ce qui pourrait tout \u00e0 fait \u00eatre des adresses valides dans cette ROM.<\/p>\n<p>Apr\u00e8s v\u00e9rification, ces adresses sont bien des points d'entr\u00e9es de routines.<\/p>\n<p>Le doute n'est plus permis, et sera enti\u00e8rement lev\u00e9 quelques heures plus tard : il s'agit bien l\u00e0 du moniteur tel que d\u00e9crit dans le manuel.<\/p>\n<h1>Apport des ROMs<\/h1>\n<p>L'\u00e9tude des ROMs a \u00e9t\u00e9 une \u00e9tape cruciale dans la compr\u00e9hension de la machine. Le manuel n'est pas toujours tr\u00e8s clair sur le fonctionnement du Micral N. De plus, c'est une machine modulaire, qui peut avoir des configurations diverses.<\/p>\n<p>Ces deux ROMs ont permis de partir sur une configuration pr\u00e9cise, d\u00e9duite des adresses auxquelles elles sont stock\u00e9es, ainsi que des ports d'entr\u00e9es\/sortis utilis\u00e9s.<\/p>\n<p>Ce sont des informations qui me manquaient pour mod\u00e9liser \u00e0 travers l'\u00e9mulateur un d\u00e9but de configuration fonctionnelle et plausible du Micral N.<\/p>\n<p>Nous verrons cela dans un prochain article.<\/p>\n<p>N'oubliez pas de participer \u00e0 la campagne pour soutenir nos travaux ! <a href=\"https:\/\/micral.mo5.com\">https:\/\/micral.mo5.com<\/a><\/p>\n<\/div>\n<\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Par Sylvain Glaize. C&#8217;est le 5 avril 2021 qu&#8217;a lieu la tr\u00e8s importante session de dump, ou lecture et sauvegarde, des ROMs du Micral N. Ces EPROMs sont tellement anciennes qu&#8217;il est possible de voir les transistors de stockage tant la gravure est grossi\u00e8re. En nous renseignant sur leur technologie, nous apprenons que la tension \u00e9lectrique n\u00e9cessaire pour programmer ces EPROMs est de 47 volts, ce qui est \u00e9norme par rapport aux standards actuels. Cette tr\u00e8s importante diff\u00e9rence de potentiel a peut-\u00eatre prot\u00e9g\u00e9 le contenu de ces EPROMs, et nous allons nous en assurer tout de suite. \u00c0 noter que ces EPROMs sont des composants NMOS (https:\/\/fr.wikipedia.org\/wiki\/NMOS), comme le 8008 et certaines SRAMs de la machine. Ces composants\u00a0n\u00e9cessitent une alimentation bitension +5V et -9V, des niveaux logiques diff\u00e9rents des niveaux TTL classiques. Jean-Fran\u00e7ois Del Nero a pr\u00e9par\u00e9 en amont un appareil sp\u00e9cifique qui, en \u00e9tant adapt\u00e9 \u00e0 ces niveaux, va nous permettre de lire ces EPROMs. Cet outil permet, en plus de permettre la lecture de ces EPROMs 1702, de tester l&#8217;ensemble des m\u00e9moires RAM de la machine. Ces RAM (SRAMs 2102 et 4007) sont d&#8217;ailleurs en bon \u00e9tat de fonctionnement, \u00e0 part une que nous rempla\u00e7ons par une 2102A. Les sources et le sch\u00e9ma de cet outil sont disponibles sur ce d\u00e9p\u00f4t Github : &gt;&gt;&gt;Sources ici &nbsp; Tout se passe \u00e0 merveille. Le contenu des EPROMs est sauv\u00e9 ! Jean-Fran\u00e7ois et Philippe m&#8217;envoient imm\u00e9diatement le contenu fra\u00eechement sorti du \u00ab dumper \u00bb. La premi\u00e8re \u00e9tape est de v\u00e9rifier que le contenu est correct. En effet, ces octets ont \u00e9t\u00e9 stock\u00e9s pendant des ann\u00e9es sur des EPROMs. Le contenu a pu \u00eatre alt\u00e9r\u00e9. Il y a deux ROMs diff\u00e9rentes, l&#8217;une de 256 octets, l&#8217;autre de 2 kilo octets. Autant commencer par la plus courte. 256 octets, \u00e7a n&#8217;est pas tr\u00e8s long \u00e0 parcourir. La premi\u00e8re ROM Imm\u00e9diatement, l&#8217;espoir de donn\u00e9es ex\u00e9cutables est permis. En effet, les deux premi\u00e8res instructions d\u00e9cod\u00e9es sont LAA et JMP $0048. Sous ces mn\u00e9moniques se cache une s\u00e9quence de d\u00e9marrage de processeur 8008, c&#8217;est tr\u00e8s bon signe ! LAA signifie \u00ab Load from register A to register A \u00bb, autrement dit, \u00ab charge le contenu du registre (un morceau de m\u00e9moire du processeur) A vers le registre A \u00bb. Ce qui n&#8217;a pas d&#8217;effet visible sur l&#8217;\u00e9tat du processeur et est la convention pour indiquer au 8008 de&#8230; ne rien faire d&#8217;int\u00e9ressant. Un mn\u00e9monique \u00e9quivalent sur d&#8217;autres processeur est NOP, pour \u00ab No OPeration \u00bb. Cette instruction est g\u00e9n\u00e9ralement la premi\u00e8re instruction que l&#8217;on pr\u00e9sente \u00e0 un 8008 qui vient de d\u00e9marrer. En effet, du fait de son fonctionnement, le processeur va ex\u00e9cuter cette instruction deux fois. Conventionnellement, le choix se porte sur une instruction qui n&#8217;a pas d&#8217;effet visible. La seconde instruction JMP $0048 est un saut vers l&#8217;adresse indiqu\u00e9e, qui se trouve plus loin, apr\u00e8s un lot d&#8217;adresses r\u00e9serv\u00e9es. C&#8217;est l\u00e0 aussi une instruction classique, que l&#8217;on retrouve sur des machines \u00e0 base de Z80, qui pr\u00e9sente les m\u00eames premi\u00e8res adresses r\u00e9serv\u00e9es, r\u00e9v\u00e9lant une filiation. Et la suite ? \u00c0 partir de l&#8217;adresse `$0048`, cela ressemble \u00e0 un programme. Apr\u00e8s un peu de travail [&hellip;]<\/p>\n","protected":false},"author":329,"featured_media":20234,"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-583","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>Lecture et sauvegarde des ROMs du Micral N - 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\/lecture-et-sauvegarde-des-roms-du-micral-n\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lecture et sauvegarde des ROMs du Micral N - MO5.COM\" \/>\n<meta property=\"og:description\" content=\"Par Sylvain Glaize. C&#039;est le 5 avril 2021 qu&#039;a lieu la tr\u00e8s importante session de dump, ou lecture et sauvegarde, des ROMs du Micral N. Ces EPROMs sont tellement anciennes qu&#039;il est possible de voir les transistors de stockage tant la gravure est grossi\u00e8re. En nous renseignant sur leur technologie, nous apprenons que la tension \u00e9lectrique n\u00e9cessaire pour programmer ces EPROMs est de 47 volts, ce qui est \u00e9norme par rapport aux standards actuels. Cette tr\u00e8s importante diff\u00e9rence de potentiel a peut-\u00eatre prot\u00e9g\u00e9 le contenu de ces EPROMs, et nous allons nous en assurer tout de suite. \u00c0 noter que ces EPROMs sont des composants NMOS (https:\/\/fr.wikipedia.org\/wiki\/NMOS), comme le 8008 et certaines SRAMs de la machine. Ces composants\u00a0n\u00e9cessitent une alimentation bitension +5V et -9V, des niveaux logiques diff\u00e9rents des niveaux TTL classiques. Jean-Fran\u00e7ois Del Nero a pr\u00e9par\u00e9 en amont un appareil sp\u00e9cifique qui, en \u00e9tant adapt\u00e9 \u00e0 ces niveaux, va nous permettre de lire ces EPROMs. Cet outil permet, en plus de permettre la lecture de ces EPROMs 1702, de tester l&#039;ensemble des m\u00e9moires RAM de la machine. Ces RAM (SRAMs 2102 et 4007) sont d&#039;ailleurs en bon \u00e9tat de fonctionnement, \u00e0 part une que nous rempla\u00e7ons par une 2102A. Les sources et le sch\u00e9ma de cet outil sont disponibles sur ce d\u00e9p\u00f4t Github : &gt;&gt;&gt;Sources ici &nbsp; Tout se passe \u00e0 merveille. Le contenu des EPROMs est sauv\u00e9 ! Jean-Fran\u00e7ois et Philippe m&#039;envoient imm\u00e9diatement le contenu fra\u00eechement sorti du \u00ab dumper \u00bb. La premi\u00e8re \u00e9tape est de v\u00e9rifier que le contenu est correct. En effet, ces octets ont \u00e9t\u00e9 stock\u00e9s pendant des ann\u00e9es sur des EPROMs. Le contenu a pu \u00eatre alt\u00e9r\u00e9. Il y a deux ROMs diff\u00e9rentes, l&#039;une de 256 octets, l&#039;autre de 2 kilo octets. Autant commencer par la plus courte. 256 octets, \u00e7a n&#039;est pas tr\u00e8s long \u00e0 parcourir. La premi\u00e8re ROM Imm\u00e9diatement, l&#039;espoir de donn\u00e9es ex\u00e9cutables est permis. En effet, les deux premi\u00e8res instructions d\u00e9cod\u00e9es sont LAA et JMP $0048. Sous ces mn\u00e9moniques se cache une s\u00e9quence de d\u00e9marrage de processeur 8008, c&#039;est tr\u00e8s bon signe ! LAA signifie \u00ab Load from register A to register A \u00bb, autrement dit, \u00ab charge le contenu du registre (un morceau de m\u00e9moire du processeur) A vers le registre A \u00bb. Ce qui n&#039;a pas d&#039;effet visible sur l&#039;\u00e9tat du processeur et est la convention pour indiquer au 8008 de... ne rien faire d&#039;int\u00e9ressant. Un mn\u00e9monique \u00e9quivalent sur d&#039;autres processeur est NOP, pour \u00ab No OPeration \u00bb. Cette instruction est g\u00e9n\u00e9ralement la premi\u00e8re instruction que l&#039;on pr\u00e9sente \u00e0 un 8008 qui vient de d\u00e9marrer. En effet, du fait de son fonctionnement, le processeur va ex\u00e9cuter cette instruction deux fois. Conventionnellement, le choix se porte sur une instruction qui n&#039;a pas d&#039;effet visible. La seconde instruction JMP $0048 est un saut vers l&#039;adresse indiqu\u00e9e, qui se trouve plus loin, apr\u00e8s un lot d&#039;adresses r\u00e9serv\u00e9es. C&#039;est l\u00e0 aussi une instruction classique, que l&#039;on retrouve sur des machines \u00e0 base de Z80, qui pr\u00e9sente les m\u00eames premi\u00e8res adresses r\u00e9serv\u00e9es, r\u00e9v\u00e9lant une filiation. Et la suite ? \u00c0 partir de l&#039;adresse `$0048`, cela ressemble \u00e0 un programme. Apr\u00e8s un peu de travail [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mo5.com\/fr\/lecture-et-sauvegarde-des-roms-du-micral-n\/\" \/>\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-08T12:00:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-14T09:02:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mo5.com\/wp-content\/uploads\/2022\/08\/MicralN-ROM.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"750\" \/>\n\t<meta property=\"og:image:height\" content=\"563\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/mo5.com\\\/lecture-et-sauvegarde-des-roms-du-micral-n\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/lecture-et-sauvegarde-des-roms-du-micral-n\\\/\"},\"author\":{\"name\":\"Sylvain Glaize\",\"@id\":\"https:\\\/\\\/mo5.com\\\/#\\\/schema\\\/person\\\/e2593639b2e77eace001e56b26086749\"},\"headline\":\"Lecture et sauvegarde des ROMs du Micral N\",\"datePublished\":\"2023-03-08T12:00:20+00:00\",\"dateModified\":\"2023-03-14T09:02:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/lecture-et-sauvegarde-des-roms-du-micral-n\\\/\"},\"wordCount\":1455,\"publisher\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/lecture-et-sauvegarde-des-roms-du-micral-n\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/MicralN-ROM.jpg\",\"articleSection\":[\"Micral\",\"Programmation\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mo5.com\\\/lecture-et-sauvegarde-des-roms-du-micral-n\\\/\",\"url\":\"https:\\\/\\\/mo5.com\\\/lecture-et-sauvegarde-des-roms-du-micral-n\\\/\",\"name\":\"Lecture et sauvegarde des ROMs du Micral N - MO5.COM\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/lecture-et-sauvegarde-des-roms-du-micral-n\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/lecture-et-sauvegarde-des-roms-du-micral-n\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/MicralN-ROM.jpg\",\"datePublished\":\"2023-03-08T12:00:20+00:00\",\"dateModified\":\"2023-03-14T09:02:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/lecture-et-sauvegarde-des-roms-du-micral-n\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mo5.com\\\/lecture-et-sauvegarde-des-roms-du-micral-n\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/mo5.com\\\/lecture-et-sauvegarde-des-roms-du-micral-n\\\/#primaryimage\",\"url\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/MicralN-ROM.jpg\",\"contentUrl\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/MicralN-ROM.jpg\",\"width\":750,\"height\":563,\"caption\":\"MicralN ROM\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mo5.com\\\/lecture-et-sauvegarde-des-roms-du-micral-n\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/mo5.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lecture et sauvegarde des ROMs du Micral N\"}]},{\"@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":"Lecture et sauvegarde des ROMs du Micral N - 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\/lecture-et-sauvegarde-des-roms-du-micral-n\/","og_locale":"fr_FR","og_type":"article","og_title":"Lecture et sauvegarde des ROMs du Micral N - MO5.COM","og_description":"Par Sylvain Glaize. C'est le 5 avril 2021 qu'a lieu la tr\u00e8s importante session de dump, ou lecture et sauvegarde, des ROMs du Micral N. Ces EPROMs sont tellement anciennes qu'il est possible de voir les transistors de stockage tant la gravure est grossi\u00e8re. En nous renseignant sur leur technologie, nous apprenons que la tension \u00e9lectrique n\u00e9cessaire pour programmer ces EPROMs est de 47 volts, ce qui est \u00e9norme par rapport aux standards actuels. Cette tr\u00e8s importante diff\u00e9rence de potentiel a peut-\u00eatre prot\u00e9g\u00e9 le contenu de ces EPROMs, et nous allons nous en assurer tout de suite. \u00c0 noter que ces EPROMs sont des composants NMOS (https:\/\/fr.wikipedia.org\/wiki\/NMOS), comme le 8008 et certaines SRAMs de la machine. Ces composants\u00a0n\u00e9cessitent une alimentation bitension +5V et -9V, des niveaux logiques diff\u00e9rents des niveaux TTL classiques. Jean-Fran\u00e7ois Del Nero a pr\u00e9par\u00e9 en amont un appareil sp\u00e9cifique qui, en \u00e9tant adapt\u00e9 \u00e0 ces niveaux, va nous permettre de lire ces EPROMs. Cet outil permet, en plus de permettre la lecture de ces EPROMs 1702, de tester l'ensemble des m\u00e9moires RAM de la machine. Ces RAM (SRAMs 2102 et 4007) sont d'ailleurs en bon \u00e9tat de fonctionnement, \u00e0 part une que nous rempla\u00e7ons par une 2102A. Les sources et le sch\u00e9ma de cet outil sont disponibles sur ce d\u00e9p\u00f4t Github : &gt;&gt;&gt;Sources ici &nbsp; Tout se passe \u00e0 merveille. Le contenu des EPROMs est sauv\u00e9 ! Jean-Fran\u00e7ois et Philippe m'envoient imm\u00e9diatement le contenu fra\u00eechement sorti du \u00ab dumper \u00bb. La premi\u00e8re \u00e9tape est de v\u00e9rifier que le contenu est correct. En effet, ces octets ont \u00e9t\u00e9 stock\u00e9s pendant des ann\u00e9es sur des EPROMs. Le contenu a pu \u00eatre alt\u00e9r\u00e9. Il y a deux ROMs diff\u00e9rentes, l'une de 256 octets, l'autre de 2 kilo octets. Autant commencer par la plus courte. 256 octets, \u00e7a n'est pas tr\u00e8s long \u00e0 parcourir. La premi\u00e8re ROM Imm\u00e9diatement, l'espoir de donn\u00e9es ex\u00e9cutables est permis. En effet, les deux premi\u00e8res instructions d\u00e9cod\u00e9es sont LAA et JMP $0048. Sous ces mn\u00e9moniques se cache une s\u00e9quence de d\u00e9marrage de processeur 8008, c'est tr\u00e8s bon signe ! LAA signifie \u00ab Load from register A to register A \u00bb, autrement dit, \u00ab charge le contenu du registre (un morceau de m\u00e9moire du processeur) A vers le registre A \u00bb. Ce qui n'a pas d'effet visible sur l'\u00e9tat du processeur et est la convention pour indiquer au 8008 de... ne rien faire d'int\u00e9ressant. Un mn\u00e9monique \u00e9quivalent sur d'autres processeur est NOP, pour \u00ab No OPeration \u00bb. Cette instruction est g\u00e9n\u00e9ralement la premi\u00e8re instruction que l'on pr\u00e9sente \u00e0 un 8008 qui vient de d\u00e9marrer. En effet, du fait de son fonctionnement, le processeur va ex\u00e9cuter cette instruction deux fois. Conventionnellement, le choix se porte sur une instruction qui n'a pas d'effet visible. La seconde instruction JMP $0048 est un saut vers l'adresse indiqu\u00e9e, qui se trouve plus loin, apr\u00e8s un lot d'adresses r\u00e9serv\u00e9es. C'est l\u00e0 aussi une instruction classique, que l'on retrouve sur des machines \u00e0 base de Z80, qui pr\u00e9sente les m\u00eames premi\u00e8res adresses r\u00e9serv\u00e9es, r\u00e9v\u00e9lant une filiation. Et la suite ? \u00c0 partir de l'adresse `$0048`, cela ressemble \u00e0 un programme. Apr\u00e8s un peu de travail [&hellip;]","og_url":"https:\/\/mo5.com\/fr\/lecture-et-sauvegarde-des-roms-du-micral-n\/","og_site_name":"MO5.COM","article_publisher":"https:\/\/www.facebook.com\/pages\/Association-MO5COM\/9540357570","article_published_time":"2023-03-08T12:00:20+00:00","article_modified_time":"2023-03-14T09:02:49+00:00","og_image":[{"width":750,"height":563,"url":"https:\/\/mo5.com\/wp-content\/uploads\/2022\/08\/MicralN-ROM.jpg","type":"image\/jpeg"}],"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":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mo5.com\/lecture-et-sauvegarde-des-roms-du-micral-n\/#article","isPartOf":{"@id":"https:\/\/mo5.com\/lecture-et-sauvegarde-des-roms-du-micral-n\/"},"author":{"name":"Sylvain Glaize","@id":"https:\/\/mo5.com\/#\/schema\/person\/e2593639b2e77eace001e56b26086749"},"headline":"Lecture et sauvegarde des ROMs du Micral N","datePublished":"2023-03-08T12:00:20+00:00","dateModified":"2023-03-14T09:02:49+00:00","mainEntityOfPage":{"@id":"https:\/\/mo5.com\/lecture-et-sauvegarde-des-roms-du-micral-n\/"},"wordCount":1455,"publisher":{"@id":"https:\/\/mo5.com\/#organization"},"image":{"@id":"https:\/\/mo5.com\/lecture-et-sauvegarde-des-roms-du-micral-n\/#primaryimage"},"thumbnailUrl":"https:\/\/mo5.com\/wp-content\/uploads\/2022\/08\/MicralN-ROM.jpg","articleSection":["Micral","Programmation"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/mo5.com\/lecture-et-sauvegarde-des-roms-du-micral-n\/","url":"https:\/\/mo5.com\/lecture-et-sauvegarde-des-roms-du-micral-n\/","name":"Lecture et sauvegarde des ROMs du Micral N - MO5.COM","isPartOf":{"@id":"https:\/\/mo5.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mo5.com\/lecture-et-sauvegarde-des-roms-du-micral-n\/#primaryimage"},"image":{"@id":"https:\/\/mo5.com\/lecture-et-sauvegarde-des-roms-du-micral-n\/#primaryimage"},"thumbnailUrl":"https:\/\/mo5.com\/wp-content\/uploads\/2022\/08\/MicralN-ROM.jpg","datePublished":"2023-03-08T12:00:20+00:00","dateModified":"2023-03-14T09:02:49+00:00","breadcrumb":{"@id":"https:\/\/mo5.com\/lecture-et-sauvegarde-des-roms-du-micral-n\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mo5.com\/lecture-et-sauvegarde-des-roms-du-micral-n\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/mo5.com\/lecture-et-sauvegarde-des-roms-du-micral-n\/#primaryimage","url":"https:\/\/mo5.com\/wp-content\/uploads\/2022\/08\/MicralN-ROM.jpg","contentUrl":"https:\/\/mo5.com\/wp-content\/uploads\/2022\/08\/MicralN-ROM.jpg","width":750,"height":563,"caption":"MicralN ROM"},{"@type":"BreadcrumbList","@id":"https:\/\/mo5.com\/lecture-et-sauvegarde-des-roms-du-micral-n\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/mo5.com\/"},{"@type":"ListItem","position":2,"name":"Lecture et sauvegarde des ROMs du Micral N"}]},{"@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\/583","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=583"}],"version-history":[{"count":0,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/posts\/583\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/media\/20234"}],"wp:attachment":[{"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/media?parent=583"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/categories?post=583"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/tags?post=583"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}