Page 1 of 3

Emuler Nspire sous linux : Nspire_emu

Unread postPosted: 26 Sep 2012, 22:37
by tobiasBora
Bonjour !

Je voulais savoir comment faire pour émuler une TI nspire sous linux. J'ai vu qu'il y avait le logiciel Tiemu, mais il ne semble à première vue pas supporter les nspire, et j'ai vu le programme communautaire nspire emu qui semble open source :
http://tiplanet.org/forum/viewtopic.php?t=8698&p=120035
Cependant, comme il n'y a pas de binaire linux, j'ai essayé de le compiler avec make, mais j'obtiens une belle erreur :
Code: Select all
$ make
gcc -W -Wall -Os -c apb.c -o apb.o
In file included from apb.c:5:0:
emu.h:157:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:158:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:159:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:160:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:337:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:338:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:339:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:340:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:341:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:342:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:390:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:391:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:392:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:393:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:394:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
emu.h:395:1: attention : ‘fastcall’ attribute ignored [-Wattributes]
apb.c: In function ‘unknown_cx_read’:
apb.c:254:25: attention : unused parameter ‘addr’ [-Wunused-parameter]
apb.c: In function ‘unknown_cx_write’:
apb.c:257:27: attention : unused parameter ‘addr’ [-Wunused-parameter]
apb.c:257:37: attention : unused parameter ‘value’ [-Wunused-parameter]
apb.c: In function ‘watchdog_event’:
apb.c:275:32: attention : unused parameter ‘index’ [-Wunused-parameter]
gcc -c asmcode.S -o asmcode.o
asmcode.S: Assembler messages:
asmcode.S:34: Error: invalid instruction suffix for `push'
asmcode.S:36: Error: invalid instruction suffix for `push'
asmcode.S:37: Error: invalid instruction suffix for `push'
asmcode.S:38: Error: invalid instruction suffix for `push'
asmcode.S:90: Error: invalid instruction suffix for `pop'
asmcode.S:91: Error: invalid instruction suffix for `pop'
asmcode.S:92: Error: invalid instruction suffix for `pop'
asmcode.S:93: Error: invalid instruction suffix for `pop'
asmcode.S:204: Error: junk at end of line, first unrecognized character is `@'
asmcode.S:206: Error: junk at end of line, first unrecognized character is `@'
asmcode.S:229: Error: invalid char '@' beginning operand 1 `@mmio_read_byte@4'
asmcode.S:232: Error: invalid char '@' beginning operand 1 `@read_byte@4'
asmcode.S:235: Error: junk at end of line, first unrecognized character is `@'
asmcode.S:237: Error: junk at end of line, first unrecognized character is `@'
asmcode.S:259: Error: invalid char '@' beginning operand 1 `@read_align_fail@4'
asmcode.S:263: Error: invalid char '@' beginning operand 1 `@mmio_read_half@4'
asmcode.S:266: Error: invalid char '@' beginning operand 1 `@read_half@4'
asmcode.S:269: Error: junk at end of line, first unrecognized character is `@'
asmcode.S:271: Error: junk at end of line, first unrecognized character is `@'
asmcode.S:291: Error: invalid char '@' beginning operand 1 `@read_align_fail@4'
asmcode.S:295: Error: invalid char '@' beginning operand 1 `@mmio_read_word@4'
asmcode.S:298: Error: invalid char '@' beginning operand 1 `@read_word@4'
asmcode.S:301: Error: invalid instruction suffix for `push'
asmcode.S:302: Error: invalid instruction suffix for `push'
asmcode.S:304: Error: invalid instruction suffix for `pop'
asmcode.S:305: Error: invalid instruction suffix for `pop'
asmcode.S:308: Error: invalid instruction suffix for `push'
asmcode.S:309: Error: invalid instruction suffix for `push'
asmcode.S:310: Error: invalid instruction suffix for `push'
asmcode.S:311: Error: invalid instruction suffix for `push'
asmcode.S:314: Error: invalid instruction suffix for `pop'
asmcode.S:318: Error: junk at end of line, first unrecognized character is `@'
asmcode.S:320: Error: junk at end of line, first unrecognized character is `@'
asmcode.S:343: Error: invalid char '@' beginning operand 1 `@mmio_write_byte@8'
asmcode.S:346: Error: invalid char '@' beginning operand 1 `@write_byte@8'
asmcode.S:349: Error: junk at end of line, first unrecognized character is `@'
asmcode.S:351: Error: junk at end of line, first unrecognized character is `@'
asmcode.S:373: Error: invalid char '@' beginning operand 1 `@write_align_fail@4'
asmcode.S:377: Error: invalid char '@' beginning operand 1 `@mmio_write_half@8'
asmcode.S:380: Error: invalid char '@' beginning operand 1 `@write_half@8'
asmcode.S:383: Error: junk at end of line, first unrecognized character is `@'
asmcode.S:385: Error: junk at end of line, first unrecognized character is `@'
asmcode.S:405: Error: invalid char '@' beginning operand 1 `@write_align_fail@4'
asmcode.S:409: Error: invalid char '@' beginning operand 1 `@mmio_write_word@8'
asmcode.S:412: Error: invalid char '@' beginning operand 1 `@write_word@8'
asmcode.S:415: Error: invalid instruction suffix for `push'
asmcode.S:416: Error: invalid instruction suffix for `push'
asmcode.S:417: Error: invalid instruction suffix for `push'
asmcode.S:419: Error: invalid instruction suffix for `pop'
asmcode.S:420: Error: invalid instruction suffix for `pop'
asmcode.S:421: Error: invalid instruction suffix for `pop'
asmcode.S:424: Error: invalid instruction suffix for `push'
asmcode.S:425: Error: invalid instruction suffix for `push'
asmcode.S:426: Error: invalid instruction suffix for `push'
asmcode.S:427: Error: invalid instruction suffix for `push'
asmcode.S:428: Error: invalid instruction suffix for `push'
asmcode.S:431: Error: invalid instruction suffix for `pop'
asmcode.S:432: Error: invalid instruction suffix for `pop'
asmcode.S:446: Error: invalid instruction suffix for `pop'
asmcode.S:454: Error: invalid instruction suffix for `push'
asmcode.S:459: Error: invalid instruction suffix for `pop'
asmcode.S:460: Error: invalid instruction suffix for `pop'
asmcode.S:461: Error: invalid instruction suffix for `pop'
make: *** [asmcode.o] Erreur 1


Comment faire pour le compiler sous linux ? Existe-t'ils d'autres émulateurs nspire libres ?

Merci d'avance,

Tobias.

Re: Emuler Nspire sous linux : Nspire_emu

Unread postPosted: 26 Sep 2012, 22:41
by Adriweb
Je ne suis pas sûr concernant sa compilation, mais il marche sous Wine sans problème, il me semble :)

Re: Emuler Nspire sous linux : Nspire_emu

Unread postPosted: 26 Sep 2012, 22:42
by Excale
Et pour répondre à l'autre question, il n'y a pas d'autre émulateur nspire :).

Re: Emuler Nspire sous linux : Nspire_emu

Unread postPosted: 26 Sep 2012, 22:55
by tobiasBora
Merci pour vos réponses ultra rapides !

Adriweb wrote:Je ne suis pas sûr concernant sa compilation, mais il marche sous Wine sans problème, il me semble :)

On va dire que je ne considère pas wine comme une alternative fiable sur le long terme. Wine permet de dépanner, mais je désire vraiment l'utiliser le moins possible... Si il y avait une solution native, ce serait 1.10^3 fois mieux...

Par contre, j'ai trouvé ici :
http://hackspire.unsads.com/wiki/index.php/Emulators
que Xspire (qui semble se baser sur nspire_emu) permet un portage sous linux ! Comme je n'ai pas vu de site officiel, et comme le lien vers lequel pointe la page est un forum dans lequel je ne trouve pas la page de téléchargement, (bon, il faut dire que j'ai bien cherché 10 secondes...), j'ai trouvé ici :
archives_voir.php?id=1730
une version qui semble fonctionner. (bon je ne sais pas si c'est la plus récente)... et elle semble fonctionner aux premiers abords ! Pour le moment, je n'ai fait que le lancer (en version graphique et console, levak, goplat et xspire on fait un super travail, merci infiniment). Je n'ai pas encore pu le tester pleinement car je dois aller dormir, et qu'il semble necessaire de faire un certain nombre de manips pour que ça fonctionne. J'essayerai quand j'aurai un peu de temps (ou quand les maths me monteront à la tête).

Je pense donc que mon problème est résolu, sauf si vous ayez des liens vers le site officiel (à moins que le lien tiplanet soit son emplacement officiel).

Merci !

Re: Emuler Nspire sous linux : Nspire_emu

Unread postPosted: 26 Sep 2012, 23:00
by Excale
La version que tu as téléchargée est une version bien obsolète.

Si ça marche pour ce que tu veux faire, tant mieux. Mais je crois bien qu'elle ne gère même pas les Nspire CX.

Re: Emuler Nspire sous linux : Nspire_emu

Unread postPosted: 27 Sep 2012, 06:12
by Lionel Debroux
* TIEmu ne s'intéresse en effet qu'aux TI-68k, et nspire_emu est le seul émulateur de Nspire;
* nspire_emu fonctionne suffisamment bien pour que personne ne s'amuse à maintenir une version non Windows;
* Xspire est en effet extrêmement dépassé, au moins 5-6 releases majeures de retard, et n'est pas maintenu;
* la compilation de nspire_emu sous *nix se passe bien (c'est ce que j'utilise), avec un cross-compilateur: i586-mingw32-msvc-gcc ou i686-w64-mingw32-gcc.

Re: Emuler Nspire sous linux : Nspire_emu

Unread postPosted: 28 Sep 2012, 19:41
by tobiasBora
Merci pour vos réponses.

J'ai donc essayé, Lionel Debroux, comme tu me l'as conseillé d'installé i686-w64-mingw32-gcc. J'ai ensuite modifié le fichier Makefile ainsi :
Code: Select all
OBJ = apb.o asmcode.o cpu.o des.o debug.o emu.o flash.o gui.o interrupt.o keypad.o lcd.o link.o memory.o mmu.o os-win32.o resource.o schedule.o sha256.o translate.o usb.o usblink.o

FLAGS = -W -Wall

emu.exe : $(OBJ)
   i686-w64-mingw32-gcc $(FLAGS) $(OBJ) -o $@ -lgdi32 -lcomdlg32 -lwinmm

nspire_emu.exe : $(OBJ)
   i686-w64-mingw32-gcc $(FLAGS) $(OBJ) -o $@ -lgdi32 -lcomdlg32 -lwinmm -s -Wl,--nxcompat

cpu.o : cpu.c
   i686-w64-mingw32-gcc $(FLAGS) -O3 -c $< -o $@

resource.o : resource.rc id.h
   i686-w64-mingw32-windres $< -o $@

sha256.o : sha256.c
   i686-w64-mingw32-gcc $(FLAGS) -O3 -c $< -o $@

asmcode.o : asmcode.S
   i686-w64-mingw32-gcc -c $< -o $@

%.o : %.c
   i686-w64-mingw32-gcc $(FLAGS) -Os -c $< -o $@

Et pour enlever une erreur de compilation j'ai rajouté #include <windows.h> dans le fichier resource.rc.

Même si je n'ai pas de vrai erreur à la compilation, le fichier binaire semble corrompu car je ne peux pas le lancer :
Code: Select all
make
i686-w64-mingw32-windres resource.rc -o resource.o
i686-w64-mingw32-gcc -W -Wall -Os -c schedule.c -o schedule.o
i686-w64-mingw32-gcc -W -Wall -O3 -c sha256.c -o sha256.o
i686-w64-mingw32-gcc -W -Wall -Os -c translate.c -o translate.o
translate.c: In function ‘translate’:
translate.c:644:11: attention : ‘imm’ may be used uninitialized in this function [-Wuninitialized]
i686-w64-mingw32-gcc -W -Wall -Os -c usb.c -o usb.o
i686-w64-mingw32-gcc -W -Wall -Os -c usblink.c -o usblink.o
usblink.c: In function ‘dump_packet’:
usblink.c:41:31: attention : unused parameter ‘type’ [-Wunused-parameter]
usblink.c:41:43: attention : unused parameter ‘data’ [-Wunused-parameter]
usblink.c:41:53: attention : unused parameter ‘size’ [-Wunused-parameter]
usblink.c: In function ‘usblink_received_packet’:
usblink.c:172:3: attention : déréférencement du pointeur type-punned brisera les strictes d'aliases [-Wstrict-aliasing]
usblink.c:182:3: attention : déréférencement du pointeur type-punned brisera les strictes d'aliases [-Wstrict-aliasing]
i686-w64-mingw32-gcc -W -Wall apb.o asmcode.o cpu.o des.o debug.o emu.o flash.o gui.o interrupt.o keypad.o lcd.o link.o memory.o mmu.o os-win32.o resource.o schedule.o sha256.o translate.o usb.o usblink.o -o emu.exe -lgdi32 -lcomdlg32 -lwinmm


$ ls
apb.c      cpu.o    disasm.c  flash.c  interrupt.c  lcd.o      memory.c        os-win32.c   resource.rc~  translate.c  usb.o
apb.o      debug.c  emu.c     flash.o  interrupt.o  link.c     memory.o        os-win32.h   schedule.c    translate.o
asmcode.o  debug.o  emu.exe   gui.c    keypad.c     link.o     mmu.c           os-win32.o   schedule.o    usb.c
asmcode.S  des.c    emu.h     gui.o    keypad.o     Makefile   mmu.o           resource.o   sha256.c      usblink.c
cpu.c      des.o    emu.o     id.h     lcd.c        Makefile~  nspire_emu.exe  resource.rc  sha256.o      usblink.o


$ ./emu.exe
bash: ./emu.exe : fichier binaire impossible à lancer

Ais-je mal fait quelque chose ?

Re: Emuler Nspire sous linux : Nspire_emu

Unread postPosted: 28 Sep 2012, 19:57
by Lionel Debroux
Essaie de le lancer explicitement par "wine emu.exe".
Mais ça ne donnera pas forcément de meilleurs résultats. Si tu as installé un package Wine, il a peut-être été enregistré automatiquement dans binfmt-support pour que le kernel invoque "wine" quand un header Win-PE est détecté.

Mais au fait, pourquoi ne pas utiliser la version pré-compilée ? :)

Re: Emuler Nspire sous linux : Nspire_emu

Unread postPosted: 28 Sep 2012, 20:17
by tobiasBora
Ah mais tu dis que la compilation créé un fichier pour windows ??? Je désire, comme je l'ai déjà expliqué, ne pas utiliser wine... Il n'y a donc aucun moyen de le compiler pour linux ? Je pensais que i686-w64-mingw32-gcc lisait le code comme si c'était du code windows, mais qu'il allait le compiler pour linux (un peu comme un traducteur)...

Il n'y a vraiment aucun moyen pour le compiler pour Linux nativement ? Pourtant la version Xspire semble avoir nspire_emu compilée pour linux... Comment ont-t'ils fait ? Je pense que je préfère presque utiliser une vieille version native plutôt qu'une version récente pour windows.

Re: Emuler Nspire sous linux : Nspire_emu

Unread postPosted: 28 Sep 2012, 20:30
by Lionel Debroux
Ah mais tu dis que la compilation créé un fichier pour windows ???

Habituellement, par définition, un cross-compilateur génère des exécutables pour une autre plate-forme :)
Mais si tu ne connaissais pas le terme, tu ne pouvais pas le savoir.

Je désire, comme je l'ai déjà expliqué, ne pas utiliser wine...

Alors il n'y a pas de solution.

Il n'y a donc aucun moyen de le compiler pour linux ?
Il n'y a vraiment aucun moyen pour le compiler pour Linux nativement ?

Tel que le code est fait, non.

Pourtant la version Xspire semble avoir nspire_emu compilée pour linux... Comment ont-t'ils fait ?

Ils ont forké de très vieilles versions (qui étaient peut-être plus faciles à modifier à l'époque ?) de nspire_emu.

Je pense que je préfère presque utiliser une vieille version native plutôt qu'une version récente pour windows.

C'est une très mauvaise idée, car tu vas avoir quantité de manques dans l'émulation et dans l'émulateur. En particulier, il est fort improbable que les OS récents des Nspire fonctionnent...
Naturellement, la quasi-totalité des problèmes que tu vas avoir n'existent pas sur la dernière version, donc utiliser une version convenable est la première chose qui va t'être suggérée ;)


Comme je l'ai mentionné plus haut, nspire_emu fonctionne bien avec Wine, comme quantité de programmes Windows d'ailleurs. Ca réduit donc d'autant, et de manière permanente, la nécessité d'un portage vers d'autres plate-formes.