Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Actualités


Index du Forum » Actualités » Rendre un add-in compatible SH4
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Rendre un add-in compatible SH4

Posté le 03/01/2013 13:37

Bonjour à tous, Casiofans. Après quelques mois de stress face aux incompatibilités entre les add-ins destinés aux anciennes calculatrices et les nouveaux modèles SH4, nous avons la joie de vous annoncer une excellente nouvelle... des anglophones ont trouvé le moyen de rendre compatibles les programmes C/C++ grâce à un morceau de code à ajouter.

La fonction qui permet l'accès au clavier de la calculatrice était en effet incompatible parce que le changement de processeur entraînait un changement d'adresses en mémoire. Le morceau de code suivant y remède :

http://pastebin.com/ApF7Z2bW

Quant à MonochromeLib, la librairie de Pierrotll, il faut remplacer :

ça
ça
static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070};
static int (*SysCall)( int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode;
char* ML_vram_adress()
{
return (char*)((*SysCall)(0, 0, 0, 0, 309));
}

par ça
par ça
typedef char*(*sc_cpv)(void);
const unsigned int sc0135[] = { 0xD201D002, 0x422B0009, 0x80010070, 0x0135 };
#define ML_vram_adress (*(sc_cpv)sc0135)


En espérant que les développeurs adaptent vite leurs jeux.

Source : Universal Casio Forum


Précédente 1, 2, 3 ··· 8, 9, 10, 11, 12, 13 Suivante
Mnbd Hors ligne Membre Points: 155 Défis: 0 Message

Citer : Posté le 05/07/2013 21:18 | #


c'est genial, maintenant, il n'y a plus qu'à récuperer les sources et à tout recompiler.
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 05/07/2013 21:42 | #


bon, je sens que Mario Land CE va avoir droit a une nouvelle vie
(je ne fais qu'une suggestion )
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Dark storm En ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 05/07/2013 22:06 | #


Mnbd a écrit :
c'est genial, maintenant, il n'y a plus qu'à récuperer les sources et à tout recompiler.

Heu, par contre il n'ajoute pas automatiquement le code dès l'import d'un projet. Il ne le fait que lors de sa création...
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 05/07/2013 22:59 | #


Si on avait les sources on pourrait le faire facilement de toute façon.
Dark storm En ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 05/07/2013 23:06 | #


oui, c'est sur.
Je réfléchissais, en trouvant les codes assembleur du Getkey et des IsKey****, on pourrait le remplacer par ceux compatibles SH4.
Le plus chaud, c'est que vu que c'est une fonction avec pointeur (pour Getkey), faudra voir comment gérer le truc.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 09/07/2013 14:23 | # | Fichier joint


Je suis peut-être sur une piste pour pouvoir convertir des addin déjà compilés. Le gros problème c'est que je n'ai pas d'SH4 donc pour tester c'est chiant.

Donc je voudrais savoir si quelqu'un pourrait passer régulièrement ici et tester les addin que je lui donne. En voilà déjà une fournée. Ceux la ne sont pas corrigés, ils vont juste me permettre de bien situer le problème.

Donc tous les addins se trouvent en pièce jointe dans le zip, y'en a certain qui sont censé bugger et d'autre non. (ils fonctionnent tous sur SH3).
Quand le bug se produit, vous notez les deux valeurs qui sont affichés à l'écran (Target et PC) et vous les écrivez ici.

Merci beaucoup à celui qui fera ça

Ajouté le 09/07/2013 à 14:36 :
Je viens d'en rajouter un que j'avais oublié, il y en a maintenant 9 à tester
Maliafo Hors ligne Membre Points: 236 Défis: 27 Message

Citer : Posté le 09/07/2013 15:43 | #


Alors donc
GET6C4-2 : c'est bon (touche pour quitter ?)
GETKEY247 : c'est bon aussi (pareil ?)
GET6C4 : Target E6FF2136
Pc 08100014
GETKEY : c'est ok
KEYDOWN : l'écran s'éteint ; tenter de rallumer ne fait rien sauf si j'enlève les piles auparavant
KEYUP : pas de bug, mais il se passe rien [juste affiché test : up] ( de même, touche pour quitter ?)
SC135 : comme keyup, écran gelé sur test : 080085c1
SC135-2 : Target E6FF2136
Pc : 08100014 (les mêmes que GET6C4 en passant)
SC135-3 : Exactement comme SC135 (gelé sur test : 080085c1)


Comment recouvrir la Terre avec du cuir ?
Avec la semelle de nos chaussures, on en fait autant


ziqumu-- Invité

Citer : Posté le 09/07/2013 16:03 | #


Arf j'ai oublie de te dire certaines instructions. En principe pour quitter c'est menu. Mais c'est possible que ça ne fonctionne pas sur certains. Donc soit t'enleve les piles doit bouton restât derriere c'est pareil


GETKEY247 : tu peux me dire ce que ca fait quand tu appuis sur exe
GETKEY : idem
KEYDOWN : rien ne se passe même si tu appuis sur exe
KEYUP : normalement si tu appuis sur exe ça devrait marquer down
SC135 : appuis sur exe
SC135-3 : idem

En tout cas merci beaucoup, ça va beaucoup m'aider, notamment si keyup fonctionne, alors que keydown non
Maliafo Hors ligne Membre Points: 236 Défis: 27 Message

Citer : Posté le 09/07/2013 17:03 | #


Pas de quoi

GETKEY247 :
test :
00000003
00000002
GETKEY :
test :
00007534
KEYDOWN : ça change rien
KEYUP : idem, up reste
SC135 : ça fait rien
SC135-3 : et là non plus
:/

tu m'as pas demandé mais dans le doute je mets quand même
:arrow:GET6C4-2 : test : 0000001f
Comment recouvrir la Terre avec du cuir ?
Avec la semelle de nos chaussures, on en fait autant
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 09/07/2013 17:44 | #


Merci Maliafo. Je récapitule pour tous les devs pour que ce soit bien claire :

Fonction d'input :
GetKey de la FxLib :
Fonctionne parfaitement avec les mêmes codes de touches (fonction d'input bloquante)
le GetKeyWait du syscall 0x6C4 :
Fonctionne parfaitement avec les mêmes codes de touches (fonction d'input non bloquante)
le GetKeyWait du syscall 0x247 :
Fonctionne parfaitement avec les mêmes codes de touches (fonction d'input bloquante et non bloquante)
IsKeyDown de la FxLib :
Ne fonctionne pas : l'écran s'éteint et tenter de rallumer ne fait rien (sauf si on appuis sur le bouton restart évidement) => Freeze
IsKeyUp de la FxLib :
Ne fonctionne pas : l'information comme quoi la touche n'est plus "Up" n'est pas envoyé, cependant il ne semble pas y avoir de freeze de la calculatrice.
Voilà c'est tout pour les fonction d'input, il ne me semblait pas en avoir vu d'autres. Enfin si il y a la getKeyWait de la fxlib, mais celle-ci n'a jamais fonctionné.

Appel des syscall : Ce petit test m'a permis de vérifier ce que je pensais déjà, il y a une forme d'appel de syscall qui ne fonctionne plus. Celle qui est utilisé dans monochromelib.
Ici l'appel du syscall 0x135, dans le format qui ne fonctionne pas :

static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070};
static int (*SysCall)( int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode;
char* ML_vram_adress()
{
    return (char*)((*SysCall)(0, 0, 0, 0, 309));
}

Le même syscall avec le format donné par Casimo, celui-ci fonctionne :
typedef char*(*sc_cpv)(void);
const unsigned int sc0135[] = { 0xD201D002, 0x422B0009, 0x80010070, 0x0135 };
#define ML_vram_adress (*(sc_cpv)sc0135)

Je rappel tout de même que le meilleur format est celui utilisant un fichier externe et celui-ci est compatible :
[red][b]--main.c--[/b][/red]
#include "syscall.h"

int AddIn_main(int isAppli, unsigned short OptionNum)
{
   Disp_GetVRAMPtr();
}

[red][b]--syscall.h--[/b][/red]
#ifndef _SYSCALL
#define _SYSCALL
char* Disp_GetVRAMPtr();
#endif


[red][b]--syscall.src--[/b][/red]
    .SECTION P,CODE,ALIGN=4

    .MACRO SYSCALL FUNO, SYSCALLNAME, TAIL=nop
    .export \SYSCALLNAME'
\SYSCALLNAME'
    mov.l #h'\FUNO, r0
    mov.l #H'80010070, r2
    jmp @r2
    \TAIL'
    .ENDM

    SYSCALL 0135,    _Disp_GetVRAMPtr
    .end

Et dans le SDK vous indiquez au gestionnaire de fichier : main.c et syscall.src


Bon maintenant je vais essayer de comprendre pourquoi le format de MonochromeLib ne fonctionne pas, et comment le résoudre directement en assembleur (et si possible résoudre le problème en C, pour garder ce format que je trouve plus logique que celui de Casimo). Puis j’essaierais de résoudre le problème d'input. Je vous tient au courant, j'aurais sans doute encore des fichiers à tester, et encore merci à Maliafo
Maliafo Hors ligne Membre Points: 236 Défis: 27 Message

Citer : Posté le 09/07/2013 18:43 | #


De rien, c'était gratuit
Comment recouvrir la Terre avec du cuir ?
Avec la semelle de nos chaussures, on en fait autant
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 09/07/2013 20:32 | # | Fichier joint


Sans grande conviction, pourrait tu tester ce fichier stp ?
(enfin Maliafo ou quelqu'un d'autre qui a une SH4, peu importe )

En principe si ça fonctionne tu devrait voir afficher
test : 080085c1
Mais il y a peu de chance que ça fonctionne
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 11/07/2013 15:31 | # | Fichier joint


Un nouveau petit test : si je ne me suis pas trompé, lorsque vous appuirez sur une touche les 4 lignes affichés sur l'écran devraient changer.

J'aimerais avoir les valeurs de ces 4 lignes pour :
- Quand vous appuyez sur aucune touche
- Quand vous appuyez sur F1
- Sur F2
- Sur EXE
- Sur AC/ON
- SUR "ln"
- SUR EXE et F2 en même temps.

ça risque de faire pas mal de lignes, dsl. Et y'a toujours le fichier précédent à tester

Merci à celui qui le fera !
Maliafo Hors ligne Membre Points: 236 Défis: 27 Message

Citer : Posté le 11/07/2013 15:35 | #


Dsl, je peut pas tester, je suis pas chez moi et j'ai pas ma calto
Comment recouvrir la Terre avec du cuir ?
Avec la semelle de nos chaussures, on en fait autant
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 11/07/2013 17:07 | #


Pour le fichier METHODML.g1a:
System ERROR:
TARGET=E6FF2136
PC =08100014
On peut voir à gauche "Te...", le reste est masqué par l'écran d'erreur

Pour le deuxième fichier:
-aucune touches:
00000000
00000000
00000000
00008042
-F1: idem, aucun changement
-F2: aucun changement non plus
-EXE: la première ligne devient: 04000000, le reste ne change pas
-AC/ON: la première ligne devient: 00010000, le reste ne change pas
-In: la deuxième ligne devient: 00000010, le reste ne change pas
-EXE et F2: même comportement qu'avec EXE
→les touches "F1~3", "/", "F<- >D", "(", "0", ".", et "*10^x" n'ont aucun effet
→appuyer sur plusieurs touches fait apparaître les chiffres correspondant aux touches pressées.
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 11/07/2013 18:01 | #


Hmm ça marche pas si bien que ça Faut que je vois ce qui cloche.

Merci beaucoup quand même Alpha'
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 12/07/2013 23:02 | #


Bon une amie m'a prêté sa calculatrice SH4, je vais pouvoir aller beaucoup plus vite

Explication de là ou j'en suis et d'autres truc qui pourraient servir à d'autres gens peut-être :
Bon alors actuellement, je bosse sur la fonction IsKeyUp, j'ai normalement trouvé la partie que je doit remplacer dans le code assembleur de la fonction.

De base la fonction IsKeyDown (comme la fonction KeyDown de Pierrotll) utilisent les ports du processeurs pour savoir l'état des touches et a partir de ces information on arrive à en déduire la position de la touche. Sauf que sur SH4 on a un nouveau processeur, sans doute une nouvelle disposition, ce qui explique que les ports ne sont plus du tout les mêmes qu'avant (pour faire simple ils ont pas du brancher les fils du clavier sur la même prise du processeurs ). Ce qui explique l'incompatibilité avec ces fonctions.

(De plus, si ça se trouve les adresses pour accéder à ces ports ne sont plus les mêmes, et si c'est le cas, je ne sais pas comment les retrouver)

Mais notre ami Casimo a trouvé (je ne sais comment) une solution. En effet les calculatrices SH4 disposent d'un "registre clavier" qui répertorie l'appui sur les touches du clavier.
La ligne du clavier détermine l'octet à lire et je rappel que la ligne F1-6 est la ligne 9 et la 0-EXE est la 1
L'adresse de l'octet vaut 0xA44B0000+Ligne+1-(Ligne%2)
Ensuite, si la colonne de gauche est appuyé alors ça sera le bit 0100 0000 puis pour la deuxième 0010 0000, je vous laisse continuer

Je ne sais pas s'il existe un registre similaire sur SH3, mais je n'en suis pas sûr. Je pense que c'est nouveaux et que les mecs de chez casio ont fait ça pour qu'il n'y ai plus de problèmes similaire dans les futurs changements matériels. Donc selon moi cette adresse est définitive et on peut donc réaliser des fonctions optimisés dessus sans risque, m'enfin je peux me tromper.

Donc maintenant il me reste à réaliser un code assembleur qui vérifiera si la touche est appuyé a partir des infos ci-dessus. Et on prie pour qu'il soit assez petit pour pouvoir remplacer l'actuel sans déborder, sinon ça sera plus chiant
Casimo Hors ligne Membre Points: 141 Défis: 0 Message

Citer : Posté le 13/07/2013 12:36 | #


Mais notre ami Casimo a trouvé (je ne sais comment) une solution.

J'ai modifié cette function: http://prizm.cemetech.net/index.php/Debouncing_Multiple-Keypress_PRGM_GetKey
Ces SH4s sont des prizms avec un display monochrome

La ligne du clavier détermine l'octet à lire et je rappel que la ligne F1-6 est la ligne 9 et la 0-EXE est la 1
L'adresse de l'octet vaut 0xA44B0000+Ligne+1-(Ligne%2)
Ensuite, si la colonne de gauche est appuyé alors ça sera le bit 0100 0000 puis pour la deuxième 0010 0000, je vous laisse continuer

Oui, c'est vrai.

il existe un registre similaire sur SH3

Non, pas du registre Les deux sont tout different

Donc maintenant il me reste à réaliser un code assembleur qui vérifiera si la touche est appuyé a partir des infos ci-dessus. Et on prie pour qu'il soit assez petit pour pouvoir remplacer l'actuel sans déborder, sinon ça sera plus chiant

Bonne chance.
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 13/07/2013 15:01 | #


Merci pour tes précision Casimo

Et j'ai réussi à rendre la fonction IsKeyDown compatible manuellement !

Je vais maintenant réaliser un programme pour faire ça de façon automatique.

Si ça intéresse voilà le code asm que j'utilise

    ;before 1->r5 ; 8->r7 ; 1->r12 ; 0->r10 ; 0->r11 ; row->r0 ; col->r3
    ;verify the row value  : 0 <= row < 7
    cmp/gt r0,r10
    bt target_Error ; if row<0
    mov #h'a,r7
    cmp/ge r7,r0
    bt target_Error ; if row>=10
    ;verify the col value  : 0 <= row < 7
    cmp/gt r3,r10
    bt target_Error ; if col<0
    mov #7,r7
    cmp/ge r7,r3
    bt target_Error ; if col>=7
    ;get the main keyboard regsiter address+1
    mov.l #H'A44B0001,r9
    tst #1,r0 ;if row is even T=1 else T=0
    add r0,r9
    bt target_even ; Jump if T=1
    add #-2,r9
target_even:
    mov.b @r9,r0 ; The byte that contain the row data is now in R0
    mov #1,r9
    shld r3,r9 ; R9 now contain 1<<col
    tst r9,r0 ; if key is pressed T=0
    mov #0,r0
    bt target_keyPressed
    mov #1,r0
target_keyPressed:
    bra target_endFunc
    nop
target_Error:
    mov #0,r0
    bra target_endFunc
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
target_endFunc:

Bon ça va il me restait encore beaucoup de place. (les NOP correspondent à des lignes que je peux remplacer)

EDIT : @Casimo, Do you know why the call method of syscall used in Monochromelib doesn't work ? I know how they works, but I don't know where is the problem. I will search after, but maybe you have an idea ?

Ajouté le 01/08/2013 à 15:01 :
Si quelqu'un tombe ici et veux voir la suite (et l’aboutissement) de mes recherches -> SH4 compatibility tool
Mnbd Hors ligne Membre Points: 155 Défis: 0 Message

Citer : Posté le 02/09/2013 14:43 | #


alors, ça avance la compatibilité SH4

édit by totoyo : smiley supprimés
Tsuneo Hors ligne Membre Points: 973 Défis: 51 Message

Citer : Posté le 02/09/2013 16:19 | #


Pas besoin de tous ces smileys pour s'exprimer... Et renseigne-toi un peu avant de demander, Ziqumu a justement publié son outil pour rendre compatible les add-ins en SH4 juste au-dessus...

Calculatrices : Graph 35+ USB tweakée et Classpad 330
Suivez moi et mon humour dévastateur ici focliquéla
Précédente 1, 2, 3 ··· 8, 9, 10, 11, 12, 13 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 108 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd