Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » Afficher un sprite en C sur G90
Leno Hors ligne Membre Points: 282 Défis: 0 Message

Afficher un sprite en C sur G90

Posté le 23/12/2018 17:31

Existe-t-il une lib qui permet cela ?


1, 2 Suivante
Lephenixnoir Hors ligne Administrateur Points: 18456 Défis: 142 Message

Citer : Posté le 23/12/2018 17:42 | #


De mémoire la plupart des gens font la copie eux-même, ce qui est facile vu que chaque pixel fait 2 octets dans la VRAM.
Leno Hors ligne Membre Points: 282 Défis: 0 Message

Citer : Posté le 23/12/2018 17:51 | #


Et comment puis-je afficher un pixel ?
Seid ihr das essen ? Nein ! Wir sind der Jaeger !
Lephenixnoir Hors ligne Administrateur Points: 18456 Défis: 142 Message

Citer : Posté le 23/12/2018 18:05 | #


D'abord tu obtiens l'adresse de la VRAM avec un syscall. La VRAM est un tableau de 384*216 pixels donc chacun est un short. Pour écrire le pixel à la position (x,y), tu modifies l'entrée numéro 384*y+x de la VRAM pour y mettre la couleur au format R5G6B5.
Leno Hors ligne Membre Points: 282 Défis: 0 Message

Citer : Posté le 23/12/2018 18:20 | #


Donc si je veux allumer le pixel x=20, y=15 ça donne :
VRAM[384*15+20] = R0G0B0;
?
Seid ihr das essen ? Nein ! Wir sind der Jaeger !
Lephenixnoir Hors ligne Administrateur Points: 18456 Défis: 142 Message

Citer : Posté le 23/12/2018 18:21 | #


Si tu veux que le pixel soit noir, la couleur est 0x0000, donc ça donne :

VRAM[384*15+20] = 0x0000;

Attention les lignes et les colonnes sont comptées à partir de 0.
Leno Hors ligne Membre Points: 282 Défis: 0 Message

Citer : Posté le 23/12/2018 18:23 | #


Merci je crois avoir compris

Ajouté le 23/12/2018 à 18:29 :
Quand je compile, ca me dit:
In function 'int main()':
'VRAM' was not declared in this scope

A quel moment et comment dois-je la déclarer ?

Seid ihr das essen ? Nein ! Wir sind der Jaeger !
Ityt Hors ligne Membre Points: 216 Défis: 0 Message

Citer : Posté le 23/12/2018 18:36 | #


VRAM est un pointeur que tu n'as pas déclaré, tu dois utiliser le syscall (une fonction qui est stocké dans la calculette).
Pour la graph 75 on fait ça :
const static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070};
const static int (*SysCall)( int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode;
short* vram_adress()
{
    return (short *)((*SysCall)(0, 0, 0, 0, 309));
}

La fonction vram_adress() renvoie le pointeur qui pointe vers la VRAM du coup tu dois faire:
short *VRAM = vram_adress();

après je sais pas si c'est pareil pour la Graph 90.
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
Leno Hors ligne Membre Points: 282 Défis: 0 Message

Citer : Posté le 23/12/2018 18:40 | #


Mais à quoi correspondent les variables R4,R5,R6,R7,FNo ?

Seid ihr das essen ? Nein ! Wir sind der Jaeger !
Ityt Hors ligne Membre Points: 216 Défis: 0 Message

Citer : Posté le 23/12/2018 18:43 | #


D'après les messages de Lephe c'est un tableau de short donc je modifie mon message. Les variables R4... franchement je sais pas je comprends pas la moitié du code que je t'ai mis (mais ça marche). C'est du C obscure.
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
Leno Hors ligne Membre Points: 282 Défis: 0 Message

Citer : Posté le 23/12/2018 18:47 | #


Avec ton code, ça affiche:
invalid conversion from 'void*' to 'const int (*)(int, int, int, int, int)' [-fpermissive]

Seid ihr das essen ? Nein ! Wir sind der Jaeger !
Ityt Hors ligne Membre Points: 216 Défis: 0 Message

Citer : Posté le 23/12/2018 18:59 | #


Étrange, c'est un warning ou un erreur ? Chez moi ça compile... essaye ça :
__asm__(
".global _vram_address\n"
"_vram_address\n"
"mov.l syscall_table, r2\n"
"mov.l 1f, r0\n"
"jmp @r2\n"
"nop\n"
"1:\n"
".long 0x01E6\n"
"syscall_table:\n"
".long 0x80010070\n"
);
short *vram_address();


tu codes bien sur graph 90 ?

EDIT: Si t'es bien sur Graph 90 je vais pas pouvoir beaucoup t'aider, de plus l'utilisation des syscalls faut faire un peu gaffe...

2eme EDIT: fais gaffe la fonction a changé maintenant c'est "vram_address()" avec deux "d"
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
Leno Hors ligne Membre Points: 282 Défis: 0 Message

Citer : Posté le 23/12/2018 19:03 | #


c'est une erreur mais ou dois-je mettre ton code ?
Seid ihr das essen ? Nein ! Wir sind der Jaeger !
Ityt Hors ligne Membre Points: 216 Défis: 0 Message

Citer : Posté le 23/12/2018 19:05 | #


Juste au dessus du main().

EDIT: Je te préviens ce que je fais c'est du bricolage
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
Lephenixnoir Hors ligne Administrateur Points: 18456 Défis: 142 Message

Citer : Posté le 23/12/2018 19:13 | #


Hmm, sur Graph 90 ce n'est pas le même syscall. Je crois que la fonction GetVRAMAddress() de la libfxcg renvoie ce que tu veux. (Si ça ne marche pas, essaie avec un seul d, il y a des erreurs de ce type qui traînent.)
Ityt Hors ligne Membre Points: 216 Défis: 0 Message

Citer : Posté le 23/12/2018 19:18 | #


Pour le syscall, j'ai pris le code pour fx-CG. J'ai un pdf que j'ai extrait du .chm si tu veux, un gros tableau
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
Lephenixnoir Hors ligne Administrateur Points: 18456 Défis: 142 Message

Citer : Posté le 23/12/2018 19:21 | #


Dans ce cas, tu devrais avoir la même adresse de saut que SimLo, soit 0x80020070, pas 0x80010070
Ityt Hors ligne Membre Points: 216 Défis: 0 Message

Citer : Posté le 23/12/2018 19:24 | #


Ah mince, je parlais pas de ça en plus maï bade
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
Leno Hors ligne Membre Points: 282 Défis: 0 Message

Citer : Posté le 23/12/2018 19:31 | #


Vous m'avez perdu...
@Lephe Quel est le code que je dois mettre pour avoir l'adresse de la VRAM ?

Seid ihr das essen ? Nein ! Wir sind der Jaeger !
Ityt Hors ligne Membre Points: 216 Défis: 0 Message

Citer : Posté le 23/12/2018 19:37 | #


essaye ça :
__asm__(
".global _vram_address\n"
"_vram_address\n"
"mov.l syscall_table, r2\n"
"mov.l 1f, r0\n"
"jmp @r2\n"
"nop\n"
"1:\n"
".long 0x01E6\n"
"syscall_table:\n"
".long 0x80020070\n"
);
short *vram_address();


pour rappel, ça va te donner la fonction vram_address() qui renvoie le fameux pointeur vers l'adresse de la Vram, mais d'après Lephenixnoir tu peux aussi utiliser "GetVRAMAddress() de la libfxcg".
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
Lephenixnoir Hors ligne Administrateur Points: 18456 Défis: 142 Message

Citer : Posté le 23/12/2018 19:39 | #


Dans ma proposition, juste
short *VRAM = GetVRAMAddress();
1, 2 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
Pour coloriser votre code, cliquez ici.
Sinon cliquez sur le bouton ci-dessous.
: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 v42 © créé par Neuronix et Muelsaco 2004 - 2020 | Il y a 59 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