Page 4 sur 21
Re: Développer sur PC Engine en 2018 ?
Publié : sam. 11 août 2018 09:50
par touko
Ouhaou c'est clair qu'elle doit être lente celle là !!
Bon je vais te la coder en ASM .
EDIT: Pour le fade_out ,j'ai rajouté ça pour que ca re-marche correctement
bg_pal_deb = _bg_pal_deb;
spr_pal_deb = _spr_pal_deb;
nb_bg_pals = _nb_bg_pals;
nb_spr_pals = _nb_spr_pals;
speed = _speed;
Ca copie les valeurs passées en params dans les variables de la fonction, vue que la déclaration a changée .
Re: Développer sur PC Engine en 2018 ?
Publié : sam. 11 août 2018 10:41
par alekmaul
Hum, si je rajoute les variables, c'est super lent entre chaque transitions ... étonnant.
Re: Développer sur PC Engine en 2018 ?
Publié : sam. 11 août 2018 11:41
par touko
alekmaul a écrit : ↑sam. 11 août 2018 10:41
Hum, si je rajoute les variables, c'est super lent entre chaque transitions ... étonnant.
Faut copier le truc juste avant le 1er #asm dans la fonction fade_out,je remets toute la routine ce sera plus simple .
Code : Tout sélectionner
char nb_bg_pals,
nb_spr_pals,
speed,
fin_fade;
int bg_pal_deb,
spr_pal_deb;
void fade_palette_out( unsigned int _bg_pal_deb, unsigned char _nb_bg_pals, unsigned int _spr_pal_deb, unsigned char _nb_spr_pals , unsigned char _speed )
{
bg_pal_deb = _bg_pal_deb;
spr_pal_deb = _spr_pal_deb;
nb_bg_pals = _nb_bg_pals;
nb_spr_pals = _nb_spr_pals;
speed = _speed;
#asm
lda #7
sta _fin_fade
.start_fade:
lda _nb_spr_pals
and #%0000_1111
sta _nb_spr_pals
lda LOW_BYTE _bg_pal_deb
sta $402 ; // Séléction de la palette dans le VCE
sta <__ax
lda HIGH_BYTE _bg_pal_deb
sta $403
sta <__ax + 1
lda _nb_bg_pals
sta <__cl
lda _speed
jsr wait_vsync
.init_fade:
clx
.palette_fade:
ldy $404
tya ; // Récupère la composante BLEU 1
and #%0000_0111
beq .pas_dec_blue
dec A
.pas_dec_blue:
sta <__bl
tya
and #%0011_1000 ; // Récupère la composante ROUGE 1
beq .pas_dec_red
sec
sbc #8
.pas_dec_red:
sta <__bh
lda $405 ; // Lecture du bit 9 dans le VCE
lsr A ; // Mise du bit 9 dans la carry
tya
and #%1100_0000 ; // Récupère la composante VERTE 1
ror A ; // Récupération du bit 9 dans REG A
beq .end_fade
sec
sbc #32
asl A ; // Remise du bit 9 dans la carry
rol _pals + 1 , X ; // Récupération du bit 9 dans la palette provisoire
.end_fade: ; // Dans REG A on a déjà la val de _g
; // On reforme la couleur avec les 3 vals RVB
ora <__bl
ora <__bh
sta _pals , X
inx
inx
; // On teste si fin de palette X = 32
cpx #32
lbne .palette_fade
; // On met en place la palette courante
stw <__ax , $402 ; // Séléction de la palette dans le VCE
tia _pals , $404 , 32 ; // Copie palette courante dans le VCE
addw #16 , <__ax
dec <__cl
lbne .init_fade
.init_spr_fade_pals:
; // Gestion du fade des palettes des sprites
lda _nb_spr_pals
beq .pas_fade_spr_pals
bmi .pas_fade_spr_pals
sta <__cl
ora #128
sta _nb_spr_pals
lda LOW_BYTE _spr_pal_deb
sta $402 ; // Séléction de la palette dans le VCE
sta <__ax
lda HIGH_BYTE _spr_pal_deb
sta $403
sta <__ax + 1
jmp .init_fade ; // On relance le fade des pals des sprites
.pas_fade_spr_pals:
dec _fin_fade
lbne .start_fade
#endasm
}
Au fait pour la fonction set_dark, tu veux la même mais en ASM ou de pouvoir y passer des params ??
Pour le moment voilà la trad ASM de ta fonction,il faut la copier dans le même fichier que la fade_out.
Code : Tout sélectionner
void set_dark()
{
#asm
stw #BG_PAL1 , $402 ; // Init du VCE sur palette 0 du BG
stw #BG_PAL1 , <__ax
stb #4 , <__cl
lda #1
sta _nb_spr_pals
lda #2
jsr wait_vsync
.init_colors_black:
; // BG & SPR
clx
.init_pal:
ldy $404
; // Récupère la composante BLEU
tya
and #%0000_0111
lsr A
lsr A
sta <__bl
; // Récupère la composante ROUGE
tya
and #%0011_1000
lsr A
lsr A
and #%0011_1000
sta <__bh
; // Récupère la composante VERTE
lda $405 ; // Lecture du bit 9 dans le VCE
lsr A
tya
ror A
lsr A
and #%1100_0000 ; // Récupère la composante VERTE 1
; // On reforme la couleur avec les 3 vals RVB
ora <__bl
ora <__bh
sta _pals , X
stz _pals + 1 , X
inx
inx
; // On teste si fin de palette X = 32
cpx #32
bne .init_pal
; // On met en place la palette courante
stw <__ax , $402 ; // Séléction de la palette dans le VCE
tia _pals , $404 , 32 ; // Copie palette courante dans le VCE
addw #16 , <__ax
dec <__cl
bne .init_colors_black
; // On assombri la palette des sprites
lda _nb_spr_pals
beq .pas_black_spr_pals
bmi .pas_black_spr_pals
sta <__cl
ora #128
sta _nb_spr_pals
lda LOW_BYTE #SPR_PAL0
sta $402 ; // Séléction de la palette dans le VCE
sta <__ax
lda HIGH_BYTE #SPR_PAL0
sta $403
sta <__ax + 1
jmp .init_colors_black ; // On relance le fade des pals des sprites
.pas_black_spr_pals:
#endasm
}
Re: Développer sur PC Engine en 2018 ?
Publié : dim. 12 août 2018 07:14
par alekmaul
super merci pour la version ASM de set_dark.
par contre, pour fade_out, j'ai toujours un soucis avec les variables déclarées dans la fonction, cela met un temps fou entre chaque écran ...
Je vais regarder le code ASM pour essayer de comprendre.
Rom avec fade ASM
Si je retire l'affectation des varaiables, c'est un peu plus rapide mais y'a encore un temps long entre les écrans.
Alors qu'avec ma version en C, c'est rapide.
Rom avec fade C
Re: Développer sur PC Engine en 2018 ?
Publié : dim. 12 août 2018 09:43
par touko
euh soit tu m'as mis les mêmes roms soit j'ai pas trop compris lol .
Tu veux dire lent avant d'arriver au fade au tout début?? ,entre les 2 images du début ??
Parce que j'ai vu aucune dif sur les 2 roms .
Ok c'est entre les 2 images !!
Ps: Faudra rajouter un
disp_off();
vsync();
A la fin de la fonction par sécurité, bon ça changera rien à ton problème, mais ce sera plus propre .
Re: Développer sur PC Engine en 2018 ?
Publié : dim. 12 août 2018 09:57
par RayXambeR
Je comprends pas grand chose mais vos échanges sont passionnants à suivre, Touko et Alekmaul ! Une belle émulation et entraide : je vous soutiens totalement. Et je sens que ça pourrait servir dans de super jeux à la sortie

Re: Développer sur PC Engine en 2018 ?
Publié : dim. 12 août 2018 11:29
par MooZ
C'est normal que tu bloques pendant 2 frames dans cette fonction ?
Re: Développer sur PC Engine en 2018 ?
Publié : dim. 12 août 2018 11:47
par GuiM
+1
Je lis tous vos posts mais comprends pas grand chose... Et encore moins comment on peut faire ça par plaisir!

Re: Développer sur PC Engine en 2018 ?
Publié : dim. 12 août 2018 13:18
par touko
MooZ a écrit : ↑dim. 12 août 2018 11:29
C'est normal que tu bloques pendant 2 frames dans cette fonction ?
J'ai repris le code d'Alekmaul,mais sinon ouai c'est inutile .
Et encore moins comment on peut faire ça par plaisir!
Disons qu'il faut aimer coder et se prendre la tête, ensuite la satisfaction vient du fait que tu vois ton code fonctionner (ou pas) à l'écran .
@alek: dans la rom la fonction ne sort pas qd elle doit le faire et tourne bcp plus longtemps, je sais pas encore pk, mais le problème est là .
Je vais chercher .
EDIT: Merde double post

Re: Développer sur PC Engine en 2018 ?
Publié : dim. 12 août 2018 14:01
par GuiM
touko a écrit : ↑dim. 12 août 2018 13:18
Disons qu'il faut aimer coder et se prendre la tête, ensuite la satisfaction vient du fait que tu vois ton code fonctionner (ou pas) à l'écran .
Pour avoir suivi des cours d'info (C/C++, java), c'est clair que coder et se prendre la tête est un binôme indissociable!
Là, l'application est graphique et ludique donc je comprends parfaitement la satisfaction et le plaisir de voir l'exécution du code (sans erreur evidement!). Je chambrais gentiment

Re: Développer sur PC Engine en 2018 ?
Publié : dim. 12 août 2018 15:29
par touko
@alekmaul: en traçant la rom qui pose soucis (la uwolpce180812B544.pce), je me suis rendu compte qu'après le fade de la première image(le fade normal quoi), la fonction fade_palettes_out est rapellée encore une foi,mais avec de mauvais params(valeur 513 ou $201 dans la variable _bg_pal_deb et avec un frame delai de 32), du coup en plus d'être lancée 2X,la seconde fois le frame délai de 32 te donne cette latence .
@GuiM: pas de soucis, je me doutais bien que tu chambrais, mais c'est vrai que souvent les gens posent cette question, et c'est comme tout, on est pas des E.T, forcement qd un truc t'intéresse tu t'y mets et tu comprends comment ça marche (plus ou moins lol), donc y'a rien de sur humain à coder sur des vielles machines, juste de la motivation(bcp

)

Re: Développer sur PC Engine en 2018 ?
Publié : lun. 13 août 2018 05:50
par alekmaul
Etrange ce double appel en effet, je comprends pas mais cela explique donc cet écran noir entre 2 appels ...
Pour info, je viens de rendre le code disponible sur github, tu pourras tout voir (et les autres aussi ).
Il faut bien entendu huc3.99 dans un répertoire (je mettrais à jour le readme avec le "how to compile")
https://github.com/alekmaul/uwolpce
Re: Développer sur PC Engine en 2018 ?
Publié : lun. 13 août 2018 10:13
par touko
Merci, c'est vachement propre comme code
Juste une demande, peux tu m'envoyer l'archive complète par mail, ce sera plus simple pour trouver le souci, car effectivement je comprends pas non plus pk elle est lancée 2x,ça m'intrigue ce bug .
Re: Développer sur PC Engine en 2018 ?
Publié : lun. 13 août 2018 11:23
par touko
@Alek: j'ai corrigé un bug, je sais pas si ça va changer quelque chose, mais je traitais pas le cas où le nb_pals du BG étaient = 0
Code : Tout sélectionner
void fade_palette_out( unsigned int _bg_pal_deb, unsigned char _nb_bg_pals, unsigned int _spr_pal_deb, unsigned char _nb_spr_pals , unsigned char _speed )
{
bg_pal_deb = _bg_pal_deb;
spr_pal_deb = _spr_pal_deb;
nb_bg_pals = _nb_bg_pals;
nb_spr_pals = _nb_spr_pals;
speed = _speed;
#asm
lda #7
sta _fin_fade
.start_fade:
lda _nb_spr_pals
and #%0000_1111
sta _nb_spr_pals
lda _bg_pal_deb
sta $402 ; // Séléction de la palette dans le VCE
sta <__ax
lda _bg_pal_deb + 1
sta $403
sta <__ax + 1
lda _speed
jsr wait_vsync
; // Si nb_bg_pals = 0 on passe à celles des sprites
lda _nb_bg_pals
beq .init_spr_fade_pals
sta <__cl
.init_fade:
clx
.palette_fade:
ldy $404
tya ; // Récupère la composante BLEU 1
and #%0000_0111
beq .pas_dec_blue
dec A
.pas_dec_blue:
sta <__bl
tya
and #%0011_1000 ; // Récupère la composante ROUGE 1
beq .pas_dec_red
sec
sbc #8
.pas_dec_red:
sta <__bh
lda $405 ; // Lecture du bit 9 dans le VCE
lsr A ; // Mise du bit 9 dans la carry
tya
and #%1100_0000 ; // Récupère la composante VERTE 1
ror A ; // Récupération du bit 9 dans REG A
beq .end_fade
sec
sbc #32
asl A ; // Remise du bit 9 dans la carry
rol _pals + 1 , X ; // Récupération du bit 9 dans la palette provisoire
.end_fade: ; // Dans REG A on a déjà la val de _g
; // On reforme la couleur avec les 3 vals RVB
ora <__bl
ora <__bh
sta _pals , X
inx
inx
; // On teste si fin de palette X = 32
cpx #32
bne .palette_fade
; // On met en place la palette courante
stw <__ax , $402 ; // Séléction de la palette dans le VCE
tia _pals , $404 , 32 ; // Copie la palette courante dans le VCE
addw #16 , <__ax
dec <__cl
bne .init_fade
.init_spr_fade_pals:
; // Gestion du fade des palettes des sprites
lda _nb_spr_pals
beq .pas_fade_spr_pals
bmi .pas_fade_spr_pals
sta <__cl
ora #128
sta _nb_spr_pals
lda LOW_BYTE _spr_pal_deb
sta $402 ; // Séléction de la palette dans le VCE
sta <__ax
lda HIGH_BYTE _spr_pal_deb
sta $403
sta <__ax + 1
jmp .init_fade ; // On relance le fade des pals des sprites
.pas_fade_spr_pals:
dec _fin_fade
lbne .start_fade
#endasm
disp_off();
vsync();
}
EDIT: Bon elle est bien appellée 2X,vérifies que la fonction dans laquelle tu appelles le fade-out il n'y ait pas une boucle, car à la sortie du premier appel, le code exécute quelques instructions et relance le fade .
Re: Développer sur PC Engine en 2018 ?
Publié : lun. 13 août 2018 16:35
par alekmaul
Si tu as besoin d'info pour compiler le code, hésites pas.
Pour avoir tout le source, sur github, à droite, tu peux cliquer sur "Clone or DOwnload" et tu choisis pour télécharger ou faire un clone du projet.
https://github.com/alekmaul/uwolpce/archive/master.zip te donne tout le source par exemple
