Page 43 of 57

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postPosted: 21 Sep 2020, 11:39
by critor
Merci pour la réactivité.

Sur
TI-Nspire CX II-T
parce que c'est la seule que j'ai sous la main actuellement, la dernière build
KhiCAS CX
de ce matin semble fonctionnelle :
13019
https://www-fourier.univ-grenoble-alpes ... khicas.zip

Par contre, il n'est pas normal que ça déclenche encore le mode de compatibilité. Si le SDK est maintenant à jour, il faut croire que cela vient du code, particulièrement du code d'affichage...
Et il faudrait éviter, vu que comme on peut voir ci-dessus dans ce contexte nous avons une ligne horizontale de parasites permanents sur l'écran.
Image

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postPosted: 21 Sep 2020, 13:02
by parisse
Il y a une doc specifique pour la nspire cx ii?
Voila le code par ou passent tous les affichages de KhiCAS, si quelqu'un voit du code non portable:
Code: Select all
Gc nspire_gc=0;

Gc * get_gc(){
  if (!nspire_gc){
    nspire_gc=gui_gc_global_GC();
    gui_gc_setRegion(nspire_gc, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
    gui_gc_begin(nspire_gc);
  }
  return &nspire_gc;
}

void os_set_pixel(int x,int y,int c){
  get_gc();
  gui_gc_setColor(nspire_gc,c_rgb565to888(c));
  gui_gc_drawRect(nspire_gc,x,y+nspire_statusarea,1,1);
}

void os_fill_rect(int x,int y,int w,int h,int c){
  get_gc();
  gui_gc_setColor(nspire_gc,c_rgb565to888(c));
  gui_gc_fillRect(nspire_gc,x,y+nspire_statusarea,w,h);
}

int os_get_pixel(int x,int y){
  if (x<0 || x>=SCREEN_WIDTH || y<0 || y>=SCREEN_HEIGHT)
    return -1;
#if 1
  get_gc();
  char ** off_buff = ((((char *****)nspire_gc)[9])[0])[0x8];
  int res = *(unsigned short *) (off_buff[y+nspire_statusarea] + 2*x);
  return res;
#else
  unsigned short * addr=*(unsigned short **) 0xC0000010;
  int r=addr[(y+nspire_statusarea)*SCREEN_WIDTH+x];
  return r;
#endif
}

int nspire_draw_string(int x,int y,int c,int bg,int f,const char * s,bool fake){
  // void ascii2utf16(void *buf, const char *str, int max_size): converts the UTF-8 string str to the UTF-16 string buf of size max_size.
  int l=strlen(s);
  char utf16[2*l+2];
  ascii2utf16(utf16,s,l);
  utf16[2*l]=0;
  utf16[2*l+1]=0;
  get_gc();
  gui_gc_setFont(nspire_gc,f);
  int dx=gui_gc_getStringWidth(nspire_gc, f, utf16, 0, l) ;
  if (fake)
    return x+dx;
  int dy=17;
  if (f==Regular9)
    dy=13;
  if (f==Regular11)
    dy=16;
  gui_gc_setColor(nspire_gc,c_rgb565to888(bg));
  gui_gc_fillRect(nspire_gc,x,y,dx,dy);
  gui_gc_setColor(nspire_gc,c_rgb565to888(c));
  //gui_gc_setPen(nspire_gc, GC_PS_MEDIUM, GC_PM_SMOOTH);
  gui_gc_drawString(nspire_gc, utf16, x, y-1, GC_SM_NORMAL | GC_SM_TOP); // normal mode
  return x+dx;
}

int os_draw_string(int x,int y,int c,int bg,const char * s,bool fake){
  get_gc();
  gui_gc_clipRect(nspire_gc,0,nspire_statusarea,SCREEN_WIDTH,SCREEN_HEIGHT-nspire_statusarea,0);
  int i=nspire_draw_string(x,y+nspire_statusarea,c,bg,Regular12,s,fake);
  gui_gc_clipRect(nspire_gc,0,0,SCREEN_WIDTH,SCREEN_HEIGHT,GC_CRO_RESET);
  return i;
}
int os_draw_string_small(int x,int y,int c,int bg,const char * s,bool fake){
  get_gc();
  gui_gc_clipRect(nspire_gc,0,nspire_statusarea,SCREEN_WIDTH,SCREEN_HEIGHT-nspire_statusarea,GC_CRO_SET);
  int i=nspire_draw_string(x,y+nspire_statusarea,c,bg,Regular9,s,fake);
  gui_gc_clipRect(nspire_gc,0,0,SCREEN_WIDTH,SCREEN_HEIGHT,GC_CRO_RESET);
  return i;
}

int os_draw_string_medium(int x,int y,int c,int bg,const char * s,bool fake){
  get_gc();
  gui_gc_clipRect(nspire_gc,0,nspire_statusarea,SCREEN_WIDTH,SCREEN_HEIGHT-nspire_statusarea,GC_CRO_SET);
  int i=nspire_draw_string(x,y+nspire_statusarea,c,bg,Regular11,s,fake);
  gui_gc_clipRect(nspire_gc,0,0,SCREEN_WIDTH,SCREEN_HEIGHT,GC_CRO_RESET);
  return i;
}

void statuslinemsg(const char * msg){
  get_gc();
  int bg=exam_bg();
  gui_gc_setColor(nspire_gc,c_rgb565to888(bg));
  gui_gc_fillRect(nspire_gc,0,0,SCREEN_WIDTH,nspire_statusarea);
  nspire_draw_string(0,0,0xffff,bg,Regular9,msg,false);
}

void display_time(){
  int h,m,s;
  get_hms(&h,&m,&s);
  char msg[10];
  msg[0]=' ';
  msg[1]='0'+(h/10);
  msg[2]='0'+(h%10);
  msg[3]= 'h';
  msg[4]= ('0'+(m/10));
  msg[5]= ('0'+(m%10));
  msg[6]=0;
  //msg[6]= 'm';
  //msg[7] = ('0'+(s/10));
  //msg[8] = ('0'+(s%10));
  //msg[9]=0;
  int bg=exam_bg();
  gui_gc_setColor(nspire_gc,c_rgb565to888(bg));
  gui_gc_fillRect(nspire_gc,270,0,SCREEN_WIDTH-270,nspire_statusarea);
  nspire_draw_string(270,0,0xffff,bg,Regular9,msg,false);
}

void sync_screen(){
  get_gc();
  //gui_gc_finish(nspire_gc);
  gui_gc_blit_to_screen(nspire_gc);
  msleep(10);
  //nspire_gc=0;
  // gui_gc_begin(nspire_gc);
}

// Nspire peripheral reset :
// https://github.com/nDroidProject/nDroid-bootloader/blob/master/kernel.c
// https://hackspire.org/index.php?title=Memory-mapped_I/O_ports_on_CX#CC000000_-_SHA-256_hash_generator
// hardware ports
// https://hackspire.org/index.php?title=Memory-mapped_I/O_ports_on_CX

bool nspire_shift=false;
bool nspire_ctrl=false;
bool nspire_select=false;
void statusline(int mode){
  char *msg=0;
  if (nspire_ctrl){
    if (nspire_shift)
      msg="shift ctrl";
    else
      msg="        ctrl";
  }
  else {
    if (nspire_shift)
      msg="shift";
    else
      msg="";
  }
  int bg=exam_bg();
  gui_gc_setColor(nspire_gc,c_rgb565to888(bg));
  gui_gc_fillRect(nspire_gc,210,0,SCREEN_WIDTH-210,nspire_statusarea);
  nspire_draw_string(220,0,0xffff,bg,Regular9,msg,false);
  if (nspireemu)
    nspire_draw_string(210,0,0xffff,bg,Regular9,"e",false);
  display_time();
  if (mode==0)
    return;
  sync_screen();
}


Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postPosted: 21 Sep 2020, 14:01
by critor
Ah, autre problème que je viens de remarquer entre temps...

Si on laisse la calculatrice sous KhiCAS CX sans l'utiliser pendant un moment elle finit par s'éteindre.
Problème dans le cas de la TI-Nspire CX II-T, on ne peut pas la rallumer. Donc reset...

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postPosted: 21 Sep 2020, 14:03
by Noury
critor wrote:Ah, autre problème que je viens de remarquer à l'instant...

Si on laisse la calculatrice sous KhiCAS sans l'utiliser pendant un moment elle finit par s'éteindre.
Problème dans le cas de la TI-Nspire CX II-T, on ne peut pas la rallumer. Donc reset...

J'ai eu ça également. Je pensais avoir fait une mauvaise manip. Il a fallu sortir le trombone!

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postPosted: 21 Sep 2020, 14:22
by parisse
Oui, ca je sais pourquoi, c'est l'adresse I/O du power management qui a change 900B -> 9014.
Comment on teste si on est sur une CX ou CX2?

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postPosted: 21 Sep 2020, 14:30
by Noury
Je ne sais pas si ça peut aider, j'ai trouvé ça:
Code: Select all
900A0000 - Miscellaneous
Seems to be similar to CX and Classic, except for the model ID at 900A0000 which is now 0x202.

Disponible ici:
https://hackspire.org/index.php?title=M ... cellaneous

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postPosted: 21 Sep 2020, 16:54
by parisse
parisse wrote:Oui, ca je sais pourquoi, c'est l'adresse I/O du power management qui a change 900B -> 9014.
Comment on teste si on est sur une CX ou CX2?

Bon en fait, c'est le backlight que je modifiais pour simuler OFF/ON, et l'adresse sur la CX est 0x900f0020, celle sur la CX2 n'est pas connue (on parle de 0x90130018 mais ca plante). A moins qu'il n'y ait un controle qu'on peut ecrire sur le materiel du genre il faut d'abord ecrire quelque chose sur 0xCC000008.
Pour le moment je pense que je vais desactiver la simulation du OFF sur la cx2.

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postPosted: 21 Sep 2020, 17:54
by parisse
Bon, je remets la version precedente de KhiCAS sous le nom khicas.zip car il y a pas mal de problemes, y compris avec les CX (off ne marche plus). Le khicas pour les cx2 s'appelle khicas52.zip.

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postPosted: 21 Sep 2020, 18:38
by critor
En attendant un émulateur à jour, vous avez une CX II ou pas encore ?

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postPosted: 21 Sep 2020, 18:46
by parisse
Je viens d'en acheter une.

Sur les cx ii, ca marche pas mal je trouve, modulo les parasites vers le milieu de l'affichage. J'ai un probleme avec l'interruption par ON dans Xcas qui fait quitter (dans MicroPython ca a l'air de marcher par contre). Il faudra voir si on peut controler le backlight.

C'est sur les cx que je conseille de rester en os 4.5.0 et la version precedente de khicas/ndless. De toutes facons, les versions ulterieures de l'os n'apportent rien.