diff --git a/Makefile b/Makefile index 0de1983..39d1449 100644 --- a/Makefile +++ b/Makefile @@ -27,46 +27,45 @@ include $(DEVKITARM)/3ds_rules # - icon.png # - /default_icon.png #--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)) -BUILD := build -RESOURCES := resources -SOURCES := source source/services -DATA := data -INCLUDES := include include/services - -APP_TITLE := 3DSident -APP_DESCRIPTION := Get more info about your 3DS, firmware, region etc. -APP_AUTHOR := Joel16 - -ICON := $(RESOURCES)/icon.png -BANNER := $(RESOURCES)/banner.png -JINGLE := $(RESOURCES)/banner.wav -LOGO := $(RESOURCES)/logo.bcma.lz +APP_TITLE := 3DSident +APP_DESCRIPTION := Identity tool for the Nintendo 3DS. +APP_AUTHOR := Joel16 + +TARGET := $(subst $e ,_,$(notdir $(APP_TITLE))) +OUTDIR := out +BUILD := build +RESOURCES := resources +SOURCES := source source/graphics source/services +DATA := data +INCLUDES := include include/graphics include/services + +ICON := $(RESOURCES)/icon.png +BANNER := $(RESOURCES)/banner.png +JINGLE := $(RESOURCES)/banner.wav +ICON_FLAGS := nosavebackups,visible # CIA -APP_PRODUCT_CODE := 3DS-I -APP_UNIQUE_ID := 0x16000 -APP_SYSTEM_MODE := 64MB -APP_SYSTEM_MODE_EXT := Legacy -RSF_FILE := resources/cia.rsf +APP_PRODUCT_CODE := CTR-C-3DSI +APP_UNIQUE_ID := 0x16000 +RSF_FILE := resources/cia.rsf #--------------------------------------------------------------------------------- # options for code generation #--------------------------------------------------------------------------------- -ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft +ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft -CFLAGS := -g -Werror -O2 -mword-relocations \ - -fomit-frame-pointer -ffunction-sections \ - $(ARCH) +CFLAGS := -g -Werror -O2 -mword-relocations \ + -fomit-frame-pointer -ffunction-sections \ + $(ARCH) -CFLAGS += $(INCLUDE) -DARM11 -D_3DS +CFLAGS += $(INCLUDE) -DARM11 -D_3DS -CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 -ASFLAGS := -g $(ARCH) -LDFLAGS = -specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) +ASFLAGS := -g $(ARCH) +LDFLAGS = -specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) -LIBS := -lctru -lm -lpng16 -lz +LIBS := -lctru -lm -lpng16 -lz #--------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level containing @@ -81,7 +80,7 @@ LIBDIRS := $(CTRULIB) $(PORTLIBS) ifneq ($(BUILD),$(notdir $(CURDIR))) #--------------------------------------------------------------------------------- -export OUTPUT := $(CURDIR)/$(TARGET) +export OUTPUT := $(CURDIR)/$(OUTDIR)/$(TARGET) export TOPDIR := $(CURDIR) export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ @@ -110,14 +109,9 @@ else endif #--------------------------------------------------------------------------------- -export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) - -export OFILES_BIN := $(addsuffix .o,$(BINFILES)) \ - $(PICAFILES:.v.pica=.shbin.o) $(SHLISTFILES:.shlist=.shbin.o) - -export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) - -export HFILES := $(PICAFILES:.v.pica=_shbin.h) $(addsuffix .h,$(subst .,_,$(BINFILES))) +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(PICAFILES:.v.pica=.shbin.o) $(SHLISTFILES:.shlist=.shbin.o) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ @@ -139,74 +133,90 @@ else endif ifeq ($(strip $(NO_SMDH)),) - export _3DSXFLAGS += --smdh=$(CURDIR)/$(TARGET).smdh + export _3DSXFLAGS += --smdh=$(OUTPUT).smdh endif ifneq ($(ROMFS),) export _3DSXFLAGS += --romfs=$(CURDIR)/$(ROMFS) endif -.PHONY: $(BUILD) clean all cia +.PHONY: $(BUILD) clean all #--------------------------------------------------------------------------------- -all: $(BUILD) - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile +all: 3dsx cia + +3dsx: $(BUILD) $(OUTPUT).3dsx +cia : $(BUILD) $(OUTPUT).cia + +citra: export CITRA_MODE = 1 +citra: 3dsx #--------------------------------------------------------------------------------- $(BUILD): - @[ -d $@ ] || mkdir -p $@ + @mkdir -p $(OUTDIR) + @[ -d "$@" ] || mkdir -p "$@" + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile #--------------------------------------------------------------------------------- clean: @echo clean ... - @rm -fr $(BUILD) $(TARGET).bin $(TARGET).3dsx $(TARGET).smdh $(TARGET).cia $(TARGET).elf - + @rm -fr $(BUILD) $(OUTDIR) #--------------------------------------------------------------------------------- -cia: $(BUILD) - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile cia +ifeq ($(strip $(NO_SMDH)),) +$(OUTPUT).3dsx : $(OUTPUT).elf $(OUTPUT).smdh +else +$(OUTPUT).3dsx : $(OUTPUT).elf +endif #--------------------------------------------------------------------------------- -3dsx: $(BUILD) - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile 3dsx +MAKEROM ?= makerom -#--------------------------------------------------------------------------------- -else +MAKEROM_ARGS := -elf "$(OUTPUT).elf" -rsf "$(RSF_FILE)" -banner "$(BUILD)/banner.bnr" -icon "$(BUILD)/icon.icn" -DAPP_TITLE="$(APP_TITLE)" -DAPP_PRODUCT_CODE="$(APP_PRODUCT_CODE)" -DAPP_UNIQUE_ID="$(APP_UNIQUE_ID)" -DEPENDS := $(OFILES:.o=.d) +ifneq ($(strip $(LOGO)),) + MAKEROM_ARGS += -logo "$(LOGO)" +endif -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -all: $(OUTPUT).cia $(OUTPUT).3dsx +ifeq ($(strip $(ROMFS)),) +$(OUTPUT).cia: $(OUTPUT).elf $(BUILD)/banner.bnr $(BUILD)/icon.icn + $(MAKEROM) -f cia -o "$@" -target t -exefslogo $(MAKEROM_ARGS) +else +$(OUTPUT).cia: $(OUTPUT).elf $(BUILD)/banner.bnr $(BUILD)/icon.icn + $(MAKEROM) -f cia -o "$@" -target t -exefslogo $(MAKEROM_ARGS) +endif -3dsx: $(OUTPUT).3dsx -cia: $(OUTPUT).cia +BANNERTOOL ?= bannertool -ifeq ($(strip $(NO_SMDH)),) -$(OUTPUT).3dsx : $(OUTPUT).elf $(OUTPUT).smdh -$(OUTPUT).smdh : $(TOPDIR)/Makefile +ifeq ($(suffix $(BANNER)),.cgfx) + BANNER_ARG := -ci else -$(OUTPUT).3dsx : $(OUTPUT).elf + BANNER_ARG := -i endif -$(OUTPUT).elf : $(OFILES) +ifeq ($(suffix $(JINGLE)),.cwav) + JINGLE_ARG := -ca +else + JINGLE_ARG := -a +endif + +$(BUILD)/banner.bnr : $(BANNER) $(JINGLE) + $(BANNERTOOL) makebanner $(BANNER_ARG) "$(BANNER)" $(JINGLE_ARG) "$(JINGLE)" -o "$@" + +$(BUILD)/icon.icn : $(APP_ICON) + $(BANNERTOOL) makesmdh -s "$(APP_TITLE)" -l "$(APP_DESCRIPTION)" -p "$(APP_AUTHOR)" -i "$(APP_ICON)" -f "$(ICON_FLAGS)" -o "$@" -$(OUTPUT).smdh : $(APP_ICON) - @bannertool makesmdh -s "$(APP_TITLE)" -l "$(APP_DESCRIPTION)" -p "$(APP_AUTHOR)" -i $(APP_ICON) -o $@ - @echo "built ... $(notdir $@)" +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) -$(OUTPUT).cia : $(OUTPUT).elf $(OUTPUT).smdh $(TARGET).bnr - @makerom -f cia -o $(OUTPUT).cia -DAPP_ENCRYPTED=false -DAPP_UNIQUE_ID=$(APP_UNIQUE_ID) \ - -elf $(OUTPUT).elf -rsf $(TOPDIR)/$(RSF_FILE) \ - -icon $(OUTPUT).smdh -banner $(TARGET).bnr \ - -exefslogo -target t - @echo "built ... $(notdir $@)" +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- -$(TARGET).bnr : $(TOPDIR)/$(BANNER) $(TOPDIR)/$(JINGLE) - @bannertool makebanner -o $@ -i $(TOPDIR)/$(BANNER) -ca $(TOPDIR)/$(JINGLE) - @echo "built ... $@" +$(OUTPUT).elf : $(OFILES) #--------------------------------------------------------------------------------- # you need a rule like this for each extension you use as binary data @@ -215,7 +225,7 @@ $(TARGET).bnr : $(TOPDIR)/$(BANNER) $(TOPDIR)/$(JINGLE) #--------------------------------------------------------------------------------- @echo $(notdir $<) @$(bin2o) - + #--------------------------------------------------------------------------------------- endif #--------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/resources/cia.rsf b/resources/cia.rsf index d80beb4..e4422be 100644 --- a/resources/cia.rsf +++ b/resources/cia.rsf @@ -1,11 +1,11 @@ BasicInfo: - Title : $(APP_TITLE) - ProductCode : $(APP_PRODUCT_CODE) + Title : "3DSident" + ProductCode : "CTR-C-3DSI" Logo : Homebrew TitleInfo: Category : Application - UniqueId : $(APP_UNIQUE_ID) + UniqueId : 0x16000 Option: UseOnSD : true # true if App is to be installed to SD @@ -15,21 +15,6 @@ Option: EnableCompress : true # Compresses where applicable (currently only exefs:/.code) AccessControlInfo: - CoreVersion : 2 - - # Exheader Format Version - DescVersion : 2 - - # Minimum Required Kernel Version (below is for 4.5.0) - ReleaseKernelMajor : "02" - ReleaseKernelMinor : "33" - - # ExtData - UseExtSaveData : false # enables ExtData - #ExtSaveDataId : 0x300 # only set this when the ID is different to the UniqueId - - # FS:USER Archive Access Permissions - # Uncomment as required FileSystemAccess: - CategorySystemApplication - CategoryHardwareCheck @@ -63,149 +48,88 @@ AccessControlInfo: - CreateSeed - UseCardSpi - # Process Settings - MemoryType : Application # Application/System/Base - SystemMode : $(APP_SYSTEM_MODE) # 64MB(Default)/96MB/80MB/72MB/32MB + IdealProcessor : 0 AffinityMask : 1 + Priority : 16 + MaxCpu : 0x9E # Default - HandleTableSize : 0x200 DisableDebug : false EnableForceDebug : false - CanWriteSharedPage : true + CanWriteSharedPage : false CanUsePrivilegedPriority : false - CanUseNonAlphabetAndNumber : true - PermitMainFunctionArgument : true - CanShareDeviceMemory : true + CanUseNonAlphabetAndNumber : false + PermitMainFunctionArgument : false + CanShareDeviceMemory : false RunnableOnSleep : false - SpecialMemoryArrange : true - - # New3DS Exclusive Process Settings - SystemModeExt : $(APP_SYSTEM_MODE_EXT) # Legacy(Default)/124MB/178MB Legacy:Use Old3DS SystemMode - CpuSpeed : $(APP_CPU_SPEED) # 268MHz(Default)/804MHz - EnableL2Cache : true # false(default)/true - CanAccessCore2 : true - - # Virtual Address Mappings - IORegisterMapping: - - 1ff00000-1ff7ffff # DSP memory + SpecialMemoryArrange : false + CoreVersion : 2 + DescVersion : 2 + + ReleaseKernelMajor : "02" + ReleaseKernelMinor : "33" + MemoryType : Application + HandleTableSize: 512 + IORegisterMapping: + - 1ff50000-1ff57fff + - 1ff70000-1ff77fff MemoryMapping: - - 1f000000-1f5fffff:r # VRAM - - # Accessible SVCs, : + - 1f000000-1f5fffff:r SystemCallAccess: + ArbitrateAddress: 34 + Break: 60 + CancelTimer: 28 + ClearEvent: 25 + ClearTimer: 29 + CloseHandle: 35 + ConnectToPort: 45 ControlMemory: 1 - QueryMemory: 2 - ExitProcess: 3 - GetProcessAffinityMask: 4 - SetProcessAffinityMask: 5 - GetProcessIdealProcessor: 6 - SetProcessIdealProcessor: 7 - CreateThread: 8 - ExitThread: 9 - SleepThread: 10 - GetThreadPriority: 11 - SetThreadPriority: 12 - GetThreadAffinityMask: 13 - SetThreadAffinityMask: 14 - GetThreadIdealProcessor: 15 - SetThreadIdealProcessor: 16 - GetCurrentProcessorNumber: 17 - Run: 18 + CreateAddressArbiter: 33 + CreateEvent: 23 + CreateMemoryBlock: 30 CreateMutex: 19 - ReleaseMutex: 20 CreateSemaphore: 21 - ReleaseSemaphore: 22 - CreateEvent: 23 - SignalEvent: 24 - ClearEvent: 25 + CreateThread: 8 CreateTimer: 26 - SetTimer: 27 - CancelTimer: 28 - ClearTimer: 29 - CreateMemoryBlock: 30 - MapMemoryBlock: 31 - UnmapMemoryBlock: 32 - CreateAddressArbiter: 33 - ArbitrateAddress: 34 - CloseHandle: 35 - WaitSynchronization1: 36 - WaitSynchronizationN: 37 - SignalAndWait: 38 DuplicateHandle: 39 - GetSystemTick: 40 + ExitProcess: 3 + ExitThread: 9 + GetCurrentProcessorNumber: 17 GetHandleInfo: 41 - GetSystemInfo: 42 + GetProcessId: 53 + GetProcessIdOfThread: 54 + GetProcessIdealProcessor: 6 GetProcessInfo: 43 + GetResourceLimit: 56 + GetResourceLimitCurrentValues: 58 + GetResourceLimitLimitValues: 57 + GetSystemInfo: 42 + GetSystemTick: 40 + GetThreadContext: 59 + GetThreadId: 55 + GetThreadIdealProcessor: 15 GetThreadInfo: 44 - ConnectToPort: 45 + GetThreadPriority: 11 + MapMemoryBlock: 31 + OutputDebugString: 61 + QueryMemory: 2 + ReleaseMutex: 20 + ReleaseSemaphore: 22 SendSyncRequest1: 46 SendSyncRequest2: 47 SendSyncRequest3: 48 SendSyncRequest4: 49 SendSyncRequest: 50 - OpenProcess: 51 - OpenThread: 52 - GetProcessId: 53 - GetProcessIdOfThread: 54 - GetThreadId: 55 - GetResourceLimit: 56 - GetResourceLimitLimitValues: 57 - GetResourceLimitCurrentValues: 58 - GetThreadContext: 59 - Break: 60 - OutputDebugString: 61 - ControlPerformanceCounter: 62 - CreatePort: 71 - CreateSessionToPort: 72 - CreateSession: 73 - AcceptSession: 74 - ReplyAndReceive1: 75 - ReplyAndReceive2: 76 - ReplyAndReceive3: 77 - ReplyAndReceive4: 78 - ReplyAndReceive: 79 - BindInterrupt: 80 - UnbindInterrupt: 81 - InvalidateProcessDataCache: 82 - StoreProcessDataCache: 83 - FlushProcessDataCache: 84 - StartInterProcessDma: 85 - StopDma: 86 - GetDmaState: 87 - RestartDma: 88 - DebugActiveProcess: 96 - BreakDebugProcess: 97 - TerminateDebugProcess: 98 - GetProcessDebugEvent: 99 - ContinueDebugEvent: 100 - GetProcessList: 101 - GetThreadList: 102 - GetDebugThreadContext: 103 - SetDebugThreadContext: 104 - QueryDebugProcessMemory: 105 - ReadProcessMemory: 106 - WriteProcessMemory: 107 - SetHardwareBreakPoint: 108 - GetDebugThreadParam: 109 - ControlProcessMemory: 112 - MapProcessMemory: 113 - UnmapProcessMemory: 114 - CreateCodeSet: 115 - CreateProcess: 117 - TerminateProcess: 118 - SetProcessResourceLimits: 119 - CreateResourceLimit: 120 - SetResourceLimitValues: 121 - AddCodeSegment: 122 - Backdoor: 123 - KernelSetState: 124 - QueryProcessMemory: 125 - - # Service List - # Maximum 34 services (32 if firmware is prior to 9.6.0) - ServiceAccessControl: + SetThreadPriority: 12 + SetTimer: 27 + SignalEvent: 24 + SleepThread: 10 + UnmapMemoryBlock: 32 + WaitSynchronization1: 36 + WaitSynchronizationN: 37 + InterruptNumbers: + ServiceAccessControl: - APT:U - ac:u - act:u @@ -230,6 +154,7 @@ AccessControlInfo: - mcu::HWC - ndm:u - news:s + - nim:u - nwm::EXT - nwm::UDS - ps:ps diff --git a/source/main.c b/source/main.c index 144f12c..1e08d91 100644 --- a/source/main.c +++ b/source/main.c @@ -180,7 +180,7 @@ int main(int argc, char *argv[]) consoleInit(GFX_TOP, NULL); printf("\x1b[1;1H"); //Move the cursor to the top left corner of the screen - printf("\x1b[32;1m3DSident 0.7.7\x1b[0m\n\n"); + printf("\x1b[32;1m3DSident 0.7.8\x1b[0m\n\n"); //=====================================================================// //------------------------------Firm Info------------------------------//