Page 1 of 4

Routines 'système' de Ndless

Unread postPosted: 16 Apr 2019, 15:48
by grosged
Salut!
En assembleur, nous savons comment appeler les routines utilisées par Ndless (en l'occurrence via l'instruction SWI suivie du numéro de fonction, avec les paramètres stockés dans les registres R0,R1,...). Mais là où je bloque , c'est au niveau de la signification de ces paramètres.
En consultant cette intéressante page : https://github.com/ndless-nspire/Ndless ... all-list.h
je n'ai, malgré tout, pas assez d'infos pour éviter le plantage de ma nspire.

Par exemple, j'essaye d'utiliser
e_disp_str
pour afficher un texte:
e_disp_str 341 // void disp_str(const char *p1, int *p2, int p3)

Hormis le premier paramètre qui pointe sur l'adresse contenant le texte à afficher, les deux paramètres suivants correspondraient à quoi, selon vous ?

Quelqu'un saurait-il où trouver une éventuelle documentation?
Merci d'avance ;)

Re: Routines 'système' de Ndless

Unread postPosted: 16 Apr 2019, 16:07
by nbenm
Salut @grosged
Je n'ai pas de réponse pour toi.
Mais ta question m'intéresse. J'y réponds juste pour avoir des notifications quand tu auras de vraies réponses.
Bon courage !

Aux admins: ce serait chouette si on pouvait s'abonner à un topic, ou à un forum. Ça existe peut-être déjà sans que je le sache.

Re: Routines 'système' de Ndless

Unread postPosted: 16 Apr 2019, 16:29
by grosged
Merci @nbenm ;)
Rien qu'avec ces écrans 240x320 que l'on trouve sur les nspire depuis la version W, j'ai bien l'impression qu'il va falloir utiliser quelques-unes de ces fonctions, ne serait-ce que pour déterminer le modèle ou l'écran rencontré...

Re: Routines 'système' de Ndless

Unread postPosted: 16 Apr 2019, 17:02
by Adriweb
nbenm wrote:Aux admins: ce serait chouette si on pouvait s'abonner à un topic, ou à un forum. Ça existe peut-être déjà sans que je le sache.

Hé oui c'est possible :) En bas à gauche de la page des topics, le lien "Surveiller ce sujet" :

Image

Re: Routines 'système' de Ndless

Unread postPosted: 16 Apr 2019, 17:59
by nbenm
@Adriweb merci. Je viens d'activer le suivi :)
@grosged désolé pour cette pollution :?

Re: Routines 'système' de Ndless

Unread postPosted: 16 Apr 2019, 18:11
by Limonadd
J'y connais rien en assembleur sur ti-nspire.
Mais j'ai trouvé ça:
https://github.com/ndless-nspire/Ndless ... stage1.cpp

il utilise la fonction comme ça:
syscall_local<e_disp_str, void>("ndless_resources not found.", &x, 0);

je sais pas comment ça marche l'écran sur ti nspire, mais les parametes c'est peut l'adresse ou est stockée la chaine, et la position sur l'écran?
sur ti 83 premium ce y'a une vRam, donc c'est peut l'adresse dans la vRam, apres je sais pas si c'est pareil sur nspire aucune idée,
et le troisieme parametre il utilise souvent un 0 donc je sais pas ce que c'est exactement

sauf là y'a un 10:

syscall_local<e_disp_str, void>("Oops, you've forgotten to transfer 'ndless_resources.tns'! Ndless won't be installed.", &x, 10);

ça pourra peut etre t'aider a comprendre les parametres xD

Re: Routines 'système' de Ndless

Unread postPosted: 16 Apr 2019, 18:57
by Vogtinator
That syscall isn't really documented (there's not even a wrapper for it) as it's meant to be mostly internal only.

The first argument is a pointer to a null-terminated string of ASCII characters (non-ASCII chars are printed as spaces).
The second argument is a pointer to the X coordinate of the first char, counting in fixed-width letters from the left. The number of letters printed is added to the value.
The third argument is the Y position, counting in fixed-height letters from the top.

Re: Routines 'système' de Ndless

Unread postPosted: 16 Apr 2019, 21:33
by grosged
:~o ça marche !! Success !! :D
Merci à tous les deux ! Thank you both ! :D

Grâce à vous, c'est beaucoup plus clair, à présent ;)
Voilà pourquoi il y avait une différence entre les deux derniers paramètres : le premier registre (R1) ne contient pas la valeur mais
pointe sur l'adresse contenant le paramètre
... D'où le
&
x dans l'exemple de Limonadd... ou l'astérisque dans e_disp_str 341 // void disp_str(const char
*
p1, int
*
p2, int p3)

Voici mon petit programme de test:
Effaçage de l'écran, puis affichage d' HELLO WORLD! en position-texte(8,16), puis une pause avant de quitter.

Code: Select all
//      as -aln -mcpu=arm926ej-s -o .temp.o HelloWorld.s && objcopy -O binary .temp.o HelloWorld.prg.tns
       
        .asciz  "PRG"           // en-tête "PRG"
       
        push    {r0-r12,lr}
        bl      CLEAR
       
        adr     r0,text
        adr     r1,Xpos
        ldr     r2,[r1,#4]
        swi     #341
       
        bl      PAUSE
        pop     {r0-r12,pc}

/***************************************************************/
text:   .asciz  "HELLO WORLD!"
        .align
Xpos:   .word   8
Ypos:   .word   16

/***************************************************************/
CLEAR:  push    {r0-r2,lr}
        mov     r0,#0xC0000010
        ldr     r0,[r0]
        mov     r1,#0
        mov     r2,#38400
clr_lp: str     r1,[r0],#4
        subs    r2,#1
        bne     clr_lp
        pop     {r0-r2,pc}
       
PAUSE:  push    {r0,lr}
        mov     r0,#0x80000000
waitlp: subs    r0,#1
        bne     waitlp
        pop     {r0,pc}

Il n'y a plus qu'à explorer les autres syscall ... ;)

Re: Routines 'système' de Ndless

Unread postPosted: 18 Apr 2019, 12:14
by nbenm
Salut

J'ai essayé ce code sur une Nspire CX CAS (4.5.0.1180), mais j'ai un écran noir durant 95 secondes environs.
Pas de "HELLO WORLD!" affiché.
Puis j'ai l'écran suivant:

Image
J'ai déjà eu ce genre d'écran à un moment en quittant MicroPython. Ça y ressemble.
Voilà, il y a donc 2 choses qui ne vont pas.
Si quelqu'un a une idée...

Re: Routines 'système' de Ndless

Unread postPosted: 18 Apr 2019, 12:16
by critor
Ecran caractéristique à la fin d'un programme Ndless tournant en mode de compatibilité sur une TI-Nspire CX CR4+.