fusee: use pre-rendered splash screen instead of bmp

This commit is contained in:
Michael Scire 2021-01-01 16:26:00 -08:00
parent c3bf204627
commit 539dbf0800
4 changed files with 55 additions and 54 deletions

View file

@ -98,7 +98,7 @@ CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
KIPFILES := loader.kip ncm.kip pm.kip sm.kip ams_mitm.kip spl.kip boot.kip KIPFILES := loader.kip ncm.kip pm.kip sm.kip ams_mitm.kip spl.kip boot.kip
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) fusee-primary.bin \ BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) fusee-primary.bin \
exosphere.bin warmboot.bin rebootstub.bin thermosphere.bin splash_screen.bmp \ exosphere.bin warmboot.bin rebootstub.bin thermosphere.bin splash_screen.bin \
sept-primary.bin sept-secondary_00.enc sept-secondary_01.enc emummc.kip \ sept-primary.bin sept-secondary_00.enc sept-secondary_01.enc emummc.kip \
sept-secondary_dev_00.enc sept-secondary_dev_01.enc mesosphere.bin kernel_ldr.bin \ sept-secondary_dev_00.enc sept-secondary_dev_01.enc mesosphere.bin kernel_ldr.bin \
mariko_fatal.bin $(KIPFILES) mariko_fatal.bin $(KIPFILES)

View file

@ -63,8 +63,14 @@ SECTIONS
PROVIDE (__nxboot_lma__ = LOADADDR(.nxboot_loadable)); PROVIDE (__nxboot_lma__ = LOADADDR(.nxboot_loadable));
KEEP(*(.nxboot.text.start)) KEEP(*(.nxboot.text.start))
nxboot_iram.o(.text*) nxboot_iram.o(.text*)
cluster.o(.text*)
car.o(.text*)
nxboot_iram.o(.rodata*) nxboot_iram.o(.rodata*)
cluster.o(.rodata*)
car.o(.rodata*)
nxboot_iram.o(.data*) nxboot_iram.o(.data*)
cluster.o(.data*)
car.o(.data*)
. = ALIGN(32); . = ALIGN(32);
} >high_iram AT>main :nxboot } >high_iram AT>main :nxboot
@ -73,6 +79,8 @@ SECTIONS
. = ALIGN(32); . = ALIGN(32);
PROVIDE (__nxboot_bss_start__ = ABSOLUTE(.)); PROVIDE (__nxboot_bss_start__ = ABSOLUTE(.));
nxboot_iram.o(.bss* COMMON) nxboot_iram.o(.bss* COMMON)
cluster.o(.bss* COMMON)
car.o(.bss* COMMON)
. = ALIGN(32); . = ALIGN(32);
PROVIDE (__nxboot_end__ = ABSOLUTE(.)); PROVIDE (__nxboot_end__ = ABSOLUTE(.));
} >high_iram :NONE } >high_iram :NONE
@ -246,8 +254,8 @@ SECTIONS
PROVIDE(__sm_kip_size__ = sm_kip_end - sm_kip); PROVIDE(__sm_kip_size__ = sm_kip_end - sm_kip);
PROVIDE(__spl_kip_start__ = spl_kip - __start__); PROVIDE(__spl_kip_start__ = spl_kip - __start__);
PROVIDE(__spl_kip_size__ = spl_kip_end - spl_kip); PROVIDE(__spl_kip_size__ = spl_kip_end - spl_kip);
PROVIDE(__splash_screen_bmp_start__ = splash_screen_bmp - __start__); PROVIDE(__splash_screen_bin_start__ = splash_screen_bin - __start__);
PROVIDE(__splash_screen_bmp_size__ = splash_screen_bmp_end - splash_screen_bmp); PROVIDE(__splash_screen_bin_size__ = splash_screen_bin_end - splash_screen_bin);
PROVIDE(__thermosphere_bin_start__ = thermosphere_bin - __start__); PROVIDE(__thermosphere_bin_start__ = thermosphere_bin - __start__);
PROVIDE(__thermosphere_bin_size__ = thermosphere_bin_end - thermosphere_bin); PROVIDE(__thermosphere_bin_size__ = thermosphere_bin_end - thermosphere_bin);
PROVIDE(__emummc_kip_start__ = emummc_kip - __start__); PROVIDE(__emummc_kip_start__ = emummc_kip - __start__);

View file

@ -23,7 +23,7 @@
#define u8 uint8_t #define u8 uint8_t
#define u32 uint32_t #define u32 uint32_t
#include "splash_screen_bmp.h" #include "splash_screen_bin.h"
#undef u8 #undef u8
#undef u32 #undef u32
@ -47,14 +47,13 @@ void splash_screen_wait_delay(void) {
} }
void display_splash_screen_bmp(const char *custom_splash_path, void *fb_address) { void display_splash_screen_bmp(const char *custom_splash_path, void *fb_address) {
uint8_t *splash_screen = (uint8_t *)splash_screen_bmp; uint8_t *splash_screen = (uint8_t *)splash_screen_bin;
/* Try to load an external custom splash screen. */ /* Try to load an external custom splash screen. */
if ((custom_splash_path != NULL) && (custom_splash_path[0] != '\x00')) { if ((custom_splash_path != NULL) && (custom_splash_path[0] != '\x00')) {
if (!read_from_file(splash_screen, splash_screen_bmp_size, custom_splash_path)) { if (!read_from_file(splash_screen, splash_screen_bin_size, custom_splash_path)) {
fatal_error("Failed to read custom splash screen from %s!\n", custom_splash_path); fatal_error("Failed to read custom splash screen from %s!\n", custom_splash_path);
} }
}
/* Check for 'BM' magic. */ /* Check for 'BM' magic. */
if ((splash_screen[0] == 'B') && (splash_screen[1] == 'M')) { if ((splash_screen[0] == 'B') && (splash_screen[1] == 'M')) {
@ -91,6 +90,11 @@ void display_splash_screen_bmp(const char *custom_splash_path, void *fb_address)
} else { } else {
fatal_error("Invalid splash screen format!\n"); fatal_error("Invalid splash screen format!\n");
} }
} else {
/* Copy the pre-rendered framebuffer. */
memcpy(fb_address, splash_screen, splash_screen_bin_size);
console_display(fb_address);
}
/* Note the time we started displaying the splash. */ /* Note the time we started displaying the splash. */
g_splash_start_time = get_time_us(); g_splash_start_time = get_time_us();

View file

@ -301,17 +301,6 @@ _content_headers:
.asciz "exosphere_fatal" .asciz "exosphere_fatal"
.align 5 .align 5
/* splash_screen content header */
.word __splash_screen_bmp_start__
.word __splash_screen_bmp_size__
.byte CONTENT_TYPE_BMP
.byte CONTENT_FLAG_NONE
.byte CONTENT_FLAG_NONE
.byte CONTENT_FLAG_NONE
.word 0xCCCCCCCC
.asciz "splash_screen"
.align 5
_content_headers_end: _content_headers_end:
/* No need to include this in normal programs: */ /* No need to include this in normal programs: */