From 97d56cd327757953c62d7f22d25b1c8b6206d489 Mon Sep 17 00:00:00 2001 From: RocketRobz Date: Wed, 2 Dec 2020 23:32:18 -0700 Subject: [PATCH] Add DSi-Only screen --- arm9/Makefile | 16 ++++++++++++- arm9/source/arm9.c | 3 +++ arm9/source/dsi_only.c | 53 +++++++++++++++++++++++++++++++++++++++++ gfx/dsiOnly_bot.grit | 12 ++++++++++ gfx/dsiOnly_bot.png | Bin 0 -> 4845 bytes gfx/dsiOnly_top.grit | 12 ++++++++++ gfx/dsiOnly_top.png | Bin 0 -> 5028 bytes 7 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 arm9/source/dsi_only.c create mode 100644 gfx/dsiOnly_bot.grit create mode 100644 gfx/dsiOnly_bot.png create mode 100644 gfx/dsiOnly_top.grit create mode 100644 gfx/dsiOnly_top.png diff --git a/arm9/Makefile b/arm9/Makefile index afa7625..40b5f66 100644 --- a/arm9/Makefile +++ b/arm9/Makefile @@ -18,7 +18,7 @@ BUILD := build SOURCES := source INCLUDES := include DATA := - +GRAPHICS := ../gfx #--------------------------------------------------------------------------------- # options for code generation @@ -59,12 +59,14 @@ export ARM9ELF := $(CURDIR)/$(TARGET).elf export DEPSDIR := $(CURDIR)/$(BUILD) export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(GRAPHICS),$(CURDIR)/$(dir)) \ $(foreach dir,$(DATA),$(CURDIR)/$(dir)) CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) +PNGFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.png))) #--------------------------------------------------------------------------------- # use CXX for linking C++ projects, CC for standard C @@ -81,6 +83,7 @@ endif #--------------------------------------------------------------------------------- export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(PNGFILES:.png=.o) \ $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ @@ -120,6 +123,17 @@ $(ARM9ELF) : $(OFILES) @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$* + + -include $(DEPSDIR)/*.d #--------------------------------------------------------------------------------------- diff --git a/arm9/source/arm9.c b/arm9/source/arm9.c index c55a5e3..2d124ec 100644 --- a/arm9/source/arm9.c +++ b/arm9/source/arm9.c @@ -244,6 +244,9 @@ int verifyNocashFooter(nocash_footer_t *footer){ } int main(void) { + extern void dsiOnly(void); + dsiOnly(); + consoleDemoInit(); iprintf("SafeNANDManager v1.0\n"); iprintf("by Rocket Robz\n"); diff --git a/arm9/source/dsi_only.c b/arm9/source/dsi_only.c new file mode 100644 index 0000000..7dd7c69 --- /dev/null +++ b/arm9/source/dsi_only.c @@ -0,0 +1,53 @@ +#include +#include "dsiOnly_top.h" +#include "dsiOnly_bot.h" + +static void dsiOnly_setBrightness(u8 screen, s8 bright) { + u16 mode = 1 << 14; + + if (bright < 0) { + mode = 2 << 14; + bright = -bright; + } + if (bright > 31) { + bright = 31; + } + *(u16*)(0x0400006C + (0x1000 * screen)) = bright + mode; +} + +void dsiOnly(void) { + if (isDSiMode()) return; // Proceed running on DSi + + *(u16*)0x0400006C |= BIT(14); + *(u16*)0x0400006C &= BIT(15); + dsiOnly_setBrightness(0, 31); + dsiOnly_setBrightness(1, 31); + + videoSetMode(MODE_4_2D); + videoSetModeSub(MODE_4_2D); + + vramSetBankA(VRAM_A_MAIN_BG); + vramSetBankB(VRAM_B_MAIN_BG); + vramSetBankC(VRAM_C_SUB_BG); + vramSetBankD(VRAM_D_LCD); + + // Display DSi Only screen + int bg3 = bgInit(3, BgType_Bmp8, BgSize_B8_256x256, 1, 0); + decompress(dsiOnly_topBitmap, bgGetGfxPtr(bg3), LZ77Vram); + for (int i = 0; i < 16; i++) { + BG_PALETTE[i] = dsiOnly_topPal[i]; + } + + int bg3sub = bgInitSub(3, BgType_Bmp8, BgSize_B8_256x256, 1, 0); + decompress(dsiOnly_botBitmap, bgGetGfxPtr(bg3sub), LZ77Vram); + for (int i = 0; i < 16; i++) { + BG_PALETTE_SUB[i] = dsiOnly_botPal[i]; + } + + dsiOnly_setBrightness(0, 0); + dsiOnly_setBrightness(1, 0); + + while (1) { + swiWaitForVBlank(); + } +} \ No newline at end of file diff --git a/gfx/dsiOnly_bot.grit b/gfx/dsiOnly_bot.grit new file mode 100644 index 0000000..f5287cb --- /dev/null +++ b/gfx/dsiOnly_bot.grit @@ -0,0 +1,12 @@ +-W3 +#bitmap mode +-gb + +# disable alpha and set opaque bit for all pixels +-gT! + +# use lz77 compression +-gzl + +# Set the bit depth to 8 +-gB8 diff --git a/gfx/dsiOnly_bot.png b/gfx/dsiOnly_bot.png new file mode 100644 index 0000000000000000000000000000000000000000..717c980b73436ae21beafe04ead9e7637db0d2f7 GIT binary patch literal 4845 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 GVgCoydAN+P0@ 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