From 22eca8c8bcb5e1a7a29fd21263123cff8794f853 Mon Sep 17 00:00:00 2001 From: Deletecat Date: Thu, 16 Jul 2026 15:30:11 +0100 Subject: [PATCH 1/2] Fix Ace3DS bootstrap, add EX4DS bootstrap Ace3DS+ carts (_ds_menu.dat) will not boot if the gamecode of the boot file is set to R4XX. This patch removes the game code from the main bootstrap binary, and builds the _dsmenu.dat Ace3DS variant separately with that gamecode. EX4DS cards use the same DLDI and boot file name as the Ace3DS+, but it uses the original R4 encryption key (0x484a) instead of 0x4002. --- BootStrap/Makefile | 25 ++++++++++++++++--------- Makefile | 2 ++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/BootStrap/Makefile b/BootStrap/Makefile index 63b7817..243995c 100644 --- a/BootStrap/Makefile +++ b/BootStrap/Makefile @@ -19,7 +19,8 @@ export TOPDIR := $(CURDIR) all: checkarm7 checkarm9 \ _ds_menu.dat ismat.dat ez5sys.bin \ akmenu4.nds TTMENU.DAT SCFW.SC _BOOT_MP.NDS \ - ACE3DS/_ds_menu.dat ACE3DS/_dsmenu.dat EZDS.dat + ACE3DS/_ds_menu.dat ACE3DS/_dsmenu.dat EZDS.dat \ + EX4DS/_ds_menu.dat _ds_menu.dat : $(TARGET).nds r4tfv2.dldi @cp $(TARGET).nds _ds_menu.nds @@ -32,12 +33,11 @@ ACE3DS/_ds_menu.dat : $(TARGET).nds ace3ds_sd.dldi @dlditool ace3ds_sd.dldi ACE3DS/_ds_menu.nds @r4denc --key 0x4002 ACE3DS/_ds_menu.nds $@ -# Alternative name for some ACE3DS clones. -ACE3DS/_dsmenu.dat : $(TARGET).nds ace3ds_sd.dldi - @[ -d ACE3DS ] || mkdir -p ACE3DS - @cp $(TARGET).nds ACE3DS/_dsmenu.nds - @dlditool ace3ds_sd.dldi ACE3DS/_dsmenu.nds - @r4denc --key 0x4002 ACE3DS/_dsmenu.nds $@ +EX4DS/_ds_menu.dat : $(TARGET).nds ace3ds_sd.dldi + @[ -d EX4DS ] || mkdir -p EX4DS + @cp $(TARGET).nds EX4DS/_ds_menu.nds + @dlditool ace3ds_sd.dldi EX4DS/_ds_menu.nds + @r4denc EX4DS/_ds_menu.nds $@ EZDS.dat: $(TARGET).nds EZDS_DLDI.dldi @cp $< $@ @@ -80,7 +80,14 @@ bootstrap.dsi : $(TARGET).arm7.elf $(TARGET).arm9i.elf #--------------------------------------------------------------------------------- $(TARGET).nds : $(TARGET).arm7.elf $(TARGET).arm9.elf - @ndstool -g "####" "##" "R4XX" -h 0x200 -c $(TARGET).nds -7 $(TARGET).arm7.elf -9 $(TARGET).arm9.elf + @ndstool -h 0x200 -c $(TARGET).nds -7 $(TARGET).arm7.elf -9 $(TARGET).arm9.elf + +# Alternative name for some ACE3DS clones. +ACE3DS/_dsmenu.dat : $(TARGET).arm7.elf $(TARGET).arm9.elf + @[ -d ACE3DS ] || mkdir -p ACE3DS + @ndstool -g "####" "##" "R4XX" -h 0x200 -c ACE3DS/_dsmenu.nds -7 $(TARGET).arm7.elf -9 $(TARGET).arm9.elf + @dlditool ace3ds_sd.dldi ACE3DS/_dsmenu.nds + @r4denc --key 0x4002 ACE3DS/_dsmenu.nds $@ SCFW.SC : $(TARGET).arm7.elf $(TARGET).arm9.elf @ndstool -g "ENG0" "00" "DSONE" -h 0x200 -c SCFW.SC -7 $(TARGET).arm7.elf -9 $(TARGET).arm9.elf @@ -109,6 +116,6 @@ clean: $(MAKE) -C arm9 clean $(MAKE) -C arm7 clean rm -f $(TARGET).nds $(TARGET).arm7.elf $(TARGET).arm9.elf _ds_menu.dat ez5sys.bin akmenu4.nds TTMENU.DAT _BOOT_MP.NDS ismat.dat EZDS.dat - rm -fr ACE3DS + rm -fr ACE3DS EX4DS rm -f bootstrap.dsi $(TARGET).arm9i.elf bootstrap.cia diff --git a/Makefile b/Makefile index 94fcd5e..b07377d 100644 --- a/Makefile +++ b/Makefile @@ -132,6 +132,8 @@ dist: $(BUILD) BootStrap @mkdir hbmenu/ACE3DS @cp BootStrap/ACE3DS/_ds_menu.dat hbmenu/ACE3DS @cp BootStrap/ACE3DS/_dsmenu.dat hbmenu/ACE3DS + @mkdir hbmenu/EX4DS + @cp BootStrap/EX4DS/_ds_menu.dat hbmenu/EX4DS @[ ! -f BootStrap/bootstrap.cia ] || cp -v BootStrap/bootstrap.cia hbmenu @[ ! -d private ] || cp -rv private hbmenu @cp -v testfiles/* hbmenu/nds From 6e1a8393fef9619ddf9947b8e64cc1872877c735 Mon Sep 17 00:00:00 2001 From: Deletecat Date: Thu, 16 Jul 2026 16:07:12 +0100 Subject: [PATCH 2/2] Fix R4 Bootstrap hbmenu would fat init fail using the R4 bootstrap. this is because the DLDI patched binary wasn't being used at the encryption stage. --- BootStrap/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BootStrap/Makefile b/BootStrap/Makefile index 243995c..f77f918 100644 --- a/BootStrap/Makefile +++ b/BootStrap/Makefile @@ -25,7 +25,7 @@ all: checkarm7 checkarm9 \ _ds_menu.dat : $(TARGET).nds r4tfv2.dldi @cp $(TARGET).nds _ds_menu.nds @dlditool r4tfv2.dldi _ds_menu.nds - @r4denc $< _ds_menu.nds $@ + @r4denc _ds_menu.nds $@ ACE3DS/_ds_menu.dat : $(TARGET).nds ace3ds_sd.dldi @[ -d ACE3DS ] || mkdir -p ACE3DS @@ -115,7 +115,7 @@ $(TARGET).arm9i.elf: clean: $(MAKE) -C arm9 clean $(MAKE) -C arm7 clean - rm -f $(TARGET).nds $(TARGET).arm7.elf $(TARGET).arm9.elf _ds_menu.dat ez5sys.bin akmenu4.nds TTMENU.DAT _BOOT_MP.NDS ismat.dat EZDS.dat + rm -f $(TARGET).nds $(TARGET).arm7.elf $(TARGET).arm9.elf _ds_menu.dat _ds_menu.nds ez5sys.bin akmenu4.nds TTMENU.DAT _BOOT_MP.NDS ismat.dat EZDS.dat rm -fr ACE3DS EX4DS rm -f bootstrap.dsi $(TARGET).arm9i.elf bootstrap.cia