Jump to content
alekmaul

PVSnesLib pour les 20 ans de la SNES, Adaptation du SnesSDK

Recommended Posts

Hello,

En continuité du travail de RemY,j'ai voulu aussi me lancer dans une librairie C générique Snes (Faut que les Homebrews reviennent pour les 20 ans de la console !) mais sans dépendre d'Eclipse ou d'un autre éditeur.

Voici l'entrée Wiki du début de mes travaux **c'est une version beta** et il manque pas mal de choses pour avoir toutes les fonctionnalités de la Snes (pas de son, pas de mode 7, des bugs dans la gestion des sprites ...).

 

http://www.portabledev.com/wiki/doku.php

 

La documentation (accessible depuis le wiki) ainsi que les liens avec les exemples sont directement générés depuis la libSnes.

 

Je vais continuer en adaptant un certain nombre de mes homebrews GBA, je pense surtout à CodeName Hacker.

 

Merci de me dire ce que vous en pensez :)

Share this post


Link to post
Share on other sites

??a me botte, dommage que j'ai le bras dans le sac, je me serait fait un plaisir de te faire du pixel art pour faire un jeu!

 

Perso celui qui me ferait bien plaisir en portage ça serait spout!

 

Sinon la question con, comment je fais pour compiler avec programmer's notepad? :)

Share this post


Link to post
Share on other sites

Pour info, je vais renommer la lib, libSnes existe déjà pour bsnes ...

On va donc maintenant parler de PVSnesLib :) !

Pour compiler, il te suffit de définir un "Tool" via le menu Tools/Options, sous Programmer Notepads qui va pointer sur la commande Make.

pn_tools_01.jpg

pn_tools_02.jpg

pn_tools_03.jpg

Share this post


Link to post
Share on other sites

> "make" 

> Failed to create process: Le fichier spécifié est introuvable.

> Process Exit Code: 0
> Time Taken: 00:00

 

Heu, j'ai du merder un truc encore là??

 

PVSnesLib? pourquoi ce nom? (j'ai lu que la SnesLib était déjà en chantier par byuu)

Share this post


Link to post
Share on other sites

Alors, dans l'ordre :

Pb de process : Ton problème vient du fait que msys/bin doit être dans ton path windows

Le nom : en fait, c est libsnes qu' il utilise le ch'ti père byuu, alors je me suis retourné vers Programmer Valuable Snes library , enfin c'est ce que j'ai trouvé :)

Share this post


Link to post
Share on other sites

Huh?

 

C:\Snesdev\msys\msys\bin c'est pas le bon dossier?

 

Pourtant dans le wiki :

 

Download msys to use Unix like environment and put it in you snes directory. (eg, ???C:/snesdev/msys??? would be fine).

 

Je m'ai trompé?

Share this post


Link to post
Share on other sites

En fait, il semble que tu as fait un sous répertoire sous msys, tu dois donc avoir effectivement c:\Snesdev\msys\msys\bin.

Comme tu le fais remarquer, dans ton cas, tu dois donc ajouter ce répertoire "c:\Snesdev\msys\msys\bin" à ton PATH Windows.

 

J'ai mis à jour le wiki dans ce sens :

 

Download msys to use Unix like environment and extract it in you snes directory. (eg, ???C:\snesdev\??? would be fine). You will have a subdirectory name msys with all msys distribution in it. Add the msys\bin directory to your PATH environment variable (eg, you will add c:\snesdev\msys\bin in our example).

 

En espérant que cela soit plus clair.

Share this post


Link to post
Share on other sites

Bon je comprends toujours pas pourquoi ça ne marche pas.

 

Au passage le lien de cette page (PVSnesLib french documentation) pointe vers http://www.portabledev.com/pages/snes/pvsneslib/doc.php.

 

C'est quoi l'histoire du "PATH Windows", c'est à mettre en plus dans le makefile?

 

P.S : J'ai tout retéléchargé et tout réinstallé donc je comprends pas.

Share this post


Link to post
Share on other sites

Merci pour le lien, c'est corrigé.

J'ai ajouté 2 screenshots pour le problème d'ajout de msys/bin au path, j'espère que ça sera plus clair.

Le but est que ton "make" que tu tapes dans les Tools de Programmer's Notepad soit reconnu par ce dernier. ET comme il y a beaucoup d'autres fichiers nécessaires pour msys, le path Windows doit être modifié.

Share this post


Link to post
Share on other sites

> "make" 
snesbmp libsnesfont.bmp -b
convert bitmap ... libsnesfont.chr
input.c
816-tcc  -I/c/SnesDev/libsnes/include -I/c/snesdev/snes-examples/input/  -Wall -c /c/snesdev/snes-examples/input/input.c -o /c/snesdev/snes-examples/input/input.ps
c:/snesdev/snes-examples/input/input.c:9: include file 'snes.h' not found
"make": *** [/c/snesdev/snes-examples/input/input.ps] Error 1

 

Je suis a deux doigts de pouvoir compiler!!!

 

Pour info je suis sur windows 7.

 

C'est frustrant pour le moment... Alors je fais comment pour inclure le snes.h?

Share this post


Link to post
Share on other sites

Salut All,

 

Merci AlekMaul pour cette magnifique initiative. J'ai suivi la page d'install de ton wiki et la compilation du "template" se passe bien! J'obtiens mon .SFC que je lance sous Bsnes et ça fait... bizarre.

 

Du coup j'ai voulu ouvrir et essayé ton Hello World mais quend je compile ben j'obtiens pas de .SFC?? Est-ce normal docteur?

Share this post


Link to post
Share on other sites

Salut Lestat, ouais j'ai pas regardé plus loin que le bout de mon nez... :D

 

Il me retourne le fait qu'il n'a pas trouvé les fichiers en .h "snes.h" etc...

Je les copie donc dans le repertoire du hello world, je compile, pas d'erreur. Et le .sfc qui en ressort m'affiche au milieu de l'écran "HEL" c'est tout :evil:

 

Mais c'est un bon départ pour une quiche comme moi qui a du mal avec la prog :)

Quoiqu'il en soit si un projet de jeu naît ici avec tous ces merveilleux outils ce serait top, je serai heureux d'aider sur les graphismes et la zic ^^

A suivre!!

Share this post


Link to post
Share on other sites

Le souci, c'est que comme moi, tu es obligé de déplacer les include pour compiler, avoue que ce n'est pas très pratique pour les mise à jour de la lib. Moi même en déplaçant le snes.h et le dossier snes contenant les autres includes, j'ai une erreur pour les.obj (je suis plus sûr de l'extension) :]

 

En tout cas content de voir qu'il y a des gens intéressés par ce genre de projet!

 

Ps:ici c'est m0nsieurL si tu veux bien :)

Share this post


Link to post
Share on other sites

hum, normalement, les deux define en haut du makefile de chaque exemple sont à modifier pour que les includes soient pris en compte.

Cf le wiki, je l'ai mis à jour.

Normalement, rien de plus à faire.

Pour le hello world, le texte s'affiche effectivement mal, j'ai refondu complètement cette brique.Dans la prochaine verison, il n'y aura plus de problème.

Share this post


Link to post
Share on other sites

Je pense avoir trouver mon problème qui est au milieu du makefile, comme tu as changé le nom de ta lib entre temps, la déclaration "LIBDIRS" pointait toujours sur "LIBSNES" au lieu de PVSNESLIB et là ça passe pas besoin de coller les .h dans le répertoire.

Share this post


Link to post
Share on other sites
#---------------------------------------------------------------------------------

# list of directories containing libraries, this must be the top level containing

# include and lib

#---------------------------------------------------------------------------------

LIBDIRS := $(PVSNESLIB)

 

Je comprends pas pourquoi ça ne compile pas moi, c'est pourtant le bon dossier non?

 

> "make"

template.c

816-tcc -I/c/snesdev//pvsneslib/include -I/c/snesdev/pvlibsnes/template/ -Wall -c /c/snesdev/pvlibsnes/template/template.c -o /c/snesdev/pvlibsnes/template/template.ps

c:/snesdev/pvlibsnes/template/template.c:9: include file 'snes.h' not found

"make": *** [/c/snesdev/pvlibsnes/template/template.ps] Error 1

 

> Process Exit Code: 2

> Time Taken: 00:00

 

Je pige pas, j'ai quoi à modifier pour le coup?

 

P.s : j'ai tout retéléchargé.

Share this post


Link to post
Share on other sites

MonsieurL, promis, je remets à jour dés que j'ai le temps. Certainement avant la fin de la semaine et tu verras, ça va compiler ^^

Normalement, le changement dans le makfile de LIBSNES en PVSNESLIB doit corriger ton problème (cherche, y'en a souvent qu'un seul dans le makefile ;))

Je suis en ce moment en train de travailler sur les scrollings et les sprites ...

Share this post


Link to post
Share on other sites

Salut,

 

Bon je poste un com ici car faut attendre un mail d'approbation du forum portabledev à l'inscription :

 

J'ai un message dans le log des exemples backgrounds mode 1 et dans effect:

 

"make": *** No rule to make target `libsnes.chr', needed by `/c/snesdev/exemples/graphics/effects/effects.sfc'. Stop.

Share this post


Link to post
Share on other sites

salut, approuvé à l'instant ;)

TOn problème vienbt du fait que tu as les anciens exemples, je pense.

Tu dois changer le makefile pour pouvoir compiler la font :

 

$(OUTPUT).obj : $(OUTPUT).c  hdr.asm pvsneslib.chr

pvsneslib.chr: pvsneslib.png
$(SXBM) -image -opt -v -target snes -format p4 -o $@ $<
@echo convert bitmap ... $(notdir $@)

 

ici, j'ai pvsneslib à la place de libsnes.

Share this post


Link to post
Share on other sites

Je comprends pas, je vais finir par croire que Rémy a raison ;)

 

> "make" 
template.c
816-tcc  -I/c/snesdev//pvsneslib/include -I/c/snesdev/pvlibsnes/template/  -Wall -c /c/snesdev/pvlibsnes/template/template.c -o /c/snesdev/pvlibsnes/template/template.ps
c:/snesdev/pvlibsnes/template/template.c:9: include file 'snes.h' not found
"make": *** [/c/snesdev/pvlibsnes/template/template.ps] Error 1

> Process Exit Code: 2
> Time Taken: 00:00

 

Le makefile du template

 

# path to snesdev root directory (for emulators, devkitsnes, libsnes)
export DEVKITSNES := /c/snesdev/

# path to devkitsnes root directory for compiler
export DEVKIT65XX := /c/snesdev/devkitsnes

#---------------------------------------------------------------------------------
.SUFFIXES:
#---------------------------------------------------------------------------------

ifeq ($(strip $(DEVKIT65XX)),)
$(error "Please set DEVKIT65XX in your environment. export DEVKIT65XX=devkit65XX")
endif

include $(DEVKIT65XX)/snes_rules

#---------------------------------------------------------------------------------
# TARGET is the name of the output
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# INCLUDES is a list of directories containing extra header files
#---------------------------------------------------------------------------------
TARGET		:=	$(shell basename $(CURDIR))
SOURCES		:=	.

#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
CFLAGS	+=	$(INCLUDE) 

#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS	:=	$(PVSNESLIB)
LIBOBJS +:=	

export OUTPUT	:=	$(CURDIR)/$(TARGET)

CFILES		:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
SFILES		:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.asm)))
BMPFILES	:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.bmp)))

#---------------------------------------------------------------------------------
export OFILES	:=	$(BINFILES:.bin=.obj) \
				$(CFILES:.c=.obj) $(SFILES:.asm=.obj) $(BMPFILES:.bmp=.chr)

export INCLUDE	:=	$(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
				$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
				-I$(CURDIR)/$(BUILD)

export LIBPATHS	:=	$(foreach dir,$(LIBDIRS),-L$(dir)/lib)

#---------------------------------------------------------------------------------
all	:	$(OUTPUT).sfc
@echo build !

clean:
@echo clean ...
@rm -f $(OFILES) $(TARGET).sfc

#---------------------------------------------------------------------------------
$(OUTPUT).obj : $(OUTPUT).c  hdr.asm 

$(OUTPUT).sfc	: 	$(OFILES)

Share this post


Link to post
Share on other sites

Mais il me semble qu'alekmaul n'avait pas réussi à faire le lien avec un truc sur ta lib!

 

Tu pourrais l'aider a développer un peu la sienne si le c??ur t'en dit? ;)

 

Merde, voilà que je fais des rimes...

Share this post


Link to post
Share on other sites

Attends m1sterL, tu as un rep qui s'appelle PVSNESLIB et un autre qui s'appelle PVLIBSNES???

 

> "make"

template.c

816-tcc -I/c/snesdev//pvsneslib/include -I/c/snesdev/pvlibsnes/template/ -Wall -c /c/snesdev/pvlibsnes/template/template.c -o /c/snesdev/pvlibsnes/template/template.ps

Share this post


Link to post
Share on other sites

Allez, eptite video de ma chaine youtube pour vous montrer la progression de la lib :

 

eAOmvXN3lB4

 

Y'a pas encore les collisions mais ça avance ...

 

Et voila le code C utilisé (juste le main , c'est très long sinon) ^^

 

//---------------------------------------------------------------------------------
int main(void) {
unsigned short pad0, move, i;

   // Initialize SNES 
consoleInit();

// Initialize text console with our font and invert color (black with BG white)
consoleInitText(0, 1, &snesfont);
consoleSetTextCol(RGB15(0,0,0), RGB15(31,31,31));

// Copy tiles to VRAM
bgInitTileSet(1, &mapgfx, &mappal, 0, (&mapgfx_end - &mapgfx), 16*2, BG_16COLORS, 0x5000);

// Init Sprites gfx and palette with default size of 16x16
oamInitGfxSet(&mariogfx, (&mariogfx_end-&mariogfx), &mariopal, 0, 0x4000, OBJ_SIZE16);

// Init Map to address 0x1000 and Copy Map to VRAM
bgSetMapPtr(1, 0x1000, SC_64x32);
for (i=0;i<31;i++) { // 128 pixel height -> 128/8 = 16 2400 / 8 = 300
	u8 *ptrMap  = &map + 300*i*2; // 300 = map size x *2 because each entry is 16bits length
	if (i>=16) ptrMap  = &map + 300*5*2; // Init anything else with white line
	u16 ptrVRAM = 0x1000+i*32; // screen begin to 0x1000
	dmaCopyVram(ptrMap, ptrVRAM, 32*2); // copy row to VRAM 
	dmaCopyVram((ptrMap+32*2), (ptrVRAM+32*32), 32*2); // copy row to VRAM 
}

// Show Mario
mario.x = 0; mario.y = 96<<8; // 128-16-16 = 96, 16 because map ground is 16 pix height, in fixed point
mario.anim_frame = 6; mario.flipx = 1; mario.jmpval = 0;
oamSet(0,  (mario.x>>8), (mario.y>>8), 3, mario.flipx, 0, mario.anim_frame*2, 0);  // flip x and take 5th sprite
oamSetEx(0, OBJ_SMALL, OBJ_SHOW);

// Now Put in 16 color mode and disable BG3
setMode(BG_MODE1,0);  bgSetDisable(2);

// Put some text
consoleDrawText(6,16,"MARIOx00  WORLD TIME");
consoleDrawText(6,17," 00000 ox00 1-1  000");

// Wait VBL 'and update sprites too :) )
WaitForVBlank();

// Wait for nothing :)
while(1) {
       // no move currently
       move = 0;

	// Refresh pad values
	scanPads();

	// Get current #0 pad
	pad0 = padsCurrent(0);

	// Update scrolling with current pad (left / right / jump can combine)
	if (pad0 & (KEY_RIGHT | KEY_LEFT | KEY_A) ) {
		if (pad0 & KEY_RIGHT) { 
			moveMario(W_RIGHT);
		}
		if (pad0 & KEY_LEFT) {
			moveMario(W_LEFT);
		}
		if (pad0 & KEY_A) {
			if (mario.jmpval == 0) { // if not currently jumping
				mario.jmpval = -1000;
				mario.anim_frame = 1;
			}
		}
	}
	// down to have small mario
	else if (pad0 & KEY_DOWN) {
		mario.anim_frame = 0;
	}
	// well, just standing !
	else {
		if (mario.anim_frame != 1) mario.anim_frame = 6;
	}

	// Add jumping value if needed
	if (mario.jmpval != 0) {
		mario.jmpval += GRAVITY;
		mario.y += mario.jmpval;
		// if collide with something under mario, stop jumping
		//if (isGroundHere() != 0) {
		if (mario.y >=  (96<<8)) {
			mario.y = 96<<8;
			mario.jmpval = 0;
			mario.anim_frame = 6;
		}
	}

	// Now, display mario with current animation
	oamSet(0,  (mario.x>>8), (mario.y>>8), 3, mario.flipx, 0, mario.anim_frame*2, 0);

	WaitForVBlank();
}
return 0;
}

Share this post


Link to post
Share on other sites

En fait, c'est dans le main, regarde bien :) !

 

De toute façon, tu as maintenant le code source complet ici : http://www.portabledev.com/media/SNES/P ... 00013.html

 

Et la dernière version de la lib sur le wiki : http://www.portabledev.com/wiki/doku.ph ... version_en

 

Tous les exemples sont présentés ici : http://www.portabledev.com/wiki/doku.php?id=examples_en

 

Je suis maintenant en train d'intégrer snesmod mais c'est pas simple, il veut rien savoir de l'init du SPC pour l'instant ...

Share this post


Link to post
Share on other sites

C'est une bonne chose ces lib qui facilite la création! Je sais que la création de la lib passe en premier mais pour une quiche en prog comme moi il faudrait mettre en place un tuto accessible genre le site du zéro :)

Share this post


Link to post
Share on other sites

ok, je veux bien, mais alors il faut me guider en me précisant exactement comment je dois orienter mes tutos, histoire que je sois pas hors sujet dés le début ...

car, avec les exemples fournis avec la lib, je pense que l'on peut avoir un bon aperçu de ce que l'on peut faire :)

donc, à toi de me dire ce qu'il te manque pour débuter, surtout que le wiki possède déjà comment installer la lib

Share this post


Link to post
Share on other sites

×
×
  • Create New...