{"id":6719,"date":"2023-06-12T09:54:47","date_gmt":"2023-06-12T07:54:47","guid":{"rendered":"https:\/\/ceo.oric.org\/?p=6719"},"modified":"2023-06-12T09:54:47","modified_gmt":"2023-06-12T07:54:47","slug":"orix-demarrage-personnalise-par-autoboot-et-submit","status":"publish","type":"post","link":"https:\/\/oric.bqtt.net\/index.php\/2023\/06\/12\/orix-demarrage-personnalise-par-autoboot-et-submit\/","title":{"rendered":"[Orix] D\u00e9marrage personnalis\u00e9 par autoboot et submit"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Depuis la version du kernel v2023.1, il est d\u00e9sormais possible de personnaliser le d\u00e9marrage d&#8217;Orix sur son atmos. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Submit<\/strong> est un langage de scripting issu de CPM mais modifi\u00e9 par Assinie. Assine a fait le code pour Orix mais aussi a am\u00e9lior\u00e9 le fonctionnement afin d&#8217;int\u00e9grer des fonctionnalit\u00e9s en plus. Submit est un langage <strong>interpr\u00e9t\u00e9.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Autoboot<\/strong> est un fichier localis\u00e9 dans le r\u00e9pertoire &#8220;<em>\/etc\/&#8221;<\/em> et va contenir un script <strong>submit<\/strong>. Ce script contenu dans le fichier <strong>autoboot<\/strong> sera lanc\u00e9 au boot de l&#8217;ordinateur ce qui permettra de personnaliser son boot, faire des menus etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si le fichier <strong>autoboot<\/strong> est pr\u00e9sent, alors il sera d\u00e9marr\u00e9, sinon, cela d\u00e9marrera normalement sans personnalisation. S&#8217;il y a besoin de bypasser ce d\u00e9marrage par <strong>autoboot<\/strong>, il faudra faire un reset par exemple avec une touche quelconque appuy\u00e9e. Cela va emp\u00eacher <strong>autoboot<\/strong> de d\u00e9marrer et permettre d&#8217;acc\u00e9der au shell directement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le gros avantage du scripting, c&#8217;est que cela permet d&#8217;aller vite pour faire quelque chose sans avoir beaucoup de connaissances.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voici, donc, un tutorial qui va mettre en application un d\u00e9marrage par <strong>autoboot<\/strong>. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequis<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Avoir la twilighte board \u00e0 jour avec le kernel v2023.1<\/li>\n\n\n\n<li>submit version v2022.4 (v\u00e9rifier avec &#8216;submit&#8217;)<\/li>\n\n\n\n<li>un \u00e9diteur texte sur pc. Il y a un \u00e9diteur texte natif en cours de dev, mais il n&#8217;est pas finalis\u00e9, et donc, il faudra partir sur la cl\u00e9 usb branch\u00e9e sur le pc, avec &#8220;<em>\/etc\/autoboot&#8221;<\/em> ouvert.<\/li>\n\n\n\n<li>avoir tous les binaires Orix \u00e0 jour : https:\/\/repo.orix.oric.org\/dists\/official\/ sur la cl\u00e9 usb<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-pullquote has-small-font-size\" style=\"border-width:1px;font-style:normal;font-weight:100\"><blockquote><p>Pour demander au syst\u00e8me de ne pas lire le fichier autoboot au d\u00e9marrage, appuyer sur une touche au boot. Si autoboot doit \u00eatre d\u00e9sactiv\u00e9, il suffit d&#8217;aller dans \/etc\/, faire une copie d&#8217;autoboot avec &#8216;cp&#8217;, et supprimer le fichier autoboot<\/p><\/blockquote><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Je veux d\u00e9marrer blake&#8217;s 7 au d\u00e9marrage<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans le script submit, je mets juste : <\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">#!\/bin\/submit\nblakes7<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Je sauve le fichier, je mets la cl\u00e9 usb, et je d\u00e9marre l&#8217;oric.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Blakes7 d\u00e9marrera automatiquement<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Starting blakes7 at boot\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/0f3IOA3p_fQ?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00e9marrage d&#8217;un menu personnalis\u00e9 avec changement de fonte<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cette fois ci, nous allons lancer un menu au boot. Le script suivant va :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>effacer l&#8217;\u00e9cran apr\u00e8s le boot, mettre la fonte fanta2uk (les fontes sont localis\u00e9es dans &#8220;\/usr\/share\/fonts&#8221;<em>).<\/em><\/li>\n\n\n\n<li>afficher un menu avec des entr\u00e9es &#8220;basic, blake&#8217;s 7, Psychiatric, barbitoric, et Orix&#8221; : ces choix sont volontaires car ils permettent de montrer les diff\u00e9rents lancements, que cela soit \u00e0 partir d&#8217;une rom, du storage, d&#8217;un jeu, ou d&#8217;une d\u00e9mo). La commande basic11 prend un argument qui est le nom du .tap \u00e0 lancer (on peut le trouver en faisant un basic11 -l)<\/li>\n\n\n\n<li>attendre une touche et lancer le programme s\u00e9lectionn\u00e9.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">#! \/bin\/submit\ncls\nsetfont fanta2uk\n\n@ 10,0\ntext\n            +--------------+\n             | 1 Basic         |\n             | 2 Blake's 7   |\n             | 3 Psychatric |\n             | 4 Barbitoric  |\n             | 5 Orix           | \n            +--------------+\nendtext\n:start\ngetkey\nif key = 49 goto _basic\nif key = 50 goto _blake\nif key = 51 goto _psy\nif key = 52 goto _barbitoric\nif key = 53 goto prompt\n\ngoto start\n\n:_basic\nbasic11\n\n:_blake\nblakes7\n\n:_barbitoric\nbarboric\n\n:_psy\nbasic11 \"PSY\n\n:prompt\nexit\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le r\u00e9sultat en image: <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2023\/06\/menu-1024x768.jpg\" alt=\"\" class=\"wp-image-6733\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le r\u00e9sultat en vid\u00e9o: <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"submit script and autoboot : menu\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/7wXobqItIEo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ce script va lancer, en fonction de la touche press\u00e9e, l&#8217;entr\u00e9e voulue (rom basic, blake, psychiatric, barbitoric ou revenir au shell). En revanche, une entr\u00e9e de fonctionnera pas, c&#8217;est <strong>barbitoric<\/strong> (pour la version disponible au 7\/06\/2023).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour expliquer pourquoi barbitoric ne fonctionne pas dans le cas o\u00f9 il est localis\u00e9 dans un script <strong>submit<\/strong>, il faut se r\u00e9f\u00e9rer au fonctionnement d&#8217;un binaire Orix. Le probl\u00e8me ne se produit pas pour une commande en ROM, mais il peut se produire pour un binaire sur cl\u00e9 usb\/sdcard.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Au d\u00e9but du d\u00e9veloppement d&#8217;Orix, un seul format de binaire existait, c&#8217;est le fameux format statique que nous connaissons pour du basic, hyperbasic, commandes sedoric etc. Les programmes sont assembl\u00e9s \u00e0 une adresse fixe, et il y a conflit si on essaie de charger un programme qui est dans la m\u00eame plage d&#8217;adresse : l&#8217;un va \u00e9craser l&#8217;autre. C&#8217;est ce qu&#8217;il se passe dans le cas de <strong>submit<\/strong> et <strong>barbitoric<\/strong>, mais ce n&#8217;est pas <strong>submit<\/strong> le fautif, c&#8217;est le binaire <strong>barbitoric<\/strong> en natif Orix. <strong>Submit<\/strong> est un binaire sur disque au format 2 Orix. Ce format est relogeable. Le kernel va allouer la plage m\u00e9moire disponible en fonction de la taille et reloger au runtime le binaire pour que submit puisse tourner \u00e0 une nouvelle adresse. <strong>Submit<\/strong> tourne donc \u00e0 une adresse inconnue par l&#8217;utilisateur, seul le kernel sait o\u00f9 submit est localis\u00e9 en RAM. Aussi, <strong>Submit<\/strong> va faire des allocations m\u00e9moire pour sa propre utilisation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ici, <strong>barbitoric<\/strong> n&#8217;est pas au format relogeable, et quand le kernel va essayer de le lancer, il va regarder s&#8217;il est au format 2, s&#8217;il est au format 1, le header du binaire d\u00e9finit une adresse fixe. Le kernel va v\u00e9rifier si l&#8217;adresse est occup\u00e9e. Comme submit a \u00e9t\u00e9 lanc\u00e9 de mani\u00e8re relog\u00e9e au 1er offset m\u00e9moire libre, il y a conflit et le kernel va renvoyer un &#8220;exec format error&#8221; qui sera affich\u00e9 dans submit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voici comment v\u00e9rifier si un binaire est au format relogeable : Il faut utiliser le binaire file.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous verrez que file n&#8217;indique pas que c&#8217;est un binaire relogeable pour barboric (nom du programme <strong>barbitoric<\/strong>) : <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">\/#cd bin\n\/bin#file barboric<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ci dessous, en rouge, le test sur le binaire barbitoric, en vert le m\u00eame test sur le programme blakes7. Nous voyons bien dans ce cas <strong>&#8220;reloc binary&#8221;<\/strong> en vert<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2023\/06\/reloc_binary-1024x768.png\" alt=\"\" class=\"wp-image-6731\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Pour corriger le probl\u00e8me de barbitoric dans le cas de submit, il faut attendre la sortie de la version relogeable. Pour cela, le binaire est converti par un programme apr\u00e8s un 1er build du code source.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les commandes en ROM n&#8217;ont pas besoin d&#8217;\u00eatre relog\u00e9es. Elles sont d\u00e9j\u00e0 r\u00e9sidentes en ROM, et ont \u00e9t\u00e9 con\u00e7ues pour ne pas \u00e9craser les autres commandes. Les commandes sont d\u00e9j\u00e0 dans des emplacements m\u00e9moire fixes, et g\u00e8rent les allocations m\u00e9moire de leur cot\u00e9. De fa\u00e7on g\u00e9n\u00e9rale, les commandes en ROM sont plus rapides car elles sont d\u00e9j\u00e0 charg\u00e9es, n&#8217;ont pas besoin d&#8217;\u00eatre relog\u00e9es et n&#8217;occupent pas de RAM dans les 48KB pour son propre code (\u00e0 part pour les allocations m\u00e9moires n\u00e9cessaires)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Couleurs, caract\u00e8res de contr\u00f4les<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avant d&#8217;aller plus loin, l&#8217;id\u00e9al est de lire la doc &#8220;subdoc&#8221; en utilisant man. C&#8217;est une doc en fran\u00e7ais qui explique les possibilit\u00e9s de <strong>submit<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">\/#man subdoc<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nous avons besoin de personnaliser un peu plus ce menu, et nous allons afficher un texte double hauteur avec quelques couleurs. Cela se fait avec les caract\u00e8res de contr\u00f4le : <\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">ink_black = ^@\nink_red = ^A\nink_green = ^B\nink_yellow = ^C\nink_blue = ^D\nink_purple = ^E\nink_cyan = ^F\nink_white = ^G\n\nsimple_height = ^H\nsimple_graph = ^I\ndouble_height = ^J\nblink_simple = ^L\nblink_double = ^N\n\npaper_black = ^P\npaper_red = ^Q\npaper_green = ^R\npaper_yellow = ^S\npaper_blue = ^T\npaper_purple = ^U\npaper_cyan = ^V\npaper_white = ^W<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons modifier <strong>autoboot<\/strong>, pour afficher un bandeau avec sur fond bleu et en \u00e9criture rouge le mot menu en double hauteur, puis afficher un encadr\u00e9 magenta avec le menu.<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">#! \/bin\/submit\ncls\nsetfont fanta2uk\necho ^[T +-----------------------------------+\necho ^[T^[J|^[A               Menu         ^[G     |\necho ^[T^[J|^[A               Menu         ^[G     |\necho ^[T +-----------------------------------+\n\necho\n\necho ^[U\necho ^[U ^[P         1 Basic                   ^[U\necho ^[U ^[P         2 Blake's 7               ^[U\necho ^[U ^[P         3 Psychatric              ^[U\necho ^[U ^[P         4 Barbitoric              ^[U\necho ^[U ^[P         5 Orix                    ^[U\necho ^[U\n\n:start\ngetkey\nif key = 49 goto _basic\nif key = 50 goto _blake\nif key = 51 goto _psy\nif key = 52 goto _barbitoric\nif key = 53 goto prompt\n\ngoto start\n\n:_basic\nbasic11\n\n:_blake\nblakes7\n\n:_barbitoric\nbarboric\n\n:_psy\nbasic11 \"PSY\n\n:prompt\nexit<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le r\u00e9sultat<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2023\/06\/menu_coul-1024x768.jpg\" alt=\"\" class=\"wp-image-6736\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pour aller plus loin<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Submit<\/strong> g\u00e8re des variables, il est possible de les d\u00e9finir et de les sauver dans un fichier texte (<em>save to myfile<\/em>) et les restaurer. (<em>restore from myfile<\/em>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Submit lit des arguments en param\u00e8tre. Ainsi, un script en ligne de commande lanc\u00e9 par submit tel que <\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">\/#submit monscript.sub toto<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;toto&#8221; sera dans la variable $1, permettant de faire des tests avec if.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il est possible de tester la pr\u00e9sence d&#8217;un fichier (<em>if exist myfile.txt goto start<\/em>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D&#8217;afficher un prompt avec input, et r\u00e9cup\u00e9rer ce qui a \u00e9t\u00e9 saisi dans une variable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Depuis la version du kernel v2023.1, il est d\u00e9sormais possible de personnaliser le d\u00e9marrage d&#8217;Orix sur son atmos. Submit est un langage de scripting issu de CPM mais modifi\u00e9 par Assinie. Assine a fait le code pour Orix mais aussi a am\u00e9lior\u00e9 le fonctionnement afin d&#8217;int\u00e9grer des fonctionnalit\u00e9s en plus. Submit est un langage interpr\u00e9t\u00e9. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6733,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[341,372],"tags":[],"class_list":["post-6719","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-341","category-orix"],"_links":{"self":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/6719","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/comments?post=6719"}],"version-history":[{"count":0,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/6719\/revisions"}],"wp:attachment":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/media?parent=6719"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/categories?post=6719"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/tags?post=6719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}