{"id":338,"date":"2011-08-23T19:45:25","date_gmt":"2011-08-23T17:45:25","guid":{"rendered":"http:\/\/pockemul.free.fr\/?p=338"},"modified":"2024-10-05T13:04:19","modified_gmt":"2024-10-05T11:04:19","slug":"un-compilateur-c-dans-pockemul","status":"publish","type":"post","link":"https:\/\/pockemul.com\/index.php\/2011\/08\/23\/un-compilateur-c-dans-pockemul\/","title":{"rendered":"Un compilateur C dans PockEmul"},"content":{"rendered":"\n<p>Il y a quelques temps, j&#8217;ai commenc\u00e9 \u00e0 int\u00e9grer dans PockEmul un compilateur C rudimentaire. J&#8217;ai traduit en C++ LittleC compiler d\u00e9velopp\u00e9 par Simon (<a href=\"http:\/\/www.lehmayr.de\/\">http:\/\/www.lehmayr.de\/<\/a>)&nbsp;en Delphi. C&#8217;est un compilateur assez simple qui m&#8217;a permis de mieux comprendre le principe de fonctionnement d&#8217;un tel module.<br>Le compilateur produit du code ASM qui est ensuite transform\u00e9 en code machine par un Assembleur \u00e9galement d\u00e9velopp\u00e9 par Simon.<br>J&#8217;ai donc ajout\u00e9 un IDE avec la possibilit\u00e9 d&#8217;installer directement le code g\u00e9n\u00e9r\u00e9 dans un pocket en cours d&#8217;\u00e9mulation.<br>Afin que cela soit plus attrayant, j&#8217;ai \u00e9galement ajout\u00e9 une librairie d&#8217;IO pour le Sharp PC-1350 perm\u00e9tant de faire un getc et putc et d&#8217;utiliser les fonctions graphiques:<\/p>\n\n\n\n<!--more-->\n\n\n\n<ul class=\"wp-block-list\"><li>cls()<\/li><li>line(x1 , y1 , x2 , y2 , Flag)<br>Flag pouvant prendre les valeurs GSET, GRESET, GINV ,GBOX et GBOXF permettant respectivement d&#8217;afficher un point, de l&#8217;\u00e9teindre, de l&#8217;inverser, de faire un rectangle ou un rectangle rempli.<\/li><li>pset(x1 , x2 , Flag)<\/li><\/ul>\n\n\n\n<p>Un premier exemple est le code suivant:<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-1 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"815\" height=\"707\" src=\"https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc1.png\" alt=\"\" data-id=\"346\" data-full-url=\"https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc1.png\" data-link=\"https:\/\/pockemul.com\/index.php\/2011\/08\/23\/un-compilateur-c-dans-pockemul\/lcc1\/\" class=\"wp-image-346\" srcset=\"https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc1.png 815w, https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc1-300x260.png 300w, https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc1-768x666.png 768w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"815\" height=\"707\" src=\"https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc2.png\" alt=\"\" data-id=\"345\" data-full-url=\"https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc2.png\" data-link=\"https:\/\/pockemul.com\/index.php\/2011\/08\/23\/un-compilateur-c-dans-pockemul\/lcc2\/\" class=\"wp-image-345\" srcset=\"https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc2.png 815w, https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc2-300x260.png 300w, https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc2-768x666.png 768w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"815\" height=\"707\" src=\"https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc3.png\" alt=\"\" data-id=\"344\" data-full-url=\"https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc3.png\" data-link=\"https:\/\/pockemul.com\/index.php\/2011\/08\/23\/un-compilateur-c-dans-pockemul\/lcc3\/\" class=\"wp-image-344\" srcset=\"https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc3.png 815w, https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc3-300x260.png 300w, https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc3-768x666.png 768w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><a href=\"http:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc3.png\"><\/a><br>Le r\u00e9sultat final est le\u00a0tr\u00e8s\u00a0classique:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"659\" height=\"335\" src=\"https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc4.png\" alt=\"\" class=\"wp-image-343\" srcset=\"https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc4.png 659w, https:\/\/pockemul.com\/wp-content\/uploads\/2011\/08\/lcc4-300x153.png 300w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n\n\n\n<p><br>Le point\u00a0int\u00e9ressant\u00a0est le temps\u00a0d\u2019ex\u00e9cution. En BASIC standard, le Pocket met <strong>294 secondes<\/strong>. En C il ne met plus que <strong>38 secondes<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#org __PC_DEFAULT_ORG__\n#include &lt;graph.h>\n#include &lt;stdio.h>\n#include &lt;string.h>\n#include &lt;sound.h>\n\nchar xram g&#91;]=\"un test de String !!!! \";\nchar xram r&#91;10];\n\nbyte i,j;\nmain() {\n\t\n\twhile (onbreak()==0) {\n\t\tps_clrscr();\n\t\t\n\t\tfor (j=0;j&lt;10;j++) {\n\t\t\tfor (i=65;i&lt;140;i++) {\t\t\t\n\t\t\t\tps_putchar_con(i);\n\t\t\t\tif (onbreak()>0) return;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfor (i=40;i&lt;150;i+=10) {\n\t\t\tbeep(i,4);\n\t\t\tif (onbreak()>0) return;\n\t\t}\n\t\tfor (i=150;i>40;i-=10) {\n\t\t\tbeep(i,4);\n\t\t\tif (onbreak()>0) return;\n\t\t}\t\n\t\t\n\t\tps_clrscr();\n\t\tfor (i=0;i&lt;__DISP_GR_COLS__;i++) {\n\t\t\tfor (j=0;j&lt;__DISP_GR_ROWS__;j++) {\n\t\t\t\tif (onbreak()>0) return;\t\n\t\t\t\tps_pset(j|i ,j,GSET);\n\t\t\t}\n\t\t}\n\t\tps_clrscr();\n\t\tps_inv();\n\t\tfor (i=0;i&lt;__DISP_GR_ROWS__;i++) {\n\t\t\tfor (j=0;j&lt;__DISP_GR_COLS__;j++) {\n\t\t\t\tif (onbreak()>0) return;\t\n\t\t\t\tps_pset(j|i ,i,GRESET);\n\t\t\t}\n\t\t}\n\t\t\n\t\tps_inv();\n\t\tps_wait(500);\n\t\tps_inv();\n\t\tps_wait(500);\n\t\tps_inv();\n\t\tps_wait(500);\n\t\t\n\t\tps_clrscr();\n\t\t\n\t\tfor (i=0;i&lt;__DISP_GR_COLS__;i=i+3) {\n\t\t\tps_line(i,0,__DISP_GR_COLS__\/2,50);\n\t\t\tif (onbreak()>0) return;\n\t\t}\n\t\t\n\t\tps_inv();\n\t\tps_wait(500);\n\t\tps_inv();\n\t\tps_wait(500);\n\t\t\n\t\tps_clrscr();\n\t\t\n\t\tfor (i=0;i&lt;50;i++) {\n\t\t\tps_putstr(&amp;amp;g);\n\t\t\tif (onbreak()>0) return;\n\t\t}\n\t\t\n\t\tps_clrscr();\n\t\t\n\t\tfor (i=1;i&lt;123;i++) {\n\t\t\tbtoa(i,&amp;amp;r,10);\n\t\t\tps_putstr(&amp;amp;r);\n\t\t\tps_putchar_con(13);\n\t\t}\n\t\t\n\t}\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il y a quelques temps, j&#8217;ai commenc\u00e9 \u00e0 int\u00e9grer dans PockEmul un compilateur C rudimentaire. J&#8217;ai traduit en C++ LittleC compiler d\u00e9velopp\u00e9 par Simon (http:\/\/www.lehmayr.de\/)&nbsp;en Delphi. C&#8217;est un compilateur assez simple qui m&#8217;a permis de mieux comprendre le principe de fonctionnement d&#8217;un tel module.Le compilateur produit du code ASM qui est ensuite transform\u00e9 en code &hellip; <a href=\"https:\/\/pockemul.com\/index.php\/2011\/08\/23\/un-compilateur-c-dans-pockemul\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Un compilateur C dans PockEmul&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[58],"tags":[21,22,23,24,25],"class_list":["post-338","post","type-post","status-publish","format-standard","hentry","category-news","tag-assembler","tag-compilateur","tag-compiler","tag-pocket-2","tag-sharp"],"_links":{"self":[{"href":"https:\/\/pockemul.com\/index.php\/wp-json\/wp\/v2\/posts\/338"}],"collection":[{"href":"https:\/\/pockemul.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pockemul.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pockemul.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/pockemul.com\/index.php\/wp-json\/wp\/v2\/comments?post=338"}],"version-history":[{"count":3,"href":"https:\/\/pockemul.com\/index.php\/wp-json\/wp\/v2\/posts\/338\/revisions"}],"predecessor-version":[{"id":1894,"href":"https:\/\/pockemul.com\/index.php\/wp-json\/wp\/v2\/posts\/338\/revisions\/1894"}],"wp:attachment":[{"href":"https:\/\/pockemul.com\/index.php\/wp-json\/wp\/v2\/media?parent=338"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pockemul.com\/index.php\/wp-json\/wp\/v2\/categories?post=338"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pockemul.com\/index.php\/wp-json\/wp\/v2\/tags?post=338"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}