{"id":1456,"date":"2019-12-19T14:16:11","date_gmt":"2019-12-19T13:16:11","guid":{"rendered":"https:\/\/ceo.oric.org\/?p=1456"},"modified":"2019-12-19T14:16:11","modified_gmt":"2019-12-19T13:16:11","slug":"developpement-sur-orix","status":"publish","type":"post","link":"https:\/\/oric.bqtt.net\/index.php\/2019\/12\/19\/developpement-sur-orix\/","title":{"rendered":"D\u00e9veloppement sur Orix"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">introduction <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le but de cet article est d&#8217;expliquer comment d\u00e9velopper sur Orix des applications. Cet article ne va expliquer comment coder en C, mais plut\u00f4t comment utiliser les fonctions d\u00e9j\u00e0 cod\u00e9es dans cc65 pour faire des choses sur Oric. En effet, Orix s&#8217;appuie sur telemon. Pour rappel, telemon est une rom de 16Ko qui contient toutes les routines pour faire fonctionner le hard telestrat notamment, mais aussi l&#8217;affichage etc. Il n&#8217;y a pas d&#8217;interpreteur dans cette partie. Il faut imaginer telemon comme \u00e9tant une grosse lib utilisable en assembleur. Les libs C de la target Telestrat sur cc65 ne font qu&#8217;appeler ces routines.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9requis<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il vous faudra l&#8217;archive contenant Oricutron avec l&#8217;\u00e9mulation du CH376 :  <a href=\"https:\/\/iss.sandacite.com\/iss\/oricutron\/\">https:\/\/iss.sandacite.com\/iss\/oricutron\/<\/a><br>Puis cc65, <a href=\"http:\/\/cc65.github.io\/cc65\/\">http:\/\/cc65.github.io\/cc65\/<\/a><br>Puis les roms : <a href=\"https:\/\/repo.orix.oric.org\/dists\/orix1\/alpha\/tgz\/6502\/roms.tgz\">https:\/\/repo.orix.oric.org\/dists\/orix1\/alpha\/tgz\/6502\/roms.tgz<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans oricutron.cfg, mettre la rom kernel en banque7, la rom basic en banque6, la rom shell en banque 5, et dans les autres banques mettre emptyrom.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Chaque lancement d&#8217;oricutron devra se faire avec l&#8217;option -t pour pouvoir d\u00e9marrer les binaires<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avoir un \u00e9diteur texte (notepad, visual code etc)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CC65 utilise les prototypes de fonctions standardis\u00e9es (POSIX), ainsi, il n&#8217;y a pas de hires par exemple.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Premier exemple<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons effacer l&#8217;\u00e9cran.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nom du fichier : clrscr.c<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">#include &lt;conio.h>\n\nint main (int argc,char *argv[]) {\n  clrscr(); \/\/ Effacer l'\u00e9cran (texte) avec conio car conio g\u00e8re le mode texte.\n} <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On compile (sous linux ou windows)<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\"> # cl65 -ttelestrat clrscr.c -o clrscr<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vous aurez un binaire clrscr<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copiez ce fichier dans oricutron\/usbdrive\/ (oricutron qui est dans l&#8217;archive ci dessus)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9marrez Oricutron de cette archive.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans Orix, on regarde les informations du binaire avec file :<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\"># file clrscr <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">File permet d&#8217;afficher les infos de fichiers (file affiche les infos d&#8217;un fichier filepack, binaire Orix, raw, script shell etc)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans Orix, on execute le code : <\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\"> # .\/clrscr <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nous avons l&#8217;\u00e9cran qui s&#8217;est effac\u00e9<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Afficher hello world<\/h2>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">#include &lt;stdio.h> \n\nmain() {     \n  printf(\"Hello World\\n\");\n} <\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Puis je compile : <\/li><\/ul>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\"># cl65 -ttelestrat hello.c -o hello <\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>je d\u00e9place le binaire dans le r\u00e9pertoire usbdrive d&#8217;oricutron (dans bin) :<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><code> cp hello $ORICUTRON\/usbdrive\/bin<\/code>\/<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>je lance oricutron, et je tape &#8220;hello&#8221;. Cela fonctionnera sans faire .\/hello, puisque nous avons plac\u00e9 le binaire &#8220;hello&#8221; dans bin\/ qui est dans le &#8220;PATH&#8221;.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Lire le clavier<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons utiliser la lib conio de cc65 qui est une librairie de gestion du clavier et du mode texte. Notez que cela r\u00e9cup\u00e8re aussi le code ascii du joystick. En effet, sur telestrat, quand on utilise telemon, quand on scrute le clavier, on r\u00e9cup\u00e8re aussi le joystick !<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">#include &lt;conio.h>\n#include &lt;stdio.h>\n\nint main (int argc,char *argv[]) {\n   unsigned char key;   \/\/ Ici le programme ne sort jamais, d\u00e8s qu'une touche est press\u00e9e, elle s'affiche \u00e0 l'\u00e9cran.\n   while (1)   {     \n     key=cgetc();     \n     printf(\"%c\",key);\n   }\n} <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Passer HIRES<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons utiliser la lib TGI de cc65 qui est une librairie graphique standard pour passer en hires.<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">#include &lt;tgi.h>\n#include &lt;conio.h>\n#include &lt;stdio.h>\n int main (int argc,char *argv[]) {\n   tgi_install (tgi_static_stddrv);\n   tgi_init ();\n   tgi_clear ();\n   printf(\"Appuyez sur une touche pour revenir en mode texte\");\n   cgetc();\n   tgi_done();\n } <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Passer HIRES et afficher une image <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">il vous faut une images hrs que vous mettez \u00e0 la racine de usbdrive dans l&#8217;\u00e9mulateur. Cette image s&#8217;appelle img.hrs <\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">#include &lt;tgi.h>\n#include &lt;conio.h>\n#include &lt;stdio.h>\nint main (int argc,char *argv[]) { \n   FILE *fp;\n   char *myfile=\"img.hrs\";\n   fp=fopen(myfile,\"r\");\n   if (fp!=NULL)   {\n     tgi_install (tgi_static_stddrv);\n     tgi_init ();\n     tgi_clear ();\n     fread(0xa000,8000,fp); \/\/ On lit 8000 octets qu'on \u00e9crit directement en hires.\n     printf(\"Appuyez sur une touche pour revenir en mode texte\"); \n    cgetc(); \n    tgi_done(); \n  } \n} <\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Puis je compile: <\/li><\/ul>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\"> cl65 -o picture -ttelestrat picture.c <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Voil\u00e0, vous avez fait \u00e0 peu pr\u00e8s le binaire viewhrs qui permet de voir des images hrs sur oric.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quelques exemples sur orix : <a href=\"https:\/\/github.com\/jedeoric\/orix-samples\">https:\/\/github.com\/jedeoric\/orix-samples<\/a> que vous pouvez am\u00e9liorer facilement. Contactez moi pour que je vous donne acc\u00e8s en \u00e9criture \u00e0 ce repo !<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2019\/12\/viewhrs2.png\" alt=\"\" class=\"wp-image-1464\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">viewhrs a \u00e9t\u00e9 recod\u00e9 en assembleur depuis, et est dispo dans la ROM shell d&#8217;Orix. En voici le lien : <a href=\"https:\/\/github.com\/orix-software\/shell\/blob\/master\/src\/commands\/viewhrs.asm\">https:\/\/github.com\/orix-software\/shell\/blob\/master\/src\/commands\/viewhrs.asm<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>introduction Le but de cet article est d&#8217;expliquer comment d\u00e9velopper sur Orix des applications. Cet article ne va expliquer comment coder en C, mais plut\u00f4t comment utiliser les fonctions d\u00e9j\u00e0 cod\u00e9es dans cc65 pour faire des choses sur Oric. En effet, Orix s&#8217;appuie sur telemon. Pour rappel, telemon est une rom de 16Ko qui contient [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1464,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[338,350,22,317,318],"tags":[666],"class_list":["post-1456","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-338","category-osdk","category-ceomag","category-programmation","category-software","tag-ceomag357"],"_links":{"self":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/1456","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=1456"}],"version-history":[{"count":0,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/1456\/revisions"}],"wp:attachment":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/media?parent=1456"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/categories?post=1456"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/tags?post=1456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}