diff --git a/examples/basic_model/Makefile b/examples/basic_model/Makefile index 98f6233..55b39f3 100644 --- a/examples/basic_model/Makefile +++ b/examples/basic_model/Makefile @@ -1,220 +1,16 @@ -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- +# SPDX-License-Identifier: CC0-1.0 +# +# SPDX-FileContributor: Antonio Niño Díaz, 2024 -ifeq ($(strip $(DEVKITARM)),) -$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") -endif +BLOCKSDS ?= /opt/blocksds/core -include $(DEVKITARM)/ds_rules +# User config -#--------------------------------------------------------------------------------- -# 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 -# DATA is a list of directories containing binary files embedded using bin2o -# GRAPHICS is a list of directories containing image files to be converted with grit -# AUDIO is a list of directories containing audio to be converted by maxmod -# ICON is the image used to create the game icon, leave blank to use default rule -# NITRO is a directory that will be accessible via NitroFS -#--------------------------------------------------------------------------------- -TARGET := $(shell basename $(CURDIR)) -BUILD := build -SOURCES := source source/dsma -INCLUDES := include -DATA := data -GRAPHICS := -AUDIO := -ICON := +NAME := basic_model +GAME_TITLE := DSMA: Basic model -# specify a directory which contains the nitro filesystem -# this is relative to the Makefile -NITRO := +# Source code paths -# These set the information text in the nds file -GAME_TITLE := DSMA Example -GAME_SUBTITLE1 := built with devkitARM -GAME_SUBTITLE2 := http://devitpro.org +BINDIRS := data -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- -ARCH := -marm -mthumb-interwork -march=armv5te -mtune=arm946e-s - -CFLAGS := -g -Wall -O3\ - $(ARCH) $(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 - -# automatigically add libraries for NitroFS -ifneq ($(strip $(NITRO)),) -LIBS := -lfilesystem -lfat $(LIBS) -endif -# automagically add maxmod library -ifneq ($(strip $(AUDIO)),) -LIBS := -lmm9 $(LIBS) -endif - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(LIBNDS) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# 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 := $(CURDIR)/$(subst /,,$(dir $(ICON)))\ - $(foreach dir,$(SOURCES),$(CURDIR)/$(dir))\ - $(foreach dir,$(DATA),$(CURDIR)/$(dir))\ - $(foreach dir,$(GRAPHICS),$(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))) -PNGFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.png))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -# prepare NitroFS directory -ifneq ($(strip $(NITRO)),) - export NITRO_FILES := $(CURDIR)/$(NITRO) -endif - -# get audio list for maxmod -ifneq ($(strip $(AUDIO)),) - export MODFILES := $(foreach dir,$(notdir $(wildcard $(AUDIO)/*.*)),$(CURDIR)/$(AUDIO)/$(dir)) - - # place the soundbank file in NitroFS if using it - ifneq ($(strip $(NITRO)),) - export SOUNDBANK := $(NITRO_FILES)/soundbank.bin - - # otherwise, needs to be loaded from memory - else - export SOUNDBANK := soundbank.bin - BINFILES += $(SOUNDBANK) - endif -endif - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) -#--------------------------------------------------------------------------------- - export LD := $(CC) -#--------------------------------------------------------------------------------- -else -#--------------------------------------------------------------------------------- - export LD := $(CXX) -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- - -export OFILES_BIN := $(addsuffix .o,$(BINFILES)) - -export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) - -export OFILES := $(PNGFILES:.png=.o) $(OFILES_BIN) $(OFILES_SOURCES) - -export HFILES := $(PNGFILES:.png=.h) $(addsuffix .h,$(subst .,_,$(BINFILES))) - -export INCLUDE := $(foreach dir,$(INCLUDES),-iquote $(CURDIR)/$(dir))\ - $(foreach dir,$(LIBDIRS),-I$(dir)/include)\ - -I$(CURDIR)/$(BUILD) -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) - -ifeq ($(strip $(ICON)),) - icons := $(wildcard *.bmp) - - ifneq (,$(findstring $(TARGET).bmp,$(icons))) - export GAME_ICON := $(CURDIR)/$(TARGET).bmp - else - ifneq (,$(findstring icon.bmp,$(icons))) - export GAME_ICON := $(CURDIR)/icon.bmp - endif - endif -else - ifeq ($(suffix $(ICON)), .grf) - export GAME_ICON := $(CURDIR)/$(ICON) - else - export GAME_ICON := $(CURDIR)/$(BUILD)/$(notdir $(basename $(ICON))).grf - endif -endif - -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds $(SOUNDBANK) - -#--------------------------------------------------------------------------------- -else - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).nds: $(OUTPUT).elf $(GAME_ICON) -$(OUTPUT).elf: $(OFILES) - -# source files depend on generated headers -$(OFILES_SOURCES) : $(HFILES) - -# need to build soundbank first -$(OFILES): $(SOUNDBANK) - -#--------------------------------------------------------------------------------- -# rule to build solution from music files -#--------------------------------------------------------------------------------- -$(SOUNDBANK) : $(MODFILES) -#--------------------------------------------------------------------------------- - mmutil $^ -d -o$@ -hsoundbank.h - -#--------------------------------------------------------------------------------- -%.bin.o %_bin.h : %.bin -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) - -#--------------------------------------------------------------------------------- -# This rule creates assembly source files using grit -# grit takes an image file and a .grit describing how the file is to be processed -# add additional rules like this for each image extension -# you use in the graphics folders -#--------------------------------------------------------------------------------- -%.s %.h: %.png %.grit -#--------------------------------------------------------------------------------- - grit $< -fts -o$* - -#--------------------------------------------------------------------------------- -# Convert non-GRF game icon to GRF if needed -#--------------------------------------------------------------------------------- -$(GAME_ICON): $(notdir $(ICON)) -#--------------------------------------------------------------------------------- - @echo convert $(notdir $<) - @grit $< -g -gt -gB4 -gT FF00FF -m! -p -pe 16 -fh! -ftr - --include $(DEPSDIR)/*.d - -#--------------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------------- +include $(BLOCKSDS)/sys/default_makefiles/rom_arm9/Makefile diff --git a/examples/basic_model/source/main.c b/examples/basic_model/source/main.c index 0c489c9..e2e7595 100644 --- a/examples/basic_model/source/main.c +++ b/examples/basic_model/source/main.c @@ -68,8 +68,7 @@ int main(void) int textureID; glGenTextures(1, &textureID); glBindTexture(0, textureID); - if (glTexImage2D(0, 0, GL_RGBA, TEXTURE_SIZE_128, TEXTURE_SIZE_128, 0, - TEXGEN_TEXCOORD, (u8 *)texture128_bin) == 0) + if (glTexImage2D(0, 0, GL_RGBA, 128, 128, 0, TEXGEN_TEXCOORD, texture128_bin) == 0) { printf("Failed to load texture"); while (1) diff --git a/examples/blend_animations/Makefile b/examples/blend_animations/Makefile index 98f6233..2e64367 100644 --- a/examples/blend_animations/Makefile +++ b/examples/blend_animations/Makefile @@ -1,220 +1,16 @@ -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- +# SPDX-License-Identifier: CC0-1.0 +# +# SPDX-FileContributor: Antonio Niño Díaz, 2024 -ifeq ($(strip $(DEVKITARM)),) -$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") -endif +BLOCKSDS ?= /opt/blocksds/core -include $(DEVKITARM)/ds_rules +# User config -#--------------------------------------------------------------------------------- -# 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 -# DATA is a list of directories containing binary files embedded using bin2o -# GRAPHICS is a list of directories containing image files to be converted with grit -# AUDIO is a list of directories containing audio to be converted by maxmod -# ICON is the image used to create the game icon, leave blank to use default rule -# NITRO is a directory that will be accessible via NitroFS -#--------------------------------------------------------------------------------- -TARGET := $(shell basename $(CURDIR)) -BUILD := build -SOURCES := source source/dsma -INCLUDES := include -DATA := data -GRAPHICS := -AUDIO := -ICON := +NAME := blend_animations +GAME_TITLE := DSMA: Blend animations -# specify a directory which contains the nitro filesystem -# this is relative to the Makefile -NITRO := +# Source code paths -# These set the information text in the nds file -GAME_TITLE := DSMA Example -GAME_SUBTITLE1 := built with devkitARM -GAME_SUBTITLE2 := http://devitpro.org +BINDIRS := data -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- -ARCH := -marm -mthumb-interwork -march=armv5te -mtune=arm946e-s - -CFLAGS := -g -Wall -O3\ - $(ARCH) $(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 - -# automatigically add libraries for NitroFS -ifneq ($(strip $(NITRO)),) -LIBS := -lfilesystem -lfat $(LIBS) -endif -# automagically add maxmod library -ifneq ($(strip $(AUDIO)),) -LIBS := -lmm9 $(LIBS) -endif - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(LIBNDS) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# 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 := $(CURDIR)/$(subst /,,$(dir $(ICON)))\ - $(foreach dir,$(SOURCES),$(CURDIR)/$(dir))\ - $(foreach dir,$(DATA),$(CURDIR)/$(dir))\ - $(foreach dir,$(GRAPHICS),$(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))) -PNGFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.png))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -# prepare NitroFS directory -ifneq ($(strip $(NITRO)),) - export NITRO_FILES := $(CURDIR)/$(NITRO) -endif - -# get audio list for maxmod -ifneq ($(strip $(AUDIO)),) - export MODFILES := $(foreach dir,$(notdir $(wildcard $(AUDIO)/*.*)),$(CURDIR)/$(AUDIO)/$(dir)) - - # place the soundbank file in NitroFS if using it - ifneq ($(strip $(NITRO)),) - export SOUNDBANK := $(NITRO_FILES)/soundbank.bin - - # otherwise, needs to be loaded from memory - else - export SOUNDBANK := soundbank.bin - BINFILES += $(SOUNDBANK) - endif -endif - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) -#--------------------------------------------------------------------------------- - export LD := $(CC) -#--------------------------------------------------------------------------------- -else -#--------------------------------------------------------------------------------- - export LD := $(CXX) -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- - -export OFILES_BIN := $(addsuffix .o,$(BINFILES)) - -export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) - -export OFILES := $(PNGFILES:.png=.o) $(OFILES_BIN) $(OFILES_SOURCES) - -export HFILES := $(PNGFILES:.png=.h) $(addsuffix .h,$(subst .,_,$(BINFILES))) - -export INCLUDE := $(foreach dir,$(INCLUDES),-iquote $(CURDIR)/$(dir))\ - $(foreach dir,$(LIBDIRS),-I$(dir)/include)\ - -I$(CURDIR)/$(BUILD) -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) - -ifeq ($(strip $(ICON)),) - icons := $(wildcard *.bmp) - - ifneq (,$(findstring $(TARGET).bmp,$(icons))) - export GAME_ICON := $(CURDIR)/$(TARGET).bmp - else - ifneq (,$(findstring icon.bmp,$(icons))) - export GAME_ICON := $(CURDIR)/icon.bmp - endif - endif -else - ifeq ($(suffix $(ICON)), .grf) - export GAME_ICON := $(CURDIR)/$(ICON) - else - export GAME_ICON := $(CURDIR)/$(BUILD)/$(notdir $(basename $(ICON))).grf - endif -endif - -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds $(SOUNDBANK) - -#--------------------------------------------------------------------------------- -else - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).nds: $(OUTPUT).elf $(GAME_ICON) -$(OUTPUT).elf: $(OFILES) - -# source files depend on generated headers -$(OFILES_SOURCES) : $(HFILES) - -# need to build soundbank first -$(OFILES): $(SOUNDBANK) - -#--------------------------------------------------------------------------------- -# rule to build solution from music files -#--------------------------------------------------------------------------------- -$(SOUNDBANK) : $(MODFILES) -#--------------------------------------------------------------------------------- - mmutil $^ -d -o$@ -hsoundbank.h - -#--------------------------------------------------------------------------------- -%.bin.o %_bin.h : %.bin -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) - -#--------------------------------------------------------------------------------- -# This rule creates assembly source files using grit -# grit takes an image file and a .grit describing how the file is to be processed -# add additional rules like this for each image extension -# you use in the graphics folders -#--------------------------------------------------------------------------------- -%.s %.h: %.png %.grit -#--------------------------------------------------------------------------------- - grit $< -fts -o$* - -#--------------------------------------------------------------------------------- -# Convert non-GRF game icon to GRF if needed -#--------------------------------------------------------------------------------- -$(GAME_ICON): $(notdir $(ICON)) -#--------------------------------------------------------------------------------- - @echo convert $(notdir $<) - @grit $< -g -gt -gB4 -gT FF00FF -m! -p -pe 16 -fh! -ftr - --include $(DEPSDIR)/*.d - -#--------------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------------- +include $(BLOCKSDS)/sys/default_makefiles/rom_arm9/Makefile diff --git a/examples/blend_animations/source/main.c b/examples/blend_animations/source/main.c index 68b2b84..1aeb00d 100644 --- a/examples/blend_animations/source/main.c +++ b/examples/blend_animations/source/main.c @@ -70,8 +70,7 @@ int main(void) int textureID; glGenTextures(1, &textureID); glBindTexture(0, textureID); - if (glTexImage2D(0, 0, GL_RGBA, TEXTURE_SIZE_128, TEXTURE_SIZE_128, 0, - TEXGEN_TEXCOORD, (u8 *)texture128_bin) == 0) + if (glTexImage2D(0, 0, GL_RGBA, 128, 128, 0, TEXGEN_TEXCOORD, texture128_bin) == 0) { printf("Failed to load texture"); while (1) @@ -183,7 +182,7 @@ int main(void) POLY_FORMAT_LIGHT1 | POLY_FORMAT_LIGHT2 | POLY_FORMAT_LIGHT3); glTranslatef(0, 3, 5); - glCallList((uint32_t *)ball_bin); + glCallList(ball_bin); } glPopMatrix(1); diff --git a/examples/filesystem_loading/Makefile b/examples/filesystem_loading/Makefile index 9e5e5dc..d5ad022 100644 --- a/examples/filesystem_loading/Makefile +++ b/examples/filesystem_loading/Makefile @@ -1,220 +1,16 @@ -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- +# SPDX-License-Identifier: CC0-1.0 +# +# SPDX-FileContributor: Antonio Niño Díaz, 2024 -ifeq ($(strip $(DEVKITARM)),) -$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") -endif +BLOCKSDS ?= /opt/blocksds/core -include $(DEVKITARM)/ds_rules +# User config -#--------------------------------------------------------------------------------- -# 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 -# DATA is a list of directories containing binary files embedded using bin2o -# GRAPHICS is a list of directories containing image files to be converted with grit -# AUDIO is a list of directories containing audio to be converted by maxmod -# ICON is the image used to create the game icon, leave blank to use default rule -# NITRO is a directory that will be accessible via NitroFS -#--------------------------------------------------------------------------------- -TARGET := $(shell basename $(CURDIR)) -BUILD := build -SOURCES := source source/dsma -INCLUDES := include -DATA := -GRAPHICS := -AUDIO := -ICON := +NAME := filesystem_loading +GAME_TITLE := DSMA: Filesystem loading -# specify a directory which contains the nitro filesystem -# this is relative to the Makefile -NITRO := nitrofiles +# Source code paths -# These set the information text in the nds file -GAME_TITLE := DSMA Example -GAME_SUBTITLE1 := built with devkitARM -GAME_SUBTITLE2 := http://devitpro.org +NITROFSDIR := nitrofs -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- -ARCH := -marm -mthumb-interwork -march=armv5te -mtune=arm946e-s - -CFLAGS := -g -Wall -O3\ - $(ARCH) $(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 - -# automatigically add libraries for NitroFS -ifneq ($(strip $(NITRO)),) -LIBS := -lfilesystem -lfat $(LIBS) -endif -# automagically add maxmod library -ifneq ($(strip $(AUDIO)),) -LIBS := -lmm9 $(LIBS) -endif - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(LIBNDS) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# 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 := $(CURDIR)/$(subst /,,$(dir $(ICON)))\ - $(foreach dir,$(SOURCES),$(CURDIR)/$(dir))\ - $(foreach dir,$(DATA),$(CURDIR)/$(dir))\ - $(foreach dir,$(GRAPHICS),$(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))) -PNGFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.png))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -# prepare NitroFS directory -ifneq ($(strip $(NITRO)),) - export NITRO_FILES := $(CURDIR)/$(NITRO) -endif - -# get audio list for maxmod -ifneq ($(strip $(AUDIO)),) - export MODFILES := $(foreach dir,$(notdir $(wildcard $(AUDIO)/*.*)),$(CURDIR)/$(AUDIO)/$(dir)) - - # place the soundbank file in NitroFS if using it - ifneq ($(strip $(NITRO)),) - export SOUNDBANK := $(NITRO_FILES)/soundbank.bin - - # otherwise, needs to be loaded from memory - else - export SOUNDBANK := soundbank.bin - BINFILES += $(SOUNDBANK) - endif -endif - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) -#--------------------------------------------------------------------------------- - export LD := $(CC) -#--------------------------------------------------------------------------------- -else -#--------------------------------------------------------------------------------- - export LD := $(CXX) -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- - -export OFILES_BIN := $(addsuffix .o,$(BINFILES)) - -export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) - -export OFILES := $(PNGFILES:.png=.o) $(OFILES_BIN) $(OFILES_SOURCES) - -export HFILES := $(PNGFILES:.png=.h) $(addsuffix .h,$(subst .,_,$(BINFILES))) - -export INCLUDE := $(foreach dir,$(INCLUDES),-iquote $(CURDIR)/$(dir))\ - $(foreach dir,$(LIBDIRS),-I$(dir)/include)\ - -I$(CURDIR)/$(BUILD) -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) - -ifeq ($(strip $(ICON)),) - icons := $(wildcard *.bmp) - - ifneq (,$(findstring $(TARGET).bmp,$(icons))) - export GAME_ICON := $(CURDIR)/$(TARGET).bmp - else - ifneq (,$(findstring icon.bmp,$(icons))) - export GAME_ICON := $(CURDIR)/icon.bmp - endif - endif -else - ifeq ($(suffix $(ICON)), .grf) - export GAME_ICON := $(CURDIR)/$(ICON) - else - export GAME_ICON := $(CURDIR)/$(BUILD)/$(notdir $(basename $(ICON))).grf - endif -endif - -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds $(SOUNDBANK) - -#--------------------------------------------------------------------------------- -else - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).nds: $(OUTPUT).elf $(GAME_ICON) -$(OUTPUT).elf: $(OFILES) - -# source files depend on generated headers -$(OFILES_SOURCES) : $(HFILES) - -# need to build soundbank first -$(OFILES): $(SOUNDBANK) - -#--------------------------------------------------------------------------------- -# rule to build solution from music files -#--------------------------------------------------------------------------------- -$(SOUNDBANK) : $(MODFILES) -#--------------------------------------------------------------------------------- - mmutil $^ -d -o$@ -hsoundbank.h - -#--------------------------------------------------------------------------------- -%.bin.o %_bin.h : %.bin -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) - -#--------------------------------------------------------------------------------- -# This rule creates assembly source files using grit -# grit takes an image file and a .grit describing how the file is to be processed -# add additional rules like this for each image extension -# you use in the graphics folders -#--------------------------------------------------------------------------------- -%.s %.h: %.png %.grit -#--------------------------------------------------------------------------------- - grit $< -fts -o$* - -#--------------------------------------------------------------------------------- -# Convert non-GRF game icon to GRF if needed -#--------------------------------------------------------------------------------- -$(GAME_ICON): $(notdir $(ICON)) -#--------------------------------------------------------------------------------- - @echo convert $(notdir $<) - @grit $< -g -gt -gB4 -gT FF00FF -m! -p -pe 16 -fh! -ftr - --include $(DEPSDIR)/*.d - -#--------------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------------- +include $(BLOCKSDS)/sys/default_makefiles/rom_arm9/Makefile diff --git a/examples/filesystem_loading/assets.sh b/examples/filesystem_loading/assets.sh index 6bee866..c2c63f4 100644 --- a/examples/filesystem_loading/assets.sh +++ b/examples/filesystem_loading/assets.sh @@ -6,7 +6,7 @@ ROBOT=../../models/robot python3 $TOOLS/md5_to_dsma.py \ --model $ROBOT/Robot.md5mesh \ --name robot \ - --output nitrofiles \ + --output nitrofs \ --texture 128 128 \ --anim $ROBOT/Walk.md5anim \ --skip-frames 1 \ diff --git a/examples/filesystem_loading/nitrofiles/texture128.bin b/examples/filesystem_loading/nitrofs/texture128.bin similarity index 100% rename from examples/filesystem_loading/nitrofiles/texture128.bin rename to examples/filesystem_loading/nitrofs/texture128.bin diff --git a/examples/filesystem_loading/source/main.c b/examples/filesystem_loading/source/main.c index 2ae942f..b22eafd 100644 --- a/examples/filesystem_loading/source/main.c +++ b/examples/filesystem_loading/source/main.c @@ -21,7 +21,7 @@ int file_load(const char *filename, void **buffer, size_t *size_) if (f == NULL) { - iprintf("%s couldn't be opened!\n", filename); + printf("%s couldn't be opened!\n", filename); return -1; } @@ -32,7 +32,7 @@ int file_load(const char *filename, void **buffer, size_t *size_) if (size == 0) { - iprintf("Size of %s is 0!\n", filename); + printf("Size of %s is 0!\n", filename); fclose(f); return -1; } @@ -41,14 +41,14 @@ int file_load(const char *filename, void **buffer, size_t *size_) *buffer = malloc(size); if (*buffer == NULL) { - iprintf("Not enought memory to load %s!\n", filename); + printf("Not enought memory to load %s!\n", filename); fclose(f); return -1; } if (fread(*buffer, size, 1, f) != 1) { - iprintf("Error while reading: %s\n", filename); + printf("Error while reading: %s\n", filename); fclose(f); free(*buffer); return -1; @@ -108,7 +108,7 @@ int main(void) if (!nitroFSInit(NULL)) { - iprintf("nitroFSInit failed.\nPress START to exit"); + printf("nitroFSInit failed.\nPress START to exit"); while(1) { swiWaitForVBlank(); @@ -128,7 +128,7 @@ int main(void) ret |= file_load("texture128.bin", &texture128, &texture128_size); if (ret) { - iprintf("Press START to exit"); + printf("Press START to exit"); while(1) { swiWaitForVBlank(); @@ -147,8 +147,7 @@ int main(void) int textureID; glGenTextures(1, &textureID); glBindTexture(0, textureID); - if (glTexImage2D(0, 0, GL_RGB, TEXTURE_SIZE_128, TEXTURE_SIZE_128, 0, - TEXGEN_TEXCOORD, texture128) == 0) + if (glTexImage2D(0, 0, GL_RGBA, 128, 128, 0, TEXGEN_TEXCOORD, texture128) == 0) { printf("Failed to load texture"); while (1) diff --git a/examples/multiple_animations/Makefile b/examples/multiple_animations/Makefile index 98f6233..14a50e6 100644 --- a/examples/multiple_animations/Makefile +++ b/examples/multiple_animations/Makefile @@ -1,220 +1,16 @@ -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- +# SPDX-License-Identifier: CC0-1.0 +# +# SPDX-FileContributor: Antonio Niño Díaz, 2024 -ifeq ($(strip $(DEVKITARM)),) -$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") -endif +BLOCKSDS ?= /opt/blocksds/core -include $(DEVKITARM)/ds_rules +# User config -#--------------------------------------------------------------------------------- -# 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 -# DATA is a list of directories containing binary files embedded using bin2o -# GRAPHICS is a list of directories containing image files to be converted with grit -# AUDIO is a list of directories containing audio to be converted by maxmod -# ICON is the image used to create the game icon, leave blank to use default rule -# NITRO is a directory that will be accessible via NitroFS -#--------------------------------------------------------------------------------- -TARGET := $(shell basename $(CURDIR)) -BUILD := build -SOURCES := source source/dsma -INCLUDES := include -DATA := data -GRAPHICS := -AUDIO := -ICON := +NAME := multiple_animations +GAME_TITLE := DSMA: Multiple animations -# specify a directory which contains the nitro filesystem -# this is relative to the Makefile -NITRO := +# Source code paths -# These set the information text in the nds file -GAME_TITLE := DSMA Example -GAME_SUBTITLE1 := built with devkitARM -GAME_SUBTITLE2 := http://devitpro.org +BINDIRS := data -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- -ARCH := -marm -mthumb-interwork -march=armv5te -mtune=arm946e-s - -CFLAGS := -g -Wall -O3\ - $(ARCH) $(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 - -# automatigically add libraries for NitroFS -ifneq ($(strip $(NITRO)),) -LIBS := -lfilesystem -lfat $(LIBS) -endif -# automagically add maxmod library -ifneq ($(strip $(AUDIO)),) -LIBS := -lmm9 $(LIBS) -endif - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(LIBNDS) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# 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 := $(CURDIR)/$(subst /,,$(dir $(ICON)))\ - $(foreach dir,$(SOURCES),$(CURDIR)/$(dir))\ - $(foreach dir,$(DATA),$(CURDIR)/$(dir))\ - $(foreach dir,$(GRAPHICS),$(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))) -PNGFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.png))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -# prepare NitroFS directory -ifneq ($(strip $(NITRO)),) - export NITRO_FILES := $(CURDIR)/$(NITRO) -endif - -# get audio list for maxmod -ifneq ($(strip $(AUDIO)),) - export MODFILES := $(foreach dir,$(notdir $(wildcard $(AUDIO)/*.*)),$(CURDIR)/$(AUDIO)/$(dir)) - - # place the soundbank file in NitroFS if using it - ifneq ($(strip $(NITRO)),) - export SOUNDBANK := $(NITRO_FILES)/soundbank.bin - - # otherwise, needs to be loaded from memory - else - export SOUNDBANK := soundbank.bin - BINFILES += $(SOUNDBANK) - endif -endif - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) -#--------------------------------------------------------------------------------- - export LD := $(CC) -#--------------------------------------------------------------------------------- -else -#--------------------------------------------------------------------------------- - export LD := $(CXX) -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- - -export OFILES_BIN := $(addsuffix .o,$(BINFILES)) - -export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) - -export OFILES := $(PNGFILES:.png=.o) $(OFILES_BIN) $(OFILES_SOURCES) - -export HFILES := $(PNGFILES:.png=.h) $(addsuffix .h,$(subst .,_,$(BINFILES))) - -export INCLUDE := $(foreach dir,$(INCLUDES),-iquote $(CURDIR)/$(dir))\ - $(foreach dir,$(LIBDIRS),-I$(dir)/include)\ - -I$(CURDIR)/$(BUILD) -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) - -ifeq ($(strip $(ICON)),) - icons := $(wildcard *.bmp) - - ifneq (,$(findstring $(TARGET).bmp,$(icons))) - export GAME_ICON := $(CURDIR)/$(TARGET).bmp - else - ifneq (,$(findstring icon.bmp,$(icons))) - export GAME_ICON := $(CURDIR)/icon.bmp - endif - endif -else - ifeq ($(suffix $(ICON)), .grf) - export GAME_ICON := $(CURDIR)/$(ICON) - else - export GAME_ICON := $(CURDIR)/$(BUILD)/$(notdir $(basename $(ICON))).grf - endif -endif - -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds $(SOUNDBANK) - -#--------------------------------------------------------------------------------- -else - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).nds: $(OUTPUT).elf $(GAME_ICON) -$(OUTPUT).elf: $(OFILES) - -# source files depend on generated headers -$(OFILES_SOURCES) : $(HFILES) - -# need to build soundbank first -$(OFILES): $(SOUNDBANK) - -#--------------------------------------------------------------------------------- -# rule to build solution from music files -#--------------------------------------------------------------------------------- -$(SOUNDBANK) : $(MODFILES) -#--------------------------------------------------------------------------------- - mmutil $^ -d -o$@ -hsoundbank.h - -#--------------------------------------------------------------------------------- -%.bin.o %_bin.h : %.bin -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) - -#--------------------------------------------------------------------------------- -# This rule creates assembly source files using grit -# grit takes an image file and a .grit describing how the file is to be processed -# add additional rules like this for each image extension -# you use in the graphics folders -#--------------------------------------------------------------------------------- -%.s %.h: %.png %.grit -#--------------------------------------------------------------------------------- - grit $< -fts -o$* - -#--------------------------------------------------------------------------------- -# Convert non-GRF game icon to GRF if needed -#--------------------------------------------------------------------------------- -$(GAME_ICON): $(notdir $(ICON)) -#--------------------------------------------------------------------------------- - @echo convert $(notdir $<) - @grit $< -g -gt -gB4 -gT FF00FF -m! -p -pe 16 -fh! -ftr - --include $(DEPSDIR)/*.d - -#--------------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------------- +include $(BLOCKSDS)/sys/default_makefiles/rom_arm9/Makefile diff --git a/examples/multiple_animations/source/main.c b/examples/multiple_animations/source/main.c index 3400171..0308954 100644 --- a/examples/multiple_animations/source/main.c +++ b/examples/multiple_animations/source/main.c @@ -72,8 +72,7 @@ int main(void) int textureID; glGenTextures(1, &textureID); glBindTexture(0, textureID); - if (glTexImage2D(0, 0, GL_RGBA, TEXTURE_SIZE_128, TEXTURE_SIZE_128, 0, - TEXGEN_TEXCOORD, (u8 *)texture128_bin) == 0) + if (glTexImage2D(0, 0, GL_RGBA, 128, 128, 0, TEXGEN_TEXCOORD, texture128_bin) == 0) { printf("Failed to load texture"); while (1) @@ -186,7 +185,7 @@ int main(void) POLY_FORMAT_LIGHT1 | POLY_FORMAT_LIGHT2 | POLY_FORMAT_LIGHT3); glTranslatef(0, 3, 5); - glCallList((uint32_t *)ball_bin); + glCallList(ball_bin); } glPopMatrix(1); diff --git a/examples/performance/Makefile b/examples/performance/Makefile index 98f6233..62e075a 100644 --- a/examples/performance/Makefile +++ b/examples/performance/Makefile @@ -1,220 +1,16 @@ -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- +# SPDX-License-Identifier: CC0-1.0 +# +# SPDX-FileContributor: Antonio Niño Díaz, 2024 -ifeq ($(strip $(DEVKITARM)),) -$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") -endif +BLOCKSDS ?= /opt/blocksds/core -include $(DEVKITARM)/ds_rules +# User config -#--------------------------------------------------------------------------------- -# 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 -# DATA is a list of directories containing binary files embedded using bin2o -# GRAPHICS is a list of directories containing image files to be converted with grit -# AUDIO is a list of directories containing audio to be converted by maxmod -# ICON is the image used to create the game icon, leave blank to use default rule -# NITRO is a directory that will be accessible via NitroFS -#--------------------------------------------------------------------------------- -TARGET := $(shell basename $(CURDIR)) -BUILD := build -SOURCES := source source/dsma -INCLUDES := include -DATA := data -GRAPHICS := -AUDIO := -ICON := +NAME := performance +GAME_TITLE := DSMA: Performance -# specify a directory which contains the nitro filesystem -# this is relative to the Makefile -NITRO := +# Source code paths -# These set the information text in the nds file -GAME_TITLE := DSMA Example -GAME_SUBTITLE1 := built with devkitARM -GAME_SUBTITLE2 := http://devitpro.org +BINDIRS := data -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- -ARCH := -marm -mthumb-interwork -march=armv5te -mtune=arm946e-s - -CFLAGS := -g -Wall -O3\ - $(ARCH) $(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 - -# automatigically add libraries for NitroFS -ifneq ($(strip $(NITRO)),) -LIBS := -lfilesystem -lfat $(LIBS) -endif -# automagically add maxmod library -ifneq ($(strip $(AUDIO)),) -LIBS := -lmm9 $(LIBS) -endif - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(LIBNDS) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# 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 := $(CURDIR)/$(subst /,,$(dir $(ICON)))\ - $(foreach dir,$(SOURCES),$(CURDIR)/$(dir))\ - $(foreach dir,$(DATA),$(CURDIR)/$(dir))\ - $(foreach dir,$(GRAPHICS),$(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))) -PNGFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.png))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -# prepare NitroFS directory -ifneq ($(strip $(NITRO)),) - export NITRO_FILES := $(CURDIR)/$(NITRO) -endif - -# get audio list for maxmod -ifneq ($(strip $(AUDIO)),) - export MODFILES := $(foreach dir,$(notdir $(wildcard $(AUDIO)/*.*)),$(CURDIR)/$(AUDIO)/$(dir)) - - # place the soundbank file in NitroFS if using it - ifneq ($(strip $(NITRO)),) - export SOUNDBANK := $(NITRO_FILES)/soundbank.bin - - # otherwise, needs to be loaded from memory - else - export SOUNDBANK := soundbank.bin - BINFILES += $(SOUNDBANK) - endif -endif - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) -#--------------------------------------------------------------------------------- - export LD := $(CC) -#--------------------------------------------------------------------------------- -else -#--------------------------------------------------------------------------------- - export LD := $(CXX) -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- - -export OFILES_BIN := $(addsuffix .o,$(BINFILES)) - -export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) - -export OFILES := $(PNGFILES:.png=.o) $(OFILES_BIN) $(OFILES_SOURCES) - -export HFILES := $(PNGFILES:.png=.h) $(addsuffix .h,$(subst .,_,$(BINFILES))) - -export INCLUDE := $(foreach dir,$(INCLUDES),-iquote $(CURDIR)/$(dir))\ - $(foreach dir,$(LIBDIRS),-I$(dir)/include)\ - -I$(CURDIR)/$(BUILD) -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) - -ifeq ($(strip $(ICON)),) - icons := $(wildcard *.bmp) - - ifneq (,$(findstring $(TARGET).bmp,$(icons))) - export GAME_ICON := $(CURDIR)/$(TARGET).bmp - else - ifneq (,$(findstring icon.bmp,$(icons))) - export GAME_ICON := $(CURDIR)/icon.bmp - endif - endif -else - ifeq ($(suffix $(ICON)), .grf) - export GAME_ICON := $(CURDIR)/$(ICON) - else - export GAME_ICON := $(CURDIR)/$(BUILD)/$(notdir $(basename $(ICON))).grf - endif -endif - -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds $(SOUNDBANK) - -#--------------------------------------------------------------------------------- -else - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).nds: $(OUTPUT).elf $(GAME_ICON) -$(OUTPUT).elf: $(OFILES) - -# source files depend on generated headers -$(OFILES_SOURCES) : $(HFILES) - -# need to build soundbank first -$(OFILES): $(SOUNDBANK) - -#--------------------------------------------------------------------------------- -# rule to build solution from music files -#--------------------------------------------------------------------------------- -$(SOUNDBANK) : $(MODFILES) -#--------------------------------------------------------------------------------- - mmutil $^ -d -o$@ -hsoundbank.h - -#--------------------------------------------------------------------------------- -%.bin.o %_bin.h : %.bin -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) - -#--------------------------------------------------------------------------------- -# This rule creates assembly source files using grit -# grit takes an image file and a .grit describing how the file is to be processed -# add additional rules like this for each image extension -# you use in the graphics folders -#--------------------------------------------------------------------------------- -%.s %.h: %.png %.grit -#--------------------------------------------------------------------------------- - grit $< -fts -o$* - -#--------------------------------------------------------------------------------- -# Convert non-GRF game icon to GRF if needed -#--------------------------------------------------------------------------------- -$(GAME_ICON): $(notdir $(ICON)) -#--------------------------------------------------------------------------------- - @echo convert $(notdir $<) - @grit $< -g -gt -gB4 -gT FF00FF -m! -p -pe 16 -fh! -ftr - --include $(DEPSDIR)/*.d - -#--------------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------------- +include $(BLOCKSDS)/sys/default_makefiles/rom_arm9/Makefile diff --git a/examples/performance/source/main.c b/examples/performance/source/main.c index 61b535d..ec75b4a 100644 --- a/examples/performance/source/main.c +++ b/examples/performance/source/main.c @@ -68,8 +68,7 @@ int main(void) int textureID; glGenTextures(1, &textureID); glBindTexture(0, textureID); - if (glTexImage2D(0, 0, GL_RGBA, TEXTURE_SIZE_128, TEXTURE_SIZE_128, 0, - TEXGEN_TEXCOORD, (u8 *)texture128_bin) == 0) + if (glTexImage2D(0, 0, GL_RGBA, 128, 128, 0, TEXGEN_TEXCOORD, texture128_bin) == 0) { printf("Failed to load texture"); while (1) @@ -86,22 +85,22 @@ int main(void) const uint32_t quad_num_frames = DSMA_GetNumFrames(quad_dsa_file); int32_t quad_frame = 0; - iprintf("\x1b[0;0HExit demo: START"); + printf("\x1b[0;0HExit demo: START"); - iprintf("\x1b[4;0H" - "This sample shows two models\n" - "side by side.\n" - "\n" - "The robot has aprox. 550 polys\n" - "and 16 bones. It's an example\n" - "of a regular model\n." - "\n" - "The quad has 2 polys and 7\n" - "bones. It's an example of how\n" - "much CPU time the skeleton\n" - "calculations take.\n"); + printf("\x1b[4;0H" + "This sample shows two models\n" + "side by side.\n" + "\n" + "The robot has aprox. 550 polys\n" + "and 16 bones. It's an example\n" + "of a regular model\n." + "\n" + "The quad has 2 polys and 7\n" + "bones. It's an example of how\n" + "much CPU time the skeleton\n" + "calculations take.\n"); - iprintf("\x1b[19;0HTime Ticks us CPU%%"); + printf("\x1b[19;0HTime Ticks us CPU%%"); while(1) { diff --git a/examples/stress_test/Makefile b/examples/stress_test/Makefile index 98f6233..156b14c 100644 --- a/examples/stress_test/Makefile +++ b/examples/stress_test/Makefile @@ -1,220 +1,16 @@ -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- +# SPDX-License-Identifier: CC0-1.0 +# +# SPDX-FileContributor: Antonio Niño Díaz, 2024 -ifeq ($(strip $(DEVKITARM)),) -$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") -endif +BLOCKSDS ?= /opt/blocksds/core -include $(DEVKITARM)/ds_rules +# User config -#--------------------------------------------------------------------------------- -# 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 -# DATA is a list of directories containing binary files embedded using bin2o -# GRAPHICS is a list of directories containing image files to be converted with grit -# AUDIO is a list of directories containing audio to be converted by maxmod -# ICON is the image used to create the game icon, leave blank to use default rule -# NITRO is a directory that will be accessible via NitroFS -#--------------------------------------------------------------------------------- -TARGET := $(shell basename $(CURDIR)) -BUILD := build -SOURCES := source source/dsma -INCLUDES := include -DATA := data -GRAPHICS := -AUDIO := -ICON := +NAME := stress_test +GAME_TITLE := DSMA: Stress test -# specify a directory which contains the nitro filesystem -# this is relative to the Makefile -NITRO := +# Source code paths -# These set the information text in the nds file -GAME_TITLE := DSMA Example -GAME_SUBTITLE1 := built with devkitARM -GAME_SUBTITLE2 := http://devitpro.org +BINDIRS := data -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- -ARCH := -marm -mthumb-interwork -march=armv5te -mtune=arm946e-s - -CFLAGS := -g -Wall -O3\ - $(ARCH) $(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 - -# automatigically add libraries for NitroFS -ifneq ($(strip $(NITRO)),) -LIBS := -lfilesystem -lfat $(LIBS) -endif -# automagically add maxmod library -ifneq ($(strip $(AUDIO)),) -LIBS := -lmm9 $(LIBS) -endif - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(LIBNDS) $(PORTLIBS) - -#--------------------------------------------------------------------------------- -# 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 := $(CURDIR)/$(subst /,,$(dir $(ICON)))\ - $(foreach dir,$(SOURCES),$(CURDIR)/$(dir))\ - $(foreach dir,$(DATA),$(CURDIR)/$(dir))\ - $(foreach dir,$(GRAPHICS),$(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))) -PNGFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.png))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -# prepare NitroFS directory -ifneq ($(strip $(NITRO)),) - export NITRO_FILES := $(CURDIR)/$(NITRO) -endif - -# get audio list for maxmod -ifneq ($(strip $(AUDIO)),) - export MODFILES := $(foreach dir,$(notdir $(wildcard $(AUDIO)/*.*)),$(CURDIR)/$(AUDIO)/$(dir)) - - # place the soundbank file in NitroFS if using it - ifneq ($(strip $(NITRO)),) - export SOUNDBANK := $(NITRO_FILES)/soundbank.bin - - # otherwise, needs to be loaded from memory - else - export SOUNDBANK := soundbank.bin - BINFILES += $(SOUNDBANK) - endif -endif - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) -#--------------------------------------------------------------------------------- - export LD := $(CC) -#--------------------------------------------------------------------------------- -else -#--------------------------------------------------------------------------------- - export LD := $(CXX) -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- - -export OFILES_BIN := $(addsuffix .o,$(BINFILES)) - -export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) - -export OFILES := $(PNGFILES:.png=.o) $(OFILES_BIN) $(OFILES_SOURCES) - -export HFILES := $(PNGFILES:.png=.h) $(addsuffix .h,$(subst .,_,$(BINFILES))) - -export INCLUDE := $(foreach dir,$(INCLUDES),-iquote $(CURDIR)/$(dir))\ - $(foreach dir,$(LIBDIRS),-I$(dir)/include)\ - -I$(CURDIR)/$(BUILD) -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) - -ifeq ($(strip $(ICON)),) - icons := $(wildcard *.bmp) - - ifneq (,$(findstring $(TARGET).bmp,$(icons))) - export GAME_ICON := $(CURDIR)/$(TARGET).bmp - else - ifneq (,$(findstring icon.bmp,$(icons))) - export GAME_ICON := $(CURDIR)/icon.bmp - endif - endif -else - ifeq ($(suffix $(ICON)), .grf) - export GAME_ICON := $(CURDIR)/$(ICON) - else - export GAME_ICON := $(CURDIR)/$(BUILD)/$(notdir $(basename $(ICON))).grf - endif -endif - -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds $(SOUNDBANK) - -#--------------------------------------------------------------------------------- -else - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).nds: $(OUTPUT).elf $(GAME_ICON) -$(OUTPUT).elf: $(OFILES) - -# source files depend on generated headers -$(OFILES_SOURCES) : $(HFILES) - -# need to build soundbank first -$(OFILES): $(SOUNDBANK) - -#--------------------------------------------------------------------------------- -# rule to build solution from music files -#--------------------------------------------------------------------------------- -$(SOUNDBANK) : $(MODFILES) -#--------------------------------------------------------------------------------- - mmutil $^ -d -o$@ -hsoundbank.h - -#--------------------------------------------------------------------------------- -%.bin.o %_bin.h : %.bin -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) - -#--------------------------------------------------------------------------------- -# This rule creates assembly source files using grit -# grit takes an image file and a .grit describing how the file is to be processed -# add additional rules like this for each image extension -# you use in the graphics folders -#--------------------------------------------------------------------------------- -%.s %.h: %.png %.grit -#--------------------------------------------------------------------------------- - grit $< -fts -o$* - -#--------------------------------------------------------------------------------- -# Convert non-GRF game icon to GRF if needed -#--------------------------------------------------------------------------------- -$(GAME_ICON): $(notdir $(ICON)) -#--------------------------------------------------------------------------------- - @echo convert $(notdir $<) - @grit $< -g -gt -gB4 -gT FF00FF -m! -p -pe 16 -fh! -ftr - --include $(DEPSDIR)/*.d - -#--------------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------------- +include $(BLOCKSDS)/sys/default_makefiles/rom_arm9/Makefile diff --git a/examples/stress_test/source/main.c b/examples/stress_test/source/main.c index f9fec01..76d0bc6 100644 --- a/examples/stress_test/source/main.c +++ b/examples/stress_test/source/main.c @@ -186,8 +186,7 @@ int main(void) int textureID; glGenTextures(1, &textureID); glBindTexture(0, textureID); - if (glTexImage2D(0, 0, GL_RGBA, TEXTURE_SIZE_128, TEXTURE_SIZE_128, 0, - TEXGEN_TEXCOORD, (u8 *)texture128_bin) == 0) + if (glTexImage2D(0, 0, GL_RGBA, 128, 128, 0, TEXGEN_TEXCOORD, texture128_bin) == 0) { printf("Failed to load texture"); while (1) @@ -196,10 +195,10 @@ int main(void) initialize_models(); - iprintf("\x1b[0;0HRotate: Left/Right"); - iprintf("\x1b[1;0HExit demo: START"); + printf("\x1b[0;0HRotate: Left/Right"); + printf("\x1b[1;0HExit demo: START"); - iprintf("\x1b[19;0HTime Ticks us CPU%%"); + printf("\x1b[19;0HTime Ticks us CPU%%"); float rotationY = 0.0f; diff --git a/readme.rst b/readme.rst index fe91e97..6507e43 100644 --- a/readme.rst +++ b/readme.rst @@ -6,8 +6,9 @@ Introduction **DSMA** (DS Model Animation) is a library that allows you to convert animated models saved in MD5 format into a format that can be displayed in the Nintendo DS -in a very efficient way. This library depends on **libnds**, which is -distributed by **devkitPro**. +in a very efficient way. This library depends on **libnds**. You can use the +library with `BlocksDS `_ or `devkitPro +`_. The examples in this repository use BlocksDS. MD5 supports skeletal animation, which lets you reuse the same model with multiple animations (a **md5mesh** file can be used with multiple **md5anim** @@ -31,12 +32,15 @@ functions exposed by the library header. There are multiple examples of how to use the library in this repository. They all use libnds, and most of the 3D setup code is generic libnds 3D setup code. -You can test them with an emulator such as **DeSmuME** or **melonDS** or in real +You can build them with `BlocksDS `_ and you +can test them with an emulator such as **DeSmuME** or **melonDS** or in real hardware with a flashcard. - **basic_model**: Simply load an animated model embedded in the binary. - **blended_animations**: Blend two animations in the same model. - **filesystem_loading**: Load models from the filesystem (with **nitroFS**). + Note that this example won't work in **melonDS** if it's built with devkitPro + due to a bug in their implementation of NitroFS. - **multiple_animations**: Display one model with multiple animations. - **performance**: Show how much CPU time it takes to draw an animated model. - **stress_test**: Show multiple animated models with different animations. @@ -187,9 +191,11 @@ Future work Thanks to --------- -- **devkitPro**: https://devkitpro.org/ +- **devkitPro**: For helping develop the first version of the library. + https://devkitpro.org/ - **Blender**: https://www.blender.org/ -- **Blender** addon used to generate models: https://github.com/KozGit/Blender-2.8-MD5-import-export-addon +- **Blender** addon used to generate models: + https://github.com/KozGit/Blender-2.8-MD5-import-export-addon - MD5 format information: http://tfc.duke.free.fr/coding/md5-specs-en.html - Quaternion to matrix conversion: http://www.songho.ca/opengl/gl_quaternion.html - **DeSmuME**: http://desmume.org/