#141433 - spinal_cord - Tue Sep 25, 2007 12:35 pm
First of all, this way worked for me, I can not guarantee it will work for other people.
Getting Chishm's DLDI loader to work with PALib.
1. Copy the load.bin to your Data folder.
2. Copy nds_loader_arm9.c and nds_loader_arm9.h to you your source folder.
3. Add the following line to your main.c
4. Navigate to the PALib arm7 folder (C:\devkitPro\PAlib\lib\arm7). Copy nds_loader_arm7.c and nds_loader_arm7.h to C:\devkitPro\PAlib\lib\arm7\
5. Add the following line to the main.c
6. Find the following line,
, and place the collowing line after it.
7. Re-compile PALib by running C:\devkitPro\PAlib\fastbuild.bat
8. Back in your project folder, replace the makefile with the following one modified by Jayenkai to handle the load.bin file forrectly.
10. To load a .nds in your code, just use following line.
Hope that helps some people.
_________________
I'm not a boring person, it's just that boring things keep happening to me.
Homepage
Getting Chishm's DLDI loader to work with PALib.
1. Copy the load.bin to your Data folder.
2. Copy nds_loader_arm9.c and nds_loader_arm9.h to you your source folder.
3. Add the following line to your main.c
Code: |
#include "nds_loader_arm9.h" |
4. Navigate to the PALib arm7 folder (C:\devkitPro\PAlib\lib\arm7). Copy nds_loader_arm7.c and nds_loader_arm7.h to C:\devkitPro\PAlib\lib\arm7\
5. Add the following line to the main.c
Code: |
#include "nds_loader_arm7.h" |
6. Find the following line,
Code: |
void PA_VBL(void) |
Code: |
runNdsLoaderCheck(); |
7. Re-compile PALib by running C:\devkitPro\PAlib\fastbuild.bat
8. Back in your project folder, replace the makefile with the following one modified by Jayenkai to handle the load.bin file forrectly.
Code: |
PROGNAME = PAlib OFILES += ADD_LIBS += PATH := $(DEVKITARM)/bin:$(PATH) ARM7BIN := -7 $(PAPATH)/lib/arm7/arm7.bin TEXT1 := SPinal's MENU TEXT2 := using PAlib! TEXT3 := spinal.dizidesigns.co.uk ICON := -b $(CURDIR)/../logo.bmp LOGO := -o $(CURDIR)/../logo_wifi.bmp #--------------------------------------------------------------------------------- .SUFFIXES: #--------------------------------------------------------------------------------- ifeq ($(strip $(DEVKITARM)),) $(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM) endif include $(DEVKITARM)/ds_rules #--------------------------------------------------------------------------------- # TARGET is the name of the output, if this ends with _mb generates a multiboot image # 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)) BUILD := build SOURCES := gfx source INCLUDES := include build DATA := data EXPORT_DIR := /c/ndsexamples/ #--------------------------------------------------------------------------------- # ARM7BIN is the path to an arm7 binary other than the default # usage: ARM7BIN := -7 binaryName.bin # # ICON is the path to an icon to be used int the header plus text # usage: ICON := -t iconName.bmp "text line one; text line 2; text line 3" # #--------------------------------------------------------------------------------- #--------------------------------------------------------------------------------- # options for code generation #--------------------------------------------------------------------------------- ARCH := -mthumb-interwork # note: arm9tdmi isn't the correct CPU arch, but anything newer and LD # *insists* it has a FPU or VFP, and it won't take no for an answer! CFLAGS := -g -Wformat=2 -Winline -Wall -O2\ -mcpu=arm946e-s -mtune=arm946e-s -fomit-frame-pointer\ -ffast-math \ $(ARCH) CFLAGS += $(INCLUDE) -DARM9 -I$(DEVKITPRO)/PAlib/include/nds ASFLAGS := -g $(ARCH) LDFLAGS := -g $(ARCH) -mno-fpu -L$(DEVKITPRO)/PAlib/lib #--------------------------------------------------------------------------------- # path to tools - this can be deleted if you set the path in windows #--------------------------------------------------------------------------------- # export PATH := /d/dev/ds/devkitARM_r11/bin:/bin #--------------------------------------------------------------------------------- # PATH to ndslib - just make a system variable called NDSLIBPATH and be done with it #--------------------------------------------------------------------------------- # NDSLIBPATH := /d/dev/ds/ndslib/ #--------------------------------------------------------------------------------- # the prefix on the compiler executables #--------------------------------------------------------------------------------- PREFIX := arm-eabi- #--------------------------------------------------------------------------------- # any extra libraries we wish to link with the project #--------------------------------------------------------------------------------- LIBS := -lfat -lnds9 -ldswifi9 LIBSPA := -lpa9 #--------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level containing # include and lib #--------------------------------------------------------------------------------- LIBDIRS := $(DEVKITPRO)/libnds LIBDIRPA := $(PAPATH) #--------------------------------------------------------------------------------- # 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)) export CC := $(PREFIX)gcc export CXX := $(PREFIX)g++ export AR := $(PREFIX)ar export OBJCOPY := $(PREFIX)objcopy #--------------------------------------------------------------------------------- # use CXX for linking C++ projects, CC for standard C #--------------------------------------------------------------------------------- export LD := $(CXX) #export LD := $(CC) CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) PCXFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.pcx))) PALFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.pal))) RAWFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.raw))) MAPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.map))) JPEGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.jpg))) MODFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.mod))) GIFFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.gif))) BMPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.bmp))) BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) export OFILES := $(addsuffix .o,$(BINFILES)) \ $(MAPFILES:.map=.o) $(RAWFILES:.raw=.o) $(PALFILES:.pal=.o) $(PCXFILES:.pcx=.o) $(JPEGFILES:.jpg=.o) $(MODFILES:.mod=.o) $(GIFFILES:.gif=.o) $(BMPFILES:.bmp=.o)\ $(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/nds) \ -I$(PAPATH)/include/nds\ -I$(CURDIR)/$(BUILD) export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) export LIBPATHPA := $(foreach dir,$(LIBDIRPA),-L$(dir)/lib) .PHONY: $(BUILD) clean export #--------------------------------------------------------------------------------- $(BUILD): @[ -d $@ ] || mkdir -p $@ @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile #--------------------------------------------------------------------------------- clean: @echo clean ...$(TARGET) @rm -fr $(BUILD) *.elf *.*ds* export: @echo exporting ...$(TARGET) @cp *.nds $(EXPORT_DIR)/$(TARGET).nds #--------------------------------------------------------------------------------- else DEPENDS := $(OFILES:.o=.d) #--------------------------------------------------------------------------------- # main targets #--------------------------------------------------------------------------------- $(OUTPUT).ds.gba : $(OUTPUT).nds $(OUTPUT).nds : $(OUTPUT).bin $(OUTPUT).bin : $(OUTPUT).elf $(OUTPUT).elf : $(OFILES) #--------------------------------------------------------------------------------- %.ds.gba: %.nds @echo built ... $(notdir $@) @dsbuild $< @cp $(CURDIR)/../$(notdir $@) ../$(notdir $(OUTPUT)).sc.nds #--------------------------------------------------------------------------------- %.nds: %.bin @ndstool -c $@ -9 $(TARGET).bin $(ARM7BIN) $(LOGO) $(ICON) "$(TEXT1);$(TEXT2);$(TEXT3)" #--------------------------------------------------------------------------------- %.bin: %.elf @$(OBJCOPY) -O binary $(TARGET).elf $(TARGET).bin #--------------------------------------------------------------------------------- %.elf: @echo $(LD) $(LDFLAGS) -specs=ds_arm9.specs $(OFILES) $(LIBPATHPA) $(LIBSPA) $(LIBPATHS) $(LIBS) -o $(TARGET).elf @$(LD) $(LDFLAGS) -specs=ds_arm9.specs $(OFILES) $(LIBPATHPA) $(LIBSPA) $(LIBPATHS) $(LIBS) -o $(TARGET).elf #--------------------------------------------------------------------------------- # Compile Targets for C/C++ #--------------------------------------------------------------------------------- #--------------------------------------------------------------------------------- %.o : %.cpp @echo $(notdir $<) @$(CXX) -MM $(CFLAGS) -o $*.d $< @$(CXX) $(CFLAGS) -c $< -o$@ #--------------------------------------------------------------------------------- %.o : %.c @echo $(notdir $<) @$(CC) -MM $(CFLAGS) -o $*.d $< @$(CC) $(CFLAGS) -c $< -o$@ #--------------------------------------------------------------------------------- %.o : %.s @echo $(notdir $<) @$(CC) -MM $(CFLAGS) -o $*.d $< @$(CC) $(ASFLAGS) -c $< -o$@ define bin2o_PA cp $(<) $(*).tmp echo -n $$(( `cat $(*).tmp | wc -c` & 3 )) | sed -e 's/0//g' | sed -e 's/1/000/g' | sed -e 's/2/00/g' | sed -e 's/3/0/g' >> $(*).tmp $(OBJCOPY) -I binary -O elf32-littlearm -B arm \ --rename-section .data=.rodata \ --redefine-sym _binary_$*_tmp_start=$*\ --redefine-sym _binary_$*_tmp_end=$*_end\ --redefine-sym _binary_$*_tmp_size=$*_size\ $(*).tmp $(@) echo "extern const u8" $(*)"[];" > $(*).h echo "extern const u32" $(*)_size[]";" >> $(*).h rm $(*).tmp endef #--------------------------------------------------------------------------------- %.o : %.pcx #--------------------------------------------------------------------------------- @echo $(notdir $<) @$(bin2o_PA) #--------------------------------------------------------------------------------- %.o : %.raw #--------------------------------------------------------------------------------- @echo $(notdir $<) @$(bin2o_PA) #--------------------------------------------------------------------------------- %.bin.o : %.bin #--------------------------------------------------------------------------------- @echo $(notdir $<) @$(bin2o) # Jayenkai kicks ass!!!! # and Spinal rules! #--------------------------------------------------------------------------------- %.o : %.pal #--------------------------------------------------------------------------------- @echo $(notdir $<) @$(bin2o_PA) #--------------------------------------------------------------------------------- %.o : %.map #--------------------------------------------------------------------------------- @echo $(notdir $<) @$(bin2o_PA) #--------------------------------------------------------------------------------- %.o : %.mdl #--------------------------------------------------------------------------------- @echo $(notdir $<) @$(bin2o_PA) #--------------------------------------------------------------------------------- %.o : %.jpg #--------------------------------------------------------------------------------- @echo $(notdir $<) @$(bin2o_PA) #--------------------------------------------------------------------------------- %.o : %.mod #--------------------------------------------------------------------------------- @echo $(notdir $<) @$(bin2o_PA) #--------------------------------------------------------------------------------- %.o : %.gif #--------------------------------------------------------------------------------- @echo $(notdir $<) @$(bin2o_PA) #--------------------------------------------------------------------------------- %.o : %.bmp #--------------------------------------------------------------------------------- @echo $(notdir $<) @$(bin2o_PA) -include $(DEPENDS) #--------------------------------------------------------------------------------------- endif #--------------------------------------------------------------------------------------- |
10. To load a .nds in your code, just use following line.
Code: |
runNdsFile ("filename.nds"); |
Hope that helps some people.
_________________
I'm not a boring person, it's just that boring things keep happening to me.
Homepage