Développement sur Orix

introduction

Le but de cet article est d’expliquer comment développer sur Orix des applications. Cet article ne va expliquer comment coder en C, mais plutôt comment utiliser les fonctions déjà codées dans cc65 pour faire des choses sur Oric. En effet, Orix s’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’affichage etc. Il n’y a pas d’interpreteur dans cette partie. Il faut imaginer telemon comme étant une grosse lib utilisable en assembleur. Les libs C de la target Telestrat sur cc65 ne font qu’appeler ces routines.

Prérequis

Il vous faudra l’archive contenant Oricutron avec l’émulation du CH376 : https://iss.sandacite.com/iss/oricutron/
Puis cc65, http://cc65.github.io/cc65/
Puis les roms : https://repo.orix.oric.org/dists/orix1/alpha/tgz/6502/roms.tgz

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.

Chaque lancement d’oricutron devra se faire avec l’option -t pour pouvoir démarrer les binaires

Avoir un éditeur texte (notepad, visual code etc)

CC65 utilise les prototypes de fonctions standardisées (POSIX), ainsi, il n’y a pas de hires par exemple.

Premier exemple

Nous allons effacer l’écran.

Nom du fichier : clrscr.c

#include <conio.h>

int main (int argc,char *argv[]) {
  clrscr(); // Effacer l'écran (texte) avec conio car conio gère le mode texte.
} 

On compile (sous linux ou windows)

 # cl65 -ttelestrat clrscr.c -o clrscr

Vous aurez un binaire clrscr

Copiez ce fichier dans oricutron/usbdrive/ (oricutron qui est dans l’archive ci dessus)

Démarrez Oricutron de cette archive.

Dans Orix, on regarde les informations du binaire avec file :

# file clrscr 

File permet d’afficher les infos de fichiers (file affiche les infos d’un fichier filepack, binaire Orix, raw, script shell etc)

Dans Orix, on execute le code :

 # ./clrscr 

Nous avons l’écran qui s’est effacé

Afficher hello world

#include <stdio.h> 

main() {     
  printf("Hello World\n");
} 
  • Puis je compile :
# cl65 -ttelestrat hello.c -o hello 
  • je déplace le binaire dans le répertoire usbdrive d’oricutron (dans bin) :

cp hello $ORICUTRON/usbdrive/bin/

  • je lance oricutron, et je tape “hello”. Cela fonctionnera sans faire ./hello, puisque nous avons placé le binaire “hello” dans bin/ qui est dans le “PATH”.

Lire le clavier

Nous allons utiliser la lib conio de cc65 qui est une librairie de gestion du clavier et du mode texte. Notez que cela récupère aussi le code ascii du joystick. En effet, sur telestrat, quand on utilise telemon, quand on scrute le clavier, on récupère aussi le joystick !

#include <conio.h>
#include <stdio.h>

int main (int argc,char *argv[]) {
   unsigned char key;   // Ici le programme ne sort jamais, dès qu'une touche est pressée, elle s'affiche à l'écran.
   while (1)   {     
     key=cgetc();     
     printf("%c",key);
   }
} 

Passer HIRES

Nous allons utiliser la lib TGI de cc65 qui est une librairie graphique standard pour passer en hires.

#include <tgi.h>
#include <conio.h>
#include <stdio.h>
 int main (int argc,char *argv[]) {
   tgi_install (tgi_static_stddrv);
   tgi_init ();
   tgi_clear ();
   printf("Appuyez sur une touche pour revenir en mode texte");
   cgetc();
   tgi_done();
 } 

Passer HIRES et afficher une image

il vous faut une images hrs que vous mettez à la racine de usbdrive dans l’émulateur. Cette image s’appelle img.hrs

#include <tgi.h>
#include <conio.h>
#include <stdio.h>
int main (int argc,char *argv[]) { 
   FILE *fp;
   char *myfile="img.hrs";
   fp=fopen(myfile,"r");
   if (fp!=NULL)   {
     tgi_install (tgi_static_stddrv);
     tgi_init ();
     tgi_clear ();
     fread(0xa000,8000,fp); // On lit 8000 octets qu'on écrit directement en hires.
     printf("Appuyez sur une touche pour revenir en mode texte"); 
    cgetc(); 
    tgi_done(); 
  } 
} 
  • Puis je compile:
 cl65 -o picture -ttelestrat picture.c 

Voilà, vous avez fait à peu près le binaire viewhrs qui permet de voir des images hrs sur oric.

Quelques exemples sur orix : https://github.com/jedeoric/orix-samples que vous pouvez améliorer facilement. Contactez moi pour que je vous donne accès en écriture à ce repo !

viewhrs a été recodé en assembleur depuis, et est dispo dans la ROM shell d’Orix. En voici le lien : https://github.com/orix-software/shell/blob/master/src/commands/viewhrs.asm

Comments

4 responses to “Développement sur Orix”

  1. JiBe Avatar
    JiBe

    Je découvre aujourd’hui la programmation pour Orix et je dois dire que j’ai de très bonnes premières impressions.

    En plus du plaisir de se retrouver dans un environnement linux-like, j’apprécie particulièrement la possibilité de pouvoir tester sans avoir à redémarrer l’émulateur ou devoir prendre la souris.
    Il suffit de copier l’exécutable dans usbdrive/bin pour pourvoir tester. Et à la fin de l’exécution, on retombe directement sur le prompt .. prêt pour le prochain test .. c’est super confortable !!

    un petit bémol sur le partage de symbol entre la chaine de compil et le moniteur oricutron mais sinon c’est vraiment un environnement de travail intéressant.

    Je découvre la librairie tgi !! WAOU !!

    Bref .. de très bonnes premières impressions !! et de bien belles perspectives !!

  2. TOOR Avatar
    TOOR

    Bonjour,

    Effectivement de belles perspectives !

    Par contre le lien https://github.com/oric-software/viewhrs ne fonctionne pas.

    1. jede Avatar

      Effectivement, j’avais droppé ce repo, il y a quelques temps car viewhrs a été recodé en asm, et inséré dans la ROM shell.

      J’ai changé le lien pour pointer sur un repo avec quelques exemples de code à utiliser pour Orix, en échange.

  3. […] Développement sur Orix […]

Leave a Reply

Your email address will not be published. Required fields are marked *