Développer sur PC Engine en 2026 ?

Le coin des demomakers et des programmeurs en herbe.

Modérateurs : SirG, Redfield1, shubibiman, Laucops

Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Développer sur PC Engine en 2018 ?

Message par touko »

Ouhaou c'est clair qu'elle doit être lente celle là !! :lol:
Bon je vais te la coder en ASM . :wink:

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 .
alekmaul
Please Insert Disc!
Messages : 49
Inscription : dim. 15 juil. 2018 10:27

Re: Développer sur PC Engine en 2018 ?

Message par alekmaul »

Hum, si je rajoute les variables, c'est super lent entre chaque transitions ... étonnant.
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Développer sur PC Engine en 2018 ?

Message 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
}
alekmaul
Please Insert Disc!
Messages : 49
Inscription : dim. 15 juil. 2018 10:27

Re: Développer sur PC Engine en 2018 ?

Message 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
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Développer sur PC Engine en 2018 ?

Message 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 .
Dernière modification par touko le dim. 12 août 2018 10:57, modifié 1 fois.
Avatar de l’utilisateur
RayXambeR
NECstasien
Messages : 333
Inscription : mer. 27 sept. 2006 19:35
Contact :

Re: Développer sur PC Engine en 2018 ?

Message 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 :)
Avatar de l’utilisateur
MooZ
Administrateur
Messages : 2090
Inscription : jeu. 16 déc. 2004 14:25
Contact :

Re: Développer sur PC Engine en 2018 ?

Message par MooZ »

C'est normal que tu bloques pendant 2 frames dans cette fonction ?

Code : Tout sélectionner

lda #2
jsr wait_vsync
GuiM
NECromancer
Messages : 3962
Inscription : lun. 25 janv. 2016 21:58

Re: Développer sur PC Engine en 2018 ?

Message par GuiM »

+1

Je lis tous vos posts mais comprends pas grand chose... Et encore moins comment on peut faire ça par plaisir! :mrgreen:
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Développer sur PC Engine en 2018 ?

Message par touko »

MooZ a écrit : dim. 12 août 2018 11:29 C'est normal que tu bloques pendant 2 frames dans cette fonction ?

Code : Tout sélectionner

lda #2
jsr wait_vsync
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 :cry:
GuiM
NECromancer
Messages : 3962
Inscription : lun. 25 janv. 2016 21:58

Re: Développer sur PC Engine en 2018 ?

Message 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 :wink:
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Développer sur PC Engine en 2018 ?

Message 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 :mrgreen: ) :wink:
alekmaul
Please Insert Disc!
Messages : 49
Inscription : dim. 15 juil. 2018 10:27

Re: Développer sur PC Engine en 2018 ?

Message 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
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Développer sur PC Engine en 2018 ?

Message par touko »

Merci, c'est vachement propre comme code :wink:
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 .
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Re: Développer sur PC Engine en 2018 ?

Message 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 .
alekmaul
Please Insert Disc!
Messages : 49
Inscription : dim. 15 juil. 2018 10:27

Re: Développer sur PC Engine en 2018 ?

Message 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 :)
Répondre