{"id":645,"date":"2023-05-03T14:00:43","date_gmt":"2023-05-03T12:00:43","guid":{"rendered":"https:\/\/mo5.com\/micral\/?p=645"},"modified":"2023-05-03T14:45:55","modified_gmt":"2023-05-03T12:45:55","slug":"programmer-le-micral-n","status":"publish","type":"post","link":"http:\/\/mo5.com\/fr\/programmer-le-micral-n\/","title":{"rendered":"Programmer le Micral N"},"content":{"rendered":"<p><em>Par Sylvain Glaize<\/em><\/p>\n<p>Nous avons donc un mat\u00e9riel fonctionnel, une \u00e9mulation fonctionnelle. Nous avons aussi de quoi communiquer avec la machine via le port s\u00e9rie. Il est temps de pr\u00e9voir quelques programmes qui pourraient \u00eatre lanc\u00e9s.<\/p>\n<p>Pour cela, il est pr\u00e9vu d&#8217;utiliser un simulateur de lecteur de disquette, mais cette partie l\u00e0 viendra dans un article futur.<\/p>\n<p>Pour le moment, parlons programmation du Micral N.<\/p>\n<h2>Le boot<\/h2>\n<p>Au d\u00e9marrage de la machine dans la configuration de notre exemplaire, la ROM pr\u00e9sente sur la carte de \u00ab boot \u00bb se charge d&#8217;aller chercher des donn\u00e9es depuis un lecteur de disquette.<\/p>\n<p>Ce n&#8217;est pas obligatoire sur un Micral N, qui pourrait contenir directement un logiciel \u00e0 ex\u00e9cuter, ou bien lire des donn\u00e9es depuis un autre p\u00e9riph\u00e9rique. Notre configuration semble \u00eatre faite pour s&#8217;adapter \u00e0 un logiciel qui peut \u00eatre modifi\u00e9 facilement.<\/p>\n<p>Ce programme de d\u00e9marrage lit les 14 premiers kilo-octets de donn\u00e9es pr\u00e9sents sur la disquette et les copie en m\u00e9moire vive \u00e0 partir des adresses basses. La carte de \u00ab boot \u00bb est alors dans un mode o\u00f9 la lecture de donn\u00e9es se fait depuis la ROM, mais o\u00f9 l&#8217;\u00e9criture se fait en RAM pour les adresses communes.<\/p>\n<p>Une fois le chargement des donn\u00e9es termin\u00e9, le programme provoque un reset de la machine, qui est rep\u00e9r\u00e9 par la carte de \u00ab boot \u00bb qui ne permet plus l&#8217;acc\u00e8s \u00e0 la ROM. Ainsi, le programme venant de la disquette est enti\u00e8rement disponible, et a le contr\u00f4le complet de la machine.<\/p>\n<h2>Le syst\u00e8me<\/h2>\n<p>Nous n&#8217;avons pas de logiciel original pour cette machine, \u00e0 part le contenu des deux ROMs. Cependant, il est possible d&#8217;imaginer que ces donn\u00e9es peuvent soit constituer un programme utilis\u00e9 directement soit un syst\u00e8me d&#8217;exploitation.<\/p>\n<p>Les 2 kilo-octets du moniteur en haut de la m\u00e9moire ne forment pas un syst\u00e8me en soit. C&#8217;est un programme dans lequel on peut entrer pour op\u00e9rer et debugger la machine. Mais cette partie n&#8217;est pas construite comme un syst\u00e8me dont on pourrait appeler des fonctions pr\u00e9d\u00e9finies. En fait, cette ROM moniteur pourrait \u00eatre tout aussi bien remplac\u00e9e par de la RAM.<\/p>\n<h2>Particularit\u00e9s du programme de boot<\/h2>\n<p>Ce programme, tr\u00e8s court (199 octets utiles), utilise les deux cartes Pile\/Canal. L&#8217;une d&#8217;elles est utilis\u00e9e comme m\u00e9moire secondaire sous forme de pile. En effet, le 8008 n&#8217;a pas de gestion de pile en RAM comme on peut en trouver sur le Z80. Ce processeur n&#8217;a qu&#8217;une toute petite pile d&#8217;adresses, interne et non accessible, qui servent aux appels de sous-routines.<\/p>\n<p>Cette carte de m\u00e9moire secondaire sert pour calculer la somme de contr\u00f4le des donn\u00e9es lues depuis la disquette, sans avoir besoin de la RAM, qui est en train d&#8217;\u00eatre remplie par ces dites donn\u00e9es.<\/p>\n<p>Cela nous apprend donc que pour \u00e9crire dans cette pile, il faut utiliser l&#8217;instruction `OUT $16` (envoyer sur le port de sortie num\u00e9ro $16 en hexad\u00e9cimal). Pour lire depuis la pile, il faut utiliser l&#8217;instruction `INP $6` (lire depuis le porte d&#8217;entr\u00e9e num\u00e9ro 6).<\/p>\n<p>L&#8217;autre carte sert de buffer de lecture. Le programme y place le nombre d&#8217;octets attendus, puis demande au contr\u00f4leur de disquette de lancer la lecture. Une fois le nombre d&#8217;octets attendus re\u00e7us par la carte, celle-ci le signale, et le processeur peut alors les lire pour les traiter.<\/p>\n<h2>Le temps qui passe<\/h2>\n<p>Une autre chose int\u00e9ressante de ce programme de \u00ab boot \u00bb est l&#8217;utilisation de l&#8217;horloge g\u00e9n\u00e9r\u00e9e par la carte processeur. Ce fonctionnement est th\u00e9oriquement optionnel, car il est possible de le d\u00e9sactiver. Cependant, sur notre exemplaire, il est obligatoire.<\/p>\n<p>En effet, chaque coup d&#8217;horloge g\u00e9n\u00e8re une interruption sur le 8008 qui va brancher sur le `Reset 7`, \u00e0 l&#8217;adresse $38 (les habitu\u00e9s du Z80 reconna\u00eetront). \u00c0 cette adresse se trouve une gestion de compteur, qui est initialis\u00e9 puis lu dans une routine qui sert donc de boucle d&#8217;attente sur un temps pr\u00e9cis.<\/p>\n<p>Cette routine est n\u00e9cessaire \u00e0 la g\u00e9n\u00e9ration des signaux envoy\u00e9s \u00e0 la carte contr\u00f4leur de disquettes.<\/p>\n<h2>Particularit\u00e9s du moniteur<\/h2>\n<p>La premi\u00e8re particularit\u00e9 du moniteur est qu&#8217;il faut l&#8217;appeler explicitement. Soit depuis un programme en RAM, soit depuis une s\u00e9quence entr\u00e9e par le panneau de contr\u00f4le.<\/p>\n<p>Ce programme a besoin d&#8217;une plage de RAM r\u00e9serv\u00e9e pour loger quelques variables de fonctionnement, entre $070e et $07ff. \u00c0 garder en t\u00eate si l&#8217;on veut utiliser un programme en RAM en m\u00eame temps que le moniteur.<\/p>\n<p>Dans ces variables se trouvent sauv\u00e9 l&#8217;\u00e9tat des registres au moment de l&#8217;arriv\u00e9e dans le moniteur. \u00c0 une exception notable pr\u00eat : il n&#8217;est pas possible d&#8217;acc\u00e9der au pointeur d&#8217;instruction (registre PC) depuis un programme.<\/p>\n<p>Une autre de ces variables sert de trampoline pour programmer un saut indirect. En effet, il n&#8217;y a pas d&#8217;instruction dans le 8008 pour faire un saut vers l&#8217;adresse contenue dans un registre. Il faut donc g\u00e9n\u00e9rer cette s\u00e9quence par code auto modifiable.<\/p>\n<p>Dans le moniteur, cela se fait en deux \u00e9tapes : d&#8217;abord modifier l&#8217;adresse de destination d&#8217;une instruction de saut (`JMP`) \u00e0 partir d&#8217;un registre. Puis de faire un saut \u00e0 l&#8217;adresse absolue de cette instruction modifi\u00e9e.<\/p>\n<p>Cette technique est utilis\u00e9e partout dans le code du moniteur, conjointement \u00e0 l&#8217;utilisation de la carte Pile pour suivre les piles d&#8217;appels de sous-routine. Mon analyse est que cela permet, au prix d&#8217;une certaine lenteur, de pr\u00e9server la pile d&#8217;appels interne au 8008. Il n&#8217;y a jamais plus d&#8217;une seule profondeur d&#8217;appel de sous-routine dans le moniteur.<\/p>\n<h2>Lire et \u00e9crire<\/h2>\n<p>Autre partie tr\u00e8s int\u00e9ressante du moniteur : le programme lit et \u00e9crit sur le port s\u00e9rie. Il peut aussi lire et \u00e9crire sur un mat\u00e9riel pour ruban perfor\u00e9. Il est m\u00eame capable d&#8217;injecter en m\u00e9moire des donn\u00e9es depuis un tel ruban.<\/p>\n<p>Mais ce qui nous int\u00e9resse en premier lieu, c&#8217;est les \u00e9changes avec la carte d&#8217;entr\u00e9e\/sortie s\u00e9rie.<\/p>\n<p>Et ce syst\u00e8me est tr\u00e8s simple : en \u00e9criture, un bit est lu jusqu&#8217;\u00e0 ce qu&#8217;il indique que la carte est pr\u00eate \u00e0 recevoir. D\u00e8s qu&#8217;elle est pr\u00eate, l&#8217;octet est envoy\u00e9. Pour la lecture, c&#8217;est presque pareil : attente d&#8217;un bit signalant que la donn\u00e9e peut \u00eatre lue, puis lecture d&#8217;un octet jusqu&#8217;\u00e0 ce que celui-ci soit diff\u00e9rent de 255.<\/p>\n<p>Le protocole, incluant le d\u00e9bit, est g\u00e9r\u00e9 par la carte s\u00e9rie. Il n&#8217;y a donc pas besoin de s&#8217;occuper de temps au niveau du processeur.<\/p>\n<h2>Niveau 1 : Chenillard maison<\/h2>\n<p>Le premier programme que j&#8217;ai \u00e9crit \u00e0 destination du mat\u00e9riel r\u00e9el a \u00e9t\u00e9 un chenillard : un programme qui allume les LEDs du panneau de contr\u00f4le les unes apr\u00e8s les autres.<\/p>\n<p>C&#8217;est un standard. Et surtout, cela permettait de s&#8217;assurer de l&#8217;ex\u00e9cution du programme sans avoir \u00e0 brancher la liaison s\u00e9rie.<\/p>\n<p>Comme il n&#8217;est pas possible d&#8217;acc\u00e9der directement aux LEDs du panneau de contr\u00f4le, qui ne fait qu&#8217;afficher ce qui se trouve sur les bus d&#8217;adresses et de donn\u00e9es, l&#8217;astuce classique est de faire tourner en boucle un programme qui se situe \u00e0 des adresses particuli\u00e8res afin de g\u00e9n\u00e9rer l&#8217;affichage des bonnes LEDs.<\/p>\n<p>Une petite boucle de temporisation se trouve donc aux adresses $0100, $0200, $0400, $0800, $1000 et $2000.<\/p>\n<p>Le programme \u00e9met aussi sur le port s\u00e9rie une forme ASCII du logo de l&#8217;association.<\/p>\n<div id=\"attachment_20659\" style=\"width: 584px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-20659\" class=\"wp-image-20659 size-full\" title=\"20230501 MicralN Emulation TTY Chenillard\" src=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-TTY-Chenillard.png\" alt=\"\" width=\"574\" height=\"178\" srcset=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-TTY-Chenillard.png 574w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-TTY-Chenillard-300x93.png 300w\"  sizes=\"(max-width: 574px) 100vw, 574px\" \/><p id=\"caption-attachment-20659\" class=\"wp-caption-text\">&#8220;Logo&#8221; MO5.com affich\u00e9 sur la sortie s\u00e9rie.<\/p><\/div>\n<div id=\"attachment_20658\" style=\"width: 484px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-20658\" class=\"wp-image-20658 size-full\" title=\"20230501 MicralN Emulation Panel Chenillard\" src=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-Panel-Chenillard.gif\" alt=\"20230501 MicralN Emulation Panel Chenillard\" width=\"474\" height=\"268\" \/><p id=\"caption-attachment-20658\" class=\"wp-caption-text\">Chenillard affich\u00e9 sur le panneau de commande, sur l&#8217;\u00e9mulateur du Micral N (les LEDs sont vertes sur l&#8217;\u00e9mulateur, et non rouge comme sur le vrai mat\u00e9riel)<\/p><\/div>\n<h2>Niveau 2 : Shooting Stars<\/h2>\n<p>Si nous n&#8217;avons pas pu trouver de logiciel sp\u00e9cifiquement \u00e9crit pour Micral N, il en existe pour d&#8217;autres machines construites autour du 8008. C&#8217;est le cas du SCELBI sur lequel on peut trouver quelques programmes de jeu.<\/p>\n<p>J&#8217;en ai choisi un, nomm\u00e9 Shooting Stars, car assez simple, et je l&#8217;ai adapt\u00e9.<\/p>\n<p>Le voici sur l&#8217;\u00e9mulateur, en attendant de le voir tourner sur la vraie machine.<\/p>\n<div id=\"attachment_20660\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-20660\" class=\"wp-image-20660 size-full\" title=\"20230501 MicralN Emulation ShootingStars\" src=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-ShootingStars.png\" alt=\"20230501 MicralN Emulation ShootingStars\" width=\"390\" height=\"571\" srcset=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-ShootingStars.png 390w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-ShootingStars-205x300.png 205w\"  sizes=\"(max-width: 390px) 100vw, 390px\" \/><p id=\"caption-attachment-20660\" class=\"wp-caption-text\">Le jeu Shooting Stars, originellement cr\u00e9\u00e9 pour le SCELBI, port\u00e9 sur Micral N<\/p><\/div>\n<h2>Niveau 3 : un BASIC<\/h2>\n<p>C&#8217;est encore le SCELBI qui nous d\u00e9panne pour cette troisi\u00e8me exp\u00e9rience. En effet, une version de BASIC a \u00e9t\u00e9 impl\u00e9ment\u00e9e sous le nom de SCELBAL, et les sources sont disponibles et document\u00e9es.<\/p>\n<p>Il a fallu quelques adaptations, mais le programme \u00e9tait assez bien pens\u00e9 pour \u00eatre modifi\u00e9 facilement. Il est m\u00eame pr\u00e9vu de pouvoir y brancher des routines de sauvegarde et de chargement du programme, ce qui serait tout \u00e0 fait possible sur le Micral N avec son contr\u00f4leur de disquette.<\/p>\n<p>Cependant, ce n&#8217;est pas un exercice que j&#8217;ai pouss\u00e9 jusque-l\u00e0.<\/p>\n<p>En attendant, programmons en BASIC dans l&#8217;\u00e9mulateur du Micral N.<\/p>\n<div id=\"attachment_20661\" style=\"width: 535px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-20661\" class=\"wp-image-20661 size-full\" title=\"20230501 MicralN Emulation Scelbal\" src=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-Scelbal.png\" alt=\"20230501 MicralN Emulation Scelbal\" width=\"525\" height=\"261\" srcset=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-Scelbal.png 525w, https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-Scelbal-300x149.png 300w\"  sizes=\"(max-width: 525px) 100vw, 525px\" \/><p id=\"caption-attachment-20661\" class=\"wp-caption-text\">SCELBAL, le BASIC du SCELBI, port\u00e9 sur Micral N<\/p><\/div>\n<p>Voil\u00e0, on y est presque. Il reste \u00e0 mettre ces programmes sur l&#8217;\u00e9mulateur de disquette, brancher le tout et de laisser la magie s&#8217;op\u00e9rer.<\/p>\n<p>Ce sera le sujet du prochain article.<\/p>\n<p>En attendant, n&#8217;oubliez pas de participer \u00e0 notre campagne ! <a href=\"https:\/\/micral.mo5.com\">https:\/\/micral.mo5.com<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Par Sylvain Glaize Nous avons donc un mat\u00e9riel fonctionnel, une \u00e9mulation fonctionnelle. Nous avons aussi de quoi communiquer avec la machine via le port s\u00e9rie. Il est temps de pr\u00e9voir quelques programmes qui pourraient \u00eatre lanc\u00e9s. Pour cela, il est pr\u00e9vu d&#8217;utiliser un simulateur de lecteur de disquette, mais cette partie l\u00e0 viendra dans un article futur. Pour le moment, parlons programmation du Micral N. Le boot Au d\u00e9marrage de la machine dans la configuration de notre exemplaire, la ROM pr\u00e9sente sur la carte de \u00ab boot \u00bb se charge d&#8217;aller chercher des donn\u00e9es depuis un lecteur de disquette. Ce n&#8217;est pas obligatoire sur un Micral N, qui pourrait contenir directement un logiciel \u00e0 ex\u00e9cuter, ou bien lire des donn\u00e9es depuis un autre p\u00e9riph\u00e9rique. Notre configuration semble \u00eatre faite pour s&#8217;adapter \u00e0 un logiciel qui peut \u00eatre modifi\u00e9 facilement. Ce programme de d\u00e9marrage lit les 14 premiers kilo-octets de donn\u00e9es pr\u00e9sents sur la disquette et les copie en m\u00e9moire vive \u00e0 partir des adresses basses. La carte de \u00ab boot \u00bb est alors dans un mode o\u00f9 la lecture de donn\u00e9es se fait depuis la ROM, mais o\u00f9 l&#8217;\u00e9criture se fait en RAM pour les adresses communes. Une fois le chargement des donn\u00e9es termin\u00e9, le programme provoque un reset de la machine, qui est rep\u00e9r\u00e9 par la carte de \u00ab boot \u00bb qui ne permet plus l&#8217;acc\u00e8s \u00e0 la ROM. Ainsi, le programme venant de la disquette est enti\u00e8rement disponible, et a le contr\u00f4le complet de la machine. Le syst\u00e8me Nous n&#8217;avons pas de logiciel original pour cette machine, \u00e0 part le contenu des deux ROMs. Cependant, il est possible d&#8217;imaginer que ces donn\u00e9es peuvent soit constituer un programme utilis\u00e9 directement soit un syst\u00e8me d&#8217;exploitation. Les 2 kilo-octets du moniteur en haut de la m\u00e9moire ne forment pas un syst\u00e8me en soit. C&#8217;est un programme dans lequel on peut entrer pour op\u00e9rer et debugger la machine. Mais cette partie n&#8217;est pas construite comme un syst\u00e8me dont on pourrait appeler des fonctions pr\u00e9d\u00e9finies. En fait, cette ROM moniteur pourrait \u00eatre tout aussi bien remplac\u00e9e par de la RAM. Particularit\u00e9s du programme de boot Ce programme, tr\u00e8s court (199 octets utiles), utilise les deux cartes Pile\/Canal. L&#8217;une d&#8217;elles est utilis\u00e9e comme m\u00e9moire secondaire sous forme de pile. En effet, le 8008 n&#8217;a pas de gestion de pile en RAM comme on peut en trouver sur le Z80. Ce processeur n&#8217;a qu&#8217;une toute petite pile d&#8217;adresses, interne et non accessible, qui servent aux appels de sous-routines. Cette carte de m\u00e9moire secondaire sert pour calculer la somme de contr\u00f4le des donn\u00e9es lues depuis la disquette, sans avoir besoin de la RAM, qui est en train d&#8217;\u00eatre remplie par ces dites donn\u00e9es. Cela nous apprend donc que pour \u00e9crire dans cette pile, il faut utiliser l&#8217;instruction `OUT $16` (envoyer sur le port de sortie num\u00e9ro $16 en hexad\u00e9cimal). Pour lire depuis la pile, il faut utiliser l&#8217;instruction `INP $6` (lire depuis le porte d&#8217;entr\u00e9e num\u00e9ro 6). L&#8217;autre carte sert de buffer de lecture. Le programme y place le nombre d&#8217;octets attendus, puis demande au contr\u00f4leur de disquette de lancer la lecture. Une fois le nombre [&hellip;]<\/p>\n","protected":false},"author":329,"featured_media":20658,"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-645","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>Programmer le 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\/programmer-le-micral-n\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Programmer le Micral N - MO5.COM\" \/>\n<meta property=\"og:description\" content=\"Par Sylvain Glaize Nous avons donc un mat\u00e9riel fonctionnel, une \u00e9mulation fonctionnelle. Nous avons aussi de quoi communiquer avec la machine via le port s\u00e9rie. Il est temps de pr\u00e9voir quelques programmes qui pourraient \u00eatre lanc\u00e9s. Pour cela, il est pr\u00e9vu d&#8217;utiliser un simulateur de lecteur de disquette, mais cette partie l\u00e0 viendra dans un article futur. Pour le moment, parlons programmation du Micral N. Le boot Au d\u00e9marrage de la machine dans la configuration de notre exemplaire, la ROM pr\u00e9sente sur la carte de \u00ab boot \u00bb se charge d&#8217;aller chercher des donn\u00e9es depuis un lecteur de disquette. Ce n&#8217;est pas obligatoire sur un Micral N, qui pourrait contenir directement un logiciel \u00e0 ex\u00e9cuter, ou bien lire des donn\u00e9es depuis un autre p\u00e9riph\u00e9rique. Notre configuration semble \u00eatre faite pour s&#8217;adapter \u00e0 un logiciel qui peut \u00eatre modifi\u00e9 facilement. Ce programme de d\u00e9marrage lit les 14 premiers kilo-octets de donn\u00e9es pr\u00e9sents sur la disquette et les copie en m\u00e9moire vive \u00e0 partir des adresses basses. La carte de \u00ab boot \u00bb est alors dans un mode o\u00f9 la lecture de donn\u00e9es se fait depuis la ROM, mais o\u00f9 l&#8217;\u00e9criture se fait en RAM pour les adresses communes. Une fois le chargement des donn\u00e9es termin\u00e9, le programme provoque un reset de la machine, qui est rep\u00e9r\u00e9 par la carte de \u00ab boot \u00bb qui ne permet plus l&#8217;acc\u00e8s \u00e0 la ROM. Ainsi, le programme venant de la disquette est enti\u00e8rement disponible, et a le contr\u00f4le complet de la machine. Le syst\u00e8me Nous n&#8217;avons pas de logiciel original pour cette machine, \u00e0 part le contenu des deux ROMs. Cependant, il est possible d&#8217;imaginer que ces donn\u00e9es peuvent soit constituer un programme utilis\u00e9 directement soit un syst\u00e8me d&#8217;exploitation. Les 2 kilo-octets du moniteur en haut de la m\u00e9moire ne forment pas un syst\u00e8me en soit. C&#8217;est un programme dans lequel on peut entrer pour op\u00e9rer et debugger la machine. Mais cette partie n&#8217;est pas construite comme un syst\u00e8me dont on pourrait appeler des fonctions pr\u00e9d\u00e9finies. En fait, cette ROM moniteur pourrait \u00eatre tout aussi bien remplac\u00e9e par de la RAM. Particularit\u00e9s du programme de boot Ce programme, tr\u00e8s court (199 octets utiles), utilise les deux cartes Pile\/Canal. L&#8217;une d&#8217;elles est utilis\u00e9e comme m\u00e9moire secondaire sous forme de pile. En effet, le 8008 n&#8217;a pas de gestion de pile en RAM comme on peut en trouver sur le Z80. Ce processeur n&#8217;a qu&#8217;une toute petite pile d&#8217;adresses, interne et non accessible, qui servent aux appels de sous-routines. Cette carte de m\u00e9moire secondaire sert pour calculer la somme de contr\u00f4le des donn\u00e9es lues depuis la disquette, sans avoir besoin de la RAM, qui est en train d&#8217;\u00eatre remplie par ces dites donn\u00e9es. Cela nous apprend donc que pour \u00e9crire dans cette pile, il faut utiliser l&#8217;instruction `OUT $16` (envoyer sur le port de sortie num\u00e9ro $16 en hexad\u00e9cimal). Pour lire depuis la pile, il faut utiliser l&#8217;instruction `INP $6` (lire depuis le porte d&#8217;entr\u00e9e num\u00e9ro 6). L&#8217;autre carte sert de buffer de lecture. Le programme y place le nombre d&#8217;octets attendus, puis demande au contr\u00f4leur de disquette de lancer la lecture. Une fois le nombre [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mo5.com\/fr\/programmer-le-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-05-03T12:00:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-03T12:45:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-Panel-Chenillard.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"474\" \/>\n\t<meta property=\"og:image:height\" content=\"268\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\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=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/mo5.com\\\/programmer-le-micral-n\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/programmer-le-micral-n\\\/\"},\"author\":{\"name\":\"Sylvain Glaize\",\"@id\":\"https:\\\/\\\/mo5.com\\\/#\\\/schema\\\/person\\\/e2593639b2e77eace001e56b26086749\"},\"headline\":\"Programmer le Micral N\",\"datePublished\":\"2023-05-03T12:00:43+00:00\",\"dateModified\":\"2023-05-03T12:45:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/programmer-le-micral-n\\\/\"},\"wordCount\":1637,\"publisher\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/programmer-le-micral-n\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/20230501-MicralN-Emulation-Panel-Chenillard.gif\",\"articleSection\":[\"Micral\",\"Programmation\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mo5.com\\\/programmer-le-micral-n\\\/\",\"url\":\"https:\\\/\\\/mo5.com\\\/programmer-le-micral-n\\\/\",\"name\":\"Programmer le Micral N - MO5.COM\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/programmer-le-micral-n\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/programmer-le-micral-n\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/20230501-MicralN-Emulation-Panel-Chenillard.gif\",\"datePublished\":\"2023-05-03T12:00:43+00:00\",\"dateModified\":\"2023-05-03T12:45:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mo5.com\\\/programmer-le-micral-n\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mo5.com\\\/programmer-le-micral-n\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/mo5.com\\\/programmer-le-micral-n\\\/#primaryimage\",\"url\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/20230501-MicralN-Emulation-Panel-Chenillard.gif\",\"contentUrl\":\"https:\\\/\\\/mo5.com\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/20230501-MicralN-Emulation-Panel-Chenillard.gif\",\"width\":474,\"height\":268,\"caption\":\"Chenillard en action sur l'\u00e9mulateur Micral N\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mo5.com\\\/programmer-le-micral-n\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/mo5.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programmer le 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":"Programmer le 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\/programmer-le-micral-n\/","og_locale":"fr_FR","og_type":"article","og_title":"Programmer le Micral N - MO5.COM","og_description":"Par Sylvain Glaize Nous avons donc un mat\u00e9riel fonctionnel, une \u00e9mulation fonctionnelle. Nous avons aussi de quoi communiquer avec la machine via le port s\u00e9rie. Il est temps de pr\u00e9voir quelques programmes qui pourraient \u00eatre lanc\u00e9s. Pour cela, il est pr\u00e9vu d&#8217;utiliser un simulateur de lecteur de disquette, mais cette partie l\u00e0 viendra dans un article futur. Pour le moment, parlons programmation du Micral N. Le boot Au d\u00e9marrage de la machine dans la configuration de notre exemplaire, la ROM pr\u00e9sente sur la carte de \u00ab boot \u00bb se charge d&#8217;aller chercher des donn\u00e9es depuis un lecteur de disquette. Ce n&#8217;est pas obligatoire sur un Micral N, qui pourrait contenir directement un logiciel \u00e0 ex\u00e9cuter, ou bien lire des donn\u00e9es depuis un autre p\u00e9riph\u00e9rique. Notre configuration semble \u00eatre faite pour s&#8217;adapter \u00e0 un logiciel qui peut \u00eatre modifi\u00e9 facilement. Ce programme de d\u00e9marrage lit les 14 premiers kilo-octets de donn\u00e9es pr\u00e9sents sur la disquette et les copie en m\u00e9moire vive \u00e0 partir des adresses basses. La carte de \u00ab boot \u00bb est alors dans un mode o\u00f9 la lecture de donn\u00e9es se fait depuis la ROM, mais o\u00f9 l&#8217;\u00e9criture se fait en RAM pour les adresses communes. Une fois le chargement des donn\u00e9es termin\u00e9, le programme provoque un reset de la machine, qui est rep\u00e9r\u00e9 par la carte de \u00ab boot \u00bb qui ne permet plus l&#8217;acc\u00e8s \u00e0 la ROM. Ainsi, le programme venant de la disquette est enti\u00e8rement disponible, et a le contr\u00f4le complet de la machine. Le syst\u00e8me Nous n&#8217;avons pas de logiciel original pour cette machine, \u00e0 part le contenu des deux ROMs. Cependant, il est possible d&#8217;imaginer que ces donn\u00e9es peuvent soit constituer un programme utilis\u00e9 directement soit un syst\u00e8me d&#8217;exploitation. Les 2 kilo-octets du moniteur en haut de la m\u00e9moire ne forment pas un syst\u00e8me en soit. C&#8217;est un programme dans lequel on peut entrer pour op\u00e9rer et debugger la machine. Mais cette partie n&#8217;est pas construite comme un syst\u00e8me dont on pourrait appeler des fonctions pr\u00e9d\u00e9finies. En fait, cette ROM moniteur pourrait \u00eatre tout aussi bien remplac\u00e9e par de la RAM. Particularit\u00e9s du programme de boot Ce programme, tr\u00e8s court (199 octets utiles), utilise les deux cartes Pile\/Canal. L&#8217;une d&#8217;elles est utilis\u00e9e comme m\u00e9moire secondaire sous forme de pile. En effet, le 8008 n&#8217;a pas de gestion de pile en RAM comme on peut en trouver sur le Z80. Ce processeur n&#8217;a qu&#8217;une toute petite pile d&#8217;adresses, interne et non accessible, qui servent aux appels de sous-routines. Cette carte de m\u00e9moire secondaire sert pour calculer la somme de contr\u00f4le des donn\u00e9es lues depuis la disquette, sans avoir besoin de la RAM, qui est en train d&#8217;\u00eatre remplie par ces dites donn\u00e9es. Cela nous apprend donc que pour \u00e9crire dans cette pile, il faut utiliser l&#8217;instruction `OUT $16` (envoyer sur le port de sortie num\u00e9ro $16 en hexad\u00e9cimal). Pour lire depuis la pile, il faut utiliser l&#8217;instruction `INP $6` (lire depuis le porte d&#8217;entr\u00e9e num\u00e9ro 6). L&#8217;autre carte sert de buffer de lecture. Le programme y place le nombre d&#8217;octets attendus, puis demande au contr\u00f4leur de disquette de lancer la lecture. Une fois le nombre [&hellip;]","og_url":"https:\/\/mo5.com\/fr\/programmer-le-micral-n\/","og_site_name":"MO5.COM","article_publisher":"https:\/\/www.facebook.com\/pages\/Association-MO5COM\/9540357570","article_published_time":"2023-05-03T12:00:43+00:00","article_modified_time":"2023-05-03T12:45:55+00:00","og_image":[{"width":474,"height":268,"url":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-Panel-Chenillard.gif","type":"image\/gif"}],"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":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mo5.com\/programmer-le-micral-n\/#article","isPartOf":{"@id":"https:\/\/mo5.com\/programmer-le-micral-n\/"},"author":{"name":"Sylvain Glaize","@id":"https:\/\/mo5.com\/#\/schema\/person\/e2593639b2e77eace001e56b26086749"},"headline":"Programmer le Micral N","datePublished":"2023-05-03T12:00:43+00:00","dateModified":"2023-05-03T12:45:55+00:00","mainEntityOfPage":{"@id":"https:\/\/mo5.com\/programmer-le-micral-n\/"},"wordCount":1637,"publisher":{"@id":"https:\/\/mo5.com\/#organization"},"image":{"@id":"https:\/\/mo5.com\/programmer-le-micral-n\/#primaryimage"},"thumbnailUrl":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-Panel-Chenillard.gif","articleSection":["Micral","Programmation"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/mo5.com\/programmer-le-micral-n\/","url":"https:\/\/mo5.com\/programmer-le-micral-n\/","name":"Programmer le Micral N - MO5.COM","isPartOf":{"@id":"https:\/\/mo5.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mo5.com\/programmer-le-micral-n\/#primaryimage"},"image":{"@id":"https:\/\/mo5.com\/programmer-le-micral-n\/#primaryimage"},"thumbnailUrl":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-Panel-Chenillard.gif","datePublished":"2023-05-03T12:00:43+00:00","dateModified":"2023-05-03T12:45:55+00:00","breadcrumb":{"@id":"https:\/\/mo5.com\/programmer-le-micral-n\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mo5.com\/programmer-le-micral-n\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/mo5.com\/programmer-le-micral-n\/#primaryimage","url":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-Panel-Chenillard.gif","contentUrl":"https:\/\/mo5.com\/wp-content\/uploads\/2023\/05\/20230501-MicralN-Emulation-Panel-Chenillard.gif","width":474,"height":268,"caption":"Chenillard en action sur l'\u00e9mulateur Micral N"},{"@type":"BreadcrumbList","@id":"https:\/\/mo5.com\/programmer-le-micral-n\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/mo5.com\/"},{"@type":"ListItem","position":2,"name":"Programmer le 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\/645","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=645"}],"version-history":[{"count":0,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/posts\/645\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/media\/20658"}],"wp:attachment":[{"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/media?parent=645"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/categories?post=645"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/mo5.com\/fr\/wp-json\/wp\/v2\/tags?post=645"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}