<?xml version="1.0"?>
<oembed><version>1.0</version><provider_name>MO5.COM</provider_name><provider_url>http://mo5.com/fr</provider_url><title>Programmer le Micral N - MO5.COM</title><type>rich</type><width>600</width><height>338</height><html>&lt;blockquote class="wp-embedded-content" data-secret="cMpZPEzts5"&gt;&lt;a href="http://mo5.com/fr/programmer-le-micral-n/"&gt;Programmer le Micral N&lt;/a&gt;&lt;/blockquote&gt;&lt;iframe sandbox="allow-scripts" security="restricted" src="http://mo5.com/fr/programmer-le-micral-n/embed/#?secret=cMpZPEzts5" width="600" height="338" title="&#xAB;&#xA0;Programmer le Micral N&#xA0;&#xBB; &#x2014; MO5.COM" data-secret="cMpZPEzts5" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" class="wp-embedded-content"&gt;&lt;/iframe&gt;&lt;script type="text/javascript"&gt;
/* &lt;![CDATA[ */
/*! This file is auto-generated */
!function(d,l){"use strict";l.querySelector&amp;&amp;d.addEventListener&amp;&amp;"undefined"!=typeof URL&amp;&amp;(d.wp=d.wp||{},d.wp.receiveEmbedMessage||(d.wp.receiveEmbedMessage=function(e){var t=e.data;if((t||t.secret||t.message||t.value)&amp;&amp;!/[^a-zA-Z0-9]/.test(t.secret)){for(var s,r,n,a=l.querySelectorAll('iframe[data-secret="'+t.secret+'"]'),o=l.querySelectorAll('blockquote[data-secret="'+t.secret+'"]'),c=new RegExp("^https?:$","i"),i=0;i&lt;o.length;i++)o[i].style.display="none";for(i=0;i&lt;a.length;i++)s=a[i],e.source===s.contentWindow&amp;&amp;(s.removeAttribute("style"),"height"===t.message?(1e3&lt;(r=parseInt(t.value,10))?r=1e3:~~r&lt;200&amp;&amp;(r=200),s.height=r):"link"===t.message&amp;&amp;(r=new URL(s.getAttribute("src")),n=new URL(t.value),c.test(n.protocol))&amp;&amp;n.host===r.host&amp;&amp;l.activeElement===s&amp;&amp;(d.top.location.href=t.value))}},d.addEventListener("message",d.wp.receiveEmbedMessage,!1),l.addEventListener("DOMContentLoaded",function(){for(var e,t,s=l.querySelectorAll("iframe.wp-embedded-content"),r=0;r&lt;s.length;r++)(t=(e=s[r]).getAttribute("data-secret"))||(t=Math.random().toString(36).substring(2,12),e.src+="#?secret="+t,e.setAttribute("data-secret",t)),e.contentWindow.postMessage({message:"ready",secret:t},"*")},!1)))}(window,document);
//# sourceURL=http://mo5.com/wp-includes/js/wp-embed.min.js
/* ]]&gt; */
&lt;/script&gt;
</html><thumbnail_url>https://mo5.com/wp-content/uploads/2023/05/20230501-MicralN-Emulation-Panel-Chenillard.gif</thumbnail_url><thumbnail_width>474</thumbnail_width><thumbnail_height>268</thumbnail_height><description>Par Sylvain Glaize Nous avons donc un mat&#xE9;riel fonctionnel, une &#xE9;mulation fonctionnelle. Nous avons aussi de quoi communiquer avec la machine via le port s&#xE9;rie. Il est temps de pr&#xE9;voir quelques programmes qui pourraient &#xEA;tre lanc&#xE9;s. Pour cela, il est pr&#xE9;vu d&#x2019;utiliser un simulateur de lecteur de disquette, mais cette partie l&#xE0; viendra dans un article futur. Pour le moment, parlons programmation du Micral N. Le boot Au d&#xE9;marrage de la machine dans la configuration de notre exemplaire, la ROM pr&#xE9;sente sur la carte de &#xAB; boot &#xBB; se charge d&#x2019;aller chercher des donn&#xE9;es depuis un lecteur de disquette. Ce n&#x2019;est pas obligatoire sur un Micral N, qui pourrait contenir directement un logiciel &#xE0; ex&#xE9;cuter, ou bien lire des donn&#xE9;es depuis un autre p&#xE9;riph&#xE9;rique. Notre configuration semble &#xEA;tre faite pour s&#x2019;adapter &#xE0; un logiciel qui peut &#xEA;tre modifi&#xE9; facilement. Ce programme de d&#xE9;marrage lit les 14 premiers kilo-octets de donn&#xE9;es pr&#xE9;sents sur la disquette et les copie en m&#xE9;moire vive &#xE0; partir des adresses basses. La carte de &#xAB; boot &#xBB; est alors dans un mode o&#xF9; la lecture de donn&#xE9;es se fait depuis la ROM, mais o&#xF9; l&#x2019;&#xE9;criture se fait en RAM pour les adresses communes. Une fois le chargement des donn&#xE9;es termin&#xE9;, le programme provoque un reset de la machine, qui est rep&#xE9;r&#xE9; par la carte de &#xAB; boot &#xBB; qui ne permet plus l&#x2019;acc&#xE8;s &#xE0; la ROM. Ainsi, le programme venant de la disquette est enti&#xE8;rement disponible, et a le contr&#xF4;le complet de la machine. Le syst&#xE8;me Nous n&#x2019;avons pas de logiciel original pour cette machine, &#xE0; part le contenu des deux ROMs. Cependant, il est possible d&#x2019;imaginer que ces donn&#xE9;es peuvent soit constituer un programme utilis&#xE9; directement soit un syst&#xE8;me d&#x2019;exploitation. Les 2 kilo-octets du moniteur en haut de la m&#xE9;moire ne forment pas un syst&#xE8;me en soit. C&#x2019;est un programme dans lequel on peut entrer pour op&#xE9;rer et debugger la machine. Mais cette partie n&#x2019;est pas construite comme un syst&#xE8;me dont on pourrait appeler des fonctions pr&#xE9;d&#xE9;finies. En fait, cette ROM moniteur pourrait &#xEA;tre tout aussi bien remplac&#xE9;e par de la RAM. Particularit&#xE9;s du programme de boot Ce programme, tr&#xE8;s court (199 octets utiles), utilise les deux cartes Pile/Canal. L&#x2019;une d&#x2019;elles est utilis&#xE9;e comme m&#xE9;moire secondaire sous forme de pile. En effet, le 8008 n&#x2019;a pas de gestion de pile en RAM comme on peut en trouver sur le Z80. Ce processeur n&#x2019;a qu&#x2019;une toute petite pile d&#x2019;adresses, interne et non accessible, qui servent aux appels de sous-routines. Cette carte de m&#xE9;moire secondaire sert pour calculer la somme de contr&#xF4;le des donn&#xE9;es lues depuis la disquette, sans avoir besoin de la RAM, qui est en train d&#x2019;&#xEA;tre remplie par ces dites donn&#xE9;es. Cela nous apprend donc que pour &#xE9;crire dans cette pile, il faut utiliser l&#x2019;instruction `OUT $16` (envoyer sur le port de sortie num&#xE9;ro $16 en hexad&#xE9;cimal). Pour lire depuis la pile, il faut utiliser l&#x2019;instruction `INP $6` (lire depuis le porte d&#x2019;entr&#xE9;e num&#xE9;ro 6). L&#x2019;autre carte sert de buffer de lecture. Le programme y place le nombre d&#x2019;octets attendus, puis demande au contr&#xF4;leur de disquette de lancer la lecture. Une fois le nombre [&hellip;]</description></oembed>
