快速配置NDS的开发环境devkitpro 与 VC++2005



thilong
2010-08-14 11:34:13

[i=s] 本帖最后由 thilong 于 2010-8-14 13:11 编辑 [/i]

刚刚开始学这个.为了以后好玩N3DS,发现配置也不是很难... 下面我们进入正题:
1.下载devkitProUpdater最新版: http://sourceforge.net/projects/devkitpro/files/
2.下载Visual C++ 2005 Express Edition [url=http://go.microsoft.com/fwlink/?linkid=57034]传送过去吧[/url]
3.安装devkitPro,运行devkitProUpdater.
devkitPPC是开发PPC用的.我们用不着.所以不用选择.devkitPSP是开发PSP所用的SDK,想要研究的话可以选上.
devkitARM下面的就是我们所需要的了.在这下面有NDS与GBA,GP32的库,我们只有选择NDS的即可.然后下一步进入安装位置选择,注意,这里的路径中不能出现空格
[attach]11814[/attach]
然后下一步等待安装完毕.
4.安装Visual C++ 2005 Express Edition
5.配置环境变量:
DEVKITARM 安装路径/DevkitARM (如我的:/E/NDSLib/devkitARM)
DEVKITPRO 安装路径 (如我的:/E/NDSLib)
LIBNDS 安装路径/libnds (如我的:/E/NDSLib/libnds)
Path 安装路径msysin; +你原来的
如果不会就复制下一段内容,保存成为setpath.bat.
set DEVKITARM=安装路径/DevkitARM (如我的:/E/NDSLib/devkitARM)
set DEVKITARM=安装路径/DevkitARM (如我的:/E/NDSLib/devkitARM)
set DEVKITPRO=安装路径 (如我的:/E/NDSLib)
set LIBNDS =安装路径/libnds (如我的:/E/NDSLib/libnds)
set Path =安装路径msysin;%path% (这里的安装路径 为绝路径如E:NDSLibmsysin;)
[attach]11809[/attach]

6.建立工程
打开Visual C++ 2005 Express Edition 选择新建工程(文件->新建->工程 file->new->project)
选择makefile工程,输入名字,选择OK.
填写编译方法: [color=Red]生成(build command line)里面填写 make 清除(clear command)里面填写 make clean[/color]
[attach]11811[/attach]
点击完成,工程建立完毕.
7.设置
下面设置一下头文件与包含文件:
在VC++里面选择tool -> options -> projects and solutions ->VC++ directories,工具->选项 ->项目与解决方案->VC++文件
在show directories for 这里选择包含文件: include files,点击新建按钮.把我们的包含文件加进去,位置为:devkitpro的安装路径libndsinclude,如图片中红色框中所示.
[attach]11812[/attach]
在show directories for 这里选择库文件: library files,点击新建按钮.把我们的包含文件加进去,位置为:devkitpro的安装路径libndslib,如图片中红色框中所示.
[attach]11813[/attach]
这样我们的环境就OK了.其中第7步只需要设置一次 .

下面给大家一个测试代码:[code]#include
#include
#include
#include

volatile int frame = 65;
volatile int oldx=256/2;
volatile int oldy=192/2;
//---------------------------------------------------------------------------------
void Vblank() {
//---------------------------------------------------------------------------------
frame++;
if(frame>91)
frame=65;
}

//---------------------------------------------------------------------------------
int main(void) {
//---------------------------------------------------------------------------------
touchPosition touchXY;

videoSetMode(MODE_0_2D);
vramSetBankA(VRAM_A_MAIN_SPRITE);
oamInit(&oamMain, SpriteMapping_1D_32, false); //初始化2D精灵引擎,SpriteMapping_1D_128(256)时title与bmp图片可以混合使用
u16* gfx = oamAllocateGfx(&oamMain, SpriteSize_16x16, SpriteColorFormat_256Color); //分配精灵占用的空间,oamFreeGfx(&oamMain,gfx)释放
int i;
for(i = 0; i < 16 * 16 / 2; i++)
{
gfx[i] = 1 | (1 << 8);
}

SPRITE_PALETTE[1] = RGB15(31,0,0);


irqSet(IRQ_VBLANK, Vblank); //对中断事件设置事件响应

consoleDemoInit();

iprintf(" H world
");
iprintf(" x1b[32mwww.devkitpro.org
");
iprintf(" x1b[32;1mwww.drunkencoders.comx1b[39m");
int key=-1;

while(1) {

swiWaitForVBlank();
touchRead(&touchXY);

// print at using ansi escape sequence x1b[line;columnH
iprintf("x1b[10;0HFrame = %c",(char)frame);
iprintf("x1b[16;0HTouch x = %04X, %04X
", touchXY.rawx, touchXY.px);
iprintf("Touch y = %04X, %04X
", touchXY.rawy, touchXY.py);
scanKeys();

if(keysHeld()){
key=keysDown();
switch(key){
case KEY_UP:
oldy--;
break;
case KEY_DOWN:
oldy++;
break;
case KEY_LEFT:
oldx--;
break;
case KEY_RIGHT:
oldx++;
break;
}
}
if(oldy<0)
oldy=192-16;
if(oldy>=176)
oldy=16;
if(oldx>240)
oldx=0;
if(oldx<0)
oldx=240;

SPRITE_PALETTE[1] = RGB15(31,0,0);
oamSet(&oamMain, //main graphics engine context
0, //oam index (0 to 127)
oldx, oldy, //x and y pixle location of the sprite
0, //priority, lower renders last (on top)
0, //this is the palette index if multiple palettes or the alpha value if bmp sprite
SpriteSize_16x16,
SpriteColorFormat_256Color,
gfx, //pointer to the loaded graphics
-1, //sprite rotation data
false, //double the size when rotating?
false, //hide the sprite?
false, false, //vflip, hflip
false //apply mosaic
);
oamUpdate(&oamMain);

}

return 0;
}[/code]然后这里是makefile的代码:[code]
#---------------------------------------------------------------------------------
.SUFFIXES:
#---------------------------------------------------------------------------------

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

include $(DEVKITARM)/ds_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
# MAXMOD_SOUNDBANK contains a directory of music and sound effect files
#---------------------------------------------------------------------------------
TARGET := $(shell basename $(CURDIR))
BUILD := build
SOURCES := source
DATA := data
INCLUDES := include
SPRITES := sprites

#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
ARCH := -mthumb -mthumb-interwork

CFLAGS := -g -Wall -O2
-march=armv5te -mtune=arm946e-s -fomit-frame-pointer
-ffast-math
$(ARCH)

CFLAGS += $(INCLUDE) -DARM9
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions

ASFLAGS := -g $(ARCH)
LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)

#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project (order is important)
#---------------------------------------------------------------------------------
LIBS := -lnds9


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

#---------------------------------------------------------------------------------
# no real need to edit anything past this point unless you need to add additional
# rules for different file extensions
#---------------------------------------------------------------------------------
ifneq ($(BUILD),$(notdir $(CURDIR)))
#---------------------------------------------------------------------------------

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

export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir))
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
$(foreach dir,$(SPRITES),$(CURDIR)/$(dir))

export DEPSDIR := $(CURDIR)/$(BUILD)

CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
SPRITE_FILES := $(foreach dir, $(SPRITES),$(notdir $(wildcard $(dir)/*.png)))

#---------------------------------------------------------------------------------
# use CXX for linking C++ projects, CC for standard C
#---------------------------------------------------------------------------------
ifeq ($(strip $(CPPFILES)),)
#---------------------------------------------------------------------------------
export LD := $(CC)
#---------------------------------------------------------------------------------
else
#---------------------------------------------------------------------------------
export LD := $(CXX)
#---------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------

export OFILES := $(SPRITE_FILES:.png=.o)
$(addsuffix .o,$(BINFILES))
$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)

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

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

.PHONY: $(BUILD) clean

#---------------------------------------------------------------------------------
$(BUILD):
@[ -d $@ ] || mkdir -p $@
@make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile

#---------------------------------------------------------------------------------
clean:
@echo clean ...
@rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds

#---------------------------------------------------------------------------------
else

#---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
$(OUTPUT).nds : $(OUTPUT).elf
$(OUTPUT).elf : $(OFILES)

#---------------------------------------------------------------------------------
%.s %.h : %.png
grit $< -ff../sprites/sprite.grit -o$*
#---------------------------------------------------------------------------------


#---------------------------------------------------------------------------------
%.bin.o : %.bin
#---------------------------------------------------------------------------------
@echo $(notdir $<)
$(bin2o)

-include $(DEPSDIR)/*.d

#---------------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------------

[/code]预祝大家好运哦...


meni038
2010-08-14 11:44:19

不知是什么.
但辛苦了.


明日青蛙
2010-08-14 11:48:07

第二份代码是什么语言???PASCAL???


546090
2010-08-14 11:56:49

完全看不到啊


thilong
2010-08-14 12:01:24

第二个是makefile


king71036
2010-08-14 12:12:17

完全不懂............


aeris
2010-08-14 16:26:50

其实,找个好用的文本编辑器 + makefile即可。比如我以前用过SlickEdit + makefile。
毕竟Eclipse也好,VS也好,除了写代码和编译外,其他也做不了什么事。


夜月L
2010-08-20 00:30:08

这个软件是干什么用的?
开发3DSXX工具?
没弄明白- -!


niubo_
2010-08-23 19:48:16

[i=s] 本帖最后由 niubo_ 于 2010-8-23 19:53 编辑 [/i]

[quote]其实,找个好用的文本编辑器 + makefile即可。比如我以前用过SlickEdit + makefile。
毕竟Eclipse也好,VS ...
[size=2][color=#999999]aeris 发表于 2010-8-14 16:26[/color] [url=http://www.yayabo.cn/redirect.php?goto=findpost&pid=98798&ptid=9478][img]http://www.yayabo.cn/images/common/back.gif[/img][/url][/size][/quote]
一个基本的代码编辑器有语法高亮和自动缩进就够了,好点的还能运行外部工具和自动补全。
不过像Eclipse这样IDE级别的东西,提供的致能感知和标识符导航可是神一般的存在啊。
话说makfile确实是个相当神奇的东西,linux上面的东西感觉都很神奇


幻の上帝
2010-09-02 08:12:40

[quote]话说makfile确实是个相当神奇的东西,linux上面的东西感觉都很神奇
[size=2][color=#999999]niubo_ 发表于 2010-8-23 19:48[/color] [url=http://www.yayabo.cn/redirect.php?goto=findpost&pid=106470&ptid=9478][img]http://www.yayabo.cn/images/common/back.gif[/img][/url][/size][/quote]

Unix上的吧。