Pocket emul sous tablette androïd c'est pour quand ?

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
Avatar du membre
Pocket
Administrateur
Administrateur
Messages : 5941
Enregistré le : 24 mai 2002 16:55
Localisation : Toulouse
Contact :

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par Pocket »

Salut,
remy a écrit :J'ai isolé un problème dans l'émulation du Z80 sur Android. Voici le code qui pose soucis :

Code : Tout sélectionner

unsigned char x  = 0xEC;
unsigned short y = 0xCF27;;
y += (char)(x) + 2;
Résultat sur Windows : y=0xCF17
Résultat sur Android (ARM) : y = 0xD015

La conversion unsigned to signed ne semble pas fonctionner sur Android. Je ne comprends pas pourquoi.
Je suis prenneur de vos lumières.
Quel compilateur utilises tu sous Windows ?
Car pour moi c'est un problème de conversion implicite de ton compilateur sous windows !

En respectant l'ordre de précédence et de conversions implicites, les opérations doivent être effectuées de la manière suivante :

1) conversion de la valeur de x en char signé : -20 (décimal)
2) conversion implicite de la valeur en entier signé : -20 (décimal)
3) ajout de 2 : -18 (décimal)
4) conversion implicite de la valeur en short non signé : 00EE (hexadécimal)
5) ajout de la valeur à y : y = D015 (hexadécimal)

Ce qui semble être bon sous Android.

De ce que j'en comprend, ton compilateur sous Windows ne respecte pas l'ordre de conversion implicite et effectue les opérations de cette manière :

1) conversion de la valeur de x en char signé : -20 (décimal)
2) conversion implicite de la valeur en entier signé : -20 (décimal)
3) ajout de 2 : -18 (décimal)
4) conversion implicite de y en short signé ? : -12505 (décimal)
5) ajout des deux valeurs ? : -12523 (décimal)
6) conversion en short signé dans y ? : CF15 (hexadécimal)


T'es sur que c'est à 0xCF17 sur Windows ?

D'une manière générale dès que tu as une formule avec des types différents dans un calcul, il faut se méfier des conversions implicites et forcer avec des conversions explicites.

Tu peux essayer de vérifier l'ordre de précédence et de conversion implicite de ton compilateur dans l'aide intégré ...

A+
Pocket, voit tout, sait tout, lit l'avenir dans les entrailles d'une base phpBB ...
Image
Avatar du membre
SbM
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4609
Enregistré le : 24 nov. 2004 21:49
Localisation : SQY (78), France
Contact :

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par SbM »

Et après on s'étonne que le Pocket se chope des migraines…
http://sbm.ordinotheque.free.fr | http://www.mo5.com
"Un bon disque dur est un disque dur mort." (Général Cluster)
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par remy »

Je corrige, c'est bien CF15 sous windows.
Je suis justement en train d'investiguer les conversions implicites. Et j'ai trouvé une autre source qui indique que tous les opérandes sont convertis en int avant d'être reconvertis dans le type cible.
Sous windows je suis sur mingw et sur Android j'utilise gcc.
Je crois qu'en tout cas le problème est bien ciblé sur les conversions implicites.

Merci de ton explication.
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
Avatar du membre
Pocket
Administrateur
Administrateur
Messages : 5941
Enregistré le : 24 mai 2002 16:55
Localisation : Toulouse
Contact :

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par Pocket »

Salut,
remy a écrit :... j'ai trouvé une autre source qui indique que tous les opérandes sont convertis en int avant d'être reconvertis dans le type cible.
Les règles de conversions implicites peuvent varier suivant les compilateurs et les versions du C / C++ !

Dans le Kernighan & Richie, elles ont changés entre la première et la seconde édition (ou ils précisent justement que des effets inattendus peuvent survenir lorsqu'on mélange des signés et non signés)

Donc, le plus simple dans ce genre de situation est d'éviter les conversions implicites.

Quelle opération exacte souhaites tu effectuer ? (et quelles sont les gammes de valeurs pour x et y ?)

A+
Pocket, voit tout, sait tout, lit l'avenir dans les entrailles d'une base phpBB ...
Image
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par remy »

Ce calcul est présent dans une instruction de saut conditionnel.
y est le Programm Counter , un unsigned short sur 2 octets
x est la taille du saut en avant ou en arrière +-128 octets
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
Avatar du membre
Pocket
Administrateur
Administrateur
Messages : 5941
Enregistré le : 24 mai 2002 16:55
Localisation : Toulouse
Contact :

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par Pocket »

Salut
remy a écrit :Ce calcul est présent dans une instruction de saut conditionnel.
y est le Programm Counter , un unsigned short sur 2 octets
x est la taille du saut en avant ou en arrière +-128 octets
Je ferais un truc bourrin du genre :

Code : Tout sélectionner

y = ((long) y + (char) x + 2);
Cela utilise deux conversions implicites :
- le (char) x sera converti en long pour faire tout le calcul en long
- le résultat calculé en long sera converti en unsigned short lors de l'affectation à y .

Mais ce serais bien de rajouter des tests aux limites pour gérer les cas ou le résultat du calcul dépasse les capacités d'un unsigned short ... (nombre négatif ou supérieur à 65535) :

Code : Tout sélectionner

long z = (long) y + (char) x + 2;
if ( (z < 0) || (z > 0xFFFF) )
    traitementErreur;
else
    y = (unsigned short) z;
A+
Pocket, voit tout, sait tout, lit l'avenir dans les entrailles d'une base phpBB ...
Image
Avatar du membre
Marcus von Cube
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 914
Enregistré le : 20 avr. 2006 13:48
Localisation : Wehrheim, Allemagne
Contact :

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par Marcus von Cube »

Je comprends !

Code : Tout sélectionner

y += (char)(x) + 2;
Remplace ça par:

Code : Tout sélectionner

y = (unsigned short) ( (int) y + 2 + (signed char) x );
Les deux compilateurs sont des GCCs. Peut-être les options (par exemple pour le signe de char) ne sont pas pareil ?
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par remy »

Je suis en train d'entrevoir une autre piste.
Je viens de me rendre compte le type char est par défaut signed ou unsigned en fonction des plateformes.
Su Windows il est signé et sur ARM il est non signé.
J'ai donc rajouté la directive -fsigned-char et relancé une build . On va voir.
Comme quoi il faut toujours être explicite .
le bon code serai donc :

Code : Tout sélectionner

y += (signed char)(x) + 2;
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par remy »

YES CA MARCHE !!!!! l'émulation du X07 et donc surement celle du PC-1600 fonctionnent.

Bon ben j'aurai appris un nouveau truc aujourd'hui ... c'est cool.

Je vais de ce pas modifier tous mes char en signed char, ça sera plus propre.

Rémy
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par remy »

Marcus von Cube a écrit :!
Les deux compilateurs sont des GCCs. Peut-être les options (par exemple pour le signe de char) ne sont pas pareil ?
Je n'avais pas lu ton message !!! quel idiot, j'aurai économisé pas mal de temps car tu avais trouvé la solution. Trop fort Marcus.
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par remy »

Bon j'ai remis une nouvelle version à disposition ICI

J'ai ajouté le menu contextuel en faisant un appuis long sur le pocket. c'est surtout utile pour le close
J'ai enlevé l’accès au compilateur car je vois mal comment développer en C sur l'écran d'un smartphone (Je le rajouterai plus tard pour ceux qui ont un genre Transformer).
Tous les fichiers d'états sont sauvegardés dans /sdcard/pockemul

Rémy
Modifié en dernier par remy le 18 avr. 2012 20:16, modifié 1 fois.
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
Avatar du membre
pstriolo
Modérateur
Modérateur
Messages : 3511
Enregistré le : 22 mai 2002 07:05
Localisation : Dans ton cul... au fond à gauche

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par pstriolo »

erreur 404 document non trouvé.

tu dois avoir une erreur de lien.

philou
Tout près de la Garonne
Non loin des Pyrénées
Il existe une ville
Toulouse où je suis né
Toulouse et son équipe
Son stade des 7 deniers
Les toulousains arrivent
Ils vont tout remporter
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par remy »

c'est corrigé
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
herlock
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 5
Enregistré le : 19 avr. 2012 09:44

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par herlock »

Bonjour,

Félicitations pour ce projet magnifique ! incroyable d'avoir tous ces pockets sur Android. ! :) manque que le PC-1211, dont je comprends que les ROMs sont difficiles à obtenir....

J'avais cependant quelques remarques et questions:

1/Sur le PC-1500, LIST ne marche pas... je n'arrive pas non plus à faire afficher quelque chose par programme (PRINT). J'ai vu que cétait un problème ancien corrigé en 2007, je me suis dit, c'est peut-être encore un problème de compil sur Android, mais la version Windows se comporte pareil... qu'en est-il exactement ? Aussi, des fois il n'y a pas de mémoire dispo (MEM renvoie 0, aucun programme ne peut être rentré), même après l'ajout d'une "carte" virtuelle...il faut alors reseter le pocket.

2/Sur le PC-1500 et sur d'autres parfois, il faut utiliser Pocket/Turn ON pour allumer le pocket, le switch ne marche pas. Sur le PC-1261 par exemple, le switch est très dur à accrocher pour changer de mode (j'ai un Samsung 4'' Galaxy Wifi 4.0)

3/Souvent, toucher un switch me demande si je veux clore la session, je ne sais pas pourquoi. Je n'arrive d'ailleurs pas à retrouver les fichiers de session dans le dialog load/save, mais si apparemment ils sont là...

4/Serait-il possible de limiter l'interface et de l'adpater à l'environnement très réduit d'un mobile ? par exemple, en autorisant qu'un seul pocket à fois (plusieurs ça fait ramer), mais par contre en le zoomant automatiquement à la taille max de l'écran en paysage et en le fixant? il est pénible de devoir toujours zoomer, et on se sait jamais si appuyer sur une touche virtuelle ne vas pas déplacer le pocket....

5/L'app, même en veille, prend un temps processeur monstreux (entre 40% et 90%), et donc doit consommer un max de batterie... serait-il possible d'optimiser cela ?

En tout cas merci et bravo, amicalement.
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: Pocket emul sous tablette androïd c'est pour quand ?

Message par remy »

herlock a écrit :Bonjour,

Félicitations pour ce projet magnifique ! incroyable d'avoir tous ces pockets sur Android. ! :) manque que le PC-1211, dont je comprends que les ROMs sont difficiles à obtenir....
Eh oui, le PC-1211 ne sera jamais émulé tant qu'aucune information sur les cpu 4 bits qui le composent ne sera disponible.
herlock a écrit : 1/Sur le PC-1500, LIST ne marche pas... je n'arrive pas non plus à faire afficher quelque chose par programme (PRINT). J'ai vu que cétait un problème ancien corrigé en 2007, je me suis dit, c'est peut-être encore un problème de compil sur Android, mais la version Windows se comporte pareil... qu'en est-il exactement ? Aussi, des fois il n'y a pas de mémoire dispo (MEM renvoie 0, aucun programme ne peut être rentré), même après l'ajout d'une "carte" virtuelle...il faut alors reseter le pocket.
Je vais me pencher sur le PC-1500. C'est une machine qui ne m'a jamais fait rêver et je ne le lance que très rarement sur PockEmul.
herlock a écrit : 2/Sur le PC-1500 et sur d'autres parfois, il faut utiliser Pocket/Turn ON pour allumer le pocket, le switch ne marche pas. Sur le PC-1261 par exemple, le switch est très dur à accrocher pour changer de mode (j'ai un Samsung 4'' Galaxy Wifi 4.0)

3/Souvent, toucher un switch me demande si je veux clore la session, je ne sais pas pourquoi. Je n'arrive d'ailleurs pas à retrouver les fichiers de session dans le dialog load/save, mais si apparemment ils sont là...
Oui, tu as raison, je dois trouver une solution pour le TURN ON qui n'est pas géré pour tous les pockets. En plus, il pose un probleme sur les 12XX car il est combiné à la touche MODE. C'est pour cela qu'il te demande s'il doit sauver la session car il a interpréter un OFF au lieu d'un changement de mode.
herlock a écrit : 4/Serait-il possible de limiter l'interface et de l'adpater à l'environnement très réduit d'un mobile ? par exemple, en autorisant qu'un seul pocket à fois (plusieurs ça fait ramer), mais par contre en le zoomant automatiquement à la taille max de l'écran en paysage et en le fixant? il est pénible de devoir toujours zoomer, et on se sait jamais si appuyer sur une touche virtuelle ne vas pas déplacer le pocket....
Ca parait logique en effet. J'ai un bout de code qui permet cela.
herlock a écrit : 5/L'app, même en veille, prend un temps processeur monstreux (entre 40% et 90%), et donc doit consommer un max de batterie... serait-il possible d'optimiser cela ?
Tu souhaiterai que les pockets se mettent en veille également ? Je le note.

Merci pour ces retours, c'est sympa.

Rémy
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
Répondre

Retourner vers « Tous les Pockets »