Cette fonction est compatible avec les cpu et peut attendre pour émuler les ancienne fonction qui sont lentes. Cette fonction est assez rapide (enfin pas aussi fast que KeyDown, mais KeyDown n'est pas compatible SH4), donc je pense que si je l'optimise un peu cette fonction pourrait être bien pratique pour les nouveaux programmes. Mais bon je débute en assembleur, donc bon on peut sans doute améliorer.
;param 1 (in r4) : Adress of an array of two unsigned char, with in the first cell the col, and in the second the row
;param 2 (in r5) : slowMode : this determine the time this function will wait to emulate the olds functions
; -n : number of loop
; 0 : fatest as possible
; 1 : = duration of IsKeyDown function
; 2 : = duration of IsKeyUp function
; 3 : = duration of KeyDown function
;return (in r0) 1 if the key is pressed.
_GetKeyState
;First put actual value in the stack
sts.l pr,@-r15
mov.l r1,@-r15
mov.l r2,@-r15
mov.l r3,@-r15
mov.l r6,@-r15
mov.l r7,@-r15
mov.l r8,@-r15
mov.l r9,@-r15
mov r4,r8 ; first param
mov r5,r9 ; second param
;check the os version with the syscall 0x0015 | if I use only 1 byte for chars, and 2 for short, it crash on all calc but not on emulator. But these type are valid because the syscall only edit the correct number of byte.
add #-4,r15 ; main version : unsigned char
mov r15,r4
add #-4,r15 ; minor version : unsigned char
mov r15,r5
add #-4,r15 ; release : unsigned short
mov r15,r6
add #-4,r15 ; build : unsigned short
mov r15,r7
;call syscall
mov.l #h'80010070,r2
jsr @r2
mov #h'15,r0
;put os version into r6
add #8,r15
mov.b @r15,r6 ; minor version
add #4,r15
mov.b @r15,r0 ; main version
add #4,r15
shll8 r0 ; r0 = r0<<8
add r0,r6
;reserved registers :
;r9 second param
;r6 OS version
; read and checks coords
mov.b @r8,r7 ; r7 = Key's column
mov.b @(1,r8),r0
mov r0,r8 ; r8 = Key's row
;verify the row value : 0 ≤ row ≤ 9
mov #0, r0
cmp/gt r8,r0 ; if r0 > r8 ⇒ if 0 > row
bt NegativeEnd
mov #9,r1
cmp/gt r1,r8 ; if r8 > r1 ⇒ if row > 9
bt NegativeEnd
;verify the column value : 0 ≤ row ≤ 6
cmp/gt r7,r0 ; if r0 > r7 ⇒ if 0 > column
bt NegativeEnd
mov #6,r1
cmp/gt r1,r7 ; if r7 > r1 ⇒ if column > 6
bt NegativeEnd
;check if os is > 2.02
mov.w #h'0202,r0
cmp/ge r0,r6 ; r0 ≤ r6
bt SH4
;reserved registers :
;r9 second param
;r8 Key's row
;r7 Key's col
;SH3 part
;r6 = smask = 0x0003 << (( row %8)*2);
mov r8,r0 ; row->r0
and #7,r0 ; %8
add r0,r0 ; *2
mov #3,r6
shld r0,r6 ; 3<<
;r5 = cmask = ~( 1 << ( row %8) );
mov r8,r0 ; row->r0
and #7,r0 ; %8
mov #1,r5
shld r0,r5 ; 1<<
not r5,r5 ; ~
;reserved registers :
;r9 second param
;r8 Key's row
;r7 Key's col
;r6 smask
;r5 cmask
;Preparation of the gbr register
mov.l #h'A4000100,r0
ldc r0,gbr
;RowCond : if(row <8)
mov #8,r0
cmp/gt r8,r0 ; if r0>r8 ; row>=8
bf rowCond_Else
;rowCond_begin
;*PORTB_CTRL = 0xAAAA ^ smask;
mov r6,r0
mov.w #h'AAAA,r1
xor r1,r0
mov.w r0,@(h'02,gbr)
;*PORTM_CTRL = (*PORTM_CTRL & 0xFF00 ) | 0x00AA;
mov.w @(h'18,gbr),r0 ; *PORTM_CTRL->r0
mov.w #h'FF00,r1
and r1,r0 ; *PORTM_CTRL & 0xFF00
or #h'AA,r0 ; | 0x00AA;
mov.w r0,@(h'18,gbr)
;delay()
bsr delay
mov #-10,r4
;*PORTB = cmask;
mov r5,r0
mov.b r0,@(h'22,gbr) ;PORTB = cmask
;*PORTM = (*PORTM & 0xF0 ) | 0x0F;
mov.b @(h'38,gbr),r0 ; *PORTM->r0
and #h'F0,r0 ; *PORTM & 0xF0
or #h'0F,r0 ; | 0x0F;
mov.b r0,@(h'38,gbr)
bra rowCond_End
nop
rowCond_Else:
; *PORTB_CTRL = 0xAAAA;
mov.w #h'AAAA,r0
mov.w r0,@(h'02,gbr)
; *PORTM_CTRL = ((*PORTM_CTRL & 0xFF00 ) | 0x00AA) ^ smask;
mov.w @(h'18,gbr),r0
mov.w #h'FF00,r1
and r1,r0 ; *PORTM_CTRL & 0xFF00
or #h'AA,r0 ; | 0x00AA;
xor r6,r0 ; ^ smask;
mov.b r0,@(h'18,gbr)
;delay()
bsr delay
mov #-10,r4 ;In the begin this was 5, but as the delay function is faster, i need to put more
;*PORTB = 0xFF;
mov.b #h'ff,r0
mov.b r0,@(h'22,gbr) ;PORTB = 0xFF
;*PORTM = (*PORTM & 0xF0 ) | cmask;
mov.b @(h'38,gbr),r0
and #h'F0,r0 ; *PORTM & 0xF0
or r5,r0 ; | cmask;
mov.b r0,@(h'38,gbr)
rowCond_End:
;reserved registers :
;r9 second param
;r8 Key's row
;r7 Key's col
;delay()
bsr delay
mov #-10,r4
;result = (~(*PORTA))>>column & 1;
mov.b @(h'20,gbr),r0
not r0,r6 ; r6 = ~r0
neg r7,r0 ; r0 = -column
shld r0,r6 ; r6 = r6>>column
mov.b #1,r0
and r0,r6
;reserved registers :
;r9 second param
;r8 Key's row
;r7 Key's col
;r6 result
;delay()
bsr delay
mov #-10,r4
; *PORTB_CTRL = 0xAAAA;
mov.w #h'AAAA,r0
mov.w r0,@(h'02,gbr)
;*PORTM_CTRL = (*PORTM_CTRL & 0xFF00 ) | 0x00AA;
mov.w @(h'18,gbr),r0
mov.w #h'FF00,r1
and r1,r0 ; *PORTM_CTRL & 0xFF00
or #h'AA,r0 ; | 0x00AA;
mov.w r0,@(h'18,gbr)
;delay()
bsr delay
mov #-10,r4
; *PORTB_CTRL = 0x5555;
mov.w #h'5555,r0
mov.w r0,@(h'02,gbr)
;*PORTM_CTRL = (*PORTM_CTRL & 0xFF00 ) | 0x0055;
mov.w @(h'18,gbr),r0
mov.w #h'FF00,r1
and r1,r0 ; *PORTM_CTRL & 0xFF00
or #h'55,r0 ; | 0x0055;
mov.w r0,@(h'18,gbr)
;delay()
bsr delay
mov #-10,r4
;End of SH3 part
bra AllEnd
nop
SH4:
;Add 3 to the second param (if >0)to select the right wait time
mov #0,r0
cmp/gt r0,r9
bf negatif2ndParam
add #3,r9
negatif2ndParam:
;get the main keyboard regsiter address+1
mov.l #H'A44B0001,r1
mov r8,r0
tst #1,r0 ;if row is even T=1 else T=0
add r8,r1
bt row_even ; Jump if T=1
add #-2,r1
row_even:
mov.b @r1,r0 ; The byte that contain the row data is now in R0
mov #1,r1
shld r7,r1 ; R9 now contain 1<<col
tst r1,r0 ; if key is pressed T=0
movt r0
not r0,r0
and #h'1,r0
mov r0,r6
bra AllEnd
nop
NegativeEnd:
mov #0,r6
;reserved registers :
;r9 second param
;r8 Key's row
;r7 Key's col
;r6 result
AllEnd:
;Wait the correct time to emulate old functions
bsr delay
mov r9,r4
;put result to return register : r0
mov r6,r0
;take out data from stack
mov.l @r15+,r9
mov.l @r15+,r8
mov.l @r15+,r7
mov.l @r15+,r6
mov.l @r15+,r3
mov.l @r15+,r2
mov.l @r15+,r1
lds.l @r15+,pr
rts
nop
; delay : Wait a defined time
;param 1 (in r4) : slowMode : this determine the time this function will wait to emulate the olds functions
; -n : number of loop
; 0 : fatest as possible (equivalent to -1)
; 1 : = duration of IsKeyDown function for SH3
; 2 : = duration of IsKeyUp function for SH3
; 3 : = duration of KeyDown function for SH3
; 4 : = duration of IsKeyDown function for SH4
; 5 : = duration of IsKeyUp function for SH4
; 6 : = duration of KeyDown function for SH4
delay:
;if r4<=0 then it's the number of loop
mov #0,r0
cmp/ge r0,r4
bf LoopNumber
;Search the number of loop needed
add r4,r4 ; *2
mova loopNumbersList,r0
add r4,r4 ; *2 because there is 4 byte per number of loop (this method take less space than use "MUL.L")
add r4,r0
mov.l @r0,r1
bra target_loopBegin
nop ; this nop is added because without the loopNumbersList is not divisible per 4
loopNumbersList:
.data.l h'0001 ;fastest
.data.l h'0001 ;IsKeyDown SH3
.data.l h'0001 ;IsKeyUp SH3
.data.l h'0001 ;KeyDown SH3
.data.l h'0001 ;IsKeyDown SH4
.data.l h'0001 ;IsKeyUp SH4
.data.l h'0001 ;KeyDown SH4
LoopNumber:
neg r4,r1
;Begin : r1 contain the number of loop
target_loopBegin:
dt r1 ; decrement and test if(r1==0)
bf target_loopBegin
rts
nop
Voilà les mesures que j'ai fait pour calculer le temps que prend chaque fonction. (copier ce code dans un editeur texte pour mieux voir..)
;Loop numbers tests : Number of tick taked to execute 5000 times the function
;I made some change between and after theses test so it's possible that if you do it again, you don't find same number, but the little difference will not be really significant. Because this test is on a loop of 5000 times, and mesured in tick (I'm not sure, but I remember it's egal to 1/64 seconds) and one tick is not verry significant for human.
;--------------------------------------------------------------------------------
; |Original | SH3 | SH4 |
;--------------------------------------------------------------------------------
;IsKeyDown |0xb2 |0x17(miss 155) |0x11(miss 161) |
;IsKeyDown with 0x1000 waitloop |---- |0x17b |0x1cd | : Conclusion 0x1000 loop takes 0x164 ticks to be executed on SH3=> (1024/89) loop/ticks
| SH4=> (1024/111) loop/ticks | (I think I've make a mistake somewhere, because on my first try, number of loop was stored in Word (2byte),
| and there was (1024/89) loop/ticks for both cpu, but since I change from word to longword (4byte) and now the sh4 is slower..No idee why.
;IsKeyDown|sh3:1783|sh4:1485 |---- |0xb2 |0xb2 |
;--------------------------------------------------------------------------------
;IsKeyUp |0x1a43 |0x17(miss 6700)|0x11(miss 6706)|
;IsKeyDown|sh3:0x12D1F|sh4:0xF1A8 |---- |0x1a42 |0x1a4a |
;--------------------------------------------------------------------------------
;KeyDown |0x9 |0x11 |0xd | : As the original function is faster than the compatible, we put the slowmode at the minimum for both cpu : 1
;--------------------------------------------------------------------------------
J'ai fais les tests avec ce code
int AddIn_main(int isAppli, unsigned short OptionNum)
{
unsigned int timeBegin;
unsigned int duration;
char string[9];
int i;
while(1)
{
timeBegin = RTC_GetTicks();//RTC_GetTicks is a syscall documented in FxReverse
for(i=0;i<5000;i++)
{
key_down(K_EXE);//Change this function here
}
duration = RTC_GetTicks()-timeBegin;
intToHex(duration, string);
Bdisp_AllClr_DDVRAM();
locate(1,1);
Print((unsigned char*)string);
Bdisp_PutDisp_DD();
}
return 1;
}
void intToHex(unsigned int in, char* string)
{
string[0] = nibbleToHex((unsigned char)in>>28);
string[1] = nibbleToHex((unsigned char)(in>>24)&0xF);
string[2] = nibbleToHex((unsigned char)(in>>20)&0xF);
string[3] = nibbleToHex((unsigned char)(in>>16)&0xF);
string[4] = nibbleToHex((unsigned char)(in>>12)&0xF);
string[5] = nibbleToHex((unsigned char)(in>>8)&0xF);
string[6] = nibbleToHex((unsigned char)(in>>4)&0xF);
string[7] = nibbleToHex((unsigned char)in&0xF);
string[8] = 0;
}
char nibbleToHex(unsigned char in)
{
char out;
if(in <= 9)
out = 0x30 + (unsigned int)in;
else
{
switch(in-10)
{
case 0 : out = 0x61; break;
case 1 : out = 0x62; break;
case 2 : out = 0x63; break;
case 3 : out = 0x64; break;
case 4 : out = 0x65; break;
case 5 : out = 0x66; break;
}
}
return out;
}
Citer : Posté le 05/08/2013 12:49 | #
du genre Shift + up + down => Alpha + up + down (visible dans Gravity Duck)
Citer : Posté le 05/08/2013 13:33 | #
Oui, je suis au courant de ça, mais je crois que j'y peut rien, sachant que je lis le registre clavier directement, c'est lui qui doit comporter ces "bugs" (en soit c'est pas des bugs, ça doit être la disposition du clavier qui est comme ça). Je vois pas trop ce que je peux y faire.
Citer : Posté le 05/08/2013 13:40 | #
bah, tant pis, ce n'est qu'un détail
Citer : Posté le 05/08/2013 13:44 | #
Attend nan, sur SH3 ça devrait pas arriver, faudra que je regarde ce qui se passe.
Citer : Posté le 05/08/2013 16:47 | #
Même sur SH3 ça arrive. Je n'ai jamais pu corriger l'éventuel problème. Je n'avais pas le niveau à l'époque. Je devrais me pencher sur ce douloureux problème.
Citer : Posté le 27/08/2013 17:55 | #
L'astuce pour changer e contraste sur Orton SH4 ne fonctionne toujour pas. Mais j'ai trouvé le moyen de le remettre comme avant en mettant le jeu sur pause (menu) puis en éteinant la calculatrice. Mais il faut recommencer ceci à chaque niveau .
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 08/02/2014 19:51 | #
Aujourd'hui je viens de résoudre une affaire qui m'embêtes depuis 2 mois....
Pourquoi MultiTask n'est pas compatible SH4.
Pourtant, j'avais bien rajouté tout le code nécessaire, changé celui de MonochromeLib, je n'utilisais pas les niveaux de gris...
Mais, je me suis rendu compte que l'outils de Ziqumu avait l'air de marcher vraiment bien pour les anciens jeux, alors j'ai viré le code qu'il fallait mettre en en-tête, et j'ai utilisé l'outils de Ziq' (qui ne marche pas, si vous avez mis le code spécial au début).
Et.... ça a fonctionné !
Tout ça pour dire que si le code d'en-tête ne marche pas, essayer de le supprimer et utilisez l'outils de Ziq', on ne sait jamais.
Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games
Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Citer : Posté le 08/02/2014 19:55 | #
Le concept du code en en-tete est justement de ne pas avoir besoin de l'outil, et c'est d'ailleurs mieux de pas utiliser l'outil, car c'est du bidouillage. (genre bourrain je remplace des morceau de code en plein milieu en esperant que ça fonctionne)
Citer : Posté le 08/02/2014 19:57 | #
Je le sais bien et c'est pour ça que je l'ai utilisé en dernière solution, car ça me paraissait impossible que l'en-tête ne marche pas, mais ton programme oui...
Mais comme je l'ai indiqué :
Tout ça pour dire que si le code d'en-tête ne marche pas, essayer de le supprimer et utilisez l'outils de Ziq', on ne sait jamais.
Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games
Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Citer : Posté le 08/02/2014 20:00 | #
Vous parlez que quel en-tête exactement?
Citer : Posté le 08/02/2014 20:21 | #
Le morceau de code qui permettait de faire compatible SH4, je pense
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 02/11/2014 17:58 | #
Merci j'ai utilisé cet outil sur mon .G1A et maintenant les "IsKeyDown()" fonctionnent par contre, lorsque je déplace mon personnage vers le haut de l'écran, je remarque qu'il y a une bande de pixels (entre y=10 et y=18 environ) qui se clear à chaque tick
Ça ne vient apparemment pas de mon programme car il fonctionne très bien sur l’émulateur du SDK
Bon, je vais essayer de régler le problème sinon, je vais devoir me débrouiller pour ne pas utiliser ces pixels
Plus bizarre encore ...
J'ai trouvé un moyen d'empêcher les pixels de se clear :
je restart ma calto et que je lance le jeu 2 fois de suite ( attention ! surtout pas 3 ... )
- Un pong multijoueur avec le cable 3pin
- Communication IR entre caltos (Arduino)
Citer : Posté le 02/11/2014 18:45 | #
C'est bizarre quand même.
On pourrait pas avoir le code ?
Citer : Posté le 03/11/2014 22:00 | #
Zut ... J'ai fini par supprimer le prog mais j'en ai fait un autre pour test et il a exactement les mêmes problèmes :/
1. Soit ma calto bug ( n'ayant pas digeré le fait d'être tweak ... )
2. Soit je code comme un pied ( ce qui est très possible comme je débute en C ).
Je te passe le code de test demain après-midi quand je pourrais (en tout cas il fonctionne nikel sur emulateur)
- Un pong multijoueur avec le cable 3pin
- Communication IR entre caltos (Arduino)
Citer : Posté le 03/11/2014 22:01 | #
J'ai jamais eu de problème avec le SH4 CT, donc je crois que ça doit pouvoir se corriger au niveau du code.
Citer : Posté le 03/11/2014 22:30 | #
Le seul problème est que ça fonctionne sur l'emulateur du SDK :/ Du coup, je pourrais être tenté de dire que ma calto bug MAIS tous mes autres addins fonctionnent
Quand Ziqumu dit que SH4 CT peut causer des problèmes, est ce que ces problèmes pourraient être résolus en rechargeant l'OS d'une G75 sur ma 35+ ? (Histoire de virer les bugs)
-> si c'est le cas je sait ce qu'il me reste a faire :/
En tout cas si ça ne fonctionne toujours pas, je te passerais les codes et des screenshots demain si j'en ai le temps
- Un pong multijoueur avec le cable 3pin
- Communication IR entre caltos (Arduino)
Citer : Posté le 04/11/2014 06:20 | #
Non, remettre un OS ne servirait à rien.
En fait ce que fait le SH4 CT -- et qui est un peu barbare à la base --, c'est qu'il repère des morceaux de code connus pour être non compatibles SH4 (IsKeyDown()) et autres, il les vire et les remplace par des nouvelles fonctions compatibles.
À la réflexion, ça tient un peu du miracle que ça fonctionne, mais on va pas s'en plaindre.
Citer : Posté le 04/11/2014 19:26 | # | Fichier joint
Hum, tu as donc raison, ça surement de mon code (j'ai re-testé avec un programme sans IsKeyDown et SH4 CT -> et avec la library "usefull" et j'ai toujours ces problèmes de pixels :/ ) Je met une photo (de qualité médiocre ) en pièce jointe pour te montrer le problème :/ -> sur la photo, la ligne coupée est censée être entière (tu remarquera qu'il y a maintenant 2 zone sans pixels )
Sinon, voilà les codes (c'est pas très optimisé mais je le ferais plus tard )
pong.c :
[brown]#include [gray]"usefull.h"[/gray][/brown]
[brown]#include [gray]"pong.h"[/gray][/brown]
[purple]int[/purple] AddIn_main(int isAppli, unsigned short OptionNum)
{
Player player = {
8, [maroon]27[/maroon], [maroon]3[/maroon], [maroon]10[/maroon]
};
Player oPlayer = {
116, [maroon]27[/maroon], [maroon]3[/maroon], [maroon]10[/maroon]
};
Ball ball = {
63, [maroon]32[/maroon], [maroon]3[/maroon], [maroon]3[/maroon], [maroon]0[/maroon], [maroon]0[/maroon]
};
[b][blue]while[/blue][/b](1){
[b][blue]if[/blue][/b](key_down(K_F6)) [b][blue]break[/blue][/b]; [green]// F6 - PROGRAM_END [/green]
update(&player, &oPlayer, &ball);
draw(&player, &oPlayer, &ball);
setFps(64);
}
[b][blue]return[/blue][/b] 1;
}
void update(Player *player, Player *oPlayer, Ball *ball) {
[green]// keys : 0=UP 1=DOWN 2=EXE[/green]
[purple]char[/purple] key = checkKey();
[b][blue]if[/blue][/b](key == [maroon]0[/maroon]) { [green]// UP PRESSED[/green]
(*player).y--;
}else [b][blue]if[/blue][/b](key == [maroon]1[/maroon]) { [green]// DOWN PRESSED[/green]
(*player).y++;
}
}
[purple]char[/purple] checkKey() {
[b][blue]if[/blue][/b](key_down(K_UP)) [b][blue]return[/blue][/b] 0; [green]// UP PRESSED[/green]
[b][blue]else[/blue][/b] if(key_down(K_DOWN)) [b][blue]return[/blue][/b] 1; [green]// DOWN PRESSED[/green]
[b][blue]else[/blue][/b] return -1;
}
void draw(const Player *player, const Player *oPlayer, const Ball *ball) {
Bdisp_AllClr_VRAM();
Bdisp_DrawLineVRAM((*player).x, (*player).y, [maroon]1[/maroon], [maroon]1[/maroon]);
Bdisp_AllClr_DD();
Bdisp_PutDisp_DD();
}
void drawPlayer() {
}
[brown]#pragma section _BR_Size[/brown]
unsigned long BR_Size;
[brown]#pragma section[/brown]
[brown]#pragma section _TOP[/brown]
[purple]int[/purple] InitializeSystem(int isAppli, unsigned short OptionNum)
{
[b][blue]return[/blue][/b] INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}
[brown]#pragma section[/brown]
et pong.h :
[brown]#ifndef PONG[/brown]
[brown]#define PONG[/brown]
typedef [purple]struct[/purple] Player Player;
[purple]struct[/purple] Player {
[purple]unsigned char[/purple] x;
[purple]unsigned char[/purple] y;
[purple]unsigned char[/purple] w;
[purple]unsigned char[/purple] h;
};
typedef [purple]struct[/purple] Ball Ball;
[purple]struct[/purple] Ball {
[purple]unsigned char[/purple] x;
[purple]unsigned char[/purple] y;
[purple]unsigned char[/purple] w;
[purple]unsigned char[/purple] h;
[purple]char[/purple] velX;
[purple]char[/purple] velY;
};
void update(Player*, Player*, Ball*);
[purple]char[/purple] checkKey();
void draw(const Player*, const Player*, const Ball*);
void drawPlayer();
#endif
(j'ai aussi légèrement modifié usefull.c de manière a pouvoir écrire setFps(64) au lieu de setFps(2) par exemple)
je le met même si je ne pense pas que le problème vient de là
void setFps(int target)
{
[purple]unsigned int[/purple] fpsWish = [maroon]128[/maroon]/target;
static [purple]unsigned int[/purple] fps = [maroon]0[/maroon], fps_count = [maroon]0[/maroon];
[b][blue]do[/blue][/b]
{
Sleep(1);
fps = time_getTicks();
}
[b][blue]while[/blue][/b](fps < fps_count+fpsWish);
fps_count = time_getTicks();
}
[purple]int[/purple] max(int a,int b)
{
[b][blue]if[/blue][/b](a < b)return b;
[b][blue]return[/blue][/b] a;
}
désolé si c'est un peu long merci d'avance
- Un pong multijoueur avec le cable 3pin
- Communication IR entre caltos (Arduino)
Citer : Posté le 04/11/2014 19:44 | #
Déjà, la ligne Bdisp_AllClr_DD(); ne sert a rien, quand on affiche l'écran il est automatiquement effacé avant d'etre affiché
Sinon, a mon avis le probleme viens des fonction de fxlib, tu devrais essayer de passer a MonochromeLib, bien plus efficace, rapide et simple d'utilisation
Il te faudra modifier un peu le code pour le rendre compatible SH4, mais il n'y a qu'une ligne a changer
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 04/11/2014 20:14 | #
Merci beaucoup c'était bien fxlib qui buggait
Et effectivement la MonochromeLib est beaucoup plus rapide (l'écran de l'émulateur du SDK ne clignote même plus -> avec mon PC en carton c'est quasi miraculeux )
Je vais enfin pouvoir avancer dans mon projet (un pong en multi avec le cable 3pin ) ...
- Un pong multijoueur avec le cable 3pin
- Communication IR entre caltos (Arduino)
Citer : Posté le 04/11/2014 21:26 | #
L'écran de l'émulateur ne clignoterait jamais si tu n'effaçais que la VRAM x)
Ben sinon, je me suis fais prendre de vitesse, mais tant mieux si tu as réussi à résoudre ton problème.